5 Eylül 2010 Pazar

Ev bilgisayarında SVN Server oluşturma

SVN gerçekten çok güzel bir araç. İster bir takım halinde, ister tek başınıza yazılım geliştiriyor olun projenizin versiyon hesabını SVN ile tutmanız gerçekten yararınıza.

Amatör ve tek geliştiricili projeler için en iyi modellerden birisi de geliştirme makinasına bir SVN server kurup uzaktaki bilgisayardan ev bilgisayarına bağlanarak ana versiyonları indirmek. Bu sayede geliştirme yapılan bilgisayarda daha hızlı işlem yapılacak ve her revizyon için internete bağlanma gereği duyulmayacak. Özellikle shared hosting modelinde olan web projeleri için bu model çok pratik ve hızlı.

Bu yazıda Windows'ta nasıl SVN sunucusu oluşturabileceğimizi anlatacağım. Adım adım gitmeyi tercih ediyorum.

1- Öncelikle Subversion'ın Windows için makine kodunu indirmemiz gerekli. İndirip kurduktan sonra subversion bin klasörünün Windows path'ine eklendiğinden emin olun.

2- Bilgisayarımızda bir SVN reposu olması gerekli. Bunun için

svnadmin create "%REPO-YOLU%"

komutunu verin. Repo yolunda bir repository oluşturulduğundan emin olun.

3- Bu adımda repomuza erişimi ayarlamamız gerekiyor. Bunun için repo yolunun altında conf/svnserve.conf dosyasını açın ve

anon-access = none
auth-access = write
password-db = passwd

