Tag Archives: Yazılım

Doğru bil(me)diklerimiz neler?

Dediğim gibi bir sürü boş vaktim olmasa da bir sürü boş işe harcadığım vaktim olduğu için bir çok gereksiz konuda yazı yazabiliyorum. Aynen bir sürü gereksiz yazılım yazmak gibi ama biraz daha farklı. Bus efer ki konu, esasta doğru bildiğimiz yanlışlar ile alakalı. Bildiğiniz gibi, yazılım üzerine çalışınca, yazılım hakkında bir çok diyaloğun da içerisinde oluyorsunuz. Bu yazının ortaya çıkmasında sebep aynı böyle bir tartışmaydı; **“Object Oriented Programming kullanmıyorsunuz!” lafından çıktı hepsi, beni suçlamayın onu suçlayın.

Ne Bil(mi)iyoruz?

Pek tabii ki yazılımcılar olarak biz her şeyi biliyoruz! Aksi ispat edilemez, edilecekse gelsin çıksın karşıma. Biz bu meslekte dirsek çürüttük, her şeyini biliyoruz tabii ki. Ne biliyoruz peki? OOP biliyoruz, Pattern biliyoruz, Nesne biliyoruz, Polimorfizm biliyoruz, her bir şeyi biliyoruz. Açıkcası bir kaç güne kadar ben de böyle diyordum ki, piyasadan bir üstadımız beni yerin yedi kat dibine sokuncaya kadar. Sonrasında kendime geldim, nefes aldım bir oh çektim falan.

Peki gerçekten bu terimlere hakim miyiz?

Konuşmanın biraz daha heyecanlandığı noktada, benim otomatikman muhalefete geçme gibi bir özelliğim olduğundan, konu genelde farklı boyutlara taşınır. Konuşmada arkadaşın yukarıda belirttiği OOP kullanmıyorsunuz, bir nefi bilmiyorsunuz lafı sonrasında, sinirler arttı benim. “OOP Nedir?” dedim arkadaşa, basitçe bana OOP tasarım kalıplarıdır dedi o da. Bir kere öyle değil bu işler. OOP dediğimiz, nesne tabanlı programlamadır. Yani nedir? Nesne olması gerekir, yani senin nesneler yaratman, basitçe bu nesneleri yönetecek katmanları yazman ve buna bağlı programlama yapmanı anlatır. Peki ben hiç tasarım kalıbı ya da güzel adıyla Design Pattern kullanmamışsam? O zaman ben hiç OOP kullanmamış mı olurum? Ekmeğe, şeklini verirken franzile şekil vermediysem ortaya çıkan ürün ekmek değil midir? Aynı mantıkta yanıtlanabilecek bir cümle.

Eğer sen nesnelerini oluşturup, katmanlarını koyduysan, SOLID mantığını biraz da olsun yakaladıysan o zaman zaten OOP yapmışsın ne mutlu sana. Pattern kullanmadıysan OOP yapmadın diye bir algı yok, olmamalıdırda. Pattern kullanmadım diyorsunuz da peki o konuda da emin misiniz?

Pattern olayı

Ya şimdi bir gerçek var, Design Patterns popüler olduğundan beri, herkes bu terimi kullanır oldu hayatında. Adı üzerinde, tasarım kalıbı bu, yani kalıplaşmış kod yapısı. Hiç kullanamadan adam akıllı kod yazmanız için çömez olmanız lazım, kullanıp adını bilmezseniz normal developersınızdır. Fakat insanlar sizden ismini ve cismini bilmenizi bekler. Yeni dünya diye bir meyva var, ismini tam olarak bilmem. Alırım, yerim. Tutup da sen bana bunu yerken, “hiç yeni dünya yememişsin, çok süper meyva” dersen, yemiş olsam bile yemedim psikolojisi oluşur üzerimde.

