Bir Haftasonu Projesi: hangisuv.net

hangisuvHerşey bizim düldülün (2011 Hyundai ix20) 100 bin km’ye yaklaşmasıyla başladı.. Oncağızı alalı 3 sene oldu. 43 bin km’de almıştık. Şimdi onu elden çıkarıp yerine ne alacağız derdine düştük. Gönlümüz dağ bayır gezmekte olduğu için SUV (sport utility vehicle / spor amaçlı araç) tabir edilen nispeten yerden yüksek bir araç bakıyoruz ama hepsi tuzlu. Normalde 2. el alırız mutlaka fakat bu kez nasip olursa ÖTV indirimi imkanı olabilir diye sıfırlara bakmak icab etti.

SUV’lar hacimli arabalar olduğu için tüketimi uygun olsun diye dizel araçlar daha cazip geliyor. Fakat bu sefer de fiyat çok yükseliyor. Her vatandaş gibi biz de bol bol “kilometreye vurunca benzinli de dizel de aynı paraya çıkıyor abi” muhabbetleri yapınca bunu artık matematiğe dökmeye karar verdim. Bir excel dosyası hazırlayıp sevdiğim ama benzinli olan Hyundai Tucson ile çok sevmediğim ama fiyatı uygun olan Renault Kadjar’ı ve fiyatını aşırı pahalı bulduğum Nissan Qashqai’yi araçların tüketim değerlerinin biraz yukarısını baz alarak, yıllık kat ettiğim ortalama şehir içi / şehir dışı yol miktarını da işin içine katarak  5 yıllık projeksiyonla (ötv indirimli araçlar 5 yıl sonra satılabiliyor, 5 yıl içerisinde satılırsa ötv ödeniyor) hesapladım.

Screen Shot 2016-04-25 at 16.33.12Tabi bir iki modelle bu işi yapmak kolay fakat onlarca marka var. Hepsine nasıl kolayca bakabilirim diye düşünüp bu hesap kitabı bir mikrosite ile sunmaya karar verdim. Domaini aldım ve işe koyuldum. Laravel 5 sağolsun pıt diye projeyi oluşturmamı sağladı. Migration ile veritabanını kolayca oluşturdum. Verileri elle gireceğim için panel derdine düşmedim.

İlk gecenin sonunda hesap kitap işleri dahil %70 seviyelerinde siteyi tamamlayıp sabah 7 gibi yattım. Aynı gün 11’de kalkıp güzel bir kahvaltı sonrasında eşimle YTÜ’ye geldik. Ama ofise geçmedik. Orta bahçede biraz dolanıp kütüphanenin hemen yanındaki V-One kafeye geçtik. Burası yeşilliklerin içerisinde olduğu için çok hoşuma gidiyor. Evimiz yahut ofisimiz  böyle bir yeşilliğin içerisinde olsa ne güzel olurdu. İçerideki saçma müzik olmasa yahut en azından o kadar bağırmasa harika bir mekan. Burda 3-4 saat oyalandık, %90’lara  kadar tamamlamış oldum. Kalanı da evde bir kaç saat içerisinde halledip siteyi yayına aldım.

IMG_7123

Tabi henüz emekleme aşamaları. İçerisinde çok fazla marka/model olmadığı gibi kullanım arayüzü de çok iyi değil. Sağolsun arayüz konusunda Bootstrap çok güzel ama sonuçta insanların rahatça kullanabileceği bir UX (User experience / kullanıcı deneyimi) ortaya koymak için biraz tecrübe ve geri besleme lazım. Bakalım mikrositemiz iş görecek mi :)

http://hangisuv.net

WordPress’de YouTube videolarının düzgün görüntülenmesi için plugin: Fluidvids

Sayfalarınıza embed olarak eklediğiniz YouTube videolarının sayfanın genişliğine ve bağlandığınız cihaza göre tam oturması yani responsive olması için CSS ile birazcık takla atmanız gerekiyor. Bootstrap kullanan sayfalarda bunun çözümü hazır zaten: http://getbootstrap.com/components/#responsive-embed

WordPress sayfalarında bu taklayı otomatik olarak atmayı sağlayan bir plugin mevcut: Fluitvids

Kurup aktive etmekten başka ekstra hiç bir işleme gerek yok. Daha önce eklediğiniz YouTube videoları için de işe yarıyor. Tavsiye ederiz.

Screen Shot 2016-04-06 at 16.46.29

Screen Shot 2016-04-06 at 16.46.18

Balkan Tatili mi kazandık :)

