Pazartesi, Nisan 08, 2013

Özgür Yazılım ve Linux Günleri izlenimlerim

Öncelikle bu etkinlikte emeği geçen herkesi kutlamak gerek. Başarılı bir organzasyondu. Umarım bu işe emek verenler açısından olumlu sonuçlar aldıkları bir çalışma olmuştur.

Tabiiki ülkemizde özgür yazılım ile ilgili kişilerin özgür yazılım ile bağlantısı ağırlıkla ilgili ürünlerin satışı ve kullandırılması ile sınırlı olunca etkinliğin teması NoSql oldu ve sunumlar da genellikle bu ürünlerin kullanımı ve tanıtımı ile ilgiliydi.

Ancak Özgür Yazılım günleri gibi etkinliklerin Açık Kaynak topluluklarına faydalı olabilmesi için halen alınması gereken çok yol var.

Öncelikle dikkatimi çeken herkesin bir "community kurma" derdi olması. Problemimiz topluluk azlığı değil. Problemimiz varolan toplulukların aktivitesinin zayıf olması. Öncelikle zaten var olan topluluklara katkı sağlamak gerek. Topluluklar yoktan varedilmezler. Bölünerek çoğalırlar.

Ben her fırsatta Açık Kaynak / Özgür Yazılım gibi bir ayrım yapılmasının bizim için gereksiz olduğunu söylüyorum ama görülen o ki "Özgürlük Savunucuları" zihniyeti daha uzun süre devam edecek. GPL lisanslı ürün üreten bir kişi olarak en büyük sorunumuzun Açık kaynağın anlaşılamama ve anlatılamama problemi olduğunu düşünüyorum. Bu problem camiada en çok göz önünde olanlar için bile geçerli. Bu problemin de en büyük nedeni de savunduğumuz şeylerin tecrübe etmediğimiz, gerçekten ne olduğunu bilmediğimiz şeyler olması. Bu nedenle konuları işimize geldiği gibi anlamak ve anlatmak gibi bir durum var.

Önümüzdeki yıllarda Özgür Yazılım etkinlerine katılan kişilerin şu konu başlıklarında konuşmuş, bilgilenmiş, tartışmış olmalarını umuyorum.

1. Açık kaynağın amacı kod publish etmek değildir. Açık kaynağın amacı development sürecini publish etmek olmalıdır.
2. Açık kaynak yazılımlar ürün değildir. Bunlar altyapı projeleridir. Açık kaynak proje geliştirenlerin bu altyapı üzerinde geliştirilecek ve satılacak ürünlerle ilgili bir planı muhakkak olmalıdır.
3. Programcıların sosyalleştiği, eğlendiği, yeni şeyler öğrendiği ortamlar açık kaynak projelerdir. Git bilmeyen programcı diğer programcılarla iletişim kuramaz. Yalnızlığa mahkumdur.

Tabii bu fikirleri ortaya koymamın nedeni eleştirmek değil. Bunları kendi adıma gelecekte hangi alanlarda aktif olmam gerektiğini ortaya koyabilmek için yazıyorum. Sonuçta bu problemlerden en çok etkilenen de çözecek olan da bizleriz.

Perşembe, Şubat 07, 2013

Özgür?


Açık kaynak konusuda önemli katkıları olan değerli Hocalarımızdan Necdet Yücel'in blogunda Yakındoğu Üniversitesi Kütüphanesi Sistemi ile ilgili yazıyı okuyordum. Burada "Özgür Yazılım" ve "Sahipli Yazılım" ayrımı dikkatimi çekti. Açık kaynak bir proje geliştiriyor olmam nedeniye bir süredir ciddi ciddi neyin ne olduğu üzerine kafa yoruyorum. Kavramları yerli yerine oturtmaya çalıştıkça yeni sorular doğuyor. Sahipli yazılımlar, sahipsiz yazılımlar, kurumlar, destek olanlar, yöneticiler, özgürlük falan derken ipin ucunu bir noktada kaçırıyorum.

