Elasticsearch’ü Servis Olarak Kullanmak

Eğer web siteniz veya mobil uygulamanızda bir arama fonksiyonu var, ve bu ürününüz için önemli bir noktada ise, bir search engine’e ihtiyacınız var demektir. Bunun için kullanabileceğiniz çeşitli alternatifler var. Solr ve Elasticsearch’ü açık kaynak olarak indirip, kendi sunucunuz üzerine kurabileceğiniz gibi, Elasticsearch’ü servis olarak veren yerler’de mevcut. Algolia ise sadece servis olarak kullanabileceğiniz bir başka alternatif.

Benim derlediğim, Elasticsearch’ü (yeni ismi ile Elastic) servis olarak (Elasticsearch as a Service) kullanabileceğiniz yerler aşağıdaki gibi:

  • Elastic.co: Elasticsearch’ün kendisi direk servis olarak da hizmet sunmakta
  • Compose.io: Elasticsearch hizmeti bulunmakta.
  • AWS Elasticsearch Service: Amazon’un sunduğu Elasticsearch hizmeti.
  • Qbox.io: Sadece Elasticsearch hizmeti veriyor.
  • Searchly: Sadece Elasticsearch hizmeti veriyor.
  • Bonsai.io: Bir başka Elasticsearch hizmeti alternatifi.

Elasticsearch ile ilk tanıştığımda bunlardan bir çoğu yoktu. Ancak şuan alternatiflerin çok olmasını olumlu görüyorum tabiki. Daha önce Compose.io ve AWS hizmetini kullandım. Size önerim ise kesinlikle AWS. Öncelikle ihtiyacınızı belirleyip, daha sonra hepsi için pricing bölümüne girip karşılaştırma yapabilirsiniz. İhtiyacınızı belirlerken Storage (bu ihtiyacı datanızın boyutuna göre belirleyin) ve Ram (bu ihtiyacı Data’nıza ne kadar istekte bulunacağınıza göre belirleyin) miktarına bakın. Servis olarak almadan önce, kendi sunucunuz üzerinde kullandıysanız zaten neye ihtiyacınız olduğunu bilirsiniz. Eğer bu şekilde kullanmadıysanız herhangi bir servis üzerinden deneyerek ihtiyacınızı belirleyebilirsiniz.

Compose.io Deneyimi

Index’letmek istediğiniz datanın kaplayacağı alana göre (storage) fiyat belirleyen Compose, küçük miktardaki datalar için oldukça uygun fiyatlara bu hizmeti veriyor. Ancak maalesef bu küçük paketlerde pek stabil olduğu söylenemez. Data miktarı büyük olduğunda ise zaten fiyat uygun olmuyor 🙂 Dolayısıyla Compose deneyimi sonrası yeni arayışlara girmemiz gerekti. Sonrasında sunucu tarafında kullandığımız Amazon’un ElasticSearch servisi olduğunu gördük ve denedik.

AWS Elasticsearch Service Deneyimi

AWS’nin Elasticsearch servisinde direk bir fiyatlandırma yok. Bunun yerine bu servis için EC2 ve storage kullanıyorsunuz ve bunları ücretlendiriyor. Yani 5-6 GB üzerinde bir storage’a ihtiyacınız var ise AWS sizin için daha uygun oluyor. Fiyatlandırma tarafında ise yapacağınız istek sayısına bağlı olarak (çünkü EC2 sunucularının kapasitesini ona göre belirlemeniz gerekiyor) eğer çok yoğun kullanılan bir servis değil ise oldukça uygun’a geliyor. Stabilite tarafı ise gene ihtiyacınız ve ihtiyacınıza uygun sunucu seçimi yapmış olmanızla alakalı. Biz şuan gayet memnunuz.

Umarım keyifle okumuşsunuzdur. Ek olarak sorularınız olur ise lütfen sormaktan çekinmeyin. Diğer AWS servisleri ile ilgili bir yazı’da sonraki yazılarımızın konusu olsun 🙂

Devir Bulut Devri!

Merhaba herkese,

Bugün sizlere bulut sunucu dünyasından ve alternatiflerden biraz bahsetmek istiyorum. Digitalocean gibi uzun zamandır kullandığım ve memnun olduğum bir cloud server sağlayıcısına ilaveten, AWS (Amazon) , Linode gibi alternatiflerden de bahsedeceğim. Siz seçiminizi yaparken, önce ihtiyaçlarınıza karar vermelisiniz.

