Tuesday, December 30, 2008

Search for user generated playlists in Last.fm using Google

SNR of playlists is higher than tag based last.fm radios. So I decided to hunt for playlists containing artists I want to listen.

Searching for such playlists is pretty simple, just search for:

site:last.fm "play this playlist" "aphex twin"

on Google.

For example, http://www.google.com/search?hl=en&client=opera&rls=en&hs=pDc&q=site%3Alast.fm+%22play+this+playlist%22+%22aphex+twin%22&btnG=Search

Replace "aphex twin" with your choice of artist.

See also: http://www.last.fm/api/playlists

Using URIs on that page, one can listen to the playlists in the last.fm software. For example, if the ID of the playlist is 2564278, go to lastfm://playlist/2564278 . (The ID is retrieved from the location bar, which will have the following form: http://www.last.fm/listen/playlist/2564278/shuffle ) This is currently broken since it only allows 30-second previews on the client software, unlike the Flash player on the web site which allows full length song listening. As a remedy, try lastfm://user/ustunozgur/playlist. Replace ustunozgur with the name of the user.

Friday, December 19, 2008

Monday, November 03, 2008

No less deep than the power of the fascists

"We must neglect nothing in our struggle against that lot. What they're planning is nothing small, make no mistake about it. They're planning for thirty thousand years ahead. Colossal things. Colossal crimes. They stop at nothing. They're out to destroy everything. Every living cell contracts under their blows. That is why we too must think of everything. They cripple the baby in the mother's womb. We must on no account leave out the children." While he was speaking like this I felt a power being exercised over me which was equal in strength to the power of fascism--I mean a power that sprang from the depths of history no less deep than the power of the fascists."

-- Walter Benjamin, quoting his conversation with Bertolt Brecht

‘Bu kadere karşı verdiğimiz savaşta hiçbir şeye kayıtsız kalmamalıyız. Onlar küçük işler peşinde değil, bundan hiç şüphen olmasın. Otuz bin yıllık tasarıları var. Çok büyük şeyler tasarlıyorlar. Çok büyük suçlar. Hiçbir sınır dinlemeyecekler. Her şeyi yoketmeye çalışacaklar. Her yaşayan hücre onların darbeleriyle ezilecek. İşte biz de bunun için her şeyi düşünmek zorundayız. Çocuğu daha ana rahmindeyken kötürüm ediyorlar. Çocukları hiçbir zaman dünyamızın dışında bırakmamalıyız.’ O böyle konuşurken faşizm kadar zorlu bir gücün varlığını hissediyordum üstümde: faşistlerinki kadar büyük, gene en az faşistlerin gücü kadar derinden gelen, tarihin derinliklerinden fışkıran bir güçtü bu. Çok tuhaf, yepyeni bir duyguydu bu benim için.

-- Walter Benjamin, Bertolt Brecht'le bir konusmasini aktariyor.

Walter Benjamin, 1940'ta Nazilerden kacip, Katalonya sinirini gecmeye calisirken intihar etti.

Mi?

Huseyin Uzmez, 2008 Turkiye'sinde 14 yasinda tecavuz ettigi "insan" yeterli travmayi geciremedigi icin tahliye edildi. Hapishane cikisinda 77'lik biri kopukler sacarken agzindan, 27'lik esi yalniz birakmiyordu onu.

Huseyin Uzmez su hayatta hangi yuregi uzmez ki?

Saturday, November 01, 2008

weak and powerless

http://www.youtube.com/watch?search=&mode=related&v=fj43n63cJN4

Saturday, October 25, 2008

Blogger (Blogspot) Banned in Turkey!

After Youtube, Blogspot has also been banned in Turkey! Hurray for democracy! Yay for free speech!

Friday, October 24, 2008

Devrimler ve Degisim

Ateşe tapan bir kimseden satın alınan bir inek, yeni sahibine kendisini sağdırmazsa, yeni sahibi ateşe tapanların kılığına girebilir!

Monday, October 20, 2008

God is an Astronaut

See also: http://www.last.fm/music/God+Is+an+Astronaut/+tracks

Wednesday, October 15, 2008

o

uyuyormus tek konusmak istedigi.

laf!

uyanamasin hic,

sen birini gomdun ya bir anda.

"sanki yoksun gibi sanki yalanmışız gibi"

yasam agir, cok agir.

Friday, October 10, 2008

Thursday, September 25, 2008

Kazim Kanat

Kazim Kanat öldü. Guzel insandi, eglenceli insandi, cok severdim. Tum Besiktaslilar'in basi sagolsun, bir abimizi, bir dostumuzu kaybettik. Aklimda hep onu anarsizmle suclayan Ahmet Cakar'a "Tabii anarsistim ben. 68 kusagiyim" demesiyle kalacak.

Tuesday, September 23, 2008

give me my, give me my wings

"what have i done to be a son to an angel

what have i done to be worthy

daylight dims leaving cold fluorescence

difficult to see with this light

please forgive this selfish question, but

what am i to say to all these ghouls tonight"

"daylight dims leaving cold fluorescence.

difficult to see you in this light.

please forgive this bold suggestion:

should you see your maker's face tonight,

look him in the eye, look him in the eye, and tell him:

i never lived a lie, never took a life, but surely saved one.

hallelujah, it's time for you to bring me home."