Bu yazıyı yazarken bir taraftan da 500 Startups networkünün canlı yayını takip ediyorum. Sayısız yeni proje demosu izledim ve bir yaratıcı fikir bombardımanına maruz kaldım. Neler var neler. İzlediğim projelerin tamamı internet projeleri. Muhtemelen bu projelerin ezici çoğunluğu Linux & Android temelli sistemler üzerinde çalışıyor ve muhtemelen yine büyük çoğunluğu açık kaynak diller ile geliştirilmişler. Yine sayısız açık kaynak altyapı çözümü , framework vesair kullanıldığı da malum...

Geleceğin dünyası açık kaynak altyapılar üzerinde yükselirken biz konunun neresindeyiz?

Bizde bu açık kaynak konuları ilk konuşulmaya başlandığında birileri "açık kaynak denmez özgür yazılım denir" dediler. Tartışıldı, tartışıldı ve bir kesim için açık kaynak ağza bile alınmaması gereken birşey oldu. Hem de daha memleketimizde yazılmış daha bir tane bile açık kaynak proje olmadığı halde.

Yıl 2013 halen "açık kaynağa açık kaynak" diyemiyoruz. Mesela rekabet kuruluna şikayet edilmişiz, onun heyecanlı ile elim ayağım titreyerek bir yazı yazmışım ve biri gelmiş yazının altına "ücretsiz yazılım ile özgür yazılım birbirine karışmış" diye yorum yapmış. Ooo yeah!! Ya kimin umurunda özgür yazılım? Ben rekabet kurulundaki raportöre "biz özgür yazılımız " diyorum. "Hiç farketmez" diyor :)

İşin başlarında developer camiası projemize "hıı iyiymiş" tepkisi vermiş olsa da SambaPOS bir Windows yazılımı olduğu için tek tük eleştiri de aldı. Tabii eleştirenler "Restorancılık Sektöründe herkes Linux kullanırken niye Windows için POS yazdınız" diye eleştirmiyor. "Windows Özgür Yazılım değil" diye eleştiriyor. Ooof of.

Gerek hocalarımızın, gerekse de bu konulara yıllar boyu emek vermiş dostlarımızın yaptığı büyük katkıları gözardı edemeyiz. Ancak ülkemizde konunun ne noktaya gelebildiği ortada.

End user açısından "Dandik olur, kullanamam" düşüncesi.
Developer açısından da "Kullanırım ama yazmam" düşüncesi.
İşte onca çabaya rağmen Türkiye'de geldiğimiz nokta budur.

İsteyen istediği gibi itiraz edebilir. İki yıldır aktif olarak çalışıyoruz ve benim gördüğüm şey budur. Son kullanıcı için açık kaynak yazılım geliştirip farklı şeyler tecrübe eden varsa gelsin anlatsın.

Bir taraftan restorancılık sektöründe ücretsiz program ile girmek hiç de akıllıca değil. Ortalama bir restorancı bir günlük cirosuna istediği sistemi kurduracak imkana sahip. Bir restoranda kullanılabilmek için tek bir seçeneğiniz var. Diğer programlardan daha iyi olacaksınız. SambaPOS'un yayılmaya devam etmesinin ve 15 dile çevrilmiş bir uluslar arası proje haline gelmiş olmasının nedeni budur.

Peki bu durumda Açık Kaynak konusundaki ısrarımız nedendir?

Çünkü SambaPOS gibi altyapı olarak kullanılabilecek açık kaynak projelerin sayısının artmasının ülkemiz yazılım sektörü açısından şart olduğuna inanıyoruz. Devletimiz yüzbin yüzbin dağıtıyor ama bizler uluslar arası projeler geliştirebilmek için en güzel yolun açık kaynak projeler geliştirmek olduğunu düşünüyoruz. Katma değeri yüksek projelerin Edirne'nin dışına çıkabilmesi için ihtiyaç duyulan yolu açık kaynak projelerin açabileceğini düşünüyoruz. Açık kaynak projelerin çevresinde gelişen kullanıcı topluluklarının gücünün doğru kullanılması durumunda milyonlarca dolarlık bütçelerden bile güçlü olabileceğini düşünüyoruz. Bilgi saklayarak yer tutma zihniyetinin yokolmasını istiyoruz. Her programcı her tür bilgiye sonuna kadar ulaşabilsin, daha mezun olmadan bile pazarda aktif olarak kullanılan projelere girip kendini yetiştirebilsin istiyoruz. Yetenekli gençlerimizin dev şirketlerin yazılım departmanlarında çürüyüp gitmek yerine kendilerini uluslar arası alanda gösterebilecekleri işlerde çalışma fırsatlarına sahip olabilmelerini istiyoruz. Artık ülkemizde dandik bir program yazıp reklam ve pazarlama yöntemleri ile kullanıcıları söğüşleyerek para kazanma zihniyetinin sona ermesini istiyoruz. Yeni yazılım mühendisliği tekniklerinin hızla benimsetilmesini ve yaygınlaştırılmasını istiyoruz.