Temel farklarına gelecek olursak,

AWS:

Amazon, bugün bulut sunucu dediğimiz sunucu mimarinisi, daha adı bulut sunucu değilken kurgulayan, aslında bir nevi bulut sunucu denilen yapıyı icat eden firma. Sektörün bildiğim ilk, dolayısıyla en tecrübeli oyuncusu. Hal böyle olunca farklı ihtiyaçlar için birbirinden farklı servisleri mevcut. Amazon Web Services ismi şimdi daha anlamlı geliyordur diye düşünüyorum. EC2 (cloud server) , S3 (Simple Storage Service) , RDS (Relational Database Service) gibi gibi bir çok servisi mevcut. Bence en büyük artısı  Elastic Load Balancing iken en büyük eksisi fiyatı!

Linode:

10$’dan başlayan fiyatlarla sanal sunucu (Amazon’daki EC2) oluşturmanızı sağlıyor. Ek olarak NodeBalancers adını verdikleri, sunucuya binen yükü otomatik dağıtmayı sağlayan bir servisleride mevcut. Ancak tabiki Amazon seviyesinde değil.

DigitalOcean:

Amazon’dan çok Linode’a rakip diyebileceğimiz DigitalOcean 5$’dan başlayan fiyatlarla Sanal Sunucu veriyor. Bugün Türkiye dahil dünyada çılgın gibi büyüyen bir firma. Bunun arkasında 5$ etiketinin etkisi olsada, bence en büyük avantajı Community! Github’da arattığınızda DigitalOcean serverları için yazılmış 600 küsür Repo görebilirsiniz. Bu rakam Linode’da 300’lerde iken AWS tabiki 1000 civarı. Uygulamada, örneğin DigitalOcean’da olmayan bir özellik olan LoadBalancer’ı github’daki bir repo sayesinde 5$’a ikinci bir makine açıp kullanabilirsiniz.

Tüm bunlara alternatif olarak Türkiye’den birkaç firma yazabilmeyi çok isterdim ancak maalesef, en iyi dediğimiz Türk firmaları bile bu işi henüz örnek verdiğim sitelerdeki standartların çok altında yapıyor. Bırakın load balance’ı Türkiye’de hiçbir firma siz ticket açıp istemeden (bulut!) sunucunuzun ram veya cpu’sunu arttırıp azaltabilmenize imkan vermiyor.

Favorim olan DigitalOcean için temel sunucu ve panel kurulumunu anlatan bir link paylaşarak yazımı sonlandırmak istiyorum.

http://www.hakanyazici.com.tr/blog/digital-oceanda-vesta-cp-kurulumu/

Buluta geçmeniz dileğiyle,

 

Brackets Kullanımı

Selamlar herkese,

Uzun zamandır yazmak istiyorum, ancak yazmaya değer taze bilgi edinemiyordum her nasılsa. Bir süredir Brackets adında bir geliştirme editörü kullanıyordum, ve onun hakkında yazmaya karar verdim. Brackets’ı Adobe geliştirmiş, ancak açık kaynak geliştirmesi GitHub üzerinden devam ediyor. Daha emekleme döneminde sayılabilir Brackets ama, böyle emekliyorsa nasıl yürür merak konusu!

Notepad++ veya Sublime Text kullananlar Brackets’ı mutlaka deneyin. Şahsen Sublime Text kullanmıyordum zaten ama uzun zamandır Notepad++ kullanan biri olarak Brackets’a geçtiğimde çağ atlamış gibi hissettim kendimi.

Brackets’ın bazı özellikleri:

Canlı Önizleme: bu özellik sayesinde html dosyasında yaptığınız değişikliği canlı olarak chrome tarayıcınızda da görebilirsiniz.

Quick View: bu özellik ile örneğin renk kodlarının üzerine geldiğinizde hangi tonda bir renk yakaladığınızı görebilirsiniz.

Quick Edit: bu özellik ile örneğin bir class seçip sağ tıkladığınızda hızlı düzenle diyerek direk ilgili stil dosyasındaki ilgili bölümü düzenleyebilirsiniz.

Eklenti Desteği: Aşağıdaki listede verdiğim ve vermediğim birçok eklenti ile daha bir çok özelliğe sahip olabilirsiniz.

Neyse hikaye kısmını geçip, Brackets’ın kurulumuna geçelim. Brackets’o brackets.io adresinden indirebilirsiniz. Ve ardından ilk yapmanız gereken şey bence eklenti bölümüne gelerek, şu eklentileri kurmak:

Brackets Darker (Koyu renkli temalar)

Brackets Language Swither (Belki lazım olmayacak ama Notepad++’dan alışkanlık, el altında bulunsun 🙂 )

eqFTP ( şuan Brackets’daki en iyi FTP yazılımı. Dosyayı kaydettiğinizde otomatik upload özelliği mevcut)

Emmet ( Notepad++’dan tanıdığımız Emmet işte. Hızlı HTML ve CSS kodları yazmak için)

Extension Highlighter ( Dosya ağacındaki dosya uzantılarını renklendirmek için, kullanışlı )

Minifier ( Gerektiğinde .min dosyaları elde etmek için )

Share to pastebin ( kod parçacıklarını tek tıkla paylaşmak için)

Todo (dosyaların içlerindeki notları tek bir yerden görebilmek için.

Ve bunları kurup ufak tefek ayarlarını da yaptığınızda inanılmaz bir Geliştirme Editörü olduğunun bir kez daha farkına varıyorsunuz. Belki BackEnd geliştirme için henüz erken ama FrontEnd için ideal.Aklınıza takılan, bulamadığınız, merak ettiğiniz herhangi bir şey için yorum bırakabilirsiniz.

Görüşmek üzere.

 

Google DevFest ’13

Dün bir arkadaşımla beraber GDG İstanbul’un GDG Eskişehir ve GDG Ankara ile birlikte düzenlediği, şimdiye kadar Türkiye’de ilk kez düzenlenen DevFest‘teydik. Genel olarak olumlu bulduğum konferansta eksikliklerde yok değildi.

Öncelikle iyi yanlarından biraz bahsetmek istiyorum. Türkiye’de bu boyutta konferans düzenlendi mi bilmiyorum, ancak bildiğim şu ki katıldığım en geniş kapsamlı konferanstı. Sabah 10:30’dan akşam 18:30 civarına kadar 4 salonda sürekli oturum vardı. Bu şekilde paralel oturum olması bazen hangisine gireceğime karar verememe yol açsa da (birazdan bahsedeceğim olumsuzluklar bunu kolaylaştırdı gerçi) bu genel olarak iyi bir şey.  Neyse gelelim içeriğe. Genellikle mobil teknolojiler üzerineydi oturumlar. Özellikle Android. Bir Google etkinliğinde IOS’a yer verilmesi de ilginç geldi bana açıkcası. Ama karşılaştırabilme ve öğrenme özgürlüğü açısından bunu olumlu buluyorum.

Olumsuz yanlarına gelince bence en büyük sorun A salonu dışındaki salonların küçüklüğüydü. Heleki C ve D deki hiçbir etkinliğe katılamadım. Erkenden gitmek, öbür oturum bitmeden çıkmak gerekiyordu öylede yapmak istemedim açıkcası. Daha büyük salonları olan bir mekan tercih edilebilirdi. Duyduğum kadarıyla herkes bu durumdan şikayetçiydi.

Benim katıldığım oturumlardan ekstra bilgi verirdim normalde ama not tutma şansım olmadı bu sefer. Hatta tutsaydım da içerikten dolayı çok yazacak bir şey olmazdı zaten. Tek diyeceğim Geleceği Yazanlar diye Turkcell’in el ayak verdiği bir platform kurulmuş. Mobil yazılım konusunda türkçe kaynak oluşturma gayretindeler. Girip faydalanabilirsiniz. Neyse son mesajım etkinliğin düzenlenmesine katkıda bulunanlara olacak. Teşekkürler hepinize. Her şeye rağmen güzel bir etkinlik oldu. Daha nicelerinde görüşmek üzere.

Appserv #2003 hatası

Selamlar. Yazmayalı epey oldu. Blogu takip eden var mı bilmiyorum ama, eğer varsa yazmıyorum diye kızmıyordur bana umarım 🙂

Appserv’de Phpmyadmin’e girerken karşılaştığım ve türkçe kaynaklarda çözümünü bulamadığım “#2003 – Sunucu yanıt vermiyor” veya “#2003 – The server is not responding” hatasının çözümünü bulmuş bulunmaktayım. Görselde 2002 yazıyor ona aldanmayın hatayı alırken resim çekmeyince Google’da onu bulabildim ancak 🙂

Neyse gelelim çözüme, Başlat -> Tüm programlar -> Appserv -> Add-Remove Windows Service kısmına girip önce “MySQL Uninstall Service” diyip, daha sonra aynı bölümden “MySQL Install Service” dediğinizde sorunumuz çözülmüş oluyor. Kolaymış değil mi? Ama bu kolay çözümü bulmak 10 dakikamı aldı 🙂

Neyse bugünlükte bu kadar. Esen kalın efendim 🙂

kaynak: http://fm820.wordpress.com/2011/07/24/phpmyadmin-2003-the-server-is-not-responding/

Sosyal İşbirlikçi Filtreleme

Bu yıl üniversitede 4. yılım malum. Hal böyle olunca tez çalışması yapmak gerekti. Bende 1-2 yıl önceden belirlediğim konuda yapmaya karar verdim tezimi. O konu ise Tavsiye Sistemleri. Hem okuduğum bölüm olan istatistiği hemde ilgi alanım ve mesleğim gördüğüm yazılımı bir arada barındırıyordu. Bu yüzden seçmiştim bu konuyu. Hikayeyi bırakırsak sizlerle bu konuda öğrendiklerimin bir kısmını paylaşacağım.

Tavsiye Sistemleri ana başlığı altında kendime seçtiğim alan İşbirlikçi Filtreleme (collaborative filtering) oldu. Tavsiye sistemleri biraz daha geniş bir tanım. Öncelikle İşbirlikçi Filtreleme’yi araştırmakla başladım.

Peki nedir bu İşbirlikçi Filtreleme

İşbirlikçi Filtreleme, bazı öneri sistemlerini kullanan bir tekniktir[1]. İF  yaklaşımının altında yatan temel varsayım geçmişte kabul edilenlerin gelecekte de kabul edilebileceğidir[2]. İF genel olarak iki farklı biçimde uygulanır[3]. Bunlar

  • Öğe Bazlı (Item Based) İşbirlikçi Filtreleme
  • Kullanıcı Bazlı (User Based) İşbirlikçi Filtreleme

Kullanıcı bazlı filtrelemede kullanıcılar beğenileri ile karşılaştırılır ve kullanıcı için en yakın kullanıcı bulunarak onun diğer beğendikleri kullanıcıya önerilir. Öğe bazlı filtrelemede ise  bir öğe-öğe matrisi ile öğeler arası benzerlikler hesaplandıktan sonra o öğeyi beğenenlere benzer öğeler önerilir.

Bunu bir örnekle açıklamak gerekirse;

Öğe bazlı İşbirlikçi Filtreleme ile Kullanıcı bazlı İşbirlikçi Filtrelemenin karşılaştırılması

 

Şekildeki durumda, kullanıcı bazlı filtrelemede kullanıcılar eşleştirildiğinden 3. kullanıcıya üzüm ve portakal önerilirken öğe bazlı filtrelemede öğeler eşleştirildiğinden 3. Kullanıcıya yalnızca üzüm önerilir[4].

Genel olarak İF’nin sözel anlatımı bu kadar. Kafanızda birşeyler canlanmıştır. Birazda uygulama yapalımki iyice otursun kafalarda :).

