burak@unix~$

~genel amaçlı mühendis~

Neler okuyorum?

leave a comment

Baslik okudugum romanlardan bahsedecegimin ipuclarini verse de oyle olmayacak. Bu yazida programlama yaparken elimin altinda duran bazi kitaplardan bahsedecegim.

Simdi, oncelikle ciddi bir sekilde program tasarlayan ve gelistirme yapan bir adamin mutlaka ama mutlaka bilmesi gereken seyler var. Bunlarin basinda da algoritmalar ve buna bagli olarak da veri yapilari konulari geliyor. Bunlari adam gibi bilmek sart. Ha, sen ne kadar biliyorsun derseniz hic olmazsa derslerini vermis bir lisans ogrencisi kadar biliyorumdur derim.

Internette bu konuyla ilgili yiginla kaynak bulabilirsiniz. O derece bulursunuz ki okuyarak bitiremezsiniz makul bir surede. Ben ekrana bakarak bir seyler okumayi hic sevmedigimden piyasadan iyi kitaplar toplayip kitapligima koymayi tercih ettim. Gereksiz alisveris yapmis da olabilirim biraz ama seviyorum kitaplarimi. Isimi de goruyorlar.

Bu konuda ilk edindigim kitap Rifat Colkesen’in Veri Yapilari ve Algoritmalar isimli kitabiydi. Veri yapilari konusuna yonelik cok fazla faydalanamazsam da cok bilinen, lisans duzeyindeki algoritmalar konusunda iyi bir giris seviyesi kitabi oldugunu soyleyebilirim. Kodlar da C ile yazilmis, lingua franca yani. Illa ki anlarsiniz. Tavsiye ederim.

Bu kitaptan yillar sonra aldigim baska bir kitap daha oldu kapagina, internetteki yorumlara ve kitabin hacmine bakarak. Adi “Algoritmalar, Teoriden Uygulamaya” olan bu kitap Azeri bir profesor tarafindan yazilmis, oldukca genis ve daginik bir yapisi var ve Turkcesi de cok iyi degil fakat yine de elde bulunabilecek bir kitap. Hacminden ve iceriginden oturu cok okuyamadim aslinda kitabi fakat rafda duruyor olmasi guven vermiyor degil. Zira icinde bir yigin algoritmanin oldugu, elime alip calisabilecegim bir seylerin olmasi fikri bana cazip geliyor. Bir daha alir misin deseler, sanirim almam.

Bu iki kitabi edinip son anlattigimdan pek faydalanamayinca ve veri yapilari konusunda biraz eksik kaldigimi fark edince yine bir kitap arayisina giristim. Bu noktada iki farkli secenek vardi; ya internetten Open Data Structures isimli siteyi takip edecektim ya da gidip adam gibi bir basili kitap bulup alacaktim. Internetten bir sey okumaktan nefret eden biri olarak tabii ki basili bir kitabi tercih ettim ve Bogazici Universitesi yayinlarindan cikan C && Java Ile Veri Yapilarina Giris isimli kitabi aldim. Tercih etmemin bir diger sebebi de yogun bir icerikle bogmak yerine sade ve basit bir anlatimla konulari  cok guzel ve net bir sekilde acikliyor olusuydu. Zira Open Data Structures’in kitaplarindaki, bence, eksik olan kisim da buydu. Kitaplar genel olarak rahat kavranabilen bir icerige sahip olsa da uzun uzadiya anlatimlar sikici olabiliyor.

Tum bu kitaplar arasindan en fazla ozumseyerek ve severek sonuna kadar calistigim kitap son bahsettigim veri yapilari kitabi oldu. Konuyu “giris” duzeyinde de olsa guzelce kavradim diyebilirim. Artik hem algoritmalar hem de veri yapilari konularinda daha ileri duzey konulari calismaya hazir hissediyorum kendimi sayesinde.

Bu noktadan sonra da yine veri yapilari konularinda Open Data Structures‘in kitaplarini takip etmeyi planliyorum. Tum temel konulari detaylandiran, yogun bir anlatimi var gibi bir izlenim aldim ilk bakista. Algoritmalar icinse “Introduction to Algorithms” isimli, endustri standardi konumunda olan, bir kitabi kurcalayasim var.

Buraya kadar yazdiktan sonra Coursera ya da baska bir yerden neden ders takip etmiyor bu adam diye soracak olursaniz, cekinmeyin sorun. Bu soruyu ben de sordum ve denedim de sansimi fakat oturup ugrasamiyorum o seylerle. Bu donem aldigim Algorithims I dersini yine takip etmedim ve kaldi oylece. Bu ikinci denememdi, olmuyor.

