<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

    <title type="text" xml:lang="en">Fatih Arslan</title>
	<link type="application/atom+xml" href="http://blog.arsln.org/feed/index.xml" rel="self"/>
	<link type="text/html" href="http://blog.arsln.org" rel="alternate"/>
    <updated>2017-01-07T21:53:01+00:00</updated>
	<id>(( site.id }}</id>
    <author>
        <name>Fatih Arslan</name>
    </author>
    <rights>Copyright (c) 2006-2012, Fatih Arslan; all rights reserved.</rights>

    
    <entry>
        <title>Yeni bir blog - arslan.io</title>
		<link href="http://blog.arsln.org/yeni-bir-blog-arslan-io/"/>
        <updated>2013-05-13T10:31:00+00:00</updated>
		<id>http://blog.arsln.org/yeni-bir-blog-arslan-io</id>
        <content type="html">&lt;p&gt;Yeni bir blog açtım: &lt;a href=&quot;http://arslan.io&quot;&gt;arslan.io&lt;/a&gt;. Burada teknik ağırlıklı
yazılar olacaktır. Bu blog’un en büyük farkı ingilizce olması. Bunu uzun
zamandır yapmak istiyordum ama bir türlü fırsat bulamamıştım. Diğer bir fark
ise &lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt; yerine
&lt;a href=&quot;https://posthaven.com/&quot;&gt;Posthaven&lt;/a&gt; kullanmamdır. Posthaven kullanmamın en
büyük sebebi de, kolay yazmama izin vermesi. Ayrıca Posthaven kurucuların uzun
vadeli düşüncelerini de destekliyorum. Bakalım nasıl olacak o kısımda.&lt;/p&gt;

&lt;p&gt;Neden İngilizce peki? İçimde kalmasın dedim. Hem daha fazla insanlarla irtibata
geçebilme, hem de ingilizce yazma anlamında kendimi geliştirmek istediğimden ve
çoğu şeyin Türkiye sınırları içinde malesef yeterince rağbet görmemesi beni bu
diğer bloğu açmaya itti.&lt;/p&gt;

&lt;p&gt;Örneğin şu yazı: &lt;a href=&quot;http://blog.arsln.org/qtcpserver-sinifina-ssl-destegi-eklemek-qt/&quot;&gt;QTcpServer sınıfına SSL desteği eklemek
(Qt)&lt;/a&gt;.
İngilizce olsaydı muhtemelen bir çok kişinin işine yarayacaktı, halbuki bu tarz
&lt;code class=&quot;highlighter-rouge&quot;&gt;niche&lt;/code&gt; konuları türkçe yazmak ayağına sıkmak gibi bir şey. Kimsenin işine
yaramıyor ve kimse de okumuyor.&lt;/p&gt;

&lt;p&gt;..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arslan.io&lt;/strong&gt; domain ismini de alınca, bu blogu açmam için hiç bir engel
kalmadı diyebilirim. Şimdiden bir kaç tane yazı yazdım. İleride çok daha fazla
ve değişik yazılar paylaşacağım. İlgilenen herkesi beklerim, seveceğinizi
düşünüyorum: &lt;a href=&quot;http://arslan.io&quot;&gt;arslan.io&lt;/a&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Subvim - Sublime Text benzeri Vim dağıtımı</title>
		<link href="http://blog.arsln.org/subvim-sublime-text-benzeri-vim-dagitimi/"/>
        <updated>2013-05-05T12:50:00+00:00</updated>
		<id>http://blog.arsln.org/subvim-sublime-text-benzeri-vim-dagitimi</id>
        <content type="html">&lt;p&gt;Bundan bir ay önce &lt;strong&gt;&lt;a href=&quot;https://github.com/fatih/subvim&quot;&gt;Subvim&lt;/a&gt;&lt;/strong&gt; adinda yeni bir proje oluşturdum. Sublime Text sevip
de Vim’den bir türlü ayrılamayanlar benim gibi insanlar için düşünülmüştü.
Proje’yi duyurduktan sonra gördüm ki benim gibi bir sürü insan varmış:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GitHub’da şu an itibariyle 791 yıldız aldı ve her gün artmaya devam ediyor:
&lt;a href=&quot;https://github.com/fatih/subvim&quot;&gt;https://github.com/fatih/subvim&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub’da haftanin en popüler deposu olarak listeye girdi.&lt;/li&gt;
  &lt;li&gt;HackerNews’de uzunca konuşuldu:
&lt;a href=&quot;https://news.ycombinator.com/item?id=5504051&quot;&gt;https://news.ycombinator.com/item?id=5504051&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Twitter’de dünyanin dört bir köşesinden kullanan insanlar yorum yaptı:
&lt;a href=&quot;https://twitter.com/search/realtime?q=subvim&quot;&gt;https://twitter.com/search/realtime?q=subvim&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;One Thing Well tumblr blogunda çıktı:
&lt;a href=&quot;http://onethingwell.org/post/49262686423/subvim&quot;&gt;http://onethingwell.org/post/49262686423/subvim&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Addy Osmani gibiler SubVim’i paylaştı:
&lt;a href=&quot;https://plus.google.com/+AddyOsmani/posts/JegDRWyawFH&quot;&gt;https://plus.google.com/+AddyOsmani/posts/JegDRWyawFH&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kısacası hiç ummadığım kadar rağbet gördü. Subvim gelirsek, kendisi şöyle bir şey oluyor:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/subvim-screenshot.png&quot; alt=&quot;subvim screenhhost&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Bir çok özellikleri mevcut:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SublimeText’deki renk şemasının hemen hemen aynısi (bunun için molokai.vim
üzerinde kendi değişiklerimi yaptım)&lt;/li&gt;
  &lt;li&gt;SublimeText’deki kısa yollarının hemen hemen çoğu mevcut ve her biri ayni
görevi yapiyor&lt;/li&gt;
  &lt;li&gt;Birden fazla imleç kullanabiliyorsunuz (multiple cursor)&lt;/li&gt;
  &lt;li&gt;Otomatik tanımlama. Bunun için YouCompleteMe eklentisinin ikili paketini
derleyip Subvim’e dahil ettim.&lt;/li&gt;
  &lt;li&gt;Goto symbol/definition özelliği ile bulunduğunuz dosyada herhangi bir method,
fonksiyon veya da veri tipine gidebiliyorsunuz. Bunun için de yine Ctags’in
derlenmiş ikili paketini ekledim ve ctags için özel değışikler mevcut.&lt;/li&gt;
  &lt;li&gt;Kapatıp açtığınızda dosyalariniz, pencere konumlari aynen eski hali ile
oluşturuluyor.&lt;/li&gt;
  &lt;li&gt;.. ve &lt;a href=&quot;https://github.com/fatih/subvim&quot;&gt;daha fazlası&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Şu an için sadece Mac OS X’de çalışıyor. Ileride zamanım olursa Linux altında
çalışacak şekilde özellikler ekleyeceğim.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Yeni işim, yeni gelişmeler - Koding</title>
		<link href="http://blog.arsln.org/yeni-isim-yeni-gelismeler-koding/"/>
        <updated>2013-02-02T15:30:00+00:00</updated>
		<id>http://blog.arsln.org/yeni-isim-yeni-gelismeler-koding</id>
        <content type="html">&lt;p&gt;Bundan yaklaşık iki-buçuk yıl önce “&lt;a href=&quot;http://blog.arsln.org/yeni-bir-baslangic/&quot;&gt;yeni bir
başlangıç&lt;/a&gt;” başlığı ile Pardus’ta ise
başladığımı paylaşmıştım. O zaman çok heyecanlı ve mutluydum. Uzun zamandır,
&lt;a href=&quot;http://blog.arsln.org/pardus-ayrilisim-ve-sonrasi/&quot;&gt;Pardus’tan ayrıldıktan&lt;/a&gt;
sonra ilk defa o anki mutluluğu ve heyecanı tekrardan yaşıyorum.&lt;/p&gt;

&lt;p&gt;Yeni bir maceraya yelken açmış bulunmaktayım. Şubat ayı
itibariyle &lt;a href=&quot;https://www.koding.com&quot;&gt;Koding.com&lt;/a&gt;‘de çalışmaya başladım. İnanılmaz
heyecanlı bir projede inanılmaz insanlarla çok güzel işler yapma fırsatı elde
ettim. Pardus projesinden çok yakın iki arkadaşım (Gökmen Göksel ve Bahadır
Kandemir) de Koding’de çalışmaya başladı(çok daha öncesinden). Onlarla tekrar
olmak da mutlu verici bir gelişme. Koding’in kurucuları(Devrim Yaşar ve Sinan
Yaşar) da bu konuda çok iyi ve işi bilen insanların olması ve en önemlisi de
geliştiricilerin halden anlamaları benim açımdan daha da mutlu verici bir
gelişme.&lt;/p&gt;

&lt;p&gt;Yaklaşık iki aydır Koding için iki tane uygulama yazdım (&lt;a href=&quot;https://github.com/farslan/RailsDashboard.kdapp&quot;&gt;Rails
Dashboard&lt;/a&gt; ve &lt;a href=&quot;https://github.com/farslan/Django.kdapp&quot;&gt;Django
Dashboard&lt;/a&gt;), iki tane uygulama
geliştirmek üzereyim ve bunların üzerine uygulamaları yazarken kullandığımız KD
Framework’un &lt;a href=&quot;https://github.com/farslan/koding-wiki&quot;&gt;teknik belgelendirme
sürecini&lt;/a&gt; de başlatmış bulunmaktayım.
Bunların hepsini akşamları boş zamanımda yapmaya çalıştım. Uzun ve yorucu bir
süreçti (kabul), ama özellike Devrim abinin bu süreçteki tutumu ve yaklaşımı bu
işi sevmemi ve sahiplenmemi sağladı. Bundan sonra her günümü çok daha verimli ve
Koding endeksli çalışıyor olabileceğim. Heyecanlı ve güzel bir iş kısacası.&lt;/p&gt;

&lt;h2 id=&quot;koding-nedir&quot;&gt;Koding nedir?&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/koding-activity.png&quot; alt=&quot;Koding activity alanı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Koding’e biraz değineyim. Koding.com iki türk kardeşin kurduğu (Devrim Yaşar ve
Sinan Yaşar), A.B.D, San Francisco menşeili bir şirket. Önümüzdeki sene bolca
duyacağınız bu ismi bir yere not alın. Koding.com sayesinde dünyanın neresine
giderseniz gidin, tek bir tıkla tüm geliştirme ortamınıza ulaşabileceksiniz.
Yani bildğiniz terminal(evet kendinize ait bir Linux sanal makinesi),
dosyalarınız için depolama alanı, yüzlerce farklı frameworku,vs.. gibi
seçenekler mevcut. Ve size ait bir şubdomainiz bile var. Bu daha başlangıç
diyebilirim. Daha inanılmaz özellikler sırayla devreye girecek.&lt;/p&gt;

&lt;p&gt;Bu çalışma ortamını örnek vermek gerekişe şu şekilde kullanıyorum:
arslan.koding.com/docs altında, Koding.com içinde uygulama yazabileceğiniz bir
framework’un dokümantasyonları mevcut. Bunların son bir aydır kendim yazmaya
çalışıyorum. Bu adreste yer alan dokümanların hepsi aslında bir &lt;a href=&quot;https://github.com/farslan/koding-wiki&quot;&gt;github
deposunda&lt;/a&gt;
markdown olarak saklanıyor. Ben yeni doküman ekledikten sonra Koding’e giriş
yapıp bu değişikleri terminal ile kolay bir şekilde alıyorum(git pull). Sonra
bunları yine terminal altında &lt;a href=&quot;http://markdoc.org/&quot;&gt;markdoc&lt;/a&gt; ile html
sayfalarına çeviriyorum. Ve tüm bunlar doğrudan hiç bir şey yapmadan
&lt;a href=&quot;http://arslan.koding.com/docs&quot;&gt;arslan.koding.com/docs&lt;/a&gt; yüklenmiş oluyor.  Yani
anlayacağınız web sitemi buradan sunduğum gibi, geliştirmesini ve bakımını da
Koding üzerinden yapıyorum. Aşağıda ise Koding içinden bu dökümanlara
ulaşabileceğiniz uygulamanın ekran görüntülerini görebilirsiniz:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/koding-docs.png&quot; alt=&quot;Koding belgelendirm&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;herkes-iin-farkl-imkanlar&quot;&gt;Herkes için farklı imkanlar&lt;/h2&gt;

&lt;p&gt;İnanılmaz değil mi? Fakat bununla bitmiyor. Söylece bir hayal edin ve şunları
bir düşünün:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Sınıf arkadaşınla bir C++ örneğini denemek için Koding’e giriş yaptınız ve
ikiniz de kendi sanal makinelerinizde kodu derleyip sonuçlarını gördünüz. Aynı
kod parçasını beraber aynı anda düzenliyorsunuz. Onun makinesinde bilmem ne
aracı kurulmamış, sende kod parçası yokmuş, gibi şeyler tarihe karıştı.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Netbook, ChromeOS, iPad gibi kısıtlı imkanlara sahip bir cihazdan Koding’e
giriş yaptınız ve altınızdaki makine ile terminal, depolama alanı ve şahsınıza
ait bir sanal makine üzerinde geliştirmenizi yapabiliyorsunuz (linode’da ssh
bağlanmaktan farklı bu, ssh’e gerek yok çünkü her şey web tabanlı ve zeki,
düşünülmüz bir arayüze sahip)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Sabah evden çıkarken çok önemli bir kodu yazmayı unuttunuz ve müşteriye eksik
bir halde gönderdiniz (ya da bilgisayarınız almayı unuttunuz yanınızda!).
Arkadaşınızın laptop’undan Koding’e giriş yapıp geliştirmeyi devam edip
müşteriye kalan eksiklikleri tekrar gönderiyorsunuz.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;SQL (MondgoDB, MySQL,vs..) öğrenmek istiyorsunuz, Linux nedir bilmiyorsunuz
öğrenmek istiyorsunuz, Rails, Django gibi web framework’u öğrenmek
istiyorsunuz, Git,Vim gibi araçları öğrenmek istiyorsunuz’vs.. her şey Koding
ile mümkün!  MySQL gibi bir veritabanını tek tıkla aktif hale
getirebiliyorsunuz, Linux zaten terminal ile hazır kurulu geliyor,Rails kurmak
tek tıklık bir şey, vs..&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hakkari’deki bir öğrenci, Ethiopia’daki bir genç, Güney Amerika’daki
mühendisler,vs.. herkesi en kısıtlı bilgisayarla bile dünyanın en güzel
teknolojilerini tek bir tarayıcı ve internet bağlantısı ile sunabiliyorsun.
Bundan daha güzel bir şey olabilir mi sizce?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evet bunları hayal edin dedim, ama bunların çoğu hayalden öte gerçek. Ve Koding
ile bunları yapma fırsatı elde edeceksiniz. Önümüzdeki senelerde eğer
başarabilirsek inanılmaz ve devrimsel bir ürün ortaya çıkacak. Normalde herkese
uzak olan bir çok teknolojiye ulaşma imkanınız olacak.&lt;/p&gt;

&lt;h2 id=&quot;son-durum&quot;&gt;Son durum&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/koding-sf.png&quot; alt=&quot;Koding San Francisco ofis&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Önümde üç haftalık bir San Francisco ziyareti var. Oradaki ofiste 3 hafta
boyunca Koding’deki backend teknolojilerini yakından takip edip üzerine bir
şeyler de ekleyeceğim ve kuracağım. Hem benim açımdan da bir nevi ‘kick-start’
ölmüş olacak (işi hızlıca öğrenip, giriş yapabilmek bizim gibi uzaktan çalışan
insanlar için önemli) hem de Koding bünyesinde çalışan diğer insanları da
tanımış olacağım. Kuzey Amerika kıtasını da ilk defa göreceğim için o açıdan da
biraz heyecanlıyım. Hadi hayırlısı.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Vim eklentileri (olması gerekenler)</title>
		<link href="http://blog.arsln.org/vim-eklentileri-olmasi-gerekenler/"/>
        <updated>2012-12-15T15:45:00+00:00</updated>
		<id>http://blog.arsln.org/vim-eklentileri-olmasi-gerekenler</id>
        <content type="html">&lt;p&gt;Vim altında eklenti yazmak ve kullanmak başlı başına bir alan. Çok güçlü ve her
türlü işi yapmanıza olanak sağlıyor. Aslında eklenti demek bile anlamsız çoğu
zaman. Bunların her birini her gün defalarca kez kullanıyorum. Beni çok
hızlandırdığı gibi dakikalar süren işlemleri saniyeler içinde yapmamı da
sağlıyor. Uzun vadede ne kadar yararlı olduğunu anlatamam bile. Bu yüzden
kullandığım bu eklentileri bu yazıda ayrıntılı bir şekilde anlatmaya
çalışacağım.&lt;/p&gt;

&lt;p&gt;Tüm eklentilerin ana başlığına tıklayarak ulaşabildiğiniz gibi, hepsini birden
kullamak istiyorsanız benim düzenli olarak bakımını yaptığım ve bir sürü hatadan
arındırılmış &lt;strong&gt;dotfiles&lt;/strong&gt; deposundan da indirip kullanabilirsiniz.  &lt;strong&gt;Mac ve
Linux&lt;/strong&gt; altında çalışacak şekilde düzenlendi (Mac ve Linux’a özgü ifdef’ler
mevcut vimrc’de).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/farslan/dotfiles&quot;&gt;github.com/farslan/dotfiles&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yazıya başlamadan önce bir ayrıntıyı değineyim. Vim’de kısa yolları modife etmek çok
kolay, bunun için de &lt;strong&gt;leader&lt;/strong&gt; diye bir özellik de mevcut. &lt;code class=&quot;highlighter-rouge&quot;&gt;vimrc&lt;/code&gt; de böyle bir
değişken tanımlayıp bir karakter atayabiliyorsunuz (örneğin benim &lt;strong&gt;leader&lt;/strong&gt; tuşu
&lt;code class=&quot;highlighter-rouge&quot;&gt;,&lt;/code&gt; karakteri.)&lt;/p&gt;

&lt;p&gt;Kullandığım eklentiler ile hep bu tuş ile kullanıyorum, bu yüzden de
örneklerimde hep &lt;code class=&quot;highlighter-rouge&quot;&gt;,a&lt;/code&gt; , &lt;code class=&quot;highlighter-rouge&quot;&gt;,,w&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;,g&lt;/code&gt; vs.. gibi kombinasyonlar göreceksiniz.
Örneğin &lt;code class=&quot;highlighter-rouge&quot;&gt;,n&lt;/code&gt; kombinasyonu önce &lt;code class=&quot;highlighter-rouge&quot;&gt;,&lt;/code&gt; tuşuna sonra da &lt;code class=&quot;highlighter-rouge&quot;&gt;n&lt;/code&gt; tuşuna basmak anlamına
geliyor.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ackhttpsgithubcommileszsackvim&quot;&gt;&lt;a href=&quot;https://github.com/mileszs/ack.vim&quot;&gt;ack&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Bu en sevdiğim eklentiler arasında ilk beşe girer.
&lt;a href=&quot;http://betterthangrep.com/&quot;&gt;ack-grep&lt;/a&gt; adında, &lt;code class=&quot;highlighter-rouge&quot;&gt;grep&lt;/code&gt; tarzında bir uygulama var.
Kullanmadıysanız tavsiye ederim. Bu &lt;strong&gt;grep&lt;/strong&gt;‘ten farklı olarak öntanımlı olarak bir
çok önemli parametlerle geliyor, örneğin recursive olması,.svn ve .git gibi
klasörleri atlaması, binary’leri atlaması,vs..&lt;/p&gt;

&lt;p&gt;Bu eklenti ile doğrudan vim altından &lt;code class=&quot;highlighter-rouge&quot;&gt;ack-grep&lt;/code&gt; çağırabiliyorsunuz. Bunu ben &lt;code class=&quot;highlighter-rouge&quot;&gt;,a&lt;/code&gt;
kısayolun atadım. Herhangi bir kelimenin üzerine gelip &lt;code class=&quot;highlighter-rouge&quot;&gt;,a&lt;/code&gt; yaptığınızda o
kelimeyi dizinde arıyor ve küçük bir pencere olarak gösteriyor:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-ack.png&quot; alt=&quot;Vim altında ack-grep kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sonra bu pencerede istediğiniz dosyaya &lt;code class=&quot;highlighter-rouge&quot;&gt;o&lt;/code&gt; tuşu ile geçebiliyorsunuz. En güzeli
de &lt;code class=&quot;highlighter-rouge&quot;&gt;go&lt;/code&gt; tuşları ile önizleme yapabilmenizdir. Yani 10 tane seçenek geldiyse her
birine &lt;code class=&quot;highlighter-rouge&quot;&gt;go&lt;/code&gt; basa basa içeriğini görebilmenize imkan sağlıyor. &lt;code class=&quot;highlighter-rouge&quot;&gt;t&lt;/code&gt; ve &lt;code class=&quot;highlighter-rouge&quot;&gt;v&lt;/code&gt; tuşları
ile de sekme ve dikey olarak o dosyayı açabiliyorsunuz. Şahane bir eklenti.&lt;/p&gt;

&lt;h2 id=&quot;ahttpsgithubcomvim-scriptsavim&quot;&gt;&lt;a href=&quot;https://github.com/vim-scripts/a.vim&quot;&gt;a&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Kaynak kodlar ile başlık dosyaları (foo.cpp ve foo.h) arasında hızlı geçiş için
kısa yollar sunuyor. Örneğin foo.cpp ile uğraşıyorsam,  &lt;code class=&quot;highlighter-rouge&quot;&gt;:A&lt;/code&gt; ile doğrudan foo.h
dosyasına geçiş yapıyor(&lt;code class=&quot;highlighter-rouge&quot;&gt;:A&lt;/code&gt; yaptığımda tekrar eski dosyaya dönüyorum). &lt;code class=&quot;highlighter-rouge&quot;&gt;:AS,&lt;/code&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;:AV&lt;/code&gt; ve &lt;code class=&quot;highlighter-rouge&quot;&gt;:AT&lt;/code&gt; ile de dikey, yatay ve sekme şeklinde açabiliyorum.&lt;/p&gt;

&lt;h2 id=&quot;ctrlphttpsgithubcomkienctrlpvim&quot;&gt;&lt;a href=&quot;https://github.com/kien/ctrlp.vim&quot;&gt;ctrlp&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Bu eklenti sayesinde &lt;strong&gt;ctrl+p&lt;/strong&gt; kısa yollu ile herhangi bir dosyaya aniden geçiş
yapabiliyorsunuz. Basit ve kullanışlı. &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl+p&lt;/code&gt; yaptıktan sonra ilk 1-2 harfi
yazında kendisi o dizinde bulunan tüm dosyaları getiriyor. Şu şekilde bir şey:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-ctrlp.png&quot; alt=&quot;Vim altında ctrlp kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Üç çeşit arama şekli var:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Buffer’de bulunan dosyalar&lt;/li&gt;
  &lt;li&gt;En çok kullandığınız dosyalar (bunun için bir bellek tutuyor)&lt;/li&gt;
  &lt;li&gt;Dizinde bulunan dosyalar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bu ayarları istediğiniz gibi değiştirebilirsiniz. Standart olarak dizindeki
dosyaları arıyor, ama &lt;strong&gt;ctrl+f&lt;/strong&gt; ile modu değiştirebilirsiniz (ctrlp pencersinde).
Yine sık sık kullandığım &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl+s,&lt;/code&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl+v&lt;/code&gt; ve &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl+t&lt;/code&gt; kısa yolları ile dosyaları
yatay, dikey ve sekme olarak açabiliyorsunuz.&lt;/p&gt;

&lt;h2 id=&quot;gist-vimhttpsgithubcommattngist-vim&quot;&gt;&lt;a href=&quot;https://github.com/mattn/gist-vim&quot;&gt;gist-vim&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/&quot;&gt;gist.github.com&lt;/a&gt; servisini doğrudan kullanmanızı
sağlıyor. &lt;code class=&quot;highlighter-rouge&quot;&gt;:Gist&lt;/code&gt; komutunu çalıştırdığınız anda kendisi tüm dosyayı gist’e aktarıp
sonra da tarayıcıyı açmanızı sağlıyor. Çok basit ve güzel. Şu komutlarını sıkca
kullanıyorum:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:Gist&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:Gist -p&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:'&amp;lt;,'&amp;gt;Gist&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:'&amp;lt;,'&amp;gt;Gist -p&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-p&lt;/code&gt; seçeneği &lt;strong&gt;“secret”&lt;/strong&gt; olarak yolluyor. (Ben bunu özellikle de markdown ile
yazdığım dökümanlara anında preview yapabilmek için kullanıyorum, o an bakıyorum
sonra siliyorum) &lt;code class=&quot;highlighter-rouge&quot;&gt;'&amp;lt;,'&amp;gt;&lt;/code&gt; de visual ile seçilen kısım anlamını taşıyor.&lt;/p&gt;

&lt;p&gt;Visual moda herhangi bir kod parçasını seçip &lt;code class=&quot;highlighter-rouge&quot;&gt;:Gist&lt;/code&gt;  yazdığınızda otomatik
olarak eklenir. Yine -p ile dilerseniz “secret” olarak yollama imkanınız var.
&lt;code class=&quot;highlighter-rouge&quot;&gt;:help gist-vim&lt;/code&gt; ile daha fazla bilgiye ulaşabilirsiniz.&lt;/p&gt;

&lt;p&gt;(Bonus: &lt;code class=&quot;highlighter-rouge&quot;&gt;:Gist -p&lt;/code&gt; ile markdown dosyalarınız için gizli bir Gist oluşturup ön
izleme yapabilirsiniz)&lt;/p&gt;

&lt;h2 id=&quot;gundohttpsgithubcomsjlgundovim&quot;&gt;&lt;a href=&quot;https://github.com/sjl/gundo.vim&quot;&gt;gundo&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Vim 7.x serisi ile beraber &lt;strong&gt;“undo”&lt;/strong&gt; özelliği gelmişti. Şimdi bu undo özelliği
bildiğimiz geri alma özelliklerinden farklı. Eğer vim/vimrc’de &lt;code class=&quot;highlighter-rouge&quot;&gt;set undofile&lt;/code&gt;
ayarını açtıysanız bu özelliği kullanabilirsiniz. Peki nedir bu özellik?&lt;/p&gt;

&lt;p&gt;Bu özellike ile bir dosya üzerinde yaptığınız tüm değişikleri, &lt;strong&gt;dosyayı
kapatsanız&lt;/strong&gt; dahi kaydediliyor. Yani örneğin bir değişiklik yaptınız, dosyayı
kaydetip çıktınız. 1-2 gün sonra tekrar açıp bildiğimiz &lt;code class=&quot;highlighter-rouge&quot;&gt;u&lt;/code&gt; eski haline
getirebilirsiniz (hali derken tabi 10 tane değişiklik yaptıysanız en eski haline
bile getirebilirsiniz)&lt;/p&gt;

&lt;p&gt;gundo ise “graphical-undo” anlamına geliyor. Dosya üzerinde yaptığınız tüm
değişiklikleri ağaç formatında gösteriyor:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-gundo.png&quot; alt=&quot;Vim altında gundo kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ben bunu &lt;code class=&quot;highlighter-rouge&quot;&gt;,g&lt;/code&gt; kısa yolu ile açıp kapatacak şekilde düzenledim. Böylelikle eski
sürümlere bakıp bir sorun olduğunda kolayca geçebiliyorum.&lt;/p&gt;

&lt;p&gt;(Bonus: Undofile özelliği ile fazladan istemediğiniz dosyalar oluşuyor. Bunları
&lt;code class=&quot;highlighter-rouge&quot;&gt;set undodir=/tmp&lt;/code&gt; gibi bir seçenek ile değiştirebilirsiniz.)&lt;/p&gt;

&lt;h2 id=&quot;nerdcommenterhttpsgithubcomscrooloosenerdcommenter&quot;&gt;&lt;a href=&quot;https://github.com/scrooloose/nerdcommenter&quot;&gt;nerdcommenter&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Bu da çok sade ama en çok işime yarayan eklentilerden biri. Herhangi bir kod
parçasını &lt;code class=&quot;highlighter-rouge&quot;&gt;comment&lt;/code&gt; etmek için kullanıyorum. İki tane kısa yolu var biri
kapatıyor diğeri de açıyor&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;,cc&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;,c&amp;lt;space&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Güzel olan ise ön tanımlı olarak bir çok dili otomatik olarak tanıyor ve ona
göre &lt;code class=&quot;highlighter-rouge&quot;&gt;comment&lt;/code&gt; ediyor kodu. Yani python kodlarının önüne &lt;code class=&quot;highlighter-rouge&quot;&gt;#&lt;/code&gt; koyuyor, c,cpp
kodlarının önünde &lt;code class=&quot;highlighter-rouge&quot;&gt;\\&lt;/code&gt; gibi.&lt;/p&gt;

&lt;p&gt;Nerdcommenter çok kapsamlı ve bir çok modu destekleyen tarafları da var.
Genelikle bu tarz eklentilerde bunlara boğulup gidebilirsiniz. &lt;code class=&quot;highlighter-rouge&quot;&gt;:help
nerdcommenter&lt;/code&gt; ile daha fazla bilgiye ulaşabilirsiniz.&lt;/p&gt;

&lt;h2 id=&quot;supertabhttpsgithubcomervandewsupertab&quot;&gt;&lt;a href=&quot;https://github.com/ervandew/supertab&quot;&gt;supertab&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Vim’in muhteşemem bir completion motoru var. Bunu &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl+x&lt;/code&gt; ile çağırabiliyorsunuz
ve sonra istediğiniz completion moda girmenizi sağlıyor(mesela ctrl+f ile &lt;code class=&quot;highlighter-rouge&quot;&gt;file
completion&lt;/code&gt; moduna girebiliyorsunuz.) Genelikle bir çok dil için completion
eklentileri bulabilirsiniz, her biri bu motoru kullanıyor. Şu şekilde bir şey:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-supertab.png&quot; alt=&quot;Vim altında supertab kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;supertab ise insert modunda otomatik olarak bu modları kullanmanızı sağlıyor.
Örneğin &lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/l&amp;lt;tab&amp;gt;&lt;/code&gt; ile otomatik olarak file completionu yapıyor, yani &lt;strong&gt;/usr&lt;/strong&gt;
dizindeki dosyaları getiriyor tab’e bastıkça. Bir çok ayrıntı özelliği de var.
Olmazsa da olur bu eklenti, ama daha da güzelleştiriyor.&lt;/p&gt;

