11 Kasım 2010

Google arama sonuçlarına web site önizleme resmi eklemiş

Bugün farkettim ki google artık arama sonuçlarında web sitelerinin önizleme resmini görmeye izin veriyor. Bunun için arama sonucunun yanındaki büyüteç resmini tıklamak yeterli. Bu özelliği eklemiş olmaları gerçekten iyi oldu.

13 Ekim 2010

Windows Live Spaces hizmeti wordpress.com 'a aktarılıyor

Yeni aldığım bir mesajda windows live spaces hizmetinin bir süre sonra blog hizmeti olarak wordpress.com 'a aktarılacağını öğrendim. Açık kaynak ve php dili ile geliştirilmiş wordpress sistemine windows tarafından bu şekilde bir ilgi olması gerçekten ilginç. Sanırım sunucu yükleri fazla gelmeye başladı ve bu şekilde hafifletmeye çalışıyorlar.

13 Eylül 2010

Google translate yenilikler

Bugün farkettim ki google tercüme hizmetinde yenilikler yapmış. translate.google.com adresine girince bazı değişiklikleri hemen görebilirsiniz. Tercüme edilen metni dinleyebilme özelliğinin eklenmiş olması sanırım bu yenilikler arasında en güzel olanı.

2 Eylül 2010

Gmail de yeni Priority Inbox özelliği duyuruldu

Bugünlerde gmail hesabınıza giriş yaparsanız sağ üst köşede yeni bir hizmetle ilgili duyurunun olduğunu görebilirsiniz. Bu yeni özellik ile özellikle çok sayıda e-posta alan kullanıcılar gelen iletileri sadece tarihlerine göre değil kendi belirledikleri önem sıralarına göre de gruplandırabilecekler. Bu konuyla ilgili bana gelen metin şu şekilde:



Priority InboxBeta
Welcome to Priority Inbox! By automatically separating out your most important messages, Priority Inbox makes it easy for you to read and respond to the messages that matter.

Get through your email faster

sectionsTry reading and replying to the messages in the "Important and Unread" section first. Mark anything that requires follow-up with a star, then go through the "Everything Else" section. If you leave Priority Inbox, you can return to it by clicking the link next to Inbox on the side navigation of Gmail.

How it works

Gmail's servers look at several types of information to identify the email that's important to you, including who you email and chat with most, how often you email with these people, and which keywords appear frequently in the emails you read.

Train Priority Inbox

If Priority Inbox makes a mistake, you can use the Mark important Mark not important buttons to correctly mark a conversation as important or not important, and Priority Inbox will quickly learn what you care about most.
sections

And more...

  • Customize Priority Inbox: You can change what type of email you see in each section (like switching the "Important and Unread" section to just "Important"). Just click on the section headers or visit the Priority Inbox tab under Settings and choose to "customize inbox groups."
  • Use filters to guarantee importance: If you want to be absolutely sure that some messages are always marked as important (like email from your boss), you can set up a filter and choose "Always mark it as important."
  • Search by importance: If you want to see all the messages that have been marked as important, both read and unread, do a Gmail search for "is:important."
  • Switching back to your old inbox: If Priority Inbox isn't for you, you can easily switch back to your normal inbox by clicking "Inbox" on the left or hide Priority Inbox altogether from Gmail Settings.
To learn more about managing your email with Priority Inbox, check out the Gmail Help Center.

27 Ağustos 2010

Yeni tasarım

Bu sitenin tasarımını tekrar değiştirdim. Renkler ve okunabilirlik açısından sanıyorum eskisinden daha iyi olmuştur. Daha önce eklemeyi unuttuğum kaynak kod renklendirme eklentisini de tekrar uyguladım. Etiket listesini de bloglarda daha çok kullanılan etiket bulutu biçimine getirdim. İçerik kısmını genişlettim ve blog arşivi bölümünü alt tarafa taşıdım. Tasarımla yada başka bir konuda herhangi bir tavsiyeniz varsa iletişim sayfasındaki adresten bana iletebilirsiniz.

20 Ağustos 2010

Ubuntu 'da Gmail SMTP ile posta göndermek için mail server (exim4) kurulumu

