NoSQL vertiabanı motorları son yıllarda çok popülerleşti, çünkü yapısız olmalarından dolayı daha kolay mimari değişiklik yapabileceğiniz veri yapıları olduğu için tercih edilmeye başladı. Ölçeklenebilirlik de klasik sql veritabanlarının sınırlı ve geleneksel kaldığı konulardı. NoSQL çıkışı kesinlikle modern bir çözüm olarak görülebilir.

İnternette bir çok karşılaştırma, performans analiz yazıları bulabilirsiniz sql ve nosql veritabanları hakkında. Ancak her yere uyan mükemmel bir çözüm yok. Benim gördüğüm kadarıyla, hibrid ve akıllıca kurgulanarak dengelenmiş ve dağıtılmış sistemler en yaygın kullanımlar. Yani bazı şeyleri nosql ile daha zor ve daha çok kodlama zamanı harcayarak yapabilir, bazı şeyleri de sql ile yönetemez ve yapamazsınız.

Daha teknik konulara giriyorsanız zaten bu yazıdan daha çoğuna ihtiyacınız var :-) Bu yazı daha çok mongo'ya giriş ve flörtleşme dönemi hakkında.

Eğer MongoDB'yi denemek istiyorsanız, mongodb sunucusunu bilgisayarınıza yüklemek zorunda değilsiniz. Kurulumu da çok zor değil fakat sadece denemek için sunucu kurulumu konfigurasyonu gibi şeylerle uğraşmak zorunda değilsiniz. Sadece istemci sürücülerini kurmanız yeterli. Bu konu hakkında mongodb dökümantasyonundakihttp://docs.mongodb.org/ecosystem/drivers/php/ sayfasını inceleyebilirsiniz.

MongoLab adında bağımsız bir servis sayesinde ücretsiz bir mongo veritabanı oluşturabilir ve denemelerinizi onun üstünde yapabilirsiniz. MongoLab veritabanı ve kullanıcınızı oluşturduktan sonra açık erişim izni veriyor. Dolayısıyla php'den veya herhangi diğer bir ortamdan doğrudan erişebiliyorsunuz.

Tabi ki servisin amacı mongo denemek isteyen insanlara servis sunmak değil. MongoLab bulut veritabanı servisi. Veri dosyalarının saklanmasını istediğiniz alt servisi (Amazon, Rackspace, Windows Azure vs...), hatta yüzeysel de olsa bölge seçebiliyorsunuz (Amerika veya Avrupa veya uzak doğudaki bir veri merkezi şeklinde).

MongoLab 500mblık bir alanı ücretsiz sağlıyor. Diğer sınırlamalarını bilmiyorum fakat ufak projeleriniz için veya deneme yapmak için ideal. Eğer uygulamanız çok veri kullanmaya başlarsa küçük, büyük paketleri veya kurumsal hizmetlerinden faydalanabilirsiniz.

MongoLab ile tamamen php mongo eklentisi bağımlılığından da kurtularak doğrudan servisin basit REST apisini kullanabilir ve tek başına çalışan bir uygulama yazmanız da mümkün.

Konumuz mongo iken, birkaç php-mongo interaksiyonunu denediğim bir php dosyasının kodunu doğrudan vermek istiyorum.
<?php

$mongo = new Mongo("mongodb://dbuser:dbpassword@*.mongolab.com:45297/test_database");
$db = $mongo->selectDB("test_database");

$action = isset($_GET['action']) ? $_GET['action'] : NULL;

?>
	<ul>
		<li><a href="?action=create_collection&name=test_collection_<?=rand(1,10000);?>">Create a test collection</a></li>
		<li><a href="?action=list_collections">List collections</a></li>
		<li><a href="?action=add_record_to_nonexistent_collection">Add record to non existent collection (it creates the collection)</a></li>
		<li><a href="?action=add_user">Add a user</a></li>
		<li><a href="?action=find_fatih">Find Fatih</a></li>
		<li><a href="?action=search_user">Search user</a></li>
	</ul>
<?php