Kod açısından örnek verirsek, yıllarca data fonksiyonlarını yazdıktan sonra, datayı ele alan DAL yani Data Access Layer’ı yazarken nesnelere uygun tekil sınıflar yazdım. Yani bir tablo varsa, o tabloya data girişini sağlayan. DataTablosuBase.Save() ya da DataTablosuBase.Insert(DataTablosu _dataTablosu) kodlarını içeren sınıfı yazdım ve datalarımı öyle kaydettim. Şimdi yıllar sonra öğreniyorum ki bu yöntem Repository Pattern olarak ele alınıyormuş. Şimdi aynı konuşmada, arkadaş bana onu da dedi “Hiç pattern kullanmadan OOP yazılmaz”. Bu arkadaşı ilk arayan 20 kişiye postayla göndermeye karar verdim. Bildiğin bas baya kullanmışım işte.

Bu pattern’in üç temel prensibi var; Data erişiminde tek noktanın olması, Tablolarınızla alakalı tek bir sorumlu yer olması, Olası altyapı değişimlerinde sistemin minimum değişimle işlemesi. E ben bunu gayet yerine getirmişim, sadece “DataTablosuBase” yerine “DataTablosuRepository” dememişim. Ha bir de EF kullanmamışım ama o kontaya girersem çok olaylar çıkar.

Sonuç

Demem odur ki, asla bir insanla beraber adam akıllı kod yazmadan ona şunu yapmamışsın, bunu yapmamışsın demeyin. Yapmıştır, illa yapmıştır da bilmiyordur. Yapmıştırsın da bilmiyorsundur diyin. Bu sayede siz de o insandan biraz kod öğrenebilir, o insanla aranızı bozmazsınız. Dünya daha güzel bir yere gelir. Fakat konunun başında da dediğim gibi biz yazılımcılar her şeyi bildiğimiz için bu konuda burnu havada insanlarız. Arada bir kendinizden daha iyi olan insanlar tarafından alaşağı edilin de, kendinize gelin vallaha.

Proje Yönetiminde Ego Faktörü

Bugün ilginç bir konu ile karşınızdayım, “Proje yönetiminde ego faktörü”. Bu kısa makale aslında sadece yazılımcı olanlar için değil, analist olmak isteyenler için de açıklayıcı olacaktır. Zira boş işler konusunda kafa yormakta üstüme olmayan şahsımın, bu konuda bir çok fikri bulunmakta.

Proje Yönetimi

Bu konuda detaylı bir makale yazacağım. Özellikle o makalede ele alacağım konuları aşağıda özetleyebilirim.

  • Proje Yönetimi nasıl olmalıdır?
  • Proje Yönetimi esasen hangi faktörlere dayanır?
  • Proje Yönetimi adı altında yerel yazılım sektöründe ne gibi sorunlar var.
  • ve daha nicesi…

Şimdilik bu konulara fazla dalmayalım, vakti geldiğinde bu yazı da zaten o yazı dizisinin bir parçası olacak ve detaylıca bir sonuç ortaya çıkartacağız. Şimdilik konuya hakim olduğunuzu ve şirketinizde bir Proje Yönetimi olduğunu varsayalım. Muhtemelen yok ama yine de olduğunu düşünelim. Haliyle yazılımcı da olsanız, analist de olsanız verilen görev neticesinde sizden bir Analiz Dokümanı çıkarmanız istenmekte, buna müteakip projeyi yapacağınız birim ile bir toplantı ayarlamanız lazım. Siz de tabii tüm saflığınız ve isteğinizle gidip, paşa paşa toplantı yapacağınızı düşünerek karşınızdaki kişi ile masaya oturdunuz. İşte tüm hayalleriniz birazdan o masada yıkılacak, daha önce yıkılmadıysa bir sonraki masada yıkılacak. Korkmayın hemen bu aslında çok güzel bir şey, çünkü gerçek hayatı deneyimliyorsunuz.

Toplantı Masası