Yerel makinenizde mail komutu ile istediğiniz bir adrese email gönderebilmek için gmail hesabınızın smtp ayarlarının exim4 sunucusunda nasıl yapılabileceğini anlatan bir yazı. Ben uyguladım ve çalıştı. Yalnız exim4 ayar dosyasına eklemeler yaparken standart bazı ayarları da iptal etmeniz gerekiyor (ilgili satırları yorumlayabilirsiniz) yoksa hata alırsınız. Bunun dışında ayarları kaydettikten sonra exim yeniden başlatmadan önce hata kayıtlarını silmezseniz bu konuda bir uyarı alabilirsiniz. (/var/log/exim4/paniclog dosyasının içeriğini silin).

http://www.manu-j.com/blog/wordpress-exim4-ubuntu-gmail-smtp/75/

19 Ağustos 2010

PHP hata gösterimini açmak

Eğer sunucunuzda hata mesajlarını göremiyorsanız display_errors ayarı kapalı olabilir. Bu durumda şu şekilde display_errors ayarını açabilirsiniz:
[bash]
cd /etc/php5/apache2
gksudo gedit php.ini
[/bash]
php.ini dosyasını açtıktan sonra şu satırı bulun:
[bash]
display_errors = Off
[/bash]
Off yerine On yazarak dosyayı kaydedin ve apache sunucusunu tekrar başlatın.
[bash]
sudo /etc/init.d/apache2 restart
[/bash]

18 Ağustos 2010

Engellenen Google hizmetlerini çalışır hale getirmek

Sisteminizdeki hosts dosyasını açın:
[bash]
cd /etc/
gksudo gedit hosts
[/bash]
Daha sonra aşağıdaki satırları dosyanın altına ekleyin ve dosyayı kaydedin.
[bash]
74.125.43.103 www.youtube.com
74.125.43.103 www.google-analytics.com
74.125.43.103 google-analytics.com
74.125.43.103 code.google.com
74.125.43.103 translate.google.com
74.125.43.103 investor.google.com
74.125.43.103 groups.google.com
74.125.43.103 docs.google.com
74.125.43.103 picasaweb.google.com
74.125.43.103 spreadsheets.google.com
209.85.135.102 auth.keyhole.com
209.85.229.99 dl.google.com
#209.85.229.99 mt0.google.com
#209.85.229.99 mt1.google.com
209.85.229.99 lh3.ggpht.com
209.85.229.99 lh4.ggpht.com
209.85.229.99 lh5.ggpht.com
209.85.229.99 lh6.ggpht.com
209.85.229.99 picasaweb.google.com

74.125.157.99 id.google.com
74.125.157.104 id.google.com
74.125.157.147 id.google.com
#74.125.157.104 khm.google.com
#74.125.157.147 khm.google.com
#74.125.157.99 khm.google.com
74.125.43.103 khm.google.com
74.125.43.103 khm0.google.com
74.125.43.103 khm1.google.com
74.125.157.99 maps.google.com
74.125.157.104 maps.google.com
74.125.157.147 maps.google.com
74.125.77.99 maps.gstatic.com
74.125.157.104 mt0.google.com
74.125.157.147 mt0.google.com
74.125.157.99 mt0.google.com
74.125.157.104 mt1.google.com
74.125.157.147 mt1.google.com
74.125.157.99 mt1.google.com
[/bash]
Dosyayı kaydedip kapattıktan sonra internet bağlantınızı kapatıp tekrar bağlanın.

mod_rewrite aktif hale getirmek

Yeni kurduğunuz web sunucunuzda mod_rewrite çalışmıyorsa aktif edilmemiş olabilir. Şu şekilde aktif hale getirebilirsiniz:
[bash]
sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart
[/bash]

11 Temmuz 2010

Re: Java Programcıları Geleceğin Pizza Dağıtıcılarından Farksız mı Olacak?

Eskiden bir tartışmada yazdığım yanıtı burada paylaşmak istedim:

Programlama dilleri de aynı konuşma dillerinde olduğu gibi birer araçtır. Anlatmak istediğinizi hangi dilde daha rahat anlatıyorsanız o dili kullanmayı tercih edebilirsiniz. İsterseniz birden fazla dil de öğrenebilirsiniz. İsterseniz de dildeki edebiyatla ilgilenirsiniz o zaman dili araç olarak değil amaç olarak kullanmaya başlarsınız.

