Bada OS ortaya çıkalı henüz çok kısa bir zaman oldu. Samsung un Android temelli bu mobil işletim sistemini kullanan sadece GS-8500 kodlu Wave kısa adıyla bilinen telefonu mevcut.
Telefon haziran ayında piyasaya sürüldüğü ilk gün alan birisi olarak o günden bu güne SDK nın beta3 sürümü ile yazılımlar geliştiriyordum. Az önce gelen eposta ile öğrendim ki SDK artık nihai sürümüne ulaşmış. Yeni eklenen ve düzeltilen özellikler den zaman içinde kullandıkça bahsederim.
Bu arada SimpleCompass yayınlandığından bu yana 3 günde 14 bin kez indirildi ve 1600 küsür Bada uygulaması içerisinde bugün 6 basamak daha yükselip top 18. sıraya geldi.
“Simple Compass” Samsung Bada işletim sistemi için geliştirdiğim naçizane pusula uygulaması. Gönderim tarihi kontrol ettim az önce, 13 temmuz diye not almışım, bugün 20 ağustos, yani bir aydan fazla olmuş ben uygulamayı yayınlanması için samsung apps e göndereli. Gönderim yaparken en fazla 1 hafta içerisinde onaylanır ve yayınlanır denen uygulama için tam bir ay + bir hafta oldu. Neyse en azından yayınlanabildi bu da bir şey. Bu sürede 4 kez support isteği yaptım ki her epostada ilgileniyoruz cevabı geldi. Yılmadım bekledim sonunda bugün uygulama http://www.samsungapps.com/topApps/topAppsDetail.as?productId=G00000085417&listYN=Y adresinde yayınlandı.
Biraz uygulama hakkında bilgi vereyim; C++ ve BadaSDK ile yazdığım bir uygulama. Samsung Wave de bulunan manyetik sensörden gelen yerçekimi vektörü ile kuzey yönü tayin ediyor. Her elektronik manyetik sensörde olduğu gibi manyetik alanlarda ya da yüksek metal bulunan alanlarda doğru bir tespit yapamıyor. Bu alanlardan uzaklaştıktan sonra manyetik sensörün yeniden kalibre olabilmesi için telefonu bir kez havaya sekiz çizecek şekilde çevirmek gerekli.
Şimdi açtım kontrol ettim ve en son 14 Mart yazdığımı farkettim. Tam olarak 158 gün geçmiş be blog. Halbuki ne güzel hayallerimiz vardı, part 1 diye yazdığım onca entry nin devamlarını hazırlıyordum en son görüştüğümüzde. Ufak tefek yazdığım toolları codeplex de yayınlayacaktım. Proje sayfasını bile almıştım. http://sstools.codeplex.com/ adresine yayınlayacaktım falan. Burada anlatacak orada yayınlayacaktım. Güzel bir Facebook Connect uygulması yazmıştık onu geliştirecektik. bla bla bla…
Neyse artık demekten başka bir şey yok. Neden olarak; o tarihten bu tarihe uzun ve yorucu bir proje süreci geçirdim denilebilir. Geceli gündüzlü yorucu ve daraltıcı bir dönem geçti gitti. Sonuçları da güzel oldu denilebilir sanırım. En azından son bir kaç haftadır düzgün yürüyor. Epasaporttan bahsediyorum. Toplamda bir 10 yıla yakın süredir devam eden projeyi bir kaç ay da tamamlamak gibi bir işe kalkıştık ve deadline olan -doğum günüm- 1 haziran da hayata geçirdik.
Geçen günlerin birinde Google Analytics üzerinde yaptığım bir incelemede gördüm ki, bu bloga arama motoruyla gelen milyonların (yersen) en çok kullandığı keywordlerden birisi linqtoxml. Bu etiketli tek bir yazım vardı oldukça geçmiş tarihli ve aslında çok bir amaca hizmet etmeyen basit bir yazımdı sadece. Ama google üzerinde bu keyword le bir arama yaptım ve gördüm ki, konu üzerine yapılan çalışmalar oldukça kısıtlı. Bu vesileyle biraz linqtoxml for dummies konulu kısa bir kod örneği ile linq ile xml kullanımını göstereyim istedim. Yoksa tüm bu yazının amacı google da bir kaç sıra daha yukarıya çıkmak kesinlikle değildir (yersen 2).
Şimdi efendim, xml nedir ile başlayacak kadar geçmişe gitmeyeceğim. Hatta “linq nedir” sorusunu da uzun uzadıya anlatmayacağım. Kısaca linq dediğimiz şey .net v3.5 ile hayatımıza kazandırılan syntax’a gömülü veri sorgulama dilidir. Eskiden bir xml den, bir veri tabanından … kısaca bir veri kaynağından bir sorgulama yapacağımızda o veri kaynağıyla ilgili sınıflar üzerinde işlem yaparken şimdi LinQ sayesinde tüm bu kaynaklar için ortak bir dil kullanarak sorgulama yapabilmekteyiz.
Bir türlü ikincisini yazamadığım entegrasyonlar serilerinin bir yenisi ile yine karşınızdayım. Birinci bölümleri yayınlayınca iş bitmiş gibi oluşan bir kanı var bende sanırım. Ve tembelliğimin de bu sonuca katkısı yadsınamaz bir gerçek. Neyse bu sefer Facebook Connect (fbc) ile asp.net in nasıl entegre çalışacağını, kullanıcı authentication işlemlerinin nasıl fbc ile yapılacağını kısaca anlatacağım. Bir tane de örnek sayfamız ve kodlarımız da olacak.
Öncelikle fbc’nin auth. mekanizmasını anlatarak başlamalıyım. Facebook şu an 350 milyon kullanıcıya sahip bir sosyal ağ. Bu kabarık rakamın yanında Türkiye ve Türkler için bir başka önemi ise en yoğun kullanılan sosyal ağ olması. Şöyleki ABD ve İngiltereden sonra en çok kullanıcıya sahip olan ülke Türkiye. Şuradan incelenebilecek rakamlara göre şu anda 14 milyondan fazla Türk’ün dahil olduğu sanal ağda ingilizceden sonra en çok konuşulan dil de haliyle Türkçe oluyor. Bu rakamlar arasında en önemli veri ise bu kullanıcı sayısının internet kullanıcıları sayısına oranı. Bu rakam Türkler için şu an %53 oranında ve sıralamadaki en yüksek oranlardan birisi. Kısaca interneti görmüş her 100 Türk’ten 53′ünün fb hesabı var. Bu noktada eğer Türkçe içerik hazırlıyor ve kullanıcı doğrulaması (eskilerin deyimiyle üyelik sistemi) öngörüyorsanız fbc işinizi fazlasıyla görecek demektir.
Vakti zamanında ara ara da olsa algoritma çalışmaları yapardım blog için. Bir soruyu alır ve programatik olarak nasıl çözüleceğini anlatmaya çalışırdım. Böyle aktivitelere pek işten güçten fırsat bulamıyorum sanırım. En son iki yıla yakın bir zaman olmuş onu farkettim.
Neyse efendim girişi toparlayalım; mors alfabesi üzerine ufak bir algoritma çalışması yapacağız. Problemimiz şu; bir arkadaşınız facebook iletisi olarak mors alfabesinde bir metin girdi ancak metni karakterlerine ayırmadı (ayıramadı da denebilir). Mors alfabesi ile az bir süre bile haşır neşir olduysanız her karakter için aynı sayıda ses kullanılmadığını bilirsiniz. Aslında bu anda mors alfabesinden kısaca bir bahsetmek gerekli sanırım. Mors alfabesi 1800 lerden beri kullanılan bir tür iletişim kodlamasıdır. Uzun ve kısa olmak üzere iki tip eleman barındırır. Tüm alfanümerik karakterler bu iki elemanın kombinasyonları şeklinde oluşturulmuş bir sistemde alfabeye aktarılmıştır. (Genel standart olarak metin dilinde uzun ses için – kısa ses için . karakteri kullanılmakta olduğundan bende bu yazıda bu iki karakteri kullanacağım) Örnek vermek gerekirse M karakteri – - , T karakteri – , ? karakteri . . – - . . E karakteri ise . olarak gösterilir.
Joe Armstrong isimli Erlang dilinin geliştiricilerinden bir abimiz, vakti zamanında nesne yönelimli programlama modeli için bir örneklemede bulunmuş, ve demiş ki;
“The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.”
LinQtoSQL kullanmak için bir dbml’i yarattınız, içerisine gerekli gördüğünüz tabloları eklediniz bağlantılarını kurdunuz ve projenizde mutlu ve mesut bir biçimde kullanıyorsunuz diyelim. Bir sorun yaşayana kadar yeni şeyler öğrenmeyi red eden benim gibi bir yapıdaysanız “Delay Loaded” özelliğinin ne olduğunu içi dolu dolu byte array’ler ile çalışmadan araştırmazsınız sanıyorum.
Bir tane tablomuzda bir kolon var tipi VARBINARY(MAX) kısaca limiti belli olmayan byte dizisi olarak tanımlanmış. Kullanım amacımız bir çoğumuzun yaptığı gibi dosyaları veritabanına yerleştirmek için. Şimdi siz bu tabloyu dbml’e ekleyip sorguyu aldığınızda oluşturulacak class’ın içerisinin (siz o içeriği hiç kullanmasanız bile) doldurulduğunu tahmin etmek zor değil. Ki bir sorgu alıp 10 dakika cevap vermesini beklediğinizde bir şeylerin ters gittiğini daha rahat kavrayabiliyorsunuz.
Yine blog’u yanlızlığa terkettiğim bir ayın ardından ufak bir sorun ve çözüm ile beraberiz. Dün akşam saatlerinden bugün sabaha kadar bir türlü içinden çıkamadığım bir sorunun kaynağını absürd bir biçimde buldum, sizlerle paylaşmak isterim sayın seyirciler.
Şimdi WCF ile birlikte callback yapan bir sistem kurduk diyelim. Bu sistemde ana operation contract olarak subscribe isimli bir method’umuz var. Bu method cağırıldığında bağlı olan ve kanalı halen açık olan istemcilerdeki subscribed isimli callback methodu cağrılıyor. İçerik şu şekilde
Uzun bir süredir yine blogu birbaşına bırakmış olmamın verdiği hüznü derin derin içimde hissederken ilginç bir durumu paylaşayım istedim. Bir linq sorgusu yazacaksınız ve kıstaslarınız dinamik olarak, çalışma zamanında belirlenecek. Kısaca linq içerisinde yazacağınız WHERE expression duruma göre değişecek. Nasıl böyle bir gereklilik doğar; örneğin bir adres defteri sorgusu alacaksınız, bir kullanıcı gider sadece adı ahmet olanları listelemek ister, bir diğeri adı ahmet ve telefon no’sunda 9 geçenler listelemek ister. Bu örnekte kıstas en fazla 2 tane olduğu için bir sorun yok belki, iki ayrı linq sorgusu yazarsanız, ancak bu tip kıstaslarınızın sayısı arttıkça iş içinden çıkılmaz olur. Bu durumlar için şu şekilde bir çözüm geliştirilmiş. Çok ayrıntılı inceleyemedim fakat tek tablolu sorgularınızda gayet başarılı sonuçlar veriyor gibi.
Ancak bu yazının konusu biraz daha karışık, 1 ana tablo ve ona bağlı 2 adet yan tablo var diyelim. Bu durumda dinamic linq sorgusu nasıl olacak. Öncelikle örnek tabloların yapılarını verelim;