satırlarına ulaşın (yorum ise baştaki #'ı silin). 3 satırın başında da gereksiz boşluk olmamasına dikkat edin.

4- Kullanıcı belirleme zamanı. Aynı klasörün içindeki passwd dosyasını açıp

harry = harryssecret
sally = sallyssecret

tarzında kullanıcılar ekleyebilirsiniz. Yine satırbaşlarında gereksiz boşluk olmamasına dikkat edin.

5- SVN repomuzu dışarıdan erişim için ayarlı hale getirdik. Şimdi bilgisayarımıza düşecek isteği değerlendirecek programı (svnserve.exe) açmamız gerek. Bunu her açılışta çalışan bir windows hizmeti olarak yapmayı tercih ediyorum.

sc create svnserver binpath= "%SVN_BIN_KLASORU%\svnserve.exe --service -r %REPO_YOLU%"
displayname= "Subversion" depend= Tcpip start= auto

komutu ile windows hizmetimizi oluşturuyoruz. Komutta %% arasındaki değişkenleri kendi kurulumunuza göre değiştirmeniz gerekiyor. "Subversion" hizmetimiz açılışta otomatik olarak açılacak şekilde ayarlansa da şu anda çalışmıyor. O yüzden

net start svnserver

komutu ile hizmeti başlatıyoruz.

6- SVN sunucumuz neredeyse hazır. Son adım olarak port ayarlarını yapmak kaldı. svn:// protokolü 3690 portunu kullanıyor. Sırasıyla bilgisayarınızın, anti-virüsünüzün ve ağınızdaki yönlendiricilerin(router) güvenlik duvarı ayarlarını yapıp 3690 portuna izin verildiğinden emin olun.

6 adımda svn sunucumuz hazır. İsterseniz kendi pcnizden localhost, yada dışarıdan ip nonuzu yazarak sunucuya bağlanabilirsiniz.
Örneğin aşağıdaki komutla daha önceden oluşturulmuş repo içindeki projem adlı klasörü uzaktan checkout edebilirsiniz:

svn checkout svn://%IP_NONUZ%/projem

1 Eylül 2010 Çarşamba

Timeout error in Mysql connection via Doctrine and Symfony

If you have used a local mysql server and decided to port to an external one, you might have a problem that symfony can not connect to the external db. It can't even get a response from the server.

If you experience that kind of issue, the thing might be that you forgot to include "host=" in your dsn definition.

replace
dsn: 'mysql:your-server-url;dbname=your-dbname'

with
dsn: 'mysql:host=your-server-url;dbname=your-dbname'

Notice the difference, which is 'host='. It is also forgotten on docs, not written neither on Practical Smyfony nor Definitive Guide. So you might also forget. It does not make a problem if you simply connect to a local mysql server.

404 not found error in production mode in Symfony

As a developer using Symfony hosted on an Apache server, I experienced an issue with production mode of Symfony.

Normally, production mode is reached via appending index.php to the end of base url. But thanks to mod_rewrite module of apache, index.php can be omitted. And links in production mode does not have the corresponding index.php part. That is good for user experience, but there is a problem that when trying to reach them, Apache server gives 404 error.

The problem is that apache mod_rewrite module is not loaded by default. Installed tough, but not loaded. So you need to tell Apache to load it on start. You can do this by uncommenting the line starting with "loadModule rewrite..." in http.conf file. The file resides in conf directory of Apache folder. After making changes, restart the server and that's it, the problem is solved.

19 Ağustos 2010 Perşembe

Timeout in Php MySQL connection

Have you ever got a timeout while trying to connect to a local mysql server from php code? Have you teared your nails trying to figure out cause and solution?
I unfortunately spent 3 hours trying to solve the issue.

Solution is again simple and absurd. The workaround is whether you hardcode the connection or use a framework such as Symfony, the same. If you write server url as "localhost" on some conditions the local server timeouts. The issue does not seem very well documented. Nevertheless, the solution is to make server "127.0.0.1" instead of "localhost".

Happy connections, healthy nails!

4 Temmuz 2010 Pazar

android'de tab değişiminde içeriğin sıfırlanması

Son zamanlarda bir Android projesi üzerine çalışıyorum. Projeyi bir tab üzerinden yürütmeye karar verdim. Bunu yaparken yine meşum bir dikkatsizlik hatası ile boğuştum. Şöyle ki; tabHost'a tab eklerken bir spec içinde tabın id'sini, indicator'unu ve content'ini veriyoruz. Ben herşeyi düzgün yapıp id'leri aynı yazmışım. Sonuç, her tab değiştirişimde yeni bir içerik oluşturulup eski içeriğin üstüne yazılıyor. 5-6 saatlik uğraşı, internette büyük bir araştırma, stackoverflow.com'daki bütün soru/cevapların taranması; hiçbiri kâr etmiyor. En sonunda başta yapmam gerekeni yapıp dikkatsizlik hatası olup olmadığını derinden kontrol ediyorum. Yaptığımı bulunca yaşadığım duygunun tarifi yok. Büyük bir rahatlamayla karışık ufak bir kendine kızma duygusu. Olsun, tecrübe yolunda bir hata bin doğrudan iyidir diyip yoluma devam ediyorum.

kod böyleyken:
spec = tabHost.newTabSpec("tag")
.setIndicator("Ürün",res.getDrawable(R.drawable.product))
.setContent(new Intent(this, UrunTab.class));
tabHost.addTab(spec);

//Do the same for other tabs
spec = tabHost.newTabSpec("tag")
.setIndicator("Araba",res.getDrawable(R.drawable.car))
.setContent(new Intent(this, ArabaTab.class));
tabHost.addTab(spec);

//Do the same for other tabs
spec = tabHost.newTabSpec("tag")
.setIndicator("Geçmiş",res.getDrawable(R.drawable.history))
.setContent(new Intent(this, GecmisTab.class));
tabHost.addTab(spec);

//Do the same for other tabs
spec = tabHost.newTabSpec("tag")
.setIndicator("Hakkında",res.getDrawable(R.drawable.about))
.setContent(new Intent(this, HakkindaTab.class));
tabHost.addTab(spec);

böyle oluyor:
spec = tabHost.newTabSpec("UrunTab")
.setIndicator("Ürün",res.getDrawable(R.drawable.product))
.setContent(new Intent(this, UrunTab.class));
tabHost.addTab(spec);

//Do the same for other tabs
spec = tabHost.newTabSpec("ArabaTab")
.setIndicator("Araba",res.getDrawable(R.drawable.car))
.setContent(new Intent(this, ArabaTab.class));
tabHost.addTab(spec);

//Do the same for other tabs
spec = tabHost.newTabSpec("GecmisTab")
.setIndicator("Geçmiş",res.getDrawable(R.drawable.history))
.setContent(new Intent(this, GecmisTab.class));
tabHost.addTab(spec);

//Do the same for other tabs
spec = tabHost.newTabSpec("HakkindaTab")
.setIndicator("Hakkında",res.getDrawable(R.drawable.about))
.setContent(new Intent(this, HakkindaTab.class));
tabHost.addTab(spec);

ve basit sorunumuz düzeliyor.

Hisse; bir sorun çıktığında önce kendimiz kaynaklı hataları kontrol etmek gerekli. Bu hatalar kod yazarken çoğunlukla dikkatsizlik hatası olarak karşımıza çıkıyor. Soruna basit bir çözüm bulamıyorsak ondan sonra karmaşık düşünmeye başlamalı ve araştırmaya koyulmalıyız. Tecrübe ile sabittir.

24 Nisan 2010 Cumartesi

Blackberry 9000 / BIS sorunu / Genel değerlendirme

Geçenlerde elime geçen Blackberry 9000 model telefonu yeni deneme fırsatım oldu.

Anladığım kadarıyla telefon herşeyiyle Java üzerinde çalışıyor. Telefon açılırken önce bir JVM açılıyor, diğer tüm programlar JVM ile etkileşiyor. Dolayısıyla aslında uygulama yazmak geliştiriciler açısından daha bildik olmalı. Ama telefonun pazarlanma stratejisi iş adamlarına yönelik olduğundan o yönde pek gelişim olmadı herhalde.

Blackberry telefonların üretici firması RIM (Research in Motion). Telefonların firmware'leri mobil operatörünüze özel oluyor. Bu çok büyük bir dezavantaj. Jailbreak yapılabiliyor mu bilmiyorum. Ama normalinde hangi OS versiyonunu kullanacağınıza operatörünüz karar veriyor.

Benim kullandığım telefonda Turkcell'le ilişkili firmware vardı. Sim kart kilidi yoksa en azından başka operatörün sim kartını takabiliyorsunuz, hemen avea sim kartını taktım.

Blackberry meraklılarının bilmesi gereken birkaç dezavantaj var. Kısaca özetlemek gerekirse Blackberry'nin profesyonel olarak kullanımında paket olarak sunulmuş birkaç seçenek bulunuyor. Blackberry Internet Server ve Blackberry Enterprise Server bunlardan birkaçı. Bunlardan ilki sizin belirlediğiniz bir e-mail adresina gelen postaları push yoluyla telefonunuza almanızı sağlıyor örneğin. BIS'i operatörünüzün taşeronluğunda RIM firmasından alıyorsunuz, bir ücret karşılığında tabii. Değer mi, internetin bu kadar yaygın olduğu bir zamanda bence değmez.

İşin kilit noktası şu ki bazı uygulamalar operatörünüzden özel Blackberry aboneliğiniz yoksa çalışmayabiliyor. Örneğin Google uygulamaları çalışmıyor ki bu da Google Maps ve Gmail'den mahrum kalacağınız anlamına geliyor. Buna internette çözüm bulduğunu iddia eden birkaç link buldum, ama öyle kolay çözümler değil. Yorumlarda denedim olmadı diyenler de var. Buradaki çözümü öneriyorlar genellikle. Ben denemedim, ileride belki denerim.

Blackberry'nin kendisinden gelen tarayıcısı güzel denilebilecek bir tarayıcı. Ancak baştan ayarlamazsanız wi-fi bağlı bile olsa hattın internetini kullanmayı deniyor. Başta anlam verememiştim, telefonu yapanlar operatörlerden Blackberry paketi alacağımızı düşündüklerinden (ki genellikle sınırsız internet dahil oluyor bu paketlere) böyle yapmış olabileceklerine hükmettim. Her neyse, bunu değiştirmek için tarayıcıdan girip varsayılan tarayıcıyı Hotspot'a çeviriyoruz.

Uygulamalar daha akıllı. Opera Mini iki bağlantı da varken wi-fi'yi tercih etti. Sağolsun hiç kontör harcamadı. Aslında bunu garantilemek için ayarlardan uygulama izinleri altında varsayılan ayarlarda taşıyıcı internet iznini her seferinde sor olarak ayarlamak yeterli (Bazı arsız uygulamalar izinlerinden şikayet edip sizden ayrıcalık isteyebilir).

Bu BIS tekelciliğini saymazsak telefon çok güzel bir telefon diyebilirim. 2 MP kamerası var. Fena çekmiyor, diğer 2 MP kameralardan iyi olduğunu söyleyebilirim. Müzik çaları güzel, ekolayzırı da var. Kulaklığı da kutu içeriğiyle birlikte. Kullanımı insana keyif veriyor. Ortadaki topu çevirmek bir süre sonra zevke dönüşüyor. Telefonun kendine has teması da alışınca kullanırken zevk veriyor. Menüler iyi düşünülmüş, genellikle menüyü açınca aradığınızı buluyorsunuz.

Özetle Blackberry 9000'in artıları ve eksileri

Eksiler:
- Bluetooth'ta sadece eşleşmiş cihazlara dosya gönderebiliyorsunuz. Birşey göndereceğiniz her cihazla eşleşmek sinir bozucu.
- Klavyede noktalı harfleri yazmak sıkıntı olabiliyor, basılı tutup topu oynatmak gerekiyor.
- BIS'iniz yoksa bazı uygulamaları kullanamayabilirsiniz (Google Maps, GMail, Blackberry'nin kendi markası altında çıkarttığı Maps, Facebook, MySpace gibi uygulamalar). Hatta, telefon doğru ayarlanmamışsa, BIS'iniz olmadan internete bile giremeyebilirsiniz. Düzeltmek için sistemin içini biraz hacklemeniz gerekecek.
- Türkiye için uygulama desteği yok. Markete giriş Türkiye'den mümkün değil.