Ben web programlama alanıyla ilgileniyorum ( Php Mysql JQuery). Önemli olan işi istenen şekilde yapmak olduğu için bazen hazır bileşenler yada kodlar kullanıyorum bazen de bunu araştırmaktansa o konudaki bilgim yeterli düzeydeyse (yada öğrenme hevesim yerindeyse) yeniden yapmayı tercih edebiliyorum. Örneğin ben şu ana kadar mvc yapısını kullanan birkaç php framework sistemini öğrenmeye başlayıp bir süre sonra çeşitli nedenlerden yarım bıraktım ve herbiri için vakit harcadım. Bırakma nedenlerimi öğrenme sürecinin uzun olması, beklentilerimi karşılamaması, aradığım bazı özelliklerin ancak eklentiler yoluyla elde edilebilmesi, yavaş olması, çok katı kurallarla çalışması (esnekliğin az olması) vb. olarak sıralayabilirim. Daha sonra kendi framework sistemimi yazmaya başladım ve bugün istediğim gibi ihtiyacım olan özellikleri ekleyebildiğim ve daha da önemlisi kullanım yapısını kendim geliştirdiğim için daha rahat kullanabildiğim bir framework sistemim var. Kodlarını kendim yazdığım için istediğim zaman sistemde değişiklik yapabiliyorum, yeni özellikler ekleyebiliyorum ve bunları yaparken kendimi daha da geliştirebiliyorum. Bunun yanında sistemin kullanımını öğrenmek için herhangi bir belge okumam gerekmiyor. Bu sistemde mutlaka eksikler ve hatalar vardır ancak kontrolü ele almanın yukarıda saydığım avantajları var.

Demek istediğim hazır kütüphane/ortam kullanmak yada tekerleği yeniden icad etmek tamamen programcının kendi tercihidir. Programcı yüzlerce/binlerce işlevin nasıl kullanıldığını ezberleyip robot gibi çalışan biri olmamalı. Yaratıcılık ve probleme farklı yönlerden yaklaşma gibi konularda kendini geliştirmeye çalışmalıdır. Ancak bunun yanında elbette pratik olmayı da ihmal etmemelidir. Programcı kullandığı dili amaç olarak değil araç olarak gördüğü sürece hangi dil/ide/framework/kütüphane/işletim sistemi kullandığının bir önemi yoktur. Eğer programcı java kullanmak istiyorsa java kullanır. Bir dili kullanan programcının ileride ne olacağını bilemezsiniz çünkü bunun için o programcının o dili kullanarak ne yaptığını bilmeniz gerekir. Tekrar ediyorum dil amaç değil bir araçtır.

12 Haziran 2010

Linux 'ta Rsync ile kolay yedekleme işlemi

Linux kullanıyorsanız (ör: Ubuntu) mutlaka bir süre sonra yedekleme işlemi yapmak üzere bir arayış içinde olacaksınız. Bu amaçla kullandığım rsync komutundan (konsol programı desek daha doğru) bahsetmek istiyorum. Örneğin ben bu program oluşturduğum bir komut dosyası (bash script) ile iki farklı hafıza birimine yedekleme işlemi yapıyorum. Bunlardan biri 500Gb kapasiteli bir hard disk diğeri de daha sık ve daha az sayıda dizini yedeklemek için kullandığım 4Gb lık bir usb bellek. Usb bellekte yedekleme yapmak için şu şekilde bir komut dosyası kullanıyorum.

[bash]
rsync -avx --delete --log-file='rsync_www.log' /var/www/ ./www/
rsync -avx --delete --log-file='rsync_home.log' /home/eren/ ./eren/
[/bash]
Bu komutlar ile makinemdeki /var/www/ ve /home/eren/ dizinlerini usb diskteki www ve eren dizinlerine aktarıyorum. Hedef dizinlerin ./ ile başladığını görüyorsunuz. . işareti mevcut dizin anlamına gelir. Bu şekilde yazmamın amacı usb disk sürücüsünün sisteme göre farklı bir adrese bağlanmış (mount) olabileceği. Hedef dizinleri bu şekilde belirtebilmek için komutların çalıştırılmadan önce çalışma dizininin usb dizini olarak değiştirilmesi gerekir. (Ör: cd /media/disk-adi/ şeklinde). Bu komutları her seferinde yazmak yerine bir komut dosyası olarak kaydetmenizi öneririm. Eğer komutları rsync.sh adında bir dosyaya kaydederseniz çalıştırmak için önce usb disk dizinine gidip daha sonra
[bash]
bash rsync.sh
[/bash]
komutunu kullanabilirsiniz.