switch ($action) {
	case 'create_collection':
		$name = isset($_GET['name']) ? $_GET['name'] : 'users';
		var_dump($db->createCollection($name, FALSE));
		exit;
		break;

	case 'list_collections':
		$_collections = $db->listCollections();

		print '<h3>Collecitons</h3>';
		foreach ($_collections as $collection) {
			print $collection . '<br />';
		}

		break;

	case 'add_user':
		$name = isset($_GET['name']) ? $_GET['name'] : 'test_user_' . rand(1, 100000);

		$users = $db->users;
		$result = $users->insert(array(
			'username'   => $name,
			'created_at' => date('Y-m-d H:i:s')
		));

		print '<h3>Result:</h3>';
		var_dump($result);
		exit;
		break;

	case 'add_record_to_nonexistent_collection':
		$collection = isset($_GET['name']) ? $_GET['name'] : 'collection_' . rand(1, 100000);

		// it creates the collection even if not exists.

		$collection_obj = $db->$collection;
		$result = $collection_obj->insert(array(
			'test' => 1,
			'time' => time()
		));

		print '<h3>Result:</h3>';
		var_dump($result);
		exit;
		break;

	case 'find_fatih':
		$users = $db->users;
		$result = $users->findOne(array("username" => 'fatih'));

		print '<h3>Fatih?</h3>';
		var_dump($result);
		exit;
		break;

	case 'search_user':
		$users = $db->users;
		$result = $users->find(array("username" => array('$regex' => 'test_')));

		print '<h3>Users:</h3>';
		foreach ($result as $_result) {
			var_dump($_result);
		}
		exit;
		break;

	default:
		break;
}
İlk satırlarda göreceğiniz dsn'i mongolab'den edineceğiniz sunucu adresi ve portunu (tahminimce her kullanıcı için farklı olma durumu var), veritabanı kullanıcı adınız ve şifrenizi belirterek tek parça string şeklinde belirttiginiz takdirde bağlantı sağlayabileceksiniz.

Mongo, küçük uygulamalarda veri düzeni zorunluluğu olmadığı için kullanması çok keyifli, fakat verinizi dökümante etmeyi unutmayın. Yoksa neyin ne olduğunu unutur veya ipin ucunu kaçırarak karmaşık bir veri yığını elde edebilirsiniz günün sonunda.

MongoDB dökümantasyonunu inceleyerek indeksleme, sorgulama ve veri yönetimi nasıl yapılıyor fikir edinebilirsiniz. Ayrıca php manual'daki bazı SQL örneklerinin php ile mongo sınıfında nasıl yapıldığını gösteren bu sayfayı:http://php.net/manual/en/mongo.sqltomongo.php incelemekte fayda var.

MongoLab servisinin adresihttps://mongolab.com
Facebook uygulaması geliştirmek veya varolan uygulamanıza facebook güzelliklerini entegre etmek bir çok dilde (javascript, php vs) sdk'lar yardımı ile çok kolaylaştı. Fakat standart dışı işler yapmaya başladığınızda veya uygulama zekanızda birden fazla facebook methodunu zincirleme kullandığınızda, standart methodların yapamayacağı şeylere ihtiyaç duyabilir veya uygulamanız ile facebook API arasındaki iletişimini optimize etme ihtiyacı duyabilirsiniz.

Örnegin facebook'u üye kayıdı için kullandınız ve üye kaydında üye bilgilerini, üyenin fotografının orijinal versiyonunu (yüksek çözünürlüklü versiyonunu) ve arkadaş listesini uygulamanızda kullanacaksınız. Bunlardan ikisini (kullanıcı bilgilerini isteme ve arkadaş listesini istemeyi) neredeyse tüm facebook sdk'lerindeki standart methodlarla yapabilirsiniz. Ancak profil fotografının orijinal boyutunu almak için birden fazla şey yapmanız gerekebilir, ayrıca ortada düzgün bir method yok bunun için. Biraz hack gibi de olsa bilinen bir yöntemle bunu elde etmeye çalışacağızö dökümanın iletleyen kısımlarında buna değineceğim.

Biliyorsunuz facebook FQL (Facebook Query Language) denilen bir çeşit SQL dili kullanıyor. Geliştirici dökümantasyonunda tablo listesini ve her tabloya ait veri yapısını bulabilirsiniz. Ayrıca hangi veri türüne erişebilmek için hangi izinlere sahip olmanız gerektiği de dökümantasyonda veriliyor:http://developers.facebook.com/docs/reference/fql/

FQL'in güzel kısmı, birkaç basit SQL yapısını destekliyor olması. Çok gelişmiş şeyler yapılamasa da basit sub querying ile birçok işi kolayca halletmeniz mümkün.

