Archive for the ‘Perl’ Category

Alien Numbers

Tuesday, July 8th, 2008

Google code.jam‘i keşfetmem üzerine hemen kolları sıvadım. Code Jam, Google tarafından düzenlenen bir programlama yarışması. Verilen problemleri istediğiniz bir programlama dili kullanarak çözmeye çalışıyorsunuz. Yarışmanın ilk ayağı 16 Temmuz Çarşamba günü başlayacak. Üyelik ücretsiz. Profesyonelinden öğrencisine herkes yarışmaya katılabilir. Birinciye $10.000 ödül verilen yarışmada derece yapmanın Google’da bir iş bulabilmeye yarayacağını düşünüyorum.

Şuan için code.jam’da örnek problemler mevcut. Bu problemler yarışanların code.jam hakkında fikir sahibi olmalarını sağlıyor. Pratikler alanında yer alan ilk problem Alien Numbers. Diğer problemlere göre kolay olan bu probleme bende bir çözüm üretmeyi başarabildim.

Nedir Bu Uzaylı Sayılar?
Pratiklerde yer alan ilk problem yeni bir sayı sistemi yaratmak ile ilgili. Problem sizden verilen karakterlere göre 2 değişik sayı sistemi yaratmanızı ve bu sistemde geçen bir sayıyı, ikinci sayı sisteminde yer alan karşılığını vermenizi istiyor. Diğer problemlere göre kolay olan bu problemi Perl ile yapmayı başardım. Size kısaca algoritmasından bahsedeyim.

Problemde yer alan açıklamaya bakacak olursak şu şekilde. Şuan kullandığımı sayı sistemi 0123456789 rakamlarından oluşmakta. Problem bize diyor ki size verdiğim karakterlerde bir sayı sistemi yarat ve alien sayısını, kaynak dil ile üretilmiş sayı sisteminden, hedef dil ile üretilmiş sayı sistemine tercüme et diyor. Problem programın yapmasını istediği 3 veri sunuyor.

alien_sayisi kaynak_dil hedef_dil

Problemin sayfasında yer alan örneklere bakacak olursak; alien sayısı olarak 9, kaynak dil olarak 0123456789 ve hedef dil olarak “oF8″ karakterleri verilmiş. Öncelikle kaynak dili ele alalım. Kaynak dil şuan kullandığımız sayı sistemidir ve oluşturulabilecek sayılar şu şekilde olmaktadır: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12… Görüdüğünüz gibi 0′ı kullanmadık. Sayma sayıları 1 den başlamaktadır. Hedef dilimizde de böyle olmalı. Verilen alien sayısı 9 bu sayı sisteminin 9. sayısını oluşturmaktadır. İkinci sayı sistemine bakacak olursak bize “oF8″ karakterleri verilmiş. Bu karakterler ile oluşturulacak sayılar şu şekilde olur: F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF… 9 sayısı kaynak dilimizde 9. sırada yer almaktaydı. Demekki 9 sayısının hedef dilimizde ki karşılı, hedef dilimizde 9. sıarada yer alan Foo.

Peki bunu programlama ile nasıl yapacağız?
Bu problemi programa dökmek için gerçek hayattaki gibi düşündüm (farklı çözümler üretenler de olmuş). Kullandığımız sayı sisteminde yer alan sayılar ile sonsuz miktarda sayı üretebiliyoruz. 0 1 2 3 4 5 6 7 8 9 ile saydıktan sonra 10 geliyor. Yani son sayıya geldiğimizde, eğer solunda bir sayı yoksa soluna bir ilk sayma sayımız ekleniyor ve ilk sayımız başa dönüyor. 17 18 19 20 şeklinde saydığımızda ise solda yer alan sayı, sayma sayılarımızın son sayısı olmadığından bir arttırılıyor. Yaptığım programın aynen bunu yapmasını sağladım. Öncelikle tüm sayıları bir array‘a bölüp, daha sonra 1. sayıdan başlayarak artmasını sağladım. Arttır fonksiyonunu inceleyecek olursak:

Teknik nedenlerden dolayı kaynak kod kaldırılmıştır. Lütfen aşağıdaki linkten kaynak kodu indiriniz.

