Fotoğraf
Farklı bir arama motoru: Duckduckgo.com
Google 1 Mart 2012 tarihi itibari ile Gizlilik Politikasını değiştireceğini duyurdu. Benim için en dikkat çeken değişiklik, şirketin ürünleri üzerinde benim ile ilgili bilgileri toplayacağını ve bu bilgiler ışığında ürünlerini bana özel hale getireceğini belirtmesi. Bir arama motorunun sizi tanıması ve aradığınız şey ile ilgili olarak sizin en çok ilginizi çekebilecek sonuçları göstermesi güzel bir özellik olarak görünse de benim istediğim bir şey değil. Mesela bir çok aramada sonuçların yaşadığım yer ya da kullandığım dilden bağımsız olarak *bana göre değil herkese göre önem sırasında* getirilmesini tercih ediyorum. Google saklanan bilgiler ve paylaşımı ile ilgili olarak bir çok düzenleme yapma olanağı verse de bilgi toplama demek isteyen biri için çok karmaşık bir süreç.
Bunları düşünürken uzun zamandır bildiğim ama alışkanlıklar nedeni ile kullanmadığım duckduckgo arama motoruna bir şans vermenin zaman geldiğinin farkına vardım.

Neden duckduckgo?
İlk olarak gizlilik politikası tam bana uygun. Sitelerinde yazdığı üzere; tek cümle ile gizlilik politikaları hiç bir kişisel bilgiyi saklamak ve paylaşmamak üzerine kurulu. Hatta bunu beklentilerin ötesine götürerek site üzerinden ulaştığınız diğer sitelere ne aradığınız bilgisini bile paylaşmıyorlar.
Başka ne özellikleri var?
Sitenin özelliklerini üç başlık altında toplayabiliriz: Otomatik işlemler, !Bang, Sıfır-Tıklama.
Otomatik işlemler, bu sayfada anlatıldığı üzere direk arama kutusu üzerinde yapabileceğiniz işlemleri kapsıyor. Mesela matematik işlemlerini yapabilir (örn: 4212/24, 12 45 ve 78’in ortalaması), çevirim işlemleri yaptırabilirsiniz (örn: 100 dolar kaç lira, 5 mil kaç kilometre) ya da ip adresim nedir gibi basit sorular sorabilirsiniz.
!Bang özelliği ise direk olarak bir çok site üzerinde arama yapmanızı sağlıyor. Mesela bing üzerinde arama yapmak için !bing yazmanız, google üzerinde arama yapmanız için !google yazmanız yeterli. Toplamda bu şekilde arama yapabileceğiniz yüzlerce site var. Tüm listeye buradan ulaşabilirsiniz.
Site, Sıfır-Tıklama özelliği sayesinde bir çok konuda bilgiyi direk arama sonucu olarak sunabiliyor. Mesela (http 200 kodu nedir, jquery merge fonksiyonu nasıl çalışır)
Son olara sitenin giderek yaygınlaşmaya başlayan klavye kısayol desteğinin de olduğunu belirteyim. Klavye kısayollarına buradan ulaşabilirsiniz.
AppHarbor Bitbucket kardeşliği
.net ile web projeleri geliştiriyorsanız ve github, codeplex ya da bitbucket versiyonlama sistemlerinden birini kullanıyorsanız; uygulamayı appharbor üzerinde host etmek hayatınızı çok kolaylaştıracaktır. Appharbor entegrasyonlar sayesinde versiyonlama sistemi üzerindeki kodunuzu alıp derleyebiliyor, unit testleri çalıştırabiliyor ve bunun sonrasında otomatik olarak kodunuzu canlı ortama alabiliyor.
Bitbucket ile bunu yapabilmek için ilk önce AppHarbor’da uygulamamızı yaratmamız gerekiyor. Bundan sonra sol tarafta bulunan menünün en altında yer alan build url butonuna tıklayarak url adresini alıyoruz
.
Appharbor’un sitesindeki entegrasyon dökümanına göre Bitbucket üzerinden bu adrese post isteği göndererek entegrasyon yapabilirsiniz. Ancak Bitbucket bu entegrasyonu bir adım daha ileri götürerek AppHarbor’u ayrı bir servis olarak tanımlamış. Entegrasyonun Bitbucket kısmını yapabilmek için repository’nin admin sayfasına gitmemiz gerekiyor.
Burada ilk olarak AppHarbor’un kodumuzu okuyabilmesi için apphb kullanıcısına repository üzerinde yetki tanımlamız gerekiyor.

Yetkiyi tanımladıktan sonra AppHarbor servisini eklemek için Services adımına geçiyoruz. Burada AppHarbor servisini seçtiğimizde sistem bize token ve project bilgilerini soruyor.

Bu soruların cevabı AppHarbor’dan kopyaladığımız URL’in içerisinde gizli. Aşağıdaki adreste [project] ve [token] alanlarında geçen değerleri bitbucket’a giriyoruz.
https://appharbor.com:443/applications/[project]/builds?authorization=[token]
Bu işlem sonrasında entegrasyonumuz tamamlanmış oluyor. Şimdi tek yapmamız gereken projemizi bitbucket’a göndermemiz. Bunu yaptığımızda AppHarbor üzerinde projenin otomatik olarak deploy edildiğini göreceksiniz.