En basit iki örnek olan kullanıcı bilgisi ve arkadaş listesi elde etmek için şu iki FQL'i kullanabilirsiniz.
SELECT uid, username, email, name, sex, birthday_date, verified FROM user WHERE uid = me()
FQL'de * şeklinde tüm kolonları seçme veya herhangi bir alanı seçici olarak kullanama seçeneğiniz yok. İstediğiniz tüm alanları belirlemeniz gerek. Ayrıca "WHERE birthday_date < '1980'" gibi bir seçici yazamazsınız. Dökümantasyonda da belirtilen ve sadece taranabilir (indexable) olarak tanımlanmış alanları kullabilirsiniz. Bunlar id, username gibi genel seçiciler.

Bu FQL size tek satırlık bir sonuç dizisinde, kullanıcı bilgisini istenen alanları verecektir. Gördüğünüz gibi secicide me() fonksiyonunu kullanarak giriş yapmış olan kullanıcıyı id'sini elde etmeye çalışmadan FQL'de kulanabiliyoruz. Ya da idsini bildiğiniz bir kullanıcı için bir veri isteginde bulunabilirsiniz. Ancak eğer istek yaptığınız kullanıcı, istenen tüm alanlara erişim için uygulamanıza izin vermediyse hata alacaksınız. Yani istek yaptığınız kullanıcının özel bilgilerini sorguluyorsanız, o facebook kullanıcısının, uygulamanızı kurarak gerekli izinleri vermiş olması şart.

Arkadaş listesini almak için kullanacağımız FQL:
SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
Bu FQL aynı zamanda nasıl sub query kullanabileceğinizi gösteren bir örnek. İç sorguda giriş yapmış kullanıcının arkadaşlarının id listesini alıyoruz, sonra genel kullanıcı bilgisi sorgulayabildiğimiz tabloda (users) bu listeyi sorguluyoruz. Arkadaş listesinden alabileceğiniz veriler de sınırlı. Yani her bilgiyi sorgulayamıyoruz.

Az önce bahsettiğim profil fotografının orijinal yanı büyük versiyonunu elde etme işi bir parça hack sayılabilir. Yani kabul edilen bir method değil, fakat işe yarayan ve kullanılan bir method. Kullanıcınızdan user_photos iznini aldığınızda kullanıcınızın tüm albümlerini ve fotograflarını okuma hakkina sahip oluyorsunuz. Aşağıdaki FQL'i kullanarak profil fotografının orijinal boyutuna ulaşabilirsiniz:
SELECT src_big FROM photo WHERE pid IN (SELECT cover_pid FROM albüm WHERE owner = me() AND type = 'profile')
İç sorguda albüm tablosundan "profile" türündeki tekil ve özel olan albümün (bu albüm, profil fotografları albümü) cover_pid yani cover fotografının id'sini sorguluyoruz. Bu bize son yüklenen profil fotografının idsini veriyor. Sonra da fotograflar tablosundan src_big yani büyük boyut (genelde orijinal boyutu saklıyor facebook bu alanda) adresini istiyoruz.

Optimizasyon demiştik

Kodunuzu FQL ile çalışır hale getirmek, 3 farklı isteği ayrı ayrı çağırmanızı değiştirmeyecektir. Yani işimiz burada bitmiyor eğer optimizasyon yapmaya çalışıyorsak.

Eski API'de tek istekte birden fazla FQL sorgusu yapmanızı sağlayan bir method vardı, başka şekillerde aynı method halen facebook tarafından sağlanıyor. Bu method ile dizi şeklinde tüm sorgularınızı isteyebilir ve büyük bir nense şeklinde tüm sonuçları tek seferde alabilmenizi sağlıyor. Böylece, zincir istekleri tek isteğe indirip aynı zinciri facebook sunucularına delege etmiş olursunuz. Facebook genelde sizin 3 ayrı istek yapmanızdan çok daha hızlı şekilde istekleri sorgulayıp dönecektir.