Program üzerinde algoritmayı anlatmaya çalıştım. Programın tam halini:

http://onurs.googlecode.com/files/problema.zip

Adresinden indirebilirsiniz. Problem açıklaması ve girdi dosyası bulunmaktadır.

Perl’in Python ve Ruby karşısındaki üstünlüğü

Thursday, March 27th, 2008

Severen kullandığım Perl programlama dili, günümüzde hala populer olarak kullanılmakta. Hal böyle ki, Python ve Ruby’den de daha populer olarak yoluna devam ediyor. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html linkten ulaşabileceğiniz populerlik sıralamasında Java birinci sırada.

Perlmonks’ta zangoç oldum

Saturday, January 19th, 2008

Perlmonks çok büyük bir perl topluluğu. Çok geç keşfetmiş olduğum ve bunun acısını çıkarmaya çalıştığımda bir gerçek :).

Perlmonks’un anlamı Perl rahipleri demek. Perl’e bir dinmiş gibi bakma fikri perl kullanıcılarına aykırı gelmemesini ve siteyi dahada cazip kılmasını sağlamış.

Bundan sonra Perlmonks’ta kateddiğim gelişmeyi bloguma yazıp gelecekte ne zaman level atladığımı görmüş olacağım. Şuan seviyem 4 oldu ve 91 tecrübe puanına sahibim. Tabi her perlmonk üyesi gibi amaç 100000 puan ile Papa olabilmek :).

Her perl hacker’ının girmesi gereken bir site ve şiddetle tavsiye edilir.

Addtoblog

Saturday, January 19th, 2008

Add your new entry to your blog in blogger with your favorite editor. This program simply using WWW::Mechanize. Default editor is defined with $editor. You can change default editor with –editor argument or $editor variable. You can define $usename and $password for always using. If you dont want to do this you must be start program with –usename and –password arguments.

Also you need SSLeay module.

You can download from: http://onurs.googlecode.com/files/addtoblog

An example output:

./addtoblog –username=onuraslan\@gmail.com –password=XXXXXXXXXX
Connecting to blogger.com…
Logining to blogger.com…
Opening text editor…
Parsing file…
Title: Addtoblog
Tags: Debian
Content: Add your new entry to your blog in blogger with your favorite editor. This program simply using WWW::Mechanize. Default editor is defined with $editor. You can change default editor with –editor argument or $editor variable. You can define $usename and $password for always using. If you dont want to do this you must be start program with –usename and –password arguments.

Also you need SSLeay module.

You can download from: http://onurs.googlecode.com/files/addtoblog

Do you want to post this entry to your blog? [Y|n]:
Posting…
Your entry successfully posted to your blog.

Perl Thread kullanımı

Wednesday, October 10th, 2007

Bu yazımda Perl ile nasıl thread kullanılacağını anlatacağım. Perl çok esnek bir dil olduğundan thread kullanımıda çok kolay. Threadlar için öncelikle programımız da ‘threads’ı kullanmalıyız.

use threads;
 
