| Üye olun RSS

Cloud Hakkında

Eylül 28th, 2010 | 5 Comments | Posted in Internet, Linux, Mobile, sanal makina, web

Akıllı telefonlar, Web 2.0 ve sosyal ağ kültürü bir çok mobil ve web projesini hayatımıza soktu. Bu projelerin büyük kısmı hayatta kalamazken bazıları müthiş gelişim gösterdiler.

Gelişim gösterebilen projelerden birine sahip olabilmek heyecanı, yeni girişimcilerin sürekli yeni projelerle karşımıza çıkmasına neden oluyor. Bu kadar projeyle karşı karşıya gelince insanın aklına şu soru takılıyor: tutmama ve yaygınlaşmama gibi çok yüksek oranlı risklerin olmasına rağmen bu yatırımlar nasıl yapılabiliyor?

Elbette her proje yarın milyonlarca kullanıcısı olacakmış gibi yatırımlarla ortaya çıkmıyor, burada anahtar kelime ölçeklenebilirlik. Eğer ölçeklenebilir bir donanım ve yazılım mimarına sahipseniz küçük bir yatırımla sistemi çalıştırır ve gerektiğinde büyüterek devam edersiniz. Eğer projeniz büyümüyorsa sadece küçük bir yatırımı kaybetmiş olursunuz. Bu durumda, projenizle ortaya koyduğunuz fikir, sunduğunuz özellikler, karşıladığınız ihtiyaçlar kadar sistemi nasıl tasarladığınız da çok kritik bir öneme sahip oluyor.

Ne zaman ve ne kadar hızlı büyüyebileceğini kestirmesi zor, alt yapı yatırımını sadece gerektiğinde yapabilmek için tasarladığımız projelerde ya da anlık yüksek kaynak gerektiren işlerde ilk akla gelen artık cloud hizmetlerinden faydalanmak oluyor. Cloud çözümleri ile en mantıklı(verimli) yatırımları yapabiliyorsunuz, kaynakların kullandığınız kadarını ödüyorsunuz.

Cloud hizmetleri uzun süredir hayatımızda büyük rol oynuyor. Takip edenler bilir, hem hizmet alan hem de hizmet veren olarak son zamanlarda büyük gelişim içinde olduğunu gözlemliyoruz.

Hizmet alanlar makina, network, storage yatırımı yapmadan projelerini çalıştırabiliyor ve kullandıkları kadar ödüyorlar.

Hizmet verenler ise ellerinde büyük fiziksel makina parkını, küçük parçalara bölüp operasyonel işleri otomatikleştirerek en verimli şekilde kullanmanın yolunu bulmuş durumdalar.

Bu modelde özetle “kazan kazan” anlayışı hakim. Bu anlayışın olduğu her yerde başarı neredeyse kaçınılmaz oluyor.

Geocities ile başlayan ve 12-13 yıldır süregelen kişisel web sitelerim için sadık bir hosting müşterisiyim. Bu süre içerisinde yerli yabancı bir çok hosting firmasından amatör olarak hizmet aldım. Shared serverlardan aldığım dandik(ucuz) hizmetlerden tutun colocation ve vps’lere kadar geniş bir yelpazede deneyimlerim oldu.

Benim cloud ile tanışmam ise bir hobi projesinin sunucu tarafını host edeceğim bir yer ararken, Google’ın AppEngine hizmetine java desteği sağlamasıyla oldu. Google AppEngine bir cloud hizmeti ve belli limitler altında tamamen ücretsiz. Android için geliştirdiğim aScore programının sunucu tarafı 2 senedir Google’a emanet ve bugüne kadar tık demedi :)

Google, AppEngine hizmeti ile geliştiricilere bir platform sunuyor. Geliştiriciler bu platforma uygulamalarını koyuyorlar ve cloud’ta host edilmesini sağlıyor. Network, disk, cpu, memory gibi altyapı birimleri developerlardan tamamen izole edilmiş durumda. Bu tip cloud hizmetlerine Platform as a service (PaaS) adı verilmiş.

Bir çoğumuzun günlük hayatta sıkça kullandığı cloud hizmetleri de var. Mesela gmail,flickr,dropbox vb. Bu tip verisi internette olan web uygulaması tipindeki hizmetlere de Software as a service (SaaS) adı verilmiş.