Bunlardan baska elimde olan bir miktar Matematik kitabi da var fakat onlara zaman ayiramiyorum. Hem is hem de hobi olarak yaptigim projeler yuzunden o kadar zihinsel efor sarfetmeye gucum yetmiyor ne yazik ki. Ayrica bilgisayar bilimi calisirken yetecek kadar Matematik bilgisina zaten sahip oldumdan aktif olarak ihtiyac da duymuyorum. Benimkisi Matematik fetisihidir diyebiliriz sanirim.

Aslinda bu bahsettiklerimden baska kitaplar da var ama onlar PDF formatinda, torrent’den indirilmis ve hemen herkesin duydugu kitaplar. Mesela isletim sistemleri ve bilgisayar aglari konularunda cesitli seyler var fakat duzenli olarak acip baktigim bir sey yok. Hatta bazen Wikipedia’daki maddeleri de tercih ediyorum kitaplara basvurmak yerine.

Written by Burak Sezer

September 23rd, 2014 at 5:44 pm

Hadron neydi, neden boyle oldu? — Bolum 2

2 comments

Bir onceki yazida daha cok neydi kismindan bahsettim. Bu yazida da “neydi” konusuna yine deginecegim fakat “neden boyle oldu” sorusu bu yazinin esas konusu olacak.

Yanlis hatirlamiyorsam 2011 senesinin Subat ayinda cok efor sarfedip cok kisitli bir kullanim alanina sahip bir seyi gelistirmeye ugrasmaktansa cok daha buyuk oynayip basari sansi yuksek, cok daha eglenceli ve gunluk olarak kullanabilecegimiz bir sey gelistirme dusuncesi bir anda agir basti. Uzun zamandir dusunuyordum bunu fakat isin bitmek tukenmek bilmeyen bir enerji ve caliskan bir ekip gerektirmesi nedeniyle hep “neyse, bosver” diyordum. Bir anda gozum kararmis iste, oyle…

Buraya bir parantez acmakta fayda var, bu yazi Hadron’un Gentoo’ya nazaran iyi ve kotu yanlarini islemiyor. O ayri bir yazinin konusu.

Buyuk olaydi aslinda Gentoo‘nun prensiplerini devralan ama paket yoneticisinin yasattigi sikintilari yasatmayan bir dagitimi oturup sifirdan(gercek anlamda) gelistirmeye calismak. Cunku bunu yapabilecek bilgi ve kabiliyete artik kavusmus olmama ragmen gercekten buyuk bir isti, ekibim hemen hemen yoktu ve zamanimda dardi. Yani bu isi yapmamak icin gereken tum sartlar elde vardi. Fakat oyle olmadi.

lpms‘in paketleri kaynak koddan derleyen, Gentoo’daki USE Flags olayini destekleyen ve tutarli calisan bir versiyonunu yazmam ve yeni bir paket formatini olusturmam 8-9 ay kadar bir zaman aldi. Tum bu zaman boyunca tek bir probleme dikkatimi dagitmadan odaklanabilmis olmam konusunda gururluyum acikcasi. Isi problem cozmek olan bir muhendisde olmazsa olmaz bir huy olmali. lpms’in bu son halini ateslemem cok zor da olmadi cunku; nasil olacagini genel olarak iyi bir sekilde planladigim bir yazilimdi ve onceden bu konuda tecrube de edinmistim. Zihnimdeki tasarimi oturup Vim’e kustum diyebilirim.  Fakat her halukarda camur cigneten, mesakatli bir is cunku detaylarina girince bir suru seyi dusunmeniz gereken bir proje. Ozellikle paket derlendikten(compiling) sonra sisteme kurulmasi asamasinda zorlandigim gunleri hatirliyorum. Mesela o gun kullandigim bilgisayarda derlenmesi 2.5 saat suren bir paketi derledikten sonra sacma sapan isler yapan merge modulunu debug ederken saclarim iyice azalmisti. Guzeldi ama yine de.