Ancak şunu belirteyim rsync ile yapılan aktarma sıradan bir kopyalama işlemi gibi değildir. Bu yedekleme işlemi aslında bir eşzamanlı hale getirme (synchronization) işlemidir. Bu arada rsync adının Remote Synchronization ifadesinden geldiğini söylemeliyim. Bu komutların çalışması genelde biraz uzun sürüyor ve işlem sonucunda usb diskteki dizinler dosyaların kaynağı olan bilgisayarın son durumu gibi oluyor. -v parametresi işlem yapılırken çıktının ekrana verilmesi için, -a parametresi archive mod kullanmak için (-rlptgoD parametrelerine eşdeğer),  -x parametresi de dosya sistemiyle ilgili bir parametre (dizin taraması yapılırken karşılaşılan sembolik bağlantı vb. dosyalar nedeniyle belirtilen kaynak dizinlerinin dışına çıkmaması için. Aksi halde sistemdeki başka bir dizine atlayıp yedeklemek istemediğiniz dosya ve dizinleri de kopyalayabilirsiniz). --log-file parametresi tahmin ettiğiniz gibi işlem sonuçlarını günlük dosyası olarak kaydetmek için.

Komutlardaki --delete de parametresi yedekleme yapılırken kaynakta silinmiş olan dosya/dizinlerin hedefte de silinmesi için. Yani bu işlem sonrası kaynak ve hedefteki dizinler eşitlenmiş oluyor. Bunlar dışındaki parametrelerin anlamları için rsync komutunun kullanım klavuzuna bakabilirsiniz. Bunun için man rsync komutunu kullanmanız yeterli. Göreceğiniz gibi rsync programı her türlü yedekleme ihtiyacını karşılamak için çok sayıda seçenek içerir.

1 Haziran 2010

israili protesto ediyorum

israilin, Filistin 'e giden yardım gemilerine karşı yaptığı korsanlık eylemini protesto ediyorum. Bu yapılan, ne hukuk ne de insanlık zemininde kendine yer edemeyecek olan alçakça bir haydutluk eylemidir. Bu eylemle israil milyarlarca insanın lanetlemesi dışında bir şey kazanmamıştır ve her eyleminde olduğu gibi bulunduğu haksızlık ve alçaklık durumunu daha da arttırmıştır. israil eninde sonunda yaptıklarının cezasıyla karşılaşacaktır ve o güne kadar ancak alçakça eylemlerle ve kendini haklı gösterme çabasıyla oyalanmaya devam edecektir. Gerçek adaletin geleceği güne kadar israili, mazlumların ve vicdanı olan her insanın lanetiyle birlikte protesto ediyorum.

13 Nisan 2010

(Php) Metin özetlerinde Türkçe karakter problemi

Son zamanlarda birçok web sitesinde anasayfadaki alt sayfalara ait içeriklerin özetinin gösterildiği yerlerde kısaltılmış (özet) metin oluşturulurken bazen Türkçe karakterlerin hatalı göründüğünü farkettim. Hatta bu hatayı çok meşhur olan ve çok sayıda ziyaretçisi olan sitelerde bile görüyorum.

Bu hatanın nedeni Türkçe karakterlerin multibyte türü karakterler içermesidir. Yani tek bir harf birden fazla byte ile temsil ediliyor. Eğer kesme işleminin yapıldığı nokta tam da bu byteların arasına denk geliyorsa o zaman özetteki son karakter garip bir şekilde görünüyor. Bu sorunun nedeni kısaltma işlemi için yanlış işlevlerin kullanılmasıdır. Örneğin Türkçe karakter içeren bir metinde kısaltma yaparken substr() işlevi yerine mb_substr() işlevini kullanırsak böyle bir sorunla karşılaşmayız. Bu işlevle ilgili detaylı bilgiye http://tr.php.net/manual/tr/function.mb-substr.php adresinden ulaşabilirsiniz. Metin türünde veriler üzerinde  buna benzer şekilde işlemler yapan neredeyse her php işlevine karşılık mb_ ile başlayan bir multibyte işlev vardır. Bu şekilde Türkçe karakterlerin sorun çıkardığı yerlerde benzer hatalarla karşılaşmayız.