Masaya oturdunuz, özenle aldığınız defterinizi ve şirketin size aslında dokuz liralık gösterdiği iki liralık kalemi elinize alarak karşınızdaki kişiden bir PROJE çıkartacağınızı düşünüyorsunuz. O kadar iyimsersiniz ki, poliyanna yanınızda otursa size bakıp ağlardı. O masanın karşısında oturan şahıs ya da şahıslar, sizin gibi kaç tane kişinin leşini bıraktı o masada farkında mısınız? Hayalleriniz, planlarınız toz bulutu olup kaybolmadan önce karşınızdakine bakın. Telefonunu nereye koyuyor? Gözünüzün içine bakıyor mu? Soru sormanıza izin veriyor mu?

Size hiç hayatın sırrını ya da toplantıda x hareketini yaparsanız karşınızdaki daha rahat hissedecek falan demeyeceğim, zira böyle şeylere inanan birisi de değilim. Fakat her toplantım sonrasında elimdeki notları dolduran birisiyim. Zira önemli olan da odur. Toplantı masası savaş meydanıdır, orada yapacağınız en ufak hata sizin savaşı kaybetmenize sebep verebilir.

Projenin hayat döngüsünü özetlersek;
– Proje Talebi: “Kaşık istiyorum, çorba içeceğim”
– Analiz Toplantısı: “Çatal lazım, batırıp yiyemiyorum”
– Proje Sunumu: “Alın size bıçak, artık kesip küçük lokmalar yapabilirsiniz”

Toplantının Ön Analizinin Toplantısı

Bodoslama toplantıya dalan bir tip olmayın! Gidin önce, toplantı yapacağınız kişi hakkında bir ön bilgi edinin, şirketteki iş arkadaşlarınızla ya da daha önce o müşteriye gitmiş kişilerle biraz muhabbet edin. Nasıl bir insandır önce öğrenin; ”Düşmanı Tanımak” ya da “Egoyu Ölçeklemek” dediğimiz bu işlem size kişinin nasıl bir ego haritasına sahip olduğu hakkında fikir verecektir. Gözünüzü korkutmayın, baştan korkarsanız hiç bir projeyi tam olarak çıkartamazsınız, müşterinin kölesi durumuna gelir ve saçma sapan, sonu gelmeyen isteklerin kölesi olursunuz.

Kişinin olabileceği tipleri burada ele almaya çalışırsak kendi başına büyük bir makale olur. Zira onu da başka bir yerde inceleyeceğim. Ego bakımından tehlike derecesine göre üç ana kategoriye ayrılır bu insanlar.

  • Egosu olmayan müşteri; kısaca projeye muhtaç müşteri.
  • Egosu orta seviye olan müşteri; kısaca sizi küçümseyen ama dile getiremeyen müşteri.
  • Egosu tavan yapmış müşteri; onunla ancak CEO irtibata geçebilir, siz kimsiniz ki karşısına çıktınız onun?

Toplantının Hazırlığı

Toplantı yapacağınız mekana gitmeden önce yapmanız gereken işleri gözden geçirmeniz gereken aşama burası. Önce dokümanlarınızı hazırlayın, asla orada eksik belgenizin olmasını istemezsiniz. Toplantı daha önceden ayarlanmışsa, bir iki gün öncesinden kız isteme mesajı atın; ”Yarın yapacağımız toplantı için uygun musunuz?” gibi kibarlıktan öleceğiniz bir mesaj. Toplantı günü için ayarlanmış kaliteli kıyafetler. Falan filan, bunları her yerde bulabilirsiniz. Esas önemli olan o kişiye karşı uygulayacağınız stratejinin nasıl olacağıdır.

Kişinin ego seviyesini, yeterli kişi ile görüştükten sonra çıkarttıysanız bu kişilere karşı uygulayacağınız stratejik planı da çıkartmanız gerekmektedir. Ayrıca bu bilgileri toplarken, Proje Yöneticinizden projenin anlam ve önemi hakkında bir bilgi de isteyiniz, eğer bu konuda bilgi sahibi değilse maalesef bir bacağınız topal olacak ama yine de sağ çıkacaksınız, korkmayın!