Facebook aynı methodu farklı şekillerde sunmaya devam ediyor. Fakat ben size en genel olan methodu önerecegim. İstekleriniz FQL olsun olmasın, birden fazla opengraph isteğini tek seferde isteyip cevap alabildiğiniz method batch requests olarak adlandırılıyor. Bu yazı daha çok FQL'ler üstüne olduğu için batch requests üstüne başka bir yazıda değineceğim. Batch Requests hakkında detaylı bilgiyi facebook dökümantasyonundaki ilgili sayfadan edinebilirsiniz:https://developers.facebook.com/docs/reference/api/batch/
14 Ağustos Salı ´12   —   4 Yorum
Eğer bir kaynak arıyorsanız, indexlerin güncelliği, genişliği gibi nedenlerden dolayı, diğer arama motorları yerine Google'ı tercih etmek, iyi bir karar olarak düşünülebilir. Yaptığınız Google aramalarını programatik olarak yapmak ve sonuçları herhangi bir şekilde kullanmanın sayısız örneği verilebilir.

Örneğin, sayfanıza site içi arama eklemek istiyorsunuz. Sayfanıza ait içeriği eğer Google zaten tarıyorsa, site içi aramanız aslında basit bir Google araması ile yapılabilir. Biliyorsunuz Google'da "site:mfyz.com" şeklinde arama yapılacak domaini filtreleyebiliyorsunuz. Dolayısıyla site içi aramanızı, herhangi bir algoritma yazmaya gerek kalmadan, hatta sadece tarayıcıda javascript ile yapabilirsiniz.

Google'un istemci altyapıları için sunduğu JSON tabanlı bir arama APIsi var. Bu api sayesinde normal bir Google araması yapabiliyorsunuz.

Bu API'yi basit bir HTTP isteği ile kullanabiliyorsunuz. Herhangi bir Google araması yapıyormuş gibi bir sorgu gönderip cevabını json olarak alıp işleyebiliyorsunuz.
http://ajax.googleapis.com/ajax/services/search/web?v=1.0
Aramanızı bu URL'e gerekli parametreleri ekleyerek yaptığınızda Google en fazla 8 sonuç verecek şekilde dönüyor.

Cevap olarak dönen JSON içeriği uzun olduğu için burada göstermeyeceğim. Ama birkaç parametreyle gelen sonuç kümesini kullanabilir, sayfalama ve sonuç boyutu gibi parametreler ile sayfalama yapabilirsiniz.

Asıl kullanacağınız sonuç değeri, arama sonuçlarının bulunduğu response.responseData.results sonuç kümesi olacaktır. Basit bir nesne dizisi olan bu değeri javascript ile ekrana doğrudan basabilir veya sunucu taraflı bir kod ile işleyebilirsiniz.

Google bu API ile tek istekte en fazla 8 sonuç döndürüyor. Nedenini kesin bir şekilde bilmiyorum fakat güvenlik nedeniyle olduğunu tahmin ediyorum. Eğer 8'den fazla sonuç göstermek istiyorsanız birden fazla api çağrısı yapmak zorundasınız veya istemci tarafında sayfalama yaparak sonuçları sayfalama ile gösterebilirsiniz.

Sayfalama için API çağırısında göndereceğiniz start parametresi, arama sonuçlarının başlangıç sırasını belirtiyor. Eğer belirtilmezse geçerli değeri 0 olacaktır. Bundan sonra 8, 16, 24... şeklinde ikinci, üçüncü sayfaya ait sonuçları, ek çağrı yaparak yükleyebilirsiniz.

Burada kontrol etmeniz gereken tek şey, toplam bulunan sonuç kümenizde yeterli sonuç olup olmamasıdır. Yani eğer kullanıcı son sayfada ise "Sonraki Sayfa" linkini göstermemeniz gerekir. Basit bir sayfalama için;
toplam sayfa sayısı = toplam sonuç sayısı / sayfa başına düşen sonuç sayısı
bölümünün üste yuvarlanması ile bulunur. Bunu Google size toplam bulunan sonuç sayısını tahmini şekilde söylüyor.

Sonuç kümesindeki response.responseData.cursor.estimatedResultCount parametresi size sayısal olarak tahmini sonuç sayısını söyleyecektir. Sayfa sayısını hesaplayarak gerekli sayfalama navigasyonunu oluşturabilirsiniz.

Örneği kodlayalım

Yazının başlarında verdiğim site içi arama örneğini javascript ile kodlayalım. Doğrudan tüm kodu verip açıklayacağım.
<!doctype html>
<html>
<head>
    <title>Page</title>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
	<input type="text" placeholder="Search" id="searchInput" />
	<input type="button" value="Search" id="searchButton" />

	<ul id="searchResultsList"></ul>
</body>
</html>
HTML tarafında ihtiyacınız olan iki ana parça, arama formu ve sonuçları listeleyeceğiniz bir tablo veya liste.

