Son 2 aydır yüksek lisans derslerine ek olarak,  2 ay önce başlayan ve benim de bir parçası olduğum TÜBİTAK tarafından desteklenen yüz tanıma konulu bir proje üzerinde yoğun olarak çalıştığım için burayla yine fazla ilgilenemedim. Projenin ilk aşaması olan resimlerdeki yüzlerin yerinin tespit edilmesi üzerine yaptığımız çalışmalardan esinlenerek Android'deki yüz bulma sınıfına bir göz atayım dedim ve basit bir uygulama yazdım. Bu yazımda da Android SDK ile birlikte gelen yüz bulma sınıfının bir resim üzerinde nasıl kullanılacağını aşağıdaki resimde çıktısını gördüğünüz bu uygulama üzerinde göstereceğim.smiley (Test resmini TÜBİTAK projesinde de kullandığım Caltech face database adlı yüz veritabanından aldım.)

Android ile yüz yanıma uygulamasının çıktısı

Android kullanan cep telefonlarına arayüz tasarlama işini sıfırdan başlayıp XML dosyası hazırlayarak yapmak istemeyenler için basit bir arayüz editörü mevcut. DroidDraw adındaki bu editör Brendan Burns adında (Bu programı yazdıktan sonra Google tarafından işe alınmış) bir şahıs tarafından yazılmış ve bedava dağıtılıyor. Beta aşamasında olduğu için kendisinden çok fazla bir şey beklememek gerekiyor ancak arayüz tasarımı sırasında kullanılan özelliklerin hangilerinin ne işe yaradığını öğrenmek açısından yararlı olabilir çünkü diğer her grafik arayüz editöründe olduğu gibi burada da yaptığınız her değişikliğin sonucunu anında görüyorsunuz.

DroidDraw Logo

Bu yazı, Google'ın Android platformu üzerinde çalışacak uygulamalar için XML tabanlı arayüz tasarımı ile ilgili yazacağım yazılardan ilki. Bu yazılarımda arayüz tasarımı sırasında kullanmak zorunda olduğumuz container elemanlarından bahsedeceğim. Bu elemanların kullanımını iyi öğrenmek çok önemli çünkü bu elemanlar olmadan arayüzdeki bileşenlerin istediğimiz şekilde dizilmesini sağlamak mümkün değil. En basitinden ekrana her satırda 2 tane olmak üzere toplamda 4 tane tuş koyup bunların simetrik bir şekilde dizilmelerini istiyorsak bu container elemanlarından kullanmak zorundayız. Bundan daha ileri bir örnek olarak web sayfalarında oldukça sık karşılaşılan türden, sol tarafta etiketlerin, sağ tarafta da ilgili yazı kutularının olduğu bir form tasarlamak istiyorsak yine bu container elemanlarından birini (hatta duruma göre iç içe daha fazlasını) kullanmak zorundayız. Bu açıdan bakıldığında container elemanlarının HTML kodu yazarken kullandığımız table ve div tag'lerine benzer amaçla kullanılan şeyler olduklarını söyleyebiliriz.

İlk yazımda bahsedeceğim container, içerisindeki bileşenlerin web tarayıcılarında olduğu gibi box model'e göre yerleşmesini sağlayan ve bu sebeple de en çok kullanılan container olan LinearLayout.

Bu yazımda Eclipse kullanarak çok basit bir Android uygulaması yazılması ve uygulamanın Android SDK ile birlikte gelen emülatör üzerinde çalıştırılması için yapılması gereken şeylerden bahsedeceğim. Göstereceğim örnek programın yapacağı tek şey ekranda bir tuş gösterip, tuşa basıldığında kullanıcıya bir mesaj göstermek.

Programın kendi bir pek işe yarar bir şey yapmıyor belki ancak bu yazının amacı için fazlasıyla yeterli. Bu yazıyı okuduktan sonra aşağıdaki soruların cevaplarını almış olacaksınız.

  • Eclipse ile bir Android projesi nasıl oluşturulur?
  • Bir Android projesi hangi klasör ve dosyaları içerir ve bunların görevleri nedir?
  • XML kullanılarak basit bir arayüz nasıl tanımlanır?
  • Tuşa basmak gibi basit olaylar nasıl karşılanır?
  • Kullanıcıya bir mesaj en kolay nasıl gösterilir?
  • Sanal bir cihaz nasıl oluşturulur ve yazılan program bu cihaz üzerinde nasıl çalıştırılır (emülatör nasıl kullanılır)?

Tabi ki bu cevaplar sadece başlangıç için yeterli olacak ancak sonraki günlerde bu konuların her birine ayrı ayrı değinmeyi planlıyorum.