Toplantının yapılacağı yere erken gelmeniz değil, toplantı odasına toplantı vakti girmeniz önemlidir! Egosu ne olursa olsun, insan sonuçta saygı görmek ister.

Toplantı Masası

Toplantıyı eğer birden fazla kişi ile yapacaksanız, masanın asla başına oturmayın, yan taraflara oturun ki masayı geniş bir şekilde görebilir, kişilere eşit ilgi gösterebilirsiniz. Toplantı masası yukarıda da dediğim gibi sizin savaş alanıdır ya da daha kibar hali ise satranç tahtanız. Burada soracağınız her soru, proje için diyeceğiniz her laf ilerde sizin aleyhinize delil olarak kullanılabilir. O yüzden bu masanın heyecanına kapılıp asla olmayacak şeyler için söz vermeyin. Karşınızdaki kişi mantar değil sonuçta, o da çalıştı ve buralara kadar geldi.

Strateji!

Karşınıza müşteri geldiğinde, kişiyle ilgili edindiğiniz önyargıları hemen masanın kenarına itin. Önce karşınızdaki kişiyi anlamaya çalışın. Adettendir bir beş dakika ya da on dakika bir geyik yapın. Hem onun stresini alırsınız, hem de kendi gerginliğiniz yatışır. Eğer acelesi varsa standart “naber”, “naaptın reyiz” cümlelerini kullanabilirsiniz. Tabii ana fikri anladığınızı düşünüyorum.

Ego derecesine göre strateji yönelimlerini ele alalım.

Düşük Ego

Yukarıda özetlediğim gibi, bu kişiler esasında sizin projenize muhtaç olan kişilerdir. Yine de bu insanlara, onların sizin projenize olan ihtiyaçlarını belli etmemek büyük bir özen ister. Zira köşesine sıkışmış bir kediyle asla uğraşmak istemezsiniz! Bu kişiye var olan projenizi dilediğiniz gibi anlatabilir, diğer müşterilerinizle ne kadar mutlu mesut yaşadığınızı belirtebilirsiniz. Hatta eğer karşıdaki ile kanka moduna girmeye yaklaşırsanız, müşterileriniz ile yaşadığınız sorunları esprili bir dille anlatabilirsiniz.

Orta Ego

Bu arkadaş aslında daha önceden bir ajansta falan çalışmıştır ya da içten içe kıl olduğu bir akrabası ya da arkadaşı yazılımla ilgilenmektedir ve bunu dile getirmek için fırsat kollamaktadır. Asla ama asla o kişiye karşı tepki vermeyin, haklısınız deyin geçin. Zira amacınız orada laf dalaşına girmek değil, proje hakkında bilgisini almaktadır. Kısaca biraz okşayın arkadaşı – fiziksel değil, laflarınızla. Bu arkadaşın o zamanlardan kalan sinirini ya da bilgisini kullanın; o zamanlardan laf açın, projede eksik gördüğü kısımları belirtmesini isteyin, onun gibi zamanında bizim sektörümüzde çalışmış kişilerin bilgisinin programa çok fazla yarar sağlayacağını, bunun sayesinde hem onun hem de şirketin kazanacağını belirtin. Kısaca biraz yağlayın arkadaşı. O zaten sizin böyle davrandığınızı gördüğü anda bayrakları indirecektir. Çok vermeyin yağı ama egosu makul ölçülerde seyretsin.

Bu tip kişilere ayrıca toplantı sonrasında doküman paylaşımı, istedikleri güncellemeleri gönderebilecekleri bir e-posta adresini ve iyi niyetlerinizi verin. Kapıdan çıkınca hepsini unutacaksınız zaten.

Yüksek Ego

İşte şimdi ayvayı yediniz. Bu arkadaşa yapabileceğiniz tek şey onun egosunun altında ezildiğiniz hissiyatını vermektir. Genel kanının aksine yönlendirilmesi en kolay insanlar da bu insanlardır. Nasıl diye soracaksanız az önce dedim ya, ona hiç görmediği kadar ilgi gösterin. Onun engin bilgisinden ve deneyimlerinden elde edeceğiniz güzellikleri anlatın, projeyi daha önce profesörlerle ve nice PMP’ler ile tasarlamış olsanız bile, onunla konuştuktan sonra yeniden tasarlayacağınızı hatta ve hatta sırf bunun için geldiğinizi anlatın. Size baştan sona kadar projenin nasıl olması gerektiğini anlatsın dursun.