Bunların tümünün Açık Kaynak ile yapılabileceğini ve bu çalışmaların çok daha büyük ve yüksek gelirli projelerin önünü açacağını düşünüyoruz.

Ülkemizde SambaPOS gibi daha yüzlerce proje başlatılması gerek. Ama özgür, ama değil ya da başka bir türlü. Sahipli yazılım, Özgür yazılım gibi kavramlar belli bir düşünce yapısını temsil eden şeyler. Özgür Yazılım dediğimiz şeyin ilgi çeken kısmı Sahipsiz olması değil.. Düşük maliyet de değil. Kimsenin maliyeti falan taktığı yok. İşte Fatih projesinde görüyoruz. Kaz gelecek yerden tavuk esirgenmiyor. 2013 dünyasında sadece "özgürlük, maliyet" gibi argümanlarla rekabet edemezsiniz. Rekabet edecekseniz tak diye kurulacak, şak diye açılacak, tıkır tıkır çalışacak. Eğer bu açıdan iyiyseniz düşük maliyet ve özgürlük anlamlıdır.

Bu nedenle Açık Kaynağı bir karşı devrim hareketi olarak değil sadece mevcut modele alternatif bir iş modeli olarak düşünmemiz gerek. Evet gayet ticari ve çok para kazanma amacı güderek konuşuyorum. Açık kaynak  projeler yüce gönülllü, hayırsever insanların çalıştığı projeler değil. Özgür mözgür, işte gelmiş geçmiş en başarılı açık kaynak proje olarak gösterilen Android gayet güzel milyon milyon para basıyor. Ticari hedefler olmadan hiç bir şekilde başarıya ulaşmak mümkün değil. Ancak bunu insanları aldatarak, hiç bir şekilde haklarını koruyamayacakları sözleşmeler imzalatarak yapmak zorunda değiliz. Bunu faydalı şeyler üreterek yapmak istiyoruz ve farklı yaptığımız şey bu.

Bu hedeflerimize doğrultusunda SambaPOS projesini bir vakıf projesine dönüştüreceğiz ve bu şekilde kurumsal bir kimlik kazanacağız. Sonrasında da tüm enerjimizi SambaPOS gibi daha çok sayıda projeler geliştirilmesine ön ayak olmak için kullanacağız. Evet bu işler için Vakıf kurmak kulağa acayip geliyor çünkü bizde "Kar Amacı Güden Vakıf " diye bir kültür yok. Her vakıf faaliyetlerini sürdürebilmek için tıpkı şirketler gibi "Kar Amacı Güder". Normal şirketlerden farkı "Karları Ortaklara Dağıtmaz. Gelirlerini devlet kurumlarının denetiminde kuruluş amacı doğrultusunda kullanır." Bu nedenle hemen her büyük açık kaynak projenin arkasında bir Vakıf oluşumu var. Mozilla, Eclipse, Linux Vakıfları en bilinenleri ama bu tür amaçlarla kurulmuş yüzlerce vakıf bulunmakta.

Elbette hayata geçirmek buraya yazmak gibi kolay değil. Daha düşünülmesi gereken çok nokta var ve bu çerçevede de her türlü fikre ve desteğe ihtiyacımız var. Bu yapılanma sürecinde bir danışma ekibi oluşturmak amacıyla "Açık Yazılım Platformu" adı altında bir platform oluşturuyoruz. Çalışmalarımızı takip etmek ve katkıda bulunmak isteyenler benimle emre@sambapos.com adresinden iletişime geçebilirler.