btatiliGeçen hafta bir aydır büyük bir gizlilikle üzerinde çalıştığım bir planı işlettik ve başarılı bir şekilde amacımıza ulaştık. Web teknolojileri ile doğrudan alakalı olduğu için buraya da yazmak istedim.

Planım eşime 10. evlilik yıl dönümü olarak, yıllardır gitmeyi planladığımız Balkan tatilini  sanki bir tur şirketinin düzenlediği yarışmayı kazanmış gibi hissetirmekti. Tatil önceden hazırlanmayı icab ettiren bir süreç olduğu için yıldönümünde sabahın köründe “ta daaaa, hadi hazırlan 2 saat sonra uçağımız var, balkanlara gidiyoruz” desem olmazdı herhalde :))) O nedenle bu yarışma olayını düzenledim, hem hatırası olsun, hem de böyle bir yarışma tecrübesi yaşasın istedim :)

Tatili ayarlar ayarlamaz önce bir domain satın aldım. Şansıma balkantatil.com domaini müsaitti. Bu domainde kullanmak üzere ofisteki grafik direktörü arkadaşım Melih Gengönül’den güzel bir tema bulmasını rica ettim. Bu temayı allayıp pullayıp çok fazla detaya girmeyen bir tur şirketi havası verdik. BalkanTatil.com için Twitter hesabı açıp arasıra çeşitli fotoğraflarla paylaşımlar yaptık. Instagram hesabı da açtık. Facebook hesabı da açacaktım ama kimliği gizleyemem, Facebook hesaplar arasında bir ilişki bulup bana ait olduğunu hissettirir diye çekindim.

Ayrıca bizzat tasarlayarak büyücek bir zarf, şartname ve içinde 5 soru olan ayrı bir zarf daha tasarladım. Bunları çok amatör durmasın diye kartonumsu bir kağıda bastırdım. Geçen süre içerisinde kısa kısa videolar da çekip bunları son bir kaç gün içerisinde montajlayıp sunucuya yükledim. Her şey hazır olunca da ofisteki stajyerlerden birinden rica edip zarfı eve kargolattım :)

Yarışma şartnamesinde “soruları Periscope üzerinden #balkantatil hashtagi ile yayınlayıp çözmelisiniz” demiştik. Şahika Hanım sorular eline ulaşınca internetten bana yazarak “akşam eve geldiğinde beraber yapalım” dedi. Bunu hiç beklemiyorduk :D Hemen BalkanTatil Twitter hesabından Şahika hanımı takip ettim, sağolsun o da takip etti. Feyk olduğumuzu hissedebileceği için riskli bir hareket idi ama mecburdum :) Twitter doğrudan mesaj servisi ile Şahika Hanıma “kargomuzun size ulaştığı bilgisini aldık, izleyici kitlemiz için 12.00-15.00 arası yayın yapmanızı rica ediyoruz” dedim :) Saat 3’e geliyordu zaten :))) İyice sıkışınca fırsatı kaçırmamak için tek başına yarışmaya mecbur kaldı..

Devamını anlatmayacağım, aşağıdaki videodan izleyebilirsiniz :)

Daha dün Turkcell 3G Blogger Buluşmasındaydık

turkcell32009 Temmuz ayında Taksim Odabaşı’nda Turkcell’in düzenlediği 3G lansman buluşmasına gitmiştik. Nerdeyse 7 sene önce!

3G’nin gelmesine bir ay vardı. Turkcell hazırladığı ürünleri bize tanıtıyordu. Görüntülü görüşmeye imkan veren LG’nin telefon özellikli saati çok beğenilmişti.

Eşimle o sene ilk akıllı telefonlarımızı almıştık. Ben malesef 1050 TL’ye içinde Windows Mobile 5.6 olan minicik ekranlı Samsun Omnia almıştım, eşime de 1250 TL’ye içinde iPhone OS (iOS değil) yüklü olan iPhone 3G almıştık. Bunları ödemek epey sürmüştü :) Ben henüz daha Apple dünyasına giriş yapmamıştım, az buçuk Windows programlama bildiğim için Windows yüklü bir telefon daha mantıklı gelmişti. Daha rahat uygulama yazarım diye düşünmüştüm. Malesef 200 TL’lik bir farkla mutluluğu kıl payı kaçırmış, bir kaç sene sonraya ertelemiştim.

Yanılmıyorsam o yıllarda henüz Android piyasada yoktu. Yoksa Linux dururken Windows bir telefon tercih etmezdim diye düşünüyorum.