&lt;h2 id=&quot;easymotionhttpsgithubcomlokaltogvim-easymotion&quot;&gt;&lt;a href=&quot;https://github.com/Lokaltog/vim-easymotion&quot;&gt;easymotion&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Vim’deki kelime bazlı “motion” düzenkelerini kolaylaştıran bir eklenti. Örneğin
normalde &lt;strong&gt;j,k,w,b,e,f,t,d,vs..&lt;/strong&gt; gibi envai çeşit tanımlar vim ile dolaşabilir
ve gerekirse bunlar üzerinde işlemler yapabilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easymotion&lt;/strong&gt; gezmeyi daha da kolaylaştırıyor. &lt;code class=&quot;highlighter-rouge&quot;&gt;,,w&lt;/code&gt; ile doğrudan “w” bazlı motion
üzerinden bir harf haritası çıkartıyor, yani kelime bazlı. Sonra istediğiniz
kelimeye tek bir tıkla geçebiliyorsunuz. Örnek&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;imleç&amp;gt;Lorem ipsum bir başka olabilirdi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;İmleç Lorem kelimesinin önünde dururken &lt;code class=&quot;highlighter-rouge&quot;&gt;,,w&lt;/code&gt; basarak şu şekile getiriyorsunuz:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;imleç&amp;gt;Lorem {a}psum {b}ir {c}aşka {d}olabilirdi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;c&lt;/code&gt; tuşuna basarak “başka” kelimesine geçiyorsunuz. Aşağıda örnek bir görüntü
görebilirsiniz:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-easymotion.png&quot; alt=&quot;Vim altında easymotion kullanımı&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;surroundhttpsgithubcomtpopevim-surround&quot;&gt;&lt;a href=&quot;https://github.com/tpope/vim-surround&quot;&gt;surround&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Surround eklentisi ile bir kelime ya da satırı belirli bir karakter ile
kapatabilirsiniz. Örneğin&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;foo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;kelimesini &lt;code class=&quot;highlighter-rouge&quot;&gt;ysw&quot;&lt;/code&gt; kombinasyonu ile&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;foo&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;haline getirebilirsiniz. Ya da &lt;code class=&quot;highlighter-rouge&quot;&gt;yss&quot;&lt;/code&gt; ile tüm satırı kapatabilirsiniz. Hangi
karakter ile kapatmak istediğiniz size bağlı. Syntaxı berbat ama yine Vim’in
motion’larını desteklediği için idare edilebilir. Bir sonraki eklenti ile daha
bir anlamlı hale geliyor.&lt;/p&gt;

&lt;h2 id=&quot;repeathttpsgithubcomtpopevim-repeat&quot;&gt;&lt;a href=&quot;https://github.com/tpope/vim-repeat&quot;&gt;repeat&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Bir önceki “surround” özelliğini tekrar tekrar yapmak işkence olacaktır. Mesela
birden fazla kelime veya satır için. Normalde &lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt; karakteri ile Vim’de bir
önceki “motion” tekrarlayabiliyorsunuz. Mesela &lt;code class=&quot;highlighter-rouge&quot;&gt;yy&lt;/code&gt; ile bir satırı
kopyaldıysanız tekrar &lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt; ile bir sonraki klasörü kopyalaybilirsiniz. Kendisi
otomatik olarak son yaptığınız hamleyi yapıyor.&lt;/p&gt;

&lt;p&gt;repeat ise bu &lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt; özelliğini daha da güçlü bir hale getiriyor. Surround gibi
eklentiler ile uyumlu bir şekle getiriyor. Böylelikle &lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt; ile kolay bir şekilde
kelimeleri veya satırları istediğiniz karakterle kapatabilirsiniz (yani tekrar
tekrar aynı tuş kombinasyonları girmenize gerek yok)&lt;/p&gt;

&lt;h2 id=&quot;tagbarhttpmajutsushigithubcomtagbar&quot;&gt;&lt;a href=&quot;http://majutsushi.github.com/tagbar/&quot;&gt;tagbar&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;ctags, exuberant ctags, etags, vs.. gibi “tags” üreten uygulamalar için ayrı bir
pencere açıyor. Böylelikle kullanılan modüller, fonksiyonlar, macrolar,
enum’lar,vs.. gibi envai çeşitle bilgiyi tek bir hamlede görebilirsiniz. Bunu
ben &lt;code class=&quot;highlighter-rouge&quot;&gt;,b&lt;/code&gt; tuşu ile kapatıp açıyorum. Görüntüsü ise şu şekilde bir şey:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-tagbar.png&quot; alt=&quot;Vim altında tagbar kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(Dipnot: ctags özelliği ile dahili vim-ctags özelliği ile fonksiyonlar ve
ilintili dosyalar arasında kolayca geçiş yapabilirsiniz.)&lt;/p&gt;

&lt;h2 id=&quot;autoclosehttpsgithubcomtownkvim-autoclose&quot;&gt;&lt;a href=&quot;https://github.com/Townk/vim-autoclose&quot;&gt;autoclose&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Bu otomatik olarak parantez, kesme işaret,.. gibi karakterleri kapatıyor.
Örneğin &lt;code class=&quot;highlighter-rouge&quot;&gt;[&lt;/code&gt; karakteri yazdığınızda &lt;code class=&quot;highlighter-rouge&quot;&gt;]&lt;/code&gt; otomatik olarak ekleniyor. Ayrıca &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;&lt;/code&gt;
 &lt;code class=&quot;highlighter-rouge&quot;&gt;'&lt;/code&gt;, gibi bir sürü karakter de tanımlamak mümkün.&lt;/p&gt;

&lt;p&gt;Güzel bir kaç özelliğe de sahip. Örneğin &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;&lt;/code&gt; karakterini eklediniz, kendisi
gitti bir tane daha ekledi. Siz arasını doldurmaya başladınız ve ikinci &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;&lt;/code&gt;
karakterin sonuna geldiniz. Burada insert modundan çıkıp &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;&lt;/code&gt; karakterini eş
geçeceksiniz. Ama autoclose’de bunu yapmanıza gerek yok, &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;&lt;/code&gt; karakteri
yazdığınızda doğrudan onu eş geçmiş olursunuz.&lt;/p&gt;

&lt;p&gt;Ya da iki karakter arasında iseniz ve insert modunda ilkini sildiyseniz diğeri
de otomatik olarak siliniyor.&lt;/p&gt;

&lt;h2 id=&quot;fugitivehttpsgithubcomtpopevim-fugitive&quot;&gt;&lt;a href=&quot;https://github.com/tpope/vim-fugitive&quot;&gt;fugitive&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Git deposu için ara sıra kullandığım bir eklenti. Kurduktan sonra herhangi bir
git deposunda (ki sadece bir git deposunda çalışır, git deposu yoksa : ile
çağıramazsınız).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:GStatus&lt;/code&gt; ile değişen dosyaları ve sonrasında + ve - tuşları ile istediğim
dosyaları staging alanına ekleme imkanı sunuyor&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:Gcommit&lt;/code&gt; ile commit için gerekli alanı oluşturup depoya commit etmemi sağlıyor&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:Gdiff&lt;/code&gt; yana yana olarak son değişiklikleri gösteriyor (ki bu pek sorunlu
gerçi)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;:Git&lt;/code&gt; ile git komutunu doğrudan çalıştırıp, push, pull gibi işlemlere olanak
sağlıyor&lt;/li&gt;
  &lt;li&gt;vs..&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;:Gstatus’u çalıştırıca çıkan bir ekran görüntüsü:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-fugitive.png&quot; alt=&quot;Vim altında fugitive kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Normalde terminal’den ya da gui ile kullanıyorsanız bir sorun yok. Ama
MacVim ya da GVim ile güzel bir şekilde çalışıyor. Bir sürü fazla özelliği de
var. Dediğim gibi çok sık kullanmıyorum(tig + terminal ikilisini tercih
ederim) ama yine de MacVim gibi arayüzlerle iyi oluyor.&lt;/p&gt;

&lt;h2 id=&quot;nerdtreehttpsgithubcomscrooloosenerdtree&quot;&gt;&lt;a href=&quot;https://github.com/scrooloose/nerdtree&quot;&gt;nerdtree&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nerdtree&lt;/strong&gt; başta güzel gözüken, ama pek kullanılmayan, sonra şuna bir daha göz
atayım diyerek aşık olabileceğiniz bir eklenti. Benim olmazsa olmazlardan biri
haline geldi. Yaptığı ise bulunduğunuz dizini ağaç şekilde sol tarafta
göstermesi:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/blog-vim-nerdtree.png&quot; alt=&quot;Vim altında nerdtree kullanımı&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Hemen hemen her IDE’de olan bir şey gibi düşünebilirsiniz, ama nerdtree’nin
güzelliği doğrudan Vim içinden kolayca klasör oluşturma, yer imi oluşturup
onlara hızlıca geçme, istediğiniz dosya veya klasörü ayrı sekmelerde ve ya
dikey,yatay pencerelerde açma imkanı sunmasıdır.&lt;/p&gt;

&lt;p&gt;Kullandıkça eliniz, ayağınız oluyor. Bunu &lt;code class=&quot;highlighter-rouge&quot;&gt;,n&lt;/code&gt; tuşuna atadım ve kolayca kapatıp
açabiliyorum.&lt;/p&gt;

&lt;p&gt;(Bonus: Macvim altında mouse ile normal dosya yöneticisi gibi gezebiliyorsunuz!)&lt;/p&gt;

&lt;h2 id=&quot;powerlinehttpsgithubcomlokaltogvim-powerline&quot;&gt;&lt;a href=&quot;https://github.com/Lokaltog/vim-powerline&quot;&gt;powerline&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Powerline için çok söze gerek yok, &lt;strong&gt;Insert, Normal, Recording, Visual, Tagbar,
Nerdtree, Ctrlp, Gundo,vs..&lt;/strong&gt; gibi envai çeşit mod için farklı renklendirme
özelliğine sahip. Yukarıda şu ana kadar paylaştığım tüm ekran görüntülerinde en
alta renkli renkli olarak mevcut&lt;/p&gt;

&lt;p&gt;Kesinlikle tavsiye ederim.&lt;/p&gt;

&lt;p&gt;(Dipnot: Mac altında dotfiles/stuff’daki “Source Code Pro for Powerline” fontunu
kurarsanız “fancy” modundaki grafiksel özellikleri de görmüş olursunuz)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Hepsi bu kadar. Dotfiles klasöründe yukarıdakilerden farklı eklentiler de
mevcut, onlar genelikle renklendirme, dosya tanımı,vs.. gibi işler olduğundan
anlatmadım.&lt;/p&gt;

&lt;p&gt;Bir sonraki yazımda sıkca kullandığım, bilin(mey)en Vim özelliklerini anlatmayı
düşünüyorum. Kullandığız değişik ve güzel Vim eklentileriniz varsa yorum
kısmında belirtebilirsiniz.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>QTcpServer sınıfına SSL desteği eklemek (Qt)</title>
		<link href="http://blog.arsln.org/qtcpserver-sinifina-ssl-destegi-eklemek-qt/"/>
        <updated>2012-11-16T14:25:46+00:00</updated>
		<id>http://blog.arsln.org/qtcpserver-sinifina-ssl-destegi-eklemek-qt</id>
        <content type="html">&lt;p&gt;Qt ile yazdığımız bir sunucu uygulaması için SSL desteği eklememiz gerekiyordu.
Bunun için araştırma yaptığımda yine her zamanki gibi karışık ve herşeyi baştan
anlatan bir yazı bulamayınca, şu an okuduğunuz blog yazısı ortaya çıktı.&lt;/p&gt;

&lt;p&gt;Sunucumuz &lt;a href=&quot;http://qt-project.org/doc/qt-4.8/qtcpserver.html&quot;&gt;QTcpServer&lt;/a&gt;
sınıfından üretilmiştir. Genelikle herkes bu temel
sunucu üzerinden kendi sunucularını yazarlar. Burada tek sorun
&lt;a href=&quot;http://qt-project.org/doc/qt-4.8/qtcpserver.html&quot;&gt;QTcpServer&lt;/a&gt;, QTcpSocket
sınıfını kullanıyor. Bu sınıfın da SSL desteği mevcut değil.  Qt API
belgelerine baktığımda bununla ilgili
&lt;a href=&quot;http://qt-project.org/doc/qt-4.8/qsslsocket.html&quot;&gt;QSslSocket&lt;/a&gt; diye SSL
protokolu kullanan bir sınıf olduğunu gördüm. Bunun için QTcpServer’in
kullandığı üç tane &lt;code class=&quot;highlighter-rouge&quot;&gt;virtual&lt;/code&gt; fonksiyonu tekrar yazmamız gerekiyor. Bu
fonksiyonlar sırayla şunlar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://qt-project.org/doc/qt-4.8/qtcpserver.html#incomingConnection&quot;&gt;incomingConnection()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://qt-project.org/doc/qt-4.8/qtcpserver.html#nextPendingConnection&quot;&gt;nextPendingConnection()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://qt-project.org/doc/qt-4.8/qtcpserver.html#hasPendingConnections&quot;&gt;hasPendingConnections()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;İlk başta &lt;code class=&quot;highlighter-rouge&quot;&gt;incomingConnection()&lt;/code&gt; desteğini değiştirelim. 
&lt;strong&gt;QTcpServer&lt;/strong&gt; bu fonksiyonu her yeni bağlantıda çağırıyor. Sonra bir tane
&lt;strong&gt;QTcpSocket&lt;/strong&gt; oluşturuyor, soket tanımlıyor ve bunu da dahili bir listeye
ekliyor. Bu dahili liste de &lt;code class=&quot;highlighter-rouge&quot;&gt;nextPendingConnection()&lt;/code&gt; veya
&lt;code class=&quot;highlighter-rouge&quot;&gt;hasPendingConnections()&lt;/code&gt; gibi fonksiyonlar ile uyum halinde çalışıyor.
Bunların hiç birini siz yapmıyorsunuz. Hepsi otomatik olarak &lt;strong&gt;QTcpServer&lt;/strong&gt;
tarafından yapılıyor. SSl desteği için aşağıdaki gibi bunu yeniden yazmamız
gerekiyor(reimplementation):&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;incomingConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;socketDescriptor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;QSslSocket&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;QSslSocket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 
	&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setProtocol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;QSsl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SslV3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// TODO: Or other protocols, like tls, sslv2? Research...
&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;// For now these files should be reside in the same folder as the application
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setPrivateKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;server.key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// $ openssl genrsa -out server.key 2048
&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setLocalCertificate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;server.crt&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// $ openssl req -new -x509 -key server.key -out server.crt -days 1095
&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setSocketDescriptor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;socketDescriptor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;pendingConnections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;enqueue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Will be used in nextPendingConnection()
&lt;/span&gt;
		&lt;span class=&quot;c1&quot;&gt;// newConnection() is emmited within QTcpServerPrivate. No need to emit it manually.
&lt;/span&gt;		&lt;span class=&quot;c1&quot;&gt;// However encrypted() is emitted if QSslSocket enters encrypted mode.
&lt;/span&gt;		&lt;span class=&quot;c1&quot;&gt;// Useful for debugging or other stuff.
&lt;/span&gt;		&lt;span class=&quot;c1&quot;&gt;// TODO: we might need sslErrors() signal implementation
&lt;/span&gt;		&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SIGNAL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;encrypted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()),&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SLOT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()));&lt;/span&gt; 

		&lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;startServerEncryption&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//  Initiate the SSL handshake
&lt;/span&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; 
	&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
		&lt;span class=&quot;k&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Koda yorumlar eklediğimden detaya girmeyeceğim, sadece &lt;strong&gt;pendingConnections&lt;/strong&gt;
kısmını anlatayım. &lt;strong&gt;QTcpServer&lt;/strong&gt; bildiğiniz gibi kendi listesini tutuyor.  Fakat
bizim &lt;code class=&quot;highlighter-rouge&quot;&gt;nextPendingConnection()&lt;/code&gt; ve diğer fonksiyonları ile çalışması için
oluşturduğumuz &lt;strong&gt;QSslSocket&lt;/strong&gt;i bu listeye dahil etmemiz gerekiyor. Fakat böyle
bir liste olmadığından kendimiz  bir &lt;strong&gt;QQueue&amp;lt;QSslSocket*&amp;gt;&lt;/strong&gt; veri tipi oluşturup
ona ekliyoruz. &lt;a href=&quot;http://en.wikipedia.org/wiki/Queue_(abstract_data_type)&quot;&gt;FIFO veri
tipinde&lt;/a&gt; olduğundan
gelen bağlantıların düzgün bir şekilde gitmesi açısından da önemli. Sırada
&lt;code class=&quot;highlighter-rouge&quot;&gt;nextPendingConnection()&lt;/code&gt; sınıfı var, onu da şu şekilde
değiştiriyoruz:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;QTcpSocket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nextPendingConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;// Return the next connection in the queue. If there is none,
&lt;/span&gt;	&lt;span class=&quot;c1&quot;&gt;// return 0.
&lt;/span&gt;	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pendingConnections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pendingConnections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dequeue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada gördüğünüz gibi daha önce oluşturduğumuz QQueue listesindeki socketleri
geri dönderiyoruz. Geri dönüş veri tipi QTcpSocket* olması da bir sorun değil,
çünkü QSslSocket de QTcpSocketin bir altsınıfı olduğundan aynı sayılır o
anlamda. Tabi son olarak &lt;code class=&quot;highlighter-rouge&quot;&gt;hasPendingConnections()&lt;/code&gt; de bu QQueue listesinden dönüş
yapması gerektiğinden onu da şu şekilde değiştiriyoruz:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Server&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasPendingConnections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pendingConnections&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Header dosyalarına gerekli olan &lt;strong&gt;QSslSocket, QQueue, vs..&lt;/strong&gt; gibi kitaplıkları
eklemeyi unutmayın. Ayrıca pendingConnectionsi de tanımlamaya unutmayın. Bir de
&lt;code class=&quot;highlighter-rouge&quot;&gt;ready()&lt;/code&gt; diye bir slot var. &lt;code class=&quot;highlighter-rouge&quot;&gt;incomingConnection(&lt;/code&gt;) sınıfında SSL şifrelemesi
gerçekleştiğinde &lt;code class=&quot;highlighter-rouge&quot;&gt;encrypted()&lt;/code&gt; diye bir sinyal gönderiliyor. Bende bu slot
içinde sadece bir &lt;code class=&quot;highlighter-rouge&quot;&gt;qDebug()&lt;/code&gt; çıktısı var ve adı üzerinde debug için
kullanıyorum. Siz kendiniz için kullanabilirsiniz.&lt;/p&gt;

