25 Şubat 2013 Pazartesi

Php Geocoding Kütüphanesi


Web servislerin sunduğu Geocoding hizmetlerini incelerken bir kütüphane ile karşılaştım. Bu kütüphane bir çok Geocoding servisini tek bir çatı altında toplamış. Alt seviyede end point tanımlamaları yapılmış. Size sadece  gerekiyorsa Api key gibi parametreleri oluşturmak kalıyor.  Desteklediği servislerin listesi şu şekilde.



  • FreeGeoIp as IP-Based geocoding provider;
  • HostIp as IP-Based geocoding provider;
  • IpInfoDB as IP-Based geocoding provider (city precision);
  • Yahoo! PlaceFinder as Address-Based geocoding and reverse geocoding provider;
  • Google Maps as Address-Based geocoding and reverse geocoding provider;
  • Google Maps for Business as Address-Based geocoding and reverse geocoding provider;
  • Bing Maps as Address-Based geocoding and reverse geocoding provider;
  • OpenStreetMaps as Address-Based geocoding and reverse geocoding provider;
  • CloudMade as Address-Based geocoding and reverse geocoding provider;
  • Geoip, the PHP extension, as IP-Based geocoding provider;
  • ChainProvider is a special provider that takes a list of providers and iterates over this list to get information;
  • MapQuest as Address-Based geocoding and reverse geocoding provider;
  • OIORest as very accurate Address-Based geocoding and reverse geocoding provider (exclusively in Denmark);
  • GeoCoder.ca as Address-Based geocoding and reverse geocoding provider (exclusively in USA & Canada);
  • GeoCoder.us as Address-Based geocoding provider (exclusively in USA);
  • IGN OpenLS as Address-Based geocoding provider (exclusively in France);
  • DataScienceToolkit as IP-Based geocoding provider or an Address-Based provider (exclusively in USA & Canada);
  • Yandex as Address-Based geocoding and reverse geocoding provider;
  • GeoPlugin as IP-Based geocoding provider;
  • GeoIPs as IP-Based geocoding provider;
  • MaxMind web service as IP-Based geocoding provider (City/ISP/Org and Omni services);
  • Geonames as Place-Based geocoding and reverse geocoding provider.
  • Benim ilk başta denediklerim Google ve MapQuest servisleri oldu. Herhangi bir Api key gerektirmeden deneyebilirsiniz. Projenin sayfasına bu linkten ulaşabilirsiniz. Google servisi oldukça detaylı bir sonuç listesi sunuyor. MapQuest aşağıdaki gibi bir json dökümanı sunuyor. 


{
  • results:
    [
    • {
      • locations:
        [
        • {
          • latLng:
            {
            • lng36.325898,
            • lat41.289354
            },
          • adminArea4"İlkadım",
          • adminArea5Type"City",
          • adminArea4Type"County",
          • adminArea5"Samsun",
          • street"",
          • adminArea1"Turkey",
          • adminArea3"Samsun",
          • type"s",
          • displayLatLng:
            {
            • lng36.325898,
            • lat41.289354
            },
          • linkId0,
          • postalCode"",
          • sideOfStreet"N",
          • dragPointfalse,
          • adminArea1Type"Country",
          • geocodeQuality"CITY",
          • geocodeQualityCode"A5XAX",
          • adminArea3Type"State"
          }
        ],
      • providedLocation:
        {
        • location"samsun"
        }
      }
    ],
  • options:
    {
    • ignoreLatLngInputfalse,
    • maxResults1,
    • thumbMapsfalse
    },
  • info:
    {
    }
}

21 Şubat 2013 Perşembe

Güneş Sistemi Similasyonu

Webte Güneş sistemi  similasyonu ile ilgili bir çok uygulama bulabiliyorsunuz. Şirkete gelen stajyer öğrencilerden birini bitirme tezi Güneş sistemi  similasyonu idi. Benimde ilk aklıma gelen http://haritaaraci.com/3d_gunes_sistemi.aspx adresindeki örnek geldi. Unity3d ile bu tür uygulamalar yapmak çokta zor değil aslında. Buradaki asıl sorun Güneş sistemindeki gezegenleri zamana göre rotalarında seyir etmesini sağlamak. İnternette bu hesaplamalar ile ilgili detaylı hesaplama verileri mevcut. Benim gözüme çarpan http://www.stjarnhimlen.se/comp/ppcomp.html sayfası oldu.  Ve son olarak flash ile yapılan güzel bir simulasyon uygulaması paylaşmak istiyorum. http://www.theplanetstoday.com/ bu siteden uygulamaya erişebilirsiniz. Sağ üstteki butona basarak çeşitli ayarlara ulaşabiliyorsunuz. En üsteki bölümde zamanım akış hızını artırabiliyorsunuz.