Bu yazımda Google'ın çiçeği burnunda mobil işletim sistemi olan Android üzerine yazılım geliştirmeye başlamak için ihtiyacınız olan bileşenler ve bunların kurulumu hakkında bilgi vereceğim. Burada anlatacaklarımı yaptıktan sonra Android platformu için kod yazıp, yazdığınız kodu Android SDK ile birlikte gelen emülatör veya gerçek bir cihaz üzerinde çalıştırabilecek hale geleceksiniz.

Android SDK Logosu

Kurulumundan bahsedeceğim şeyleri saymam gerekirse:

  • JDK
  • Eclipse ve ADT
  • Android SDK
12
ŞUB
2010
Hala Hayattayım

İş-güç, yüksek lisans, ders kayıtları ve biraz da kafa dinleme derken bayağı uzun süredir sitem ile ilgilenemedim. Sanırım bunda sitemin yapımını aşağı yukarı bitirmiş olmanın etkisiyle "ne de olsa site orada duruyor boş olduğum zaman yazarım" düşüncesinin de bayağı bir katkısı oldu. Ancak bundan sonra yazılarım arasındaki arayı bu kadar açmamaya çalışacağım. Bu yazıyı yazmaya başlamadan önce kendi yazdığım admin panelinin nasıl kullanıldığını bile unutmak üzere olduğumu farkettim.smiley

0 yorum | Kategori: Genel»Günlük
Etiketler: Günlük

Evet Google sonunda bu işe de el attığını, uzun süredir üzerinde çalıştığı programlama dili olan Google Go'nun çalışan bir sürümünü kullanıcılarla paylaşarak resmi olarak duyurmuş oldu.

Google bu dil ile yazılmış programların daha hızlı derlendiğini, daha hızlı çalıştığını, daha güvenli olduğunu iddia ediyor. Python gibi dinamik bir programlama dili ile çalışmanın hızı ile, C++ gibi bir dilin performans ve güvenilirliğini birleştiriyormuş (Vay be iddiaya bak!). Go'nun göze çarpan diğer özellikleri ise şöyle:

  • Açık kaynaklı olması.
  • Garbage collection'a sahip olması. Yani kullanılan bellek alanlarını geri verme derdi yok (Java ve C#'ta olduğu gibi).
  • Çok işlemcili sistemlere yönelik yazılım geliştirmeyi kolaylaştıracak yapılara sahip olması.
  • C++ kadar yüksek performansa sahip olması.
  • Basit olması.

Şu an için Windows üzerinde çalışan bir versiyonu olmayan ve daha emekleme aşamasında olan Google GO'nun ne kadar yaygınlaşacağını zaman gösterecek. Bu yazıda dil hakkında genel bilgi vereceğim. Detaylı bilgileri bu adresten öğrenebilirsiniz.

Önceki yazımda Ubuntu 9.10 Karmic Koala'nın VmWare üzerindeki performansının olması gerekenden daha düşük olduğunu ve bu yavaşlığı normal bir kurulum sonrasında da sürdürüp sürdürmeyeceğini merak ettiğimi söylemiştim. Bugün Ubuntu 9.10'u bilgisayarımdaki Windows XP'nin yanına kurup denedim ve performansın VWare'daki performansa kıyasla bile inanılmaz derecede kötü olduğunu gördüm.

Her tıklayışımda yapması gereken şeyi 1-2 saniye donup bekledikten sonra yerine getiriyordu. Klasörler arasında dolaşmak bile işkence halini almıştı. Terminalden "top" komutu ile çalışan proseslerin listesini açıp bu yavaşlığın sebebinin hangi proses olduğuna baktım ve Xorg prosesinin işletim sisteminde yaptığım her hareket sonrasında işlemcinin %100'e yakın kısmını kullandığını gördüm. Bu da doğal olarak beni Xorg'un kullandığım ATI Radeon X1950 ekran kartımla ilgili ciddi problemleri olduğunu düşünmeye itti.

İnernet üzeride yaptığım araştırma sonucunda sorunun çözümünün Xorg server ile ilgili ayarların bulunduğu xorg.conf dosyasında olduğunu öğrendim. Bu dosyaya gerekli satırları ekledikten sonra Ubuntu en az 9.04 sürümü kadar hızlı çalışmaya başladı. Eğer sizin de ATI Radeon ekran kartınız varsa ve benzer bir problemle karşı karşıyaysanız, bu yazıda söylediğim şeyleri yaparak sorununuzu çözebilirsiniz.