Asıl o yıllarda ne yoktu biliyor musunuz? Apple’ın dışında hiç bir markanın uygulama dükkanı yoktu. Haliyle Windows Mobile için de yoktu. Eşim istediği uygulamayı AppStore’dan indirip telefonuna kuruyor, maillerine rahatça bakıyor, browserda istediği gibi sitelere giriyordu. Bense dandik dokunmatik bir telefonu tırnaklarımla çalıştırmaya, zar zor bulduğum uygulamaları düzgün yerlerine tıklamak için tırnağımla yahut telefonun kalemi ile akla karayı seçmeye uğraşıyordum.

En çok da canımı uygulama dükkanı olmayışı sıkıyordu. Bu işi çözmek için bir uygulama dükkanı yazmaya niyetlendim. Malesef az buçuk VisualBasic bilgim o zamanın .Net teknolojisini çözmeme yetmedi. O yıllarda da php tabanlı web uygulamaları yazdığımız için .Net’in fikri bile hoş gelmemişti zaten. Ben de aşinası olduğum Flash ile bir şeyler yapabilir miyim diye baktım. Şansım yaver gitti. Flash’la Apple’ın AppStore’una çok benzeyen bir uygulama yazdım. MobilStore.org domaini altında bir WordPress blogu kurarak dükkana koyacağım uygulamaları bu sistemin veritabanından gelecek şekilde ayarladım. Böylece ayrıca panel yazmak vs işleri ile ilgilenmeme gerek kalmadı. Beğendiğim, eli yüzü düzgün 160 civarında uygulamayı bu sisteme koydum. Hem de ekran çıktıları ile birlikte tıpkı AppStore’daki konfora benzesin diye atmadığım takla kalmadı. O kadar ki, flash uygulamanın içerisine iPhone’daki klavyenin ve uyarı mesajlarının birebir aynısını bulup koydum. Bir nebze olsun telefonumda iPhone’da yapılabilenlerin bir kısmı yapılıyordu, çok sevinmiştim. Blog üzerinden bunu da erişebildiğim kadar kullanıcıya sunuyordum.

Screen Shot 2016-03-30 at 23.22.51

İşte bu Turkcell 3G lansmanında da tanıştığım insanlara hazırladığım bu uygulamayı göstermiştim. Epey ilgilenenler çıkmıştı. Zaten kullananlar da vardı. Sonra ne oldu, Microsoft kendi uygulama dükkanını çıkardı. O gün blogun kepengini kapattım. Sonra Microsoft komple işi eline yüzüne batırdı. Android rüzgarı onu bir kenara itti. Şimdilerde toparlanmaya çalışıyor ama hala bir fırın ekmek yemesi lazım.

Bu hatıralar dün gibi gözümüzün önündeyken 2 gün sonra inşallah 4.5G’ye geçeceğimizi bilmek insana zamanın ne kadar çabuk geçtiğini bir kere daha gösteriyor..

O değil de, TombRaider çıkalı 20 sene olmuş! Beni asıl o yıktı..

3G Blogger Lansmanı:

http://www.yakuter.com/turkcell-3g-blogger-partisinin-ardindan/

http://webrazzi.com/2009/07/03/turkcell-3g-blogger-partisinde-gelecegi-hissettik/

Turkcell 3G Blogger Partisi from Webrazzi on Vimeo.

Screen Shot 2016-03-30 at 23.21.16

Screen Shot 2016-03-30 at 23.21.42

Dîni Sözlük iOS Uygulaması Yayında

dini_sozlukBir ay kadar evvel İhlas Holding AŞ tarafından hazırlanan Dîni Sözlük isimli bir eser olduğunu öğrendik. Böyle özenle hazırlanmış güzel bir kaynak varsa bunu iOS uygulaması neden olmasın deyip 1-2 gün içerisinde Şahika Hanım’ın katkılarıyla çok sade, şık bir tasarım yapıp uygulamayı hazırladık. Sözlüğün kaynağını Huzur Pınarı sağladı. Oradaki büyüklerimize uygulamayı yayınlamaya müsade ettikleri için ayrıca teşekkür ederiz.

Dîni Sözlük’te 3500 dini terim bulunuyor. Ebruli Sözlük’te daha önce yaşadığımız acı tecrübeler olduğu için bu kez işimizi sağlam yaptık. Uygulamayı internete gerek kalmadan kullanabilir, sık karşılaştığınız kelimeleri daha kolay erişmek için favorilere ekleyebilirsiniz.

Uygulamayı buradan indirebilirsiniz.

Güle güle kullanalım :)

Not: İnşallah kısa bir süre sonra Android versiyonu da gelebilir..

1screen322x5722screen322x572

Kitapi QR Reader – iOS – ve Uygulama Dükkanları Farkları

kitapi-qr-reader-iphoneBir önceki yazıda Android versiyonunun yayında olduğunu bildirdiğimiz Kitapi QR uygulamasının iOS versiyonu da nihayet Apple’ın derin incelemelerinden sonra yayına girdi.