Amazon’un da cloud hizmetleri var, bu hizmetler yukarıda bahsettiğim PaaS ve SaaS’tan biraz daha farklı, çünkü bu hizmetlerle size, storage, network altyapısı ve makina sağlanabiliyor. Tüm bu alt yapıyı kendiniz konfigüre ediyor ve kullanıyorsunuz. Amazon’un verdiği bu alt yapı sunma hizmetlerine de Infrastructure as a service (IaaS) adı verilmiş.

Cloud ile ilgili bir çok bilgi ve kavramı wikipedia’da da bulabilirsiniz. Ben bu bölümde biraz Amazon cloud hizmeti deneyimlerimden bahsetmek istiyorum.

Amazon verdiği cloud hizmetlerini Amazon Web Services (AWS) adı altında bir araya toplamış. Bunlardan üzerinde en çok uğraştığım Elastic Compute Cloud (EC2) hizmeti oldu. Bu hizmet ile XEN sanallaştırma ortamı kullanılarak müşterilere değişik konfigürasyonlarda sanal makinalar veriyorlar. Verdikleri makinalarda hazır bir Linux dağıtımı veya Windows işletim sistemi olabiliyor. Burada tercih bize kalıyor.

Amazon’un sunduğu cloud hizmetlerinden, web üzerinde bir yönetim konsoluyla (AWS Management Console) ihtiyaç duyduğunuz bir çok işlem yapılabiliyor. Ayrıca hazırladıkları web service’leri kullanarak her türlü işlem gerçekleştirilebiliyor. WEB servislerini kullanarak bazı işlemleri otomatize etmek ya da farklı yönetim uygulamaları da yapmamız mümkün, mesela iPhone için yapılan iAWS ve bir Firefox plugini olan ElasticFox oldukça başarılı örnekler. Cloudfoundry ise Amazon’un IaaS hizmetini Google AppEngine’e benzer bir Paas’a çevirebiliyor, tabiki arka tarafta Amazon Web Servislerini kullanarak…

AWS Management Console

EC2′ya geri dönersek,
Bir EC2 sunucusuna sahip olmak için ilk olarak Amazon Machine Image (AMI) adı verilen image’lardan birini tercih etmemiz gerekiyor.
Image’ların arasında Amazon’un sunduğu Quick Start AMI’ları kullanarak hızlıca bir sunucu oluşturabiliyoruz.
Aynı zamanda herkes kendi AMI’ını hazırlayıp istediği zaman bunu kullanıp sunucu oluşturabiliyor. Mesela bir Centos dağıtımı üzerine apache,mysql,php kurup bu sunucudan bir image oluşturabiliyor aynı zamanda public kullanıma açabiliyoruz.
Sunucu yazılımı geliştiren firmaların da kendi ürünlerini kurup konfigüre ettiği ve resmi olarak sunduğu AMI’lar da var. Mesela Oracle ile birlikte hazırlanmış, üzerinde Oracle DB kurulmuş ve konfigüre edilmiş AMI’ları kullanabiliyoruz. Wowza Media Server kurulu AMI’lar da buna örnek verilebilir.
Son olarak Ubuntu gibi belli bir topluluk olarak, EC2 üzerinde çalışması için resmi olarak hazırlanan AMI’lar da var.

Kısacası, bir hayli alternatifimiz olan bu listeden, ihtiyaç duyduğumuz işletim sistemi ve servislerle ilgili en uygun AMI’yı seçerek sunucumuzu oluşturmamız gerekiyor. Seçimimizi yaparken dikkat edilecek bazı konular var, bunlarla ilgili bir kaç önerim olacak:

İşletim Sistemi

AMI seçerken genelde açıklama bölümünde sunucunun çalıştığı işletim sistemi de belirtilir. Bazı AMI’lara ihtiyaca göre özellikler eklenmiştir, eğer web’de o image’ın oluşturulma amacıyla ilgili güvenilir bir sayfa veya dökümandan referans almadıysanız uzak durun derim. Çünkü gerçekten doğru optimize edilmemiş ya da gerçekten ihtiyazcınızın ötesinde konfigüre edilmiş olabilir. Burda önerim, Ubuntu’nun resmi sitesinde belirttiği ya da Amazon Linux işletim sistemli AMI’lardan birini kullanarak kendi ihtiyacınıza göre sunucu yazılımları kurmak olacaktır.
Özellikle Amazon Linux AMI’ları gerçekten yüksek performansa ve güvenlik önlemlerine sahip. Ubuntu ve Amazon Linux’u aynı iş için denedim ve gerçekten hissedilir bir fark gözlemledim.
Denenemelere hızlı bir giriş için Amazon’un hazırladağı Quick Start AMI’larını da kullanabilirsiniz.