# Bu fonksiyon thread olarak kullanılacak
sub thread_fonksiyonu{  # ...}
# Threadlar Perl'de bir nesnedir. Öncelikle create ile thread nesnemizi yaratıyoruz.
my $thread = threads->create ("thread_fonksiyonu", "fonksiyon_argumenleri");
# İstersek mevcut threadımızdan başka bir thread yaratabiliriz
my $thread2 = $thread->create (sub { print "Bu başka bir thread" }, "fonksiyon_argumenleri");

Threadları ana programımızla birleştirebilmemizi yarayan fonksiyon da join.

$thread->join ();

Threadımızı tekrar ayırmamızı da detach fonksiyonu sağlar.

$thread->detach ();

Kısaca Perl’de threadlar bu şekilde kullanılmaktadır. Ayrıntılı bilgi için: `perldoc threads` diyebilir ya da http://perldoc.perl.org/threads.html burayı ziyaret edebilirsiniz.

Youtube Downloader

Friday, October 5th, 2007

Youtube’dan Street Fighter videolarını kolayca nasıl indirebilirim diye düşünürken, aklıma bu işi yapacak bir script yazmak geldi ve youtube-downloader’i yazdım. Bununla Youtube’dan istediğiniz videoyu bilgisayarınıza indirebilirsiniz.

Son sürümü: http://onurs.googlecode.com/files/youtube-downloader.pl adresinde bulabilirsiniz.

Perl Regex 1: Regex’i Anlamak

Tuesday, September 4th, 2007

Merhaba. Perl ve Regular Expressions, Türkçe’si Düzenli İfadeler üzerine bir yazı dizisi hazırlamaya karar verdim. Regular Expressions’un bir çok kısaltması vardır. Genellikle kullanılan regex veya regexp kısaltmalarıdır. Ben regex demeyi tercih ediyorum ve yazıların devamında regex diye kullanakcağım.

Yazının ilk bölümünde regexin neler yaptığını anlayalım. Regexes (Düzenli İfadeler), bir kalıp ile text üzerinde arama ve işleme yapabilirler. Bir çok programlama dilinde ve text editörlerinde kullanılmaktadır. Örneğin Perl ve Tcl çok güçlü regex motoruna sahiptir. Örneğin regex ile bir text içerisinde belirlediğiniz kalıbın geçip geçmediğini kontrol edebilir ve yine kalıbınıza göre bu text içinden istediğiniz bölümü alabilirsiniz. Ve ya yine kalıbınıza göre değişiklik yapabilirsiniz.

Perl bu iş için en uygun dil olduğundan, regexi Perl’de kullanmayı anlatacağım. Perl’de regex / karakteri arasında yer alır. Örneğin /onur/ bir regextir. Aradığınız texte eğer onu geçerse sonuç 1, geçmiyorsa 0 döner. Bu regexte herhangi bir özel karakter kullanılmamıştır. Regexlerde kullanabileceğiniz özel karakterler ile textler üzerinde istediğiniz işlemi yapabilir hale geleceksiniz.

LWP::Simple

Monday, September 3rd, 2007

Bir Perl kütüphanesi olan LWP::Simple (Lib WWW Perl Simple) ile kolayca bir web sitesinin içeriğini alabilirsiniz. Bundan sonra yazacağım yazılarda, LWP::Simple çokça kullanıldığından işe LWP::Simple’ın ne olduğunu anlatmakla başlamak istedim. Örnek bir kullanım:

#!/usr/bin/perl

use LWP::Simple;

$_ = get (”http://www.0nur.net/”);print;

Perl’e başlamak

Saturday, September 1st, 2007

Blogumda Perl ile ilgili hiç bir yazı bulunmamasından yakınırken Perl’e başlamak isteyenler için bir kitap önerisiyle ilk Perl yazımı atayım.

Perl ile günlük hayatımızda yaşamımızı kolaylaştıran uygulamalar yapmanız mümkün. Özellikle biraz kavradıktan sonra Perl ile yazılım geliştirmek çok hoşunuza gidecek ve bundan zevk alacaksınız. Neden Perl diye bir soru sorarsanız, *nix bir sistemde scripler bazen çok önemlidir. Yapmayı istediğiniz bir uygulamayı, bir script yaparak kolay hale getirebilir ve istediğiniz zaman kullanabilirsiniz. Özellikle Perl ile script geliştirmeniz, Perl’in çok esnek olmasından baya kolay olacaktır. Üstelik CPAN gibi kaynaklar ve inanılmaz api desteği ile Perl programlamaya başlamak isteyenlerin veya profesyonel programcıların da tercihi olabilir.

Perl’e başlamak istiyorsanız sizin için hazırlanmış bir Perl kitabı var. Llama Book. Yani tam adını yazarsak Learning Perl. Kitap Perl’in temelini en iyi ve anlaşılır şekilde anlatıyor. Eğer bu kitabı okursanız, Perl’i öğrenebilir ve Bilgisayar Programlama’dan zevk alabilirsiniz. Yeni, `amatör` ve profesyonel programcılara şiddetle tavsiye ederim. Ki Perl’in babası Larry Wall‘da ediyor.