Olan Biten

Bir yıl önceki son yazımdan sonra Doitr  yazısı ile geri döndüm. O zaman biraz da neler olup bittiğinden bahsedeyim. Son iş yerimde üçüncü yılımı doldurmak üzereyim, kendi adıma rekor oldu bu ve o tarafta işler tüm yoğunluğu ile devam ediyor. Farklı bir durum yok açıkcası.

İşin eğlenceli kısmına gelirsek geçen sürede bir kaç başarısız (kime göre, neye göre :)) mobil oyun macerasından sonra Doitr ile ilgilenmeye başladım. Bu arada da mobil uygulama için platformlar denemeye devam ediyorum. Native, Intel XDK, Phonegap. Hepsi çok değerli bilgiler, dersler kattı bu anlamda çok da başarısız değil anlayacağınız oyun denemelerim.

Daha sonra yeniden sosyal bir projeye geri döndüm. Her ne kadar sosyal projelere ciddi bir sermayem olmadan girmeyi düşünmesem de, arada tekrar denemekten kendimi alamıyorum. Şu an Doitr‘dan başka, fikir-prototip aşamasında olan bir mobil uygulama daha bulunmakta ama dediğim gibi vakit almıyor. Sadece bazı temeller ve tartışmalar üzerinde şu an.

Son olarak da güvendiğim ve denemek istediğim hizmet tabanlı bir proje var. Tabi o daha büyük kararlar ve fedakarlıklar gerektiriyor. Şimdilik o yüzden demlenme aşamasında. Bir gelişme olursa tekrar yazarım zaten.

Bu arada Laravel Framework ile liseli aşıklar gibiyiz. Sürekli birlikteyiz, gözümüz başkasını görmüyor.

Şimdilik profesyonel işimden kalan neredeyse tüm zamanım Doitr’a gidiyor. Durumlar böyle, umarım tekrar yazmam bu kadar uzun sürmez 🙂

Not: Resim ne alaka diyebilirsiniz. Hem bloga ferahlık, renk gelsin istedim biraz. Hem de bu aralar doğaya, yeşilliğe hasret kaldım, ona bir atıf.

Doitr – Bir Sosyal Görev Uygulaması

Merhaba,

Evet farkındayım yıllar geçti son yazımın üstünden. Ama güzel bir sebeple buradayım tekrar 🙂 Doitr adlı uygulamamdan bahsedeceğim çok kısa. En güzel google play üzerindeki açıklama ifade eder sanırım.

Doitr bir sosyal görev uygulamasıdır. Uygulama aracılığıyla sosyal görevler tanımlayabilir ya da tamamlayabilirsiniz.
Doitr sizin hem başkalarının görevlerini tamamlayıp eğlenmenizi hem de kendinize atadığınızı görevler ile motivasyonunuzu artırmanızı sağlar.

Paylaşılan görevler eğlence amaçlı olabileceği gibi sosyal bir sorumluluk amacıyla da eklenebilir.

Bir görev anlık olarak trafiğin fotoğrafını göndermek olabileceği gibi, bağlı gözlerle arkadaşına makyaj yapmak, maskeli selfie göndermek, video ile ünlülerin taklidini yapmak, en güzel futbol karesini yakalamak gibi milyonlarca şey olabilir.

Sen görevi yaparsın, başarılı olup olmadığına diğer kullanıcılar karar verir.

Şu an beta aşamasında ve geliştirmesi devam ediyor. Iphone uygulaması da çok kısa bir süre içerisinde yayında olacak. Uygulamayı google playdan indirebilirsiniz. Yorumlarınız varsa çok faydası olacaktır.

PHP Long Polling Örneği