Google ve Apple arasında uygulamaları kabul etme açısından başından beri çok büyük farklar var.

Apple her geliştiriciden yıllık 100 $ talep ediyor. Bu parayı ödemeye devam etmediğinizde uygulamalarınıza erişilemiyor. Yani artık kod yazmak istemiyorsanız dahi mevcut uygulamalarınız App Store’da kalsın diyorsanız 100 $ ödemeniz gerekiyor.

Öte yandan Google sadece bir kereye mahsus 25 $ istiyor, başka bir şey istemiyor. Bu geliştiriciler için çok iyi. Tabi Google bunu babasının hayrına böyle yapmamıştır. Bu sayede Apple’dan çok sonra açtığı Play Store’daki uygulama sayısını hızla artırmış oldu. Taktik güzel :)

Fiyat dışında başka büyük farklılıklar da var iki uygulama dükkanı arasında..

App Store’da olduğu gibi Play Store’da da uygulamayı yüklerken çeşitli kritlerlere göre taahhütlerde bulunuyorsunuz. Ona göre uygulamanızın hangi yaş kriterine uygun olduğu gibi değerler ortaya çıkıyor. Ama ne olursa olsun Google’daki uygulaman gün içerisinde mutlaka yayına giriyor. Apple ise çok ince eleyip sık dokuyor (ince elemek? incelemek kelimesi burdan mı doğdu acaba?) Kitapi QR Reader uygulaması gibi çok basit, tek ekranlı bir arayüzü olan uygulama için bile “bunun nasıl kullanılacağını anlamadık, gönderdiğiniz bilgilerle giriş de yapamadık, bir video çekip bize anlatın” diye mesaj gönderdiler. Biz de hazırladığımız yazının sonundaki YouTube videosunu gönderdik. İkinci review’larda süreç hızlı olur, 1-2 güne yayına alırlar sandık ama yine bir hafta daha beklemek gerekti.

Tabi bu yaklaşımların artıları eksileri tartışılır. Apple bu kadar detaylı incelemesine rağmen App Store’da hala “instagram kullanıcı sayınızı artırma programı” gibi garip uygulamalar bulunabiliyor.

Apple’da uygulama inceleme süresi biraz daha kısa olsa, yıllık aidat da 25 $ olsa, bilhassa gençler daha çok uygulama gönderirler..

Bir de şunu merak ediyorum, bilen varsa lütfen yazsın. Apple Türkiye’de ofis açtığı sene developer üyelik aidatını 9 taksitle ödeyebildim diye hatırlıyorum. Hatta buna sevinip genç arkadaşlarıma bildirmiştim. Sonra ne hikmetse bu imkan ortadan kalktı.. Bu böyle miydi acaba? Yoksa ben yanlış mı hatırlıyorum :(

Kitapi QR Reader’a geri dönecek olursak..

Uygulamanın amacı şudur: Kitapi kimlik kartlarındaki ve kitapların üzerindeki QR etiketleri okuyup o esnada açık olan browser ekranında ilgili alana bu qr etiketin yapıştırılması ve form varsa formun gönderilmesi. Bunun çalışma mantığı bir önceki yazıda anlatıldı. Orada Node.js’i 3000 gibi farklı bir porttan çalıştırdığımız için Milli Eğitim Bakanlığı’nın ağına bağlı olan okullarda bu port kullanılamıyordu. Emeklerimiz bir nevi büyük ölçüde boşa gitmişti. Biz de bu sorunu ortadan kaldırabilmek için elimizi bir kez daha  cebimize atıp sadece node.js’in çalışması için ayrı bir sunucu ayarladık. Node.js burada klasik web portu olan 80’i kullanıyor. MEB’de 80 nolu port serbest olduğu için herhangi bir sıkıntı kalmadı böylece.

Fakat bir iyileştirme daha yapmak icab ediyor. Kitapi QR Reader şuan Kitapi api’si üzerinden Node.js’in soketine erişiyor. Halbuki doğrudan uygulama üzerinden erişebiliriz. İnşallah bir sonraki güncellemede böyle yapıp süreci daha da hızlandıracağız :)

 

Tablet uygulama mobil uygulama doğurdu!

Screen Shot 2016-03-03 at 13.00.24Tam bu başlıkta yazdığımız gibi oldu!