Sosyal Ağlar yardımı ile İşbirlikçi Filtreleme

Uygulamayı anlaşılabilir olması açısından basit düzeyde tuttum. Amacımız bir kullanıcının beğendiği filmlere göre henüz beğenmediği ama beğenmesi yüksek olasılıklı filmleri önermek. Kullanıcı verileri için (örneğin kullanıcının beğendiği filmler) Facebook verilerini kullandım, bu sayede İF’nin ilk kullanıcı hakkında bilgi sahibi olmama (cold start) problemine de bir çözüm yolu getirmiş oldum. Önerilebilecek filmleri bulabilmek için ise hazır veritabanı kullanmak yerine ise gene Facebook verilerini kullandım. Önerilecek filmleri de kullanıcının arkadaşlarının beğendiği filmler üzerinden buluyor. Ayrıca bir bildiri için hazırlanan tez çalışmama da şuradan bakabilirsiniz.

Uygulamaya şu adresten ulaşabilirsiniz. Bu arada bu uygulamanın gelişmiş versiyonunu yeni projem olan Fragmanda sitesinde kullanacağım. Öğrendiklerimizi kullanmamız gerek, yoksa ne anlamı var değil mi? 🙂

Kaynaklar:

  1. http://en.wikipedia.org/wiki/Collaborative_filtering
  2. http://degiske.com/2010/10/10/isbirlikci-filtreleme
  3. http://ojs.academypublisher.com/index.php/jsw/article/viewFile/0507745752/1954
  4. http://cuihelei.blogspot.com/2012/09/the-difference-among-three.html