Çarşamba, Ocak 16, 2013

Programcı Tıkanması

İki satır kod bile yazamayan durumdaki programcıyı ifade etmektedir. Beyin durması, mala bağlamak ya da AGD* durumu gibi varyasyonları olsa da benim içlerinde en çok sevdiğim "Programcı Tıkanması".
(* Ağzı Gözü Dağılmak)

Tıkanmış bir programcı mayın tarlası oyununda harikalar yaratabilir ya da saatlerce sıkılmadan youtube videosu izleyebilir ama kodun başına oturduğu zaman IQ iki yaş düzeyine iner. Normalde şakır şakır yapılan işler gözde büyür. İki saatte 10 satır kod yazarsın onu da üç gün önce farkettiğin bir problem yüzünden yazmaman gerektiğini hatırlayıp rollback yaparsın.

Bu tıkanma durumu birkaç saat sürebileceği gibi günler hatta aylar bile sürebilir. Tıkanmanın nedenine göre hayata bile küstürebilir :) Bu durumu çözebilmenin yolu önce sebebi keşfetmektir. Bunu türlü nedenleri olabilir.

  • Genel can Sıkıntısı: Bu sık sık başa gelebilecek bir durum. Çalışılan ortam genelde en büyük etken.
  • Sevilmeyen / Monoton bir işle uğraşıyor olmak: Sevmesek de hep bizi bulur bu işler ama bir taraftan bu tür işlerle uğraşıyor olmak mimari bir probleme de işaret ediyor olabilir. Dikkat etmek lazım.
  • Sebebi belli olmayan bir Bug: İşte benim en sevmediğim tür. Bir hata var belli ama reproduce edebilen yok. Bir nedenle hata raporu da yeterince fikir vermiyor. Bu hata çözülmeden iki satır kod daha yazabilmek mümkün değil. 
  • Birşeylerin Yanlış Gittiği Hissi: Sanırım bu en sevimsizi. Yaptığınız iş belli ve güzel ilerliyor gibi görünüyor ama içten içe biryerlerde hata yapıldığını hissediyorsunuz. Görünürde bir problem yok ama iş production'a çıktığında bayağı bir sorun açacak gibi duruyor.
  • Aşırı kompleks bir yapı tasarlayıp ipin ucunu kaçırmak: Burada olan şey genellikle aşırı soyutlama nedeniyle düşünce zincirini bir noktada koparmak. Tasarladığınız case'i bir şekilde kapatamamak. Sanırım tıkanıklık içinden çıkması en zor olan. Aylarca sürme potansiyeli olan şey.
Programcı Tıkanması probleminin en iyi çözümü bu noktaya yaklaşıldığını erkenden sezip işi hiç bu noktaya getirmemektir ama eğer başınıza gelirse yapılabilecek şeyler şunlar.
  • Biraz uzak kalmak, geri düşünceye atmak. Aslında bambaşka işlerle uğraşıyor olsanız da beyin background'da problemi çözmekle uğraşıyor olacak. İşe geri döndüğünüzde şakır şakır kod yazmaya başlayabilirsiniz.
  • Sıkıcı işleri otomatize etmek / Refactoring: Bu da aslında sıkıcı bir iştir ama asıl sıkıcı işle uğraşmak yerine daha etkin bir çözüm üretmek gelecekte bu işlerle bir daha uğraşmamak anlamına gelir. Bir de eğer sorun tasarımsal bir problemse bunu da acilen refactor etmek iyi bir fikir olabilir.
  • Sebepsiz Buglar: Eğer bir bug reproduce edilemiyorsa genellikle sorun ya multi thread ya da multi user kullanımında ortaya çıkar. En güzeli ne yapıp edip bu sorunu çözmek. Bu acayip bir rahatlama hissi verir. 
  • Kötü hisler: Muhtemelen TDD yapmıyorsunuz. Bu işin ilacı emin olmadığınız noktalar için birim testleri yazmak.  Bu iki şekilde işi kolaylaştırır. Hem kodu test edilebilir hale getirmek kodu kontrolümüz altına almamıza neden olur hem de programın mevcut çalışmasını bozacak bir hata yaparsak anında farkederiz. 
  • Geri adım atmak: Bazen kodu geliştireceğimizi düşünerek başlarız ama sonu olmayan bir yola gireriz. Zamanında geri adım atmayı bilmek işi büyük sorun haline getirmeyi önler. Etkin bir şekilde versiyon kontol sistemi (VCS) kullanmak gerekiyor ki gerektiğinde belli bir zaman diliminde yapılmış işleri inceleyebilin ya da istediğiniz bir noktaya geri dönebilin. Ayrıca DVCS sistemleri bize bu tür işlere başlamadan önce projeyi ayrı bir dala ayırıp tatmin olana kadar ayrı bir yerde geliştirmeye devam etme şansı verir. GIT, Mercurial gibi sistemleri iyi incelemek gerek. 