Artılar
- Pil tüketimi neredeyse mükemmel.
- Kullanmadığınız zamanlar bekleme moduna alırsanız (sessiz tuşu yada kılıf ile) pil tüketimi daha da iyileşiyor.
- Menüler, ikonlar, tema bir bütün halinde. Telefonun bir tarzı olduğu hissediliyor.
- Bulunduğumuz yerde Blackberry tuşuna basınca açılan menü genellikle işimizi görüyor. Olabildiğince pratik bir kullanım oluşturulmaya çalışılmış.
- Kablosuz bağlantı ile tarayıcıda gezinmek pratik.

Sonuç olarak bu telefonun tadı BIS ile çıkıyor. Ama BIS bırakın Türkiye'yi dünyada da pahalı bir hizmet, yani pek mantıklı birşey değil. Kullanımı güzel telefon ama firmasının tekelciliğinden kaybediyor. Almak isteyenlerin bunu göze alması gerek.

21 Nisan 2010 Çarşamba

The Last Ninja


Commodore 64'ü olanlar bilir. Benim Commodore 64'üm yoktu. Ama sonradan emülatörler vasıtasıyla biraz da geç de olsa The Last Ninja'yı tanıdım.

Hikaye temelde iki klanın savaşı. Düşman klan ninjaların klanını bitirdiğini düşünür ama bir ninja onlardan habersiz kaçmayı başarır. Tahmin edersiniz ki siz oyunda o ninjayı canlandırıyorsunuz.