Her seyiyle sifirdan bir dagitim tasarlayip hayata gecirmek hayallerimin hacking faliyeti olsa da gercekten agir bir is. Cunku is bir paket yoneticisi ve paketleme formati gelistirmekle bitmiyor. Hatta asil olay o noktadan sonra basliyor. Sonbahar aylarinda(yani basladiktan 6 ay sonra) lpms artik paket kurup kaldirabilir bir haldeydi, istedigimiz isleri bolca hata ve eksiklikler icerse de yapabilir durumdaydi. Gentoo’nun en az 15 bin paket icerdigini ve az da olsa gunluk olarak kullanilabilir bir asamaya gelebilmek icin en az 1000 paket yapmak gerektigi goz onune alindiginda kalkistigimiz isin boyutlari daha iyi anlasilabilir.

Ben isin merkezindeki adam olarak sistemin temelinde yer alan, toolchain’e dahil olan, paketleri guc bela da olsa gelistirip sistemi boot ettikten sonra Gurkan‘da X.Org paketlerini yapmaya baslamisti. Tabii o donemde paketleme formatina az hakim olusu, Python’dan pek az anlamasi, calisma anlayisi ve beraber calisma kulturune asina olmayisi sebebiyle o paketleri ben buyuk oranda yeniden yapmak zorunda kalmistim. Bu sonraki donemlerde de uc asagi bes yukari boyle devam etti. Tabii burada Gurkan’i rencide etmek gibi bir niyetim de yok ki zaten su an onunla da konusma halindeyim. Fakat dogruya dogru konusacaksak, durum boyle.

Eger Gurkan’la daha iyi paslasabilseydik bazi seyler daha iyi olurdu.

Tum bu acilari cekip XFCE4 kullanan, internete girilebilen ve ustunde gelistirme yapilabilen bir Hadron surumunu Ocak ayinda acilar icinde cikardik. Baslamamizdan yaklasik bir yil sonraydi. Bizim is cevrelerinde ismi iyi bilinen, benim sahsi arkadasligimin olmadigi bir isim, Hadron’in cikisi icin yazdigimiz kisa haberi Hacker News‘e koydu ve bir gun kadar olmasa da belki bir yirmi saat kadar Hadron Linux ilk saydada yer aldi ve sitemiz binlerce insanla dolup tasti. Guzeldi aslinda fakat bu ilgiye hic hazir degildik bircok bakimdan. Dokumantasyon yoktu mesela.

Bu noktadan sonra biraz da kendimi elestirecegim.

Hadron’a ilk basladigim gunlerden beri hicbir zaman bu is patlasin gitsin, cok reklam yapalim falan gibi bir anlayis icinde olmadim. Tum isi yapip ses seda cikarmadan surumler yayinladim. Kendi kendime kullandim, gayet mutlu da oldum lakin bu tutumum dagitimin sonunu getirdi, zira bu asla tek basina yurutulebilecek bir is degil; mutlaka ekip calismasi isteyen bir proje. Fakat isin buyumesi ve bizim daha da vaktimizi almasi, topluluk idare etme sorumlulugu gibi konular beni hic memnun etmiyordu o yillarda, kendi yagimizda kavrulmayi tercih ediyordum. Sonuc ortada. Yani dagitimin su an atil bir sekilde kalmasina, kendi emeklerimin kimilerine gore bosa cikmasina sebep olan tek gercek etmen yine benim. Ise onderlik etmek ve buyutmek istemedim.

Emekler kesinlikle bosa cikmadi, Hadron’u yaparken hayatimi kurtaracak seyler ogrendim ve su an bu projenin ekmegini yiyorum. Dahasi da arkada.

Sirnak’da askerlik yaparken, Gurkan Hadron’un GNU/Linux dagitimlari listesine eklendigini haber ettiginde aklim gitmisti. Cok sevinmistim, hala da o listede tek basina bir cizgiye sahip olan nadir dagitimlardan biri olarak duruyor. Bu da gercek bir basari bence.

hadron-timeline

Hadron’u birakali bayagi zaman oldu, kodlar artik oldu diyebiliriz fakat arada sirada yine ben Github’da kodlara bakip hayiflaniyorum neden projeyi patlatmak icin gereken seyleri yapmadim diye. Cunku gercekten cok seviyor ve egleniyorduk bu isi yaparken. Arada sirada yeniden baslasak diye birbirimizi gazliyoruz Gurkan’la ama cok zor. Zaten hali hazirda baska bir projeyle ugrasiyorum(Hadron ayarinda bir sey) ve Hadron’dan aldigim dersleri harfiyen uygulayacagim.