Monday, September 22, 2008

vekaleten yaşamak

"we all feed on tragedy, its like blood to a vampire.

vicariously i, live while the whole world dies.

much better you than i."

ride the spiral

"and following our will and wind we may just go where no one's been. we'll ride the spiral to the end and may just go where no one's been. spiral out. keep going."

Sunday, September 21, 2008

Gökçe çiçek

"Bugün bahçemizde onu ağırlamanın tam zamanıdır. Bir kez daha. Bundan tam 28 yıl önce onun son bakışıyla yaralandık. .... Erdal Eren. Kurtaramadığımız kardeşimiz. İdam sehpasının gölgesinde bir çırpıda büyüyüvermiş çocuk. Yakın tarihimizin bir dönemecinde bıraktık onu. Bütün sarılmamış yaralar gibi hâlâ kanıyor. Erdal, bize bakıyor hâlâ." http://www.radikal.com.tr/Default.aspx?aType=YazarYazisi&ArticleID=898436#

Friday, September 12, 2008

12 Eylul

Bugun 12 Eylul, kalbimin sol yani sizliyor. Unutulmasin unutturulmasin o insanlari katledenlerin vahseti. Unutulmasin kanla insanlik kurtaranlarin cirkin ruhu. Soz, bitmis coktan. Insanligi idam ettiler. 28 yil once.

Monday, September 08, 2008

çok özledik

ağaçlar sonbahara hazırlanıyor
bu şehir o eski istanbul mudur
karanlıkta bulutlar parçalanıyor
sokak lambaları birden yanıyor
kaldırımlarda yağmur kokusu
ben sana mecburum sen yoksun


Sunday, September 07, 2008

Ambient awareness

This NYT article talks about the current online tools we use nowadays. Some notes: - ambient awareness: A new term used to describe the incessant online contact. - "online awareness as a reaction to social isolation" : - Dunbar number: the estimated average number of people one can connect to at a time; 150. For apes, the number is 55. - Socialness through modern technology essentially helps the weak ties, not the already strong ties or the Dunbar number. - “weak ties” greatly expand your ability to solve problems, since your friends are so similar to you to be of much help when a new problem emerges: "outsourcing your life" - Dangers: Parasocial relationships, as with a celebrity? A common plague of Facebook: the recent ex. - dynamics of small-town life revitalizing: "So we’re going back to a more normal place, historically. If you look at human history, the idea that you would drift through life, going from new relation to new relation, that’s very new. It’s just the 20th century."

Monday, August 25, 2008

nilufer

zamanin eli degdi bize coktan degisti her sey ayni degiliz ikimiz de zaaflarina bir gece hatalarina bir nilufer sevgisizligine bir kalp verdim artik geri ver, geri veremezsin aldiklarini artik geri ver, geri verilmez hicbir yanilgi yokluguma emanet et sen de benden kalanlari her seyi al bana beni geri ver bir sansim olsun baska yer baska zaman sensiz omrum olsun her seyi al bir sansim olsun baska yer baska zaman sensiz omrum olsun

aysel git başımdan

aysel git başımdan aysel git başımdan ben sana göre değilim ölümüm birden olacak seziyorum. hem kötüyüm karanlığım biraz çirkinim aysel git başımdan istemiyorum. benim yağmurumda gezinemezsin üşürsün dağıtır gecelerim sarışınlığını uykularımı uyusan nasıl korkarsın, hiçbir dakikamı yaşayamazsın. aysel git başımdan ben sana göre değilim. benim icin kirletme aydınlığını, hem kötüyüm karanlığım biraz çirkinim islığımı denesen hemen düşürürsün, gözlerim hızlandırır tenhalığını yanlış şehirlere götürür trenlerim. ya ölmek ustalığını kazanırsın, ya korku biriktirmek yetisini. acılarım iyice bol gelir sana, sevincim bir türlü tutmaz sevincini. aysel git başımdan ben sana göre değilim. ümitsizliğimi olsun anlasana hem kötüyüm karanlığım biraz çirkinim. sevindiğim anda sen üzülürsün. sonbahar uğultusu duymamışsın ki içinden bir gemi kalkıp gitmemiş, uzak yalnızlık limanlarına. aykırı bir yolcuyum dünya geniş, büyük bir kulak çınlıyor içimdeki. çetrefil yolculuğum kesinleşmiş. sakın başka bir şey getirme aklına. aysel git başımdan ben sana göre değilim, ölümüm birden olacak seziyorum, hem kötüyüm karanlığım biraz çirkinim. aysel git başımdan seni seviyorum...

Thursday, August 21, 2008

yüzün

kaç kurtar kendini ben oyalarım..git.. içimde ne varsa sana alışan.. hiç olmamıştı belki.. hayat yalanlar bizi. dilerim güçlüdür zaman, bu acıdan. yağmurdan sonra toprak kokusu yüzün. toprak kokusu yüzün. dokunsam da özlesem de aynı hüzün. aynı hüzün. bir adam bul kendine sana aynalar tutmasın o kadar güzel yüzün içine bakmasın seni korkutmasın özlesen de arasan da kendine sakla.kendine sakla. herkes her şey senin olsun. bir beni yasakla.bir beni yasakla. bir adam bul kendine sana aynalar tutmasın o kadar güzel yüzün içine bakmasın seni korkutmasın özlesen de arasan da kendine sakla.kendine sakla. herkes her şey senin olsun. bir beni yasakla.bir beni yasakla. bir beni yasakla. tek beni yasakla.