Logo Tasarımı
Tasarım hiç bir zaman kabiliyetlerim arasında yer almadı. Derdimi anlayacak kadar photoshop, illustrator ve freehand kullanmayı biliyorum hatta üniversitede bir dönem dergi tasarım ve mizanpajı bile yapmıştım. Ama şimdi bu yaptıklarıma baktığımda tasarım olarak adlandırılabilecek pek bir şey görmüyorum.
Bu durumun farkında olan biri olarak places4all için yeni bir logo tasarlarken yapabileceğim en iyi şeyin var olan tasarımlardan esinlenmek olduğunu düşündüm.
Internette dolaşırken noun project sitesini buldum. Sitenin amacı dünyada ortak bir görsel dil oluştumak. Sitede bir çok kelimeyi görsel olarak ifade eden ikonlar vektörel formatta yer alıyor. Places4all sitesini en iyi ifade ettiğini düşündüğüm harita imlecini buradan aldım.
Bunu bir logoya dönüştürebilmek için vektörel sosyal medya ikonlarını araştırmaya başladım. Bu araştırma sonunda da thinkdesign sitesindeki ikonları seçtim.
Sonuç olarak places4all’un yeni logosu aşağıdaki şekilde oluştu. Ne dersiniz tasarım yapamayan biri için fena değil sanırım.

Mercurial ve TortoiseHg
Bitbucket’ı Mercurial sistemi ile kullanma kararım sonrasında bu sistemleri anlamak için araştırma yapmaya başladım. Bu konuda en iyi kaynak olarak “Mercurial: The Definitive Guide” kitabını bulduğumu söyleyebilirim. Kitap bu adresten online olarak okunabiliyor.
İlk olarak Mercurial ya da benzeri bir dağıtık versiyonlama sisteminin, dağıtık olmayan versiyonlama sistemlerinden en önemli farkı projenin birden fazla kopyasının çeşitli yerlerde olabileceğinin varsayılmasıdır. Klasik versiyonlama sistemler (örneğin subversion, tfs) dosyaların merkezi olarak bir kopyası olmasına dayanır ve bir kişi dosyanın üzerinde çalışırken diğer kişilerin bu dosyayı değiştirmesine izin vermez. Dağıtık versiyonlama sistemi ise dosyanın birden fazla değişik kopyasının olmasına izin verir hatta tüm sistemi bunun üzerine kurar. Bunu sağlayabilmek için bu sistemlerde dosyaların farklı kopyalarını birleştirebilecek (merge) modüller bulunur.
Windows üzerinde mercurial sistemi kullanmak için en iyi uygulama TotoiseHg olarak geçiyor. Bu uygulama sayesinde uzaktaki mercurial sunucu üzerinde yer alan depo’nun (repository) (benim için bu bitbucket oluyor) lokal disk üzerinde bir kopyasını oluşturabiliyorsunuz. Bu noktada kendi makinenizde versiyonlama sistemine sahip oluyorsunuz. Commit, rollback gibi komutları uzaktaki sunucuya ihtiyacınız olmadan gerçekleştirebiliyorsunuz.
Lokalde yaptığınız çalışma belirli bir olgunluğa geldiğinde ana sunucuya bu değişikliği gönderebiliyorsunuz (Push). Bu dağıtık mimari ile gelen bir adım. Bunun yanı sıra eğer proje sahibi değilseniz bu sefer yine projenin bir kopyasını yaratıp bunun üzerinde çalışabilir ve çalışma sonunda proje sahibine değişiklikleri alması için haber verebilirsiniz. (Pull)
Branch yapısı ise bir projenin birden fazla versiyonunu desteklemeniz gerektiği durumda devreye giriyor. Mesela projenizde bir versiyonu genele duyurdunuz, bu noktadan sonra hem geliştirmelere devam etmek hem de yayınlanan versiyonda çıkacak sorunları çözmeniz gerekiyor. Ancak projenin tek versiyonu üzerinde çalışırsanız bir versiyondaki sorunun çözümü için bir sonraki versiyonu da tamamlamanız gerekecektir.
Aşağıdaki örnekte kodu iki dala ayırıp sonrasında tekrar birleştirdiğim bir örneği görüyorsunuz.

Peki ben projemde bu yapıyı nasıl kullanacağım?
İlerde yazmayı umut ettiğim Appharbor - bitbucket entegrasyonu nedeni ile Default branch üzerinde sadece canlıya alacağım versiyonları tutmaya karar verdim. Yine proje başlangıcında yarattığım “dev” dalını ise her çalışma sonrasında projenin uzakta bir kopyasını saklamak için kullanacağım.
Bunu sağlamak için çalışmaya başlarken “dev” dalının son halini kendi makineme kopyalayacağım “clone”. Çalışma süresinde öncemli gördüğüm noktalarda kendi makinem üzerinde commit işlemleri gerçekleştireceğim ve çalışma sonunda yedeklemek adına son durumu uzaktaki sunucuda bulunan “dev” dalına göndereceğim (push). Canlıya alım için “default” dalına geçip, “dev” dalının son halini bu dala birleştireceğim. Yukarıdaki resimde 7nci adımda bunu görüyorsunuz.
Kısaca dağıtık versiyonlama sistemini mercurial ve turtoisehg üzerinden açıklamaya çalıştım, umarım yardımcı olur.



