Archive for the ‘Programlama’ Category

Windows altında GCC

Saturday, July 12th, 2008

GNU Compiler Collection (GCC) bazı programlama dillerine ait derleyicilerin oluştuduğu bir settir. Bunlar: C, C++, Objective-C, Fortran, Java ve Ada dilleri. GCC tek başına derleyicilerden oluşmaz. Compiler, Assemler, Linker gibi yazılan programın makine koduna çevrilmesini sağlayan araçların yanında; libc, libc++, libgcj vb. gibi kütüphaneler ile gelmektedir.

Unix benzeri işletim sistemleri için geliştirilmiş olan GCC’yi MinGW aracılığı ile Window işletim sisteminde çalıştırmanız da mümkündür. MinGW (Minimalis Gnu for Windows) GCC’nin Windows için native portudur. MinGW geliştiricilerin, Window işletim sistemi altında native uygulamalar geliştirebilmelerini sağlar.

Popüler C/C++ yazılım geliştirme ortamlarından olan Dev-C++ MinGW derleyicisini kullanmaktadır.

GCC’yi edinmek için MinGW’nin Sourceforge üzerinde yer alan download sayfasına gidebilirsiniz. GCC’nin yanısıra bir çok GNU uygulamasının Windows portunu bulabileceğiniz bu adreste, GCC’yi tam anlamıyla kullanmanızı sağlayacak uygulamaları anlatayım.

GNU Binutils: C/C++ uygulamalı geliştirebilmek için gereklidir. İçerisinde linker (ld) ve assemler (ar) gibi araçları barındırır.

GCC Paketleri: GCC kendi alanında alt paketlere ayrılmış durumda. Eğer sadece C uygulamalrı geliştirmek istiyorsanız gcc-core olarak adlandırılan paketi indirmeniz yeterli olacaktır. C++ uygulamaları geliştirmek istiyorsanız; gcc-g++ paketini, java uygulamaları geliştirmek istiyorsanız gcc-java paketini indirmelisiniz. Diğer diller için mevcut paketleride görebilirsiniz.

GNU Make: Make programlarınızı derlemenizde yardımcı olacak bir araçtır. Her seferinde aynı derleme komutunu yazmak yerine bir Make scripti oluşturup, make’in bu işlemi yapmasını sağlayabilirsiniz.

MinGW API for MS-Windows: MinGW için Win32 apisi. Win32 apisi için gerekli header dosyalarını içerir. Bunlar yardımı ile Win32 API tabanlı programlar oluşturabilirsiniz.

MinGW Runtime: GCC’nin çalışabilmesi için gerekli bir pakettir. C header dosyalarını ve kütüphane linklerini kapsamaktadır.

Yukarıda anlattığım paketlerin son sürümlerini edinip, hepsini aynı klasöre çıkararak GCC’yi kullanabilirsiniz. Ayrıca çıkardığınız klasörü Windows’un PATH değerine de girerseniz, command altında istediğiniz yerde GCC’yi çağırabilirsiniz.

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.

C ile Düzenli İfadeler

Friday, July 4th, 2008

Bu yazımda C programlama dili ile nasıl Düzenli İfadeler (Regular Expressions) kullanabileceğinizi anlatacağım. Yazı düzenli ifadeler’i bildiğinizi farz alarak hazırlanmıştır.

Öncelikle C dili için düzenli ifadeler kütüphanesini edinmelisiniz. GNU C Library ile gelen regex kütüphanesini kullanacağız. Eğer GNU tabanlı bir işletim sistemi kullanıyorsanız libc6-dev paketini yüklemeniz yeterli olacaktır. MS Windows tabanlı bir işletim sistemi kullanıyorsanız regex kütüphanesinin Windows portunu MinGW‘nin download sayfasından indirebilirsiniz.

(more…)

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;