Tuesday, August 05, 2008

TED Talks

I love TED Talks. They are entertaining, informative, mind boggling. Probably the best talks you will find on the net. Here are the top 10 talks so far. Must see!

Underwater wonders

Friday, May 09, 2008

Disable Anti-Aliasing in Matlab in Mac OS X : AntiAntiAliasing

Usual disabling of font smoothing does not work for Matlab 2008a since it uses Java for the IDE. To overcome this, create a file called java.opts with the following content: -Dapple.awt.textantialiasing=off and put it under bin/maci folder under /Applications/Matlab directory. Now editor and command line should be aliased, even though some parts of the GUI stay the same. Also, under Leopard, slow IDE performance is solved by appending this line in java.opts in a separate line: -Dapple.awt.graphics.UseQuartz=true Note that these should be on separate lines and no space should be between the options. You can check whether this works by the command: java.lang.System.getProperty('apple.awt.graphics.UseQuartz')

Matlab in Aquamacs under OS X 10.5

One can use Matlab without the IDE, under emacs. You need to set the value of matlab-shell-command-switches to '("-nojvm -nosplash") , and in .bash_profile; append export DISPLAY=localhost:0.0

Friday, May 02, 2008

alltop

alltop : a nice content aggregator on various topics

pbcopy : Copy from Terminal Output to Clipboard

OS X has a nice command called pbcopy which lets you to copy terminal output to the clipboard. Through command line redirection, you pipe the output to pbcopy. E.g.: make &> | pbcopy

Multiple Music Libraries in itunes

I keep some of my music on an external disk, however when the disk is not plugged, itunes cannot find the files and stops playback. One fix for this is to have multiple itunes libraries : one for both the files in the internal and external disks; and another for files only in the internal disk. To create and select which library itunes will use, hold down Option in Mac (Shift in Windows) when opening itunes. It will ask you which library to use; and whether you want to create another library. Typically, your current library resides in the "itunes" folder in your "Music" directory; another directory will be created inside the "Music" directory. I have named my libraries "ExternalInternal" and "Internal"; and when it asks you which library to use, typing the first few letters will take you to the matching folder; so that you don't have to scroll down to find them. There's also an app called Libra which takes care of this issue, though I haven't tried it yet. I assume it was useful when this feature was not implemented yet in itunes, i.e. pre itunes 7.

Tuesday, April 29, 2008

Improving Quicklook : Make Quicklook Recognize Text Files without the Extension txt

qlmanage -p -c public.plain-text "$@" 2> /dev/null & I got this from here. Also, Folder.qlgenerator is noteworthy.

QLColorcode : Syntax Highlighting for Quicklook

Syntax highlighting for Quicklook : QLColorcode

Sunday, April 27, 2008

Switch Control and Alt buttons in Windows (for OS X users)

See http://alanhogan.com/tips/swap-left-alt-and-ctrl-keys-in-windows

Saturday, April 26, 2008

Two nifty mouse related Windows apps : Strokeit and Txmouse

I rarely use Windows these days, but when I do, there are some apps I can't do without. One of them is Strokeit, which allows the user to do mouse gestures for some commands. (which Opera users are lucky to have by default). So, just by moving the mouse at the NorthEast direction while holding the right key, you can perform "maximize" action, without going over to the title bar. Another nice app I discovered today is txmouse. For X11 like windows handling, I had previously tried Tweakui, however it had the annoying feature of auto-raising of the pointed window. Basically txmouse allows you to interact with non-focused windows without clicking inside them. Linux and Mac users already have this possibility (though in OS X, only scrolling is allowed -- point-to-focus is not allowed without 3rd party apps). It also brings the select to copy - middle click to paste functionality.

Friday, April 25, 2008

Speed up Make (Compilation) Process

make can make use of multiple cpu's. Simply use it as: make -j2 where 2 is the # of CPU's you have.

Modify iTunes link arrows' behavior

defaults write com.apple.iTunes invertStoreLinks -bool YES via : MacOSXHints

Narrow to Region / Code Folding in Emacs

You can hide/show certain parts of a document using: - narrow-to-region : C-x n n - narrow-to-page : C-x n p - show all : C-x n w To define a page, insert ^L characters to keypoint by " C-q C-l". See also: All-out mode

Skeletons for Emacs

(define-skeleton skeleton-c++-mode-cout
" Prints out a variable using cout " 
" Print variable : "
"\ncout << \" " str "\" << " str " << endl;\n" )