Neredeyse bir yıldır  yürüttüğümüz gönüllü girişimimiz ücretsiz kütüphane otomasyon projemiz Kitapi için inovatif sayılabilecek bir iPad uygulaması (KitPad) hazırlıyorduk. Bu iPad kütüphanenin içinde, duvarda sabit duracak, çocuklar da iPad’in QR kod okuma özelliğinden faydalanarak Kitapi üzerinde ödünç alma, teslim etme, kitap borcu sorgulama gibi temel işlemleri kimseyi meşgul etmeden kendi başlarına yapacaklardı. İlk etapta beş fonksiyonu bulunan bu uygulamanın henüz ortalarındayken aklımıza şu geldi:

iPad’le QR kod okuyup Kitapi’nin apisi üzerinden veri çekebiliyorsak, bunun tersini de yapıp Kitapi’ye okuduğumuz QR’ları gönderip akıllı telefonumuzu QR okuyucu / QR Reader olarak kullanabilir miyiz diye düşündük.

Aslında bunu yapan bağımsız uygulamalar var. Bunlardan biri CLZ Barry idi. Biz zaten nerdeyse bir yıldır bütün üye kütüphanelerimize bu uygulamayı tavsiye ediyorduk. Fakat ücretli bir uygulama olduğu için insanların cebinden para çıksın da istemiyorduk.

QR kod okuyan pek çok uygulama var aslında. Çoğu da ücretsiz. Fakat CLZ Barry okuduğu QR kodu bilgisayarınıza aktarabiliyor. Yani elinizdeki telefon sadece QR kodu okumuyor, onu bilgisayara da aktarıyor. CLZ Barry bunu sağlamak için Mac ve Windows platformu için ücretsiz minik bir program yazmış. Telefonunuza kurduğunuz uygulamayı çalıştırdığınızda size bir ID veriyor. Bu ID’yi bilgisayarınızdaki minik programa kaydettiğinizde telefon ve bilgisayar senkron hale geliyor. Böylece telefondan okuttuğunuz QR kod bilgisayarınızda imleç neredeyse oraya ufak bir internet gecikmesiyle birlikte yansıyor.

İşte biz bunun aynısını yapmak ve ücretsiz sunmak istiyorduk zaten. Ama bunun için hem Mac, hem Windows hem de mümkünse Linux için kod yazmak gerekiyordu ki biz sadece iPhone için kod yazabiliyorduk.

KitPad’in uygulamasını kodlarken sadece Kitapi’ye mahsus QR Kod okuyan böyle uygulamayı ekstra hiç bir yazılıma ihtiyaç duymadan yazabileceğimizi farkettik. Yani amacımız, telefondan okunan kodun Kitapi’de istediğimiz alana yansımasıydı sadece.. CLZ Barry gibi genel amaçlı değil, Kitapi’ye mahsus bir QR Okuyucu istiyorduk.

Node.js ile bu pek ala  mümkündü. Şöyle ki; iPhone QR kodu okuyacak, api üzerinden Kitapi sunucusuna gönderecek. Sunucu bunu bir dosyaya yazacak. Node.js dosyadaki değişikliği takip edip o esnada açık olan Kitapi sayfası hangisi ise ona geri bildirip yapıp “falanca QR kod geldi, ne yapacaksan yap!” diyecek. Kitapi de böyle bir javascript çağrısı geldiğinde ne yapacağını biliyor olacak. Yani gelen kodu ilgili alana yapıştırıp ilgili formu submit edecek, gönderecek!

İşte bu mekanizma pekala olurdu.. Zaten Kitapi’de üyelerin loglarını takip etmek için node.js kullanıyorduk. Alt yapı hazırdı. Node.js’in dosya takip etmesini sağlayan fonksiyonlarını da öğrenip kodumuzu yazdık. Bir saat içerisinde denememizi yaptık. Gayet başarılı bir şekilde çalışıyordu. Biraz internet gecikmesi vardı elbette ama CLZ’nin mimarisinde de bu vardı. Dolayısı ile o kadar kusur kadı kızında da olur deyip hızlı bir şekilde nihayi iOS uygulamasını hazırlamaya koyulduk.

Ofiste bu çalışmalardan bahsedince arkadaşlarımızdan sevgili Sinan Kambur Android versiyonunu gönüllü olarak yapmak istedi. O kadar hızlı kodladı ki, ben daha iOS versiyonunu App Store’a göndermeden android versiyonunu tamamlayıp Play Store’a yükledik. Bir iki saat sonra yayına girdi bile. Uygulamayı benim kişisel hesabımdan yükledik ama burdan bir kez daha tekrar edeyim ki Android kodunu tamamen Sinan Kambur yazdı. Kendisine çok teşekkür ederim.

Android versiyonun yayına girdiği akşam iOS versiyonunu da Apple’a gönderdik.. İncelendikten sonra yayına girmesini bekliyoruz.