Bilgisayar kullanıcılarının tartışmasız en çok kullandığı Linux dağıtımı olan Ubuntu'nun yeni sürümü çıktı-çıkacak derken sonunda sunuculardaki yerini aldı. Bu şekilde 14 Mayıs 2009 tarihinde çıkan Alpha 1 versiyonuyla birlikte başlayan ve sonrasında çıkan 7 tane sürüm ile devam eden geliştirme serüveni sona ulaşmış oldu. Peki bu sürümde ne gibi yenilikler var?

Koala resmi

Aslına bakarsanız çok fazla yenilik var. Yani yeni bir Ubuntu sürümünün bir öncekinden bu kadar ileride olduğunu çok sık göremeyeceğimizi rahatlıkla söylebilirim. Ancak bu yazdıklarım size Ubuntu 9.10'u kurduğunuzda çok farklı bir manzara ile karşılaşacağınızı düşündürmesin. Çünkü yapılmış olan yığınla yeniliğin büyük çoğunluğu altyapıda. Bir çoğu da Ubuntu'yu geliştirenlerin bayağı uzun bir süre önceden öne sürdükleri "10 saniyede boot edilen, hızlı ve güvenli işletim sistemi" iddiasının gerçekleşmesi için atılmış adımlar. Bu yazımda gerek arayüz, gerekse de altyapıda yapılmış bir çok yenilikten en önemli olanları üzerinde duracağım.

İşletim sistemini deneme amaçlı olarak kullandığımda performansı kötüydü. Bunun sebebinin VmWare içerisinde kullanmış olmam olduğunu tahmin ediyorum. Ancak önceki versiyonlarda böyle bir yavaşlık yoktu. Umarım yakında normal bir kurulum yapıp denediğimde de benzer bir durumla karşılaşmam. Eğer karşılaşırsam burada anlattığım hiçbir özelliğin bir anlamı kalmamış oluyor çünkü.

Bir süredir hem yüksek lisans tezimde yapacağım görüntü işleme çalışmalarında, hem de kendi çapımda yaptığım projelerde kullanabileceğim yüksek performanslı 32 bitlik bir mikrodenetleyici/DSP arayışındaydım. Boş zamanlarımda yaptığım araştırmalar sonucunda Analog Devices'ın Blackfin serisi veya Texas Instruments'ın C6000 serisi üzerinde karar kıldım. Ancak iş işlemcide karar vermekle bitmiyordu, çünkü çok küçük paketli bir işlemci ve çevre elemanlarını içeren çok katlı bir devreyi ne tasarlayacak vaktim vardı, ne de çok fazla para vermeden bastıracak imkanım. Yani bir geliştirme kiti de bulmam gerekiyordu. Fakat söz konusu olan şey DSP olunca, geliştirme kitlerinin fiyatları şaka gibi oluyor. Baktığım işlemcilerin kitleri de istisna değildi.

Tam daha düşük performanslı mikrodenetleyicelere bakmaya başlayacaktım ki, bir sitede Texas Instruments'ın 149$'lık küçük bir OMAP geliştirme kitinin yeni revizyonunu çıkardığını gördüm. Beagleboard adlı bu kartın fiyatına (ve adına) bakınca kartın hiçbir özelliği olmayan bir şey olduğunu düşündüm ve olmayan özelliklerini öğrenmek üzere ayrıntılarına baktım.smiley Gördüğüm manzara beni oldukça şaşırttı.

Bu yazı, özellikle blog uygumaları yazanlar için oldukça önemli olan thumbnail image (küçültülmüş resimler) oluşturmak ile ilgili.

Normalde .NET Framework içerisinde bu işi Image objesinin metodlarından biri olan GetThumbnailImage() metodunu kullanarak tek satırda halletmek mümkün. Ancak bu yöntemi kullanmışsanız, oluştuduğu thumbnail resimlerinin genelde düşük (bazen de berbat) kalitede olduklarını görmüşsünüzdür. Yazımda bu sorunu ortadan kaldıran ve resim kalitesine önem veren birçok kişinin GetThumbnailImage() metodu yerine tercih ettikleri başka bir yöntemi göstereceğim. Göstereceğim yöntemi kullanarak JPG, PNG, GIF gibi çok kullanılan formatların hepsi için kaliteli thumbnail'ler oluşturabileceksiniz. Ayrıca GetThumbnailImage() metodunun neden her zaman iyi sonuçlar vermediğinden de kısaca bahsedeceğim.

SQL Server kullanan web uygulamaları geliştiriyorken, herhangi bir sorguyu uygulamaya ait olan tüm tablolar veya tüm veritabanları üzerinde çalıştırmayı istemek çok seyrek karşılaşılan bir durum değil. Buna verilebilecek en yaygın iki örnek muhtemelen bir veritabanı içerisindeki tüm tabloları silmek ve tüm tabloların collation değerini değiştirmektir. Benzer şeyleri bir SQL Server instance üzerindeki tüm veritabanları için yapmak da istenebilir.