Web ve mobil uygulamaların son zamanlardaki olmazsa olmazlarından birisi de bize olayları bildirimler ile iletmesi. Uygulamalar gelen mesajları, beğenileri vs. sayfanın bir yerinde bizim başka bir sayfaya gitmemize gerek kalmadan bize iletiyorlar. Ben de üzerinde çalıştığım bir uygulama+web sayfasında bildirimleri gösterme ihtiyacı hissettim. İlk etapta bunu web socketler ile yapmaya karar verdim. İlk denemem de gayet güzel bir şekilde çalıştı ama bir de mobil uygulama üzerinde denemeye karar verdiğimde hayal kırıklığına uğradım çünkü android WebView’de web socketler desteklenmiyordu. Bu nedenle daha az verimli, daha sorunlu ama yapması gereken işi platform ayırt etmeden yapan eski yöntem long polling ile yapmaya karar verdim. Belki ihtiyacı olanlar olabilir düşüncesiyle burada bir küçük örneğini paylaşmaya karar verdim, temel mantığı göstermekte faydalı olacaktır.  Öncelikle değişiklik olup olmadığını takip eden php dosyamızı yazalım.

polling.php

<?php
$gonderenId=$_POST["gonderenId"];
$pollMu=$_POST["poll"];
if (file_exists($gonderenId.'.txt') == false)
{
    file_put_contents($gonderenId.'.txt', time());
}

if (isset($pollMu))
{
    set_time_limit(150); // Zaman limitini beliliyoruz

    date_default_timezone_set('Europe/Istanbul');
    $time = time();
    $poll = true;
    while ($poll)
    {
        clearstatcache();
        $mtime = filemtime($gonderenId.'.txt');
        if ($mtime > $time) // Eğer dosyanın eklenme/güncellenme zamanı alınan zamandan büyük mü 
        {
            $poll = false;
            //burada veritabanından ilgili değerler çekilecek.
        }
        sleep(1); // Kaynakları tüketmemek için bir süre bekliyoruz
    }

    $arr = array ('mesaj'=>1,'begeni'=>2,'hediye'=>3); // Bunlar veritabanından alınan sonuçlar olacak
    echo json_encode($arr);
    exit;
}
?>

Bu dosyada öncelikle değişiklikleri takip edilecek kullanıcının idsini alıp, eğer bu idli bir dosya yoksa bir text dosyası oluşturuyoruz.  Daha sonra bir while loop’u içerisinde oluşturulan dosyanın tarihi, while’dan önce alınan tarihten büyük mü diye bakıyoruz. Eğer büyükse dosya güncellenmiştir, dosya güncellemesini ilgili kişiye yapılan işlemlerden önce yapıyoruz. Bir sonraki ekleyeceğimiz dosyada yapılan iş. Eğer bu koşulu sağlıyorsa, while döngüsünden çıkmak için değişkenimize false atıyoruz ve sonrasında veritabanından ilgili sorguları çekiyoruz. Ve bunlarsı json olarak dönüyoruz.

islem.php

<?php

$aliciId=$_POST["aliciId"];
$time = time();
file_put_contents($aliciId.'.txt', $time); // İlgili kullanıcının dosyasına o anı yazıyoruz ki server.php değişikliği yakalayabilsin.
//Burada veritabanında yapacağımız asıl işleri yapıyoruz.

?>

Kodumuzun bu kısmı ise kişileri mesaj attığımızda, beğeni gönderdiğimizde vs çalışacak olan veritabanı kodlarının bulunduğu kısım. Burada veritabanı işlemlerinden hemen önce alıcının idsi ile bulunan dosyaya tarih bilgisini atıyoruz ki dosyanın tarihi güncellensin ve az önce yazdığımız while döngüsündeki koşulu sağlasın.

Son olarak da client sayfamızı yazalım.

client.html