Boyleyken boyle, 3-3.5 seneye yayilmis kocaman bir eglenceydi Hadron, tekrar baslamayacagimiz konusunda bir garanti veremiyorum ama gercekten zor ve eger tekrar baslarsak da bu sefer en azindan bir Exherbo ile kapisacak duzeyde baslatmayi deneyecegim. Artik bunu yapabilecek altyapiya sahip oldugumuzu dusunuyorum.

Son olarak tum bunlari yaparken hem kod bazinda hem de manevi olarak destek olan Gurkan, Erdem ve Askin‘a tesekkur etmem lazim. Baska projeler icinde yakaniza yapisacagim ileride!

Written by Burak Sezer

September 14th, 2014 at 7:06 pm

Hadron neydi, neden boyle oldu? — Bolum 1

leave a comment

Kimilerinin bildigi gibi uzun zamanlar boyunca ben ve 1-2 arkadasim adina Hadron dedigimiz bir seyle ugrastik. Bazi seyleri basardik, bazilarini ise basaramadik. Hadron’u gelistirmeyi biraktiktan yaklasik 2 sene sonra boyle bir yazi yazmak gerektigini dusundum, gelecekte de bu dili konusan birileri dagitim gelistirme isini ciddiye alip elini tasin altina sokarsa belki bir faydasi dokunur.

Linux’la ilk tanistigim 2002 yilindan beri cok ilgimi ceken ve motive eden bir seydi dagitimlar ve dagitim gelistirmek, buyuk saygiyla bakardim bu isi hakkiyla yapan adamlara, paket yoneticisi ise tamamen efsanevi bir yazilimdi. Hala da oyle dusunuyorum. Bir Linux dagitimina ruhunu veren yegane sey odur ne de olsa.

Linux’la iliskimin hangi asamalardan gecip bugunlere geldigi ayri bir yazinin konusu olsa da basladiktan tam 7 sene sonra bir dagitim gelistirmek icin kollari sivadim. Bu isi yapmak icin yeterli bilgiye elbette ki sahip degildim fakat tam olarak nerden baslayacagimi ve hangi yollari izlersem nerelere varabilecegimi iyi kotu tahmin edebilecek kadar Linux ve ozgur yazilim tecrubesi edinmistim.

Kendimi bildim bileli problem cozmeyi seviyorum, konu hakkinda ne kadar az sey bilirsem ve cozum ne kadar etkileyici olursa motivasyonum da o kadar artiyor. Hadron’a baslarken, yani 2008 yilinin yaz aylarinda programlama namina hemen hemen hicbir sey bilmiyordum. Gurkan ve ben cok siki ve hevesli Gentoo kullanicilariydik ve bu konusa surekli bir birimizi gazliyorduk. Her sey Gurkan’in pek yerinde duramayan, sistemi belli bir durumda tutup isine gucune bakan bir adam olmaktan ziyade nasil gocertip duzelteceginin yollarini arayan bir adam olmasi sebebiyle basladi ve su an da son surat suruyor. Bir bakima su akti ve yolunu buldu, neyse.

Gurkan o gunlerde adina ReiserFS denen ve simdilerde bildigim kadariyla tamamen olmus bir dosya sisteminin en guncel surumunu(4 olsa gerek) denemeye calisiyordu. Linux’da ve GRUB’da ontanimli destegi olmadigi icin garip takim yamalar ve hackler yaparak sistemi boot edebilecegini dusdu ve tabii basaramadi. Elinde sistemi boot edebilecegi hicbir arac da olmadigi icin dimdizlak ortada kaldi. O problemi GRUB’a bir sekilde bir yama uygulayarak asti sanirim, tam olarak nasil basardigini hatirlamiyorum fakat Hadron Linux ve ikimizin bilisim kariyeri tam da bu an basladi.

Bu olaydan onceki gunlerde Gentoo Wikisinde Gentoo tabanli ama Gentoo ile pratikte bir iliskisi kalmamis bir LiveCD‘nin nasil yapilabilecegine dair bir yazi vardi. Okumus, etkilenmis ama tabii ki uygulamakla ugrasmamistik. Gurkan sistemini kullanilamaz hale getirince o gunlerde hicbir dagitim tarafindan adam gibi desteklenmeyen ReiserFS’in o surumunun desteklendigi bir LiveCD yapip durumdan siyrilabilecegimizi dusunduk ve ipler de tam olarak o noktada koptu.

