Bir Proje Hikayesi: Vipera
Öncelikle Vipera’nın ne olduğundan bahsedeyim. Vipera, bir sağlık sistemidir. Çeşitli tıbbi cihazlar ile üretilen sağlık verilerini bir API üzerinden sisteme girilmesini sağlar. Girilen bu verileri hekimlere sunarak hekimlerin hastalar hakkında karar vermesinde yardımcı olur. Bir karar destek sistemidir. Hekimler kendi panellerinden grafikler üreterek hastanın sağlık durumunu takip eder. Vipera, tanımlanan acil durum kuralları sayesinde de istenilen bildirim yöntemi ile (SMS ve Android Push Bildirimi halihazırda çalışmaktadır) hekimlere bildirim gönderir.
Aslında hedefim Vipera’nın hekimin yerine karar vermesini sağlamak yani bir uzman sistem oluşturmaktı. Fakat bunu yapabilmek oldukça zor ve maliyetli bir işti. O yüzden üzerinde yapay zeka yöntemlerinin uygulanabileceği verileri öncelikle saklamak gerektiğine karar verdim.
Teknik Hedef
Projenin bir de teknik bir hedefi vardı.
Java teknolojileri ile geliştirilmiş tamamen özgür teknolojilere sahip, esnek ve katmanlı bir mimariye sahip bir proje geliştirmekti.
Öğrendiğim yazılım araçlarını da etkin kullanmayı da hedeflemiştim.
Bitirme projesini bu şekilde yapmayı istedim. Proje konusunu ise danışmanım belirledi.
Proje için Spring’i tercih ettim. Bunun asıl sebebi Spring’i öğrenmek istememdi. Aynı zamanda Spring ile geliştireceğim proje Lightweight bir proje olacaktı. Bununla birlikte gösterim katmanında JSF ve Primefaces, veri katmanında ise JPA’nın Hibernate implementasyonunu tercih ettim. Defacto olan maven ve diğer araçları da kullandım. Veritabanı olarak gömülü bir veritabanı yönetim sistemi olan HSQLDB’yi, asıl veritabanı yönetim sistemi tercihim ise PostgreSQL oldu. Veritabanı bağımsız olduğu için herhangi bir RDBMS kullanabilirdim.
Vipera?
Neden “Vipera” adını verdiğimi merak edenleriniz olabilir. Vipera, latince Engerek yılanı cinsi anlamına gelir. Biyolojik bir isimdir. Sağlık ile ilgili bir proje geliştirdiğimden yılanların latince isimlerinden birini verebileceğimi düşündüm. “Vipera” adını görünce proje adını belirledim.
Geliştirme Süreci
Okul dönemin uzun bir zamanında yarı zamanlı olarak çalıştığım için projeye zaman ayırmam mümkün olmadı. İlk dönem sonunda sadece giriş ekranını kodlayabilmiştim. Bahar döneminin sonuna projenin bitmesi gerekiyordu. Projeye başlarken kullanıcı hikayeleri ve görevler listesi oluşturdum. Daha sonra bunları önceliklendirdim. Daha sonra kullanıcı hikayelerinin implementasyonuna başladım. Katmanlı mimari oluşturmak pek zor olmasa da birçok teknolojiyi bir arada kullanmak başlangıçta bazı problemlere sebep oldu. Başlangıçta test güdümlü geliştirsem de zaman ve projenin birçok kısmı basit ve net çözümler olduğundan test güdümlü geliştirmeyi bıraktım. Fakat birçok yerde temiz kod yazmaya çalıştım. %100 e yakın dökümantasyon yazdım.
Tubitak Yarışması
Zaman darlığında projeyi tamamlayamayacağımı düşünürken danışmanım TUBİTAK tarafından düzenlenen Yazılım Projeleri Yarışması’na da katılmamı istedi. Ben birçok kez katılmamayı düşünürken başvuru tarihinin sonuna yakın bir gecemi harcayarak ilgili belgeleri hazırladım ve yarışmaya başvurdum.
Yarışma için projenin yetişmeyeceğine kesin karar vermişken bir taraftan mezun olabilmek için sınavları geçmem gerekiyordu. Ayrıca Vipera, bitirme projesi olduğundan bu dersi de geçmem gerekiyordu. Projenin TUBİTAK’a teslimine 2 hafta kalmıştı. O iki hafta sonunda finaller, ödevler, tez hazırlama gibi şeylerle karşılaşacağımdan kalan zamanım sadece 2 haftaydı. Yarışma ile kendimi motive ederek projeyi tamamlamaya karar verdim. Vizelerin yorgunluğunu henüz atamamışken gece gündüz projeyi kodlamaya devam ettim. Son günde projeyi tamamladım fakat yarışma için video ve rapor hazırlamak gerekiyordu. Video’yu montajlayıp izleyemeden TUBİTAK’a gönderdim. Rapor ise çok kötü haldeydi. Elimden gelen bu kadar diyerek kötü internet bağlantısına ve verilen süreyi aşmama rağmen projeyi teslim etmeyi başardım. Halen videoyu izleyip kendime gülüyorum :)
Bir Yarışma Hikayesi
Bitirme projesinin sunumundan bir gün önce final sergisine çağrıldığımı öğrendim. Final sergisine 1 hafta vardı. Finallerin yorgunluğunu yine atamamışken bu sefer tekrar girişip bildirim sistemini geliştirdim. Ayrıca afiş tasarımı vs. yaklaşık iki günümü almıştı. Daha önce android e bulaşmaktan hep kaçmış biri olarak ilk defa bir android uygulaması geliştirdim ve Vipera’nın bildirim sisteminin istemci tarafını yazdım.
Yarışma açık kaynak kodlu uygulamalar kategorisinde yarışıyordum. Bu kategorideki projeler, diğer kategorilere ve yarışmalara göre daha düşük kalıyordu. Teknik ve açık kaynak felsefesi açısından değerlendirildiğinde benim proje diğer projelerden üstündü. Sunum için bize yaklaşık 7dk süre verildi. 45dklık bir semineri 75dk’da verebilen biri için oldukça kısa bir süreydi. Üzerinde zaman harcayarak bu sürede sunumu tamamlamayı başardım. Sunumun sadece juriye yapılması, serginin değerlendirilmemesi gibi yarışma birçok açıdan kalitesizdi. Sunumu merak edenler yazının sonundaki slideshare sunumundan inceleyebilirler.
25 Haziran’da yapılan ödül töreninde sonuçlar açıklandı ve Vipera üçüncü sırada yer aldı.
Teknik Açıdan Sonuçlar
Vipera, geliştirmiş olduğum ilk proje olması sebebi ile benim için önemli bir yere sahip. Yarışmada ödül almasından daha çok böyle bir projeyi kısa sürede geliştirebilmek benim için oldukça büyük bir öneme sahip. Esnek bir yapıda geliştirme yaptığımdan dolayı yeni öğreneceğim Java teknolojilerini de bu proje üzerinde deneme şansım olacak. Yine benim için en önemli avantajı, hatalarımı görmem oldu. Gördüğüm başlıca eksiklikler şöyle:
- Gösterim katmanındaki Controller ile işletme katmanının görevlerini karıştırmak,
- LOG yazmak konusunda nerdeyse hiç birşey bilmiyor olmam,
- Nerede test yazılması ve nerede yazılmaması gerektiği konusunda eksiklikler,
- Tasarım desenleri,
- Temiz kod!
Böyle bir projeyi geliştirmek zor olsa da beni motive ettiğini ve bugüne kadarki yazılım çalışmalarımın meyvesini aldığımı söyleyebilirim.
TUBİTAK yarışmasına katılmayı düşünenler için de en önemli tavsiyem mutlaka bilimsel bir proje ile başvurulması. Jüri, projenin bilimsel olmasına herşeyden daha çok önem veriyor.
Güncelleme
Bu yazının bu kısmını 7 Mart 2016’da yazıyorum. Projenin üzerinden nerdeyse 2 yıl geçmiş. Vipera benim üniversitede öğrenmek istediğim konuları öğrendiğimin bir göstergesi oldu. Yukarda da bahsettiğim proje hatalarla dolu. Ne de olsa o zamanlar mezun bile değildim. Projeyi öğrenme amacı ile inceleyecek olan arkadaşlar dikkatli olsunlar.
Kendi başınıza proje geliştirmenin birçok avantajı bulunmaktadır. Herşeyden önce kendi hatalarınızı kendiniz görmüş olursunuz. Proje geliştirirken birçok bilgi de beraberinde gelir. Ekip halinde çalışırken ekibe uyumlu olmak zorundasınız. Birşeyleri değiştirmeniz kolay olmaz veya doğru bildiğiniz konuları hem siz yanlış uygulayabilirsiniz hem de danıştığınız kişiler yanlış biliyor olabilir. O yüzden mutlaka kendi başınıza bir proje geliştirin.
Biraz gelecekten gelmiş gibi olacağım ama :) Merak edenler varsa yukardaki eksiklikler konusunda ne olduğunu da yazayım. Gösterim katmanı ve İşletme katmanı sorunlarını projeden hemen sonra anladım. Kısaca özetlersem gösterim katmanı sadece io olmalı. Asıl işleri işletme katmanı yapmalı. Log yazmak konusu da projeden projeye değişen bir durum. Fakat veri değiştiren işlemlerde mutlaka info seviyesinde log yazmalısınız. Test konusunda da oldukça rahatım. Tasarım desenleri projeden sonra çalıştığım ilk konu oldu. Tasarım desenlerini sorsanız şu an en çok kullanılanları anlatırım. Fakat tasarım desenlerine tam olarak hakim olmak için tecrübe gerekiyor. Bu konuda ne seviyedeyim ben de bilmiyorum.
Temiz kod ise yine oldukça önemli. Bu konuda herhangi bir sorun yaşamıyorum. Hatta Akademik Bilişim 16 da “Temiz Kod” kursu verdim.