<html>
	<head>
		<title>
			Deneme
		</title>
		<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1254">
	<script src="jquery-2.0.3.min.js"></script>
	<script>
		$(document).ready(function() {

			startPolling();

		$("#gonder").click(function(){
			$.ajax({
				type: "POST",
				url: 'islem.php',
				data: {
					aliciId: '123456789' // Diğer kullanıcının bilgisi
				},
				success: function(data) {
					alert("gönderildi.");
				}
			});				
		});	

		});

		function startPolling()
		{
			$.ajax({
				type: "POST",
				url: 'polling.php',
				data: {
					poll: 'evet',
					gonderenId: '123456789' // Login olan kullanıcının bilgisi
				},
				success: function(data) {
					displayNotifications(data);
					startPolling();
				}
			});		
		}

		function displayNotifications(data)
		{
			var obj;
			try {
				obj = jQuery.parseJSON(data);
				if(obj.mesaj > 0)
					$("#mesaj").html("Mesaj="+obj.mesaj);
				if(obj.hediye > 0)
					$("#hediye").html("Hediye="+obj.hediye);
				if(obj.begeni > 0)
					$("#begeni").html("Begeni="+obj.begeni);
			} 
			catch(err)
			{
				return true;
			}

		}
	</script>
	</head>
	<body>
	<div id="mesaj"></div>
	<div id="hediye"></div>
	<div id="begeni"></div>
	<br />
	<input type ="button" id="gonder" value="Etkileşim Gönder" />
	</body>
</html>

Burada öncelikle sayfamız ilk yüklediğinde ajax ile startPolling fonksiyonumuzu çağırıyoruz. gonderenId değişkeni login olan kullanıcıyı, aliciId de mesaj attığımız vs. kullanıcıyı gösterecek. Burada aynı olma sebebi test edebilme amaçlı. Eğer long polling başarı ile tamamlanırsa, yani bir bildirim gelmişse bildirim divlerimizi güncelliyoruz. Sonrasında tekrar startPolling fonksiyonumuzu çağırıyoruz ki dinlemeye devam edebilelim. İşte hepsi bu kadar. İlgili dosyaları lokalinizde oluşturup, kendiniz de deneyebilirsiniz. Jquery dosyasını da aynı dizine koymayı unutmayın.

Bugünlük bu kadar, Çevik Kalın 🙂

Intel XDK ve intelxdk.org

Son zamanlarda mobile biraz daha fazla ağırlık vermeye başladım. Native uygulamalara tam geçiş yapmadan önce HTML5 ile uğraşıyorum. Intel XDK ile de bu sırada tanıştım, çok yeni çok taze bir kit. İlk kullanımlarımdan sonra oldukça beğendim. Ben de bu platform ile ilgili Türkçe kaynak olması adına www.intelxdk.org adresi üzerinde paylaşımlar yapmaya karar verdim.  Intel XDK gibi bu site de çok taze zamanla video ve makaleler ile zenginleştireceğim tabii ki. İlk olarak Intel XDK New nedir ile başlamak isterseniz buradan okuyabilirsiniz.

Android: Bilgisayardan Emülatöre Kopyala Yapıştır

Android için uygulama geliştirirken bazı durumlarda bilgisayarınızdaki bir metni emülatördeki bir alana kopyalamak isteyebilirsiniz. Bu durumda aşağıdaki gibi çözüm işinizi görecektir. Bu çözüm ile bilgisayarınızdan emülatöre sms göndererek bilgisayarınızdaki metni emülatöre aktarabilirsiniz.

Öncelikle command promptta aşağıdaki komutu giriyorsunuz.

telnet localhost 5554

Burada 5554 emülatörün çalıştığı portu gösteriyor. Sizde farklı bir sayı olabilir.

Sonrasında da

sms send +22222 gönderilecek mesaj

komutu ile sms gönderebilirsiniz. Bu komutu çalıştırmanız sonrasında emülatörünüze bir mesaj geldiğini görebilirsiniz. 22222 yazan yere istediğiniz herhangi bir rakamı yazabilirsiniz.

 

Android Virtual Device