Toplantı içerisinde zaten projede olan şeyleri size hiç yokmuşçasına anlatacaktır çünkü o kategorinin ya da butonun ismi farklıdır. Siz yine de notunuzu alın, ilgiyle, canla, başla dinleyin kendisini. Hatta toplantıyı uzatmayın. Daha sonra tekrar görüşmek için kendisinden bir tane daha toplantı koparın. Bu insanla iki taneden az toplantı yapmayın, süreç hakkında sürekli saçma sapan e-postalar atın ki ilgilendiğinizi falan sansın.

En sonunda da zaten var olan modülleri sanki o anlatmış da siz development ekibine yeniden yaptırmış gibi pazarlayın.

Sonuç

Her şeyden önce toplantı öncesinde görüşeceğiniz kişiyi tanıyın, o kişi hakkında ne kadar fazla kişi ile görüşürseniz, hedefinizi tanımanız o kadar kolay olacaktır. Sinirlenme ya da savunma asla size bir satır daha fazla not aldırmayacaktır. Uyumlu olun, anlayışlı olun, gerekirse projeyi yapmış olan ekibi satın ama o bilgiyi o insandan söküp alın. Çetin ceviz olmak önemli bir noktadır fakat bilgiyi almak daha farklı bir nokta.

Yazılım’ın Boş Bir İş Olması

Şimdi aynı meslek grubundaki arkadaşlar bana kızabilirler, hatta başlığı okuyup eksiyi de basabilirler, fakat yazının sonuna kadar dayananlar anlayacak ki biz de biliyoruz da konuşuyoruz. Sonuçta bu meslekte az denemeyecek kadar çalışan birisiyim ben de1. Önce madde madde bu mesleği ele alalım, korkmayın gayet mantıklı şeylerden bahsedeceğim – şu an için bana mantıklı geliyor da olabilir. Öncelikle belirtmem gerek ki burada bahsettiğim tüm bilgiler kendi kişisel görüşlerimin yansımasıdır, başka bir amaca hitap etmemektedir.

Yazılım’ın Diğer Tanımı

Yazılım dediğimiz şey, şu an bu yazıyı okumanızı sağlayan teknolojinin ihtiyaç uyduğu mantığı, bilinci, yöntemi belirleyen sistemlerdir. Basitçe ele alırsak yazılımcı dediğimiz de bu sistemin oluşmasını sağlayan insanlara verilen genel ad, aslında bu meslek grubundaki insanların hepsinin başka adları da var, örneğin veritabanı uzmanı ya da yazılım mimarı gibi isimleri. Fakat bu blog içerisinde kimseye ayrımcılık göstermeyeceğimiz için, hepsine yazılımcı diyeceğim.

Basit tanımları geçtiğimize göre esas tanımlara geçebiliriz – sizi burada Boş işler yazılımcısının harikalar diyarına alıyoruz. Yazılım dediğimiz şey, esasında soyut bir şeydir ve soyut kavramlar kendi içlerinde ikiye ayrılırlar;

  • Boş soyutluk durumu: Sevgi, Aşk, Nefret gibi tanımlayabileceğimiz şeyler boş soyut kavramına girer.
  • Dolu soyutluk durumu: Bilgi, Felsefe, Din gibi tanımlayabileceğimiz şeyler de dolu soyut kavramına girer.