Javascript tarafını jQuery kullanarak yazarak HTTP çağrısını, JSON sonucunu işleme, html elemanlarını yönetme gibi birçok kısmı kolayca halledebilirsiniz.

İlk yapmamız gereken şey arama formundan arama sorgusunu yakalamak ve arama butonundaki tıklama hareketini yakalamak olacak. Bunun için butonun tıklama olayını yakalayıp text alanının içeriğini alıyoruz.
$(function(){
    $('#searchButton').click(function(){
	    search();
    });
});

function search(){
	query = $('#searchInput').val();

	$('#searchResultsList').html('<li class="loading"><span>Aranıyor... (Google Search)</span></li>');

	loadResults(query, 0);
}
Google'un arama APIsini basit bir HTTP isteği ile kullanacağımızı söylemiştim, sonuç bir json nesnesi olduğu için jQuery'nin http istek yardımcı methodlarından getJSON methodunu kullanarak hem isteği yönetebilir hem de cevabı işleyebiliriz.
function loadResults(query, start){
    var apiURL = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&callback=?';
    $.getJSON(apiURL, {
	    q: query + ' site:mfyz.com',
	    rsz: 8,
	    start: start
    }, function(response){
	    var results = response.responseData.results;

	    $('#searchResultsList .nextPage, #searchResultsList .loading').remove();
	    resultsHTML = '';

	    if(results.length){
		    for(var i=0; i < results.length; i++){
			    r = results[i];

			    resultsHTML += '<li><a href="' + r.unescapedUrl +
				    '"><span class="title">' + r.title +
				    '</span><span class="preview">' + r.content +
				    '</span></a></li>';
		    }

		    if (response.responseData.cursor.estimatedResultCount > 8) {
			    resultsHTML += '<li class="nextPage"><a href="#" ' +
				    'onclick="loadResults(\'' + query + '\', ' + (start + 8) +
				    ');">Daha fazla sonuç göster</a></li>';
		    }
	    }
	    else {
			//resultsHTML = '<li class="notfound">Aradığınız kriterde içerik bulunamadı.</li>';
	    }

	    $('#searchResultsList').append(resultsHTML);
    });
}
Yukarıdaki javascript methodu basit bir HTTP çağrısı yapıp gelen json cevabını işliyor. Basitçe bir liste elemanı (ul) içeriği oluşturuyoruz. Gelen sonuç dizisini bir HTML koduna dönüştürüyoruz. Methodun sonunda ise oluşturulan HTML kodunu liste elemanınımıza ekliyoruz.

Bu methodda gördüğünüzü ilk parametre, arama formundan gelen arama sorgusu, ikinci parametre ise, sayfalama için Google APIsine gönderilecek olan sonuç başlangıç indeksi. Bu sayede bu fonksiyonu tekrar çağırarak ikinci, üçüncü ve diğer sayfalardaki arama sonuçlarını yükletebiliyoruz. İlk arama yapılırken yani yukarıda ilk verdiğim javascript kodunda çağırılan arama methodu "0" başlangıç parametresi ile çağrılıyor.

Bu methodda dikkatinizi çekmiş olan bir nokta da arama parametresin sonuna "site:mfyz.com" eklemiş olmam. Sorguya eklenen bu kısım, yapılan aramanın sonuçlarında sadece o domain'deki sayfaları döndürmesini sağlayacaktır.

Yukarıdaki HTML çıktısını CSS ile işleyebilirsiniz veya arama formunu "ara" butonu ile değil eş zamanlı arama gibi her tuşa basıldığında belirli bir zaman aşımı ile girilen kelimeyi yakalayıp arama yapabilirsiniz.
E-posta pazarlaması (e-mail marketing) günümüzün görmezden gelinemez bir parçası. Eğer kullanıcı kitlenizle doğru iletişim kurmak, onların ürününüze veya hizmetinize olan bağlılığını artırmak istiyorsanız, düzenli e-posta kampanyaları yapmanız, veya ilgilendikleri içerikleri, sitenize girmelerini beklemeden e-posta kutularına ulaştırabiliyor olmanız gerekiyor. Bu, aktif kullanıcı kitlesine sahip olabilmeniz için neredeyse zorunda olduğunuz bir iş.