ReiserFS faciasindan kisa sure sonra ben Hadron’a, Gurkan da GeekFun LiveCD dedigi seye basladi. O zamanlar simdiye nazaran cok ham bir bilgiye sahiptik tabii, programlama bilgimiz sifira yakindi fakat yine de az bucuk da olsa anliyorduk neyi nasil yapabilecegimizden. Sabayon’dan kopya cekerek uzun ugraslar sonucu iki tane kardes LiveCD yayinlamayi basardik, deneyen arkadaslar falan da oldu. Biz de kullandik, begenildi de yaptigimiz is o zamanki forumlarda. Gurkan 1-2 surum cikardiktan sonra hemen birakti. Ben biraz daha direndikten sonra biraktim. Zaten bir ozelligi olmayan LiveCD’lerdi bunlar. Okulla ugrasmak daha elzem geliyordu herhalde.

Aradan yaklasik bir yil gectiktan sonra gunun birinde bana yine bir LiveCD lazim oldu fakat hem ozgur yazilim aleminin “Do it yourself” prensibini dogustan benimsemem hem de varolan cozumleri pek sevmemem sebebiyle icime bir kurt dustu, zamaninda yaptigim Hadron Live projecigini canlandirip Slax tarzinda ve duzenli bakilan, tamamen bu is icin tasarlanmis bir sey haline donusturebilir miydim? Elbette ki olabilirdi. Dogustan hacker bir ozgur yazilim taraftari olarak nasil yapilacagina dair hicbir sey bilmedigim bu konuda zaman harcamak benim icin karsi koyulmasi imkansiz bir is haline geldi kisa zaman icinde. Iste bu da ikinci donum noktasiydi henuz baslamamiz bilisim kariyerimde.

Ihtiyacim olan sey USB bellekten calisan, yaptiklarinizin kaybolmadigi, calisma ortaminizi yaninizda tasiyabileceginiz bir seydi. O zamanlar Slax bu alemde kraldi fakat paket kaynaklari biraz kotuydu, tam anlamiyna ne idugu belirsiz seyleri kullanmak zorunda kaliyordunuz ama yine de mimari dogruydu. Debian gibi dagitimlari da USB bellek uzerinde ayni prensiple kullanabiliyordunuz fakat kesinlikle yanlis bir prensiple calismis oluyordunuz cunku bir paket kurmak icin USB bellege binlerce dosya yaziyordunuz ve bu gercekten pratik bir is degildi ve USB bellegin anasini aglatiyordu.

Tum cozumleri inceledikten sonra kendi sorunlarimi cozen, tamamen benim kurallarima gore calisan bir dagitim gelistirme konusunda kesin kararimi verdim ve neredeyse bir yaz uzerinde calistiktan sonra “lpms” adinda bir paket yonetici kullanan, Gentoo tabanli ve Slax’la ayni prensipleri takip eden fakat tum kodu sifirdan yazilmis is goren bir dagitimi cikarmayi basardim.

Fakat atladigim bir sey vardi. Projeyi sadece ben gelistirip kullanabiliyordum ve hatta lazim olmadikca ben de kullanmiyordum. Alt tarafi LiveCD idi cunku. Yaklasik 1.5 yil gelistirdim, uzerinde program tasarlamayi, surum yonetim sistemi kullanmayi ve program yazmayi ogrendim, daha sonra da ani bir kararla biraktim. Bazi arkadaslar bu LiveCD Hadron‘nu iyi hatirlayacaklardir.

Bu asamadan sonra gercek ve son Hadron’u gelistirmeye basladik, bazi noktalarda oldukca basarili ve kabul edilmis bir proje oldu fakat sonraki yazida anlatacagim gibi, onu da birakmak zorunda kaldik.

Bu isi yaparken aldigim hazzi henuz baska bir projeden alabilmis degilim. Unutulamayan eski sevgili gibi bir seydir bizim icin. Bu yaziyi daha fazla uzatmadan birakayim, baska bir yazinin konusu olsun.

Bu arada ayni isimle 3 farkli ama benzer sey yapan baska biri daha var midir bu dunyada bilmiyorum.

 

Written by Burak Sezer

September 7th, 2014 at 12:12 am

Neler yapiyorum?

4 comments

Baslik biraz tatilci basligi sanki ama bir iskolikden tatil yazisi beklemenin bir anlami yok.

Guncelleme var mi diye bakinirken aylardir tek kelam etmemis oldugumu fark etmem uzerine yaziyorum bu yaziyi. Malum, eskiden siklikla yazmaya calisirdim bloguma, o gunlerin tadi da hala damagimda ama bir turlu eski tempoyla yazasim gelmiyor. Bunun artik her anlamda daha olgun olmaktan, tamamen teknik islere kafa patlatan bir adam olmama kadar cesitli sebepleri var sanirim.