Yazılım da “dolu soyutluk durumu” içerisinde ele alabileceğimiz bir yaratımdır. Bu soyutluk durumunda, madde açısından bir şey yoktur. Sadece bilgi ve onun yansıması vardır. Bilgi ile diğer insanlara bir şeyler anlatabilir, onlara bir şeyler katabilirsiniz. Yazılım ile de hem kişiye, hem de teknolojiye bir şeyler anlatabilir, istediğiniz şeyi yapmasını sağlayabilirsiniz. Fakat yazılım da bilgi gibi somut bir duruma geçmeden önce tamamen soyut olarak ele alınan temellere dayanmaktadır.

Yazılım’ı Babaya Anlatmak

Başlığı okuyunca yüzünüzde oluşan ifadeyi gözlerimde görür gibiyim, genelde bu ifade küçük çocukların ebeveynlerine çok sevdikleri bir çizgifilmi alnatırken ortaya çıkmakta. Konudan şaşmadan devam edeceğim, soyut olayların en büyük sorunu başka insanlara anlatılmasıdır. Zira somut bir şey her daim paylaşılması en kolay şeydir, bir odunu başkasına göstererek, dokundurarak, koklatarak, hatta ve hatta ısırtarak anlatabilirsiniz ama bir yazılımda bunu yapamazsınız. “Gösterebilirsiniz, dinletebilirsiniz, robot kollarla dokundurabilirsiniz” demeyeceğim zira bunlar maalesef yazılımın sonrasında çıkan şeyler sayesinde olur. Yazılım geliştirdiğiniz IDE’de bulunan kodları gösterin bakalım karşı taraf ne anlayacak ondan. Bu maalesef soyut kavram içerisinde çalışan insanların kaderinde var.

Yazılım vs …

Bu meslek ile uğraşıyorsanız, siz de çok iyi biliyorsunuz ki toplumun gözünde asla bir marangoz kadar değerli olmayacaksınız. Sadece toplum olsa, aileniz öncelikli gelecek, sonra kız arkadaşınız, belki de çocuklarınız. Hiç bir zaman bir marangoz olamayacaksınız, çünkü o bir odunu alıp, ondan kereste almaktadır – burada marangozlardan saygıyla bahsedilmiştir, hayalimdeki meslek oydu – fakat siz bir avuç kelimeyi, çok az kişinin bildiği bir dile sökerek bir sonuç, bir sayfa, bir uyarı ekranı çıkartmak zorundasınız. Ayrıca sadece elektronik eşyalara bağlısınız, bir marangoz meyva bıçağı ile bilişer yapabilirken siz elinizde bir akıllı telefon olmadan ne yapabilirsiniz ki?

Görsel somut algılar maalesef içinde bulunduğumuz toplumun temelinde yatmaktadır. Yazılım maalesef bu mantığa uygun bir meslek ya da iş değişdir. İlerleyen zamanlarda belki teknolojinin gelişmesi ile bu konuda daha somut adımlar elde edebiliriz, ne bileyim maatbaa makinası gibi bir alete kodları yerleştirip tuşuna basınca yazılım falan çıkar aletin diğer ucundan, olur bir şeyler.

Felaket Senaryoları

Bu geyiği yapmadan bu blog girdisini bitiremezdim, yapamazdım, anlayın beni. Olası “Dünyanın Sonu” senaryolarını kafanızdan geçirin, çok dalmayın hızlıca geçirin. Sunucuların çalışmadığı, elektriğin olmadığı, teknolojinin 16.yy’a gerilediği bir dünyada siz ne iş yapabilirsiniz? O dünyada bir Felilozofa ne kadar ihtiyaç varsa bir Yazılımcıya da aynı ölçüde ihtiyaç vardır. Fakat bir marangoz öyle mi, alır eline aletlerini, barikatını kurar, mobilyalarını inşa eder. Somut adımlar atar ve prensesi kurtarır, siz anca ona bağımlı yaşayan sidekick’den öteye geçemezsiniz.

Hayatta kalmak için bile yeterli olmayan bir mesleğe mendup kişiler olarak bana Yazılım‘ın boş bir iş olmadığını maalesef kanıtlayamazsınız. Diğer insanlara kanıtlayabilirsiniz, hem de çok basit bir şekilde; Onlara sadece ne kadar maaş aldığınızı söyleyin.


  1. Sen mi büyüksün, hayır ben büyüğüm ben Yaşar Usta! 

