My name is Mehmet Korkmaz. I am the director and co-founder of HGM Informatics, Software and Bioinformatics. I develop web based applications and I am a part of a Bioinformatics Team.
To learn more about my business, check these sites out reformo.net, fbplatform.com, hgmbiyoinformatik.com.tr and read my blog.
Apple kedi canını senin demeye devam ediyor. Mountain Lion ile kullanıcıları iOS’a daha çok benzer ve klasik “storage” mantığını yavaş yavaş terkedeceğimiz bir dünyaya doğru bizi hazırlamaya devam ediyor.
Hepimiz kendi çapında belli birtakım araçlar ile uygulama geliştirmekteyiz. Daha çok web tabanlı uygulama geliştiren bir kişi olarak klasik uygulama geliştirme soft setup’ım şu şekilde:
Her ne kadar memcached’i ihtiyacım oldukça komut satırından çalıştırsam da Apache, Zend ile servislere eklenen lighttpd ve mysql arkaplanda kendilerine ihtiyaç olmasa bile çalışmaya devam etmekteler. Zend Studio da Java ile çalışan ve sistem hafızasında hatrı sayılır yer kaplayan bir uygulama. Bu setup ile taze açılmış bir makine ile bile gerek işlemci gerek sistem hafızası olarak sistem kaynaklarını bonkörce kullanmaktayım.
Sistem kaynakları dışında geliştirilen uygamaların gerek belirli aralıklarla yedeklenmesi gerek ekip çalışmasının mümkün olması ve versiyon kontrolü amacıyla git’i daha doğrusu Github’ı kullanmaktayım. Her ne kadar Time Machine ile genelde işimi görmüş olsam da (MySQL data klasörü de dahil olmak üzere) harddiskte ya da yedekleri aldığım harici diskte bir sıkıntı olur, makine çalınır/kırılır/bir şey olur gibi sıkıntıları aşmak adına Github bize bir çok ekstra güzelliği ile kullanıcı dostu bir ortam sağlıyor. Zaten geliştirilen uygulamanın lokal kopyasının yanı sıra harici disk ve internet üzerinden bir yerlerde birer kopyasının da düzenli olarak tutulması artık bir zorunluluk haline geldi hepimiz için.
Web tabanlı uygulamalar geliştiren birisi olarak size acil olarak ulaşılamazsa olmaz. Bu yüzden de tatile çıksanız bile “nedense” yanınızda bir laptop muhakkak olur. Bir workstation olmasa da normal bir laptop’tan daha fazlasının beklendiği bu makineler ağırlık olarak da can sıkıcı olabiliyor.
Bu laf kalabalığını şunun için yapıyorum: Artık programlama da dahil olmak üzere bir çok iş akışı internet üzerinden internet tarayıcılar içinden yapılmaya başlanıyor. Artık hayatımızın bir parçası olan “Bulut Bilişim”e daha fazla aşina olmaya başlıyoruz. Yukarıda bahsettiğim konuları ve benzeri bir çok sıkıntıyı artık bu yöntemle giderebiliyoruz. Bu bağlamda uygulama geliştirmek için kullandığım ve beni büyük bir ölçüde rahatlatan yeni setup’ım ve iş akışımdan bahsetmek istiyorum.
Öncelikle kişisel olarak tercih ettiğim Rackspace’den bir adet Cloud sunucu kiraladım (Herhangi bir sanal ya da normal dedicated sunucu da doğal olarak işinizi görebilecektir). Uzun süredir CentOS kullanan biri olarak ve daha sonra kurmak durumunda kalabileceğim bir takım uygulama ve servisleri düşündüğümde bu sunucu için en uygun işletim sistemini Ubuntu olarak belirledim. Bu işletim sistemini sunucunuzu oluştururken seçebiliyorsunuz, Rackspace size üzerinde sadece SSH erişimi olan tertemiz bir sunucunu veriyor. Sisteme login olunca sırasıyla şu servisleri kurdum:
Bunlar kendi makinemde de olan standart servisler. Bulut içinde uygulama geliştirmek için internet tarayıcı içinde çalışan bir editöre ihtiyacım oldu. Zend Studio ile Remote Server bağlantısı ile de yapabilmeme rağmen bunun için son zamanlarda popülerliği giderek artan Cloud9 IDE‘nin ideal bir seçim olduğuna karar verdim. Otomatik kod tamamlama ve PHP debugging özelliklerinin olmaması bir sıkıntı. Debugging ve kod profilleme çalışmalarını belirli aralıklarla Zend Studio ile yapmaya karar verdim. Node.js ile çalışan Cloud9 IDE için sırasıyla Node.js’yi kurup Github’dan Cloud9 IDE dosyalarını klonlayarak komut satırından Could9 IDE’yi başlattım. Rackspace’in bana verdiği IP adresini ve Cloud9 IDE’nin portunu yazarak IDE’yi test ettim. Başarıyla çalıştığından emin olduktan sonra Cloud9 IDE’nin çalışacağı IP adresi, portu ve workspace’i belirleyip son testimi yaptım.
Burada karşıma çıkan ilk sıkıntı Rackspace’in bana verdiği IP adresini ve Cloud9 IDE’nin portunu bilen bir kişinin de Cloud9 IDE’yi açabilecek olması. Bunun önüne geçebilmek için ilk uyguladığım yöntem bir VPN kurmak oldu. Ubuntu üzerinde PPTP (Point-to-Point Tunneling Protocol) sunucusu kurup bir kullanıcı adı ve şifre belirleyerek konfigürasyonu test ettim. VPN servisinin düzgün çalıştığından emin olduktan sonra sırasıyla şu firewall ayarlarını yaptım:
Cloud9 IDE’yi makine yeniden başlatıldığında çalışacak şekilde ayarlamasını henüz gerçekleştiremedim, biraz daha uğraşmak yerine ilk reboot sonrası sisteme login olup
/root/cloud9/cloud9/bin/cloud9.sh -l 172.168.0.1 -w /var/www > /dev/null 2>&1 &
komutu çalıştırıp sistemden çıkıyorum.
Firewall’u aktive edip sistemi yeniden başlatıp Cloud9 IDE’yi başlattıktan sonra tüm kontrolleri yeniden yapıp sistemi artık istediğim an kullanmaya hazır hale getirdim. Artık Github’dan projelerimi workspace içine ilgili yerlerine klonlayıp yeri geldiğinde commit ve push komutları ile işletim sisteminden ve lokasyondan bağımsız bir şekilde uygulama geliştirebiliyorum.
Bir sonraki aşama Cloud9 IDE’yi otomatik başlatıp, tek bir kişi için geçerli olan bu yapıyı çok kullanıcılı bir sistem haline getirmek ve Github’a değişiklikleri commit ve push edebilmek olacaktır.
Tüm bunlarla uğraşmayıp doğrudan http://c9.io adresinde bir hesap da açılabilir tabi ihtiyaçlarınızı karşılayabildiğiniz sürece.
Her derde deva bir yazılım alt yapısı yoktur. Ne kadar esnek yazılırsa yazılsın her alt yapının tıkandığı noktaları ve zafiyetleri vardır. Böyle bir şey mümkün olsaydı, tüm uygulamalar aldığı sürenin çok daha altında bir sürede biterdi. Probleme özel esnek bir alt yapının oluşturulması mümkündür fakat başarılı olması ilgili probleme dair “ihtiyaç analizi”nin ne kadar iyi yapıldığı ile doğru orantılıdır.
“İhtiyaç analizi” kendini anlatan bir deyim. Süreç sonunda elde edilecek olan ürünün ne olacağı, nasıl çalışacağı, neler yapacağı, hatta nasıl yapılacağı ihtiyaç analizi sırasında mümkün olduğunca eksiksiz hazırlanmalıdır.
İhtiyaç analizinin hazırlanmasından sonra yazılımcı, arayüz tasarımcısı ve kullanıcı deneyimi tasarımcısı “müşteri” ile toplanır ve ihtiyaç analizini ve işin sonunda ürün olarak ortaya çıkacak olan uygulamayı tartışırlar. Bu aşamada yazılımcı veritabanın nasıl olacağını, kullanıcı deneyimi tasarımcısı uygulamanın kullanım akışını, görsel tasarımcı da bu akışın nasıl görüneceğinin eskizlerini kafalarında oluştururlar.
İlk toplantının sonrasında yapılacak ikinci toplantıda bu eskizler üzerinde tartışılabilir görüntülere dökülmüş haliyle tartışmaya açılır ve görsel olarak uygulamanın akış şeması ve tüm ekran görüntüleri belirlenir. Bu konunun netleşmesi için gerekirse üçüncü bir toplantı da yapılır. Tüm ekran görüntüleri bittikten sonra sadece resimlerden oluşan uygulamanın akış şeması ve uygulamada yer alacak bilgiler konusu “müşteri” ile tekrar tartışılır ve yazılım öncesi uygulamanın tüm görselleri ve altyapısına dair bilgiler netleştirilir.
Biten görseller yazılımcının kullanabileceği forma dönüştürülür (Ör: Web uygulamaları için HTML formatında). Yazılımcı da bu süreçte tasarladığı veritabanını ve bu arayüz dosyalarını kullanarak uygulamanın motor kısmını geliştirir ve uygulamayı nihayete erdirir. Yazılımın kodlanmaya başlanmadan önce tüm ekranların tasarlanmış olması sonuçta çalışacak olan uygulamanın nasıl olacağını net bir şekilde ortaya koyacağından yazılım bittikten sonra düzeltme olarak geri dönen istekler sadece fonksiyonel olarak uygulamaya dahil edilmesi atlanmış istekler ve yanlış çalışan fonksiyonların düzeltilmesi olacaktır. Bu noktada altyapıyı kökten değiştirmeye gidecek istekler büyük bir ihtimalle gelmeyecektir. Gelmesi durumunda bu “müşteri”nin süreci kendi açısından iyi yönetemediğinin göstergesi olacağından ilgili zaman ve emek kaybının sorumluluğu ve “masrafı” “müşteri”de olacaktır.
İlk bakışta süreci uzatıyor gibi görünebilir fakat bir oyuncunun kendi yazdığı bir senaryoda kendi yönetmenliğinde başrol oynayıp filmin müziklerini de hazırlayıp prodüksiyonunu yapması gibi bir yazılımcıyı kendi başına bırakmak hem zaman konusunda hem de ortaya çıkan iş karşısında müşteri memnuniyeti konusunda büyük bir ihtimalle sıkıntılar çıkaracaktır. Herkesin kendi uzman olduğu işi yapması gerektiği bir işte bir yazılımcıdan yazılımın düzgün çalışmasını sağlamak dışında fazla bir şey beklememeyi öğrenmek gerekiyor sanırım.
Güzide ülkemizde internet sitelerine erişimi kısıtlamada kullanılan kıstaslar akla ve mantığa ziyan noktasını geçeli epey oluyor. Porno, çocuk pornosu, şiddet, ayrımcılık vs gibi akla ilk gelen konularda bazı sitelere erişimin engellenmesini haklı bulmamak elde değil. Ve fakat olayın deve kuşu misali kafasını kuma gömmekten bir farkı olmayan uygulamalar, toplumu ve toplumun hassasiyetlerini korumak adı altında bilgiye erişme özgürlüğümüze yapılan bariz bir tecavüzdür. Evet konuyu Youtube ve akabinde bir çok Google servisine erişimde yaşanan sıkıntılara getiriyorum. Youtube’un Atatürk’e hakaret içeren bir videodan dolayı kapatılmasını hangi akıl ve mantık ile açıklamak mümkün anlayamıyorum. Atatürk’e kendini bilmez bir kaç kişi hakaret ediyor diye Atatürk küçülecek bir insan değildir. Propaganda amaçlı yapıldığı belli olan bir videodan dolayı sitenin tümüne erişimi kapatmak kişinin kafasını kuma gömmesinden farkı yok. Belli ki bu video Türkiye’deki halkı değil dünya kamuoyunu hedef alıyor. Dünyanın geri kalanı bu tip bir sansür uygulamadığı için üstüne bir de bu videodan dolayı Türkler Youtube’u kapatmış diye bir haber alınca, ateş olmayan yerden duman çıkmaz mantığıyla onları hiç olmayacak şeyler düşünmeye kendi elimizle itiyoruz.
Youtube dışında video paylaşım sitesi yokmuş gibi düşünmek de olayın daha bir içler acısı yönü. “Türklerin Youtube’u kapatmasına neden olan video işte bu” diye o video bir çok adını sanını bilmediğimiz video sitelerinde paylaşılmıyor mu? Ama biz kangren olmuş dokuyu kesmek yerine kişinin kellesini uçurmayı kesin çözüm olarak düşünüyoruz. İnternet kullanıcılarından gelen şikayetler doğrultusunda yasaklanacak siteleri belirleyen kurullara önerim siteyi yasaklamadan önce işin gerçek uzmanlarınca incelenip, ilgili içeriğin kaldırılması, içeriğin sitenin genelinin tavrının bir yansıması olup olmadığı gibi konularda araştırma yapmalarıdır. Bir siteye erişimi kapatmak, idam kararıyla eşdeğerdir. Asmaya karar vermeden önce siteden ilgili içeriğin kaldırılmasını talep edin. Youtube gibi kullanıcılarının oylarıyla ve şikayetleriyle içerik kaldıran siteler için de içeriğin kaldırılmasının PR’ını yapın, bir kamuoyu oluşturun. Times’da 100 yılın en büyük liderleri oylamasında Atatürk’e oy verelim gibi PR çalışmasını daha mantıklı zeminlerde gerçekleştirin.
Ya da gelin bu sansürün asıl amacının aslında Atatürk’e hakaret olmadığını, halkımızı dünya ile entegre ve iletişim halinde olmasına karşı mücadelede bir adım olduğunu kabul edin. İnsanların interneti vakit eğlencesi olarak kullanıp başka bir şey yapmamalarını istediğinizi açık açık söyleyin.
İran olmaktan korkuyordunuz ya, kafanızdaki İran düşüncesinin alası olmuşsunuz haberiniz yok. Bu alkışlar size geliyor. Bravo!
probecatexpr mikrodizin ifade profillemesi analizlerinde kullanılmak üzere geliştridiğimiz bir uygulama. Temel olarak Multi-core programlamayla geliştirilmiş analiz uygulamasını web arayüzü ile kullanıcının hizmetine sunan bir uygulama. Yüksek işleme gücüne ihtiyaç duyan bu tip uygulamalar yaygın olarak bulunmakta zaten. İşin teknik yönünün dışında değinmek istediğim konu probecatexpr dikkat ettiğimiz bir konu; uygulamanın kullanıcı ile olan etkileşimi. Bir çoğumuz gün içinde çeşitli uygulamaları kullanıyoruz ve neyin nerede olduğundan “ee şimdi ne oluyor”a kadar çeşitli sorunlar yaşıyoruz. Genel olarak yanlış olan bir şey, özellikle web tabanlı uygulamalarda, tasarım + uygulama sürecinin aynı kişi tarafından gerçekleştirilmesi yada sadece yazılımcıya bırakılması. Bir uygulamanın gerçekten başarılı olabilmesi uygulamanın bütünün sadece yazılımcıya bırakılmamasına bağlıdır.
Uğur Özmen‘in bir yazısında bahsettiği gibi, IT personelinden ne istediğinizi tam olarak tanımlamazsanız karşınıza çıkan sonuçtan da korkmayacaksınız. Genel uygulama geliştirilecek uygulamanın bir yapılacaklar ve olması gerekenler listesi çılarılır, bunun üzerine tasarımcı ilgli “ekran görüntüleri”ni tasarlar ve yazılımcı bunu çalışan bir uygulama haline getirir. Buraya kadar bir sorun yok gibi görünmektedir. Fakat tasarımı da yazılımcıya bırakmak kadar vahim olan bir konu iletişim tasarımını da grafik tasarımcıya bırakmak. İletişim tasarımı çok ayrı bir konu ve ayrı bir ekspertiz istemektedir. Kullanıcı eğilimlerini iyi bilen, bilgiyi ya da ulaşılması gereken noktayı iyi aktarabilen, kullanıcı ile empati kurabilen bu insanlar uygulamaları çok başka boyutlara taşımaktadırlar. Gmail’de e-postanıza bir dosya eklerken dosyanın ne kadarının aktarıldığını görmek ço güzel bir örnektir. Zamanın behrinde kalmış olan “Browse, upload, wait for what will happen” artık kimseye yeterli gelmiyor. Artık kullanıcılar uygulamaların kendilerini yönlendirmesini bekliyorlar. Ne zaman ne yapacağını uygulamanın kendisinin söylemesini bekliyorlar ve bu şekilde gelişmiş uygulamalardan sonra bu beklenti artık ihtiyaç halini geliyor. Artık uygulamaların “user friendly”den öte “idiot friendly” noktasında olması bekleniyor.
Bizler de probecatexpr arayüzünü kurgularken bu uygulamayı kullanacak bilim insanlarıyla empati kurup onların işlerini kolaylaştıracak şekilde düzenlemelere gittik. Grup sayılarını belirlerken bir sayı girmelerini beklemek yerine bir slider yardımıyla görsel olarak bunu yapmalarını sağladık. Veri dosyalarını bu gruplar ile ilişkilendirmelerini de sürükle bırak yöntemiyle gerçekleştirdik (Thanks to jQuery & jQuery UI). Ve bu durum hiç kimse tarafından hayranlıkla karşılanmayacak kadar günlük hayatımızın parçası olmuş durumda. Bunu gözardı etmeyen uygulamaların başarı şansının yüksek olduğu aşikar. Zamanın probecatexpr konusunda bizi yanlış çıkarmayacağını düşünüyoruz ve başarılı bir uygulama için Coder + UI+UX formülünün kaçınılmaz olduğunun bilinciyle çalışmaya devam ediyoruz.