<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kayıp Şehir / Serkan Kenar</title>
	<atom:link href="http://serkan.feyvi.org/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://serkan.feyvi.org/blog</link>
	<description>günlük tadında yazılar..</description>
	<lastBuildDate>Thu, 12 Aug 2010 10:02:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Django 1.2 HtmlHelp (CHM)</title>
		<link>http://serkan.feyvi.org/blog/django-1-2-htmlhelp-chm.html</link>
		<comments>http://serkan.feyvi.org/blog/django-1-2-htmlhelp-chm.html#comments</comments>
		<pubDate>Thu, 12 Aug 2010 10:02:01 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=330</guid>
		<description><![CDATA[I&#8217;m using Notepad++ for writing Django code. I&#8217;ve recently found Language Help plugin for Notepad++, which brings the context help found on many IDEs. Ctrl-F1 on a keyword you want to get help, and then corresponding help page is shown. I thought it would be good to have this with Django. Luckily, Django comes with [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m using Notepad++ for writing <a href="http://www.djangoproject.com">Django</a> code. I&#8217;ve recently found <a href="http://sites.google.com/site/fstellari2/npp_plugins">Language Help plugin for Notepad++</a>, which brings the context help found on many IDEs. Ctrl-F1 on a keyword you want to get help, and then corresponding help page is shown. I thought it would be good to have this with Django.</p>
<p>Luckily, Django comes with full documentation and uses <a href="http://sphinx.pocoo.org/">Sphinx</a>. Unfortunately though, they don&#8217;t provide compiled CHM files on the download site. You have to download the django-version-tar.gz, install sphinx on your system, fix a couple of bugs in the layout and themes, generate htmlhelp project, install HTML Help Workshop, and only then you can have your baked CHM file. I&#8217;ve been there..</p>
<p>So, since I&#8217;ve already compiled the file, put it somewhere here.</p>
<p>You can download the Django 1.2 Documentation CHM file here: <a href="http://serkan.feyvi.org/blog/wp-content/uploads/2010/08/Djangodoc-1.2.chm_.gz">Djangodoc-1.2.chm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/django-1-2-htmlhelp-chm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embedding Picasa Rotation info to Image Exif Headers</title>
		<link>http://serkan.feyvi.org/blog/embedding-picasa-rotation-info-to-image-exif-headers.html</link>
		<comments>http://serkan.feyvi.org/blog/embedding-picasa-rotation-info-to-image-exif-headers.html#comments</comments>
		<pubDate>Thu, 08 Jul 2010 08:17:24 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Fotoğraf]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=324</guid>
		<description><![CDATA[I have a camera without an orientation sensor. So I have used to manually fixing the photos using Picasa. Picasa does not modify the original photos, but save the rotation info (and other modifications) into a hidden file &#8220;.picasa.ini&#8221; in the same folder. If you move this file together with your album, and use Picasa [...]]]></description>
			<content:encoded><![CDATA[<p>I have a camera without an orientation sensor. So I have used to manually fixing the photos using Picasa. Picasa does not modify the original photos, but save the rotation info (and other modifications) into a hidden file &#8220;.picasa.ini&#8221; in the same folder. If you move this file together with your album, and use Picasa Viewer to view photos, everything works fine..</p>
<p>But this image rotation problem is already solved with <a href="http://exif.org">Exif</a>. Exif contains an orientation property, which can be used to correctly display the photos on a digital viewer. New cameras, and viewers support the use of this property. So I thought it would be better if I can embed the Picasa rotation information into the Exif headers of photos.</p>
<p>After trying several tools, (even one of them doubling the size of the original photo, while modifying the Exif property ??!) I have settled on using <a href="http://www.exiv2.org/">Exiv2</a>.</p>
<p>Then I coded the following simple, short Python script to embed Picasa rotation information to photos:</p>
<pre class="brush: python;">
# Embed Picasa rotation information to EXIF Image Orientation tag.
# Uses Exiv2 command line utility from http://www.exiv2.org/.
#
# Serkan Kenar, 2010, Ankara.

import subprocess

lines = open(&quot;.picasa.ini&quot;)

filename = None

rot2ori = { 0: 1,
            1: 6,    # left
            2: 3,    # bottom
            3: 8 }   # right

for line in lines:
    if line[0] == '[':
        filename = line.strip(&quot;[]\n&quot;)
        continue
    (action,param) = line.split(&quot;=&quot;)
    if action == &quot;rotate&quot;:
        yon = int(param[7:8])
        try:
            subprocess.call(['exiv2',
                             '-k',   # preserve timestamps
                             '-v',
                             '-Mset Exif.Image.Orientation %d' % rot2ori[yon],
                             filename])
        except OSError:
            print &quot;Exiv2 is not found on the path!&quot;
            exit
</pre>
<p>You should run this script in photos folder with a &#8220;.picasa.ini&#8221; file. Make sure that exiv2 command-line utility is in your path.</p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/embedding-picasa-rotation-info-to-image-exif-headers.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>re-Master</title>
		<link>http://serkan.feyvi.org/blog/re-master.html</link>
		<comments>http://serkan.feyvi.org/blog/re-master.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 00:37:26 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Hayat]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=318</guid>
		<description><![CDATA[Durum yazılarımdan takip edenler elbet biliyor, 10 Aralık 2009, 2005&#8242;ten beri devam ettiğim maceranın son noktasıydı.. Master&#8217;dan mezun oldum. Bunu bugün yazıyor olmamın sebebi de, 4 Temmuz&#8217;daki ODTÜ Diploma Töreni.. Tez yazmak, yapmaktan çok daha zor bir iş olduğu için, bu yolda bana destek veren akademik danışmanıma, eşime ve dostlarıma teşekkür derim. Bunu aslında teze [...]]]></description>
			<content:encoded><![CDATA[<p>Durum yazılarımdan takip edenler elbet biliyor, 10 Aralık 2009, 2005&#8242;ten beri devam ettiğim maceranın son noktasıydı.. Master&#8217;dan mezun oldum. Bunu bugün yazıyor olmamın sebebi de, 4 Temmuz&#8217;daki ODTÜ Diploma Töreni..</p>
<p>Tez yazmak, yapmaktan çok daha zor bir iş olduğu için, bu yolda bana destek veren akademik danışmanıma, eşime ve dostlarıma teşekkür derim. Bunu aslında <a href="http://tez2.yok.gov.tr/tezvt/liste.php?-skip=0&amp;-max=10&amp;AdSoyad==Serkan%20Kenar">teze</a> de yazmıştım, ancak buradan da tekrarlamak istedim.</p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/re-master.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Platon Bir Gün Kolunda Bir Ornitorenkle Bara Girer</title>
		<link>http://serkan.feyvi.org/blog/platon-bir-gun-kolunda-bir-ornitorenkle-bara-girer.html</link>
		<comments>http://serkan.feyvi.org/blog/platon-bir-gun-kolunda-bir-ornitorenkle-bara-girer.html#comments</comments>
		<pubDate>Tue, 08 Jun 2010 23:04:26 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Kitap]]></category>
		<category><![CDATA[felsefe]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=314</guid>
		<description><![CDATA[En sevdiğin hayvan hangisi diye sorduklarında bir cevabım var, isminden ötürü: Ornitorenk hayvanı.. Böyle deyince kişilik testleri vs., patlıyor bir yerde. Bir de keyfine düşkün bir hayvan, ondan severim.. Kitapçıda görür görmez,kitabı hemen attım sepete. Aslında ingizlizcesinde bir aliterasyon yapılmış (Plato and a Platypus walk into a bar&#8230;) ancak türkçeye çevirince o aliterasyon kaybolmuş. Kitap [...]]]></description>
			<content:encoded><![CDATA[<p>En sevdiğin hayvan hangisi diye sorduklarında bir cevabım var, isminden ötürü: Ornitorenk hayvanı.. Böyle deyince kişilik testleri vs., patlıyor bir yerde. Bir de keyfine düşkün bir hayvan, ondan severim.. Kitapçıda görür görmez,kitabı hemen attım sepete.</p>
<p>Aslında ingizlizcesinde bir aliterasyon yapılmış (Plato and a Platypus walk into a bar&#8230;) ancak türkçeye çevirince o aliterasyon kaybolmuş. Kitap fıkralar eşliğinden sıfırdan başlayıp, felsefenin belli başlı konularına değiniyor: mantık, metafizik,din felsefesi, varlık, varoluşçuluk, kahroluşçuluk, vs.. Kitap çok akıcı, çok eğlenceli fıkralar var. Sıkılmadan okunuyor ki çoğu felsefe kitabı için zordur bu.. Bunu da zaten bir felsefeye giriş olarak okumak da fayda var.. Tam bir boş zaman kitabı, tavsiye ederim.</p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/platon-bir-gun-kolunda-bir-ornitorenkle-bara-girer.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dinamik Bağlanma (Dynamic Linking) ve Hata Çözümleme</title>
		<link>http://serkan.feyvi.org/blog/dinamik-baglanma-dynamic-linking-ve-hata-cozumleme.html</link>
		<comments>http://serkan.feyvi.org/blog/dinamik-baglanma-dynamic-linking-ve-hata-cozumleme.html#comments</comments>
		<pubDate>Mon, 29 Jun 2009 08:43:08 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[dinamik bağlanma]]></category>
		<category><![CDATA[dynamic linking]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=304</guid>
		<description><![CDATA[Önceki yazımda verdiğim örnek programı yazının başlığından da gelen ipucuyla bir iki arkadaşım çözmeyi başardı. Ama sorun kokeksibir&#8217;in yorumundakinden daha farklı. (Onu da anlatacağım ama sonra) Programı derleyip çalıştırdığınızda 1022 defa &#8220;Unable to connect to database&#8221; hatası vererek sonlandığını göreceksiniz. (Denemeyenler şimdi ortaya çıkacak ) İlginç, hiç bir yerde döngü yok aslında. (İlk ipucu, iç [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Fonksiyonlara isim vermek sorumluluk ister" href="http://serkan.feyvi.org/blog/fonksiyonlara-isim-vermek-sorumluluk-ister.html">Önceki yazımda</a> verdiğim örnek programı yazının başlığından da gelen ipucuyla bir iki arkadaşım çözmeyi başardı. Ama sorun kokeksibir&#8217;in yorumundakinden daha farklı. (Onu da anlatacağım ama sonra) Programı derleyip çalıştırdığınızda 1022 defa &#8220;Unable to connect to database&#8221; hatası vererek sonlandığını göreceksiniz. (Denemeyenler şimdi ortaya çıkacak <img src='http://serkan.feyvi.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) İlginç, hiç bir yerde döngü yok aslında. (İlk ipucu, iç içe çağrılar var ama nerede?) Programa baktığımıza hiç sorun görünmüyor. Bir şeyleri yanlış yapıp yapmadığımızı anlamak için yine de bir iki sefer kodu kontrol ediyoruz.</p>
<p>Sonucun değişmemesi, çalışma zamanında yanlış giden bir şeylerin olduğu konusunda şüphelendiriyor. Hemen GDB&#8217;yi çalıştırıyoruz.</p>
<pre><code>
</code>	<code>gdb ./mysql_bug
</code>	<code>break connect
</code></pre>
<p>connect() metodunun çıktısını gördüğümüzden oraya bir breakpoint ekledim. run diyerek çalıştırıyoruz ve breakpoint&#8217;e takılıyor. Adım adım işletelim.</p>
<pre>	next
	n
	&lt;enter&gt;</pre>
<p>O da ne?? Tekrar connect()&#8217;e geldi. hmm, bt ile bir stack trace alalım.</p>
<pre>	(gdb) bt
	#0  connect () at mysql_bug.c:16
	#1  0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#2  0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#3  0x080485f0 in connect () at mysql_bug.c:16
	#4  0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#5  0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#6  0x080485f0 in connect () at mysql_bug.c:16
	#7  0x08048644 in main () at mysql_bug.c:34</pre>
<p>İlginç bir şekilde mysql_real_connect()&#8217;ten sonra, tekrar connect() metodumuza geliyor. MySQL kütüphanesi bizim yazdığımız bir fonksiyonu neden çağırsın? Artık mesele anlaşılmış gibi olsa da biraz daha debug etmeye devam edelim. &#8220;ignore 1 1010&#8243; komutuyla GDB&#8217;nin breakpoint&#8217;imizi 1010 kez gözardı etmesini sağlıyor ve devam (cont) ediyoruz. Tekrar breakpoint&#8217;e takıldığımızda bir bt komutuna bakın.. Artık problem daha da kendini belli ediyor. Tüm stack tekrar tekrar çağırılmaktan dolmuş:</p>
<pre>	#3034 0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#3035 0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#3036 0x080485f0 in connect () at mysql_bug.c:16
	#3037 0xb7e6f766 in my_connect () from /usr/lib/libmysqlclient.so.15
	#3038 0xb7e70338 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
	#3039 0x080485f0 in connect () at mysql_bug.c:16
	---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
	#3040 0x08048644 in main () at mysql_bug.c:34</pre>
<h3>Dinamik Bağlanma (Dynamic Linking)</h3>
<p>Artık bulmacanın cevabını verebiliriz. Bir şekilde fonksiyonumuza verdiğimiz masum &#8220;connect&#8221; ismi, MySQL kütüphanesinde de tanımlanmış ve mysql_real_connect() fonksiyonu tarafından kullanılıyor. Biz mysql_real_connect&#8217;i çağırdıkça o da bizi tekrar çağırıyor. Bu iç içe durum 1022 kez tekrarladıktan sonra mysql_real_connect hata dönüyor ve o ana kadar çağırılan tüm metodlar hata vererek tek tek çıkıyor.</p>
<p>Peki, bizim kendi yazdığımız bir fonksiyon nasıl olur da MySQL kütüphanesi tarafından çağırılabilir? (Bence esas yanıtlanması gereken soru bu, yoksa problemi deneme yanılma yaparak çözmek ve bir daha arkanıza bakmadan kaçmak mümkün. Ama gerçek bir coder kaçmaz, üzerine gider.)</p>
<p>Programımız MySQL kütüphanesine dinamik olarak bağlanarak derleniyor. Dinamik bağlanma yönteminde çalıştırılan program hangi kütüphaneleri kullandığını bir tabloda ve bu kütüphanede kullandığı metodları da başka bir tabloda tutar. Bu listeyi görmek için &#8220;ldd&#8221; komutunu kullanabiliriz. Mesela bizim programımız için ldd çıktısı şu şekilde olmaktadır:</p>
<pre>	# ldd mysql_bug</pre>
<pre>	linux-gate.so.1 =&gt;  (0xb8092000)
	libmysqlclient.so.15 =&gt; /usr/lib/libmysqlclient.so.15 (0xb7e96000)
	libc.so.6 =&gt; /lib/tls/i686/cmov/libc.so.6 (0xb7d33000)
	libpthread.so.0 =&gt; /lib/tls/i686/cmov/libpthread.so.0 (0xb7d19000)
	libcrypt.so.1 =&gt; /lib/tls/i686/cmov/libcrypt.so.1 (0xb7ce7000)
	libnsl.so.1 =&gt; /lib/tls/i686/cmov/libnsl.so.1 (0xb7cce000)
	libm.so.6 =&gt; /lib/tls/i686/cmov/libm.so.6 (0xb7ca8000)
	libz.so.1 =&gt; /lib/libz.so.1 (0xb7c92000)
	/lib/ld-linux.so.2 (0xb8093000)</pre>
<p>Programımızı çalıştırdığımızda Linux altında ld-linux.so kütüphanesi bu tablodaki kütüphaneleri bağlamaya başlar ve programımızı çalıştırır. (Aynı shell scriptlerinin ilk satırında hangi interpreter tarafından çalıştırılacağının yazması gibi, tüm çalıştırılabilir dosyaları da aslında ld-linux.so &#8220;çalıştırır&#8221;. /lib/ld-linux.so&#8217;ya programınızın adını parametre verin ve olanları görün <img src='http://serkan.feyvi.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) Öncelikle tüm kütüphaneler araştırılır. ld-linux, /etc/ld.so.config dosyasındaki sıralamaya göre kütüphaneleri arar. Bulunamayan bir kütüphane olduğunda program çalışması hata ile sonlanır (hatta teknik olarak hiç başlamaz..) Genelde aksi belirtilmedikçe fonksiyonlar tembel (LAZY) bağlanır. Yani bir fonksiyon kullanılmadıkça performans açısında bu arama/bağlama işlemi masraflı bir işlem olduğu için bağlanmaz.</p>
<p>Program çalışması sırasında daha önce bağlantısı sağlanmamış bir fonksiyon kullanımı ile karşılaşıldığında hemen bir dinamik bağlanma işlemi başlar. Aşağıdaki sırayla fonksiyon bulunmaya çalışılır:</p>
<ol>
<li>mevcut program içinde</li>
<li>LD_LIBRARY_PATH çevre değişkeniyle verilmiş olan kütüphaneler arasında</li>
<li>programın dinamik bağlı olduğu kütüphaneler arasında (ld.so.cache&#8217;e bakarak)</li>
<li>programın dinamik bağlı olduğu kütüphanelerin önce /lib&#8217;te sonra /usr/lib&#8217;te bulunanları arasında</li>
</ol>
<p>Gördüğümüz gibi, bilinmeyen bir fonksiyon hangi kütüphaneye ait olursa olsun, bu sırayla araştırılıyor. MySQL kütüphanesine ait mysql_real_connect fonksiyonu bağlandıktan sonra, çalıştırıldığında içindeki connect() fonksiyonu için arama başlatılıyor ve ilk sırada bizim programımız içinde bir aday bulunduğu için bağlantı burada sonlanıyor. Ondan sonrası yukarıda karşılaştığımız duruma neden oluyor.</p>
<p>Yukarda kendi programımızı debug edebilmiştik. Peki, bu dinamik bağlantı işlemini nasıl görebiliriz ve hataları tespit edebiliriz? Kütüphanenin çevre değişkenleri sayesinde çalışmasının etkilenebildiğini LD_LIBRARY_PATH&#8217;ten biliyoruz. Aynı şekilde LD_DEBUG çevre değişkeniyle de debug çıktısını açabilmek mümkün. Burada kullanılabilecek çeşitli parametreleri man ld-linux ile veya LD_DEBUG=help &lt;herhangi_bir_komut&gt; ile görebilirsiniz. Şimdilik LD_DEBUG=all ./mysql_bug diyerek programımızı çalıştıralım ve yukardaki paragrafta anlattığımız süreci canlı canlı görebilirsiniz. Çok uzun bir çıktı veriyor ama ilk satırlarını okumak fikri anlamanız açısından çok öğretici ve faydalı.</p>
<p>MySQL kütüphanesinde neden böyle çok yaygın kullanılabilir bir fonksiyon ismi vardır, kim bilir? Ama özensiz alınan kararlar maalesef böyle sorunlara neden olabiliyor. Fonksiyonlara, değişkenlere isim vermek sorumluluk ister.</p>
<p>Aslında bu yöntem çok yaygın olarak programların hafıza tahsis (memory allocation) hatalarını tespitte kullanılabilmekte. Örneğin malloc/realloc/free fonksiyonlarını yeniden tanımladığımız bir kütüphane yazarak, diğer programları test etmek mümkün (üstelik tekrar derlemek gerekmeksizin..)</p>
<p>Sonuç: Ufak gibi görünen bir sorun, üzerine düşüldüğünde farklı kavramların tekrar üzerinden geçmemizi ve hafiften paslanmış debugging marifetlerimizi hatırlamamızı sağladı.</p>
<p>Bunun üzerine fonksiyon ismini my_connect() yaparak tekrar denedim. Bahtsızlığın bu kadarı, bu seferde derleme aşamasında bir hatayla karşılaştım. <img src='http://serkan.feyvi.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Bu fonksiyon yine (!!) MySQL tarafından tanımlanmış. Başlık dosyalarında daha farklı tanımlandığı için daha derleme aşamasında hatayı görmek mümkün olabildi. Bu sorun kokeksibir&#8217;in yorumunda bahsettiği durum..) Neyse bunu geçebilmek en azından daha kolay.</p>
<p>Keyifli kodlamalar..</p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/dinamik-baglanma-dynamic-linking-ve-hata-cozumleme.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fonksiyonlara isim vermek sorumluluk ister..</title>
		<link>http://serkan.feyvi.org/blog/fonksiyonlara-isim-vermek-sorumluluk-ister.html</link>
		<comments>http://serkan.feyvi.org/blog/fonksiyonlara-isim-vermek-sorumluluk-ister.html#comments</comments>
		<pubDate>Tue, 09 Jun 2009 21:02:18 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=286</guid>
		<description><![CDATA[Aşağıdaki kodu çalıştırdığınızda hiç beklenmeyen bir sonuç çıkıyor. Sorunun ne olduğunu bulabilir misiniz? (Cevabı daha sonra..) Not: WordPress&#8217;in başlık dosyalarının noktasından önce boşluk koymasını engelleyemedim. Muhtemelen noktadan önce boşluk bırakmayanlardan olduğumu sanıyor. #include &#60;stdio .h&#62; #include &#60;stdlib .h&#62; #include &#60;mysql /mysql.h&#62; MYSQL *mysql; int connect() { mysql = mysql_init(NULL); if (mysql_real_connect(mysql, &#34;localhost&#34;, &#34;username&#34;, &#34;password&#34;, &#34;database&#34;, [...]]]></description>
			<content:encoded><![CDATA[<p>Aşağıdaki kodu çalıştırdığınızda hiç beklenmeyen bir sonuç çıkıyor. Sorunun ne olduğunu bulabilir misiniz? (Cevabı daha sonra..)</p>
<p>Not: WordPress&#8217;in başlık dosyalarının noktasından önce boşluk koymasını engelleyemedim. Muhtemelen noktadan önce boşluk bırakmayanlardan olduğumu sanıyor.</p>
<pre class="brush: cpp;">
#include &lt;stdio .h&gt;
#include &lt;stdlib .h&gt;
#include &lt;mysql /mysql.h&gt;

MYSQL *mysql;

int connect()
{
    mysql = mysql_init(NULL);
    if (mysql_real_connect(mysql,
               &quot;localhost&quot;,
               &quot;username&quot;,
               &quot;password&quot;,
               &quot;database&quot;,
               0,
               NULL,
               0
              ) == NULL)
    {
        fprintf(stderr, &quot;Unable to connect to database\n&quot;);
        return 0;
    }
    return 1;
}

int main()
{
    if (!connect()) return 1;
    // bir seyler...
    return 0;
}
</pre>
<p></mysql></stdlib></stdio></p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/fonksiyonlara-isim-vermek-sorumluluk-ister.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yeni Türkü konserinden</title>
		<link>http://serkan.feyvi.org/blog/yeni-turku-konserinden.html</link>
		<comments>http://serkan.feyvi.org/blog/yeni-turku-konserinden.html#comments</comments>
		<pubDate>Sat, 30 May 2009 23:24:47 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Fotoğraf]]></category>
		<category><![CDATA[Hayat]]></category>
		<category><![CDATA[fotoğraf]]></category>
		<category><![CDATA[Konser]]></category>
		<category><![CDATA[Yeni Türkü]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=282</guid>
		<description><![CDATA[Bu sene de şenlikteydik, ve yine bu sene de Yeni Türkü şenlikteydi.. Sahnenin arkasında, sahanın ortasındaydık. O konumdayken insan çok da iyi kareler yakalayamayacağını düşünüyor.. Ters ışığın avantajıyla, tripod olmamasına rağmen güzel kareler yakalamışım gibi.. Bunları çektikten sonra, bir yazıya denk geldim. &#8220;10 metre çapınızda en az 10 harika fotoğraf çekebilirsiniz&#8221; temalı bir çalışma ya [...]]]></description>
			<content:encoded><![CDATA[<p>Bu sene de şenlikteydik, ve yine bu sene de Yeni Türkü şenlikteydi.. Sahnenin arkasında, sahanın ortasındaydık. O konumdayken insan çok da iyi kareler yakalayamayacağını düşünüyor.. Ters ışığın avantajıyla, tripod olmamasına rağmen güzel kareler yakalamışım gibi..</p>
<p>Bunları çektikten sonra, bir yazıya denk geldim. &#8220;<a href="http://digital-photography-school.com/take-a-shot-within-10-meters-of-you-right-now-and-share-it-with-us">10 metre çapınızda en az 10 harika fotoğraf çekebilirsiniz</a>&#8221; temalı bir çalışma ya da yeni bir ilham kaynağı. Aklınıza gelen bir fikir yoksa, çevrenize bakmak için bir sebep. Aşağıdakiler de buna benziyor. O anda konserin ortasında yerimi değiştirmeye uğraşmadan, gördüğüm açıdan çektim..</p>
<p><a href="http://serkan.feyvi.org/blog/wp-content/photos/2009-ODTU.Yeni.Turku.konseri-6.JPG" title="2009-ODTU.Yeni.Turku.konseri-6" rel="lightbox"><img src="http://serkan.feyvi.org/blog/wp-content/photos/thumb_2009-ODTU.Yeni.Turku.konseri-6.JPG" class="pp_image" alt="2009-ODTU.Yeni.Turku.konseri-6" width="100" height="100" /></a> <a href="http://serkan.feyvi.org/blog/wp-content/photos/2009-ODTU.Yeni.Turku.konseri-5.JPG" title="2009-ODTU.Yeni.Turku.konseri-5" rel="lightbox"><img src="http://serkan.feyvi.org/blog/wp-content/photos/thumb_2009-ODTU.Yeni.Turku.konseri-5.JPG" class="pp_image" alt="2009-ODTU.Yeni.Turku.konseri-5" width="100" height="100" /></a> <a href="http://serkan.feyvi.org/blog/wp-content/photos/2009-ODTU.Yeni.Turku.konseri-4.JPG" title="2009-ODTU.Yeni.Turku.konseri-4" rel="lightbox"><img src="http://serkan.feyvi.org/blog/wp-content/photos/thumb_2009-ODTU.Yeni.Turku.konseri-4.JPG" class="pp_image" alt="2009-ODTU.Yeni.Turku.konseri-4" width="100" height="100" /></a> <a href="http://serkan.feyvi.org/blog/wp-content/photos/2009-ODTU.Yeni.Turku.konseri-3.JPG" title="2009-ODTU.Yeni.Turku.konseri-3" rel="lightbox"><img src="http://serkan.feyvi.org/blog/wp-content/photos/thumb_2009-ODTU.Yeni.Turku.konseri-3.JPG" class="pp_image" alt="2009-ODTU.Yeni.Turku.konseri-3" width="100" height="100" /></a> <a href="http://serkan.feyvi.org/blog/wp-content/photos/2009-ODTU.Yeni.Turku.konseri-2.JPG" title="2009-ODTU.Yeni.Turku.konseri-2" rel="lightbox"><img src="http://serkan.feyvi.org/blog/wp-content/photos/thumb_2009-ODTU.Yeni.Turku.konseri-2.JPG" class="pp_image" alt="2009-ODTU.Yeni.Turku.konseri-2" width="100" height="100" /></a> <a href="http://serkan.feyvi.org/blog/wp-content/photos/2009-ODTU.Yeni.Turku.konseri-1.JPG" title="2009-ODTU.Yeni.Turku.konseri-1" rel="lightbox"><img src="http://serkan.feyvi.org/blog/wp-content/photos/thumb_2009-ODTU.Yeni.Turku.konseri-1.JPG" class="pp_image" alt="2009-ODTU.Yeni.Turku.konseri-1" width="100" height="100" /></a></p>
<p>Albüm: <a href="http://serkan.feyvi.org/blog/fotograflar/yeni-turku-konseri-odtu-2009">Yeni Türkü konseri &#8211; ODTÜ Bahar Şenlikleri (2009)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/yeni-turku-konserinden.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keyifle kodlamak</title>
		<link>http://serkan.feyvi.org/blog/keyifle-kodlamak.html</link>
		<comments>http://serkan.feyvi.org/blog/keyifle-kodlamak.html#comments</comments>
		<pubDate>Wed, 29 Apr 2009 18:39:31 +0000</pubDate>
		<dc:creator>Serkan</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[intellij]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://serkan.feyvi.org/blog/?p=277</guid>
		<description><![CDATA[Burada daha önce de yazmıştım: Intellij IDEA tutkunuyum. Eclipse ile çalışamıyorum. Yıllar içinde defalarca Eclipse ile çalışmak zorunda kaldıysam da bir türlü alışamadım. Alışabilmeyi geçtim, vaadedilen özellikleri düzgün çalışsa sabredeceğim ama o kadarı bile mümkün değil. Son projemizde de testlerimizi Eclipse altında geliştirmeye karar vermiştik. Burada uzun uzun yazmayı, hatta resmini/videosunu çekerek göstermeyi düşünmüştüm ama [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://serkan.feyvi.org/blog/wp-content/uploads/2009/04/idea.png"><img class="alignleft size-full wp-image-279" title="idea" src="http://serkan.feyvi.org/blog/wp-content/uploads/2009/04/idea.png" alt="" width="240" height="56" /></a>Burada daha önce de yazmıştım: <em>Intellij IDEA tutkunuyum</em>. Eclipse ile çalışamıyorum. Yıllar içinde defalarca Eclipse ile çalışmak zorunda kaldıysam da bir türlü alışamadım. Alışabilmeyi geçtim, vaadedilen özellikleri düzgün çalışsa sabredeceğim ama o kadarı bile mümkün değil.</p>
<p>Son projemizde de testlerimizi Eclipse altında geliştirmeye karar vermiştik. Burada uzun uzun yazmayı, hatta resmini/videosunu çekerek göstermeyi düşünmüştüm ama buna gerek olduğunu düşünmüyorum. Eğer siz de Eclipse altında çalışmak zorunda bırakılan acınacak durumdaki geliştiricilerdenseniz, verildiğini düşündüğünüz özelliklerin nasıl daha &#8220;kullanılabilir&#8221;, &#8220;hızlı&#8221; ve &#8220;akıllı&#8221; geliştirildiğini görmek için Intellij IDEA&#8217;yı bir deneyin.</p>
<p><a href="http://serkan.feyvi.org/blog/wp-content/uploads/2009/04/eclipse.png"><img class="alignleft size-full wp-image-278" title="eclipse" src="http://serkan.feyvi.org/blog/wp-content/uploads/2009/04/eclipse.png" alt="" width="171" height="91" /></a>Mesela bir auto-complete, benim yazma hızımdan daha yavaş çalışıyorsa, ve üstüne akıl edip kullanmayı düşünebileceğim metodları, sınıfları getirmiyorsa ne işe yarar? Veya, IDE dosyaların haricen değişikliklerinin otomatik olarak farkına varamıyor da eski halleriyle çalışmaya devam ediyor, illa F5 istiyorsa, ne kadar akıllıdır? Arayüz, menüler ve rasgele düzenlenmiş kısayollar -bir programcının elinden çıktığı çok belli-, kullanılabilirlik uzmanlarınca düzenlenmediyse, ne kadar kullanışlı olabilir? Bir kısayolları silsilesi düşünün, çalıştırmak veya debug etmek için kullanılan, her bağlam için ayrı bir tuş tanımlanmış.</p>
<p>Sanırım tüm bu başarısız kullanılabilirlik ve yetersizliklerin nedeni, Eclipse geliştiricilerinin OSGi framework&#8217;üne uyumluluk ve altyapıya verdikleri önemden kaynaklanıyor. Eclipse Framework&#8217;ünü yine benzer işlerimizden biri için incelemiştik ve uygulama geliştirmek için Java&#8217;nın yıllardır beklediği sağlam bir altyapıyı sağladığını görmüş, beğenmiştik. Plugin yapısı, otomatik ağ güncellemeleri, yardımlar ve daha bir çok hazır çözüm uygulama geliştirmeyi çok kolaylaştırıyor. Bir arkadaşın da dediği gibi, &#8220;yakında tüm IDE&#8217;ler Eclipse tabanlı olacak.&#8221; Aslında her tür uygulama için kullanılabilir ama Java&#8217;nın da bir yeri var.</p>
<p>Açık kaynak kodlu olması ve bedava olması, tüm bu kusurlarını kapatamıyor ve bu kadar kötü bir araçla çalışmayı kabullenilebilir yapmıyor. Eclipse&#8217;in yıllar içinde neden olduğu en büyük kötülük bedava olması ve her özelliği öyle veya böyle barındırması nedeniyle daha iyi araçlara ayrılabilecek &#8220;masrafları&#8221; yüksek gibi göstermesi. Halbuki Intellij IDEA geliştirici başına verilen parayı son kuruşuna kadar hakeden bir yazılım..</p>
<p>Eclipse&#8217;cilere tavsiyem, <a href="http://www.codinghorror.com/blog/archives/001236.html">testerenizi bilemenin </a>hatta motorlu testere kullanmanın tam zamanı..</p>
]]></content:encoded>
			<wfw:commentRss>http://serkan.feyvi.org/blog/keyifle-kodlamak.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