20 Şubat 2013 Çarşamba

WPF Programlama

Bir arkadaşımın interaktif cd uygulaması  için benden yardım istemesi nedeniyle WPF programlamayla ilgili araştırma yapmaya başladım. WPF açılımı Windows Presentetion Foundation. Normal de desktop programlar için windows form kullananan biriyim. Ancak daha görsel işlemler için WPF açıkçası daha kullanışlı. Görsel arayüz için ayrı bir katman kullanıyor. Görsel thema oluşturma imkanı sağlıyor. Piyasada bu tür işler daha çok flash tarzı teknolojilerle yapılıyor aslında. Ama C sharpa daha yatkın biri olarak WPF kullanmaya karar verdim. Şimdilik en büyük problem WPF desteğinin PClerde ne kadar desteklendiğini bilmemem. Yani ben bu teknoloji ile yazdığım programı hangi  Platformlarda kullanabilirim bu çok önemli. .Net 3.5 ile bu teknolojinin geldiğini biliyorum yanılmıyorsam.

İnternette bu  teknoloji ile ilgili çeşitli kütüphaneler bulabiliyorsunuz. Ben image button ve sayfa geçişleri için bir araştırma yaptım. Daha göze hitap eden uygulamalar için önemli olabilir.
Codeprojectte sayfa geçişleri için bir kütüphane buldum. Bu linkten ulaşabilirsiniz. 
Image Button için ise codeplexte bir kütüphane bulunmakta. Bu linkten ulaşabilirsiniz.

MongoDB Embed Doküman İşlemleri

MongoDB ile uzunlu soluklu online oyun projemizin alt yapısını oluşturmaya çalışıyorum. MongoDB nin veritabanı tasarım mantığını ısınmaya başladım. Ancak bazen sorgulama işlemleri için çeşitli araştırmalar yapmam gerekiyor. SQL diline yatkın olan biri olarak bu yeni sorgulama işlemleri ilk başta açıkçası zor geliyor. Ayrıca her ne kadar MongoDb nin kendi sitesinde detaylı döküman olsa da tam olarak istediğinizi bulmak için yabancı forumlarda araştırma yapmak gerekiyor. Temel collection yapılarını oluşturmak ve bu collectionlarda yapılan temel sorgular ekle,güncelle,bul,sil işlemlerini oluşturmak çok zor olmasa da dokümanda ağaçlanma başladığı zaman işlemler biraz daha zorlaşıyor.


{
_id:"5432af324432eaf43243"
name:"murat",
password:"12345"
mail:"muratsalweb@gmail.com"
}

Yukarıdaki yapıdaki basit döküman yapısında işlem yapmak kolay bir iş.

{_id: '4eb79ee1e60fc603788e7259',
Name: 'name', 
Subsidiaries: [
  { _id: '4eb79eeae60fc603788e7271',
   Location: 'location1'},
  { _id: 'subid2',
   Location: 'location2'},
]}

Yukarıdaki bir yapıda ise bir döküman içinde array döküman bulunmakta işte burda işler biraz karıştırıyor. Gerçi  mantığını öğrendikten sonra çokta zor değil açıkçası. Bunun gibi embed döküman yapısındaki collectionlarda veri işlemleri nasıl yapılabildiği hakkında diğer bloğumda yazı yazmak istiyorum zamanım olursa.

16 Şubat 2013 Cumartesi

Web Site Performans Test Araçları

Web sitelerin yüklenme hızı ziyaretçiler ve arama motorları için önemli özelliklerden biri. Web sitenin hızını etkileyebilecek bir çok etken bulunmakta. Bunlar genel başlıklarla şöyle sıralayabiliriz.

  • Kod çalışma zamanı.
  • İstek yapılan sayfanın boyutu.
  • İstek yapılan sayfanın içinde bulunan kaynak dosyaların boyutları(resim,javascript,css gibi)
  • Server yoğunluğu.
  • Verilerin cachelenmesi.
  • Verilerin sıkıştırılması
Bu konu hakkında belki ileride ayrıntılı bir yazı yazabilirim. Asıl konumuz web sitelerinin performans testi için kullanabileceğimiz online araçlar. Pingdom aracından önceden bahsetmiştim. Bu araçların toplu olarak listesi şu şekilde.

4 Şubat 2013 Pazartesi

Android Programlama İçin Online Dersler