Android için uygulama geliştirirken ilk uygulamanızı yapıp çalıştırdığınızda uzun süre bekleyip sonra uygulamanızı çalıştıramayınca sinir ve hayal kırıklığına uğrayabilirsiniz. Ama hemen pes etmeyin, çünkü sizin hatanız değil. Zaten Virtual Device normalde de çok geç açılıyor. Ancak bir de kimi zaman açıldığında sadece anasayfa da kalıyor, siz o sırada uygulamanızın açılmasını bekliyorsunuz. Aslında uygulamanız çalışmış durumda, tek yapmanız gereken Virtual Device üzerinde Home tuşuna basmak, böylece uygulamanızı görebileceksiniz. Virtual Device’ın yavaş yüklenmesi nedeniyle her seferinde Virtual Device’ı açıp kapatmamanız avantajınıza olacaktır.  Ayrıca Virtual Device’ı oluştururken Snapshot seçeneğini Enabled ederek daha hızlı açılmasını sağlayabilirsiniz.

Öte yandan Virtual Device’ı ilk çalıştırdığınızda bütün ekranı kaplar ve normal cihaz boyutlarında göremezsiniz. Bunu sağlamak için ise Window > Android SDK and AVD Manager menüsünü açıp oluşturduğunuz Virtual Device’ı seçip daha sonra Start butonuna basıyoruz.  Daha sonra çıkan ekranda Scale display to real size seçeneğini işaretleyip, Launch butonuna basıyoruz. Böylece sanal cihazımızı normal boyutlarında gösterebiliriz.

NFC Teknolojisi

NFC (Near Field Commnuciation), cihazların herhangi bir fiziksel temas sağlamadan birbirleriyle iletişime geçmesini sağlayan bir kablaosuz bağlantı teknolojisidir. Aslında temel olarak RFID teknolojisinin bir parçası olan NFC RFID’ye göre çok daha yakın mesafeler için iletişim sağlıyor. (<10 cm) . Tabii ki böyle olması da ekstra bir güvenlik sağlıyor.

Aslında NFC çok yeni bir teknoloji değil. 2004 yılında Nokia, Sony ve NXP tarafından kurulan NFC Forum ile yaygınlaştırılması ve geliştirilmesi için çalışmalar başlamıştı. Şu an NFC Forum’daki üreticilerin bazıları şunlardır :  LG, Nokia, Huawei, HTC, Motorola, NEC, RIM, Samsung, Sony Ericsson, Toshiba, AT&T, Sprint, Rogers, SK, Google, Microsoft, PayPal, Visa, Mastercard, American Express, Intel, TI, Qualcomm, and NXP.

Teknoloji eski olmasına rağmen tam olarak kullanımının yaygınlaşmaya başlaması ve isminin IT dünyasında biraz daha duyulması ancak bu yıllarda mümkün oldu. Bunda tabii ki mobil ve kablosuz teknolojilerin kullanımındaki patlamanın da etkisi var. Örneğin Google’dan sonra Lg 2012’den itibaren NFC Teknolojisini yaygınlaştırmaya başlayacak,  yeni nesil Iphone ve Ipad’lerin de NFC’yi desteklemesi bekleniyor.  Öte yandan McDonalds 2011 sonbaharından itibaren İngiltere’de NFC ile ödeme kabul edeceğini açıkladı.

Peki günlük hayatta nerelerde kullanılabilir? Aslında pekçok alanda kullanılabilir. Örneğin toplu taşımada temassız biletler gibi, kimli kartı olarak, az önceki örnekteki gibi temassız ödeme için , Google Wallet gibi cep telefonunda cüzdan ya da tamamen sosyal amaçlarla paylaşım için. NFC yaygınlaştıkça bu tarz alanlara daha pekçoğu eklenecektir.

Çalışma mantığı olarak bahsettiğimiz gibi RFID teknolojisiyle aynı. Cep telefonlarındaki bluetooth ile benzer bir yapıda. Ancak cep telefonlarından çok daha az enerji harcıyor, hatta kimi durumlarda enerji ihtiyacı olmadan da çalışabiliyor; açık bir telefon ile kapalı bir telefonun iletişimi gibi.  Ayrıca Bluetooth’a göre çok daha kısa mesafede iletişim kuruyor. Bluetooth’a göre dezavantajı ise daha yavaş çalışması.

 

 