Bu uygulamanın çıkmasına neden olan iPad uygulaması KitPad ise hala bitirilmeyi bekliyor :) Onun demo videosunu da KitapiNet kanalımızdan izleyebilirsiniz.

Android uygulamamızın videosu aşağıdadır.

Ebruli Osmanlıca Sözlük Güncellendi

ebruli_sozlukEbruli Osmanlıca Sözlük uygulamamızın bir önceki sürümünde ilk çalıştırıldığında veritabanını hazırlarken seçtiğim metod başıma bir sürü işler açmış, AppStore’da kötü kötü yorumlara maruz kalmıştım.

Bir önceki blog yazımda mevzuyu uzuun uzun inceleyerek başka developer arkadaşlar aynı hataya düşmesin diye yeni versiyonda kullandığım metodu anlattığım için bu yazıda sadece yeni versiyonun çıktığını haber vermek istiyorum.

Yeni versiyonu AppStore’a 14 Şubat’ta göndermiştim, 2 günde incelenip yayına alınması iyi oldu. Mobilden bağlıysanız uygulamayı şuradan indirebilirsiniz.

 

Core Data verisini dolu kullanmak – iOS

coredataİlk ve tek ücretli iOS uygulamamız Ebruli Osmanlıca Sözlük’ün son sürümündeki bazı teknik sıkıntılar nedeniyle epey kötü yorum almış bir developer olarak diğer işlerimden vakit ayırıp bu sorunlu versiyonu düzeltmeye karar vermiştim. Yılbaşında bu fırsatı değerlendirip kodu gözden geçirmiş, sorunlu yerlerin civatalarını sıkılaştırmıştım ama istediğim gibi olmamıştı. Araya bir de gâvurların noel tatili girince uygulamayı AppStore’a gönderememiştim.

Bu gece Ebruli’yi kökünden halletmeye karar verdim.

Sorun şuydu: Uygulamanın son versiyonunda Apple’in kendi veritabanı sistemi olan Core Data’yı kullanmak istemiştim. Core-Data’nın kendisi de zaten SQLite tabanlı bir sistem ama kötü bir kod olmasın, abudik gubidik sqlite işlemleri yapmayayım diye bu yolu seçmiştim. Seçmez olaydım!

Uygulamanızı yazarken Core Data modelinizi oluşturabiliyorsunuz fakat ortaya çıkan Sqlite dosyasını doğrudan göremiyorsunuz. Uygulama çalışırken o dosya yoksa otomatik oluşturuluyor. Yani modelinizden sıfırdan üretiliyor. İşte bu noktada bizim Ebruli Sözlük gibi önceden doldurulması gereken 13 bin kelimelik bir veritabanı ihtiyacınız varsa apışıp kalıyorsunuz.

Ebruli Sözlük’ün son sürümünü yazarken bu sorunu çok önemsememiştim. Amele bir yöntemle 13 bin kelimelik csv datası oluşturup projeye dahil etmiş, uygulama ilk açıldığında Core Data verisinin boş olup olmadığına bakıp csv’den veriyi doldurma yoluna gitmiştim. Programcı olarak bana saçma gelmeyen bu işlem maalesef UX  (user experience / kullanıcı deneyimi) olarak tam bir rezalet oldu. Çünkü 13 bin satırlık bu veri aktarma süreci iPhone 6 Plus’da bir 2-3 dakika alıyordu. Bu esnada uygulamanın tepesindeki başlık kısmında “İlk kullanım için uygulama ayarlanıyor..” ibaresi koyduğum halde, başlık biraz süslü fontla yazıldığı için kimsenin dikkatini çekmemişti. Aksi gibi bu esnada makine kilitlenmiş gibi davranıyordu. Yine benim cehaletim yüzünden csv aktarma işlemini ayrı bir “thread” içinde yapmayı akıl edememiştim. Bu kadar küfredeceklerini bilsem böyle yapar mıydım.. Bu da yetmezmiş gibi aksilikler ardı arkasına devam ediyormuş meğer.. Csv aktarımı sırasında telefonu kilitlendi sanan kullanıcılar, benim gibi uslu uslu beklemek yerine haklı olarak ekranın sağına soluna dokunup bir interrupt  göndermeye çalışıyorlar, o da aktarımın şakadanak sonlanmasına neden oluyormuş. (Bu kısmı tespit edene kadar neler çektim). Ondan sonra AppStore’dan yorum olarak yahut mail yoluyla “Bu ne biçim uygulama, d harfine kadar çalışıyor, gerisi yok.. M harfine kadar çalışıyor gerisi nerde.. 13 bin kelime değil 10 kelime bile yok..” gibi sitem ve ardından veciz sözler şeklinde geri dönüşler aldık..