Bazen de hiçbir sebep yokken kod yazmak istemeyeceğiniz bir döneme girebilirsiniz. Kod yazmaya her oturduğunuzda uyku basması, çay istemek, maiileri kontrol etmek gibi şeyler oluyorsa bunun nedeni genelde aşırı çalışmadır ve biraz dinlenmek gerekiyor olabilir. Burada kendinizi kodu devam ettirmeye zorlamak yerine biraz gevşek davranmak iyi bir çözüm olabilir. Biraz düşünürseniz kod yazma dışında yapmanız gereken işler muhakkak bulursunuz. Mesela blog'unuza yazı yazabilirsiniz ;)

Cuma, Ocak 11, 2013

Yeni başlayanlar için Açık Kaynak projelere katkıda bulunmanın yolları

SambaPOS projesini geliştirmeye başladığımdan beri bana en çok sorulan soru "Nasıl para kazanıyorsunuz?" olmuştur. Bu soru hiç bitmeyecek zannediyordum. Artık ne kadar çok anlattıysam giderek daha çok kişi açık kaynak projelerde yer almak istediğini söylüyor. Gerçekten de bu projeleri ilgiyle takip ediyor ve bir şekilde içlerinde yer almak istiyoruz ama malesef yine çok fazla sayıda kişi bu tür projeler içinde yer alamayacağını da söylüyor. Genelde sebepler şunlar.
  • Programlama bilgim yeterli olur mu bilmiyorum.
  • Hiç vaktim yok.
  • İyi bir proje bulamıyorum. 
Öncelikle Programlama bilgisinin yeterli olmaması konusundaki düşüncelerin açık kaynak projelerin katılımcı bulmaktaki en büyük problemi olduğunu söylemeliyim. Genellikle açık kaynak projeler yürüten kişilerin deha programcılar olduğu gibi bir izlenim var. Bu kimi projeler için çok doğru ancak hemen her projede yapılması gereken işlerin büyük çoğunluğu herkesin yapabileceği türde işlerdir. Evet ilk başta yaptığınız işler dünyayı yerinden oynatacak işler olmayacaktır ama topluluğun arasına karışmak bu yolda atılması gereken ilk adımdır.

Belli bir teknolojiyi ya da herhangi bir işin nasıl yapıldığını öğrenmek için bir açık kaynak projeye katılmak müthiş güzel bir fikir. Ancak çoğunlukla açık kaynak projelerde kodun kendisi dışında pek fazla öğretici dökümantasyon bulunmaz. Yani okuyarak öğrenmek değil yaparak (bozarak) öğrenmek isteyenler için güzel ortamlardır. Örneğin WPF öğrenmek istiyorsanız hiç kimse oturup size WPF anlatmaz ama bir iş parçasını üstlenip takıldığınız noktaları danışırsanız birsürü şey öğrenirsiniz.

Bu nedenle bir şekilde bu projelerin içine sızmak gerek. Bunun için neler yapılabilir.

Öncelikle projeyi takibe almak gerek. Her projenin muhakkak bir blogu, bir forumu, bir mail grubu ya da topluluğun temek olarak iletişim kurduğu bir yeri vardır. Buraları bir süre takibe alın. Öncelikle neler olup bittiğini bir anlamak lazım.

Her projede kullanıcı kesim programcı kesime yaşadıkları hataları ya da istedikleri özellikleri iletirler. Projenin bu işler için nasıl bir yöntem kullandığını anladıktan sonra bir süre için ilginizi çeken istekleri ya da hataları takibe alın.