31 Ocak 2010

Google anasayfasında ajax

Geçen gün google 'ın bir süreliğine çalışmadığını farkettim ve ardından çalışır hale geldiğinde arama işleminin (bazı tarayıcılarda) Ajax ile yapıldığını farkettim. Linux ortamında Chrome 'da eski şekilde çalışsa da Firefox için ajax sistemiyle arama yapılıyor. Google zaten yeterince hızlı açılıyordu ancak bu değişiklikle birlikte sunucuları üzerindeki yükten ciddi bir tasarruf edecekleri kesin. Bu değişikliği farketmemi sağlayan şey adres kısmında eskiden google.com/ dan sonra gelen kısmın artık # ile başlamasıydı. (Farkettiyseniz bu yöntemi Facebook zaten neredeyse bütün sayfalarında - ör: bir üyenin albümünde gezinirken - kullanıyor. Hatta bu yöntemin yayılmasında büyük bir payı vardır.) Adresin bu şekilde değişmesinin şöyle bir avantajı var: Tarayıcının geri düğmesini tıkladığınızda bir önceki ajax isteği kullanılarak önceki sayfaya gidilmiş oluyor. Aynı durum ileri düğmesi için de geçerli. Aksi halde kullanıcının geri gitmek bir önceki işlemi tekrarlaması gerekiyor. Yani tarayıcının yapması gereken şeyi kendisi yapmak zorunda kalıyor. Bir sonraki yazımda bir örnek vererek bu yöntemle ajax kullanımından bahsetmeyi düşünüyorum.

27 Ocak 2010

Linux için Google Chrome

Google Chrome web tarayıcısının Linux için beta sürüm paketleri yayınlanmış. Daha önce başka bir platformda Chrome kullandıysanız diğer tarayıcılardan fark ve üstünlüklerini az çok biliyorsunuzdur.

Google Chrome 'u şu adresten indirebilirsiniz:
http://www.google.com/chrome?platform=linux

Google Chrome hakkında detaylı bilgi için:
http://www.google.com/chrome/intl/tr/features.html?platform=linux

15 Ocak 2010

PHP kodlarını korumak / şifrelemek

Php dili hepinizin bildiği gibi derlenmeyen yani betiksel olarak çalışan bir dil. Bu yüzden php ile geliştirilen bir yazılım resmi olarak olmasa da aslında açık kaynaktır. Eğer yaptığınız yazılımın başkaları tarafından incelenmesini, düzenlenmesini yada kopyalanması istemiyorsanız bir şekilde kodlarınızı korumanız gerekmektedir. Bunu sağlamanın en mantıksal yolu kodlarınızı kendinize ait sunucunuzda barındırmak olsa da bu yöntem çoğu programcı için uygun değildir. Ayrıca bazı durumlarda yazılımı başkasına teslim etmeniz gerekebilir. Buna bir örnek olarak yazılımınızı bir yada birçok müşteriye satma durumu verilebilir.

Piyasada php kodlarını derlediğini iddia eden birçok yazılım mevcut. Aslında bu derleme normal bir derleme işlemi değil. Bu işlem aslında kaynak kodları bytecode haline getirmektir.

Bu amaçla kullanılan yazılımların sayısı oldukça fazla. Bunların bir kısmı sunucuya bir eklenti kurulmasını gerektirmektedir. Herhangi bir kurulum gerektirmeden çalışacak şekilde kod dönüşümü yapan yazılımlar da mevcut ancak bu yöntem muhtemelen yazılımınızın hızını düşürecektir çünkü kodları asıl haline getirmek için bir ters şifreleme işlemi gereklidir.