&lt;p&gt;Son olarak da sonradan gördüğüm bir yardımcı kitaplıktan bahsedeyim. Bizim
yazdığımız sunucu modifiye edildiğinden bize pek uymuyordu ama
&lt;a href=&quot;http://dev.libqxt.org/libqxt/wiki/Home&quot;&gt;libqxt&lt;/a&gt; diye Qt eklenti kütüphaneleri
var. Gerçekten güzel bilgiler mevcut. Örneğin network altında doğrudan SSL
kullanan bir tane sunucu sınıfı
&lt;a href=&quot;http://dev.libqxt.org/libqxt/src/de05d2b60c54a04039dfaafdd54018fab6f24ace/src/network/qxtsslserver.cpp?at=master&quot;&gt;qxtsslserver&lt;/a&gt;
mevcut. Eğer size uygunsa yukarıda yaptığım modifikasyonları yapmadan doğrudan
bunu kullanabilirsiniz.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Linux kullanıcısından Mac OS X değerlendirmesi</title>
		<link href="http://blog.arsln.org/linux-kullanicisindan-mac-os-x-degerlendirmesi/"/>
        <updated>2012-08-05T14:25:46+00:00</updated>
		<id>http://blog.arsln.org/linux-kullanicisindan-mac-os-x-degerlendirmesi</id>
        <content type="html">&lt;p&gt;Bundan 1-2 ay önce kendime yeni bir Macbook Air aldım. Daha önce hiç Mac kullanmamış, ama yaklaşık 7-8 yıldır Linux kullanan biri olarak bununla ilgili tecrübelerimi yazayım dedim. Aşağıda &lt;strong&gt;yazılım, donanım, kullanım,vs..&lt;/strong&gt; yönünden bir Linux kullanıcısı/geliştirici açısından izlenimlerimi bulabilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/osx_uygulamalar.jpg&quot; alt=&quot;Mountion Lion altinda kullanilan uygulamar&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Dosya sistemi farklı(haliyle). Elim hep /usr, /home/ vs. gibi dizinlere gidiyor.  Zamanla bu dizinlere değil de farklı yerlere bakmak gerektiğini anlıyorum tabi ki. Alışkanlık gerektiriyor. Kullandığınız özel betikler varsa bunları ona göre düzenlemeniz gerekiyor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Terminal olarak &lt;strong&gt;iTerm2&lt;/strong&gt; kullanıyorum, herhangi bir sorun yaşamadım. Normalde &lt;strong&gt;Gnome-terminal&lt;/strong&gt; kullanıyordum. Tmux desteği bile var (bunun sayesinde Tmux’un session bilgisini doğrudan iTerm’in pencere sistemi ile kullanabiliyorsunuz.  Yani mesela Yakuake’deki gibi pencereleri bölüp, kapatıp açtığınızda aynen bıraktığınız gibi geliyor). Fakat ben iTerm’in bu özelliğini kullanmadım.  Zaten uzun süredir kullandığım ve kişiselleştirdiğim tmux.conf ile klasik düzende devam ediyorum.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Tmux var ve tıpkı Linux altındaki gibi düzgünce çalışıyor. Herhangi bir sorun yaşamadım. Linux altında kullandığım &lt;strong&gt;tmux.conf&lt;/strong&gt; ile sorunsuz çalışıyor,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Vim&lt;/strong&gt; de Linux altında kullandığım dosyaları, eklentileri yine sorunsuz bir şekilde çalıştırabildim. Bunu için Github’da dotfiles deposunu kullanıyorum (merak edenler için sağ taraftan github linkinden ulaşabilirsiniz.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Zsh&lt;/strong&gt;‘da bazı eklentilerim için değişiklik yapmak zorunda kaldım. Bazı uygulamalar farklı çalıştığından alias’ları değiştirdim(&lt;em&gt;ls –color&lt;/em&gt; yerine &lt;em&gt;ls -G&lt;/em&gt; gibi).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Cmd tuşuna alışamadım bir türlü. &lt;strong&gt;CMD, OPTİON, CTRL, FN&lt;/strong&gt; tuşlarını ciddi şekilde birleştirerek kullanan bir işletim sistemi OS X. Bazen ALT diyorlar, bazı yerlerde OPTİON diyorlar (ikisi de aynı). CMD ve CTRL karışıklığı. Cmd dışında Ctrl tuşu da var. Normalde &lt;strong&gt;Ctrl+C, Ctr+V&lt;/strong&gt; gibi tuşlar yerine &lt;strong&gt;Cmd+C, CMD+V&lt;/strong&gt; gibi kısayollar kullanmak gerekiyor. Bu da kafa karışıklığına yol açıyor&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Terminal altında Cmd değil de Ctrl tuşunu kullanmanız gerekiyor. &lt;strong&gt;Burada Capslock’u ne yapmalı&lt;/strong&gt; o zaman? CMD ya da CTRL mi? Ben Emacs tarzı veri girişini çok kullandığım için (Xcode, Bash/Zsh readline) CTRL olarak ayarladım.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;İnsert tuşu yok, delete tuşu yok(onun yerine backspace var), silmek için &lt;strong&gt;Fn+Backspace&lt;/strong&gt; yapmanız gerekiyor. PageUp, PageDown gibi tuşlar da yok. Özellikle Tmux ile copy-mode’a girerken rahatsız oluyor bu.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;İngilizce klavye kullandığımdan kod yazmak çok daha verimli ve hızlı olmaya başladı(gerçi bunun Linux-Mac durumu ile alakası yok). Fakat Türkçe harflerden eksik kaldım(gördüğünüz gibi). Bununla ilgili küçük bir değişiklik yapmıştım klavye kullanımı ile ilgili (uzun süre tutunca türkçe hali geliyordu). Paylaşırım sizlerle sonra.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Dokunmatik&lt;/strong&gt; touchpad çok iyi çalışıyor. İpad,Iphone’daki gibi verimli ve kesintsiz bir deneyim sunuyor. Bir süre sonra Mouse kullanmayı bile bırakabiliyorsunuz bu yüzden (çünkü daha verimli, hızlı ve konforlu).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Dokunmatik touchpad’ı kişiselliştirme imkanı var ekstra bir araç sayesinde (&lt;strong&gt;Better TouchTool&lt;/strong&gt;). Ben bunu kullanarak Chrome’da gezmek için bazı ekstradan seçenekler ekledim (mesela üç parmak ile sağ-sol ile sekmeleri gezme, aşağı yapınca sekme kapanıyor, yukaria yapınca yeni sekme açılıyor, iki kere dokunca kapanmış sekme geliyor)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Doğal kaydırma (&lt;strong&gt;Natural Scrolling&lt;/strong&gt;) başta garip geldiğinden kapatmıştm. Fakat Apple ileride iOS cihazlarını Mac cihazları ile birleştireceğinden ve ileride dokunmatik ekranlı Mac’ler olacağından bu alışkanlığı kazanmak amacıyla tekrar açtım (trend oraya doğru gidiyor). Fakat fare ile bu sefer düzgün olmadı.  Bunun için de &lt;strong&gt;Scroll Reverser&lt;/strong&gt; diye bir uygulama kuruyorsunuz. Dokunmatik doğal sürükleme kullanırken, fare normal scrolling’i kullanmış oluyor&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Logitech M705&lt;/strong&gt; faresini kullanıyorum. Kullanımı, tepki süresi çok kötü çalışıyor. Logitech yazılımı kötü diyebilirim. Linux altında çok daha iyi çalışıyor çünkü bu fare.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Basit bir yedekleme aracı olarak &lt;strong&gt;Time Machine&lt;/strong&gt; uygulaması var. Boş bir partition sunuyorsunuz(harici veya dahili disk) kendisi saat başı tüm sistemin yedeğini alıyor. Basit ve bir çok kişinin kullanacağı bir araç olmuş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Tam ekran&lt;/strong&gt; özelliği güzel bir şekilde entegre edilmiş (çift ekran kullanan kullanıcılar haricinde). Gnome 3 ve Unity de de kullanım tecrübelerini bu yönde geliştiriyor artık. Alışmak zor olmadı buna, keza gayet severek kullandığım bir özellik.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Masaüstü uygulamaları kaliteli, göze hitap eden uygulamalar.  Albenisi çok. Bir çok şirketin Mac yazılımını bulabiliyorsunuz. Ve hepsi de güzel oluyor. Uygulamalar tıpkı iPhone’daki gibi paralı oluyor. Genel olarak insanların da parayla satın aldığını sezdim. K&lt;strong&gt;ullanıcı kitlesi para vermeyi normal buluyor&lt;/strong&gt; (bence bir emek, yazılım için bu doğru bir şey). Tabi açık kaynak kodlu yazılımlar da güzel bir şekilde çalışıyor (Chrome, Firefox, vs..). &lt;strong&gt;Firefox&lt;/strong&gt; özellikle çok daha güzel gözüküyor. Macbook Air’in ekran kalitesi iyi olunca daha da hoşunuza gidiyor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Uygulama kurmak için bir sürü yol var. Ayrıca uygulama kurmak da çok farklı (kurma yöntemi açısından). App Store’dan kurmak en kolayı, tıklıyorsun ve kendi kendine kuruyor(iPhone’daki gibi)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;İnternet sitesinden indirdiğiniz kurulum dosyalarda da iki tür var. Bazıları &lt;strong&gt;.pkg&lt;/strong&gt; ile bitiyor, bazıları ise &lt;strong&gt;.dmg&lt;/strong&gt; ile. Pkg ile biten Windows ınstaller gibi Next, Next şeklinde ilerleyip kuruyor. Dmg ile bitenlerde karşınıza küçük bir pencere çıkıyor ve uygulama simgesini Applications klasörüne atıyorsunuz (bu da kurulmuş oluyor). Bu uygulama simgeleri de aslında birer klasör oluyor (terminal ile girip bakabilirsiniz)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Tmux, git, vs, gibi uygulamaları Homebrew ile kurabiliyorsunuz. &lt;strong&gt;Homebrew&lt;/strong&gt;, Gentoo Portage gibi doğrudan kaynağını indirip kuran bir paket yöneticisi.  Ayrıca &lt;strong&gt;“Xcode Command Line Tools”&lt;/strong&gt; adında bir paket var (Xcode içinden indirebiliyorsunuz). Şimdi karışıklık burada başlıyor. Mesela X öde içinden git çıkıyor, ama Homebrew ile de kurabiliyorsunuz. Sistemde iki tane git olmuş oluyor. Homebrew &lt;em&gt;“/usr/local”&lt;/em&gt; altına kuruyor, Xcode ise kendi &lt;em&gt;“/Applications/Developer/Xcode..”&lt;/em&gt; deki klasörüne kuruyor.  Genel olarak git, zsh, vs gibi temel paketler Xcode Command Line Tools içinden çıkıyor, ama daha sofistike uygulamalar için Homebrew şart(mesela Tmux için). Xcode içinden çıkan uygulamaları ‘xcrun uygulama_adı’ şeklinde çalıştırabilirsiniz (örneğin &lt;em&gt;‘xcrun git push’&lt;/em&gt;).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xcode ile kod geliştirmek zorundasınız uzun vadede (Ojbective-C, iOS programlama için). Çünkü bir çok özelliği ve hızlılığı sadece Xcode ile elde edebiliyorsunuz. Vim ile uzun bir süre denedim yazmayı ama sonunda pes ettim.  Vim’de &lt;strong&gt;clang_complete&lt;/strong&gt; eklentisi bile Xcode gibi hızlı ve verimli olamıyor (bir çok metodu tamamlamıyor mesela). &lt;strong&gt;APİ kullanımı, belgelere bakma, snippets özelliği, code tamamlama, iOS arayüz tasarımı,vs..&lt;/strong&gt; gibi bir çok işi buradan yapmak zorundasınız. Fakat Xcodebuild adında, doğrudan Xcode dosyaları ile çalışan bir arayüz sunuyor Apple. Bununla Xcode ile aynı şekilde uygulamanızı derleyebiliyorsunuz. Bu otomatik betik, Jenkins gibi inşa sistemlere bağlamak, shell ile bir bağ oluşturup farklı işler yapmak istiyorsanız güzel bir araç. Çok kullanma durumum olmadı, ama güzel benziyor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xcode ve diğer bir çok uygulama &lt;strong&gt;Emacs kısa yolları&lt;/strong&gt; kullanıyor. Bu yüzden Bash altında kullandığınız bir çok kısayollu aynen bunda da kullanabilirsiniz (Ctrl+A, +E, +K, +F, +B, vs.. gibi). Xcode için &lt;a href=&quot;https://github.com/JugglerShu/XVim/&quot;&gt;Vim eklentisi&lt;/a&gt; de var, fakat kararsız ve Xcode’un çalışma şekli ile uygunsuz (Xcode sizi hep insert modunda olmanızı bekliyor belli komutlar için, yani mesela otomatik kod tamamlamayı tekrar açmak için insert moduna girmeniz gerekiyor)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Her şey birbiriyle çok uyumlu. Bağlantılı bir şekilde işliyor. Profil fotoğrafınız varsa tüm uygulamalar Avatar olarak onu kullanabiliyor. Sistemin bir çok yerinde email, twitter, imessage gibi yerlere bilgi yollamak işi kolaylaştırıyor. Bir şeyleri bir yerden bir yere bırakma ile ilgili küçük ayrıntılar çokça mevcut (mesela bir dosyayı Mail simgesinin üzerine bıraktığınızda doğrudan onu yollamaya kalkıyor). &lt;strong&gt;Bu kararlılığı ve bütünü hissediyorsunzu bir süre sonra. Her şey sorunsuz bir şekilde işliyor.&lt;/strong&gt; Zamanla alışıyorsunuz ve tıpkı iPhone’daki gibi ‘Demek ki bu işler böyle olmalı’ diyorsunuz (arayüz kullanım açısından).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Gnome3, Ünity, Kde gibi masaüstünde kullanılan bir çok özellike Mac’de alınmış. Özellikle Gnome 3 kullanıp Mac kullanmaya başlayınca (Gnome 3 daha yeni diye söylüyorum) &lt;strong&gt;bir çok benzerlik göreceksiniz&lt;/strong&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;iCloud’u çok kullanmıyorum. Dropbox’un Linux desteği olmasından dolayı benim için daha iyi. Fakat ilerleyen yıllarda iCloud desteği daha entegre bir şekilde çalışacağından bu konuda şüphelerim var malesef.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;İlginç ve saçma bulduğum özellikleri var. Örneğin: Uygulama silmek için &lt;strong&gt;çöp kutusuna bırakıyorsunuz&lt;/strong&gt;. Dosya yöneticisinde (Fınder) kes yapamıyorsunuz. Kısa yol olan &lt;strong&gt;Ctrl+X kullanabilirsiniz ama menüde yok&lt;/strong&gt;. Bir şey çöp kutusuna atmadan doğrudan silemiyorsunuz. Bunun için betikler var &lt;a href=&quot;https://github.com/jtbandes/delete-immediately&quot;&gt;Delete-immediately&lt;/a&gt;. Save aş özelliği sadece ALT tuşuna basınca çıkıyor, o da düzgün çalışmıyor. ‘Save aş’ diye farklı bir dosyaya kaydetmeye çalışırsanız, &lt;strong&gt;orijinal dosyayı da kaydediyor&lt;/strong&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Türkiye’de Mac ile ilgili güzel kaynak az. Bunlardan &lt;a href=&quot;http://www.sihirlielma.com/&quot;&gt;Sihirli Elma&lt;/a&gt; kaliteli ve uzun, doyurucu içerik sunuyor. Hoşuma gitti için sizlerle de paylaşayım dedim. Yurtdışında ise camia çok farklı. &lt;strong&gt;Klasik meşhur Apple fanboy’ları varken, Ünix/Geek’leri de çok&lt;/strong&gt;. Nasıl baktığınıza bağlı olarak değişiyor. Çok kafa takmamak lazım bu yüzden. Yine bir sürü kaynak var tabi, ben &lt;a href=&quot;http://www.macrumors.com/&quot;&gt;Macrumors.com&lt;/a&gt; sitesini tavsiye ediyorum. Apple camiası ve sorunları hakkında doyurucu ve kaliteli bilgi bulabilirsiniz (özellikle Forumlarında). Teknik camia ilgili hakkında ileride bir şeyler karalayacağım, şimdilik yeni yeni tanımaya başladığımdan yanlış bilgi vermek istemiyorum.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bu kadar. Aklıma geldikçe yine bu listeye eklemeler yapacağım, genel olarak bir sürü küçük farklılıklar var. Bazıları iyi, bazıları kötü. Bence alışkanlık ve bakış açısı ile düzeltilecek şeyler. Biraz farklı bakmak ve bazı şeylerden feragat etmek gerektiriyor Mac kullanmak. Özgürlüğe aşırı önem verenler bence çok rahatsız olurlar bu sistemde. Kişisel olarak sevdim diyebilirim. Yaklaşık bir aydır akşamları kullanıyorum evde. Başlarda terminal ve tuşlara alışmamıştım ama zamanla o da geçti. Şimdi bir çok işimi Mac altından yapıyorum. Tabi Linux kullanımım değişmedi. Gündüzleri ise işimde 8-9 saat Linux kullanıyorum (saat ortalaması olarak Linux başı çekiyor). İki farklı işletim sistemi olduğundan Github, Dropbox, vs.. gibi servisleri de daha fazla kullanmaya başladım &lt;strong&gt;senkron kalabilmek için&lt;/strong&gt;. Bunun dışında blog’da bundan sonra Mac ve özellikle Objective-C ile ilgili ipucuları da paylaşabilirim.&lt;/p&gt;

&lt;p&gt;Hepsi bu kadar. Linux’dan Mac’e geçiş açısından başka sorunlarınız varsa ya da düşüncüleriniz varsa yorum kısmından paylaşabilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(not: İngilizce klavye ile yazdım, ama okuma keyfi bozulmasın diye &lt;a href=&quot;http://turkce-karakter.appspot.com/&quot;&gt;Mustafa Emin Acer’in Text Deasciifier&lt;/a&gt; sitesini kullandim. Bu güzel calışmayı kullanmanızı ve tanıtmanızı tavsiye ederim.)&lt;/em&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Debian tabanlı yeni Pardus</title>
		<link href="http://blog.arsln.org/debian-tabanli-yeni-pardus/"/>
        <updated>2012-06-27T22:45:00+00:00</updated>
		<id>http://blog.arsln.org/debian-tabanli-yeni-pardus</id>
        <content type="html">&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/debian_tabanli_pardus.jpg&quot; alt=&quot;Debian Tabanlı Yeni Pardus&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Necdet Yücel tarafından
&lt;a href=&quot;http://nyucel.blogspot.com/2012/06/etkilesimli-tahtalarda-pardus-logolu.html&quot;&gt;çekilen&lt;/a&gt; Debian tabanlı Pardus konsol ekranı&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Yavaş yavaş bazı bilgiler gün ışığına çıkmaya başladı herhalde. Başlıkta yazdığım gibi önümüzdeki 1-2 ay içinde çıkacak olan Pardus, &lt;strong&gt;Debian&lt;/strong&gt; tabanlı bir dağıtım olacaktır. Eski bir Pardus geliştiricisi olarak o kadar emeğin, teknolojinin sona erdirilmesini tabi ki üzülerek izleyeceğim. Ama konumuz bu değil(bu yazı açısından), konumuz Debian tabanlı Pardus’a ilişkin bulgular.&lt;/p&gt;

&lt;h2 id=&quot;pardusun-debian-tabanl-olmasna-ilikin--nemli-bulgu&quot;&gt;Pardus’un Debian tabanlı olmasına ilişkin üç önemli bulgu&lt;/h2&gt;

&lt;p&gt;Son zamanlarda kamuya açık yerlerde bununla ilgili bir çok ipucu birikti. Bunlar Pardus’ta çalıştığım zamanlardaki bilgilerim ve Pardus çalıştayındaki bilgilerle birleşince ortaya çıktı. Şimdi sırayla bunlar neler onları yazayım:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Pardus Çalıştayı&lt;/strong&gt;. Pardus çalıştayında ben de yer almıştım. Benimle beraber Pardus ekibinde yer alan ekibin bir kısmı, daha önce ayrılmış geliştiriciler, Türkiye’deki Açık kaynak camiasından tanınmış simalar gibi bir çok insan katıldı. Bir çok şey çizildi yazıldı. Fakat orada özellikle &lt;strong&gt;Ahmet Kaplan&lt;/strong&gt;‘ın “Paket sayısı çok az, Ubuntu gibi on binlerce paketi olan bir dağıtımı alt yapı olarak kullanmak daha mantıklı” cümlesi aslında her şeyi özetler durumdaydı.&lt;/p&gt;

    &lt;p&gt;Ahmet kaplan dışında &lt;strong&gt;Jon Hall (maddog)&lt;/strong&gt; da “Debian gibi evrensel ve oturmuş bir dağıtım varken ve özellikle fork’a müsait iken başka bir paket yöneticisi kullanmak mantıksız” demişti.&lt;/p&gt;

    &lt;p&gt;Apache Foundation’da yer almış &lt;strong&gt;Alex Karasulu&lt;/strong&gt; da buna benzer düşünceye sahip idi. Kendisi de zaten Jon Hall ile beraber konu açıldıkça bunun avantajlarınıanlatmaya çalışıyordu.&lt;/p&gt;

    &lt;p&gt;Son olarak &lt;strong&gt;Enderunix&lt;/strong&gt; ekibi de tam kadro oradayı ve her biri de “Devlet Pardus gibi bir dağıtıma destek vermemeli, Ubuntu/Debian forku daha mantıklı” cümlesine yakın ortak bir düşünceye sahiptiler.&lt;/p&gt;

    &lt;p&gt;Tüm bunlar Ahmet Kaplan’ın istediği zemini hazırlamıştı aslında ta o zamanlar. Çalıştayda herkesin kafasında “Debian tabanlı bir Pardus” yerleşmişti ve mantıklı gelmeye başlamıştı (mantıklı ile o günün sonunda oluşan ve solunan havanın sonuçunda oluşan genel algıyı kastediyorum.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Danışma kurulu toplantısına ilişkin bilgiler&lt;/strong&gt;. Pardus Çalıştayında karar verilen bir konu vardı. O da bir danışma kurulunun kurulması ve Tübitak olmak üzere bir çok alandan insanların bir kurul oluşturması idi. Bu kurulda resmi/gayriresmi geliştirici, STK, topluluk, çözüm ortakları,vs.. gibi bir çok kesimden insanlar yer alacaktı.&lt;/p&gt;

    &lt;p&gt;Bu hafta sonu bu kurul toplanacak. Bununla ilgili Pardus Camia listesinde kimlerin katılacağı sorulduğunda &lt;strong&gt;Doruk Fişek&lt;/strong&gt; şöyle bir &lt;a href=&quot;http://liste.pardus.org.tr/pardus-camia/2012-June/000932.html&quot;&gt;mesaj&lt;/a&gt; attı:&lt;/p&gt;

    &lt;hr /&gt;
    &lt;p&gt;E-posta giden kişiler şunlar:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Ahmet Kaplan (TÜBİTAK)&lt;/li&gt;
      &lt;li&gt;Abdullah Arslan (MSB - kamu kurumları temsilcisi)&lt;/li&gt;
      &lt;li&gt;Abdullah Erol (TÜBİTAK)&lt;/li&gt;
      &lt;li&gt;Cahit Cavit Vural (?)&lt;/li&gt;
      &lt;li&gt;Doruk Fişek (Özgür Yazılım A.Ş. - çözüm ortakları temsilcisi)&lt;/li&gt;
      &lt;li&gt;Necdet Yücel (18 Mart Üniversitesi - üniversite temsilcisi)&lt;/li&gt;
      &lt;li&gt;Sezai Yeniay (Topluluk temsilcisi)&lt;/li&gt;
    &lt;/ul&gt;

    &lt;hr /&gt;

    &lt;p&gt;Burada yeni-eski simalar var. Bazıları tanıdığımız bildiğimiz insanlar. Ama aralarından &lt;strong&gt;“Cahit Cavit Vural”&lt;/strong&gt;‘ın neden olduğunu anlayamamıştım. İsim tanıdık geliyordu ama nerde gördüğümü hatırlayamamıştım. Biraz araştırınca Pardus kullanıcı listesine &lt;strong&gt;“Magmalinux”&lt;/strong&gt; adındaki Debian forkunu tanıttığını görmüştüm. Magmalinux, Debian tabanlı bir dağıtımdır. Cahit Vural ise bildiğim kadarıyla bununla yıllarca ilgilenmiş ve uğraşmış bir kişidir.&lt;/p&gt;

    &lt;p&gt;Yukarıdaki listede onun da isminin yer alması, Tübitak’ın Debian forku ile ilgilinen kişilerin bilgi birikime başvurduğu anlaşılıyor. Acaba Cahit Cavit Vural, Tübitak’ın aylardır hazırladığı Debian forkunda çalışan yeni geliştiricilerinden biri miydi?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Özgürlükiçin.com’daki gizemli Debian tabanlı Pardus dağıtımı&lt;/strong&gt;. Tüm bunlar yaşanırken ozgurlukicin.com forumlarında ilginç bir olaya tanıklık edildi. Forumda &lt;strong&gt;AoKiji&lt;/strong&gt; adında biri aşağıdaki ilginç &lt;a href=&quot;http://www.ozgurlukicin.org/forum/haberler/24628/?page=3#post165354&quot;&gt;anısını&lt;/a&gt;
paylaştı:&lt;/p&gt;

    &lt;p&gt;“Birkaç gün önce pilot okulların birine işim düştü. aklıma hemen akıllı tahta yer alan pardus bir göz atmak geldi. açtık sistemi bir baktık. pardus ilk  açılışta grupla değilde windows yapısı altından işletim sistemini seçiyorsunuz. varsayılan “windows”. ordan pardus  seçiyoruz.&lt;/p&gt;

    &lt;p&gt;Pardus 2011 kurulu sistemde ama &lt;strong&gt;bildiğimiz 2011 ile arasında epeyi fark var&lt;/strong&gt;. adı pardus 2011 ama tamamiyle yeni bir sistem gibi geldi bana. &lt;strong&gt;paket yöneticisi .deb paket yöneticisiydi&lt;/strong&gt;. içersinde paketler hepsi güvenli sürümlerdi.”root” porolasını bilmediğim için fazla kurcalamayadım. herhalde yakında bir açıklama gelir”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;yani-yeni-pardus-pardus-deil-mi&quot;&gt;Yani yeni Pardus, Pardus değil mi?&lt;/h2&gt;

&lt;p&gt;Yukarıdaki yazılanları birleştirince bir çok şey aslında ortaya çıkıyor. Bildiğiniz gibi 30 küsür geliştirici son bir sene içinde Pardus projesinden ayrıldı ve projede bir kişi bile kalmadı. Fakat Ahmet Kaplan’ın her konuşmasında “Pardus bitmedi, çok güzel bir şekilde geri döneceğiz” demesi de kafaları iyi karıştırmıştı.&lt;/p&gt;

&lt;p&gt;Tübitak muhtemelen son 1-2 aydır Debian/Ubuntu tabanlı bir dağıtım üzerinde çalışıyor (benim tahminim Debian üzerinde, Ubuntu upstream ile iyi anlaşamıyor). Fakat bunu henüz şimdi açıklamayacağı için tüm bilgiler de burnu açık havada kalıyor.&lt;/p&gt;

&lt;p&gt;Pardus markası 2-3 ay içinde çok farklı bir anlamda kullanılacak. Yıllarca oluşturulmuş ve kamunun bildiği bir markayı doğrudan kullanmak Tübitak’ın da işine yarayacaktır. Ayrıca Kamu bilindik bir isimle iş yapacağı için içi rahat olacaktır. Fakat Erkan Tekman ve ekibinin yıllarca oluşturduğu teknolojiden hiç bir iz,eser bulunmayacaktır. Yani dışarıdaki yüzlerce Debian forkundan biri olacaktır. Adı Pardus olacak, ama bizim bildiğimiz Pardus’tan çok farklı bir ürün ortaya çıkacaktır.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Dipnot: Yukarıda yazılanlar tamamen şahsi fikrim olmakla beraber, doğru veya yanlış bilgiler içerebilir. Bu bilgilerin doğru kabul edilip edilmemesi tamamen okurun insiyatifine bırakılmıştır. Tüm bilgiler kamuya açık bilgilerden yorumlanarak yazılmıştır.&lt;/em&gt;&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>C'de Pointer Sözdizimi (Syntax) ve Aritmetiği</title>
		<link href="http://blog.arsln.org/c-de-pointer-sozdizimi-syntax-ve-aritmetigi/"/>
        <updated>2012-06-05T00:05:00+00:00</updated>
		<id>http://blog.arsln.org/c-de-pointer-sozdizimi-syntax-ve-aritmetigi</id>
        <content type="html">&lt;p&gt;C’de pointer konusunda yüzlerce, binlerce kaynak var. Bu yüzden size sil baştan
pointer’i anlatmayacağım (söz!). Sadece, pointer konusunu öğrenmeye
başlayan herkesin sıkıntı çektiği sözdizimi(&lt;strong&gt;pointer syntaxı&lt;/strong&gt;) ve aritmetiği
ile ilgili ayrıntılara &lt;strong&gt;örneklerle&lt;/strong&gt; değineceğim. Okuduğum bir çok kaynakta
örnek malesef çok az. Bu yazımda özellikle C’de pointer sözdiziminde kullanılan
yıldız &lt;code class=&quot;highlighter-rouge&quot;&gt;*&lt;/code&gt; operatörünün neden kafa karıştırdığını ve &lt;code class=&quot;highlighter-rouge&quot;&gt;*ptr++, *++ptr, ++*ptr,&lt;/code&gt;
vs.. gibi değişkenlerin ne anlama geldiğini anlatacağım. Örnek C kodları da
mevcut olacaktır, yani indirip, derleyip adım adım görebileceksiniz.&lt;/p&gt;

&lt;p&gt;##Şimdi pointer nedir?&lt;/p&gt;

&lt;p&gt;Pointer bir veri tipidir ve bu veri tipi başka bir değişkeni işaret eder. Peki
nasıl işaret eder? Diğer değişkenin sakladığı(tuttuğu) adres sayesinde doğrudan
oraya işaret eder. Peki pointer nasıl oluşturulur (&lt;strong&gt;declaration&lt;/strong&gt;)?  Pointer
tıpkı diğer veri tipleri sözdizimi gibi oluşturulur. Tek fark değişkenin önüne
bir yıldız konmasıdır.  Örneğin aşağıda bir pointer ve örneklerimizi
kullanacağımız bir array verelim&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;foo_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada “pointer to int” tipinde bir pointer değişkeni oluşturduk ve bu
değşikenin ismi de &lt;strong&gt;foo_ptr&lt;/strong&gt;. Şu an için hiç bir yere işaret etmiyor.
Geçersiz bir durum söz konusu ve bunu gidermek için bir yere işaret etmesini
sağlayacağız. Yukarıda &lt;strong&gt;my_array&lt;/strong&gt; değişkeni oluşturmuştuk. Şimdi ona işaret
etmesini sağlayalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;foo_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Array oluşturulurken bellekte bir bütün olarak yer aldığından ilk sayısı
(yani my_array[0]) bize arrayin başlangıcını verecektir. &lt;strong&gt;&amp;amp;&lt;/strong&gt; operatoru ise, bize
bir veri tipinin bulunduğu alanın adresini verir. Yukarıda böylelikle &lt;strong&gt;foo_ptr&lt;/strong&gt;
değişkenini &lt;strong&gt;my_array&lt;/strong&gt; değişkenin ilk elemanına işaret ediyor olacak. &lt;strong&gt;my_array&lt;/strong&gt;
elemanı da bir bütün olduğundan aslında hepsini işaret etmiş olacak. Son olarak
belki de önemli bir ayrıntı, &amp;amp; operatoru ile geri dönen verinin tipi &lt;strong&gt;pointer&lt;/strong&gt;
cinsinden. Bu yüzden doğrudan &lt;strong&gt;foo_ptr&lt;/strong&gt; değişkenine atayabildik.&lt;/p&gt;

&lt;p&gt;##İşaret edilen veriye ulaşmak&lt;/p&gt;

&lt;p&gt;Pointer’in işaret ettiği veriye ulaşmak için tek yapmamız pointer değişkenin
önüne yıldız koymak. Mesela my_array’deki ilk sayıyı çıktısını alalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Bu my_array[0] değeri: %d&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;foo_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ö&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sterecek&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Peki o zaman bu değeri değiştirebilir miyiz? Evet aynen değiştirebiliriz.  Şimdi
sıkı durun. Aşağıda iki tane örnek var, bakalım onlar ne yapıyor:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;foo_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Bu my_array[0] değeri: %d&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;foo_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;say&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ö&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sterecek&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;C’deki asıl sorun, &lt;code class=&quot;highlighter-rouge&quot;&gt;*&lt;/code&gt; operatorunun hem pointer oluşturma için kullanılması
hem de veriyi ulaşmak için kullanılmasıdır. Aslında her ikisini anlamı farklı.
Örneğin aşağıdaki örnek ne yapıyor sizce?&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;foo_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Eğer adres atama örneğini iyi anladıysanız bu ifadenin sorunlu bir ifade
olduğunu göreceksiniz. Yukarıdaki örnek 2 sayısını (burada &lt;strong&gt;int&lt;/strong&gt; tipinde)
pointere (pointer de burada &lt;strong&gt;pointer of int&lt;/strong&gt; tipinde) atamaya çalışacak.
Ama böyle bir şey mümkün değil. Çünkü her ikisinin tipi farklı. Bu yüzden
derlemeye çalışırsanız şöyle bir uyarı çıkacak(“-Wall -g” parametreleri ile
derliyorum):&lt;/p&gt;

&lt;pre class=&quot;terminal&quot;&gt;
warning: assignment makes pointer from integer without a cast [enabled by
default] 
&lt;/pre&gt;

&lt;h2 id=&quot;dereference-zelliini-dzgn-kullanabilmek&quot;&gt;Dereference özelliğini düzgün kullanabilmek&lt;/h2&gt;

&lt;p&gt;Yukarıda yıldız &lt;code class=&quot;highlighter-rouge&quot;&gt;*&lt;/code&gt; operatoru ile veriye doğrudan ulaşmanın bir diğer adı
&lt;strong&gt;pointer dereference&lt;/strong&gt; demektir. Yıldız operatörü malesef bir çok kafa
karışıklığına da yol açıyor. Çünkü hem pointer veri tipini oluşturmaya yarıyor,
hem de pointer’in işaret ettiği yere ulaşmamızı sağlıyor. Örneğin bir
fonksiyonumuz olsun  ve bu fonksiyon iki tane argüman alsın. Bu argümanlar
&lt;strong&gt;pointer to int&lt;/strong&gt; şeklinde olsun:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;void foo_function(int *bar_ptr, int *qux_ptr);
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Şimdi dereference özelliği ile birlikte yukarıdaki örnek de kafa karıştırıcı
olabiliyor. Çünkü man sayfaları ya da herhangi bir kiptalıkta tanımlar bu
şekilde ifade edilmiştir. Burada iki tane pointer tipinden veri alıyorum
anlamına geliyor. Bir örnekten gidelim. İki tane pointer oluşturalim ve bunları
bir yere işaret etmesini sağlayalım&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Sonra bu pointerleri işaret etmesine sağlayalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;a_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;b_ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Buraya kadar herşey normal. Şimdi bu pointer’leri fonksiyonumuza düzgün bir
şekilde verelim:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;foo_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OK&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Valid&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Yukarıdaki örnek doğru sözdiziminde yazılmış bir örnektir. Gördüğünüz gibi gidip
değişkenlerin önüne yıldız öperatorunu koymadık. Neden? Çünkü fonksiyonumuz
&lt;strong&gt;pointer of int&lt;/strong&gt; tipinde bir veri bekliyordu. Mesela yıldızlı şekilde yazmak
yanlış olacaktı:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;foo_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OK&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Invalid&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada fonksiyonumuza &lt;strong&gt;int&lt;/strong&gt; tipinde iki tane veri sunuyoruz. Halbuki fonksiyon
bizden &lt;strong&gt;pointer of int&lt;/strong&gt; cinsinden bir veri tipi bekliyordu. Pointer’lerin
önüne yıldız koyarak &lt;strong&gt;dereference&lt;/strong&gt; etmiş oluyoruz, yani işaret ettiği veriyi
kullanıyor oluyoruz artık. Bir fonksiyon doğrudan &lt;strong&gt;int&lt;/strong&gt; tipinde veri de
alabilir, örneğin:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;bar_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;O zaman gayet sorunsuz bir şekilde oluşturduğumuz pointer verilerimizi
kullanabilirdik:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;bar_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b_ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;bir-baka-atama-ekli-ptr--myarray&quot;&gt;Bir başka atama şekli: ptr = my_array&lt;/h2&gt;

&lt;p&gt;Tekrar örnek değişkenlerimizi oluşturalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Sonra ptr’ye my_array’in adresini atalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ile&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ayn&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;ı&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Yukarıdaki örnek bir başka sözdizimi farklılığı. Yani istersek bu şekilde de
yazabiliriz. Farklı bir şekilde yazılmış hali diyelim. Herhangi bir adres
pointerini, örneğin &amp;amp;foo[i] , şu şekilde de yazabiliriz kısaca:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bizim my_array[0] örneği de haliyle (my_array +0) şekline dönüşüyor. Sıfır ve
parantezleri attık mı, sonuç olarak üsteki sonucu elde ederiz:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;myarray-ve-myarray3-eittir-nasl-m-&quot;&gt;3[my_array] ve my_array[3] eşittir, nasıl mı ?&lt;/h2&gt;

&lt;p&gt;Bir önceki örnekte &amp;amp;foo[i] sözdiziminin (foo +i) sözdizimine eşit olduğunu
söylemiştik. O zaman kısa bir hack yapalım. Mesela my_array[3] şu şekilde yazalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;yerlerini değiştrelim:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Hiç bir şey değişmedi, hala aynı. Son olarak bunu da my_array sözdiziminde yazalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Evet bu mümkün! Inanmakta güçlük çekiyorsanız deneyip sonucu kendi gözlerinizle
görebilirsiniz. Hiç bir zaman böyle bir şey yazmayın, yazmayalım. Sadece neler
olabileceğini görünüz diye yazdım.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Aşağıda yukarıdaki örneği denemeniz için kısa bir örnek kod mevcut:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/2870790.js?file=blog_arsln_org_pointer_arithmetic2.c&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;pointer-aritmetii-rnekler-rnekler&quot;&gt;Pointer Aritmetiği, örnekler, örnekler..&lt;/h2&gt;

&lt;p&gt;Şimdi buraya kadar gelmişken aşağıdaki örnek değişkenlere bakalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;ptr++&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;++
++&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;++ptr
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr--
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;--ptr
--&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Gördüğünüz gibi karman çoban bir şey. Her birini anlamı farklı, anlaması zor bir
şeymiş gibi gözüküyor. Ama şu ana kadar anlattıklarımda bir sorun yoksa, bunlar
da bir sorun olmayacak. Şimdi my_array örneğinden gidip her bir değişken ne
yaptığını öğrenmiş olacaksınız. Array ve ptr tanımlarını hatırlatalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-cpp&quot; data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;45&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Sonra ptr’ye my_array’in adresini atalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;ptr &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; my_array;  // ptr &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &amp;amp;my_array[0]; ile aynı&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Şimdi devam etmeden önce şunu unutmayın. * operatoru + operatorundan daha
önceliklidir. Yukarıdaki listede parantez kullandıklarım olduğu gibi,
kullanmadıklarım da var. Parantez kullanmıyorsanız ben o koda kötü derim.
Özellikle C gibi bir dilde, pointerleri yukarıdaki gibi kullanacaksanız
kesinlikle parantez kullanın. Parantez kullanılmayan değişkenlerin de neye
dönüştüğünü tek tek öğreniyor olacaksınız birazdan. Başlayalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr // print the value 13&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bu bize my_array değişkenindeki ilk değeri verecektir. Hatırlayınız ki *
operatoru bir pointer’in önüne konulduğunda, o pointer doğrudan o veriyi
bize gösterir.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;ptr++&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; // print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;13&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; and increment pointer&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bu bize o anki değeri verecektir, bizdeki örnekte &lt;strong&gt;13&lt;/strong&gt; sayısını
verecektir. Fakat ptr pointeri de bir artacaktır. Yani artık ptr bir sonraki
indeksi işaret ediyor.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;++ // print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; and increment the value&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada bir üsteki örneğin tersini yapıyoruz. İlk önce değeri alıyoruz. Sonra da
bu değeri artırıyoruz. Çıktı olarak bize 4 verecektir, ama değişkenin değeri
artık 5 olmuştur.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;++&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr // same as ++&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, increment value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;5&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; and print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;6&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada * öncelikli her zamanki gibi. Bu yüzden ilk başta değişkeni bize
verecektir. Yani 5 sayısını. Ama öndeki iki ++ artış operatoru olduğundan 5
sayısı bir artacak yani 6 olacaktır.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;++ptr // same as &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;++ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, increment the pointer and print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;9&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bu sefer ilk önce pointeri bir artırıyoruz. Sonra da işaret ettiği yerin
değişkenini alıyoruz. Pointeri bir artırdığımız bir sonraki değeri almış olduk.
Bu da (9) sayısı.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr-- // same a &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;--, print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;9&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; and decrement the pointer&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Şu anki işaret edilen yerinin değişkenin değerini alıyoruz. Yani bu da bizim
örneğimizde (9) sayısı. Fakat sonra pointer düşürüyoruz. Artık bir önceki yere
işaret ediyor.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;--ptr // same a &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;--ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, decrement the pointer and print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;13&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada pointerin işaret ettiği yeri bir daha düşürüyoruz. Yani en başa döndük.
Sonra da değeri alıyoruz, o da bizim örneğimizde (13)&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;--&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr // same a --&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;ptr&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, decrement value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;13&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; and print the value &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;12&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Son olarak değerimizi alıyoruz ve bu değeri bir azaltıyoruz. Yani 13 sayısını 12
olarak geri dönüyor bize.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Tabi en iyi deneyim göze görülür bir deneyim. Bu yüzden yukarıda tek tek
anlattığım örnekleri aşağıdaki C kodunu çalıştırıp da görebilirsiniz. Kolaylık
olsun diye ptr adreslerinin de çıktısını veriyorum. Böylelikle pointer
adreslerinin nasıl artığını gözünüzle göreceksiniz.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/2870682.js&quot;&gt; &lt;/script&gt;

&lt;p&gt;Evet hepsi bu kadar. Bir sonraki yazıma vakit ayırabilirsem, iki boyutlu
arraylar (pointers to pointers to data type) ve struct ilişkisini yazmayı
düşünüyorum. O zaman işler daha da karmaşık hale geliyor haliyle. Ama umarım
yukarıdaki örnekler az çok işinize yaramıştır diye düşünüyorum.  Sormak
istediğiniz, aklınıza takılanlar varsa, yanlış bulduğunuz kısımlar varsa yorum
kısmına yazın lütfen.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Blog altyapısı olarak Jekyll kullanmak</title>
		<link href="http://blog.arsln.org/blog-altyapisi-olarak-jekyll-kullanmak/"/>
        <updated>2012-05-01T13:36:00+00:00</updated>
		<id>http://blog.arsln.org/blog-altyapisi-olarak-jekyll-kullanmak</id>
        <content type="html">&lt;p&gt;Blogumu RSS’den takip edenler muhtemelen değişimi görmemiştir (RSS’deki bozukluk
dışında). Bundan iki ay önce Dreamhost sunucuların genelini etkileyen bir
saldırı sonucunda hasar gördü. Merak edenler için: &lt;a href=&quot;http://discussion.dreamhost.com/thread-134262.html&quot;&gt;Dreamhost Sites
Hacked&lt;/a&gt;. Sabah kalktığımda
bu manzara ile karşılaştığımda artık Wordpress’i terketmenin zamanı geldiğini
anlamıştım.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.wordpress.org&quot;&gt;Wordpress&lt;/a&gt; artık işimi görmemeye başlamıştı. Her ay
güncellenmesi, durmadan ihtiyacımın olmadığı özellikleri eklemesi, güvenlik
açıkların artması, her geçen gün daha da hantalaşması,vs.. Uzun zamandır bu
hantal yapıdan kurtulmayı düşünüyordum. Çünkü Wordpress benim için sadece basit
bir blog arayüzünden fazlası değildir. Sunduğu özellikler böyle bir açık kaynak
kodlu proje için muazzam olsa da benim için gereksiz bir yükten başka bir şey
değildi. Yukarıda anlatığım durum gerçekleşince ben de soluğu
&lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt;‘de buldum.&lt;/p&gt;

&lt;h2 id=&quot;jekyll-nedir&quot;&gt;Jekyll nedir?&lt;/h2&gt;

&lt;p&gt;Jekyll statik site üreticisi diye geçiyor. Bunu biraz daha açayım. Jekyll, Ruby ile yazılmış bir uygulama. Belli bir sisteme, şablona göre bir klasör oluşturup içindeki dizinleri oluşturuyorsunuz. Örneğin benim klasörümdeki dizinler şu şekilde:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/jekyll_template2.png&quot; alt=&quot;Jekyll Template&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Yukarıdaki klasörler oluştuktan sonra bu dizin içinde şu komutu çalıştırıyoruz:&lt;/p&gt;

&lt;pre class=&quot;terminal&quot;&gt;
# jekyll --safe
&lt;/pre&gt;

&lt;p&gt;Jekyll, yukarıdaki dizini tarıyor ve sonunda &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; diye bir klasör oluşturuyor(yukarıdaki resimde yer almıyor, ona sonra değineceğim). Bundan sonra sizin tek yapmanız gereken herhangi bir tarayıcı ile bu &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; altındaki &lt;code class=&quot;highlighter-rouge&quot;&gt;index.html&lt;/code&gt; dosyasını açmak. Aslında tüm blogunuz ve içeriği &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; klasörü içinde oluşmuş ve herhangi bir websunucu üzerinde (Apache,vs..) yayınlamaya hazır duruyor. Hepsi bu kadar. Herhangi bir veritabanı, kurulum,vs.. gibi adımlar yok. Jekyll’in güzel ve beni cezbeden yönlerinden biri bu.&lt;/p&gt;

&lt;h2 id=&quot;jekyllde-blog-yazma-ilemi-nasl-iliyor&quot;&gt;Jekyll’de blog yazma işlemi nasıl işliyor?&lt;/h2&gt;

&lt;p&gt;Jekyll’de yazılarınızı &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; veya [Textile](http://en.wikipedia.org/wiki/Textile_(markup_language) formatlarında yazabilirsiniz. Böyle olunca hem daha rahat ve hızlı bir şekilde yazabildiğiniz gibi, Vim, Emacs gibi metin düzenleyiciler ile de değiştirebilirsiniz (Jekyll’in bir güzel yani daha).&lt;/p&gt;

&lt;p&gt;Bu yazıları da _post dizini altına yerleştiriyorsunuz. Peki bunun nasıl göründüğünü, yani çıktısını nasıl göreceksiniz? Yukarıda bahsettiğim gibi &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; klasörü aslında bizim blogumuzun birebir çıktısı oluyor. Tek yapmanız gereken bir web tarayıcı ile bunu açmanız. Jekyll bir adım daha öte gidip size bir kolaylık sunuyor. &lt;code class=&quot;highlighter-rouge&quot;&gt;--server&lt;/code&gt; parametresi ile çalıştırdığımızda&lt;/p&gt;

&lt;pre class=&quot;terminal&quot;&gt;
# jekyll --server
&lt;/pre&gt;

&lt;p&gt;yerel bir sunucu oluşturuyor ve bize &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; içeriğini sunmaya başlıyor(yerelde 4000 port numarasında). Yerelde doğrudan &lt;a href=&quot;http://localhost:4000&quot;&gt;locahost:4000&lt;/a&gt; portundan inceleyebilirsiniz sitenizi.&lt;/p&gt;

&lt;p&gt;Örneğin ben genellikle tmux’da iki tane yan yana pencere açıyorum, birinde Jekyll sunucusu çalışıyor bir yanda da Vim açık şekilde yazımı yazıyorum. Vim’de ne zaman yazımı kaydetsem Jekyll bana son halini sunuyor:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://arsln.org/image/Terminal_004.png&quot; alt=&quot;Jekyll-Vim çalışma akışı&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;jekyllde-bloglar-nerede-ve-nasl-host-edilir&quot;&gt;Jekyll’de bloglar nerede ve nasıl host edilir?&lt;/h2&gt;

&lt;p&gt;Burada çeşitli seçenekler var. Aklıma gelen iki tanesi şu şekilde:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Yerelinizde oluşan &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; klasörünü satın aldığınız bir sunucuya yüklemek. Tabi her seferinde tüm &lt;code class=&quot;highlighter-rouge&quot;&gt;_site&lt;/code&gt; klasörünü yüklememiniz tavsiye edilir. Bunun yerine ya bir betik yazıp sadece değişiklikleri sunucunuza yüklersiniz (web jargonunda &lt;em&gt;deploy&lt;/em&gt; derler). Bunun için Google’da &lt;a href=&quot;https://www.google.com/search?q=jekyll+deployment&quot;&gt;Jekyll Deployment&lt;/a&gt; diye aratırsanız insanların çeşitli betikler, çözümler sunduğunu göreceksiniz.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ya da Github’in &lt;a href=&quot;http://help.github.com/pages/&quot;&gt;Github Pages&lt;/a&gt; özelliğini kullanacaksınız (ben bu şekilde kullanıyorum). Github’ın Jekyll desteği var ve size özel subdomain veriyorlar. Ayrıca CNAME özelliği sayesinde satın aldığınız bir domain ismini de buraya yönlendirebiliyorsunuz. Mesela blog.arsln.org adresi &lt;a href=&quot;http://farslan.github.com&quot;&gt;farslan.github.com&lt;/a&gt; adresini işaret ediyor(bu yüzden github linkine tıklarsanız kişisel siteme yönlendirileceksiniz). Github’daki en güzel özellik doğrudan Jekyll desteği olmasıdır. Yani siz normal bir git deposu açıyorsunuz, yukarıdaki resimdeki gibi bir &lt;em&gt;Jekyll klasör şablonu&lt;/em&gt; oluşturuyorsunuz ve gerisini github’a bırakıyorsunuz. Depoyu oluşturduktan sonra depda her değişiklikte (&lt;code class=&quot;highlighter-rouge&quot;&gt;commit&lt;/code&gt;) github otomatik olarak &lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll --safe&lt;/code&gt; komutunu çalıştırıp _site klasörünü oluşturuyor.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;yi-gzel-de-nasl-kurulur-bu-jekyll-nasl-balayalm&quot;&gt;İyi güzel de, nasıl kurulur bu Jekyll, nasıl başlayalım?&lt;/h2&gt;

&lt;p&gt;Geldik en can alıcı noktaya. Yukarıdaki anlatıklarım ile ilgili sorunun yoksa ve ben bu işi yaparım diyorsanız bundan sonrası kolay. Burada asıl konu &lt;strong&gt;Jekyll Nedir&lt;/strong&gt; sorusuna bir cevap bulmaktı. Yani muhtemelen Jekyll’e geçmek istediniz ama bir türlü işlerin nasıl yürüdüğünü anlamadınız. Yukarıdaki anlatıklarım umarım bu konuda yardımcı olmuştur. Bundan sonra yapmanız gerekenler şunlar:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Sıfırdan bir blog başlamayı düşünüyoranız başta Jekyll’i yerel makinenize kurmalısınız(bu her koşulda yapılmalı). Jekyyl ana sayfasındaki &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Install&quot;&gt;kurulum notlarına&lt;/a&gt; bakabilirsiniz.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jekyll’i kurduktan sonra Jekyll’in &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Usage&quot;&gt;klasör yapısını ve anlamına&lt;/a&gt; bakabilirsiniz.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jekyll’in altyapısı ve işlevini öğrendikten sonra asıl mesele olan kendi blogunuzu oluşturmaya geldi. Jekyll’de güzel olan kısım ise, bir uygulumanın kaynak koduna bakar gibi blog sitelerin kodlarına bakıp değiştrebilmenizdir. Bu konuda bir süre site var. Örneğin şurada bir çok kullanıcın Jekyll ile yapılmış sitelerini ve kaynak kodlarını görebilirsiniz: &lt;a href=&quot;https://github.com/mojombo/jekyll/wiki/Sites&quot;&gt;Jekyll kullanıcı siteleri&lt;/a&gt;. İsterseniz benim Github’daki bloguma da bakabilirsiniz: &lt;a href=&quot;https://github.com/farslan/farslan.github.com&quot;&gt;farslan.github.com&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Wordpress’iniz varsa ve geçmeyi düşünüyorsunuz &lt;a href=&quot;https://www.google.com/search?q=wordpress+to+jekyll&quot;&gt;Wordpress to Jekyll&lt;/a&gt; aramasını yapıp bununla ilgili belgelere bakabilirsiniz.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; veya [Textile](http://en.wikipedia.org/wiki/Textile_(markup_language) öğrenebilirsiniz.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;jekyll-konusunda-bir-uyar&quot;&gt;Jekyll konusunda bir uyarı&lt;/h2&gt;

&lt;p&gt;Jekyll’de RSS’den tuttun da yorumlara kadar her şeyi &lt;strong&gt;kendiniz yerleştirmeniz&lt;/strong&gt; gerekiyor. Hatta anasayfa’da üç/dört/beş tane yazı çıkmasını sağlamak bile sizin göreviniz. Sitenin tasarımı, Jekyll konfigurasyonları, eklentileri (örneğin kod renklendirmeleri), gibi bir çok konuyu baştan veya başkalarının şablonlarına bakıp oluşturmanız gerekiyor. Yukarıda verdiğim bağlantılar bu konuda size bir önayak olacaktır.&lt;/p&gt;

&lt;p&gt;Bu blogun okuyucusu iseniz muhtemelen bu tarz şeyler sizin için sorun oluşmayacak, ama Wordpress’i basit işler için kullanıyorsanız, Vim’in, Terminal’in yanınından bile geçmediyseniz ve şu ana kadar anlatıklarım ile ilgili soru işaretleriniz oluştuysa elinizi bile vumayın. Çünkü Jekyll terminal, shell, geliştirme gibi konularda aşınalık ve bilgi istiyor. Yani daha doğrusu Jekyll ile uğraşmak istiyor ve kullanmak istiyorsanız bu bilgiler şart.&lt;/p&gt;

&lt;h2 id=&quot;jekyllin-avantajlar&quot;&gt;Jekyll’in avantajları&lt;/h2&gt;

&lt;p&gt;Benim açımdan en güzel yani Github’da hiç bir derdim olmadan kullanabilmek. Blogda kullanacağım resimleri kişisel hostumda tutuyorum. Yorumlarımı da şahane bir yorum hizmeti olan &lt;a href=&quot;httpp://www.disqus.com&quot;&gt;Disqus&lt;/a&gt; ile yönetiyorum. Diğer kalan tüm işlerim github üzerinde olduğu için çok hızlı ve sorunsuz bir altaypıya sahip oluyorum (hız konusu gibi).&lt;/p&gt;

&lt;p&gt;Bunun dışında yazılarımı Vim ile yazıp, yerelimde istediğim tarayıcıda sitemi anında görebilmek ve yazıyı oluşturduktan sonra basit bir &lt;code class=&quot;highlighter-rouge&quot;&gt;git push origin master&lt;/code&gt; ile konsoldan github’a yollamak paha biçilmez bir deneyim sunuyor bana. Benim gibi işlerinizin çoğunu konsol üzerinden yapıyorsanız, vim/emacs kullanmayı seviyorsanız, git hastası iseniz Jekyll tam biçilmiş kaftan.&lt;/p&gt;

&lt;p&gt;Yorum kısmında yazı ile ilgili düşünceleri ve önerilerinizi yazabilir, aklınıza takılan soruları sorabilirsiniz.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Pardus'tan ayrılışım ve sonrası</title>
		<link href="http://blog.arsln.org/pardus-ayrilisim-ve-sonrasi/"/>
        <updated>2012-04-22T12:00:00+00:00</updated>
		<id>http://blog.arsln.org/pardus-ayrilisim-ve-sonrasi</id>
        <content type="html">&lt;h2 id=&quot;ksa-zet&quot;&gt;Kısa Özet&lt;/h2&gt;
&lt;p&gt;TÜBİTAK’da yer aldığım Pardus projesinden istifa ettim iki hafta önce. Tam 20 ay
( ~1.5 yıl) severek çalışmış, iyi insanlar tanımış, bir çok güzel bilgi
öğrenmiş, ama üzgün ve hevesi kırılmış biri olarak ayrıldım. Neden mi?&lt;/p&gt;

&lt;h2 id=&quot;uzun-hikaye-gemie-dair&quot;&gt;Uzun Hikaye (geçmişe dair)&lt;/h2&gt;
&lt;p&gt;Nerden nasıl başlasam sözlerime bir türlü bilemedim. Bu yazılanları büyük bir
hüzünle yazdığımı belirteyim. İnsanoğlu hayallerle büyür ama bu hayaller tam
gerçekleştiği sandığınız anda kül olup uçtuğunu geç fark ediyor.  En iyisi ben
kaseti en başa sarıp o şekilde size hikeyimi anlatayım.&lt;/p&gt;

&lt;p&gt;Yıl 2010. Hacettepe’den mezun olmama iki ay kala Pardus projesine iş
başvuruşunda bulunmuştum. 2008 yılında staj yapmıştım ve böylelikle de ekibin
bir çok kısmını kısmen de olsa tanıyordum. Linux ile maceram ise 2005 yıllarına
dayanıyor. İşim güçüm Linux idi, okulda insanlara Linux’u anlatırdım, Linux
kullanır, Linux CD’si dağıtırdım(&lt;em&gt;Maviportal&lt;/em&gt;), kişisel blogumda belgeler
yazardım, insanlarla tartışırdım. Bundan daha keyifli bir şey yoktu benim için.
Akşam okuldan geldiğim gibi Archlinux ile ilgili gelişmeleri takip eder, şu an
hangi teknolojiler, hangi paketlerde ne özellikler mevcut, sistemde ne gibi
değişiklikler olacak diye adım adım takip ederdim. Seviyordum çünkü.&lt;/p&gt;

&lt;p&gt;Hal böyle olunca Pardus’ta işe başlamak da hayallerimden biriydi. Nitekim öyle de olmuştu. Erkan Tekman’dan kabul mektubunu alınca bölümün önünde sevinçten zıpladığımı, gözlerimin güneş misali parladığı o an orada olanlar bilir. Akşam üstü bunu aileme söyledim ve 2010 Ağustos ayında ise resmen Pardus ekibinde işe başlamıştım.&lt;/p&gt;

&lt;h2 id=&quot;pardus-ofisinde-ilk-i-gnm-austos-2010&quot;&gt;Pardus ofisinde ilk iş günüm (Ağustos 2010)&lt;/h2&gt;
&lt;p&gt;İlk ofisimde &lt;strong&gt;Onur Küçük, Ozan Çağlayan, İbrahim Güngör ve Serdar Dalgıç&lt;/strong&gt; vardı.  İşe başlamamla birlikte hangi konularda çalışacağım ile ilgili bilgiler aramaya konulmuştum. “İşe Alıştırma” gibi bir faaliyet yoktu, “İşe dalıp” çalışmak vardı. Ben de bilgisayarımı kaptığım gibi ofiste ne yapabilirim diye sormuştum.  Onur Abi(ben böyle seslenirdim kendisine): “Bugzilla’daki yeni paket isteklerine bakabilirsin, hataları çözebilirsin, oradan bir gir istersen” demişti. Ben de bunun üzerinde Bugzilla’ya girip gözüme ilk kestirdiğim yeni paket isteğini yapmaya konuldum.  Paket ise &lt;code class=&quot;highlighter-rouge&quot;&gt;Geogebra&lt;/code&gt; idi.&lt;/p&gt;

&lt;p&gt;Daha öncesinde paket yapmama (2009 yılında) rağmen her şey benim için yeniydi. O yüzden hiç yerimde durmuyordum, ayağa kalkıp ofis ofis dolanırdım. Bilmediğim ne varsa her birini tek tek sorar, not alırdım ve uygulardım. Hal böyle olunca da birinci hafta “Yapılacak iş var mı? Bana iş verin” diye serzenişte bulunduğumda bana &lt;code class=&quot;highlighter-rouge&quot;&gt;Texlive&lt;/code&gt; ailesinin tüm paketleri atanmıştı. Amacım hem yeni çıkacak Pardus 2011 için bunları yeniden düzenlemek hem de Pisi’den çıkan &lt;code class=&quot;highlighter-rouge&quot;&gt;texlivemodules&lt;/code&gt; actionsapi’yi sil baştan tekrar düzenlemek. &lt;code class=&quot;highlighter-rouge&quot;&gt;Texlive&lt;/code&gt; paketleri ile uğraşırken gözüme kestirdiğim bazı hataları da kendimce çözmeye çalışıyordum. Bunları da zaman zaman blog yazıları niteliğinde sizlerle paylaşmıştım.&lt;/p&gt;

&lt;p&gt;Zamanla bu paketlerin üzerine Fatih Aşıcı’dan da tek tük işler alarak devam ettim. Kimse boş durmuyordu, herkes bir şeyi bir yerlere yetiştirmeye çalışıyor bir şeyler yapmaya çalışıyordu. Ben de bu hızın içinde kendimce bir şeyler yapmaya çalışıyordum. Fatih Aşıcı ile yaptığım işler artınca ve Fatih’in Nisan 2011’de askere gideceği kesinleşince yavaştan onun işlerini devralmaya başladım.  Ofisi değiştirdim ve onun yanına geçmiştim. Fatih Aşıcı ile başta &lt;code class=&quot;highlighter-rouge&quot;&gt;Panda&lt;/code&gt; ve &lt;code class=&quot;highlighter-rouge&quot;&gt;Panda-KDE&lt;/code&gt; olmak üzere bir sürü güzel işlere imza attık.&lt;/p&gt;

&lt;p&gt;Fatih Aşıcı askere gidince ona ait paketlerin %70-80’i devralmıştım. Zamanla onun paketlerin bakımı ile uğraşıyor ve bir yandan da X11, Mesa, Ekran kartları gibi teknolojirdeki gelişmeleri takip ediyor ve öğrenmeye çalışıyordum. Hatta bununla ilgili gelişmeleri de sık sık bu blogda sizlerle paylaşıyordum. Örneğin “Wine 64bit” konusundaki gibi. 2011 Ağustos ayında ise, yani tam bir yıl sonra işe iyice alışmıştım. İş yerimi, iş ortamını çok seviyordum. “Bundan sonrası çok güzel olacak, bir sürü güzel işlere imza atacağız, güzel işler yapacağız” diye söylenip duruyordum. Bu bundan 7-8 ay önceydi.&lt;/p&gt;

&lt;h2 id=&quot;ayrlklarn-balamas-temmuz-austos-2011&quot;&gt;Ayrılıkların başlaması (Temmuz-Ağustos 2011)&lt;/h2&gt;
&lt;p&gt;Tabi bu şekilde ilerlemedi hiç bir şey.&lt;/p&gt;

&lt;p&gt;2011 güzünde ekipten insanlar tek tek ayrılmaya başlamıştı. İsimlerini tek tek vermek istemiyorum, zira gidenleri geliştirici listesi, twitter gibi mecralardan görmüşünüzdür. Gidenler Pardus ekibinde yıllarca çalışmış, deneyimli insanlardı. Onlar gittikçe üzerimizde iş yükü artıyor, ileride yapmak istediklerimize dair hayaller de sönükleşiyordu. İş yükü artıyordu çünkü bu kadar çok paketin bakımını yapmak gerçekten çok zordu. Zor olmasının en büyük etkenlerden biri de eşit olmayan paket dağılımı idi. Benim üzerimde 300’e yakın paket varken, bir başkasının üzerinde en fazla 40-50 olabiliyordu. Bunu her ne kadar eşitlemeye çalışsak da, geliştiricilerin bu konudaki tutumu bu işi daha da zorlaştırmıştı.&lt;/p&gt;

&lt;p&gt;İnsanlar ayrıldıkça kurumsal alanlarda da işler artmaya, yeni işler doğmaya başlıyordu. Bu yeni işlerden biri mesela Fatih Projesi idi. Fatih Projesi daha yeni duyulmaya başladığında Pardus ekibi olarak (Erkan Tekman önderliğinde) sık sık Ankara’ya gider gelirdik. O zamanlarda MEB Eğitek’de iki tane akıllı Tahta üzerinde 1-1.5 gün içinde Pardus’u sorunsuz bir şekilde çalıştıracak hale getirip göstermiştik. Erkan Tekman ta o zaman Pardus’un yapabiliceklerini, yapamayacaklarını, yapılması gerekenleri tek tek sıralamış ve bildirmişti.&lt;/p&gt;

&lt;p&gt;2011 Kış ayında Tübitak Yönetimini değişmeye başladı. Tübitak içinde yapılan büyük bir toplantı sonucunda Pardus’un Fatih Projesinde &lt;strong&gt;yer almaması&lt;/strong&gt; karar verilmişti. Bizimle yapılan bir toplantı da Pardus’un fiyat kırıcı rolü üstlendiğini, bu yüzden Microsoft karşısında -5 dolar kadar bir avantaj sağladıklarını, o yüzden Pardus’un bu konudaki başarısının yadsınamaz olduğu dile getirilmişti. Bunun duyan ekibin bir kısmı buna çok kırılmış (haklı olarak) ve ayrılmaya karar vermişti. Kan kaybı artarak devam etti bu günden sonra.&lt;/p&gt;

&lt;h2 id=&quot;son-aylar-ocak-nisan-2012&quot;&gt;Son aylar (Ocak-Nisan 2012)&lt;/h2&gt;
&lt;p&gt;Aradan aylar geçti. Daha önce yukarıda saydığım isimlerin olduğu ofiste tek başına kalmıştım, var olan işleri düzenlemeye çalışıyorum, bir yandan da ansızın çıkan Fatih Projesi ile ilgili konusunda çalışıyordum. Ben de herkes gibi ayrılmaya karar vermiştim. Sebebleri çoktu, bunun en başında iki yıl önceki hayallerimi gerçekleşmek ve bir şeyler yapabilmek için gerekli zeminin yok olmasıydı. Belki bazı insanlar devlete kapağı atıp tüm gün oturup, aklı zorlamayan rahat işler yapmayı seviyordur, ama ben bunlardan biri değildim.&lt;/p&gt;

&lt;p&gt;Çalıştay’da da &lt;a href=&quot;http://www.eksisozluk.com/show.asp?t=501+developer&quot;&gt;“501 Developer”&lt;/a&gt; sözünü duyunca üzüldüm biraz. “501” geliştiricisi olmak kötü bir şey değil, ama TÜBİTAK tarafından sanki yıllardır böyle çalışıyormuşuz gibi itham edilmek beni çok üzdü. Çünkü bu proje’de yer almış herkes bilir ki, gecesi, gündüzü, haftasonu, fark etmeksizin çalışan bir ekip vardı. Mesai kalmak zevkti ve eve gitsek bile çalışırdık. Kaldı ki bu Pardus Projesinde işe başlayan insanların çoğu zaten işe başlamadan önce de boş zamanlarında destek veren insanlardı. “Sabah 8:00 akşam 17:00 arası çalışıyorsunuz, bize hevesli insanlar lazım” diye itham edilmek hoş olmadı.&lt;/p&gt;

&lt;p&gt;20 ay önce Ankara’dan yola çıkarken yanımda bir bavul ve gönlümde yatan kocam hayalim, Pardus’a olan sevdam, hevesim vardı. Fedakarlık yapıp  ailemi, dostlarımı, en yakın arkadaşlarımı, anılarımı, alışkanlıklarımı bırakıp gelmiştim. Pardus ve Pardus’la beraber bu ülkem, bu dünya için güzel şeyler üretebilirim diye çıkıp gelmiştim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pardus projesiyle ilgili gelişmeler bana herhangi bir proje için bu denli fedakarlığı hiç bir zaman yapmamam gerektiğini acı bir şekilde öğretti.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;..&lt;/p&gt;

&lt;p&gt;Bu projede yer aldığım sürede bana desteğini esirgemeyen, sorduğum tüm sorularımı eksiksiz bırakmayan, kimi zaman dertlerimi dinleyip derman olan herkese teşekkür ederim. Sizlerden çok şey öğrendim, inşallah ben de öğrendiklerimi yeri ve zamanı geldiğinde başkalarına aktarabilme şansına sahip olurum.&lt;/p&gt;

&lt;h2 id=&quot;yeni-i-gelimeler-var-m-&quot;&gt;Yeni iş? Gelişmeler var mı ?&lt;/h2&gt;

&lt;p&gt;Pardus’tan sonra yeni bir işe başladım(&lt;em&gt;16 Nisan 2012&lt;/em&gt; itibariyle). Tanıdık simalar ile çalışıyor olacağım. Önümüzdeki yıllar blogumda yeni işimle ilgili edindiğim bilgileri yine sizlerle paylaşacağım.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Bir kitaplığın portresi</title>
		<link href="http://blog.arsln.org/bir-kitapligin-portresi/"/>
        <updated>2011-12-15T15:40:59+00:00</updated>
		<id>http://blog.arsln.org/bir-kitapligin-portresi</id>
        <content type="html">&lt;p&gt;Bundan bir buçuk ay öncesinde &lt;a href=&quot;http://www.newyorker.com/&quot;&gt;The New Yorker&lt;/a&gt; dergisinde güzel bir &lt;a href=&quot;http://www.newyorker.com/reporting/2011/11/07/111107fa_fact_wood&quot;&gt;yazıya&lt;/a&gt; denk gelmiştim. Maalesef paylaşılabilir bir yazı olmadığından sizlere sunamadım içeriğini. Yazı, bir süre önce kayınbabasını kaybeden ve ondan geriye kalan devasa bir kitaplık ve kitapları nasıl değerlendirmesi gerektiğini bilmeyen bir &lt;a href=&quot;http://en.wikipedia.org/wiki/James_Wood_(critic)&quot;&gt;yazarın&lt;/a&gt; anıları hakkında. Aşağıdaki resim bu kitaplığa ait:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://arsln.org/wp-content/uploads/kitaplik.jpg&quot;&gt;&lt;img src=&quot;http://arsln.org/wp-content/uploads/kitaplik-500x326.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kayınbabasını öldükten sonra bu kitaplar miras kalıyor kendisine. Fakat bu büyüklükte bir kitaplığı ve haliyle kitapları saklayacak yeri olmayınca bunlarla neler yapabileceğini düşünmeye başlıyor.&lt;/p&gt;

&lt;p&gt;Bundan yaklaşık iki yıl önce kitaplar ve kitaplıklar hakkında bir yazı yazmıştım: &lt;a href=&quot;http://blog.arsln.org/kitaplar-uzerine/&quot;&gt;Kitaplar üzerine&lt;/a&gt;. Bu yazıyı &lt;a href=&quot;http://www.randsinrepose.com/&quot;&gt;Rands&lt;/a&gt;‘ın “&lt;em&gt;Kitaplıklar insanların özelliklerini, ilgi alanlarını ve kısacası hayatını sergileyen anıtlar haline gelmiştir. Yabancı bir eve girdiğimde ilk yaptığım iş kitaplığına bir göz atmak. Böylelikle anında bir çözümleme yapabiliyorum.&lt;/em&gt;” yorumu üzerine yazmıştım.&lt;/p&gt;

&lt;p&gt;Ben hâlâ bu şekilde düşünüyorum.&lt;/p&gt;

&lt;p&gt;Fakat &lt;strong&gt;New Yorker&lt;/strong&gt;‘deki yazı, tam tersi bir bakış açısına yer vermiş. &lt;a href=&quot;http://en.wikipedia.org/wiki/James_Wood_(critic)&quot;&gt;James Wood&lt;/a&gt;, kayınbabasının kitaplıklarını bir yere taşıyamayacağını anladığında satmaya karar verir. Fakat bir yandan kitaplara da göz atıyor, kayınbabası ile ilişkilendirmeye ve &lt;strong&gt;kitaplar üzerinden onun portresini çıkartmaya çalışıyor&lt;/strong&gt;. Fakat bunda başarılı olamıyor. Kitapları araştırdıkça çizmek istediği resmin (mecâzı anlamda) aslında kayınbabası ile hiç ilgisi olmadığı ortaya çıkıyor. Bununla ilgili kısmı tekrar dergiden çıkartıp yazdım:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“We had a couple of breaks. An online bookseller, who deals in rare books and first editions, came and picked through what interested him, and filled his old Volvo with boxes. A few days late, an English bibliophile, who teaches philosophy at Queen’s University, did the same. I enjoyed their obvious excitement, my enjoyment tempered by the sensation that the library was suffering death by a thousand cuts&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;For in any private library the totality of books is meaningful, while each individual volume is relatively meaningless. Or, rather, once separated from its family, each individual book becomes relatively meaningless in relation to the original collector, but suddenly newly meaningful as the totality of the author’s mind..&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;.. In this strange way, our libraries are like certain paintings that, as you get closer to the canvas, become separate and unreadable blobs and daubs of paint.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;And in this way, I began to thinks, our libraries perhaps say nothings very particular about us at all. Each brick in the wall of a library is a borrowed brick”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sizce bir kitaplık bir kişiyi tarif edebilir mi ? Yabancı bir eve girdiğimizde kişinin kitaplığına göz atarak onun neyle ilgili olduğunu, neyi sevdiğini, neyle ilişkili olduğunu öğrenebilir miyiz?&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>C dilinde "char" veri tipi ve platform bağımlı sorunlar </title>
		<link href="http://blog.arsln.org/c-dilinde-char-veri-tipi-ve-platform-bagimli-sorunlar/"/>
        <updated>2011-11-29T11:52:47+00:00</updated>
		<id>http://blog.arsln.org/c-dilinde-char-veri-tipi-ve-platform-bagimli-sorunlar</id>
        <content type="html">&lt;p&gt;Bugün ofiste &lt;strong&gt;getchar()&lt;/strong&gt;, &lt;strong&gt;putchar()&lt;/strong&gt; fonksiyonları ile küçük ASCII denemeleri yapıyordum. Bunlara bakarken “char” veri tipi ile de biraz haşır neşir oldum. Beklemediğim bir kaç davranışla da karşılaştım. Aklımdan kalanları kısaca aktarmak istiyorum:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“char”&lt;/strong&gt; veri tipi, C’nin &lt;strong&gt;basit&lt;/strong&gt; veri tiplerinden sadece biridir. Diğerleri ise sırayla &lt;strong&gt;int, float, double ve void&lt;/strong&gt;. Bu birincil veri tipleri de yine kendi aralarında bazı ön ekler alarak yeni veri tipleri oluşturuyorlar. Örneğin &lt;strong&gt;long int, short int, unsigned long int&lt;/strong&gt;, vs.. gibi.
Bu veri tiplerinin her birinin bellekte tuttukları miktar da farklıdır. Aşağıdaki tablo’da örneklerini görebilirsiniz (char ile ilgili kısım yanlış, önü göz ardı edebilirsiniz):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://arsln.org/wp-content/uploads/data_types_c.jpg&quot;&gt;&lt;img src=&quot;http://arsln.org/wp-content/uploads/data_types_c.jpg&quot; alt=&quot;C veri tipleri&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gördüğünüz gibi her veri tipinin büyüklüğü farklı olabiliyor. Ayrıca aldıkları önekler (&lt;em&gt;short ve long&lt;/em&gt;) sayesinde bunları küçültüp veya büyütebilirsiniz.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“char”&lt;/em&gt; veri tipi ise ailemizin en küçük veri tipi diyebiliriz. Kendisi aslında tıpkı &lt;em&gt;“int”&lt;/em&gt; gibidir, yanı tam sayılar için tasarlanmıştır. Bu yüzden tam sayı hesaplamaları için de kullanabiliriz. Fakat C dili ile kod yazarken de C’nin dahili olarak desteklemesi gereken belirli bir karakter kümesi olması gerekiyor. Yoksa dünyada herkes kafasına göre bir karakter seti kullanabilirdi (hiragana, kiril, arapça, türkçe,vs..). Bu yüzden C standardında ASCII karakter seti kullanılınıyor. Her bir karakter de birer tam sayı olarak kaydediliyor. Örneğin &lt;strong&gt;“A” harfi ASCII’ye göre “65” sayısına&lt;/strong&gt; denk geliyor. Hangi harfin hangi sayıya denk geldiğini &lt;a href=&quot;http://www.asciitable.com/&quot;&gt;ASCII tablosundan&lt;/a&gt; bakabilirsiniz.&lt;/p&gt;

&lt;p&gt;Üç çeşit char veri tipi var, her birinin sahip olabileceği veriler ve isimleri şu şekilde:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;char –&amp;gt; Bilgisayar platformuna göre signed char veya unsigned char olabiliyor&lt;/li&gt;
  &lt;li&gt;signed char –&amp;gt; [-128, 127]&lt;/li&gt;
  &lt;li&gt;unsigned char –&amp;gt; [0, 256]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yukarıdaki listeye bakarak iki çeşit &lt;em&gt;“char”&lt;/em&gt; veri tipi var diye düşünmeyelim. Her biri kendince anlamı olan veri tipleridir. &lt;em&gt;“char”&lt;/em&gt;, &lt;em&gt;“signed char”&lt;/em&gt; veya &lt;em&gt;“unsigned char”&lt;/em&gt; adında üç çeşit karakter veri tipi var. &lt;em&gt;“signed char”&lt;/em&gt; veri tipi ise gömüllü sistemlerde ya da bilimsel kodlarda çok sık kullanılınır, çünkü kendisi en az yer kaplayan ve negatif,pozitif sayılar  kümesini içeren tek veri tipidir. Ama genel olarak insanlar her daim &lt;em&gt;“char”&lt;/em&gt; veri tipini kullanıyor. Yani şu şekilde bir şey:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;char a &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 30;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Şimdi bu örnek hiç bir platformda sorun çıkarmayacaktır (ayrıca belirttiğim gibi char tam sayı saklayabilen bir veri tipidir). Çünkü hem &lt;em&gt;“signed char”&lt;/em&gt; hem de_ “unsigned char”_ tam sayı aralığına uyuyor. Peki şöyle bir örnek yazdığımızda ne olacak:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;char a &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 255;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada okumayı bırakıp küçük bir deneme yapabilirsiniz. Muhtemelen iki türlü cevap gelecektir. Yukarıda değindiğim gibi &lt;em&gt;“char”&lt;/em&gt; veri tipi bilgisayar platformuna göre değişiyor. x86 GNU/Linux ve Microsoft Windows’da  &lt;strong&gt;“signed char”&lt;/strong&gt; olabilirken, PowerPC ve ARM processors genellikle** “unsigned char”** olabiliyor. Bu yüzden:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“signed char” ise** a = -1 değerini** alacak (neden -1 ? yazının sonunda açıklaması mevcut)&lt;/li&gt;
  &lt;li&gt;“unsigned char” ise &lt;strong&gt;a = 255 değerini&lt;/strong&gt; alacak&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Görüldüğü gibi hiç beklemediğiniz sonuçlara yol açabilir &lt;strong&gt;sade bir “char”&lt;/strong&gt; veri tipi. Bunun önüne geçebilmenin yolları var, en mantıklı ve güveniliri en baştan &lt;em&gt;“signed char”&lt;/em&gt; veya &lt;em&gt;“unsigned char”&lt;/em&gt; veri tiplerini kullanmak. Bunu bir alışkanlık haline getirmek iyi bir davranış olabilir. Başka bir seçenek ise derleyici sisteminin desteklediği parametrelerini kullanarak “char” veri tipini sınırlamak. Örneğin &lt;strong&gt;GCC&lt;/strong&gt; ile derliyorsanız , &lt;strong&gt;-fsigned-char&lt;/strong&gt; ve &lt;strong&gt;-funsigned-char&lt;/strong&gt; parametrelerini kullanarak  “char” veri tipinin etki alanını kısıtlayabilirsiniz.&lt;/p&gt;

&lt;p&gt;Yazımın başında da değindiğim gibi &lt;strong&gt;getchar()&lt;/strong&gt; ile denemeler yapıyordum. &lt;strong&gt;getchar()&lt;/strong&gt; fonksiyonu veri tipi olarak &lt;em&gt;“char”&lt;/em&gt; yerine &lt;em&gt;“int”&lt;/em&gt; veri tipi dönderiyor. Yani klavye’den &lt;strong&gt;“A” tuşuna bastığınızda size “65”&lt;/strong&gt; sayısını döndürecek. Peki neden “char” değil de “int”? Genel olarak getchar() fonksiyonu &lt;strong&gt;EOF&lt;/strong&gt; ile birlikte kullanacak şekilde tasarlanmıştır. EOF sayesinde &lt;strong&gt;dosyanın sonunu öğrenebilme(end-of-line&lt;/strong&gt;) ya da getchar() ile veri almayı durdurabiliriz (örneğin CTRL+D tuş kombinasyonu ile EOF yaratabilirsiniz). &lt;strong&gt;EOF’un değeri ise “-1”&lt;/strong&gt; olarak belirlenmiştir. Bunu linux platformlarında &lt;strong&gt;/usr/include/stdio.h&lt;/strong&gt; dosyasını açarak ~112 satır numarasına bakarak görebilirsiniz. Şöyle bir kod parçası vardır:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span class=&quot;cm&quot;&gt;/* End of file character.
   Some things throughout the library rely on this being -1.  */&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#ifndef EOF
# define EOF (-1)
#endif&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Genellikle &lt;strong&gt;getchar()&lt;/strong&gt; kullanırken insanlar &lt;em&gt;“char”&lt;/em&gt; veri tipi kullandıkları için sorun oluşabiliyor. Aşağıdaki gibi bir kod parçası düşünün:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c&quot; data-lang=&quot;c&quot;&gt;&lt;span class=&quot;cp&quot;&gt;#include
&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getchar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;%c&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Burada &lt;strong&gt;getchar()&lt;/strong&gt; fonksiyonunun dönüş değeri için “char = a” veri tipi kullanılmıştır. Örneğin GNU/Linux makinede bu kodu derlediniz ve sizin &lt;em&gt;“char”&lt;/em&gt; veri tipini &lt;em&gt;“signed char”&lt;/em&gt; veri tipine dönüştü. Sonra bu kodu çalıştırdınız ve klavyeden verileri girmeye başladınız. Muhtemelen hiç bir sorunla karşılaşmayacaksınız. Çünkü “signed char” -128’den 127’ye kadar tüm tamsayı değerlerini alacaktır.&lt;/p&gt;

&lt;p&gt;Fakat bu kodu &lt;strong&gt;ARM mimari&lt;/strong&gt; bir platformda çalıştırınca &lt;em&gt;“char”&lt;/em&gt; veri tipi &lt;em&gt;“unsigned car”&lt;/em&gt; veri tipine dönüşecektir. Bu veri tipi de 0 ile 256 arasındaki tamsayı değerleri alıyor. Peki EOF burada hangi değeri alacak? Siz &lt;strong&gt;CTRL+D bastığınız an&lt;/strong&gt; ya da bir dosyanın sonuna geldiğinizde geri dönen “-1” değeri 255’ye dönüşecektir(yazımın sonunda neden böyle olduğunu anlatacağım). Böyle olunca &lt;strong&gt;while&lt;/strong&gt; döngüsü sonsuz bir döngüye girecek ve hiç çıkamayacaksınız. Yukarıda kod parçasında &lt;strong&gt;“int” ile tanımlanmış veri tipini “unsigned char” olarak belirtmemiz sorunu düzeltecektir&lt;/strong&gt;. Düzeltme şu şekilde olacaktır:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;#include&lt;/span&gt;

int main &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;void&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  unsigned char i;
  &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;i &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; getchar&lt;span class=&quot;o&quot;&gt;())&lt;/span&gt; !&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; EOF&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; 
      &lt;span class=&quot;nb&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;%c&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;, i&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;;

  &lt;span class=&quot;k&quot;&gt;return &lt;/span&gt;0;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Yukarıdaki kod parçası taşınabilinir ve daha güvenilirdir.&lt;/p&gt;

&lt;p&gt;Yazıda sık sık “-1” &amp;lt;=&amp;gt; “255” dönüşümünü görmüşündüzdür. İki tür örnekle karşılaşmıştık:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“char a = 255” değerinin “signed char” veri tipinde “-1” dönüşmesi&lt;/li&gt;
  &lt;li&gt;“char a = EOF” değerinin(EOF = -1 ..) değerinin “unsigned char” veri tipinde “255” dönüşmesi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;İlk örnek için devam edelim. 255 numarası &lt;strong&gt;ondalık sayı sistemi&lt;/strong&gt; ile ifade edilmiştir. Fakat “&lt;em&gt;unsigned&lt;/em&gt;” ve “&lt;em&gt;signed&lt;/em&gt;” kavramları ikili sayı sistemine göre tasarlanmıştır. 255 sayısının ikili sayı sistemindeki değeri ise &lt;strong&gt;1111 1111&lt;/strong&gt;, yani 1 byte (8-bit) yer kaplıyor. Şunu not alın “1111 1111” ikili sayısı “signed char” olarak belirlinmiştir(doğrudan bu şekilde kaydediliyor). Fakat signed ikili sayıları 1 + 7 bit şeklinde belirleniyor. En soldaki ilk bit sayının negatif(1 ise) ya da pozitif(0 ise) olduğunu gösterir, kalan 7 bit ise sayının değerini gösterir. Bu yüzden örneğimiz şu şekilde:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;1 111 1111 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;negatif bir sayı ve sayımızın ikili değeri 111 1111&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Signed ikili sayıları tekrar ondalık sayısına çevirmek ise basit bir işleme bakıyor. Sayının “2’s complement”ini almak. Bunu da kısaca tüm sayıları tersine çevirip, çevirdikten sonra +1 bir ekliyoruz. Devam etmeden önce kısa bir örnek yapalım:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;101 1001&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;sayısını çevirelim. İlk önce her bir numarayı tersine çeviriyoruz&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;010 0110&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;ardından +1 bir ekliyoruz:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;010 0111&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Kısacası 101 1001 numarasının 2s complement eşleniği 010 0111 oluverdi.&lt;/p&gt;

&lt;p&gt;Tekrar örneğimize geri döndüğümüzde, bizim elimizdeki numaranın &lt;strong&gt;“111 1111”&lt;/strong&gt; tersini alıp &lt;strong&gt;“000 0000”&lt;/strong&gt; +1 eklediğimizde &lt;strong&gt;“000 0001”&lt;/strong&gt; sayısını elde edeceğiz. Bunun ondalık sistemindeki değeri de kısaca “1” dir. Fakat unutmayın ki bu sayı negatif bir sayıdır (en soldaki bir negatif olduğunu gösteriyordu). Bu yüzden &lt;strong&gt;sayımız “-1” olarak gözüküyor&lt;/strong&gt;. Yani bizim meşhur “&lt;em&gt;char a = 255&lt;/em&gt;” değerinin “signed char” veri tipinde “&lt;em&gt;-1&lt;/em&gt;” dönüşmesinin sonucu diyebiliriz.&lt;/p&gt;

&lt;p&gt;İkinci örneği siz okurlara bırakıyorum, bu sefer tersten gitmeniz gerekiyor ve elinizdeki sayı unsigned olacağından 255 sayısını elde edeceksiniz.&lt;/p&gt;

&lt;p&gt;Hepsi bu kadar. Görüldüğü gibi küçük bir veri tipi dikkat edilmediğinde bir çok soruna aşabiliyor. Bununla ilgili başınızdan geçen senaryolar, sorularınız veya merak ettikleriniz varsa yorum kısmından sorabilirsiniz. Bir çok kaynaktan yararlanmıştım, aşağıdaki bağlantılardan detaylı bir şekilde bakabilirsiniz:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.network-theory.co.uk/docs/gccintro/gccintro_71.html&quot;&gt;http://www.network-theory.co.uk/docs/gccintro/gccintro_71.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html&quot;&gt;http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/data_types.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.dreamincode.net/forums/topic/23249-trying-to-understand-signed-char-variable/&quot;&gt;http://www.dreamincode.net/forums/topic/23249-trying-to-understand-signed-char-variable/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/search?q=signed+char&quot;&gt;http://stackoverflow.com/search?q=signed+char&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</content>
    </entry>
    
    <entry>
        <title>Paylaşımlı kitaplıklar - kullanımı ve yönetimi</title>
		<link href="http://blog.arsln.org/paylasimli-kitapliklar-kullanimi-ve-yonetimi/"/>
        <updated>2011-10-21T22:24:25+00:00</updated>
		<id>http://blog.arsln.org/paylasimli-kitapliklar-kullanimi-ve-yonetimi</id>
        <content type="html">&lt;p&gt;Paylaşımlı kitaplıklar (&lt;em&gt;shared libraries&lt;/em&gt;) linux dünyasının olmazsa olmazlarından bir kavram. Linux altında iş yapmış herkesin bir kere eli bulaştığını düşünüyorum. Web’de bununla ilgili kaynak çok. 1-2 gün önce IRC’de &lt;strong&gt;#pardus-gelistirici&lt;/strong&gt; de bunu uzun uzadıya tartıştık hatta.Karmakarışık bir yapı vardı önümde (&lt;em&gt;ldconfig, ld-linux.so, rpath, LD_PRELOAD, soname, linker, loader, etc..&lt;/em&gt;). Baktım olmuyor dün akşam araştırmaya koyuldum ve bulduğum her belgeyi okuyup bir resim ortaya çıkartmaya çalıştım. Burada yazılanlar bunların ve IRC’de not aldıklarımın birer yansıması. Merak etmeyin kimseyi ayrıntıya boğumayacağım, sadece gerekli olabilecek bilgileri sizlere sunacağım. Benim bir çok şeyi daha iyi anlamamı sağladı, umarım sizin de işinize yarar. Uzun bir yazı, haliyle teknik konular da içeriyor, öncesinden bir çay/kahve yapıp o şekilde okumanızı tavsiye ederim :) Başlayalım:&lt;/p&gt;

&lt;h2 id=&quot;paylaml-kitaplklar-nedir&quot;&gt;Paylaşımlı kitaplıklar nedir?&lt;/h2&gt;

&lt;p&gt;Paylaşımlı kitaplıklar adı üstünde bir çok uygulama tarafından kullanılacak şekilde tasarlanmıştır. Uygulama başlatıldığında bu paylaşımlı kitaplıklar yüklenip kullanılmaya başlanır. Bunun şüphesiz en güzel yanı, bir çok uygulamanın aynı kitaplığı paylaşabilmesi, bizlere esneklik sağlaması, az yer kaplaması, vs… Yani siz bir tane kitaplık yazıyorsunuz ve diğer tüm uygulamalar bundan faydalanabiliyor. Dezavantajı ise kararsızlığın çabuk bozulabilmesi. Bir uygulama &lt;em&gt;libfoo.2.0.0&lt;/em&gt; kitaplığın ihtiyaç duyuyorsa ve siz sisteminizde bunu kullanmaya karar verdiyseniz, o zaman eski sürümüne bağlı diğer tüm uygulamaları kırmış olursunuz. Çünkü diğer bazı uygulamalar &lt;em&gt;libfoo.1.0.0&lt;/em&gt; sürümüne ihtiyaç duyuyacak ve sistemde artık bunu bulamayacak.&lt;/p&gt;

&lt;p&gt;Linux dağıtımları bunlara dikkat ederek sistemlerini güncel ve kararlı tutmaya çalışır. Örneğin &lt;strong&gt;“Python 2.7”&lt;/strong&gt;, &lt;strong&gt;“Xorg-Server 1.9.5”&lt;/strong&gt;, vs.. Sistem’de &lt;strong&gt;“Xorg-Server 1.10”&lt;/strong&gt; sürümünü kullanmaya karar veriseniz buna bağlı tüm uygulamaları da tekrar gözden geçirerek güncellemeniz gerekecek. O yüzden &lt;strong&gt;dağıtımlar&lt;/strong&gt; bu tarz işleri her yeni sürüm çıkışının &lt;strong&gt;başlarında&lt;/strong&gt; yaparlar.&lt;/p&gt;

&lt;p&gt;Burada gördüğünüz gibi sürüm numarası büyuk bir önem taşıyor. Linux altındaki bu sistem de tümüyle bu &lt;strong&gt;sürüm kavramını&lt;/strong&gt; üzerine oturtulmuştur. Kitaplık isimleleri genel olarak “lib” öneki ile başlar. Örneğin libpng, libzlib, vs… Alt seviye C kitaplıklarında ise &lt;strong&gt;“lib” ön-eki bulunmaz&lt;/strong&gt;. Bunlar genelikle /lib dizininde yer alır. Diğer genel kitaplıklar ise /usr/lib altına konulur  (&lt;em&gt;şimdilik böyle düşünelim, biraz sonra ldconfig ile daha ayrıntılı anlayacağım&lt;/em&gt;). Bu dizine şöyle bir göz attığımızda kitaplıkların birbirine benzeyen dosyalar olduğunu ve her birinin birbirine bağlı olduğunu görürsünüz. Aşağıda bunun bir örneğini görebilirsiniz (yazımda bu örneğe sık sık atıfta bulunacağım):&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;..
libagg.so -&amp;gt; libagg.so.2.0.4
libagg.so.2 -&amp;gt; libagg.so.2.0.4
libagg.so.2.0.4
libchoqok.so -&amp;gt; libchoqok.so.1
libchoqok.so.1 -&amp;gt; libchoqok.so.1.0.1
libchoqok.so.1.0.1
..&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Peki bu numaralar nedir? Niye birbirine bağlı bu kadar dosya var? İlk bakışta kafa karışıklığına yol açsa da her birinin anlamı var.&lt;/p&gt;

&lt;h2 id=&quot;kitaplklarn-adlandrlmas&quot;&gt;Kitaplıkların adlandırılması&lt;/h2&gt;

&lt;p&gt;Yukarıda gördüğünüz kitaplıklar &lt;strong&gt;üç&lt;/strong&gt; farklı türe ayırabiliriz. Bunlar şu şekilde:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;İlki &lt;strong&gt;“Real name”&lt;/strong&gt; adını verdiklerimiz. Bunlar&lt;strong&gt;.so&lt;/strong&gt; son-eki, &lt;strong&gt;sürüm numarası&lt;/strong&gt; ve son olarak bir &lt;strong&gt;minör numarası&lt;/strong&gt;(seviye inebilir) sahiptirler. Bizim örneğimizde bu “&lt;em&gt;libagg.so.2.0.4&lt;/em&gt;” ve “_libchoqok.so.1.0._1”. Bunlar uygulama’nın çalıştırabilinir kodlarını taşır. Yani sisteminizde asıl işi yapanlar bunlardır. Bunları sistemden sildiğiniz veya değiştirdiğiniz an buna bağlı tüm uygulamalar kırılır ve çalışmamaya başlar.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;İkincisi &lt;strong&gt;“Soname”&lt;/strong&gt; adını verdiklerimiz var. Bunlar &lt;strong&gt;.so&lt;/strong&gt; son-eki, &lt;strong&gt;sürüm numarası&lt;/strong&gt;(bu sürüm numarasına &lt;em&gt;soversion&lt;/em&gt; da denilinir) sahiptirler. Örnek olarak “&lt;em&gt;libagg.so.2&lt;/em&gt;” ve “&lt;em&gt;libchoqok.so.1&lt;/em&gt;” . Soname’ler sistemdeki en kararlı sürüme bağlandığı için büyük bir önem taşır. Sistemdeki kararlılığı &lt;strong&gt;soversion&lt;/strong&gt; tematiği ile sağlamaya çalışır. &lt;strong&gt;Soname &lt;/strong&gt;diyebilmenin bir başka şartı ise “Real name”‘lere sembolik bir bağ oluşturmaları. Yani yukarıda örneklerimize göre:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;libagg.so.2 -&amp;gt; libagg.so.2.0.4
libchoqok.so.1 -&amp;gt; libchoqok.so.1.0.1&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Soname’ler önemlidir çünkü sistemimiz her daim bunları görür. Yani bir uygulama çalıştığında yukarıdaki örnek için konuşursak, “libagg.so.2” kitaplığını yüklemeye çalışacaktır. Bu da bizim gerçek kitaplığımıza bağlı olacağından sorun oluşmayacaktır zaten. Bir uygulamanın hangi soname’lere ihtiyaç duyduğunu “&lt;strong&gt;ldd&lt;/strong&gt;” komutu ile kolayca bakabiliriz. Mesela “&lt;a href=&quot;http://choqok.gnufolks.org/&quot;&gt;choqok&lt;/a&gt;” uygulaması için bize şöyle bir çıktı verecektir:&lt;/p&gt;

&lt;pre class=&quot;terminal&quot;&gt;
# ldd /usr/bin/choqok | grep libchoqok
libchoqok.so.1 =&amp;gt; /usr/lib/libchoqok.so.1 (0x00007f6252cff000)
&lt;/pre&gt;

&lt;p&gt;Gördüğünüz gibi “&lt;strong&gt;choqok&lt;/strong&gt;” uygulaması “&lt;em&gt;libchoqok.so.1&lt;/em&gt;” soname’ine ihtiyaç duyuyor. Normal bir Linux dağıtımda binlerce kitaplık olabileceği için bu bağlama işlerini kolayca yapabilmemiz lazım. Tek tek elle yapmak yerine, ldconfig adındaki bir araç bunu bizim yerimize hallediyor. ldconfig kısaca sistem’deki “&lt;strong&gt;real-name&lt;/strong&gt;” kitaplıklarını tarar ve gerekli “&lt;strong&gt;soname”&lt;/strong&gt; bağlarını oluşturur. ldconfig sadece bununla yükümlü değil elbet. Kapsamlı ve önemli bir araç olduğu için birazdan buna tekrar değineceğim.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Son olarak &lt;strong&gt;“Linker-name”&lt;/strong&gt; olanlar var. Bunkar sadece &lt;strong&gt;.so&lt;/strong&gt; son-ekini alırlar. Bizim örneğimizde bunlar &lt;em&gt;“libagg.so”&lt;/em&gt; ve &lt;em&gt;“libchoqok.so”&lt;/em&gt;. Bunlar linker tarafından “link-time” zamanında kullanılınır. Yani bir uygulamaya derleyip, inşa etmeye çalıştığınız anlarda. Genel olarak soname’a bağ içerelirler. Ama bazıları doğrudan realname kitaplığına bir bağ içerir. Bizim örneğimizde:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;libagg.so -&amp;gt; libagg.so.2.0.4
libchoqok.so -&amp;gt; libchoqok.so.1&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Gördüğünüz gibi libagg.so &lt;strong&gt;realname&lt;/strong&gt; dosyasına bir bağ oluşturuken, libchoqok.so &lt;strong&gt;soname&lt;/strong&gt; kitaplığına bir bağ oluşturmuş. Bu bağları &lt;strong&gt;linker&lt;/strong&gt;(ld uygulaması) kullandığı için genel olarak elle kendimiz yapmamız lazım. Burada şunu unutmayın, bu bağlantıları ldconfig yapmıyor,** inşa sistemi tarafından (örneğin Autotools)** ve ya kendiniz tarafından yapılıyor. Bir uygulamanın hangi kitaplığa bağlı olduğuna kısaca siz karar veriyorsunuz. Örneğin libagg.so.2.0.4 kitaplığını yeni bir sürümü çıktı, geliştirici doğrudan en soversion’u yükselti ve bunu libagg.so.2.0.5 yaptı. Şimdi siz geldiniz bunu sisteminize kurdunuz. Bir uygulamayı derlemeye başladınız, libagg.so’ya ihtiyaç duyuyor. Peki şimdi sorayım size, hangi sürüme linklenmesini istiyorsunuz? 
Evet tamamen size bağlı, eğer yeni özellikleri istiyorsanız, yeni sürüme bağ oluşturursunuz:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;libagg.so -&amp;gt; libagg.so.2.0.5&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Ama gördüğünüz gibi burada aslında minör bir sürüm değişikliği var. &lt;strong&gt;Bu yüzden çoğu zaman “linker-name”‘ler real-name yerine soname’e bağ oluştururlar.&lt;/strong&gt; Çünkü bu tarz küçük değişiklikler yüzünden inşa sırasında sorun çıkmaması gerekiyor. Verimli bir durum anlayacağınız, her seferinde bu bağları güncellemeniz gerekmeyecek.&lt;/p&gt;

&lt;h2 id=&quot;ld-linuxso-ile-kitaplklarn-yklenmesi-ve-altrlmas&quot;&gt;ld-linux.so ile kitaplıkların yüklenmesi ve çalıştırılması&lt;/h2&gt;

&lt;p&gt;GNU/Linux sistemlerinde &lt;strong&gt;ld.so&lt;/strong&gt; ve &lt;strong&gt;ld-linux.so&lt;/strong&gt; adında iki tane “&lt;strong&gt;loader&lt;/strong&gt;” vardır. Bunlar paylaşımlı kitaplıkların yönetimini sağlar. ld.so kitaplığı &lt;strong&gt;a.out&lt;/strong&gt; çalıştırabilir dosyaların kitaplıklarını yönetirken, ld-linux.so &lt;strong&gt;ELF&lt;/strong&gt; türündeki çalıştırabilir kitaplıkları yönetir. Günümüzde genel olarak tüm çalıştırabilinir dosyalar ELF türündedir. Bazen ld-linux.so ismi ld-linux-x86-64.so olarak da anılıyor. Isimler değişebilir ama genel olarak bu şekilde olurlar.&lt;/p&gt;

&lt;p&gt;Elinizdeki çalıştırabilir dosyaya (binary) başla dediğinizde, ilk önce &lt;strong&gt;ld-linux.so&lt;/strong&gt; devreye girer, tüm kitaplıkları tarar ve bulduklarını taramaya başlar. ldd komutu bildiğiniz gibi bir dosyanın ihtiyaç duyduğu paylaşımları kitaplıkları listeler. Aslında tek yaptığ şey ld-linux.so’ya haber vermek.** Listemeyi “loader”ın kendisi yapar.** Aşağıda tipik bir ldd çıktısını görebilirsiniz (libao.so.2.1.3 kitaplığı için):&lt;/p&gt;

&lt;pre class=&quot;terminal&quot;&gt;
# ldd /usr/lib/libao.so.2.1.3
linux-vdso.so.1 =&amp;gt; (0x00007fffe93b2000)
libpthread.so.0 =&amp;gt; /lib/libpthread.so.0 (0x00007fcc248e1000)
libdl.so.2 =&amp;gt; /lib/libdl.so.2 (0x00007fcc246dd000)
libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00007fcc2436c000)
/lib/ld-linux-x86-64.so.2 (0x00007fcc24d30000)
&lt;/pre&gt;

&lt;p&gt;Burada gördüğünüz gibi “/lib/ld-linux-x86-64.so.2” kitaplığı gözüküyor. Bu yukarıda anlattığım loaderin kendisidir. Buna ihtiyaç duyuyor. Ardından diğer ihtiyaç duyduğu kitaplıkları listelemeye başlar. Peki nasıl ve hangi sıralamaya göre listeliyor ? Yani sistemde o kadar kitaplık varken hangisini seçiyor ? Bunu da belirli ve önemli bir sıralaması var (ELF dosyaları için). Sıralama şu şekilde:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Çalıştırabilir dosyanın başlık kısmındaki &lt;strong&gt;DT_RPATH&lt;/strong&gt; değişkenine göre (&lt;code class=&quot;highlighter-rouge&quot;&gt;DT_RUNPATH&lt;/code&gt; aktif edilmediyse)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;LD_LIBRARY_PATH&lt;/code&gt; çevre değişkenine göre. Bunu loader ile değiştirebilirsiniz (örneğin: /lib/ld-linux.so.2 –library-path $KİTAPLIK_DIZINI)&lt;/li&gt;
  &lt;li&gt;Çalıştırabilir dosyanın başlık kısmındaki DT_RUNPATH`değişkenine göre.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/ld.so.cache&lt;/code&gt; önbellek dosyasına göre. Bu dosyayı ldconfig adındaki uygulama oluşturuyor.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;/usr/lib&lt;/code&gt; ve &lt;code class=&quot;highlighter-rouge&quot;&gt;/lib&lt;/code&gt; dizinlerine göre&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yukarıdaki maddelerin her biri dizinleri gösteren değişkenler ya da doğrudan dizinlerdir. Tüm bunların dışında bir de &lt;code class=&quot;highlighter-rouge&quot;&gt;LD_PRELOAD&lt;/code&gt; değişkeni var. Bunu kullanırsanız yukarıdaki tüm maddeleri ezmiş olabilirsiniz, ama burada büyük bir dezavantaj ise &lt;code class=&quot;highlighter-rouge&quot;&gt;LD_PRELOAD&lt;/code&gt; değişkenin sadece birer dosya ismi aldığıdır(absolute path). Yani dizin veremiyorsunuz. Bu yüzden çoğu zaman &lt;code class=&quot;highlighter-rouge&quot;&gt;LD_LIBRARY_PATH&lt;/code&gt; kullanmak isteyeceksiniz.&lt;/p&gt;

&lt;h2 id=&quot;rpath-deikeninin-dejavantajlar-ve-zararlar&quot;&gt;RPATH değişkeninin dejavantajları ve zararları&lt;/h2&gt;

&lt;p&gt;Şimdi &lt;strong&gt;ldconfig’e&lt;/strong&gt; gelmeden önce rpath mevzusuna bir el atalım. RPATH` istenmeyen eski bir teknolojidir. Linker’e (yani ld) “-Wl,-rpath, $(KİTAPLIK_DIZINI)” parametlerini ekleyerek açabilirsiniz. Rpath, yukarıdaki liste’de da görüldüğü gibi listenin en tepesinde ve doğrudan çalıştırabilir dosyanın içinde “&lt;strong&gt;hardcoded&lt;/strong&gt;” olarak yer alıyor. Yani siz ne yaparsanız yapın, uygulama hep RPATH’deki dizine bakmaya çalışacak. Bunu değiştirmenin imkanı da yok (chrpath gibi uygulamalar dışında). Bu da bizim paylaşımlı kitaplıklarla anlattığımız her şeyin hiç bir işe yaramayacağını gösteriyor.&lt;/p&gt;

&lt;p&gt;Pardus’ta RPATH mevzusunu ciddiye alıyoruz. Depo’da şöyle bir göz atarsanız bununla ilgili onlarca yama bulabilirsiniz. Bu yamalar genelikle -rpath değişkenini kaldırır ve gerekli değişiklik yapılır. RPATH’ı düzeltmenin bir başka yolu ise –enable-new-dtags paramtresini linkere eklemek. Yani şu şekilde: “-Wl,-rpath, $(KİTAPLIK_DIZINI), -enable-new-dtags”. Bunu yaptığınız vakit, &lt;code class=&quot;highlighter-rouge&quot;&gt;DT_RPATH&lt;/code&gt; dışında &lt;code class=&quot;highlighter-rouge&quot;&gt;DT_RUNPATH&lt;/code&gt; değişkenini de aktif hale getiriyoruz. Loader yüklendiğinde &lt;code class=&quot;highlighter-rouge&quot;&gt;DT_RUNPATH&lt;/code&gt; ‘i görür görmez &lt;code class=&quot;highlighter-rouge&quot;&gt;DT_RPATH&lt;/code&gt; değişkenini pasif hale getirir. Bu da bizim işimizi kolaylaştırıyor. Yukarıdaki sıralamaya bakarsanız, &lt;code class=&quot;highlighter-rouge&quot;&gt;DT_RUNPATH&lt;/code&gt; değişkeni üçüncü sırada olduğunu görürsünüz. Yani artık &lt;code class=&quot;highlighter-rouge&quot;&gt;LD_LIBRAY_PATH&lt;/code&gt; değişkenini gönül rahatlıyla kullanabiliriz.&lt;/p&gt;

&lt;h2 id=&quot;ldconfig-ile-paylaml-kitaplklarn-ynetimi&quot;&gt;ldconfig ile paylaşımlı kitaplıkların yönetimi&lt;/h2&gt;

&lt;p&gt;Tüm bunların dışında bir de &lt;strong&gt;ldconfig&lt;/strong&gt; var. Şu ana kadar yazdıklarımda sıkça karşımıza çıktı. ldconfig komut satırında verilmiş parametreleri, /etc/ld.so.conf dosyası içeriğini ve güvendiği dizinleri tarayarak gerekli sembolik bağları ve /etc/ld.so.cache belleğini oluşturur.  Sırayla bunlarına üzerinden gidelim&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Parametre olarak&lt;/strong&gt;. ldconfig’e doğrudan bakması gereken dizinleri parametre olarak verebilirsiniz. Örneğin:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;ldconfig -n /home/pars/lib &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bu komut sadece /home/pars/lib dizinine bakar. &lt;strong&gt;Yani güvenli dizinleri ve /etc/ld.so.conf hiçe sayar&lt;/strong&gt;. Anı kurtarmak veya bir şey denemek için kullanabilirsiniz. Sistemi yeniden başlatırsanız eski haline geri döner&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;/etc/ld.so.conf dosyası&lt;/strong&gt;. Bu dosyanın içeriği her dizin bir satır ile ifade eder. Örneğin:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;/usr/x11/lib
/opt/lib
..&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bunun dışında içeriği şu şekilde de olabilir: “&lt;strong&gt;include /etc/ld.so.conf.d/*.conf&lt;/strong&gt;”. Pardus’da mesela bu şekilde kullanıyoruz. Tüm dizinlerimiz /etc/ld.so.conf.d/ dizini içindeki dosyalar içinde saklı. Bu dizinin içeriği şu şekilde:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;10-local.conf
20-java_jre.conf
20-xulrunner.conf
21-java_jdk.conf
..&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Bunları açıp inceleyebilirsiniz.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Güvenli dizinler&lt;/strong&gt;. Yukarıdaki dosyalara incelediyseniz &lt;strong&gt;/lib ve /usr/lib&lt;/strong&gt; dizinleri nerede diye kendinize sorabilirsiniz. Bu dizinler ldconfig olarak öntamlı kabul edilen güvenli dizinlerdir. O yüzden bunları eklemenize gerek yok.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ldconfig buradaki dizinlerden &lt;strong&gt;soname -&amp;gt; realname&lt;/strong&gt; sembolik bağlarını oluşturur. Bu kitaplıkları bir önceki yazımda anlattım. Bunun dışında &lt;strong&gt;/etc/ld.so.cache&lt;/strong&gt; adında bir önbellek. Bir çok uygulama açılıp/kapanacağı için hızlı bir mekanizma sunuyor. Yazımın başında da bahsettiğim gibi loader’imi (ld-linux.so) bu dosya’ya da bakıyor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bu önbellek dosyası her yeni kitaplık ile güncellemesi gerekiyor. Yani ldconfig’i tekrar çalıştırmanız gerekiyor&lt;/strong&gt;. Pardus kullanıyorsanız bunları sizin için &lt;strong&gt;otomatik&lt;/strong&gt; olarak yapıyoruz. Pardus’ta ldconfig “&lt;strong&gt;baselayout&lt;/strong&gt;” paketinde yer alan bir çomar betiği ile her kurulan paketle birlikte çalıştırılır. Sizin hiç bir şey yapmanız gerek kalmıyor anlayacağınız :)&lt;/p&gt;

&lt;p&gt;–&lt;/p&gt;

&lt;p&gt;Paylaşımlı kitaplıklar ile ilgili çok kapsamlı bilgiler mevcut. Burada anlatıklarım ve yazdıklarım işin temelini oluşturuyor. Örneğin C ile yazdığınız bir uygulama’da bunları nasıl kullanacaksınız ? Bunu gibi sorular biraz da ileri seviye konuları olduğu için şimdilik burada bırakıyorum. Belgeyi yazarken yararlandığım döükmanlar aşağıda listelenmiştir (ingilizce).&lt;/p&gt;

&lt;p&gt;Umarım yazdıklarım kitaplıklarla ilgili bilinmezlikleri gidermiştir. Sorularınız, eleştirileriniz veya düzeltilecek yerler varsa yorum kısmında belirtirseniz sevinirim :)&lt;/p&gt;

&lt;p&gt;Kaynaklar:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html&quot;&gt;http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/library/l-shobj/&quot;&gt;http://www.ibm.com/developerworks/library/l-shobj/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html&quot;&gt;http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://cs.nyu.edu/~xiaojian/bookmark/linux/ld_so%20%20Dynamic-Link%20Library%20support.htm&quot;&gt;http://cs.nyu.edu/~xiaojian/bookmark/linux/ld_so%20%20Dynamic-Link%20Library%20support.ht&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.lxgcc.net/?p=15&quot;&gt;http://blog.lxgcc.net/?p=15&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</content>
    </entry>
    
    <entry>
        <title>LinuxTag Berlin - 3'üncü gün</title>
		<link href="http://blog.arsln.org/linuxtag-berlin-3uncu-gun/"/>
        <updated>2011-05-16T14:26:50+00:00</updated>
		<id>http://blog.arsln.org/linuxtag-berlin-3uncu-gun</id>
        <content type="html">&lt;p&gt;Bugün LinuxTag’daki yine çeşitli ana temalar vardı. Ben de “Cross-distro” temasıyla ilgili seminerlere katıldım. Genel olarak bugünkü konular çok daha güzeldi. Yine bazı sunucuların konuşma yeteneği yüzünden verimsiz geçenler de vardı (anlatamadılar pek). Aşağıda girdiğim konuşmalar mevcut. Konuşmalar sırasında olabildiğince yazmaya çalıştım.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Cross-distro”&lt;/strong&gt; bir çok dağıtımın beraber çalışmasını sağlamak için ortaya atılan bir terim. Bildiğiniz gibi her dağıtımın kendine has paket yöneticisi var, kendine has tekonolojileri var, farklı hedefleri var vs… Örneğin paketleri yaparken bir uygulama için her dağıtım ayrı bir isim kullanabiliyor. Çoğu zaman başkasının yaptığı işi tekrar tekrar yapıyoruz. Neden her dağıtımda isim farklı mesela ? Ya da bir paket’in lisansını belirlerken neden zorluk çekiyoruz, halbuki bazı dağıtımlar çoktan bu bilgiyi buldu ve paketlerine yerleştirdi.&lt;/p&gt;

&lt;p&gt;Bu gibi sorunları ortadan kaldırmak için ve gelecekte ortak bir payda’da oluşmak için yavaştan tüm dağıtımlar “cross-distro”‘ya önem vermeye başlamış. Bunun en güzel örneğin &lt;strong&gt;Gnome 3’de&lt;/strong&gt; yaşandı, openSuse ve Fedora’daki geliştiriciler beraber çalışıp güzel bir Gnome 3 ortaya çıkardılar.&lt;/p&gt;

&lt;p&gt;Her neyse bu kadar ön bilgi yeter, başlayalım sunumlara :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*** Pushing for more cross-distro collaboration **&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;Sunumu veren openSuse Booster’lerinden Vincent Untz. Dağıtımlar arasındaki iletişim eksikliğinden dem vurdu.  Kimin ne yaptığını çoğu zaman bilmiyoruz. Çünkü ortak bir paydada buluşulmuyor. Mesela neden yüzden fazla dağıtım var ? Bunun çok olduğunu söylüyor. Ve çoğu zaman hepimiz aynı şeyleri yapıyoruz.&lt;/p&gt;

&lt;p&gt;Beraber çalışma ve farklılaşma iki ayrı kutup. Buna iyi karar vermek lazım. Cross-distro için son 10 yıldır neler yapıldı ? Freedesktop kuruldu, freedesktop adı altında bir takım standartlar yazıldı ve buna uyulmaya sağlandı. Desktop Summit altında toplantılar yapılıyor her sene, Gnome ve Kde geliştiricileri bir araya geliyor. Herkes mühendis olduğu için arkadaşca geçiyor ortam. Verimli olduğundan bahsetti.&lt;/p&gt;

&lt;p&gt;Bazen kötü örnekler de olabiliyor. Mesela g&lt;strong&gt;nome-system-tools&lt;/strong&gt; uygulaması. Her türlü işi yapıyor fakat zamanında Ubuntu dışında kullanan çok az insan oldu. Gnome’cılar tarafından çıksa da, bu uygulama ayarları kendine has formatı ile kaydediyordu. Halbuki her dağıtım farklı ayarlama dosyalarına sahip. Bunun dışında uygulamaların açıklamalarını ortak bir web sitesinde çevirmeye çalışılmış. Fakat yine zaman darlığından çok fazla kademe elde edilmemiş.  Bunun dışında LSB de bir çok kişi tarafından adapte edildi, ama hiç biri içine sinerek yapmadı bu işi.&lt;/p&gt;

&lt;p&gt;Bunu önüne geçilebilinri, upstream ile omuz omuza çalışmak gerekiyor. Gnome 3 konusunda Suse ve Fedora çok iyi çalışmış. Bunun meyvelerini şimdi topluyorlar. Güvenlik açıkların kapatılması ile ilgili dağıtımlar güzel bir iş birliği içinde olduğundan bahsetti. AppStream projesi başlatıldı (toplantı yapmışlari Debian, Fedora, Suse, Ubuntu katılmış, çok güzel geçtiğinden bahsetti). Ayrıca “Licesing Summit” adı altında lisans çalışmaları için bir toplantı düzenlendi. Systemd projesini de örnek gösterdi, dağıtımlarla konuşularak yapıldığı için herkes tarafından kabul görmüş (örneğin systemd öntanımlı dosyaları bulamadığı zaman, başka dosyaları okumasına imkan veriyor, yani hiç bir şey hardcoded değil, bu yüzden her dağıtım tarafından kolayce adapte edilebilir hale geliyor)&lt;/p&gt;

&lt;p&gt;Cross-distro için neler yapılabilinir ? Destek konusunda çok sıkıntılı olduğunu söyledi. Mesela Suse çıkardığı dağıtımlar için 5 senelik destek veriyor, fakat üzerindeki Gnome sürümü 5 sene destek sağlıyor mu ? 2-3 sene sonra yeni bir sürüme geçtiklerinde Suse ne yapacak ? Gnome ve Kde bu konuda bir yol bulabilir diyor kendisi.&lt;/p&gt;

&lt;p&gt;Paket yapımı hakkında belgeler mevcut, herkesinki farklı, örneğin Debian bu konuda çok sağlam temmeler atmış. Suse ve meiga örnek almış,ama Fedora örnek almamış. Desktop summit adı altında masaüstü dağıtımları buluşuyor, neden bir &lt;strong&gt;Distro summit&lt;/strong&gt; olmasın diyor ? Sadece dağıtımların buluştuğu ve ortak kararlar alındığı bir konferans.&lt;/p&gt;

&lt;p&gt;Dipnot: Konuşmasında sık sık Fedora’dan bahsetti. Fedora ve Suse’nin Upstream ile ne kadar içli dışlı çalıştığından bahsetti. Ama Ubuntu’nun tam tersine hiç bir şey yapmadığını ve Upstream ile pek çalışmadığından bahsetti. (Bunu sadece Suse’ciler değil, Fedora’cılar da sık sık söyledi)&lt;/p&gt;

&lt;p&gt;Bunun dışında genel izlenimim (diğer konuşmalardan da yola çıkarak) dağıtımların artık kendine has teknoloji yaratmayı bırakmalarıdır. Artık herkes bir teknoloji belirleyip ona destek veriyor. Upstream dediğimiz de bu, yani örneğin systemd gibi bir şeyi yeniden yazmak yerine, doğrudan systemd’ye destek vermeye çalışıyor herkes. Gnome 3’de bunun çok meyvesi toplanmış. İleriki senelerde bu ciddi şekilde artacak. Yavaştan buraya adapte olmalıyız. Yoksa ileride çok sıkıntı yaşayacağız. (Fedora ile ilgili bir konuşma’nın notları da mevcut, onda bu daha belirgin ve ne demek istediğimiz daha iyi anlayabilirsiniz, 4’üncü gün yazısından okuyabilirsiniz.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*** How automated testing helps distributions **&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;Bu sunumu openSUSE test takımından **Bernand Wiedermann **sundu. Test yapmak ve test senaryoları oluşturmak da her dağıtımın olmazsa olmaz bir parçası. Test ekipleri bu işleri kolaylaştırmak için bir takım otomatikleştirme işlemlerine giriyor. Bernand da otomatik test yapma konusunda kendi deneyimlerini anlattı.&lt;/p&gt;

&lt;p&gt;Dağıtımlar çok kompleks yapılar, her daim bir şey değişiyor. Küçük bir değişim bile çok büyük felaketlere yol açabiliyor. Ayrıca başka bileşenleri de bozabiliyor.&lt;/p&gt;

&lt;p&gt;Düşük kaliteli yazılımlar istenmiyor. Çünkü düşük kaliteli yazılımlar morali bozuk testçiler ortaya çıkartıyor. Bunlar da bu yüzden yaptıkları işi kötü bir şekilde yapıyorlar. Test’leri kötü bir şekilde ele alıyor. Bunun sonuncunda da yine kalitesiz yazılımlar ortaya çıkıyor.Halbuki test sürecini iyileştirmenin herkese faydası var. İyi bir test süreci iyi yazılımlar ortaya çıkacaktır. Kaliteli yazılımlar da mutlu testçilere yol açıyor. Mutlu testçiler de kaliteli test süreci ortaya çıkartıyor ve döngü bu şekilde devam ediyor.&lt;/p&gt;

&lt;p&gt;OpenSuse bu süreci iyileştirmek adına otomatik test süreçi geliştiriyor.  http://openqa.opensuse.org/ adresinden bakabilirsiniz. Bernand’ın kendi oluşturduğu bu framework ile çeşitli test senaryorları yapılabiliyor. Bunların arasında:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;baştan kurulum·&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;bir sürümden başka bir sürüme güncelleme (2009.2’den 2011 gibi)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;yazılım testleri&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;regression testleri&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;benchmarking&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ama testler sadece hataların  varlığını gösterir, saklı bir sürü hata hala yerinde duruyor ve sayıyor.&lt;/p&gt;

&lt;p&gt;Kendisi sonra bir demo gösteriyor. Openqa adresinden tüm süreçler gözüküyor. Her adımın ekran görüntüsü adım adım alınıyor ve web sitesinden bakılabiliniyor. Eğer bir hata olduğunda ekran görüntüsünü alıp paketçiye yolluyor. Ciddi şekilde efor edilmiş güzel bir site ortada duruyor. İyice incelemek gerekiyor.&lt;/p&gt;

&lt;p&gt;Bunun dışında başka özgür otomatik test yazılımların olduğundan bahsetti. Bunlar da &lt;strong&gt;KVM-autotest, Sikuli ve Selenium&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sununmdan sonra Bernand’a farklı ekran kartları (marka ve model çeşitliliği) ile testler nasıl yapıldığını sordum. Kendisi de bu otomatik test işinin ilerlediğini, şu an için genel olarak yukarıda da bahsedilen senaryolar düşünülmüş. &lt;strong&gt;Mesa&lt;/strong&gt; ile ilgili test’lerde zaten çok hata aldığını ve yol alması gerektiğini söyledi.&lt;/p&gt;

&lt;p&gt;Bernard’ın sunum içeriği çok güçlü idi. Fakat kendisi anlatma konusunda pek iyi olmayan arkadaşlardan biri idi. Bence bu tarz işleri konuşmayı iyi yapan insanlar yapması gerekiyor. LinuxTag’da çok şahit oldum buna çünkü, çok güzel ve içeriği kaliteli sunumlar, boş yere heba oldu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*** Sharing Open Source License and Copyright Data with SPDX **&lt;/strong&gt;*
Bu sunumu da HP’den &lt;strong&gt;Martin Michimayr&lt;/strong&gt; verdi. Konu dağıtımlardan çok kurumsal yazılımlar ve ekosistemini ilgilendiriyor gibi idi (yani enterprise uygulamalar için). Yine de bir iki güzel bilgiler içeriyordu.&lt;/p&gt;

&lt;p&gt;Temel sorun şu: Özgür yazılımların sunduğu lisans bilgileri her daim eksik, yanlış ve taşınabilinir şekilde değil (özellikle taşınabilinir konusunda vurgu yaptı). Buna bir örnek olarak, yazılımların içindeki dosyaları verebiliriz. Bazı dosyalar GPL veriliyor, bazıları LPGL olarak veriliyor. Tüm program türlü türlü lisanlar karmaşık şekilde dağıtılıyor.&lt;/p&gt;

&lt;p&gt;Bununla bitmiyor, bu yazılım farklı program yazılım bileşenlere dahil olabiliyor (örneğin bir dağıtıma girebiliyor, dağıtımın lisans gerekliliği ile paketin sunduğu lisans gereklilikleri arasında uyumsuzluk mevcut).·&lt;/p&gt;

&lt;p&gt;Bu gibi sorunların önüne geçmek için &lt;strong&gt;SPDX&lt;/strong&gt; adı altında bir standart geliştirilmeye çalışılıyor. Bu format bir yazılım paketinin bileşenleri, lisansları ve yükümlülükleri hakkında temel bir iletişim sağlamayı amaçlıyor.&lt;/p&gt;

&lt;p&gt;Bundan sonrası SPDX’in yapısı ve nasıl kullanabileceği hakkında idi. SPDX gibi seçenekler düşenenler &lt;a href=&quot;http://spdx.org/&quot;&gt;SPDX’in sitesinden&lt;/a&gt; daha fazla bilgiye ulaşabilir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*** Project Bretzn **&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;Bu sunum Kde geliştirici ve Kde-look gibi sitelerin tümümün bakımını ve liderliğini yapan &lt;strong&gt;Frank Karlitscheck&lt;/strong&gt; tarafından yapıldı. Ön bilgi olarak, Bretzn’in temel hedefi kolay bir paket yapımı ve paket dağıtımı sunmak.&lt;/p&gt;

&lt;p&gt;Frank başlıyor, soruyor bize, bizi ne motivite ediyor ? Şu anki durumumuz nasıl ? Yazılım geliştirici tarafından yazılıyor. Ardından bir inşa sistemi seçilerek onunla birlikte farklı mimariler için derleniyor. Derlendikten sonra bunun web sitesine koyuyoruz, yavaştan arkadaşlara tanıtıyoruz. Bununla yetmiyor, gidip twitter, facebook gibi sosyal mecraları da kullanıyoruz. Yazılım kullanıcılar tarafından benimsendikten sonra bir dağıtıma aldırtmaya çalışıyoruz. Dağıtım da doğrudan kararlı depoya almıyor, ortalama olarak 8 ay bekliyoruz kararlı dağıtıma girmesi için.·&lt;/p&gt;

&lt;p&gt;Tüm bunları yaptık, şimdi artık birilerin kullanmasını umabiliriz :)&lt;/p&gt;

&lt;p&gt;Bretzn tüm bunları **10 dakikaya **indirmek gibi idiallı bir sözle çözmeye çalışıyor.&lt;/p&gt;

&lt;p&gt;Bretzn bir &lt;strong&gt;Qt Creator&lt;/strong&gt; eklentisi. openSUSE’nin obs sistemi ve Meegoo’nun build servisi ile entegre çalışıyor (bir fikir edindiniz mi ?).  Bu gibi servisler ile entegreli çalıştığı için cross-compile işini bunlar hallediyor.  Paketi bu servisler inşa ettikten sonra, yine Bretzn tarafından başka servislere yollanıyor. Burada başka servislerden kastım Uygulama Mağazaları. Yavaş yavaş, Apple’nin &lt;strong&gt;AppStore&lt;/strong&gt; örneği gibi Linux camiasında da bu tarz siteler açılıyor. Bunlara örnek olarak Meego Garage, openSuse AppStore, openDesktop.org gibi yapıları söyleyebiliriz.&lt;/p&gt;

&lt;p&gt;Yayınladıktan sonra da yine yukarıda bahsettiği liste, rss, twitter, facebook gibi yayınlama kanalları da kullanılarak “reklam” yapma durumu mevcut.&lt;/p&gt;

&lt;p&gt;Şöyle bir baktığımızda Bretzn’in aslında &lt;strong&gt;OBS&lt;/strong&gt; sistemine birer frontend olduğunu ve paketlerin de bizim Pisido gibi araçlar gibi kolayca yapılmasını sağlamak. Fakat buradaki asıl amaç, paket yapmaktan ziyade paketi yayınlamak ve tanıtmak. Ben hala Pisido,pisiyap gibi programların paket yapmak için mantıklı araçlar olduğunu düşünmüyorum. Bunu da yine burada farkettiğim için soru hakkımı ele alarak Frank’a şu soruyu sordum :&lt;/p&gt;

&lt;p&gt;“Paketlerin 10 dk’da yapılmasından ve yayınlanmasından bahsettiniz, halbuki Bretzn yapısı sanki %10 paket yapımı, %90 da paket tanıtımı ve yayımı. Örneğin sizin bu projeniz ile bir Apache, Chromium, Firefox gibi paketler yapmak mümkün mü ? Sizce mantıklı geliyor mu ?&lt;/p&gt;

&lt;p&gt;Kendisi de hemen gülümsedi ve haklı olduğumu, Bretzn’in aslında bu tarz programlar için olmadığı, daha çok basit programlar için olduğundan bahsetti. Paket yapımını ve geliştirmesini yine kendimiz, düzgün işleyen süreçlerle yapmamız gerekiyor, daha sonra yaptığımız paketin inşa dosyalarını bretzn sistemi ile diğer inşa sistemlerine yüklememiz gerekiyor (OBS gibi).&lt;/p&gt;

&lt;p&gt;Bretzn güzel bir proje’ye benziyor. Biraz beklemek lazım, tutar mı tutmaz mı emind değilim, zaman gösterecek :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*** OBS - OpenSuse Build Service **&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;Bununla ilgili ilk gün eski Pardus geliştiricilerinden** İsmail Dönmez **ile güzel bir konuşmamız olmuştu. Kendisi şimdi openSuse’de Booster olarak göreviyor alıyor. Birinci elden OBS ile ilgili bilgiler edindim diyebilirim. Bunları Geliştirici listesinde paylaşmıştım, fakat buraya da ekleyeyim, geliştirici listesini takip etmeyenler olabilir.&lt;/p&gt;

&lt;p&gt;Bu birinci gün İsmail Dönmez ile ilgili elde ettiğim bilgiler dışında, bugün edindiğim kısa kısa bilgiler şunlar idi.  Kısaca OBS’yi anlatmaya çalışayım. OBS, openSuse tarafından geliştirilen bir sistemin genel adıdır.  Temel amacı, geliştiricilerin kolay bir şekilde paketlerin yapması ve esneklik sağlamaktır. Örneğin bir geliştirici paketi derliyor ve depoya almaya çalışıyorsa türlü türlü sorunlar ile karşılaşabiliyor. Mesela bağımlılık eksik olabilir ya da bir mimaride çalışabilirken başka bir mimaride sorun yaşayabilir (32bit 64bit farklılığı gibi).&lt;/p&gt;

&lt;p&gt;OBS’i şu an kullanan 21 bir tane dağıtım varmış. Evet openSuse tarafından geliştiriliyor, ama kodları açık ve dileyen kendi paket sistemine göre değiştirebiliyor. Opensuse bunun için bir web arayüzü de yapmış: &lt;a href=&quot;https://build.opensuse.org/&quot;&gt;https://build.opensuse.org/&lt;/a&gt;. OBS’nin bunun dışında OSC adı altında bir konsol arayüz uygulaması ve açık bir API’si mevcut (yani OBS için farklı uygulamalar geliştirebilirsiniz, yukarıda bahsettiğim &lt;strong&gt;Bretzn&lt;/strong&gt; buna bir örnek).&lt;/p&gt;

&lt;p&gt;Sununmda sonrasında benim İsmail Dönmez ile yaptığım 1-2 saatlık workshop ile ilgili bilgiler mevcut idi. Birinci gün yaptığımız bu workshop ile bilgiler de şu şekilde (geliştirici listesinde paylaştığım yazının aynısı):&lt;/p&gt;

&lt;p&gt;İki ana bileşen var, bir OBS (OpenSource Build Service) ve OSC (OBS için konsol frontendi). Bunların kodu açık ve kullanılabilinir halde. OBS sisteminin bir de web arayüzü mevcut.&lt;/p&gt;

&lt;p&gt;OBS sistemini ya Suse’nin kendi sunucularını kullanarak üye olabiliyorsunuz, ya da kendimiz sunucuları kurup kullanabiliyoruz. Her iki türde de OBS’de bir takım değişiklikler yapmamız gerekiyor. Bizim buildfarm.py’yi adapte etmemiz gerekiyor mesela, pspec.xml’e parser yazmak gerekiyor. Bunları yapabilmek için de Perl bilgisi gerekiyor çünkü OBS sistemi Perl ile yazılmış.  Örneğin OSB’yi kurduk ve OSC de kullanır halde. İşlevler nedir, ne yapabileceğiz, neye derman olacak derseniz, onlar da şunlar.&lt;/p&gt;

&lt;p&gt;OSC aslında git-vari bir fronted (ozan daha çok svn’e benziyor dedi, ki haklı da :)), bazı komutlar şu şekilde:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;osc co home:farslan&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;osc commit -m “Initial release”&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;osc delete home:farslan chromium-browser&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;osc up&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Örneğin commit ettikten sonra, daha önce yine OSC ya da web arayüzden belirlediğiniz mimarilere göre derlemeye başlıyor. Herhangi bir commit’de doğrudan derlemye başlıyor. Bunu neye göre yaptığını sorduğumda, SUSE’cilerin bağımlılıklara göre ayarlardıklarını söyledi. Yani örneğin ben vim’e bir commit yaptım, gcc’ye de başkası bir commit yaptı. O zaman sıraya ilk gcc giriyor.··&lt;/p&gt;

&lt;p&gt;Build başlamadan önce her bir build aşaması için sanal makine oluşturuluyor.  Makine’de haliyle hiç bir bağımlılık mevcut değil, on-the-fly bağımlılıkları kuruyur (bizim farmdaki gibi herşeyi kurulu değil yani). Yani vim için bir değişiklik mi yaptım, osc ile commit ettim örneğin, OBS gidip benim için yeni bir sanal makine kurup derlemeye başlıyor. Güzel olan ise osc ile doğrudan farm’da derlenen çıktıları görebilmemiz, hatalara müdahele edebilmemiz.&lt;/p&gt;

&lt;p&gt;Burada aklıma takılan, bazı paketlerin derleme işlemi zaten çok uzun sürüyor (örnek: chromium-browser), öntanımlı olarak her sanal makine de aynı olduğundan uzun sürebilir. Fakat bunun da önüne geçebiliriz. OBS tarafı bizim elimizde olduğunda, doğrudan ayrı cluster’ler oluşturabiliriz. Böylelikle derleme süresi uzun süren paketlere daha güçlü bir sanal makine imkanı verebiliriz mesela.  Bunların hepsi bizim elimizde.&lt;/p&gt;

&lt;p&gt;Genel olarak geliştiricilerin ev dizinleri oluyor home:farslan gibi. Bir de ayrı dizinler mevcut openSUSE:Factory (bizim devel), openSUSE:11_4 (bizim stable), vs..  Geliştirici sıkıntısı olmadığından Factory’de yüzlerce paketçi ve bunların paketleri mevcutmuş. Peki bunların koordinesi nasıl oluyor ?&lt;/p&gt;

&lt;p&gt;Mesela chromium’un yeni bir sürümü çıktı. Ben bunu openSUSE:Factory’de güncelledim. Derlendi ve bana gerekli bilgileri verdi. Fakat bazen bir paketi güncellerken onlarla beraber başka paketleri de derlemem gerekiyor (ABI kırıldı). O zaman ilk önce asıl paketi (mesela chromium) home:farslan dizinine kopyalıyorum. Sonra da diğer paketleri kopyalıyorum. Burada tıpkı bizim playground gibi düşünebilirsiniz. Fakat buradaki farklı olan, sizin yaptığınız değişikliklerin de doğrudan benim home:farslan’a yansımasıdır. Yani mesela ben cups’u kopyaladım buraya, Ozan’ın bundan sonra yapacağı tüm commitler de bana yansıyacak. Ama bu da bir opsiyona bağlı, kopyalareken seçenek sunuluyor, istediğimde değişiklikler yansayacak, istemediğimde yansımayacak.&lt;/p&gt;

&lt;p&gt;Şimdi tüm paketleri aldım, güncelledim iyice. Bunları stable’e merge edeceğim değil mi ? Doğrudan OBS’nin arayüzünden bir review isteği yolluyorum. Review isteği yolladıktan sonra benim yaptığım tüm commitler ve değişiklikler (paketlerle ilgili olanlar) doğrudan review ekibine gidiyor.&lt;/p&gt;

&lt;p&gt;Review ekibi hem otomatik botlardan oluşuyor hem de insanlarda. Otomatik botlar yapılan değişiklerin kod düzenine kontrol ediyorlar (bizim ismail.py gibi).  Bunun dışında legal-team de mevcut, bu takım da sadece lisans bilgilerine bakıyor. Bu review ekibi içinde paketin bakıcısı da mevcut (başkasının paketini değiştirdiğini mesela), ayrıca bir de openSuse:11_4 sürüm yöneticileri mevcut.  Bunlardan hepsinden ACK alması lazım.··&lt;/p&gt;

&lt;p&gt;Yani bu adamlar bir nevi bizim Commit listesini takip ediyorlar ve yapılan değişikleri review ediyorlar. Onların görevi bu. OBS’nin bir güzel yanı ise, ACK aldığınız paketi otomatik olarak sizin ev dizininzden silmesi. Yani paket’den onay aldığınızda sizin ev dizinizdeki bununla ilgili tüm paketler siliniyor (bu da yine opsiyone bağlı)&lt;/p&gt;

&lt;p&gt;Bu merge ve review kısımları bizde bir çok yere, özellikle paket reviewlerine uygulanabilinir. Ciddi avantaj sağlayacağını düşünüyorum.
&lt;strong&gt;**&lt;/strong&gt;***&lt;/p&gt;

&lt;p&gt;Evet bu kadar. Bunların dışında systemd ve dracut sununmlarına da girdim. Fakat oradan aldığım notlar çok dağınık ve güzel bir blog yazısı temsil edecek şekilde değil. Önümüzdeki günler bu notları düzenleyebilirsem bu iki şey hakkında da yazmayı düşünüyorum.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>LinuxTag Berlin -  2'inci gün</title>
		<link href="http://blog.arsln.org/linuxtag-berlin-2inci-gun/"/>
        <updated>2011-05-13T22:25:38+00:00</updated>
		<id>http://blog.arsln.org/linuxtag-berlin-2inci-gun</id>
        <content type="html">&lt;p&gt;Bu sabah GPU ile ilgili bir workshop’a girecektim. Fakat sunacak olan kişi ortada olmadığı için ertelendi. Şöyle bir plana bakarken, LiMuX sunumunu gördüm (bugünkü sunumlar pek güzel değil açıkcası). Neyse buna girdim, LiMuX’un release manager’i Robert Jaehne’den başladım dinlemeye. Aldığım notları sizlerle paylaşayım dedim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LiMuX&lt;/strong&gt;, München belediyesi tarafından Windows’tan Linux geçiş için yapılan anlatşmalardan ortaya çıkan bir dağıtım. Genel bilgiler şu şekilde:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;2006’da bu işe başlamışlar (geliştirme)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Devlet işi olarak görüldüğü için camia unsuru hiç yok&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Temel olarak Debian ile başlanmış, sonra Ubuntu’ya geçilmiş. Paketlerin %90 doğrudan Ubuntu’dan alınıyormuş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kurum içinde kullanılan özel yazılımın bağımlılıklarını kendileri paketlemişler. Hatta bazı uygulamalar için Firefox 2.0 sürümünü paketlediklerini söylediler. Yani geliştiriciler bir uygulamanın çalışması için gerekli olan ne varsa yapmışlar (bir paketin farklı sürümlerini paketlemek gibi)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Belirli güvenlik kıstasları var (her istemciye virus scanneri kurmak, spesifik haklar vermek (flash bellekleri kullanmak gibi), vs..)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kullanıcı senkronizasyon’a önem verdiklerini söylediler (Mail, Browser, fakat nasıl yaptıkları hakkında bir şey söylemediler.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bundan sonra yıl yıl hangi aşamalardan geçtiklerini, ne sorunlar yaşadıklarını, neler öğrendiklerini anlattılar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2008&lt;/strong&gt;:
    Sürüm takviminden 6 ay sonra yayınlamışlar dağıtımı. Son ürün de bir sürü hata mevcutmuş. Bir çok memnun olmayan kullanıcılarına sahiplermiş. O aralarda Debian kullandıklarından tam Sarge/Etch güncellemesine denk gelmişler.  Kullanıcılardan ciddi istekler varmış (hataların çözümleri konusunda).  Çıkardıkları sürümler özellik bazında imiş (feature based). Bunların önüne geçebilmek için zaman bazlı sürüm çıkartma planına geçmişler. Gelen istekleri önceliklerine göre ayarlamışlar. Her yeni sürüm geliştirmesi için özellikleri baştan bırakmışlar (yani feature frezze olduktan sonra hiç bir şeye bulaşmamışlar).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2009&lt;/strong&gt;:
    Zaman bazlı sürümler çok önemli hale gelmiş, kullanıcı istekleri de mevcut fakat kaliteli değil. İsteklerin çok önemli olduklarını anlamışlar. Geliştiriciler her gelen isteği yapmaya çalışmış (fakat bunun yanlış olduğundan bahsetti, biri X uygulamayı isteyebilir, ona sormak gereken şey ise neden X uygulamayı istiyorsun ?). Bu işin üstesinden gelebilmek için “Anforderungsanalyst” almışlar. Türkçesi tam olarak ne bilmiyorum, ama “İstek analisti” olabilir.  Bu kişi de sadece isteklerle ilgilenip, onların yapılabilirliğini gösteren, kullanıcın isteklerini inceleyen, düzenleyen biri. İstekler için de kullandıkları araç da TRAC imiş.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2010&lt;/strong&gt;:
    Bir çok güzel işler yapıldığını fakat kimsenin duymadığından bahsettiler. Etrafta hep negatif söylemler kalmış (insanlar hala 2008 yılındaki geç kalmalardan bahsediyorlarmış). Aslında çok bilgi var etrafta, fakat bu herkesin çok bildiği anlamına gelmediğinden bahsetti. İnsanları bilgilendirmek de gerekiyor.  Peki hangi bilgileri kimler istiyor ? Bunlar da belirlenmeli. Dökümentasyon çok var ama dağıtık (çoğunlukla SVN depolarında sağda solda duruyormuş).  Bunun dışında “son kararı” veren bir mecraları olmadıklarını ve bu yüzden sıkıntı yaşadıklarını belirti ( Yönetim bir şey diyormuş, kullanıcılar başka bir şey diyormuş, geliştiriciler ayrı bir şey diyormuş). Bu da uzun vadede zarar veriyor, “son karar” mecrasının eksikliğini hissetmişler. Kullanıcıları grup grup ayırmışlar(?), ve bunlarla da zamanında iletişime geçilip bilgilendirme yoluna gidilmiş. Son karar verme mecrası(mekanizması) oluşturmuşlar. En son da 500 sayfalık bir PDF hazırlamışlar, admin dökümentasyonu, ama bunu kimin için, ne için yazdıklarından bahsetmedi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2011&lt;/strong&gt;:
    Geliştirici == Testci gibi bir durumları varmış (bunun yanlış olduğundan dem vurdu). Belirli bir test zaman düzelgesi yokmuş, yani testler rastgele yapılıyormuş, geliştiriciler bazen yapıyor bazen yapmıyordu. Bazı testler gerçek dünya koşulları ile hiç uyuşmuyormuş.  Bunun dışında kullanıcılar her şey “sürüm notlarından” öğreniyormuş, bir önceki yıldan kalan bir alışkanlık, çoğu zaman sıkıntı oluyormuş. Belli başlı sorunları var, neler ?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Kimse test yapmak istemiyor (özellikle de geliştiriciler, kod yazmayı daha çok seviyorlar)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hatanın önemi yanlış kişiler tarafından değerlendiriliyor (duruma göre sıkıntı yaratıyormuş)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Müşteri için planlama güvenliği yapılmamış (?)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kurum içinde kullanılan kritik uygulamalarda bir takım hatalar çok geç farkedilmiş (olmaması gerekiyormuş kesinlikle)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bunu düzeltmek için neler yapmışlar ?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Kalite planı oluşturmuşlar (was, wann , wie), yani örneğin Release notlarında olması gerekenler çok daha öncesinden konuşumul ve müşteriye söylenmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bağımsız ve tecrübeli bir test takımı kurulmuş (6 kişi, tam zamanlı)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kullandıkları araçlar : testlink / TRAC&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“Harte definitionen für bug schwerer grade” gibi bir şey yazmışım.  biraz karmaşık bir cümle, çevirisinden ziyade ne anlama gelebileceğini tam bilemiyorum, yine de şu şekilde bir şey: “Çok kritik hatalar için sınır belli tanımlar”. Tam olarak ne demek istediğini bilemedim ama :)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2012&lt;/strong&gt;:
    Bir sonraki Ubuntu LTS güncellemesini yapacaklar (şimdi kullandıkları 10.04)
    Yeni bir arayüz olabilirmiş.
    Tam teşeküllü 8000 istemci kullanılacak
    Geliştiricilere ihtiyaçları varmış.&lt;/p&gt;

&lt;p&gt;Bu kadar, sonra soru sorma safhasına geçildi. Çok az soru soruldu. Bir tanesi şu şekildeydi:
 “&lt;em&gt;Kurumlardaki yaş ortalaması çok değişken. Windows’tan Linux’a geçişte hangi yaş grubu nasıl tepki verdi ?”&lt;/em&gt; Cevap ise şu şekilde: “&lt;em&gt;Kişisel olarak bununla karşılaştım, özellikle yaşlı insanlar (50 yaş üstü) hayatlarında bir çok değişim görmüş insanlar, o yüzden olgunlukla davranıyorlar, ama 5-10 senedir çalışan yeni nesil ile sık sık fikir ayrılığına giriliyor.&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;Ben de bir soru sordum kendilerine, dedim ki geliştriciye ihtiyacınız varmış, peki şu anki durumunuz nedir ? Ne kadar geliştirici çalışıyor ekibinizde ? diye sorduum. 
O da bana,  8 geliştirici çalıştığını, bunlardan biri yönetici işleriyle uğraştığını, birinin (kendisinin) sürüm yöneticiliğini yaptığı (ama geliştirme yapamadığını daha çok kağıt işleri ve yardım,fikir danışma işleri yaptığını söyledi), bir de yukarıda bahsettiğim “istek analisti”. Geriye kalan beş geliştirici de çok yoğun çalışıyormuş.&lt;/p&gt;

&lt;p&gt;Test ekipleri 6 kişi, geliştirici ekipleri de 8 kişi. Oran baya yüksek :) Evet bu kadar, yeni başka şeyler öğrenirsem yine paylaşırım.&lt;/p&gt;

&lt;p&gt;**Kişisel düşüncem:
**LiMuX ekibi var olan ve yapılmış işi (Ubuntu 10.04) kendi isteklerine göre konfigure ediyorlar. 8 Kişilik ekip ile pekala bunu yaparlar. Muhtemelen Ubuntu’daki her güncellemeyi doğrudan alıyorlardır. Test ekibi de sadece kurum içinde kullanılan özel yazılımlar için test durumları hazırlıyorlardır. LiMuX ekibi depo’da “temiz” kod gibi bir kavramdan uzak gibiler, bunu sunum’da özellikle Firefox 2.0 paketlediklerini anlattıkları vakit anladım. Mesela uygulamanın Firefox 4.0 ile çalışmasını sağlamak yerine Firefox 2.0 paketleyip o şekilde çalıştırmışlar. Tabiki iç yüzlerini bilmiyoruz, yanılıyor da olabilirim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinuxTag diğer sunumlar&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Bundan sonra bir tane Debian sunumuna girdim. Debian Proje Lideri çok güzel bir şekilde Debian’ın genel yapısını ve kültürünü anlattı. Kendisi de Fransa’da doktora bitirmiş 32 yaşında biri. Ama her konuyla Debian ve Linux kültürüne hakkim idi. Fransız olmasına rağmen İngilizceyi çok akıcı bir şekilde konuşuyordu. Kendisinin adı Stefano Zacchiroli idi. Google’de aratıp daha fazla bilgi alabilirsiniz.&lt;/p&gt;

&lt;p&gt;Debian sunumunda salon tıklım tıklım idi. Bilindik şeyler anlattı Stefano, ne kadar çok fork edildiklerini, hatta forkların forku olduklarını. Kendilerinin çok kaliteli işler yaptıklarını, tüm paketçilerin kendi alanlarında birer yazılım uzmanı olduklarını vs… Salon’da sanki herkes bir vefa borçu ödüyormuş gibi izliyordu. Debian’ı genel olarak insanların sevdiğini gördüm. Her dağıtımdan insan vardı. Birleştirici bir unsurları var gerçekten&lt;/p&gt;

&lt;p&gt;Bunun dışında da “Nasıl hata çözülür” diye bir sunuma katıldım. Biraz ileri seviye bir şey beklerken, aslında benim çokça yaptığım ve sizlerle de paylaştığım yazıların çok daha basit bir şekli idi. Biraz hayal kırıklığına uğradım ama olsun artık bu kadar :)&lt;/p&gt;

&lt;p&gt;Bir sonraki yazımda çok da güzel konular yer alacak, özellikle OSB ile ilgili güzel bilgiler edindim. Okumanızı tavsiye ederim :)&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>LinuxTag Berlin - 1'inci Gün</title>
		<link href="http://blog.arsln.org/linuxtag-berlin-1inci-gun/"/>
        <updated>2011-05-13T22:08:51+00:00</updated>
		<id>http://blog.arsln.org/linuxtag-berlin-1inci-gun</id>
        <content type="html">&lt;p&gt;Bu yıl Berlin’deki LinuxTag’a katılıyorum (hala devam ediyor). Almanya’da ilk başta Frankfurt’a ayak bastım. Aile ziyareti yaptıktan sonra hızlı Tren ile Berlin’e geçtim. Üç gündür Berlin’deyim. Burada kısa kısa aldığım notları sizlerle paylaşmayı düşünüyorum. Almanya şöyle değişik, böyle değişik şeyleri beklemeyin benden şimdiden söyleyeyim, çünkü o şekilde zaten istesem de yazamam. Notlar genel olarak biraz dağınık, şimdiden haberiniz olsun :)&lt;/p&gt;

&lt;p&gt;LinuxTag nedir ? LinuxTag avrupa’nın en büyük özgür yazılım etkinliklerinden biri. Gerek Almanya’dan, gerekse  diğer ülkelerden yoğun katılım alıyor. Çok profesyonel işleniyor, 5-6 ayrı salonlarda paralel sunumlar mevcut. Her gün ayrı bir konuya ağırlık veriliyor.&lt;/p&gt;

&lt;p&gt;**Scientific Computing on GPU’s
**
İlk girdiğim sunum buydu. Genel olarak CPU ve GPU arasındaki temel farkları anlatan bir sunumdu. GPU’yu kullanmamız gereken alanlar var, özellikle de bilimsel alanlarda onlara değinildi. Örneğin GPU’da hiç bir şekilde ön bellek yokmuş. CPU’da normalde L1 veya L2 adlarında bellekler olur. Bunlar doğrudan CPU’nun dahilinde olduğu için hazırı hızlı olabiliyor. Fakat bu da veriye yerel bağımlılık oluşturuyor, yani bir veri kullanılacaksa, hemen bellekte tutuyor ve orada saklıyor.
GPU’larda ise bu bellek olmadığından her gelen verilerin hızlıca işlenip geri yollanmasına bağlı. GPU bu yüzden paralel programlama’da inanılmaz hızlar sağlıyor. Bunun dışında GPU’ların kendi içsel bellekleri mevcut (önbellekten farklı). Bunlar 5 çeşit olarak ayrılıyor:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Registers&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Shared Memory&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Global Memory&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Constant Memory&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Texture Memory&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Her bir belleğin çeşitli ulaşım hızları var. GPU’larda zor olan da bu bellekleri yönetmek. Bunlar manuel olarak düzenleniyor ve tamamen size bağlı fakat ciddi şekilde optimasyon sağlıyor. Bunun dışında sunumda Tegra ve Nvidia’nın Fermi mimarilerine girildi. Mesela Fermi’lerde yukarıda bahsettiğim ön bellek (cache memory) eklenmiş.&lt;/p&gt;

&lt;p&gt;Genel olarak sonrasında çok da spesifik konulara dalıp uçtu sunucu :) Yakalayamadım sonrasını. Değişik ve ilginç bir sunumdu&lt;/p&gt;

&lt;p&gt;**Spice  and desktop virtualization
**
Bu sunumu RedHat’den Gerd Hoffman yaptı. Ama ben hiç beğenmedim açıkcası, çok hızlı bir şekilde anlattı. Konuşmayı da ağızının içinden söylediği için çok anlayamadım açıkcası. Verimsiz geçti bu yüzden. Biraz da Spice geliştiricilerine hitap ediyor gibiydi. Spice’nin kuruluşunu anlattı kısaca. Spice’in basit bir protocol olduğunu ve işini yaptığından bahsetti. Genel olarak sanallaştırma sunucu ve yönetici işlerinde kullanılınıyor, fakat günümüzde masaüstü kullanımı da artıyor ve önem kazanıyor.
Bunun için Spice’da bir takım teknolojiler mevcut. Örneğin ekran effektleri için (gnome-shell gibi) Spice QXL apisi mevcut. Usb için yoğun bir şekilde çalışılıyor ve gelişmeler mevcut.  Bunun dışında ağ protokolleri ile ilgili bilgiler sundu. Dediğim gibi pek verimsiz geçti, fakat geliştirici slaytların bağlantısını da bizlerle paylaştı :)&lt;/p&gt;

&lt;p&gt;Şuradan indirebilirsiniz: &lt;a href=&quot;http://kraxel.org/slides/2011-linuxtag-spice.pdf&quot;&gt;http://kraxel.org/slides/2011-linuxtag-spice.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**Qui Vadi, QT
**
Sunumu veren Daniel Molkentin, kendisi Nokia Berlin’de yazılım mühendisi olarak çalışıyor. Şu an için de Qt Creator uygulaması için çalışıyor(QT ve QML için platform bağımsız IDE). İlk başta QT’nin hala satılmadığından dem vurdu, biz hala buradayız çalışıyoruz dedi :) Bunu vurgalayarak söyledi, çünkü bildiğiniz gibi Nokia’nın Microsoft ile anlatşmasından sonra kafalarda bir çok kafa işareti oluşmuştu.
Genel olarak Qt’de çıkacak yeniliklerden bahsetti. 4.8 için , Lighthouse adındaki uygulamadan bahsetti. Bu uygulama bir çok platformda (özellikle gömüllü sistemlerde) avantaj sağlayacak. Bundan önce QT/Embedded mevcut idi, QT/E’nin pencere sistemi de yoğun olarak yazılımsal bir grafik motoruna bağlı idi. Lighthouse ile bunu tamamen donanım bazlı yapmak istiyorlar. Bunun dışında Qt 4.8’de ciddi optimizasyonlar mevcut (özellikle I/O kısmında). Ayrıca QML de bu yenilikler arasında olacak.&lt;/p&gt;

&lt;p&gt;Qt5 için de ana konu modularizasyon olacak. Tüm bileşenleri modüle etmeye çalışılacak. Yine son zamanlarda bir trend olarak karşımıza çıkan GPU kullanımı da artacak. GPU ile ilgili ciddi kullanımlar olacak. Grafik altyapsını da tamemen yenileyercekler (OpenGL 2.1 kullanımı), yani yeni Qt5 Linux dağıtımlarında Mesa’nın 7.10.2 ve üstünü isteyecek.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Massif Visualizer
**
Sunumu veren Milian Wolff. Kendis Kdevelop ve Kate geliştirici. Konu debugger’ler hakkında. Valgrind’den yola çıkarak anlattı. Valgrind iyi bir debugger olsa da 5-100x katı daha yavaş çalıştırıyor uygulamayı, çünkü kendisi bir emulatör kullanıyor. Bunun dışında debug için çeşitli uygulamalar mevcut. Örneğin **Memcheck&lt;/strong&gt;, bellek yönetimindeki hataları bulmak için. Helgrind, multithread hatalarını bulmak için. Callgrind, işlemci gücünü analiz etmek. Massif , bu da bellek kullanımını analiz etmek için.&lt;/p&gt;

&lt;p&gt;Bir uygulamayı debug edebilmek için, debug sembolleri ile derlemek gerekiyor. &lt;strong&gt;Massif&lt;/strong&gt; daha önce de belirtiğim gibi bellek kullanımını analiz etmek için kullanılan bir araç. Valgrind ile kullanmak isterseniz valgrind –tool=massif … şeklinde belirterek çalıştırmanız gerekiyor. Massif belleğin “Heap” dediğimizin kısmını inceliyor. Çeşitli aralıklarla birer imaj alıyor. Bunun yaparken uygulamanın bellek kullanımını hiç bir şekilde etkilemiyor, fakat Massif’in kendisi bellek harçayabilir.&lt;/p&gt;

&lt;p&gt;Valgrind’i Massif ile çalıştırdıktan sonra, belirli bir dosya üretiyor. Bu dosya’dan her türlü bilgiyi elde edebiliyorsunuz. Fakat okuması çok zor ve uğraştırıcı. Bunun önüne geçebilmek için Milian, Massif Visualizer adında bir uygulama yazmış. Bu uygulama bu bilgileri çok daha güzel ve okunabilinir bir şekilde gösteriyor. İşte bu sunumda bu uygulamanın tanıtımı yapıldı :)&lt;/p&gt;

&lt;p&gt;Resmi sitesi şu şekilde: https://projects.kde.org/projects/extragear/sdk/massif-visualizer&lt;/p&gt;

&lt;p&gt;Genel olarak ilk gün bu şekilde geçti. Birde &lt;strong&gt;İsmail Dönme&lt;/strong&gt;z ile buluştum, eski Pardus geliştiricilerinden :) Kendisi şimdi openSUSE’de Booster olarak görev alıyor. Güzel bir konuşmamız oldu, özellikle OBS ve OSC konularında, onları ilerideki günlerdeki yazılarımda anlatacağım.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Neden Wine 64bit paketi Pardus 2011 depolarında yok ?</title>
		<link href="http://blog.arsln.org/neden-wine-64bit-paketi-pardus-2011-depolarinda-yok/"/>
        <updated>2011-05-03T00:24:46+00:00</updated>
		<id>http://blog.arsln.org/neden-wine-64bit-paketi-pardus-2011-depolarinda-yok</id>
        <content type="html">&lt;p&gt;&lt;img src=&quot;http://arsln.org/wp-content/uploads/wine-software.jpg&quot; alt=&quot;&quot; /&gt;Sıkça sorulan sorulardan biri. Neden Wine yok depoda ? Son aylarda gerek forumlarda, gerek bugzilla bununla ilgili yoğun bir şekilde şikayet geliyor. Bir geliştirici olarak ister istemez rahatsız oldum. Çünkü ben kendi adıma kullanıcılara hep en iyiyi sunmayı çalıştım ve hala da çalışıyorum. Ne zaman bir şikayet görsem “&lt;strong&gt;nerede hata yaptım&lt;/strong&gt;” diye düşünmeden edemiyorum.&lt;/p&gt;

&lt;p&gt;Bu konuyla ilgili sizleri bildirmek adına bu yazıyı yazıyorum. Bu yazdıklarımı bir bahane olarak görmezseniz sevinirim. Biraz da bizim içerimizdeki gizli &lt;strong&gt;kahramanların&lt;/strong&gt; neler yaptıklarını ve sizler için gece gündüz çalıştıklarını da görmenizi istiyorum. Şimdi yerinizden kalkın, kendinize bir çay hazırlayın. Uzun bir yazı olacak. Ben bekliyorum :)&lt;/p&gt;

&lt;p&gt;Çayınızı aldınız değil mi ? Hadi bakalım, başlayalım …&lt;/p&gt;

&lt;p&gt;Her şey bundan yaklaşık &lt;strong&gt;beş ay **önce &lt;a href=&quot;http://bugs.pardus.org.tr/show_bug.cgi?id=15409&quot;&gt;bir Bugzilla hatası&lt;/a&gt; ile başladı. Kullanıcılardan Wine paketi ile ilgili bir istek geliyor. O zamanki Wine paket bakıcısı olan **Fatih Aşıcı&lt;/strong&gt; ise 32 bit deposuna Wine’in girdiğini, fakat 64 bit deposu için biraz zamana ihtiyacı olacağını söyledi.&lt;/p&gt;

&lt;p&gt;Biraz zaman alacak derken neyi kast ediyordu peki ?&lt;/p&gt;

&lt;p&gt;Fatih Aşıcı’nın kastettiği durum, Wine’in çalışması için gerekli &lt;strong&gt;lib32 paketleri&lt;/strong&gt; idi. Yani 64 bit altında çalışan 32bit paylaşımlı kütüphaneler. &lt;strong&gt;Bunlar olmadan Wine çalışmaz&lt;/strong&gt;. Mesela &lt;strong&gt;Skype, Google Earth, Picasa&lt;/strong&gt; gibi uygulamalar da bunu istiyor. Pisi’nin güzel bir şekilde bu paketleri yapmasına olanak veren bir altyapısı mevcut değildi.&lt;/p&gt;

&lt;p&gt;Fatih bu yorumu 16.01.2011 tarihinde yapmış. Depo’da hiç bir lib32 paketi mevcut değil. Usanmadım, Fatih Aşıcı’nın bu yorumundan sonraki tüm commitlerini tek tek inceledim. Gerek paketler deposunda, gerekse Uludağ deposunda yaptıklarını not aldım.&lt;/p&gt;

&lt;p&gt;Şimdi beraber Fatih Aşıcı’ın bu günden sonra uğraştığı işlerle ve bu lib32 paketlerinin durumunun nasıl geliştiğine bakalım.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ocak Ayı (16’sından sonra)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Kde’nin öntanımlı klasör ayalarını düzenlemiş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xorg-sunucusu Opengl sürümünü düzgün yüklemediği için Onur Küçük ile buna bir yama hazırlamış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ardından 2011 çıkışı için gerekli depo değişiklikleri yapmış (2011 adında bir tag oluşturmuş).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;2011 için testing deposunu açmış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Depo’daki sahipsiz paketleri bakıcısız olarak işaretlemiş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;NVidia ve Ati’nin kapalı kaynak kodlarını güncellemiş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Virtualbox sürümünü elden geçirmiş, önemli bir hatayı düzeltmiş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Az sayılı karakterleri desteklemek amacıyla Çomar’ı yamalamış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Pisi 2.4_Alpha2 sürümünü çıkarmış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xorg sunucusunu yeni geliştirme sürümüne geçirmiş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bunun yanında bir çok küçük paketi güncellemiş, düzenlemeler yapmış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Sürüm notlarını gözden geçirmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Rusya dilinin desteklenmemesi için Yalı’yı düzenlemiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Yalı’ya ayrı bir klavyeyı kolayca kullanılması için yama yapmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Pisi’nin düzgün arşiv indirilmesi için “fetcher” sınıfını gözden geçirmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Çomar’daki modelerden birini gözden geçirmiş&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ocak ayının yarısı bu şekilde geçmiş. Ortada hala lib32 yok. Onun yerine 2011’in yetişmesi için elinden geldiğince kritik sistemleri düzeltmeye çalışmış. Tabi bu arada  Bakalım şubat ayı nasıl geçiyor&lt;/p&gt;

&lt;p&gt;**Şubat ayı (01-28 arası)
**&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Henüz 2011’e alınmamış paketlerin listesini çıkarmış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;İsmi değişmiş paketlerin depo indeksini bozulmaması için gerekli değişiklikleri yapmış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“Patch” paketinde kritik bir güvenlik hatasını kapatmış ve paketi gözden geçirmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Gpg/ssh agent’lerin ile bir hatayı düzeltmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Yalı’nin kodunda bir kısmı sadeleştirmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Benim libicns ile yaptığım bir hatayı usanmamış gidip değiştirmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Network Manager’e küçük bir değişiklik yapmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Çeşitli X11 paketlerini gözden geçirmiş (libpciaccess, pixman, vs…)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Playground’daki Koffice paketine de göz atmış ve paket içeriği ile ilgili sadeleştirme yapmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ntfsprogs paketinin bakımını yapmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Depolar arasındaki paketler uyumsuzluğuna tekrar göz atıp gereken düzeltmeleri yapmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kde’ye bir yama hazırlamış (klavye ayarlarını Xorg sunucusundan düzgün almıyordu)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Gnupng  paketinin bakımını yapmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Benim review’e koydum bir pakete göz atmış (vim-plugin-pisi)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Yine depoya aldığım bir pakete göz atıp gereken değişiklikeri yapmış (keepassx)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Wine paketini güncellemiş(32bit tabi, çünkü hala henüz ortada 64 bit yok)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Wine 64 bit paketi için deneysel bir actions.py hazırlamış&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xorg sunucusunun bakımını yapmış, eski yamaları atmış, yeni olanları eklemiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Yine kritik bir paket olan Mesa’ya göz atmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Gramps adı altındaki paketin anlatımını düzeltmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Flashplugin’i güncellemiş, kritik bir güvenlik açığını düzeltildi bu sayede (sevgililer günü bugün bu arada:))&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kurumsal 2’deki Kde başlangıçta takılıp kalıyordu gidip baştan bir yama hazırlamış, bunu düzeltmiş&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Virtualbox paketine bakmış tekrardan, önemli bir hatayı düzeltmiş&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Şu an şubat ayının ortasına gelmişiz…&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Ati kapalı kaynak kodlu sürücülere göz atmış tekrardan(güncelleme ve kod düzeltme)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Çizim tabletleri için gerekli olan bir paket olan xorg-input-wacom paketini güncellemiş tekrardan&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Pisi için bir yama hazırlayıp onu pakete sokmuş.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Gecelik iso’ların çıkması için gerekli altyapıyı hazırlamış (Gökçen Eraslan ile hatırladığım kadarıyla)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Farm için gerekli olan betikleri gözden geçirmiş tekrardan.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Buildtype özelliği için pisiye sayısız değişikliler almış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Pisi 2.4_alpha3 sürümünü çıkarmış. Bu paketle beraber lib32 için gerekli altyapıyı da başlatmış oldu. (Tarih 21.02.2011)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bundan sonra şubat ayının sonun kadar benim de içinde olduğum bir dizi lib32 paketlerinin bakımını yapmış. O zamanlar Skype isteği de ön plandaydı. Bu yüzden Skype için gerekli lib32 paketlerini oluşturmaya başladık. Benim hazırladığım paketleri oyun alanıma alıyordum, Fatih de bir yandan onların üzerinden geçiyordu. Bununla ilgili bir mail de geliştirici listesine atmışım:&lt;/p&gt;

&lt;p&gt;http://liste.pardus.org.tr/gelistirici/2011-February/055676.html&lt;/p&gt;

&lt;p&gt;Bu arada tarihlere dikkatlice bakınız. Fatih 21.02 tarihinde lib32 için gerekli altyapı paketini, yani Pisiyi depoya koymuş. İki gün sonra neredeyse  **yaklaşık 40 tane **lib32 paketi hazırlamıştık ve playground’a bekliyordu. O iki gün gerçekten inanılmaz işler yapmıştık.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mart (başlangıç)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;lib32 paketlerinden dolayı sıkan sorunları çözmeye zamanını ayırmış.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Nvidia ekran kartları sürücülerine göz atmış&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kısa kısa paket düzenlemeleri yapmış&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fatih sonra 04.03 gibi aramızdan ayrılıyor. Kendisi bir ay sonra Askere gidecekti. Tabi bununla bitmiyor, tatildeyken bile Pisi  2.4_alpha4’yı çıkartmış. Pisi’ye yeni buildfarm ile uyumlu olacak şekilde Delta desteğini de veriyor. Bunu yaptıktan sonra Nisan ayını başında zaten Askere teslim oluyor.  Üzerinde 300’e yakın paket vardı. Bunların bir çoğunu ben aldım. Bunların arasına Wine’de vardı. Bunu da hata kaydında belirtmişim (03.03).&lt;/p&gt;

&lt;p&gt;Fatih Aşıcı tarafında durum böyleydi. Kendisine Wine paketini Mart ayı başlangıçında sormuştum. Kendisi Askere teslim olmadan önce yapacağını dile getirmişti. Yani Nisan’ın başında gitmeden önce bakacağını söylemişti. Ben de haliyle Nisan’a kadar bekledim. Fakat işler istenildiği gibi gitmiyor. Hayat bu, demek ki Fatih de zaman bulamadı ve yapamadı.&lt;/p&gt;

&lt;p&gt;Nisan’dan sonra peki ben ne yaptım da Wine 64bit paketi hala depo’da yok ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nisan (1-30 arası)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Libva paketini yeni sürüme çekmişsim,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Libva güncellendiği için, çeşitli paketleri tekrar derlemek zorunda kalmışız (geliştirici listesinde &lt;a href=&quot;http://liste.pardus.org.tr/gelistirici/2011-March/055956.html&quot;&gt;bununla ilgili mail &lt;/a&gt;mevcut)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Sayısız paket güncellemeleri yapmışım:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;Texmaker&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Aria2&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Git&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Libtorrent&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Dos2unix&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Xorg-sgml-doctools&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chromium’u (ayda 3-4 kere oluyor bu güncelleme)&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Xscreensaver&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Flashplugin&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Intel ekran kartı sürücüleri&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;…&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Yeni ati kapalı kaynak kodlu sürücülere göz atmışım&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ati sürücüleri ile ilgili değişiklikleri depoya yansıtmışım.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xorg-app’deki bir güvenlik açığını kapatmışız&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Çomak’da &lt;strong&gt;Gnome3&lt;/strong&gt; çıkabilir düşüncesi ile xkeyboard-config’u güncellemişsim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Xkeyboard’un düzgün çalışabilmesi için libX11’i de güncellemişsim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bugzilla’daki Licq vardı onunla ilgili oyun alanımda Licq paketini hazırladım&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Udev’deki 32 bit kütüphaneleri 64 bit olanları eziyordu onu düzeltmişsim (ilgili &lt;a href=&quot;http://liste.pardus.org.tr/gelistirici/2011-April/056037.html&quot;&gt;geliştirici maili&lt;/a&gt;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Önemli bir bileşen olan libdrm’i paketine bakmışsım&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Nvidia kapalı kaynak sürücülerini güncellemişsim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Geleneksel Vim yamaları eklemişim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bir takım bileşenleri üzerime almışım&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Nvidia açık kaynak kodlu sürücüleri güncellemişsim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mutt’daki bir güvenlik açığını kapatmışsım&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Phoronix test-suite’nin çalışabilmesi için Php’yi değişiklik yapmışız&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bir takım Nvidia reverse engineering uygulamalarını oyun alanıma yüklemişsim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Virtualbox ailesini güncellemişsim&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Wine 64bit için gerekli olabilecek lib32 paketlerini depoya almışım (freeglut, glew, mesa)&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Emre Erenoğlu’nun katkılarıyla daha fazla lib32 paketleri almışız depoya (libXft, libXtst, libXpm, libXinerama, libXcursor)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kde randr modülüni devreye sokmuşum ve baştan yeniden değiştirerek yazmışsım (güzel bir özellik oldu bu)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bunu dışında Bugzilla’daki hatalar da var elbet (sağ üst köşedeki noktalar gibi). Bunlar da haliyle zaman alıyor. Ha bugün ha yarın derken hala Wine ile uğraşamadım haliyle. Şimdi peki ne durumdayız ?&lt;/p&gt;

&lt;p&gt;Yaklaşık bir haftadır Wine ve paket bağımlılıkları ile ilgileniyorum. Wine için mesa-32bit bunun bir önemli parçasıydı. Onu düzgün bir şekilde yaptıktan sonra çeşitli farklı paketler de mevcut yapmamız gerekiyor. Nihayetinde yerelimde Wine 64bit düzgün bir şekilde çalışmayı başardım :) Hatta deneme olarak Winamp uygulamasını indirip denedik Ofiste, sesi de güzelce veriyor (&lt;em&gt;şu ünlü koyun sesi)&lt;/em&gt;. Örnek ekran görüntüsü:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://arsln.org/wp-content/uploads/wine64_pardus2011.png&quot;&gt;&lt;img src=&quot;http://arsln.org/wp-content/uploads/wine64_pardus2011-300x168.png&quot; alt=&quot;Wine 64 bit Pardus 2011 altında&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Peki depo’ya ne zaman girecek ?&lt;/p&gt;

&lt;p&gt;Wine henüz tam bitmedi. Açıkcası bir çok pakete ihtiyacı var hala. Bunlar şu şekilde:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;libxinerama-32bit  (depoda mevcut)&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;libxcomposite-32bit (depoda mevcut)&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;ldbus-32bit (depoda mevcut)&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libgnutls-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libsane-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libgphoto2-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;liblcms-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;gstreamer-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;liboss-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libcups-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libgsm-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libtiff-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libmpg123-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libopenal-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libldap-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libxml2-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;libXslt-32bit (depoda var)&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;openssl-32bit (bununla bugün uğraşıyordum bitmedi henüz)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libjpeg-32bit&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;libpng-32bit&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yukarıdaki paketlerin çoğunun bizdeki ismi farklı. Bazıları olmayabilir de depoda. Ama Wine’in düzgünce çalışabilmesi için bunların lib32 paketine ihtiyacımız var. Bazı paketlerin lib32 paketini oluşturmak kolay olsa da, bazıları çok zaman alabiliyor. O yüzden hani sizlere iki güne sonra hazır diyemiyorum. Paketlerin çoğunu bilmiyorum bile ne yaptığını, benim üzerime olmayan paketler.&lt;/p&gt;

&lt;p&gt;Pardus’taki Wine 64bit’in hali bu durumda. Umarım en azından kafanızda bazı şeyler şekillenmiştir diye düşünüyorum. Hatırlarsanız, geliştiricileri bir hatayı iki ayda bir çözüyor demiştiniz ve &lt;a href=&quot;http://arsln.org/bir-hata-kovalamaca-hikayesi/&quot;&gt;bununla ilgili uzun bir yazı yazmıştım&lt;/a&gt;.  “20-30 tane geliştirici var, bir Wine’i mi yapamıyorlar” diyenler de oldu, bu yazıyı okuduktan sonra belki farklı düşünen olmuştur, yok değişmediyse o zaman kendimizi hala anlatacağız demektir.&lt;/p&gt;

&lt;p&gt;Örneğin yukarıda saydıklarımın arasında, ne kadarını kod geliştirmeye ayırdık sizce ? Ben kendi adıma konuşursam çok ama çok az. Gönül isterdi ki, paketlerin sayısı az olsun, bugzilla’daki hatalar az olsun, kullanıcıların isteklerini yerine getirelim, yeni teknolojiler geliştirelim. İnanın &lt;strong&gt;sizler ne kadar istiyorsanız bizler de istiyoruz&lt;/strong&gt; bunları yapmayı. Ama buraya kadar okuyup geldiyseniz, yukarıda Fatih Aşıcı’dan verdiğim örnekleri de göz önüne alırsanız, ne durumda olduğumuzu herhalde çok iyi anlayacaksınızdır.  Akşamları eve gelince, hafta sonları bile boş vakitlerinde sizlere zaman ayıran insanlar bunlar.&lt;/p&gt;

&lt;p&gt;Bu sıkıntıyı gidermek için çözümlerden bir tanesi geliştirici sayısını artırmak. Buraya kadar okumuşsanız, “&lt;strong&gt;Madem böyle bundan sonra ben de Pardus için bir şeyler yapmak istiyorum&lt;/strong&gt;” diyorsanız şimdi tam zamanı. Bugzilla’daki hatalara bakın, yeni paket isteklerindeki paketlerle ilgilenin, geliştirici adaylığına başvurun, ben güzel yazı yazarım diyorsanız güzel belgeler yazın, çeviri yapın, Pardus’u dünya’ya tanıtın.&lt;/p&gt;

&lt;p&gt;Siz var olduğunuz sürece biz de bu işi yapıyor olacağız. Gelin hep beraber güzel işlere imza atalım. Sizden tek isteğim bu.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>X.org bir sunucu mu yoksa istemci midir ? </title>
		<link href="http://blog.arsln.org/x-org-bir-sunucu-mu-yoksa-istemci-midir/"/>
        <updated>2011-04-25T21:24:34+00:00</updated>
		<id>http://blog.arsln.org/x-org-bir-sunucu-mu-yoksa-istemci-midir</id>
        <content type="html">&lt;p&gt;Bildiğiniz gibi** X sunucusu** Linux gibi işletim sistemleri için gerekli grafik ve ekran yapılandırmasını sunar. Bunu da kendine has benzersiz bir sunucu ve istemci modeli ile yapar. Örneğin &lt;strong&gt;Pardus 2011&lt;/strong&gt;‘i başlattınız, gerekli olan tüm servisler başladıktan sonra X sunucusu başlar.  X sunucusu gelen bağlantıları bekler. Tek bir bilgisayar kullandığınız için istemci de aynı bilgisayarda çalışmaya başlar. Parolanızı girerseniz ve karşınıza masaüstü ekranınız gelir.&lt;/p&gt;

&lt;p&gt;Bundan sonra X sunucusu arka planda çalışır vaziyete size gerekli olan tüm işlemlerinizi yaptırır.  X sunucusu hiç bir zaman bir uygulamanın nasıl &lt;strong&gt;gözükeceği&lt;/strong&gt; veya nasıl &lt;strong&gt;çalışacağı&lt;/strong&gt; hakkında bilgiye sahip değildir. Uygulamanın görüntüsünü KDE, GNOME gibi büyük masaüstü ortamlarının kullandıkları araçlar belirler (&lt;strong&gt;Qt, Gtk+ gibi&lt;/strong&gt;). Çalıştıracağınız her uygulama aslında bir istemcidir ve X sunucusuna bağlanır.  Bazen bir istemci, X sunucusuna bağlı başka bir istemciye bağlanabilir (&lt;strong&gt;Xnest, Xzephyr, gibi&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Bu model genel olarak çoğu zaman karmaşık geliyor insanlar. Bu yüzden X.org mail listelerinde bunlarla ilgili sıkca tartışma olur. Geçenlerde yine bununla ilgili bir tartışma çıktı.  Bahsi geçen sunucu ve istemci modeli hakkında ise X.org geliştiricilerinden (aynı zamanda Fedora geliştiricisi) olan &lt;strong&gt;Peter Hutterer&lt;/strong&gt;‘in güzel bir yanıtı var:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I never understood why people claim that one must rethink server/client when it comes to X. X server and client notion are _not&lt;/em&gt; reversed.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The X server sits there, waiting for connections.
Just like FTP servers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The X server provides auth mechanisms, restricting which clients can connect.
Just like FTP servers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Once a client connects, the server provides a specific protocol to communicate.
Just like FTP servers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The protocol allows access to certain resources local to the machine.
Just like FTP servers.
(in the FTP server’s case the resources are files, in the X server’s case they are hardware resources)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The clients can upload data (e.g. pixel data) and download data (e.g. eventsor state information).
Just like FTP servers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;When a client disconnects, the server continues to serve the other clients.
Just like FTP servers.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A client can connect to multiple servers, uploading data and downloading data to all of them.
Just like FTP clients.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;When the server shuts down, all clients are disconnected, but only from this server. Connections to other servers stay open and active.
Just like FTP clients.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;_
Tartışmanının devamını &lt;a href=&quot;http://lists.freedesktop.org/archives/xorg/2011-April/052877.html&quot;&gt;X.org listesinden&lt;/a&gt; takip edebilirsiniz. Genel olarak X hakkında merak ettiklerinizi bu &lt;a href=&quot;http://lists.freedesktop.org/mailman/listinfo/xorg&quot;&gt;listeye&lt;/a&gt; üye olarak öğrenebilirsiniz.&lt;/p&gt;

</content>
    </entry>
    
    <entry>
        <title>Altını çizdiklerim - Pragmatic Thinking and Learning</title>
		<link href="http://blog.arsln.org/altini-cizdiklerim-pragmatic-thinking-and-learning/"/>
        <updated>2011-04-17T22:32:08+00:00</updated>
		<id>http://blog.arsln.org/altini-cizdiklerim-pragmatic-thinking-and-learning</id>
        <content type="html">&lt;p&gt;&lt;img src=&quot;http://arsln.org/wp-content/uploads/ptal_medium.jpeg&quot; alt=&quot;&quot; /&gt;Bugün başlıktaki (&lt;a href=&quot;http://www.amazon.com/Pragmatic-Thinking-Learning-Refactor-Programmers/dp/1934356050&quot;&gt;Pragmatic Thinking and Learning&lt;/a&gt;) kitabı sonunda bitirmeye başladım. Nedense bu kitap haddinden fazla uzun sürdü. Yazar’ın programcı kimliğinden dolayı bu kitap biraz da yazılım ile uğraşanlara göre yazılmış. Örnekler çoğunlukla yazılım dünyasındaki &lt;strong&gt;terimler&lt;/strong&gt; ile verilmiş. Yazılım sevenler için kişisel gelişim kitabı diyebiliriz kısaca. Fakat kitap bir &lt;a href=&quot;http://37signals.com/rework/&quot;&gt;Rework&lt;/a&gt; gibi akıcı değil. Kitap sıkıcı oluyor bazı konularda.&lt;/p&gt;

&lt;p&gt;Şu an karşımda birileri olsaydı heyecanlı heyecanlı anlatmaya çalışırdım kitabın içeriğini :) Fakat konu yazı olunca malesef o “&lt;strong&gt;duyguyu&lt;/strong&gt;” tam olarak aktarıyorum. Yine de kitapta iki konu ilgimi çekti:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Her daim en kötü olmak gerekiyor. Bir grupta her zaman kötü isen, diğerleri senden daha iyidir. Daha iyi olması demek kendini geliştirmek demek, kendine bir şeyler katmak demektir. Eğer bir grupta en iyi olduysan, başka bir grup seçme vakti geldi demektir.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hata yapmak gerekiyor! Hata yapmak demek, bir şeyler yapmak anlamına geliyor. Eğer hata yapmıyorsan hiç bir şey yapmıyorsundur. Bir şey yapmak, hiç bir şeyi yapmamaktan daha iyidir.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bunun dışında kitapta genel olarak daha iyi &lt;strong&gt;çalışma&lt;/strong&gt; ve &lt;strong&gt;yaşama&lt;/strong&gt; hakkında ipucular mevcut. Kitap içeriğinden ziyade altını cizdiğim notları paylaşmayı uygun gördüm. Bundan sonra da okuduğum kitaplarla ilgili bu tarzda notlar paylaşmayı düşünüyorum. &lt;strong&gt;Altını çizdiklerim&lt;/strong&gt; şu şekilde:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The man with his pickled fish has set down one truth and has recorded in his experience many lies. The fish is not that color, that texture, that dead, nor does he smell that way.  John Steinbeck, The Sea of Cortez&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Even with volatile static RAM, data sticks around as long as power is applied. It turns out your brain doesn’t have static RAM, but instead it has dynamic RAM that needs constant refreshing or it fades. That means even riding a bicycle isn’t something you can take for granted. It means you can unlearn anything. It means no matter how horrible or wonderful some experience is, you can lose it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“The mind is its own place and, in itself, can make a Heaven of Hell, a Hell of Heaven.” —John Milton, Paradise Lost.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The fact that we live at the bottom of a deep gravity well, on the surface of a gas-covered planet going around a nuclear fireball 90 million miles away and think this to be normal is obviously some indication of how skewed our perspective tends to be.  Douglas Adams, The Salmon of Doubt&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;When you plant lettuce, if it does not grow well, you don’t blame the lettuce. You look for reasons it is not doing well. It may need fertilizer or more water or less sun. You never blame the lettuce. Thich Nhat Hanh&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Give yourself permission to fail; it’s the path to success.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Yet your body reacts as if you’re in real danger. And it doesn’t have to be a movie; a book would work as well. It doesn’t even have to be happening in the present moment. Remember that really mean bully in grade school or that awful teacher? First love? These are just memories, but the remembering can cause appropriate physical responses. It turns out that your brain isn’t very good at discriminating between input sources. Real-time sensor data, memories of past events, and even imagined circumstances that haven’t happened all result in the same physiological responses&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;First, let’s look at some practical examples. You may have noticed that if you’re at a conference, or some sort of get-together where you’re surrounded by more advanced practitioners, that your own ability increases. Maybe you can speak more articulately or argue your point a little better. Maybe the fact that you even have a point occurs to you. Legendary jazz guitarist Pat Metheny takes this idea one step further and offers this advice: “Always be the worst guy in every band you’re in. If you’re the best guy there, you need to be in a different band. And I think that works for almost everything that’s out there as well.”&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Remember the danger doesn’t lie in doing something wrong; it lies in doing nothing at all. Don’t be afraid to make mistakes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Unless we sense some new and novel attribute, we zone out. Leonardo da Vinci complained about this 600 years ago: “People look without seeing, hear without listening, eat without awareness of taste, touch without feeling, and talk without thinking.”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</content>
    </entry>
    
    <entry>
        <title>Mutt kullanma(ma)k için nedenler</title>
		<link href="http://blog.arsln.org/mutt-kullanmamak-icin-nedenler/"/>
        <updated>2011-03-20T23:22:58+00:00</updated>
		<id>http://blog.arsln.org/mutt-kullanmamak-icin-nedenler</id>
        <content type="html">&lt;p&gt;E-mail istemcisi olarak &lt;a href=&quot;http://www.mutt.org&quot;&gt;Mutt&lt;/a&gt; kullanıyorum. &lt;a href=&quot;http://lists.debian.org/debian-user-turkish/2005/06/msg00067.html&quot;&gt;Eskiden&lt;/a&gt; &lt;a href=&quot;http://www.linuxnet.com.tr/modules.php?name=Tutorials&amp;amp;op=viewtut&amp;amp;id=59&quot;&gt;kalma&lt;/a&gt; bir bağım var, o zamandan beri severim. Ama sevmemek için de çok nedenim var. Nedenler ise şunlar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Diğer e-posta istemcilerinde, başka birinin yazdığı mesaj’da bir kısmını seçip, o kısma cevap yazabiliyorsun. Mutt’da var mı ? Tabi ki yok. Düz “_cevap ve_r” kısmı var o kadar&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://svn.pardus.org.tr/pardus/2011/devel/network/mail/mutt/files/&quot;&gt;Sidebar yaması&lt;/a&gt; olmasına rağmen, klasörden klasöre geçmek işkence oluyor. Benim gibi 100’den falza listeye üye iseniz zaten yandınız&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ayrı bir pencere açamıyorsunuz (Vimdeki :vs, :vnew gibi). Ayrı bir terminal açıp, mutt’u salt okunur olarak açmanız gerekiyor. Bir sürü iş anlayacağınız.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bir işlemi iptal etmek için garip bir kombinasyon olan** ctrl+g** yapmanız gerekiyor. &lt;strong&gt;ctrl+c&lt;/strong&gt; yapmayın, doğrudan uygulama kapanıyor&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Eski üsül dikey pencere görünümü var sadece. Yeni nesil geniş ekranlarda bir sürü boş yer israf ediliyor&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bu bir dejavantaj mı bilmiyorum, ama kullanılabilinir bir hale getirmek için yüzlerce döküman okumanız ve bir hafta zaman ayırmanız gerekiyor(elbette ki 1-2 saat’de çalışır bir biçime getirebilirsiniz, ama verimli bir hale gelmezi uzun süre alır)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bağlantıları doğrudan açamıyorsunuz ek bir uygulama kurmanız gerekiyor, e-posta adreslerini otomatik kaydetmez ekstra bir uygulama gerekiyor, resimleri doğrudan açmaz ekstra bir uygulama gerekiyor, vs …&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Cevap yazarken ayrı bir pencere açmadığı için kim ne yazmış, başkası ne yazmış, ne demiş okuyamıyorsunuz.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bu sebeplerden dolayı ara sıra kmail,sylpheed ikilisinden birine geçiyorum. Kısa bir süre sonra geri dönüyorum Mutt’a. Nedenleri ise şunlar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Konsoldan çalıştığı için aşırı hızlı. İstediğimi zaman kapatıp açıyorum. X’e gerek yok haliyle her durumda çalışıyor&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Kısa yolları bilirseniz çok ama çok hızlı olabiliyorsunuz. Fareyi hiç kullanmadığınız için zaten başta 1-0 öndesiniz&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Tıpkı vim’deki gibi &lt;strong&gt;.muttrc&lt;/strong&gt; adında dosyanız var, istediğiniz bilgisayarda sadece bu dosyayı kopyalıyorsunuz ve tüm ayarlarınız anında sizinle beraber oluyor.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Vim’deki gibi binlerce kişiselleştirme seçenekleri mevcut&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Her mesajı birer “&lt;strong&gt;pipe&lt;/strong&gt;“‘den geçirebilirsiniz. Özellikle herhangi bir mesajı mıncıklamak, parçalamak, kurcalamak istiyorsanız süper bir özellik&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Bu diğer e-posta istemcilerinde de var, ama Mutt bu konuda çok daha başarılı. Cevaplarken Vim kullanıyorsunuz.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Çok güzel arama özelliğine sahip. Mesela “&lt;strong&gt;~b örnek ~F&lt;/strong&gt;” ile sadece işaretli olan mesajlar içinde “örnek” kelimesini arıyor ve bulduklarını gösteriyor.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Temel sorun yeni nesil kullanıcı arayüzleri ile ilgili. Vim mesela eski olmasına rağmen, geliştirici sayesinde hala çeşitli özellikler sayesinde(sekme özelliği mesela) popülerliğini koruyor. Ama aynı davranışı Mutt’da göremiyoruz. Böyle arada kaldım sanki, çok sevmeme rağmen günden güne beni sinir krizine sokuyor bu meret. Dertliyim nitekim ahali :)&lt;/p&gt;
</content>
    </entry>
    
</feed>