Bu uygulamanın ilk sürümlerinde de bunun kadar olmasa da talihsizlik vardı.. Onu da kısaca anlatayım ki müstakbel developer arkadaşlara UX dersi olsun..

Eski versiyonunda, doğrudan Sqlite üzerinden veri çekip kullanıcıya sunuyorduk. Bu esnada çok fazla veri çekip hem belleği, hem kullanıcıyı uğraştırmayayım diye her sorguda 10 tane kelime çekiyordum. Yani kullanıcı a’ya bastığında a’yla başlayan binlerce kelimeyi vermek yerine ilk 10 kelimeyi veriyordum. Kullanıcı yazmaya devam ettiğinde filtre daha daraldığı için yine 10 kelime göstererek adamın istediği sonuca bir kaç harf yazarak gitmesini sağlıyordum. Gelen yorum şöyle oldu: “Bu ne biçim sözlük, güya 13 bin kelime var içinde.. A harfinden sadece 10 kelime var.. Hep yalan dolan.. Param haram olsun..”. Tek tek bu kullanıcılara ulaşmaya çalışıp durumu izah ettim. Anlayan bir kaç kullanıcıdan da olumlu yorum yazıp mevzuyu diğerlerine anlatması için ricada bulundum.. AppStore’un bir başka garipliği olarak kendi uygulamama yorum yazamıyorum..

Neyse konuya dönelim..

Yılbaşında uygulamayı revize ederken sadece csv işlemi için ayrı bir thread açtım, böylece aktarım sırasında ekranın sağına soluna dokunulsa da işlem yarıda kalmıyor, bir süre sonra başlıktaki ibare düzelip sözlüğün hazır hale geldiğini bildiriyordu. Fakat bu akşam bu halini de beğenmedim. Yorumları susturmaya yetmez gibi geldi. Ben de geçen sefer okumaya üşendiğim ingilizce blogları iyice kurcalayıp dolu bir Sqlite verisini nasıl Core Data dosyası olarak kullanabileceğimi öğrenmeye çalıştım. Swift versiyonunun yazıldığı şu blogu buldum: http://www.appcoda.com/core-data-preload-sqlite-database/  Burdaki yöntem birebir işimi görmedi, birazcık da başka yerlere baktım: http://pinkstone.co.uk/how-to-remove-wal-files-in-core-data/

Sonra benim gibi ingilizce okumaya üşenen arkadaşlar olabilir diye hem acı tecrübelerimi hem de kısaca bu işin nasıl yapılacağını anlatayım istedim.

Dolu Core Data Verisi Kullanmak

iOS için Xcode uygulamanızı hazırlarken şu göz önünde bulundurulmalı. Projenize ait dosyalar çalışma anında doğrudan kullanılmaz. Proje dosyalarınız “Bundle” klasöründe durur, uygulamanız çalışırken ayrı bir “Data” klasörü söz konusudur. Yani Core Data modelinden üretilen Sqlite dosyası da bu Data klasöründe oluşturulur. Dolayısı ile ne yapıp edip dolu ve CoreData mimarisine uygun sütunlar içeren veritabanı dosyanızı bu “Data” klasörüne kopyalamalısınız.

Adım 1: Dolu Core Data verisini elde edelim

Benim örneğimde uygulamanın mevcut halini çalıştırıp, Csv’den aktarımın düzgün bir şekilde yapıldığına emin olduktan sonra simülatörün ilgili klasörünü bulmak gerekiyor. Çünkü dolu hale gelen Core Data mimarisine göre işlenmiş Sqlite dosyama ancak bu simülatör üzerinden erişebilirim. Klasörün tam adını öğrenmek için şu ifadeyi AppDelegete.m dosyanızda yazıp görebilirsiniz.

Screen Shot 2016-02-14 at 02.18.56

Sonra Mac’inizdeki Finder’i çalıştırıp menüden Go / Go To Folder seçeneğiyle burada gördüğünüz yolu kopyala-yapıştır yapıp ilgili klasörü açabilirsiniz.

Screen Shot 2016-02-14 at 02.44.02

Bu klasörde gördüğünüz uzantısı .sqlite olan dosya işte sizin dolu ve Core Data mimarisina göre hazırlanmış dosyanız oluyor. Bunu Xcode Projenize sürükleyip açılan pencerede “Copy item if needed” ve “Add to Targets” seçeneklerini işaretlemeyi unutmayın. Böylece projenize dolu olarak veritabanınızı aktarmış oldunuz.

Adım 2: Uygulamanızın kullanacağı Core Data dosyası ile sizin önceden yerleştirdiğiniz Core Data dosyasını değiştirmek