Araştırmalarıma göre piyasada bu konuda en iddialı ve en yaygın olarak kullanılan iki yazılım var. Bunlardan biri Zend Guard, diğeri ise Ioncube Encoder. Günümüzde neredeyse bütün web sunucularında bu iki yazılım için çalıştırma ortamı eklentileri kurulu durumda. Bu yazıyı yazdığım sırada bu iki yazılımın fiyatları şu şekildeydi:

Zend Guard: $600
Ioncube Encoder: $199(Basic) , $299 (Pro) , $379 (Cerberus)

Zend guard 'ın fiyatı 1 yıllık kullanım içindir ve kullanmaya devam etmek için her sene bu ücreti tekrar ödemeniz gerekiyor.

Ioncube Encoder için ise ücret bir defa ödeniyor ve 1 yıllık güncelleme ve destek hizmeti ücretsiz olarak ürüne dahil oluyor. Bu süre bitiminde 2 hafta içinde daha düşük bir ücret ödeyerek süreyi uzatabiliyorsunuz.

Benim googleda araştırmalarıma göre Ioncube kalite olarak çok iyi ve arama sonuçlarında gördüğüm kadarıyla bu yazılımla korunan kaynak kodlar diğer ürünlere göre daha sağlam bir şekilde korunuyor. Ayrıca günümüzde neredeyse bir standart olarak bütün sunucularda Ioncube desteği mevcut.

Ioncube için farklı özelliklere sahip 3 sürüm var. Bunlar Basic, Pro ve Cerberus sürümleri. Bu sürümlerin karşılaştırmasını şu adreste görebilirsiniz:
http://www.ioncube.com/sa_encoder.php?page=pricing

Farklarını kısaca açıklamak gerekirse Basic (Entry Level) sürümü ile kodlarınızı incelenmeye ve düzenlenmeye karşı koruyabilirsiniz ancak bu durumda kodlar kopyalanmaya karşı korumasızdır. Pro sürümünde buna ek olarak zaman aşımı, ip ve alanadına göre kısıtlama getirmek üzere lisans dosyası oluşturarak kodlarınızın sadece istediğiniz sitede / istediğiniz süre boyunca kullanılabilmesini sağlayabilirsiniz. Cerberus sürümünde ise Pro sürümündeki özelliklerle birlikte yazılımın çalışacağı makinenin MAC adresine göre kısıtlama getirmenize olanak sağlıyor.

Bu özelliklere göre özel bir projeye ait kodları korumak yada yazılımdaki parola gibi hassas verileri korumak için basic sürümü yeterli olabilir. Yazılımın kopyalarının ticari olarak satılması amacı için ise Pro sürümü uygun olacaktır. Cerberus sürümü ise sadece makine bazlı kısıtlama gerektiren özel durumlarda gerekli olacaktır.

Ben daha önce Basic sürümünü denedim ve memnun kaldım. Ücretsiz olarak indirip kullanılabilen Ioncube Loader modülünü yerel sunucumda kurdum ve kodların sorunsuz olarak çalıştığını gördüm. Ancak daha yüksek güvenlik sağlayan obfuscation (kod karıştırma) seçeneğini kullanmak herhangi bir işlev adının kod içinde string olarak kaydedildiği durumlarda bazı yazılımlarda uygun olmayabiliyor. Ancak bu seçeneği kullanmak zorunlu değil. Yerel makinem dışında kullandığım web sunucusunda da ioncube ile kodlanmış yazılım için deneme yaptım ve yine sorunsuz olarak çalıştığını gördüm. Deneme sürümü iki haftalık kullanım sağlıyor ve deneme sürümü kullanılarak kodlanmış yazılım ise yanlış hatırlamıyorsam üç gün boyunca kullanılabiliyor.

Sonuç olarak Php gibi betiksel bir dil kullanarak ticari yazılım geliştiren yada yaptığı yazılımları korumak isteyen her geliştirici için Ioncube makul bir tercih olacaktır. Profesyonel web geliştirme amacıyla verilecek 200-300 $ gibi bir ücret bu sistemin faydası dikkate alındığında bence çok fazla bir ücret değil.

http://www.ioncube.com

Kripto paralar hakkında

Kripto paralar, merkezi olmayan, şifrelenmiş ve dağıtılmış bir veritabanı olan blok zinciri teknolojisi kullanılarak oluşturulan dijital par...