Architecture (32/64 bit)

Bir sunucu oluşturuken karar vermeniz gereken konulardan biri de sanal makinanın donanım olarak nasıl bir konfigürasyona sahip olacağıdır. Size micro instance adı verilen 613 MB hafızaya sahip bir konfigürasyondan, 68 GB hafızaya veya 33.5 ECU (1 ECU = 1 GHz 2007 Xeon işlemci) ‘ya sahip konfigürasyona kadar geniş bir seçenek listesi sunuyor.
Eğer small veya medium sunucular istiyorsanız AMI’yı 32 bit architecture seçmelisiniz. Daha büyük sunucular için ise 64 bit AMI’ları tercih etmelisiniz. AMI açıklamalarında 32/64 bit platform bilgisi muhakkak belirtilmiştir.

Root Store

İlk defa EC2 ile haşır neşir olduğunuzda Root Source tercihinin temel avantaj/dezavantajalarından pek haberdar olunamıyor. AMI seçerken iki farklı tipte Root Store seçeneği göreceksiniz.

EBS: Bu AMI ile oluşturduğunuz sunucularda, yönetim kosolundan istediğiniz anda yeni bir AMI oluşturabiliyorsunuz. Bu özellik sunucu sayısını arttırarak ölçeklenebilen sistemler için çok önemli. Gerekli kurulumları, ayarları yapıp hizmet verir duruma getirdiğiniz bir sunucudan yeni bir private AMI oluşturup gerektiğinde bu AMI’yı kullanarak sunucu sayınızı arttırabilirsiniz.
EBS Boot’un bir başka avantajı ise düşük ve ucuz donanım konfigürasyonlu Micro Instance adı verilen sunuculardan oluşturabilmeniz.
Instance: Pek bir avantajını bulamadım. Sadece bu daha eski bir yöntem olduğu için daha çok public AMI bulma şansınız var.

Region

Amazon sunucularınızı, Avrupa,Amerika veya Asya’da farklı merkezlerde oluşturma imkanı veriyor. Eğer siz Avrupa lokasyonlu bir sunucuya sahip olmak istiyorsanız AMI’ın bu lokasyon için oluşturulmuş olması gerekiyor.

Artık istediğiniz gibi bir sunucu oluşturabilirsiniz. Sunucularınızı çoğaltmak, onlara birer IP set etmek, önlerine bir load balancer koymak, firewall tanımlarını yapmak gibi konular yine AWS Management Console’dan dakikalar mertebesinde yapılabilen işlemler.

Object Oriented Javascript

Temmuz 17th, 2010 | No Comments | Posted in javascript

Günümüz web uygulamalarının geliştirme diline artık html demek yeterli olmuyor. Herhangi  bir web sitesi için bile  javascript kullanımı kaçınılmaz olmaya başladı. Internetin devleri de javascript üzerine müthiş yatırımlar yapmaya başladılar.

HTML5′in de getirdiği yenilikler sayesinde bir masaüstü programı deneyimini javascript ile karşılamak artık neredeyse mümkün hale geldi. Ayrıca birçok mobil platform da javascript ile mobil uygulamalar geliştirmeye olanak sağlamaya başladı. Hepsinden önemlisi, yakında browser tabanlı işletim sistemleri hayatımıza girdiğinde, kaliteli uygulama ihtiyacını bu dile hakim olanlar sağlayabilecek.

Javascript, her ne kadar isminin içinde script geçiyor olsa da artık varlığını ve geleceğini kanıtlamış önemli bir dil durumunda.

Bazen sitelerin source’una bakıp yazılan javascript kodunu incelediğimde, yeteneklerine rağmen kendisine gerekli özenin gösterilmediği bir kenar mahalle çocuğu izlenimi yaratıyor bende.

Web siteleri için belki uzmanlaşmış bir javascript bilgisine ihtiyaç duyulmuyor ama kopleks bir web uygulaması geliştirilecekse kodun kalitesi önem kazanıyor. Kodun kalitesi ise açıkçası o dile olan hakimiyete göre değişiyor.

Ana konuya geri dönersek, Javascript yapısal bir dil gibi görünmekle beraber istenirse objeye dayalı programlamaya da olanak veriyor. Ben de javascript objeleri ve yetenekleri ile ilgili bir kaç örnek ve bilgi vermek üzere aşağıdaki yazıyı hazırladım.

Javascript Objesinin Özellikleri

  • field (property) ve method’lardan oluşmakta.
  • constructor içerebilmekte.
  • method veya field’ları override edilebilmekte.
  • objeleri extend edilebilmektedir.