Sebep her ne olursa olsun bence blog yazmak bambaska ve guzel bir is, su an yaptigim gibi tamamen dogaclama ve bir uber geek’in nelerle ilgilendigine dair, daha sonradan da kolaylikla bulunup okunabilecek ve Google tarafindan indekslenip her lazim oldugunda insanlarin karsisina kolaylikla cikabilecek seyler sosyal medya denen lagim akintisinda pek uretilemiyor. Ne diyeyim, sosyal medyasiz gunleri ozler oldum…

Bu arada, fark edebileceginiz gibi artik bir Ingilizce klavyeye sahibim. Bir Dell dizustu bilgisayar magduru olarak bu konuda gercekten sansli hissettim cunku dizustu parcalarini bulmak oldukca zor ki Ingilizce klavyeden bahsediyoruz. Orjinal klavyemi bozmamla birlikte yaklasik 1 hafta suren sancili bir “nasil toparlariz bu isi” sancisindan sonra Yazicioglu’ndan gidip yan sanayisini almama hala seviniyorum. Malum, programci adam icin en ideali Inglizce klavye. Bu arada yan sanayisi Dell’in orjinal donanimindan daha iyi.

put.io‘da Python yazan DevOps olarak yasantima devam ederken hayatima yeni bir programlama dilini soktum, kim oldugumdan bahseden sayfada da bahsettigim gibi kendisi Go. O yaziyi karalarken sadece laf olsun torba dolsun tarzi, belgeleri karistirmaktan ibaret olan iliskimiz karsilikli ciddi bir aska donustu. Su an Pythonista oldugum kadar Gopher olmasam da simdiden ciddi ciddi program yazdigim ve bildigim diller arasina girdi.

Nedir, ne degildir konusuna burada girmeye gerek yok. Bu konu icin Internet’de bulabileceginiz yiginla guzel kaynak var ama statik dillere ilgi duyan, buyuk capli ve hizli calismasi gereken ince tasarlanmis ag yazilimlarini C, C++ ve hatta Java ile cebellesmeden yazmak isteyen biriyseniz kesinlikle tavsiye ederim. Bundan daha iyisi C++ ve Java ile olur ki bu kadar guzel ve efektif threading yapabiliyorsaniz tabii.

Bu arada Go ile gercekten guzel oldugunu dusuntugum ciddi ve saglam bir seyler yapmanin pesindeyim. Su an calisabilir duruma getirebilmeyi umuyor ve bekliyorum hakkinda daha fazla cene calmak icin.

Simdi bunu okuma potansiyeli olan bir iki arkadasin “oha, hadi lan” dedigini duyar gibi oluyorum ama FreeBSD ile ince bir iliskimizin oldugunu, bir Unix manyagi olarak kendisine husu icinde baktigimi ve daha da iyisi kullandigim bilgisayardaki luzumsuz nvidia karti kapatmak icin gerekli olan acpi_call modulunun bir portunun ports‘da bulundugunu soylemeden edemeyecegim. Kendisiyle uzun sureli bir yolculuga cikmak icin tek gereken sey benim zaman bulup adam gibi bir FreeBSD kurumulu yapmam olacak gibi gorunuyor ve fakat corbada bir sinek var.

Soyle ki; Go ile gelistirme yapmak icin Sublime Text kullaniyorum ve bu harika editor FreeBSD‘de calismiyor. Sadece Linux ve diger populer isletim sistemlerine destek saglaniyor. Linux emulasyonuyla nereye kadar gidebilirim bilmiyorum ama lpms‘i vim ile yazmis biri olarak soyleyebilirim ki Sublime Text bence cok daha rahat. Python icin ise PyCharm calisiyordur diye umuyorum.

Buraya kadar okuyan oldu mu?

Written by Burak Sezer

June 25th, 2014 at 9:58 am

Tornado’da test yazarken ‘authenticated’ dekoratöründen kurtulmak

leave a comment

Blogu Türkçe yazıyorum ama resmen zorlanıyorum: mesela bu başlık. Ne desem uymuyor, Türkçe’ye oturtamıyorum pek bazı kavramları. Sonunda böyle ucube laflar çıkıyor klavyemden. Sanırım bazı şeyleri İngilizce yazmak gerekecek.