Android programlama ile ilgili Türkçe kaynak bulmak zor. Bir kaç sitede video eğitimler bulunsa da  çok yetersiz. İngilizce video derslerin bulunduğu learnerstv sitesinde güzel eğitim videoları bulunmakta. Ben de bu sitedeki eğitim videolarına başladım. Anlatılış oldukça akıcı ve 5-10 dakikalık videolara bölünmüş dersler bulunmakta.  200 parçadan oluşan bu dersleri bitirmeye çalışacağım. Eğer Android programlama ile uğraşmayı düşünüyorsanız bu linkten dersleri izleye bilirsiniz. Ancak İngilizce bilmeniz gerekiyor.

3 Şubat 2013 Pazar

Android Programlama

Önceki yazımda bahsettiğim server taraflı teknolojileri mobil platformda kullanmak istiyorum. Tabi ki client uygulama olarak yanlış anlaşılmasın . Android seçmemin nedeni basit, mobil platformda en fazla kullanılan işletim sistemi olması ve ios gibi maliyetli olmaması. IOS ile bir yazlım geliştirmek için Mac işletim sistemi gerekiyor ve bunun deneyebileceğini cihazlar şart. Bu da en az 3-4 bin liralık maliyet demek. Onun için ios tarafına şuan hiç bulaşmıyorum. Gerçi şirkette bulunan cihazlarda  Unity 3d için Foursquare plug in geliştirmek için baya uğraşmıştım. Onun için ios geliştirmesinde daha tecrübeliyim diyebilirim. Ancak objective-c diğer dillere oranla çok daha karışık diyebilirim.

Android için java kullanılıyor ve c sharp gibi aşina olduğum dillere çok daha yakın bir programlama dili diyebilirim. Android ile ilk başta yapmak istediğim web servis kullanımı ve grafik kütüphanelerinin kullanımı olacak. Biraz deneyim kazandıktan sonra küçük bir oyun projesi geliştirmek istiyorum. Bunun için ilk başta herhangi bir oyun veya grafik motoru kullanmayı düşünmüyorum. Çok gerekirse böyle bir yola baş vurabilirim.

Android için uygulama geliştirmek için bazı araçları ve kütüphaneleri kurmanız gerekiyor. En başta javanın kurulu olması gerekiyor. Android sitesindeki ADT Bundle size kurmanız gereken bu program ve kütüphaneleri toplu şekilde sağlıyor.
Bu bundle bu adresten indirebilirsiniz. Bununla birlikte gelenler :

  • Eclipse + ADT plugin
  • Android SDK Araçları
  • Android Platform-Araçları
  • Android simulatörler
Bu bundle içindeki programla gerekli Android sdkları indirebilirsiniz. Ancak bu baya uzun sürebilir. Ben bütün sdk versiyonları indirdim va yaklaşık 6gb kadar indirme yaptı. Baya uzun sürebilir yani.

2 Şubat 2013 Cumartesi

Server Taraflı Programlama

Bu aralar küçük multiplayer oyunlar üzerine denemeler yapmak istiyorum. Ama kullanacağım teknolojiler hakkında biraz kararsızım. Önümde iki seçenek var aslında biri servis bazlı ikincisi realtime socket kullanımı.
Önümdeki engeller ise servis bazlı bir oyunda performansta sıkıntı yaşayabilirim. Veritabanı üzerinden diğer kullanıcılar ile haberleşme yapmak gerçekten performans kaybı demek. Ama iyi tarafı kolay şekilde bir php veya asp.net ile yazılabilir ve herhangi bir share hostingte kullanılabilir. Realtime soket tarafında ise performans çok daha iyi ama kodlama için iyi bir tecrübe gerekebilir. Ayrıca bunu denemek için en azından bir vps sunucusuna ihtiyacım olacak. Onun için çokta riske girmek istemiyorum. Sadece deneme  yapmak için hem para hemde zaman kaybetmek istemiyorum. Onun için muhtemelen böyle bir şeye girişirsem servis tabanlı bir server teknolojisi kullanacağım galiba.

 Bu işi daha performanslı hale getirmek için NoSQL veritabanıda kullanabilirim aslında. MongoDB rami çok kullanan bir veritabanı. Öyleki bir veriyi insert edip eklediğinizde ve bu veriye tekrardan ulaştığınızda bu veri hala sadece ram üzerinde tutuluyor olabilir. Aslında bunun ayarlamasını biz yapabiliyormuyuz bilmiyorum. Ama hangi collection veya dokümanın ramde cachelenebileceğini ayarlayabiliyorsak bu performans için çok yaralı olabilir. Aslında bu şekilde çalışan Memcached gibi teknolojilerde mevcut. Ama yine kendinize ait bir sunucu ihtiyacı doğuyor bu şekilde.

Bir ara bu iş için web socket teknolojiside kullanmayı düşünsem de . Bunun için hosting firmasının bazı kütüphaneleri aktif etmesi ve socket açmanıza izin vermesi gerekiyor. Bunu sağlayan bir hosting bulmakta biraz zor gibi.