MongoDB ve Node.JS nedir?

Uzun bir aradan sonra merhaba. Geçen gün Google Developer Group İstanbul ekibinin hazırladığı, 2013’ün ilk konferansı olan “Merhaba 2013” için İTÜ Ayazağa kampüsündeydim. Ve öğrendiklerimi (gene not alma fırsatım olmadığından) hatırladığım kadarıyla paylaşmak istedim. Yazmadığım dönemde katıldığım başka konferanslarda oldu ancak onlarla ilgili sizinle paylaşabileceğim bir şey bulamadığımdan yazmadım (diyerek sürekli konferanslara gittiğim imasındada bulunmuş olayım 🙂 ). Neyse geçelim konumuza.

Bugün benim katıldığım oturumlardaki konu MongoDB ve Node.JS idi. Uzun zamandır duyuyordum bu kelimeleri. Ve anlamını bilmediğim bir kelime olarak havada kalıyordu. Bugün gitme amacım tamamen öğrenmek olmasada, bu kelimelerin içini doldurmaktı. Amacıma da ulaştım. Sizlere de kulak aşinalığı olması açısından dilim döndüğünce anlatacağım.

İlk olarak öğrendiğim sırayla gidersem, MongoDB ile başlayalım.

Nedir MongoDB?

MongoDB ilişkisel olmayan yani NoSQL veritabanı. Peki ne demek bu ilişkisel olmayan? Yani düşününki veritabanı var, ama içinde ne tablo var, ne transactions (select,insert,update,delete gibi işlemler) var. Peki nasıl oluyor bu iş derseniz şöyleki, MongoDB’yi benim anladığım JSON formatında verileri Array(dizi) olarak tutan bir veritabanı olarak düşünebiliriz. Yani bildiğimiz JSON formatı olduğu için çekilen verileri JSON teknikleri ile sayfaya dökebiliyoruz. Peki neden MongoDB derseniz, en önemli sebep kesinlikle HIZ. Popüler Big Data (Büyük Veri) işlemlerde büyük hız avantajı sağlıyor. Hız isteyenler ve büyük veriyle çalışanlar kesinlikle geçmeli yani. Bu bana MS Access’ten MySQL’e geçtiğim zamanı hatırlattı. Zamanında Access yeterliyken, internet hızlandıkça, veriler arttı, bu oldukça da Access yetmemeye başladı, ve Mysql’e geçildi. Aynı süreç henüz gerekmesede ileride MongoDB için yaşanabilir. Bunu ancak zaman gösterecek.

İkinci olarakta NodeJS ile devam edelim.

Nedir Node.js?

Node.JS sunucu tarafında çalışan(server-side) bir framework. Yani bir programlama dili değil. Amacı bir nevi sunucuda JS çalıştırmak. Bunu örnekle açıklarsam daha kolay olacak sanırım. Örneğin siz bir javascript kodu koyduğunuzda sitenize, kullanıcı sitenize girer ve tarayıcısı destekliyor ise o JS kodu çalışır ve işlemler gerçekleşir. Node.JS ise bunu sunucu tarafında yaparak kullanıcının Tarayıcısından bağımsız çalışmasını sağlıyor. PHP nasıl siteye her giren için aynı sonucu veriyor, sunucu üzerinde yorumlanıp sonuç herkese aynı sunuluyor ise buda öyle birşey. Bu sayede HTML5 ile dahada önem kazanan JS herkeste sorunsuz çalışır hale gelmiş oluyor. Node.JS’in bir diğer büyük avantajı ise HIZ. Apache, ISS vs gerektirmiyor. Node.JS kurduktan sonra, 3-4 satır kod ile HTTP server haline getirebiliyorsunuz bilgisayarınızı veya sunucunuzu.

Dikkatinizi çektiyse iki yeni teknolojide de HIZ vurgusunu yaptım. Etkinlikte söylendiğine göre LinkedIn son tasarım değiştirdiğinde aynı zamanda Node.JS ve MongoDB ikilisine geçiş yapmış, trafiği 2 kat artmasına rağmen sayfa açılış hızı ise 5 kat artmış. Bu muhteşem bir fark.

Genel olarak paylaşmak istediklerim, aklıma gelenler bu kadar şimdilik. Daha detaylı bilgiler için MongoDB ve Node.JS sunumunda kullanılan sunulara şuradan ulaşabilirsiniz.