Kullanıcılarınızla doğru e-posta iletişimi kurabilmek için öncelikle bir e-posta pazarlama stratejiniz olması şart. Yani bir kullanıcı sitenize üye olduğunda hangi aralıklarla ne gibi içerikler almalıysa bunu kurgulamanız gerekiyor ilk olarak. Burada dikkat etmeniz gereken tek konu, yaptığınız e-posta pazarlamasının kullanıcı onayı ve kontrolü dahilinde olması. Eğer kullanıcınız, sizden gelen epostaları almayı istemiyorsa basit bir şekilde listenizden çıkabilmeli veya hangi türde içerik almak istediklerini ayarlayabilmelidir. Aksi takdirde kullanıcılar, epostalarınızı spam olarak işaretlemeye başlayacak ve eposta servis sağlayıcıları, eposta sunucularınızın spam skorunu yükseltecek ve hatta belki kara listelere de düşmenize neden olacaktır.

Şimdi gelelim işin teknik tarafına. E-posta pazarlama günümüzde büyük bir sektör. Eğer bir dış bir servis kullanmazsanız, şöyle bir senaryo olası. Yeni bir sunucu aldınız, taze bir ip adresiniz var internette ve sitenizi, eposta sunucunuzu aynı sunucu üstünden yayın yapacak şekilde ayarladınız ve yayına geçtiniz. Eğer sunucunuz yeni ve az önce bahsettiğim e-posta adresine göre bir liste yönetim altyapısı kurmadıysanız işiniz çok zor. Çünkü bir süre sunucunuzun ip adresine ait ün'ünü arttırmaya, böylelikle spam kutuları yerine inbox'a düşmeye başlamanız, ve bir geçmişinizin olması gerekiyor. Ayrıca listelerinizi yönetecek bir yazılımı yazmanız da çok kolay olmayacaktır.

Eğer bir teknoloji startup'i değilseniz aynı zamanda eposta odaklı birçok pazarlama kampanyası yaparak milyonlarca kullanıcıya aktif olarak eposta gönderimi yapmıyorsanız kendi yazılımınızı yazmanızın hiç bir değeri olmayacaktır, ayrıca teknik olarak da bir çok ilkel özelliği yazılımınıza katmak için aylar hatta belki yıllar harcayabilirsiniz.

Bu noktada basitleştirilmiş e-posta pazarlama servisleri devreye giriyor ve bu konuda hizmet veren yüzlerce şirketten birini tercih ederek bir çok gelişmiş izleme, yönetim yapabilirsiniz.

Şimdi size bunlardan biri olan mailchimp'i nasıl kullanabileceğinizi kısaca anlatacağım.




Mailchimp, e-posta pazarlaması konusunda en eskilerden biri ve şu an kullandığım diğer birkaç servise göre teknik açıdan en gelişmişi diyebilirim. Hatta kullanım kolaylığı açısından da en iyisi tecrübelerime göre.

Bu siteyi düşnün. mfyz.com'un kullanıcı kitlesi binlerce kullanıcıdan oluşmuyor, ayrıca çok güçlü bir e-posta pazarlama stratejisine de sahip değil, ihtiyaç da duymuyor çoğu zaman. Ama bazı dönemlerde tüm kullanıcılara veya bellir bir alt kitleye (mesela son ay içinde üye olan üyelere, veya php dökümanlarını okumuş olan kullanıcılara) belirli bir mesaj iletilmesine ihtiyaç duyuyor. Ya da genel bir bülten gönderilmesi gerekebiliyor.

Bu örnek senaryo, herhangi bir internet sitesine veya teknolojiyle bağlantılı iş fikirlerinin neredeyse 90%'ina uyarlanabilir. Burada bahsettiğim, ufak kullanıcı kitlesine sahip siteler. Bunun gerçek bir site olmasına da gerek yok. Ufak bir e-posta grubu da olabilir. Atıyorum bir müzisyenin showlarını yaparken bir not defteriyle insanların e-postalarını toplayıp oluşturduğu bir bülten listesi bile olabilir, veya okulda bir sanat klübünün üyeleri olabilir. Örnekler çoğaltılabilir.