Yazının ortalarında bahsettiğimiz gibi iOS mimarisinde uygulamamızın içine “bundle” ettiğimiz dosyaların yeri ayrı, çalışma esnasında kullanılan dosyaların yeri ayrıdır. Core Data dosyasının orjinali Data klasöründe yer alır. Uygulama ilk çalıştığında bu data klasöründe Core Data Sqlite dosyası yoksa projenizdeki Core Data model dosyasını baz alan otomatik olarak bir Sqlite dosyası oluşturulur. İşte biz bu işlemi engellemek için “bundle” ettiğimiz kendi dolu Core Data Sqlite dosyamızı uygulama açılır açılmaz bu klasöre kopyalayacağız ve iOS’u şaşırtacağız. Hali hazırda dosyanın var olduğunu anlayan iOS sıfırdan yeni bir Core Data dosya oluşturmayacak böylece..

Bu işlemi yapmak için AppDelegete.m dosyasındaki Core Data fonksiyonlarının olduğu kısımda

fonksiyonunun içerisindeki

ifadesinin hemen üzerinde şu ifadeleri eklemek gerekiyor:

 

İşte bu kadar. Artık uygulamamız çalıştığında bu kısım imdada yetişip bizim bundle ettiğimiz dosyayı olması gereken yere kopyalayacak ve hiç bir gecikme olmadan uygulamamızda Core Data’nın nimetlerinden faydalanmaya başlayabileceğiz.

Bu kadarcık bir kod yüzünden yediğim lafların haddi hesabı yok maalesef..

Ben yandım eller yanmasın..

Kaliteli ve özgün içerik sunan 3 vlog

vlogEşimin vlog izleme hastalığı bana da bulaştı. Zaten Friendfeed, Twitter, Facebook ve Instagram dahil ne kadar sosyal medya platformu varsa hepsine benden önce kayıt olup kullanır. Ben en başta meeeh yapar “hayatta işim olmaz” der geçerim. Sonra bir bakmışım türk kahvesi fotoğrafı paylaşıyorum. Hay bin layk!

Vloglar da bu şekilde başladı. Gerçi hala eşim kadar izleyemiyorum, çünkü ilgi alanıma giren güzel ve yerli vlog bulmakta zorlanıyorum.

Geçtiğimiz aylarda SUV tarzı arabalara olan ilgim nedeniyle YouTube’da ne kadar test videosu varsa izlemiştim. Bunların hemen hepsi aynı klasik cümleleri kullanan, monoton bir anlatımla teknik detayları veren, garip süslü kelimelerle arabanın hatlarını anlatan insanlardı. Bazı amatörler araba almak isteyen vatandaş gibi test sürüşü sırasında arka koltukta oturan akrabasına video çektirmiş, yolda yanında oturan bayi yetkilisine bildiği şeyleri sorarak güya vlog hazırlamıştı. Ama bu kayıt bile bana diğerlerinden daha sıradışı gelmişti :) Fakat hiç biri “bilinçli sürücünün adresi” mottosuyla yola çıkan, kökleri taa 2000 senesinde oluşturdukları otomobil konulu forumlara dayanan, And Mehmet Çetin’in kurduğu otopark.com gibi hem kaliteli hem de farklı değil!

Bu arkadaşlar bazen tek kişi, bazen bir kaç kişi olarak video çekiyorlar. Aracın her yanını mıncıklamadan, gıcırtı geliyor mu, geliyorsa nerden ne kadar geliyor diye bakmadan, 4×4 ise ne kadar çekiyor diye dağa bayıra çayıra sürmeden bırakmayan, test için BMW dahi olsa acımayan, gerektiğinde saatlerce çekici bekleyen gayretli, samimi ve hakikaten farklı bir iş ortaya koyan arkadaşlar. Nacizane tebrik ediyorum.

bmw

Günlerce Kadjar testi de yapsınlar diye beklediğimi biliyorum, çünkü diğer test yapanlar istediğim hususlara istediğim gibi, son kullanıcı gözünden bakmıyordu. Araba tümseklerden geçerken tak tuk sesleri çıkarıyor mu, trim sesleri denen yolda canınızı sıkan eklem yerlerinden sesler geliyor mu.. Bunlara her zaman cevap bulamıyorsunuz diğer videolarda.. Bu arkadaşlar ise bilhassa bunlara çok önem veriyorlardı. Ayrıca “Kadın Gözüyle” başlığı altında kadın sürücülerin deneyimlerini de paylaşıyorlar. Bu da diğerlerinden ayrılmalarını sağlayan önemli bir farklılık.

(daha&helliip;)