Oyun puzzle ve ara ara dövüşmek zorunda olduğumuz düşmanlar şeklinde ilerliyor. Kuşbakışı olarak bir harita üzerinde gidiyoruz. Bu haritalar bazen fizik kurallarını zorlayan özellikte olabiliyor. Bunu oyunun fantastik yapısına veriyoruz.



Vaktiniz varsa, Commodore 64'ü de hiç denemediyseniz, bir emülatör kurup denemenizi tavsiye ederim. Başlangıç oyunu olarak The Last Ninja'yı oynayabilirsiniz.

29 Mart 2010 Pazartesi

Lionheart: Legacy of the Crusader

Tahminen 6 sene önce falan oynadım bu oyunu, çok da hoşuma gitmişti. Son zamanlarda yine oynayasım geldi, iyi ki de gelmiş.

Oyunu anlatmayacağım, bilenler bilir. Ama şunu fark ettim, siz de oyunu yıllar önce, özellikle İngilizcenizin çok da gelişmiş olmadığı lise döneminde falan oynadıysanız tekrar oynamanızı öneririm. Gördüm ki ilk oynayışımda birçok şeyi gözden kaçırmışım, birçok perk'i atlamışım, ve hatta birçok gizli yere gitmemişim.

Yeniden oynamadan önce bir tam çözüm okumanızı öneririm. Hem daha az zaman harcarsınız(zaman değerli), hem de daha çok zevk alırsınız. Tam çözüm cenneti ign'de tam da bu işlik enfes bir tam çözüm var, buraya tıklayarak ulaşabilirsiniz. Oyunu oynamayı düşünmeyenlerin bile hikaye niyetine okumaları önerilir :)

5 Mart 2010 Cuma

Harici belleği dahiliye çevirmek

Aslında bunu birkaç aydır yapmak istiyordum.
Toshiba marka 640 GB harici bellek, büyük ihtimalle kasasındaki Sata bağlantısı çalışmadığından kullanılamıyordu.
Masaüstü bilgisayarı da artık 40 GB bellekten sıkılmıştı. Artık harekete geçme vakti gelmişti.



Resimde görülen harici belleği açtım, içinden Western Digital 640 GB hard disk çıktı :), aşağıdaki resimde görülenden. Neye niyet neye kısmet demişler :)



Merak edenler için kasasının son durumu da aşağıdaki gibi:


Gerisi normal bir hard diski SATA ile PC'ye bağlamaktan farksız. Güle güle kullanın...

Günün Menüsü

Son birkaç gündür kendime -biraz da teknik- bir hobi edinme isteğim vardı. Bu gayeyle ortaya naçizane bir Facebook uygulaması çıktı.
Basit ama kullanışlı düsturuyla çıktığım yolda arkadaşımın da önerisiyle Günün Menüsü isimli bir uygulama yapmaya karar verdim.
Birkaç günlük çalışmanın ürünü de olsa fena olmadı doğrusu :)

http://apps.facebook.com/gununmenusu adresinden uygulamaya erişebilirsiniz.

Zamanın ötesinden gelen düzen: Hosting bitti ortaklık bozuldu.