Tornado tam beni sevdiğim cinsten bir yazılım. Ufak ama çevik ve marifetli, tıpkı bir kedi gibi! :) Kendisiyle haşır neşir olmayı da pek seviyorum ama geçenlerde test yazarken azıcık zorlandım.

tornado.web.authenticated dekoratörünü kullanan pek çok metodu test etmek için sahte bir yetiklendirme durumu yaratmak gerekti, implentasyon detaylarından çok bahsetmeyeceğim ama şöyle bir kod örneği verebilirim:

Yukarıdaki koddaki hikaye şöyle. with ile başlayan satırda bir context manager içinde Tornado’nun RequestHandler sınıfının get_secure_cookie metodu gölgeleniyor(tam teknik tabir patching) ve döndürdüğü değer yetkilendirilmesini istediğim kullanıcı oluyor. O methot bir kez öyle bir sonuç döndüğü zaman Tornado yetkilendirilmiş bir istemcinin sorgusuna cevap verdiğini sanıyor ve istediğiniz işi yapıyor.

Bu arada, söylememe gerek var mı bilmem ama, Mock kullanıyorum.

Tornado’da test yazma konusunda en iyi kaynak da sanırım bu: http://www.tornadoweb.org/en/stable/testing.html

Written by Burak Sezer

March 7th, 2014 at 10:31 pm

PostgreSQL’de bir yetkilendirme hatasi

leave a comment

PostgreSQL ile çalışmaya devam ediyorum.

Geçen gün geliştirme ortamındaki Postgres’i 9.1 sürümünden yeni cikan 9.3.3 sürümüne taşımak istedim. pg_update ile istedigimi de yaptım fakat test veritabanı oluşturmak için güncel bir dump almaya çalıştıgımda şöyle bir hata ile karşılaştım:

psql: FATAL: Peer authentication failed for user $username

Ufak bir araştırmayla ögrendim ki, eğer ayar dosyasında yetkilendirme metodu olarak peer seçerseniz PostgreSQL işletim sistemi üzerindeki kullanici adını alıyor ve onu yetkilendirme icin kullaniyor. Yani sistem, benim veritabanına müdahale etmeye çalıştığım kullanıcı(postgres) ile yetki almaya çalışırken; pg_dump‘a verdigim yetkilendirme bilgileri tamamen farklıydı.

Çözüm oldukça basit. Önce /etc/posgresql/9.3/main/pg_hba.conf dosyasını açıp içinde şöyle bir satır aramak lazım:

local   all   postgres   peer

Bu satırın sonundaki peer ifadesi yetkilendirme metodunu belirliyor. Onu md5 olarak degiştirmeniz gerek. Bu sayede veritabanı oluştururken belirlediginiz yetkili kullanıcı ile giriş izni alabiliyorsunuz. Bunun sistem üzerinde tanımlı bir kullanıcı olması da gerekmiyor.

Değişikliğin işe yaraması için PostgreSQL sunucusunu yeniden başlatmanız lazım tabii.

Written by Burak Sezer

February 24th, 2014 at 8:46 pm

PostgreSQL’de Unicode problemleri

leave a comment

Başlık biraz geniş ele alıyor konuyu ama yazacağım şey ufak ve önemli bir bilgi. Belki zamanla yeni şeyler öğrendikçe yazıyı da güncellerim.

PostgreSQL ve SQLAlchemy kullanarak bir uygulama geliştiriyorum. Veritabanına Türkçe karakterler içeren bir giriş yaptığımda uzunca bir backtrace ile birlikte şöyle bir hata dönüyor:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)

İşin kötü tarafı şu ki kodun benim yazdığım tarafında değil de SQLAlchemy içinden geliyor bu hata.

Çözmek için öncelikle ASCII olmayan karakterler içeren veriyi UTF-8‘e encode ettim ama tek başına bir işe yaramadı. Ben de engine tanımlamaya yarayan create_engine fonksiyonuna client_encoding=”UTF8″ parametresini gönderdim. Bu olmadan ASCII olmayan karakterleri veritabanına yazabilsem dahi okuma yapamıyorum.

Veritabanını dump’ına da aynı şeyi yazdım.

SET client_encoding = ‘UTF8′;

İşe yarıyor.

Written by Burak Sezer

February 5th, 2014 at 6:22 am

PostgreSQL’de dump’ı geri yükleme

leave a comment

İki sefer işim düştü veritabanı dump’ına, her seferinde aynı şeyi öfkeyle aramak zorunda kaldım. Bari kendi bloguma yazayım da bulacağım yeri bileyim.