Bu noktada şunu belirtmem gerek. Her projenin en önemli altyapısı kullanılan versiyon kontrol sistemidir. İdeal bir projede gönderilen her bir kod parçası bir işle ilişkilendirilirler. Yani x işinin yapılması konusundaki bir "issue" o işi yapan kod parçası ile "commit" ilişkilidir. Eğer ilgilendiğiniz işle ilgili Commit'i incelerseniz satır satır o işi yapmak için ne kodlar yazılmış olduğunu görebilirsiniz.

Bu konularla ilgili projenin nasıl yürüdüğünü anlamadığınız noktalarda gönül rahatlığı ile topluluk ile iletişim kurabilirsiniz. DVCS nedir? diye sorarsanız muhtemelen bir vikipedia linki dışında bir cevap gelmez ama spesifik konularla ilgili güzel cevaplar muhakkak gelir.

Projeye girişin en güzel yollarından birisi gelen hataların nedeninin tespit edilmesine yardımcı olmaktır. Kullanıcılar genellikle yaşadıkları hataları düzgün ifade edemezler. Kullanıcı ile iletişim kurarak ve kaynak kodlardan neyin yanlış olabileceğini takip etmek ve problemin nedenini ortaya çıkarmak en saygın işlerden biridir.

Eğer hatayı düzeltebiliyorsanız düzeltin. Her projede programlamaya dün başlamış kişilerin bile düzeltebileceği tarzda problemler vardır. Bunu yapmak için projenin mimarisinin ne olduğunu bilmek gerekmez. Ancak bu noktada mesela yaptığınız değişikliği nasıl gönderebileceğinizi bilmiyorsanız yine gönül rahatlığı ile topluluk ile iletişimde bulunabilirsiniz. Normal şartlarda kimse size nasıl commit yapılacağını öğretmez ama böyle bir durumda otomatikman işin nasıl yapıldığını öğrenirsiniz.

Yani genel anlamda topluluktan birşeyler öğrenmek için değil de başladığınız bir işi tamamlamak için yardım isterseniz beklediğinizden çok daha fazlasınız alırsınız. Neyin nasıl yapılacağını öğrenmenin en güzel yolu bu.

Projenin beta testleri üzerinde kullanım testleri yapmak ve programcı gözüyle karşılaştığınız problemleri bildirmek yine iyi başlangıç işlerinden biridir.

Proje üzerinde performans testleri ya da memory leak testleri yapabilir ve karşılaştığınız problemleri bildirebilirsiniz. Bunlar da neyin ne iş yaptığına dair güzel fikirler verirler.

Birim testleri projelerin hatalarını gidermek için kullanılan güzel araçlardan biridir. Çoğu açık kaynak projenin kaynak sıkıntıları nedeniyle Pure TDD yapmak gibi bir şansı yok ama kritik noktaları kontrol altına almak için çeşitli testler yazarak projeye katkıda bulunabilirsiniz.

Kod yazmak dışında da kullanıcıların sorularına cevap vermek, küçük dökümanlar yazmak, websitesinin geliştirilmesine katkıda bulunmak ya da sadece proje ile ilgili düşüncelerinizi paylaşmak bile yine güzel katkılar olabilir. Ancak düşünce paylaşmadan önce en azından konuyla ilgili yeterli fikriniz olduğundan emin olun.

Her açık kaynak projenin temel öğesi proje etrafında gelişen insan topluluğudur. Genel anlamda bu topluluğun büyümesine ve gelişmesine faydası olabilecek her tür katkı sizi topluluğun vazgeçilmez bir parçası yapacaktır. Hiç bir açık kaynak proje ağır sorumluluklar almayı ya da günler harcamayı gerektirmez. 10dk. bile ayırabilecek olsanız muhakkak çorbaya ekebileceğiniz bir tuz taneniz vardır.

Tabii bunları genel anlamda yazıyorum. Söylediklerimin birçoğu SambaPOS projesi için de geçerli ancak bizim bir taraftan da Türkiye'de açık kaynağı tanıtmak ve sevdirmek gibi bir amacımız da olduğu için bize her konuda ulaşabilirsiniz.