Android Üzerine

Mobil, yazılımın geleceğidir!

Bu lafın doğruluğu tartışılamaz. Adamlar haklı, ne desek de haklı. Ben de bu haklılığa katılsam da, imkanlar izin vermediğinden pek yatırım yapamadım. Gel gör ki hiç umulmadık bir zamanda, bir insanın, şirketin ERP1 sistemine giriş yapan bir Android applikasyonunu piyasaya çıkartması ile ben de Mobil piyasına giriş yapmış bulundum. Tabii öncelikle o arkadaşa olan sinirimi bir kenara bırakmam da gerekmedi diyemem, burada dikkat etmemiz gereken nokta, şirket içinde kelle avını başlatmak yerine, bu arkadaşın açtığı karmaşayı bir nevi kâra çevirmek. Arkadaşımız iyiliklerle yazmış olsa da, şifreleri alıp kopyalamadığının garantisi maalesef yok, e biz de oturup bekleyemeyeceğimize göre kendi programımızı çıkartmalıydık.

Hikaye kısmı

Burası bildiğiniz hikaye kısmı. Gidilir Project Manager’dan onay alınır, IT Manager’dan onay alınır ve şirketin Android alanında uzman yazılımcısı bir gün kapatılarak proje hemen yazılmaya başlanır. Proje dediğime de bakmayın, bildiğin ERP sistemine link verecek olan, WebView aplikasyonu işte. Tasarımcıdan bir logo alınır, proje arkadaşın el hızlılığı ile 4 satırda halledilir ve Google Play Store‘a yüklenir2. Artık Google’ın onayı sonrasında duyuru yapmak kalmıştır. Burada dikkat edilmesi gerekilen nokta ise – esasen hepimizin kaçırdığı -; Hiç bir proje, bu kadar kolay yazılmaz!

Sorunlar

Play store’da çıkan programın üzerinde site açılır, kafalar rahattır ya da öyle sanılır. Sonrasında hemen geri dönüşler gelmeye başlar. Sen tabii git 2600 kişilik şirkete “Android’e yazılım yaptık eki eki” diye mesaj at, onlar da indirsin ve sorunlar başlasın. Sorunları ele alırsak;

  • Dosya download edemiyoruz,
  • Ekran çok küçük geliyor,
  • Raporlar sayfası açmıyor,
  • …ve bir takım eleştiriler…

Çözümler

İşte bugün tüm gün ilk noktaya kastık. Önce “Ya tabii WevView’de download yakalamamız gerek, ondan sanırım” dedik, değilmiş. Sonra “Başkalarında da olmalı bu sorun, bir de Google’a soralım” dedik, başımıza bela aldık. Sorunun iki yönlü ele alınması gerekiliyormuş;

  1. Android ayağı,
  2. ERP ayağı.

Çözümün Android Ayağı

Şimdi şöyle ki, siz böyle bir uygulama geliştirdiğinizde Android işletim sistemi için WebView kullanıyorsunuz, bu component de gidip sizin sitenizi açıyor fakat o kadarla bitse ne kadar güzel – iOS’da öyle3. Bu component bir nevi browser olduğu için bunu ayarlamanız ve buna uygun değişiklikler yapmanız gerekmekte. Bunlara örnek olarak javascript’in window.Open() methodu gibi kullandığınız noktaları açmanız4. Sonrasında isterseniz her açılan sayfanın uzantısına bakarak onu download edebilir, browser’a yollayabilir, DownloadManager’a göndermeye çalışabilirsiniz. Bu kısmi ayarlamaları yapmaya özen gösteriyoruz.

Çözümün ERP Ayağı