Senaryo şu:

1- Elimde bir dump var, çalışan veritabanından alınmış. İçinde veri yok. Sadece bir şemalar, izinler vs… var.
2- İlgili veritabanının tanımlanmamış olduğu bir PostgreSQL veritabanı çalışır vaziyette bekliyor. Terminalde postgres kullanıcısı olmuş durumdayım.

Şimdi de çözüm adımları:

1- Önce template0‘dan veritanını oluşturalım.

[code]

createdb -T template0 dbname

[/code]

dbname yerine tabii oluşturmak istediğimiz veritabanı adı geliyor. dump’dan geri yükleme yaparken veritabanı oluşturmuyor, sadece içini dolduruyor.

2- dump’ı kullanarak yeni veritabanının içini doldurun:

[code]
psql dbname < infile
[/code]

infile yerine de /foo/bar/dbname.dmp gibi bir şeyin gelmesi gerekiyor.

Bu kadar.

Written by Burak Sezer

December 27th, 2013 at 8:23 pm

Tornado’da gerçek DEBUG modu

leave a comment

Başlık biraz fazla sansasyonel oldu ama arzu ettiğim ve yaptığım şeyi anlatan da bu.

Bu sıralar biraz Tornado ile oynuyorum. Kendisi bildiğiniz gibi FriendFeed‘in altyapısında kullanılmış ve Facebook tarafından satın alındıktan sonra kodu açılmış bir non-blocking web server ve saz arkadaşları, kısaca böyle.

Ciddi miktarda Django, Flask ve hatta düz Werkzeug tecrübesi olan biri olarak, Tornado’dan geliştirme yaparken herhangi bir dosyayı değiştirdiğimde kendinin yeniden başlatmasını bekliyordum. Ama Stack Overflow’da yazdığı gibi uygulamayı debug=True parametresi ile başlatınca işimi gördüğü söylenemez. Biraz araştırınca şu çıktı ortaya:

Yukarıdaki kod parçası size basit ama yukarıda bahsettiğim işlevi sağlayan bir sunucu başlatıyor. Burada dikkat etmeniz gereken kısım Watch templates yorum satırından sonraki for döngülerinin içinde yapılan iş. Yukarıdaki kod örneği SQLAlchemy ile Tornado’yu nasıl güzelce bir arada kullanıp adam gibi debug modunda çalışabileceğinizi gösteren güzel bir örnek. Afiyet olsun.

Bu arada kodun aslını yazan adam da şurada.

Written by Burak Sezer

December 23rd, 2013 at 1:40 am

aufs neden çalışmaz ki?

leave a comment

docker ile oynuyorum bu gece. Eski dostum aufs‘e ihtiyaç duyuyor çalışmak için ve benim kernel’a yaması uygulanmamıştı. Önce depodan sys-fs/aufs3 paketini kurdum ama bir sürü yerinde Undefined Symbols yazan fantastik hatalar bastı modül dmesg’e. Ben de sys-kernel/aufs-sources paketini kurdum ve bu paket aksini belirtmezseniz aufs’i kernel’a gömüyor.

Olay da bundan sonra başladı.

Docker’da bir Ubuntu 12.04 LTS imajına ssh yapmaya çalışırken şöyle bir hata dönüyordu:

...Error: Error starting container 042c2188714f: Unable to mount using aufs

Kernel loglarına baktım tabii hemen, aufs kelimesini grep’leyince hemen çıktı suçlu meydana:

[ 2343.072351] aufs au_loopback_init:136:modprobe[8522]: loop_backing_file() is not defined

Kolaylıkla anlaşılabileceği gibi aufs dosya sistemi, benim konfigurasyonumda, loop modülü olmadan çalışamıyor!:) Modülü kernel’a gömdüğüm için de tekrar aufs’i başlatmanın bir yolu bildiğim kadarıyla yok.

Bu durumda ya aufs’i bir modül olacak şekilde ayarlamak gerekiyor ya da loop’u da kernel’a gömmek. İkincisini yapıp tekrar kernel derledim, aynı şeyleri tekrar tekrar yapmadığı için hemen bitti ve boot edip Gentoo içinde LXC ile çalışan bir Ubuntu 12.04 LTS’ye kavuştum.

Bu da sistem yöneticisi tarafımın yazdığı bir hata yakalama hikayesi.

Written by Burak Sezer

November 2nd, 2013 at 11:26 pm