Böyle bir kullanıcı kitleniz varsa ve bu kitleye hızlı bir şekilde bir mesaj iletmek istediğinizde mailchimp size ücretsiz olarak fayda sağlayabilir. Sanırım 2,000 kullanıcıya kadar ve aylık 12,000 eposta yani tüm kullanıcı kitlenize 6 kere eposta atmanızı sağlayacak kadar aylık bir kota sunuyor. Eğer bu sınırları aşıyorsanız, e-posta pazarlama stratejinize göre aylık üyelik veya gönderilen e-posta başına ödeme yaparak çok ufak bütçelerle e-posta pazalamanızı devam ettirebilirsiniz.

Mailchimp nasıl çalışıyor?

Mailchimp, eposta listeleri, kampanyalar, formlar ve şablonlar olarak çok güzel şekilde yönetimsel bölümlere ayrılmış. E-posta tasarımlarınızı şablonlarda, kullanıcı kitlenizi tek veya birden fazla listede, bu listelere üye olunabilmesi veya üyelikten çıkmak, üyelik ayarlarını değiştirebilmek gibi işlemleri yapabilmek için formlar tasarlamanızı sağlıyor. Hazırladığınız bir şablonu bir listeye veya bir alt listeye göndermeyi kampanya olarak tanımlıyor ve kampanyalarınızı istediğiniz zaman başlatabiliyor veya ölçümleyebiliyorsunuz.

Kullanıcınızı kendi kayıt sistemine aldığınız anda, isterseniz API aracılığıyla kullanıcı bilgisini mailchimp'deki listenize de kaydedebiliyorsunuz. Mailchimp istediğiniz kadar kullanıcı detayını saklayabiliyor.

Sitenize e-posta bültenininiz için üyelik formu koymak

Sitenize bülten hazırlamak istiyorsunuz. Diyelim ki, mailchimp'de bir liste oluşturdunuz "Bulten" adında. Formlar bölümünde signup form düzenleyerek kullanıcıdan isteyeceğiniz bilgileri ekleyip çıkarabiliyorsunuz. Kullanıcınızdan isteyeceğiniz bilgi sayısı ne kadar az ise o kadar daha çok üyelik alacağınızı unutmayın. Bir e-posta pazarlaması için gereken tek şeyin e-posta adresi olduğu aşikar. Dolayısıyla formunuzu sadece e-posta alanı kalacak şekilde düzenliyoruz.

Liste detayı sayfasındayken üstteki menüden "For Your Website" menüsünde "Signup Form Embed Code" sayfasına tıkladığımızda farklı görünüm seçenekleriyle üyelik formuna ait koda erişebilirsiniz.



Eğer css, html ile uğraşıp kendi görünümünüze uyarlamak istiyorsanız "Naked form" seçeneğini seçip javascript ve css olmayan çıplak form html kodunu kopyalayabilirsiniz. Sitenize yerleştirdikten sonra kendi form element stillerinizi uygulayabilirsiniz.



Bu formu sitenizin yan kolonuna veya sayfa sonu bölgesine yerleştirerek her sayfadan erişilebilir hale getirebilir ve daha çok bülten üyeligi yakalayabilirsiniz.

Artık, genel bir kampanya hazırlayarak bir "Bulten" listesindeki tüm üyelere, sitenizdeki gelişmeler hakkında düzenli mesaj gönderebilirsiniz.

Popüler Etiketler

search google cms mysql sql optimizasyon analyse procedure mdb2 pear injection cache ubuntu ntfs fstab php apache kurulum twitter portfolio facebook opengraph api optimization fql wanda proje kampanya player license lisans session apple macosx meta share iphone ipad connect box date diff windows html table internet statistics wordpress rss social integration service network blog object javascript js parse xml gimp howto nasıl örnek kod linux konsol www subdomain redirect crossdomain notebook laptop support ie internet explorer css3 html5 subversion svn wireless chart grafik imza signature mail digital workspace jquery textarea mobile startups music iOS ipucu kontrol yapıları if while ui ux login webkit form ios itunes app banner nedir compile applications free browsers osx lifestream dokuman mootools doritos tytz pharma hack icon ikon download css xhtml firefox logo web app ajax xmlhttprequest framework plugin icons http server newsletter subscription mfyz media auth zaman export cookie terminal sosyal regex tool spam htaccess route router mod_rewrite istatistik medya switch app store store in-app purchase purchase verification storekit itunes connect db database mssql pgsql less kitap design development oyun seo insanlar radio button calendar phpstorm jetbrains ide editor ruffles tebrik input select prepare execute open source job coding style url compiler on-the-fly tarih developer generator code bootstrap assets git version control deployment sitemap query browser screen graph link language widget