Android İçin Uygulama Geliştirmek

Son zamanlarda IPhone üzerine geliştirilen uygulamaların ulaştığı inanılmaz satış rakamları uygulama geliştiricilerin dikkatlerini biraz daha mobil uygulamalar üzerine yoğunlaştırmalarına sebep oldu.

IPhone uygulama geliştirmek için Mac bilgisayar ve MacOS gibi gereksinimlerin olması Iphone için uygulama geliştirmek isteyenleri bu isteklerinden alıkoyuyor. Ancak amacınız sadece Iphone için değil de, yaygın bir platform için mobil uygulama geliştirmek ise birçok kişi tarafından gelecekte mobil cihazların işletim sistemi olarak gösterilen ve şu an bile ciddi aktivasyon rakamlarına ulaşan Android için uygulama geliştirebilirsiniz. İşin en güzel yani Android üzerine uygulama geliştirmek için yüksek maliyetli gereksinimlere ihtiyacınız olmaması.

Android için yazdığınız uygulamaları https://market.android.com/ üzerinden satışa sunabilirsiniz. Bu adreste ücretli ve ücretsiz birçok uygulama bulabilirsiniz. Şu an Türkiye’den geliştiriciler bu adresten uygulama satamıyorlar ancak diğer ülkeleri göz önüne aldığımızda yakında zamanda Türkiye’nin de listeye dahil edilmesini umuyorum. Şu an ise uygulamanızdan para kazanmak için yapabileceğiniz tekşey uygulamalarınıza reklam koymanız. Bunu daha önce Google’ın satın aldığı admob aracılığı ile yapabilirsiniz.

Peki uygulama geliştirmeye nasıl başlayabilirsiniz? Bunun için öncelikle makinanıza JDK kurmanız gerekiyor. Çeşitli uygulamalarla geliştirme yapabilirsiniz ama en kolay şekilde uygulama Eclipse vasıtasıyla geliştirilebildiği için, Eclipse tavsiye ediliyor. Eclipse Classic versiyonu buradan indirebilirsiniz.

Eclipse’i kurduktan sonra ikinci olarak Android SDK‘yı indirip kurmamız gerekiyor.  Android SDK kurulumu sırasında bilgisayarınızda JDK kurulu olup olmadığına bakacaktır. Eğer kurulu değilse kurulum sırasında da indirip kurabilirsiniz.  Kimi zaman JDK kurulu olmasına rağmen Android SDK kurulum sırasında bunu algılayamayabiliyor. Bu durumda Androdi SDK kurulumunu iptal etmeden JDK’yı tekrar kurabilirsiniz. Daha sonra kurulumu bir adım geri götürüp devam ettiğinizde sorun ortadan kalkacaktır.

Bir sonraki adım da Eclipse üzerine Android Development Tools eklentisini (ADT Plugin) kurmamız gerekiyor. Bu yüklemeyi yaparken öncelikle Eclipse’i açmamız gerekiyor. Daha sonra Help > Install New Software menüsünü açıyoruz ve Add butonuna tıklayıp eklentiye bir isim veriyoruz ve adres kısmına da

http://dl-ssl.google.com/android/eclipse/

adresini yapıştırıyoruz.  Aslında normalde gösterilen adres https protokolü üzerinden ama ben de o şekilde sorun çıkardığı için http üzerinden kurulumu yaptım. Daha sonra OK’e tıklıyoruz ve çıkan ekranda Developer Tools’u seçip Next adımlarıyla işlemi tamamlıyoruz.

Bu işlemden sonra Eclipse’de Window > Preferences menüsünü açıyoruz. Sol kısımdan Android’i seçiyoruz ve sağ kısımdan az önce kurulumunu yaptığımız Android SDK’nın yolunu gösterip, Apply ve OK butonlarına basıyoruz ve eklentinin kurulumunu tamamlıyoruz.