Array,String,Number,Boolean gibi objeler native olarak kullanabildiğimiz javascript objeleridir. Kullanımı ise şu şekildedir:

text = new String("Merhaba"); //Obje yaratma
i = text.indexOf("h); //Method çağırma
len = text.length;  //Field okuma

Kendi javascript objemizi nasıl tanımlayabiliriz.
Üç adet yöntem kullanılabiliyor.

Bir tanesi JSON formatı, örnek vermek gerekirse:

var StaticPeople = {
		name : "Erkan",
		setName : function(name){this.name=name},
		getName : function(){return this.name}
	};

Bu bir static objedir. Görüldüğü üzere her method bir fonksiyon olarak tanımlıdır. Fieldları okuyabilir ve değiştirebilirsiniz:

alert(StaticPeople.name);
StaticPeople.setName("sezer");
alert(StaticPeople.getName());

İkinci obje yaratma yöntemi ise Object objesini extend etmektir. Örnek vermek gerekirse:

var StaticPeople2 = new Object();
StaticPeople2.name = "Erkan";
StaticPeople2.getName = function() {return this.name;}
StaticPeople2.setName = function(name) {this.name=name;}

Bu da bir static objedir. Burdaki Kullanımı JSON ile aynıdır.


Peki static olmayan javascript objesine ihtiyacımız varsa ki bu da üçüncü yöntem oluyor:

function People(name) {
	this.name = name;
	this.getName = function() {return this.name;}
	this.setName = function(name) {this.name=name;}
}

Aslında yaptığımız basit bir fonksiyon tanımı gibi görünüyor ama aslında burada bir obje tanımı yaptık, bir constructor tanımı yaptık, objeye bir field, iki de method tanımladık. Kullanımı ise şu şekilde:

people = new People("Erkan");
alert(people.getName());
people.setName("Sezer");
alert(people.getName());
 
people2 = new People();
alert(people2.getName());
people2.setName("Sezer");
alert(people2.getName());

Burada görüldüğü üzere iki farklı constructor kullanılmasına rağmen sadece bir constructor tanımladık.


Not:

  • Aynı isimde (constructor parametreleri farklı da olsa) birden fazla obje tanımı yapamıyoruz.
  • Javascript objelerinin tüm field ve method’ları public’tir. Tanımladığınız objenin tüm field ve method’ları erişime açıktır.

Bir javascript objesine field ve method ekleme.
People objesini ilk tanımladığımızda name adınde bir field’ı ve bunun setter ile getter’ı vardı. Bu objeye surname ve onun setter/getter’ını eklemek istiyoruz, yazacağımız kod:

People.prototype.surname;
People.prototype.setSurname = function(surname){this.surname=surname;}
People.prototype.getSurname = function(){return this.surname;}

Burada kendi yarattığımız objemizi dinamik olarak extend etmiş olduk. Eğer static bir objeye field ve method eklenecekse:

StaticPeople.surname;
StaticPeople.setSurname = function(surname){this.surname=surname;}
StaticPeople.getSurname = function(){return this.surname;}

Bir javascript objesini extend etme.
Yeni bir obje (sub class) tanımı yapıp mevcut bir objeyi’ı (super class) extend edebiliyoruz. Mesela yukarıda tanımladığımız People objesini extend eden bir Customer objesi tanımı yapalım:

function Customer(){
	this.inheritFrom = People;
	this.inheritFrom();
	this.customerId;
	this.getCustomerId=function(){return this.customerId;}
	this.setCustomerId=function(customerId){this.customerId=customerId;}
}

Son olarak Javascript’in native Objelerine de dinamik olarak method ve field edilebildiğinden ve methodlarının override edilebildiğinden bahsetmek istiyorum.

String objesine Method ekleme:
Mesela bir string’e alert adında bir method ekleyelim:

String.prototype.alert = function () {alert(this)};
var mesaj = "Bu bir mesajdir..";
mesaj.alert();

String objesinin bir methodunu Override etme:
Bu örnekte de string’in indexOf methodunu override ediyoruz:

String.prototype.indexOf = function () {return "yedi"};
var mesaj = "Bu bir mesajdir..";
alert(mesaj.indexOf("m"));

Yeniden merhaba

Şubat 24th, 2009 | 1 Comment | Posted in android, cep

Uzunca bir aradan sonra kişisel blog‘uma bir girdi yapma şansı buluyorum. Okul yıllarımda pek iyi yönetemediğim boş zamanlarımı bugünlerde mumla arıyorum, bu uzun arada birçok şey yapmak istedim ama bunlardan ancak bazılarını yapabildim bazılarına ise zaman ve fırsat bulamadım..

Uzun bir süre www.iphoneturkey.biz sitesinde yazdım, arkadaşlarla beraber burada iPhone ve uygulamalarını tanıttık. iPhone için İstanbul Trafik kameralarını gösteren iTrafik ve bir çok rss kaynağını bir araya getirerek oluşturduğumuz Ceprss projelerini yaptık.

iPhone ile ilgili çalışmalara ara verip Anroid işletim sistemi ile ilgilenmeye başladım, Android‘in kısa zamanda çok popüler bir işletim sistemi olabileceğine karar verdim ve deneyim kazanmak için bir uygulama geliştirdim, daha sonra bu uygulamayı Android kullanıcıları ile buluşturabilmek için Android Market için bir hesap açtırdım, hesap sahiplerine Google’ın uygun şartlarda temin ettiği Developer telefonundan sipariş verdim ve bu telefonu kullanmaya başladım. Android işletim sistemi hakkında ve bunu kullanan ilk telefon olan Google’un G1 modeliyle ilgili deneyimlerimi kısa bir süre önce Mobilkasaba sitesinde yazmaya başladım, tabi bunların hepsi hobi olarak gerçekleştirdiğim aktivitelerdi, tüm bunların yanında profesyonel iş hayatımda oldukça yüksek bir tempoyla çalışmaya devam ettim.

Bugün bir blog yazmamın asıl nedeni, Android platformu ile ilgili deneyim kazanmak için geliştirdiğim aScore uygulaması. Android ile ilgili haber ve inceleme yazıları yazan Hollandalı bir site yazarı aScore hakkında bir inceleme yazısı yazmak istediğini belirtip benden bir takım bilgiler istedi, kısa bir süre sonra da inceleme yazısını yayınladılar, daha önce www.androidwiki.com sitesinin yazarı tarafından açılmış aScore sayfasına katkıda bulunma talebi gelmişti. Daha sonra başka yabancı sitelerde de haber ve inceleme yazısı olarak çıkmaya başladı. Uygulama yavaş yavaş ilgi görmeye başlayınca bu uygulamadan kendi blogumda niye hiç bahsetmedim diye sordum kendi kendime.

aScore, futbolseverlerin beğeneceği bir uygulama. Dünya üzerindeki 27 futbol ülkesinin birinci ligleri hakkında hızlıca bilgi alınabileceği bir uygulama. Uygulama sayesinde istediğiniz ülkenin puan durumuna, fiksturüne ve canlı maç sonuçlarına hızlıca ulaşabiliyorsunuz. Uygulama Android destekleyen tüm telefonlarda çalışabilecek, uygulamayı ilk yayınladığım zamanlarda Android işletim sistemini kullanan G1, sadece Amerika’da satılıyordu. Amerika futbola karşı fazla ilgili olmadığı için uygulamayı indiren kişi sayısı çok olmadı ama buna rağmen beğeni oldukça yüksekti. G1 yavaş yavaş Avrupa ülkelerinde de satılmaya başlayınca indirilme sayısı artmaya başladı, yorum ve email sayısı ve ekstra talepler de bununla birlikte artmaya başladı.

Toplam 3 sürüm yayınladım, birincisinde (0.1) sadece 6 Avrupa ligi vardı, ikinci sürümde (1.0) lig sayısını 27′ye yükselttim ve programda bazı iyileştirmeler yaptım. Üçüncü ve son sürüm (1.0.1) ise ufak bir hata giderimi ile ilgiliydi. Dördüncü bir sürüm çıkartıp (1.1) aScore ile ilgili başka geliştirme yapmamayı planlıyorum (tadında bırakmak).

Android ve uygulamaları hakkında Mobilkasaba‘da yazmaya devam edeceğim. Eğer yeni bir proje içerisinde yer alırsam ondan da blogumda bahsetmeyi planlıyorum ayrıca blogumda daha önce yaptığım gibi sevdiğim, beğendiğim uygulamalardan da bahsetmeye devam etmek istiyorum umarım buna vakit bulabilirim, çünkü gerçekten ilgi çekici programlar girdi hayatıma bunları ilk fırsatta tanıtmak isterim mesela wubi,lubi ya da dropbox belki de Microsoft’un SyncToy uygulaması veya bir başka Microsoft yapımı olan Live Mesh, tabi ntlmap’i de bir yerlere sıkıştırmam lazım.