(global-set-key [?\C-p] 'skeleton-c++-mode-cout)
This code snippet will automatically create a cout line for a variable.

Sample Doxygen File

Doxygen is nice for creating documentation from source files. Here is a sample Doxyfile: Usage: 1. Document a file

/**
  \file
  \brief File description */
2. Document a function

/**
  \param msg Message to be encoded
  \param G Generator matrix for the (n,k) non-extended Hamming encoder
  \return Encoded matrix
  \author Ustun Ozgur
*/
3. Document a struct/class etc.

/**
  \struct Params_Chase
  \brief Structure holding all the Chase-II decoder variables
  \param alpha Extrinsic info weight
  \param beta Reliability multiplier for bits with no competing codeword available
  \param btc_iter Number of iterations
  \param s Unreliable bits
*/
4. Change the main page

/*! \mainpage Block Turbo Coder
   \section ...
*/

Turkish mode : turkish.el for emacs

http://www.denizyuret.com/turkish/turkish.el "This is for people trying to type Turkish documents on a U.S. keyboard." See http://denizyuret.blogspot.com/2006/11/emacs-turkish-mode.html For example, if you write Ustun, it will automatically convert that to Üstün.

Colloquy Bug : Hides Channel Output

Sometimes Colloquy makes the text on a channel invisible. Type "/reload style" to make content visible again.

Subversion for Source Code Revisions

I currently use subversion for source code revisions. Assembla is perfect for hosting your project. Some commands: svn up : Update to latest revision svn commit -m "Commit message" : Commit changes svn stat : See what has changed svn diff : See diff's (all files) svn diff a.c : See diff of a.c svn co : Checkout, initial command svn cat a.c --revision PREV or HEAD or 123 : get specific revisions of a.c For Windows, tortoisesvn is perfect. On OS X, I use commandline and svnX.

Disable Antialiasing in OS X

1. Per app setting: defaults write -app Opera AppleAntiAliasingThreshold 40 where 40 is your threshold. 2. Global setting defaults write -g AppleAntiAliasingThreshold 40 or use Tinkertool.

Cleansozluk

cleansozluk : "Bu script ek$i sozlukteki tüm reklamlari otomatik olarak kaldırır. Normal theme'e dönüşü otomatik olarak sağlar" Bazi buglari var, ama ise yariyor.

N800 Messages

Here are N800 related messages I posted on InternetTabletTalk forums : http://www.internettablettalk.com/forums/search.php?searchid=1735919

LaTeX Tips

1. Read http://tobi.oetiker.ch/lshort/lshort.pdf 2. Use TeXlive for Mac and MikTeX for Windows. 3. Use emacs auctex extension for editing. 4. Skim auto-reloads pdf's. 5. Read LaTeX as lah-tech as in technology, not as lah-teks.

OS X Apps I'm Using

See http://osx.iusethis.com/user/ustunozgur.

Opera Adblock

http://www.fanboy.co.nz/adblock/opera/

.inputrc


"\eo": "\C-p\C-a\ef "
"\e[A": history-search-backward
"\e[B": history-search-forward
set completion-ignore-case on
set show-all-if-ambiguous on
"\es": menu-complete

.bash_profile


alias ..='cd ..'
alias home='cd ~'
alias mat='cd ~/Documents/Matlab'
alias doc='cd ~/Documents/'
alias ping='ping -c 10'
alias ls='ls -G'
alias qlf='qlmanage -p'
export DISPLAY=localhost:0.0
shopt -s histappend
PROMPT_COMMAND='history -a'
shopt -s cdspell
test -r /sw/bin/init.sh && . /sw/bin/init.sh
if [ "$TERM" != 'dumb' ] && [ -n "$BASH" ] && [ -n "$PS1" ]
then
       if [ `/usr/bin/whoami` = 'root' ]
       then
               export PS1='[\[\033[01;31m\]\h \[\033[01;34m\]\W \$ \[\033[00m\]'
       else
               export PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]'
       fi
fi

alias matlab2='matlab -nodesktop -nosplash'
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

export HISTCONTROL=ignoreboth

Bash tips

http://www.ukuug.org/events/linux2003/papers/bash_tips/

.emacs

I prefer Aquamacs. On Windows, I use Emacs W32. The following is for Aquamacs.