Bir çok kişinin böyle durumlarda çözüm olarak gördüğü şey söz konusu sorguyu her tablo/veritabanı için bir kez çalıştırmaktır. Ancak bu yöntemin aslında bir çözüm olmadığı tablo/veritabanı sayısı arttıkça gittikçe kullanılamaz bir hal almasından belli olmaktadır.

Konu hakkında biraz daha bilgi sahibi olan kişilerin aklına ise büyük ihtimalle cursor kullanmak ya da verdikleri sorguyu söz konusu olan her tablo/veritabanı için bir kez çalıştıracak olan bir stored procedure yazmak gelecektir. Her iki çözüm de yukarıdaki paragrafta bahsettiğim çözüme göre çok daha mantıklı olmakla birlikte, basit işler için karmaşık ve gereksizdir. Öyle olmasının sebebi ise SQL Server'daki master veritabanı içerisinde bu tür işlemlerin kolaylıkla yapılmasını sağlayacak stored procedure'lerin  zaten tanımlanmış olmasıdır. Bu yazımda, bahsetmiş olduğum işlemleri tek komutla yapmanızı sağlayan, çok işe yarar bulduğum sp_Msforeachtable ve sp_MSforeachdb prosedürlerinden bahsedeceğim.

Eğer bir Windows kullanıcısıysanız, başta oyunlar olmak üzere tam ekran çalışan veya geçici olarak ekran çözünürlüğü ile oynayan herhangi bir programı kapattığınızda, ekran çözünürlüğünüzün olması gereken değerine tekrar ayarlanmadığı ve masaüstünüzdeki ikonların yerlerinin darmadağın olduğu bir duruma mutlaka şahit olmuşsunuzdur. Bu durum eğer benim gibi masaüstünü düzenli tutmaya çalışan biriyseniz oldukça canınızı sıkacaktır. Eğer her seferinde tek tek tüm ikonları eski yerlerine sürüklemekten bıktıysanız, bu yazımda bahsedeceğim Desktop Restore adlı ücretsiz programı kullanabilirsiniz.

Günümüzde, sitelerin en büyük ziyaretçi kaynakları Google, Bing gibi arama motorları. Sitelerin arama motorlarında üst sıralarda gözükebilmleri için yapılabilecek bir çok şey var.  Ancak bunlardan bazıları var ki, artık yapmak bir zorunluluk halini almış durumda. Buna en büyük örnek de Url Rewriting (URL'leri yeniden yazmak). Anlaşılır, kullanıcı dostu URL'ler sadece arama motoru optimizasyonu (SEO) için değil, sitenin navigasyonunun daha anlaşılır hale gelmesini sağladığı için önemli.

URL Rewriting dendiğinde muhtemelen birçok web programcısının aklına ilk gelen şey Apache sunucularda kullanılan mod_rewrite özelliğidir. Ancak bu özellik doğal olarak sadece PHP ile yazılmış olan uygulamalarda kullanılabiliyor. Bu yüzdne Windows sunucular üzerinde çalışacak olan ASP.NET ile yazılmış web uygulamalarında URL Rewriting işlemini yapmak yakın bir zamana kadar Apache'deki gibi kolay değildi. Çünkü IIS'in URL Rewriting yapmayı kolaylaştıracak bir özelliği yoktu. Ancak artık durum değişti.

Microsoft'un yakın bir zamanda çıkarmış olduğu URL Rewrite modülü sayesinde IIS 7 kullanıcıları da artık kolayca URL Rewriting yapma imkanına kavuştu. Bu yazımda Microsoft Url Rewrite modülünün IIS 7 üzerine kurulumunu ve yazım kurallarının doğrudan web.config içerisinden nasıl tanımlandığını örnekler ile birlikte anlatacağım.

Sadece Türkiye'den değil, tüm dünyadan ziyaretçi almasını planladığınız "global" bir siteyi kodlamak, her ne kadar dışarıdan bakıldığında sadece .NET Framework içerisinde bulunan lokalizasyon ile ilgili bir kaç fonksiyonu kullanmakla çözülecek bir problem gibi görünse de, iş uygulamaya geldiğinde gayet kolay bir şekilde Çin işkencesine dönüşebiliyor. Çünkü iş farklı dillerin karakterlerini düzgün bir şekilde gösterecek encoding kullanmakla bitmiyor. Her ülkenin posta kodları, tarih ve saati yazış şekilleri farklılık gösteriyor. Özellikle sitede ziyaretçilerden bu tip verileri alıp veritabanına kaydetmek, bazen de aralarında karşılaştırma yapmak gerekiyorsa...

12