ERP her eşye hazırlıklı diyemeyiz tabii, o kısımda da yapılması gerekilen güncellemeler var. Bunlar tabii downloadManager.aspx dosyasında yapılmalı. Önce her gönderdiğimiz dosyanın header özelliklerini elden geçirmemiz gerek; Content-Type: application/octet-stream bunlardan biri. Sonrasında – hatta hiç ekstra eklemeden – Content-Disposition: attachment; filename="test.PDF" ekliyoruz. Bu ikinci kısımda “Content Disposition” kısmında dikkat etmemiz gereken noktalar ise; birincisi filename=”” olmalı yani filename’i çift tırnak içinde yazmalı, ikincisi ise uzantının büyük harflerle yazılması.

Çözümün Açıklaması

Android tarafında internetten bulduğunuz ilk kodu yapıştırdığınızda her şeyin güzel olacağını sanıyorsunuz ama öyle olmuyor, sırası ile gerçekleşen işlemler;

  1. WebView’dan proje açılır ve bir download linki tıklanır
  2. webView.setDownloadListener() kodu çalışır, bu kod ilgili sayfayı default browser’a gönderir
  3. Default browser POST yapar, aa bu bir file imiş ben bunu DownloadManager’a göndereyim der
  4. URL, Download Manager’a gelir. Bir kez de burada POST yapılır.
  5. Response Header dosyaları okunmaya çalışılır – okunamaz – ve dosya indirilir.

Kusura bakmayın ama böyle aşkın ben ızdırabını… Bu yöntemden kurtulmak için yaptığınız onca çalışma aslında daha da çok batmanıza sebep veriyor, Download Manager’a direk gönderim yapılabilir tabii bunu ben deneyemedim, vaktim yetmedi a dostlar. En kötü bir POST işlemi ile bitirirdik durumu.

Açıkcası bu kadar salak saçma bir mantıkla ilk defa karşılaşıyorum, kullanırken de sinirlendim ama sonuçta Android benim işletim sistemim değil. Bu işlemleri yapmamıza rağmen halen çalışmıyorsa – aslında çalışmıyorsa kodunuz yanlış, buradan eminiz, fakat kodunuz doğru ama yine de çalışmıyorsa – elimizde iki sonuç var demektir;

  • Download yapmaya çalıştığınız URL, korumalıdır.
  • Elinizdeki test aletinin Android sürümü uygun değildir.

Bizim durumumuzda her ikisi de kaynaklanmaktaydı. Şöyle ki siz bir dosya download ederken, o downloadManager.aspx dosyasına – artık hangi dilse – Session bazlı bir uygulama yaparsanız ya da HttpContext bazlı bir güvenlik yaparsanız, URL sürekli oradan buraya taşınacağı için bu değerleri yitirmekte ve sizi engellemektedir. Çok pis bir durum değil mi? Kendi güvenlik kodunuz tarafından alıkonmak!

Çözüm için, Android App içine gömeceğiniz bir URL validator kodu ile, sizin ERP projenizde bu validator string’i kontrol etmeniz. Eğer doğru ise kim olduğuna bakmadan download ettirmeniz. Ha bu teorik olarak bir güvenlik açığı yaratmaz mı? Bence babalar gibi yaratır ama elimizde maalesef çözüm olarak bu bulunmaktadır.

Ayrıca dikkat edelim test yaparken, ne kadar etrafınızda Android telefon varsa test edin, birinde çalışan kod diğerinde çalışmamakta ve bu sinir katsayılarını zıplatmaktadır. Siz çalışıyorsa bozmayın, direk yayına alın. Gerisini kullanıcılar düşünsün.

Bu konu ile ilgili devam eden yazılar tabii ki olacak, o zamana dek görüşmek üzere…


  1. Enterprise Resource Planning [Wikipedia] (http://tr.wikipedia.org/wiki/Kurumsal_kaynak_planlaması “Kurumsal Kaynak Planlaması”) 
  2. Sizden 25$ gibi bir ücret alıyor ama şirket adına gösterebiliyorsunuz. 
  3. Bu kısımla ilgili detaylı bir post hazırlanacaktır. 
  4. Bu “Sorunlar” kısmının üç numaralı sorununun çözüm noktasıdır, gözlerden kaçmasın.