(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'meta)


(setq inhibit-startup-message t)
(defun my-c-initialization-hook ()
 (define-key c-mode-base-map "\C-m" 'c-context-line-break)
 (add-hook 'c-initialization-hook 'my-c-initialization-hook)
)
(global-set-key [C-tab] 'next-buffer)
(global-set-key [C-S-tab] 'previous-buffer)
(global-set-key [S-tab] 'other-window)
(global-set-key [f2] 'save-buffer)
(global-set-key [f5] 'speedbar)
(global-set-key [f7] 'my-save-and-compile)
(global-set-key [f6] 'other-window)
(global-set-key [C-f6] 'comment-or-uncomment-region-or-line)
;(global-set-key [A-tab] 'other-window)
(global-set-key [M-f12] 'calendar)
(global-set-key [M-f9] 'kill-some-buffers)
(global-set-key [C-f4] 'kill-current-buffer)
;(global-set-key [?\A-h] 'mark-paragraph) sfsdfsdf 

(global-set-key [?\A- ] 'just-one-space)
(global-set-key [M-f1] 'man)
(global-set-key [?\A-n] 'new-frame)

(fset 'yes-or-no-p 'y-or-n-p)

;; Make control+pageup/down scroll the other buffer
(global-set-key [C-next] 'scroll-other-window)
(global-set-key [C-prior] 'scroll-other-window-down)
(global-set-key "\C-z" 'shell) ; or eshell
(global-set-key (kbd "M-a") 'execute-extended-command)

; return a backup file path of a give file path
; with full directory mirroring from a root dir
; non-existant dir will be created
(defun my-backup-file-name (fpath)
  "Return a new file path of a given file path.
If the new path's directories does not exist, create them."
  (let (backup-root bpath)
    (setq backup-root "~/.emacs.d/emacs-backup")
    (setq bpath (concat backup-root fpath "~"))
    (make-directory (file-name-directory bpath) bpath)
    bpath
  )
)
(setq make-backup-file-name-function 'my-backup-file-name)


(defun dotemacs ()
 "Open .emacs"
 (interactive)
 (find-file "~/Library/Preferences/Aquamacs Emacs/Preferences.el"))

(add-to-list 'load-path "~/elisp")
(setq-default abbrev-mode t)
(read-abbrev-file "~/.abbrev_defs")
(setq save-abbrevs t)

(setq require-final-newline 't)

;; Save the state of emacs
(desktop-save-mode 1)
(desktop-read)
(add-to-list 'desktop-globals-to-save 'file-name-history)



(defun kill-current-buffer ()
  "Kill the current buffer, without confirmation."
  (interactive)
  (kill-buffer (current-buffer)))


;; smarttab

;;;
;; Smart Tab

(defvar smart-tab-using-hippie-expand t
  "turn this on if you want to use hippie-expand completion.")

(global-set-key [(tab)] 'smart-tab)
(defun smart-tab (prefix)
  "Needs `transient-mark-mode' to be on. This smart tab is
minibuffer compliant: it acts as usual in the minibuffer.

In all other buffers: if PREFIX is \\[universal-argument], calls
`smart-indent'. Else if point is at the end of a symbol,
expands it. Else calls `smart-indent'."
  (interactive "P")
  (if (minibufferp)
      (minibuffer-complete)
    (if (smart-tab-must-expand prefix)
        (if smart-tab-using-hippie-expand
            (hippie-expand nil)
          (dabbrev-expand nil))
      (smart-indent))))

(defun smart-indent ()
  "Indents region if mark is active, or current line otherwise."
  (interactive)
  (if mark-active
      (indent-region (region-beginning)
                     (region-end))
    (indent-for-tab-command)))

(defun smart-tab-must-expand (&optional prefix)
  "If PREFIX is \\[universal-argument], answers no.
Otherwise, analyses point position and answers."
  (unless (or (consp prefix)
              mark-active)
    (looking-at "\\_>")))

;(load-library turkish.el)

(setq-default abbrev-mode t)

(read-abbrev-file "~/.abbrev_defs")

(setq save-abbrevs t)


;(setq initial-frame-alist '((top . 10) (left . 30)

 ;                           (width . 90) (height . 50)))

;(setq default-frame-alist '((width . 80) (height . 45)))

(setq speedbar-mode-hook '(lambda ()
    (interactive)
    (other-frame 0)))

(cd "/Users/ustun/Documents/")

(defun my-save-and-compile ()

(interactive "")

(save-buffer 0)

(compile compile-command)

)

VLC Derleme - Bölüm I : Hazırlık

Asagidaki bilgiler eski olabilir. Daha guncel bir makale surada. ===== Bu bölümde GNU/Linux üzerinde çalışacak bir VLC'yi derlemek için gereken hazırlıkları anlatacağım. Öncelikle VLC'nin kendi geliştiricileri de Debian GNU/Linux dağıtımını kullandığı için sizin de bu dağıtımı kullanmanız işleri oldukça kolaylaştıracaktır, hatta ortak çalışmamız için Debian kullanmanız zorunlu diyebilirim. Debian'da birçok paket (VLC'nin bağımlı olduğu bütün paketler) önceden derlenmiş olarak geldiği için bir de onları ve onların bağımlılıklarını derlemenize gerek kalmıyor. Debian'ın özel program kurulum sistemi de zaten bağımlılıkları otomatik olarak tanıyıp yüklüyor.

1. Depoları Ayarlama ve Program İndirmeyi Öğrenme

Temel Debian sistemimizi kurduktan sonra ilk yapmamız gereken kurulum dosyalarının depolarını sisteme tanıtmak. Bu işlemi zaten kurulum sırasında yapmış olabilirsiniz, yine de buradaki adımları takip etmeniz en azından indirme hızı açısından yararlı olacaktır; örneğin ben, Debian depolarından ortalama 1.5MB/s ile program indirebiliyorum.
  1. Root kullanıcı olarak bir metin düzenleyici ile /etc/apt/sources.list dosyasını açın. İçeriğini şu şekilde değiştirin: deb http://ftp.tr.debian.org/debian/ etch main contrib non-free
  2. Daha sonra, herhangi bir terminalde (konsolda), root kullanıcı olarak şu komutu çalıştırın: apt-get upgrade Bu şekilde depodaki bilgileri güncellemiş olduk.
  3. Artık rahatlıkla yeni programları ve kütüphaneleri indirebiliriz. Bunun için Debian'da iki seçenek bulunmakta: Grafik tabanlı olan Synaptic ya da konsol tabanlı apt-get. İlk başlarda Synaptic kullanmak daha mantıklı olacaktır, alıştıkça apt-get'i kullanmaya başlayabilirsiniz.
    1. Synaptic: Synaptic'te yapmamız gereken tek şey istediğimiz programa sağ tıklayıp "Mark for Installation"ı seçmek. Daha sonra onay kutularını takip edip uygula dediğimizde program kurulmuş oluyor.
    2. apt-get: apt-get kullanmak için komut satırında öncelikle root kullanıcı olmak gerekiyor.(su komutuyla --ya da sudo apt-get ... da kullanabilirsiniz. sudo geçici olarak root olmanıza yarayan bir komut. Bunu kullanmak için sudo programını kurup daha sonra da /etc/sudoers dosyanızın sonuna şuna benzer bir satır eklemeniz gerekiyor: ustun ALL=(ALL) ALL ) Kullanımı şu şekilde: apt-get install abc komutuyla abc programını yüklüyoruz. Aynı anda hem abc, hem de xyz programlarını kurmak istersek yazmamız gerekense apt-get install abc xyz. Benzer şekilde, bir programı kaldırmak için apt-get remove abc komutunu kullanabilirsiniz. Son olarak, bir programı derlemek için gereken tüm bağımlılıkları indirmek için apt-get build-dep abc komutu var.
      Not: Bu komutu aslında VLC'nin gereksinim duyduğu tüm programları indirmek için kullanabiliyor olmamız gerek; ancak son denememde hata vermişti.(apt-get build-dep vlc) Belki şu an çalışıyordur.

2. Bağımlılıkları İndirme

Bu kısımda VLC'yi derlemek için gerekli olan birkaç programı indireceğiz. Burada bilinmesi gereken kilit nokta şu: Bir programı derlemek için başka bir programa gereksinim duyuluyorsa bu genelde o programın geliştirme kütüphaneleridir. Mesela bizim programımız foo programına gereksinim duyuyor diyelim. Bu durumda Debian'da indirmemiz gereken genelde şu isimde bir paket olur: "libfoo-dev" Yani foo'nun geliştirme (dev) kütüphanesi (dev). Bazen de header paketlerine gereksinim duyulabilir. foo-headers şeklinde. Bazı paketlerdeyse baştaki lib bulunmamakta ve kütüphane foo-dev şeklinde depoda bulunmakta. Bu önemli noktayı bildikten sonra derleme işlemi oldukça kolaylaşıyor. Zira derlerken libhal bulunamadı gibi bir hatada yapmamız gereken Synaptic ya da apt-get kullanarak libhal veya libhal-dev gibi paketleri indirmek. Bu şekilde VLC'nin gereksinim duyduğu kütüphaneleri sırasıyla yüklüyoruz. Bu kütüphanelere VLC'nin wikisinden ulaşabilirsiniz. Debian'da paket yönetimiyle ilgili en güzel kısmı ise sona sakladım. apt-get'le sistemde kurulu paketlerin listesini alıp daha sonra tek bir komutla yeni veya farklı bir kuruluma aynı paketleri yükleyebiliyorsunuz. Örneğin benim sistemimde kurulu paketlerin listesini şuradan indirebilirsiniz. Daha sonra bu paketi kaydettiğiniz klasöre gidip şu komutu yazarsanız bende kurulu olan tüm paketler size de yüklenmiş oluyor: dpkg --set-selections <ustunsecim dselect install Böylece sizin sisteminiz de benim sistemim gibi VLC derlemeye hazır hale geliyor! :) Bir sonraki bölümde VLC derlemek için gereken komutları anlatacağım.

Debian Altında VLC Derleme

Ön Hazırlıklar

  1. Öncelikle depolarımızı source depolarını da içerek şekilde güncelliyoruz. Bunun için, /etc/apt/sources.list dosyasını şu ve benzeri şekilde değiştirin: deb http://ftp.tr.debian.org/debian/ testing main contrib non-free deb-src http://ftp.tr.debian.org/debian/ unstable main contrib non-free deb-src http://www.debian-multimedia.org sid main deb http://www.debian-multimedia.org lenny main Daha sonra apt-get update ve apt-get upgrade diyerek tüm güncellemeleri yapın.
  2. apt-get build-dep vlc diyerek derlemek için gerekli paketleri indiriyoruz. Bu şekilde gerekli çoğu paket indi.
  3. Şimdi kalan birkaç paketi indireceğiz. apt-get install subversion automake1.9 libtool cvs libgcrypt-dev libfaac-dev liblame-dev libfaad-dev libtwolame-dev libqt4-dev

Kaynak kodu indirme ve derleme

VLC'nin, X264'ün ve FFMPEG'in kodunu indiriyoruz. Önce X264 ve FFMPEG'i derleyip, daha sonra da VLC'yi derliyoruz.
% svn co svn://svn.videolan.org/vlc/trunk vlc
% cd vlc
% ./bootstrap
% cd extras/
% svn co svn://svn.videolan.org/x264/trunk x264
% cd x264
% make
% cd ..
% svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
% cd ffmpeg
% ./configure --enable-gpl --enable-pp \
               --enable-pthreads --enable-libmp3lame  \
               --enable-libfaac
% make
% cd ..

% cd ..
% mkdir build; cd build;
%../configure --prefix=/usr \
        --enable-snapshot --enable-debug \
        --enable-dbus-control --enable-musicbrainz \
        --enable-shared-libvlc --enable-mozilla \
        --enable-lirc \
        --with-ffmpeg-tree=../extras/ffmpeg \
        --enable-x264 --with-x264-tree=../extras/x264 \
        --enable-shout --enable-taglib \
        --enable-v4l --enable-cddax \
        --enable-dvb --enable-vcdx \
        --enable-realrtsp --enable-xvmc \
        --enable-svg   --enable-dvdread \
        --enable-dc1394 --enable-dv \
        --enable-theora --enable-faad \
        --enable-twolame --enable-real \
        --enable-flac --enable-tremor \
        --with-ffmpeg-mp3lame --with-ffmpeg-faac \
        --enable-skins2 --enable-qt4 \
        --enable-ncurses \
        --enable-aa --enable-caca \
        --enable-esd --disable-portaudio \
        --enable-jack --enable-xosd \
        --enable-galaktos --enable-goom \
        --enable-ggi \
        --disable-cddax --disable-vcdx \
       --disable-quicktime
% make

GNU/Linux'ta Program Derleme - I

Bu kısımda yeni başlayanlar için GNU/Linux üzerinde program derlemeyi ve kurmayı anlatacağım. Anlatacağım konular temel seviyede ve bu yazıda bütün kütüphanelerin sistemde kurulu ve tanıtılmış olduğunu varsayıyorum. (Tanıtılmamış olduğu durumları sonraki yazılarda inceleyebilirim.) Öncelikle, aslında küçük (iki üç dosyadan oluşan) programlarımızı gcc komutlarını konsolda kullanarak derleyebiliriz; ama program büyüdükçe hangi dosyanın hangisine bağlanacağı gibi kararlar karmaşıklaşır. Bu nedenle, automake gibi bu genel derleme işini otomatikleştiren araçlar kullanılmakta. Bu bölümde daha önceden automake kullanılmış programlara sahip olduğumuzu varsayıyoruz. (ki kullandığımız birçok programın kaynak kodları bu şekilde zaten) GNU/Linux'ta program derlemek üç ana adımdan oluşur:
  1. configure etme: configure komutları genelde sistemle ilgili veri almak için kullanılır. Bu komut sayesinde sistemde hangi program/kütüphanelerin nerede kurulu olduğu araştırılır ve programın hangi özelliklerini etkinleştirmek istediğimizi bu adımda belirtiriz. Bu adımdaki komutumuz şu şekilde: ./configure configure komutunun başındaki ./ karakterleri sistem PATH'inde bulunmayan herhangi bir çalışır dosyayı çalıştırmak için kullanılmakta. Yani, Windows altında olduğu gibi geçerli klasördeki çalışır dosyayı sadece adını vererek çalıştıramıyoruz; komutun önüne ./ eklememiz gerekiyor. (Not: Bir dosyayı çalışır hale getirmek için de chmod +x dosyaadi yapmamız gerekiyor.) Bunun dışında configure aşamasında programın seçeneklerini değiştirebileceğimizden bahsetmiştim. Mevcut seçenekleri çoğu durumda ./configure --help ile öğrenebiliyoruz. Daha sonra yapmamız gereken de ./configure --enable-abc --disable-foo şeklinde istediğimiz özellikleri ekleyip kaldırmak. Bu aşamada aynı zamanda bazı kütüphaneleri nereye kurduğumuzu da belirtiyoruz: ./configure --with-ffmpeg --with-ffmpeg-path=/usr/ffmpeg gibi. Tabii burada yazdığım parametreler sadece örnek, geçerli parametreleri daha önce belirttiğim gibi ./configure --help ile öğrenmeniz gerekiyor. configure komutunun sonucunda o klasör altında bir Makefile oluşturuluyor. Bu dosya bir sonraki adımda işe yarayacak.
  2. make: Bir sonraki aşama, asıl derleme aşamasının olduğu aşama. Genelde başkalarının yazdığı kodları çalıştırırken birinci aşamayı geçmeniz halinde make aşamasında fazla sorun yaşamıyorsunuz. Tabii kendi yazdığınız bir programsa bu aşamada hatalar çıkabilir.
  3. make install: Bu son aşamada aslında herhangi bir derleme yapmıyoruz. Bu adımın amacı derlediğimiz programı sistem klasörlerine kopyalamak; çünkü şu ana kadar yaptığımız bütün işlemler sonuçlarını içinde bulunduğumuz klasörde oluşturdu. Tabii ki sistem klasörlerine erişmemiz gerektiği için root kullanıcı olmamız gerekiyor. Bu komutu da make install deyip uyguladıktan sonra program her kullanıcı tarafından kullanılabilir duruma geliyor. Bu adımla ilgili belirtilmesi gereken diğer bir nokta aslında bu adımda 2. adımdaki make komutuna farklı bir parametre vermiş olduğumuz. Yani make komutu default halinde derlemeyi yapıyor; ama make install gibi bir komutla başka işlemler yapmasını sağlayabiliyorsunuz. Burada bir diğer örnek make clean olabilir. Bu da bütün derleme sonrası oluşturulmuş dosyaları silmenize ve sadece kaynak dosyalarının olduğu özgün duruma dönmenizi sağlıyor. Makefile dosyasını dikkatli incelerseniz bütün bu install, clean gibi komutların işlevlerinin yazılmış olduğunu göreceksiniz.
Son olarak aslında derleme işlemiyle direk ilgisi olmayan; ama işinize yarayabilecek birkaç ipucunu belirtmek istiyorum.
  1. .tar.gz uzantılı bir dosyayı açmak için gereken komut tar -zxf dosyaadi ve tar.bz2 içinse tar -jxf dosyaadi
  2. VLC gibi programlarda çok uzun configure komutları oluyor. Bunları her seferinde girmek yerine, DOS'taki batch dosyaları gibi script dosyaları oluşturabilirsiniz. Yapmanız gereken şunlar: Düz metin dosyasının ilk satırına #!/bin/sh yazın, sonraki satırlara da gireceğiniz komutları yazın. Eğer tek bir satırdan uzun olursa okunabilirliği artırmak adına \ kullanarak bir sonraki satırın bu satırını devamı olduğunu belirtin. Örneğin: ./configure --enable-a --enable-b --enable-c --enable-d --enable-e --enable-f --enable-g --enable-h --enable-i --enable-j --enable-k yerine ./configure --enable-a --enable-a \ --enable-b --enable-c --enable-d \ --enable-e --enable-f --enable-g gibi satırlar yazın. NOT: Her satırdaki son karakter \ olmak zorunda, yani \ karakterinden sonra boşluk bile gelmemeli.
  3. Bu komutları çalıştırdığınızda ekrana bir sürü yazı gönderecekler. Bunların bir kısmı normal çıktılar, diğerleri ise uyarı ve hatalar. Haliyle bu iki grubu birbirinden ayırdetmek güçleşiyor. Bu nedenle bu iki grubu iki ayrı dosyaya yazdırmak işinize yarayabilir. Burada yapmanız gereken 1> ve 2> ile sırasıyla normal veriyi ve hataları başka dosyalara göndermek. Örneğin, ./configure 1>normal.txt 2>hata.txt satırıyla programın normal metnini normal.txt dosyasına, hataları ise hata.txt dosyasına yazdırabiliriz.
  4. Derleme işlemleri uzun sürdüğü için configure ve make işlemlerini ardarda yaptırmak isteyebilirsiniz. Burada dikkat edilmesi gereken nokta şu: Eğer yukarıda anlatıldığı şekilde bir script(batch) dosyası oluşturup bu iki komutu alt alta yazarsanız, birinci komut hata verse de ikinci komut yapılacaktır. Ör: ./configure make hatalı bir kullanımdır. Birincinin düzgün tamamlanması halinde ikinci programı başlatmak istersem ikisi arasına && koymak gerekir. Ör: ./configure && make

Printout of All Source Files

enscript -2rE -C -o - src/*.cpp src/*.h | pstopdf -i -o print.pdf && open print.pdf

Sample Makefile

Some Information about Makefile's =================================
  1. Type "make" on the command line to make the project.
  2. You need to install the GNU make utility.
  3. Type "make clean" to remove object files.
  4. @ suppresses output.
  5. pkg-config automatically finds the required compiler and linker flags for developing against a library.
  6. Issue "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/" if pkg-config can't find the libraries This directory contains *.pc files.
  7. $< : an element of the dependencies (to the right of : ) $^ : all dependencies $@ : target (to the left of : )
  8. Command prototype is : targets : prerequisites TAB command
  9. Tabs must be used for indentation; not spaces.
  10. CPPFLAGS are preprocessor flags, CFLAGS are flags for the C compiler (also to be supplied at linking time), CXXFLAGS are flags for the C++ compiler (also to be supplied at linking time)
  11. If you have a single C++ file, compile using (no need for a Makefile): g++ `pkg-config --cflags itpp` -o my_prog my_prog.cpp `pkg-config --libs itpp`
Tabs are important for Makefiles; copying-pasting the following won't work since tabs are gone in blogger. (or download it here)

CXX=@g++
CPPFLAGS=$(shell pkg-config --cflags itpp)
CXXFLAGS=-Wall
LDFLAGS=$(shell pkg-config --libs itpp)

SOURCES=  $(wildcard *.cpp) # Or manually list the source files here
OBJECT=$(SOURCES:.cpp=.o)
OBJECT_DIR=obj
OBJECTS= $(patsubst %,$(OBJECT_DIR)/%,$(OBJECT))
EXECUTABLE=../btctest

all: $(SOURCES) $(EXECUTABLE)
INSERT TAB HERE@echo Finished without errors.

$(EXECUTABLE) : $(OBJECTS)
INSERT TAB HERE @echo Linking...
INSERT TAB HERE$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@

$(OBJECT_DIR)/%.o: %.cpp
INSERT TAB HERE @echo Compiling $^
INSERT TAB HERE $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@   dist : $(SOURCES) $(EXECUTABLE) $(OBJECTS)  INSERT TAB HEREcd ../.. && tar -cjf a.tar.bz2 btc_itpp/src/ btc_itpp/btctest btc_itpp/Makefile
.PHONY: clean
clean:
INSERT TAB HERE @echo Cleaning object files...
INSERT TAB HERE @rm -rf $(OBJECTS)


To call it from parent dir:

# This file calls the other Makefile inside the src/ 

all:
INSERT TAB HERE@$(MAKE) -C src

clean:
INSERT TAB HERE @$(MAKE) -C src clean

dist:
INSERT TAB HERE @$(MAKE) -C src dist

doc: src
INSERT TAB HERE /Applications/Doxygen.app/Contents/Resources/doxygen Doxyfile