Geliştirmeye başlamadan yapmamız gereken son işlem gerekli komponentlerin indirilmesi. Bunun için yine Eclipse içinde Window > Android SDK and AVD Manager menüsünden SDK Manager’ı çalıştırıyoruz ve Available Packages kısmından kullanacağımız komponentleri seçip Install Selected butonuna basıyoruz. Kimi zaman bu kısımda da https protokolü yüzünden sorunlar yaşayabiliyoruz. Böyle bir durumla karşılaşırsanız.  SDK Manager’da Settings kısmında Force https://… sources to be fetched using http:// seçeneğini işaretleyip ilgili komponentleri yükleyin.

Artık Android Uygulaması geliştirmeye hazırız.  Artık Eclipse içerisinde File > New Project > Project Menüsünde Android seçeneği altında Android Project’i seçerek projenisi hazırlamaya başlayabilirsiniz.

Patent Savaşları

Son günlerde sürekli Microsoft’un satılan her android üzerinden bir miktar para aldığına dair haberler okuyordum. Nedir ne değildir diye biraz araştırdıktan sonra aslında şu an Microsoft’un altın yumurtlayan bir tavuğunun olduğunu ama bunu kesmesi gerekebileceğini farkettim.

Peki nereden başlıyor bu olay? Microsoft Google’ın açık kaynak kodlu ürününden nasıl pay alabiliyor? Olay 2003 senesine dayanıyor. 2003 senesinde Microsoft 700’e yakın şirketle patent anlaşmaları imzalıyor bunlardan beş tanesi de Android ile ilgili şirketler. Yani Android içinde Microsoft’un patentli protokolleri var. Zaten yapılan ilk anlaşmalarla birlikte herkesin bunu kabul ettiğini görebiliyoruz. Şu an Android’li üretilen her cihaz için üreticiler Microsoft’a para ödemek zorunda. Bu üreticilerden birisi de HTC. HTC her cihaz başına Microsoft’a 5 dolar ödüyor.

Günlük üretilen Android’li mobil cihazları göz önüne aldığımızda ortaya çıkan para Microsoft’un mobil çözümleri Windows Mobile ve Windows Phone 7’den kazandığından çok daha fazla. Üstelik en büyük akıllı mobil cihaz üreticisi olma yolunda ilerleyen Samsung’dan cihaz başına istediği ücret tam 15 dolar. Bu rakam öyle rasgele seçilmiş bir rakam değil. Windows Mobile’ın cihaz başı maliyeti 8 dolar, ama Microsoft’un asıl ürünü Windows Phone 7’nin cihaz başına üreticiye maliyeti 15 dolar. Yani Microsoft Samsung’a şunu diyor : Ya benim ürünümü alacaksın 15 Dolar vereceksin, ya da Android kullanacaksın bana yine 15 Dolar vereceksin.

Aslında burada Microsoft da bir karar vermek zorunda. Tek bir ürün bile satmadan milyar dolar civarı üzerinde para kazanmaya devam edebilir. Normalde bu çok mantıklı gözüküyor. Ama işin bir de diğer tarafı var. Microsoft’un sürekli yapmaya çalıştığı şeylerden biri de kendi teknolojilerinin birbirlerini kullandırmasını sağlamak. Eğer Microsoft Android’e yaşama şansı verirse kendi platformu kullanılmayacak ve uygulama geliştiriciler Android için uygulama geliştirmeye Java ile Eclipse vs. üzerinden devam edecek. Ne Vs.Net ne de C# umurlarında olmayacak. Bu pek Microsoft’un çalışma şekline uygun bir durum değil.

Şimdi ya cihaz üreticilerin ve Microsoft’un bir karar vermesi gerekiyor. Bakalım bu kararlar mobil cihaz ve mobil işletim sistemlerinin geleceğini nasıl etkileyecek.