Perşembe, Kasım 16, 2006

Boş İşler

Birileri iş üretirken, neden başka birilerinin eleştirmekten başka işi olmaz. Eleştiri güzeldir de, be kardeşim binlerce satır kod içeren bir programda eleştirecek 3 harf mi kaldı ?

Biz milletçe böyle miyiz , yoksa genel anlamda insanlık mı iş yapanların ayağına dolanmayı seviyor bir tek bunu çözemedim.

Edit: Yanlışlıkla FM deki bir sonraki habere link vermişim. Yanlış linkle vakit kaybedenlerden özür dilerim :)

Pazar, Kasım 12, 2006

Derin Tasarım

Derin devlet olurda, derin tasarım olmaz mı :-) Oluyormuş. Ali Işıngör'ün blogundan ( hala adresini bilmeyen var mı ? ) esen poyrazla bu makaleye savruldum.

Sayfadan küçük bir anektod;

...‘oyunlu tasarım’ deyince babasına bunun püf noktalarını anlattırıyoruz: ‘Çocuk saflığından daha değerli bir şey yok bence. Çocuk resim yapıyormuş annesi ne çizdiğini sormuş. ‘Tanrı’yı çiziyorum’ demiş. Anne şaşırarak ‘İmkansız! Tanrı’yı nasıl çizersin, onun yüzünü kimse bilmiyor ki’ demiş. Çocuk son sözü söylemiş: ‘Ben çizeceğim bundan sonra herkes bilecek’. Bunun ne kadar güzel bir mantık olduğunu anlatabildim mi? Ben de o çocuk gibi bütün şartlanmalardan uzak durarak tasarım yapıyorum.’

Perşembe, Temmuz 27, 2006

...Başarabiliriz...

İnanmak ve Başarmak. Birbirine çok sıkı bağlı iki kavram. Aşağıdaki bağlantılar inanmayanlar ve inancını tazelemek isteyenler için.

Vista,Red Hat,Ubuntu,Suse,Pardus

Windows XP,Red Hat,Ubuntu,Suse,Pardus

Salı, Temmuz 25, 2006

Hızlı ve Kirli Bir mod_chroot Kılavuzu

Başlangıç ve Sorumluluk Reddi

Bu belge Apache yi chroot içinde çalıştırmak için uğraşırken yaşadığım kişisel tecrübelerden ortaya çıkmıştır. Kullanılan sistem Fedora Legacy projesi ile güncellemeleri yapılan bir Fedora Core 1 sunucu ve üzerinde Apache 2.x PHP 4.x barındırmaktadır. Bu belgeyi uygularken sorumluluk tamamen size aittir doğacak zaralardan vs vs. Artık başlayabiliriz;

Ben Apache yi kafes içinde çalıştırmak için 3 temel yöntem biliyorum. Önce bunlara kısaca bir göz atalım;

1. Klasik chroot yaklaşımları


Zor ve zahmetlidir ( genellikle ) aşağıdaki yapıyı chroot içinde oluşturmanız gerektirir

* C kütüphanesi
* Pekçok diğer kütüphane (libssl? libm? libmysqlclient?)
* Çözümleyici dosyalar (/etc/nsswitch.conf, /etc/resolv.conf)
* Kullanıcı dosyaları (/etc/passwd, /etc/group)
* log dosyaları için ayrı bir klasör
* Program tarafında kullanılacak modül dosyaları (for Apache: mod_php and other modules)

2. Mod-security nin chroot fonksiyonu

Basit, ancak kılavuzdaki kurulum belgesi kaynak koddan kurulmuş bütün dosyaları tek dizin içinde toplayan bir apache sunucusuna uygun. Dosyaları değişik konumlara dağılmış bir sunucuda uygulaması zor.

3. Mod_Chroot yaklaşımı


Basit hızlı ve kolay. Yalnızca chroot işlemine odaklanmış sade bir modül. Ek hiç bir dosyanın kopyalanmasına gerek kalmaz ( 1 - 2 istisnai durum olabilir :) )

Mod-security ve Mod_chroot u kısaca kıyaslarsak

* mod_chroot uzak istemcilerle iletişim kurmaz.
* mod_chroot yalnızca bir kere hafıza ayırır, başlangıçta.
* mod_chroot istekleri yakalamaz kendi işi ile uğraşır :)

Kurulum

Kuruluma başlamadan önce aşağıdaki sistemlerden birini kullanıyorsanız hazır paketlerden kurulum yapabilecek şanslı kişilerdensiniz :)
Apache Dinamik modülleri ile mod_chroot kurulumu için birkaç basit adım gerekiyor.

1. Kodu indirin ve açın

wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz
tar zxvf mod_chroot-0.5.tar.gz


2. Kendi sunucunuza uygun kaynak kod klasörüne gidin ( örneğin mod_chroot-0.5/src/apache20/ ) ve

apxs -cia mod_chroot.c

komutunu root olarak çalıştırın.

Not: Bazı headerlara ihtiyaç duyabilirsiniz eğer debian kullanıyorsanız apache2-prefork-dev veya
apache2-threaded-dev paketlerinden birini kurmanız gerekmekte.

Not 2: apsx fedora üzerinde apache-dev paketi ile gelmekte Dinamik modül olarak mod_chroot kurmak için bunu indirin.

Ayarlar

Sunucunuzun konfigürasyon dosyasında ( httpd.conf ) Apache için root olarak kabul edeceğiniz dizini ChrootDir direktifi ile belirtin ve DocumentRoot unuzu buna göre ayarlayın, Örneğin:

ChrootDir /var/www
DocumentRoot /


( Eğer DocumentRoot u /var/www şeklinde bırakırsanız sunucu /var/www/var/www dizinide arayacaktır ana dizininizi )

Apache 2.x için Özel Ayar Notları

Apache 2 deki MPM (multi-processing modules) yapısından dolayı pid dosyası chroot un içinde yer almalı Bunun için;

1. Pid dosyası için özel bir klasör yaratılmalı

mkdir -p /var/www/var/run
chown -R root.root /var/www/var/run


2. apachectl nin mutluluğu için gerçek pid dosyası ile arada bir sembolik bağ kurulmalı

ln -s /var/www/var/run/httpd.pid /var/run/httpd.pid

3. ve son olarak httpd.conf a chroot direktifinden önce

PidFile /var/run/httpd.pid

satırı eklenmeli. Sonuç olarak yapılandırma dosyanız şuna benzemeli

PidFile /var/run/httpd.pid
ChrootDir /var/www
DocumentRoot /
... diğer MPM direktifleri (LockFile? ScoreBoardFile?)


Yalnızca pid dosyasını jail içine almak yeterli olmalı ancak Apachenin özelleşterilebilirliğini düşünecek olursak kullanıcıya göre değişiklik gösteren istisnalar her zaman olabilir. mod_chroot tarafından etkilenen bütün MPM lerin tam listesi için buraya bakın adresine bakın.


Modül Sıralaması


mod_chroot Apache nin bütün işi bittikten sonra çağırılmalı bunun için modül listesinin en başına eklenmeli ( Apache modülleri yazım sırasının tersine yükler ) . Eğer modülü dinamik olarak derlediyseniz.

LoadModule chroot_module /usr/lib/httpd/modules/mod_chroot.so

satırlarını modül listesinin en başına ekleyin. Tabi burada kullandığınız dağıtıma bağlı olarak mod_chroot.so dosyasının tam yolunu yazmalısınız (apsx bu direktifi ( büyük ihtimalle ) modül listenizin en sonuna eklemiş olacak buradan kes-yapıştır yapabilirsiniz).

Evet buraya kadar mod_chroot un kurulum ve ayarlarını bitirdik. Ancak;

Başlamadan Önce

Apache yi chroot içinde çalıştırmak bir takım problemlere sebep olabilir.

Bilinen problemler ve çözümleri için okumaya devam edin :)

Apache yi Yeniden Başlatmak

'apachectl reload', 'apachectl graceful' veya 'kill -HUP apache_pid' komutlarını kullandığınız günleri unutun. Apache bunları yapmak için konfigürasyon dosyasını okumak log dosyalarına yazmak ve modüllerini yeniden yüklemek isteyecek ancak kafesinin dışına çıkamayacaktır. Tabi bu sorunu çözmek için gerekli dosyaları kafesin içine yerleştirebilirsiniz ancak bu durumda da chroot yapmanızın bir anlamı kalmaz :)

Sözü fazla uzatmadan çözümü söyleyeyim bundan sonra apacheyi durdurup başlatmak için yalnız iki komut kullanıyoruz. apachectl stop' ve 'apachectl start'

Veritabanları

Eğer veritabanı sunucunuz yalnız Unix soketlerini dinliyorsa onu 127.0.0.1 i de dinlemesi için ayarlamalısınız.

PHP mail() fonksiyonu


Unix altında php nin mail() fonksiyonu sendmail programının çalıştırılabilir haline ihtiyaç duyar. Bu sorunu aşmak için birkaç alternatif metod olmasına karşın ben smtp ile direkt olarak mail gönderen bir sınıf kullanmanızı önereceğim ( örneğin http://pear.php.net/package/Mail gibi).

Paylaşımlı Kütüphaneler Meselesi


Paylaşımlı kütüphaneler programlara çalışma zamanında bağlanan kütüphanelerdir. Bir programın kullandığı paylaşımlı kütüphanelerin tam listesine ldd /programın/tam/yolu şeklinde erişebilirsiniz.

Normal şartlarda bu kütüphaneler başlangıç sırasında ld.so tarafından otomatik olarak yüklenirler, mod_chroot un bu durumla ilgili bir sorunu yoktur. Ancak bazen programlar çalışmaya başladıktan sonrada bu kütüphaneleri dlopen() ve dlsym() fonksiyonları ile çağırabilirler. İşte bu durum chroot ortamı içinde size sorun yaratabilir.

Bununla ilgi şu ana kadar 2 durum raporlanmıştır. Çözüm olarak bu dosyaları chroot yapmadan önce elle yüklemeyi seçebilirsiniz. Bunun için ayar dosyanıza LoadFile direktifi ile beraber dosya adını eklemelisiniz.

1- DNS Lookup problemi için

LoadFile /lib/libnss_dns.so.2

direktifini eklemeniz gerekmektedir

2- Apache 2.0 mpm_worker modülünü Linux 2.6 çekirdeği üzerinde kullanıyorsanız GNU libc libgcc_s.so.1 kütüphanesini pthread_cancel fonksiyonu çağırıldığında yüklemeye çalışacaktır. Çözüm için:

LoadFile /lib/libgcc_s.so.1

direktifini eklemeniz gerekmektedir.

Sanal Sunucular Konusu

mod_chroot sanal sunucularla kesinlikle problemsiz ( tabi başka bir probleminiz yoksa ) çalışmaktadır. Ancak daha öncede belirtildiği gibi her bir Sanal Sunucu için ayrı bir ChrootDir direktifi kullanamazsınız yani şunu yapMAMANIZ gerekir


ServerName birinci.ornek.com
ChrootDir /var/www/bir_ornek_klasoru
DocumentRoot /

ServerName ikinci.ornek.com
ChrootDir /var/www/ikinci_ornek_klasoru
DocumentRoot /


Bunu yerine aşağıdaki biçimde bir yapılandırma oluşturmalısınız.

ChrootDir /var/www
ServerName birinci.ornek.com
DocumentRoot /birinci_ornek_klasoru

ServerName ikinci.ornek.com
DocumentRoot /ikinci_ornek_klasoru

Not: Bütün işlemleri başarıyla tamamlasanız bile apache başlangıç sırasında

Warning: DocumentRoot [/biricini_ornek_klasoru] does not exist

gibi bir hata verebilir. Bunu dikkate almayın :)


Diğer sorunlar ve destek için
modchroot@core.segfault.pl listesini kullanbilirsiniz. ( Üyelik için modchroot-subscribe@core.segfault.pl adresine boş bir posta atın )

Son olarak http://core.segfault.pl/~hobbit/mod_chroot/install.html adresinde daha detaylı bir kurulum kılavuzu bulabilirsiniz.



Pazar, Temmuz 23, 2006

Mayk Hammır nasıl Yazılır

Tost ve Çay blogundaki linkleri kurcalarken gördüm. mod-chroot la uğraşmaya başlamadan biraz kafa dağıtalım ;)

Afif Yesari, Muzaffer Ulukaya takma adıyla 200 kadar polisiyeye imza atarak bir rekorun sahibi oldu. Başlangıcından bugüne dek, Cumhuriyet döneminde Türkiye’de yazılan polisiye metinlerin toplamından çok daha fazladır “Afif Yesari”nin kaleminden çıkanlar. Bu nedenle, Mayk Hammer’i tanıtma hakkını da ona vermek gerekir:

“New York’lu ve kafadan müselleh bi polis hafiyesinin akla mantığa sığmaz deli saçmalı serüvenlerine ve eskilerine taş çıkartan yenilerini eklediğim bu detektif romanlarını şöyle yazıyordum; Patron, ressama para vermemek için yabancı dergilerden ve jiletle kesip oyduğu ve ayrı ayrı harf ve resimleri yan yana yapıştırarak hazırladığı ve kompozisyonunu da aynı yöntemle yaptığı kapakları bana veriyor ve ben de romanı bana verilen kapağa göre uyduruyordum. Örneğin kitabın adı ‘Genç Kızlar Cehennemi’ ve bir de şöyle bir resim; iri kıyım hayvan gibi bir herif, bir piknik sepeti başına çömelmiş gibi ve sarışın bir kızı, ağaçların arkasından kötü kötü dikizliyor... Ve demek oluyor ki, aşk, kin, ırza tecavüz, intikam, entrika ve fiilen tasallutta bulunma gibi olayların yanı sıra, kan ve heyecan ve bir kaç da cinayet bu kapağın hakkıdır.

Kapağı alıp eve geliyor, bir kahve, bir cıgara içiyor ve New York Şehir Rehberini önüme açarak kafadan gayri müselleh detektifi daha da çileden çıkaracak serüvenlere koşturuyordum. Ve bu 92-96 sayfalık cep kitaplarından her birini, üç günde tamamlayıp vermek zorundaydım. Bu iş için New York Şehir Rehberinden faydalanıyordum çünkü ben New York’a hiç gitmemiştim. Beş yıl süreyle bu kitaplardan bir çok yazdım ve çok da satıldı ve kimse de şikayetçi olmadı. Serüvenlerini ürettiğim detektifi uyduran yazar, uydurduğu detektiften daha üşütüktü ve bu nedenle detektif de ipe sapa gelmez bir hergelenin tekiydi. Ben, herife az bir şey çeki düzen verdim, bayağı adama döndü, daha insancıl oldu ve doktor o sıralar bana içkiyi yasakladığı için ben de ona viskiyi bıraktırdım. Böylece bu kitaplardan 200 kadar yazdım. Üşütük detektifin yazarı Spillane, o tarihte henüz 7 tane kadar Mayk yazmıştı ve 200’e yaklaşık kitabın adını taşıdığından haberi yoktu ve hala da bilmez.

Neyse bu da haberin tam kaynağı.

Cuma, Temmuz 21, 2006

En tehlikeli Cracker

Daha önce bir yerlerde okumuşsunuzdur belki ama ben yeni karşılaştım kendileriyle. http://johnny.ihackstuff.com ile google ı çok etkili bir crack aracına dönüştürebilirsiniz. Ayrıca arama için kullandığı tekniklerde oldukça öğretici.

Salı, Haziran 20, 2006

Programer Strikes Back

Neredeyse bir aydır uğraştığım sınavlar, epidemiyoloji öğrenmeye çalışmam ve grid projesi, Oracle Application server manualleri ile cebelleşme ve App Sunucusu kurulumu, ve yine sınavlarla geçen günlerin ardından tekrar kodlarıma geri döndüm. En son 2 ay önce baktığım programı çözmektense ( evet bundan sonra kodlarımı daha iyi belgelendireceğim :) ) yeni baştan başladım RoR projeme. Bu sefer mümkün olduğunca örneklerdeki her satırı özümseyerek ilerliyorum.

Tabiki bu Ruby ve RoR un ne kadar zevkli olduğunu unutmadım. Her web programcısının sıklıkla karşılaştığı bir örnek tablodan belirli bir alanı veya alanları çağırma ile ilgili.

Baştan kısaca özetlersek RoR ile çalışırken modeldeki sınıflar tablolarınız nesneler ise tablodaki alanlar (kolonlar) olarak düşünebilirsiniz. Örneğin siparişler tablonuz için;
@order = Orders.new
@order.find()
satırları ile sipariş tablonuzdaki bütün bilgileri nesnemize depoladık. Bu tabloda ad gibi bir alan olduğunu düşünürsek bu alanın bilgilerine basitçe find_by_ad fonksiyonu ile ulaşabiliriz.

35 Gün Sonra Gelen DEVAM

Yukarıdaki satırları yazıp draft olarak kaydetmemin üzerinden 35 gün geçti bu arada ben RoR projesini büyük ölçüde bitirdim. Maceralı bir Mailman kurulumu yaptım. ( Mailman ve turkish locale sorunları ayrı bir makale konusudur :) ). Bu arada QtTürkiye sitesi ve tartışma gurubu açıldı.

Ben de şu sıralar javascript kullanmadan bir popup içinden RoR a veri alabilirmiyim diye bakıyorum. Bir yol bulursam yazacağım.

Bir de unutmadan AjaxScaffold diye harika bir generator keşfettim sayfalarınızı zahmetsizce şekillendirmek için birebir. Mutlaka bakın.... Bu arada generatorlardan söz açılmışken Ruby Engines i duymuş muydunuz ?

Pazartesi, Mayıs 15, 2006

Ah şenlik vah şenlik

Evet gidemedim. 2. vizelerin ve proje teslim haftasının ortasına denk gelince Ankarada olamadım. Daha önce kaçırdığım hiç bir şenliğe bu kadar üzülmemiştim. Bu arada aklıma geldi neden şenlik mayıs ayında yapılıyor ? Mesela Temmuz başında bütün okullar (ve iş yerlerinin bir kısmı) tatilken yapılsa katılım daha yüksek olmaz mı acaba ? Belki o zaman 746 kişilik derneğin n tane üyesi (n > 59 ) katılırdı genel kurula ?

Sonunda Oldu


Bir arkadaşımın bilgisayarında müzik dinlerken karşıma çıkan tatsız süpriz. kölelik insanlık tarihinin büyük utançlarından birisidir. Ancak bu millet tarihinin hiç bir döneminde köleleştirilmedi. İnşallah bizim neslimiz ilk olmaz.

Perşembe, Mart 30, 2006

Java ve GTK+

As of v1.4.2, the Java platform supports the GTK+ look and feel, which makes hundreds of existing look and feels available to Swing programs.

Java ve GTK+ ilginç...

Salı, Mart 28, 2006

Teşekkürler Herkese

Bu gün güzel bir gün benim için. 4 gündür evden çıkamama sebep olan gribi atlattım gibi. İşler gene yığılmış beni bekliyor ama olsun en azından sağlıklıyım. Mediko-sosyal doktorumuz Mutlu Bey'e teşekkürler.

Sabah bilgisayarı açtığımda. A.Murat Eren'in bu ibretlik yazısıyla güne başladım. Zaman zaman tartışmalarımız olsada, bu önemli yazının daha fazla insana ulaşmasını sağladığı için içtenlikle teşekürler kendisine.

Akşam eve dönüp gezegene baktığımda gördümki Penguence'nin 4. sayısı çıkmış üstelik içinde benim Bilgi Üniversitesindeki Açık Kaynak Günlerinde kaçırdığım Trusted Computing yazısıyla. Teşekkürler Penguence ekibi ve Bora.

Son olarak baktım ki KDE 3.5.2 çıkmış (zamanın meşhur taktiğini hatırlamadı mı size de ? Türkiye'ye Jupp Derwal getirmişti bu oyun sistemini neyse dağıtmayalım konuyu ) ftpye göz atarken bakayım dedim başka hangi dağıtımların paketleri hazır ? Sadece 3 dağıtım var listede. Biri on milyonlarca dolarlık bütçesiyle SUSE, diğeri dünyanın en çok tercih edilen dağıtımı'nın KDE versiyonu Kubuntu ve son olarak da Pardus. Başta Pardus'daki KDE geliştiricileri olmak üzere bütün ekibe teşekkürler.

Pazar, Mart 26, 2006

Ağustos Böceği ve Karınca

Hasan Pulur'dan. Üstad yine dans ettirmiş kalemini ;)

SONRA bu hikâye değiştirildi...
O kış, hem çok şiddetli hem de uzun sürmüş, karıncanın yiyecekleri de tükenmiş, içecekleri de, yakacakları da... Zavallı yuvasında tir tir titrerken kapı çalmış, açmış. O da ne?
Ağustosböceği arabasına kurulmuş, kürkler içinde, başında kalpak, dizinde kalın battaniye...
Karınca "Bu ne hal?" demeden, ağustosböceği dalga geçmiş:
"Paris'e gidiyorum, diyeceğin var mı?"
"Var git, o La Fontaine denilen herifi bul, uydurduğu hikâyeden utansın!"
* * *
TRAKYA Üniversitesi Tıp Fakültesi Öğretim Üyesi Dr. Funda S. Pala, bu hikâyeyi çeşitli milletlere göre uyarlamış...
Çin uyarlamasında, ağustosböceği açlıktan ölüyor.
Fransız uyarlamasında, ağustosböceği karıncanın kapısını çalıyor. Elinde bavulu, "Kışı geçirmek için Karayibler'e gidiyorum!" diyor.
* * *
TÜRK uyarlamasına gelince...
Karınca bütün yaz çalışır, kış için yiyecek içecek, yakacak depolar. Ağustosböceği ise vur patlasın, çal oynasın yaşar. Kış gelince karınca sıcak yuvasında yaşarken aç kalan ağustosböceği basın toplantısı düzenler:
"Etrafta bunca aç ve üşüyen varken, bu karıncaların vurdumduymazlıklarına dur diyecek yok mu? Durumu kamuoyunun vicdanına sunuyorum."
Televizyoncular, derhal bu haberin üstüne atlayarak, bir yandan aç ağustosböceğinin, öbür taraftan da karnı tok, sırtı pek karıncanın görüntülerini "az sonra" kaydıyla tekrar tekrar yayımlarlar.
* * *
HABER bir anda bomba gibi patlar, onların deyimiyle kamuoyu "şoke olmuştur."
Yeşil Böcekleri Koruma Derneği Temsilcisi, Ali Kırca'nın "Siyaset Meydanı"na çıkarak, yıllardır çektikleri sıkıntının nedeninin renklerinin yeşil olmasından kaynaklandığını ağlayarak, gözyaşlarıyla anlatır.
Şöhretleri Türkiye'yi çoktan aşmış ve "En çok Nobel kazanamayan yazarlar" unvanını kimseye kaptırmayanlar da, Türkiye'deki bu adaletsizliği protesto ederler.
Hatta "30 bin Kürt'ü, 1 milyon Ermeni'yi katledenlerden başka ne beklenir" diye ahkâm keserler. (Bu bizim ilavemizdir. H.P.)
* * *
KONU Bakanlar Kurulu'na da gelir. Başbakan, "Geçmiş hükümetler döneminde ihmal edilen ağustosböceği kardeşlerimizi huzura kavuşturacağız, onların sorunu bizim sorunumuzdur" der.
Reha Muhtar, karıncayı canlı yayına çıkararak, "Reklamını yapmak için, zavallı bir ağustosböceğinin içler acısı durumundan yararlanmaktan utanmıyor musunuz?" diye azarlar ve haşlar.
Ertesi akşam da Fatih Altaylı, karıncayı "Teke Tek" karşısına alır, "Ağustosböceğinden çaldığın yiyecekleri nereye sakladın, öt çabuk!" der, bir güzel döver.
* * *
KARINCA, sonunda çareyi yurtdışına kaçmakta bulur... Ağustosböceği karıncanın yuvasına yerleşir, yiyeceklerine konar, eşyalarının üzerine oturur, gül gibi yaşayıp gider.
Kamuoyu baskısı bir haksızlığı daha önlemiş; adalet, anlı şanlı medyamız aracılığıyla sağlanmıştır.

Perşembe, Mart 16, 2006

Rüya Tabirleri Bölüm #1

İnsan sabahtan akşama kadar bilgisayar düşününce böyle oluyor demek ki... Rüyamda Google Maps Canlı yayına geçmişti. Ben de yukarıdan bulut hareketlerini izliyor istediğimde de zoom yapıp bulut altına inerek çok yüksek çözünürlükte dünyayı seyrediyordum. Şimdi bir yerlerden rüya tabirleri ansiklopedisi falan bulsam bunun da tabiri var mıdır acaba ? Rüyada Google görmek yazdığınız programın 10 sene daha beta aşamasından çıkamayacağına delalet eder gibisinden...

Pazar, Mart 12, 2006

Float to Integer

Buradan Object Pascal dilini tasarlayan güzel kardeşlere sesleniyorum (Türkçe bilmiyorlarsa bu onların sorunu :) ). Madem normal insanlar gibi inttostr() ve benzeri akılcı fonksiyanlar yazabiliyorsunuz da niçin floattoint() gibi basit bir fonksiyon yazmak aklınıza gelmiyor. Tamam hadi dediniz ki floatdouble dı uğraşmayalım round() ve trunc() diye iki fonksiyon yazalım, ama insan hiç olmazsa alias olarak koyar bir tane floattostr() yi. Neyse biraz daha ilerleteceğim ki Delphi bilgimi, yarın birgün insanlığı uyarırken Delphi hakkkında bildiklerimden yola çıkıp bilmediklerimi eleştirir konuma düşmeyeyim.

Cuma, Mart 10, 2006

Utanıyorum

Önce kendimden utanıyorum. Keşke Ruby bilgisi genlerimde kodlanmış olarak bulunsaydı da iyi yada kötü kod yazarak geliştirmek zorunda olmasaydım. Evet utanıyorum beni saçma sapan insanlarla aynı kefeye koyan kişilerin blogunda benden bahsedildiği için utanıyorum. Evet utanıyorum bilgisayar bilimlerini öğrenmeye çalışırken kod yazdığım için utanıyorum.

Evet utanıyorum benim yazdığım kodlara şurası da şöyle olabilirdi diyebilecek kişilerin içinden bana haykırmak geldiği için utanıyorum.

Haykırmak benim de içimden geliyor. Bu gereksiz insanların faydalı işler için çalışan o güzel insanları nasıl bir ruh haline getirdiğinden haberdar mısınız ? O saçma sapan insanlar LKD listelerini kirletirken benden başka haykıran olmadığının farkında mısınız ? Ve farkında mısınız bir zamanlar paylaşım kültürü vardı. İnsanlar birbirlerine bağırmadan haykırmadan yardım etmeye çalışırlardı. Yazık çok yazık...

...Ruby Bölüm 2

Hiç hız kesmeden yeni kodlarla devam edelim. Bu programımız da işletim sisteminde çalışan süreçleri takip ederek bir dosyaya yazıyor. ve bu dosyayı belirli aralıklarla okuyor. Eğer ardışık iki okumada bir süreç belirli bir cpu kullanım % sini aşmışsa o süreci öldürüyor. Programın içinde Ruby ye ek olarak awk da kullandım.
def anaProgram
# sistemde calisan sürecler listeleniyor
system("ps -aux")
#log dosyasi indexi
i = 0
# cpu % si ardisik iki okumada bu degerin üzerinde ise process sonlandirilir
olum = 1
# log dosyalari icin yazim araligi (sn olarak)
logla = 2
# cpu calisma kontrolu icin okuma araligi (sn olarak)
kont_zaman = 7
#loglama threadi basliyor
t1= Thread.new { loop {
sleep logla
# calisan süreclere ait butun bilgiler log dosyasina yaziliyor
system("ps aux > process#{i}.log")
# log dosyasi indexi arttiriliyor
i += 1
}
}
# kontrol threadi baslatiliyor
t2= Thread.new { loop {
# ilk okunan process id
pid1 = 0
# ikinci okunan process id
pid2 = 0
# ilk okunan cpu yuzdesi
cpu1 = 0
#ikinci okunan cpu yuzdesi
cpu2 = 0
h1 = []
h2 = []
kontrol = []

sleep kont_zaman
# her son okunan ve bir onceki process log dosyalarından pid ve cpu bilgileri alinarak
# gecici.txt adli dosyaya yaziliyor
system("awk '{ if( NR !=1 ) printf \"%d %f \", $2, $3 } { if( NR !=1 ) printf \"%d %f \\n\", $2, $3 }' process#{i}.log process#{i-1}.log > gecici.txt" )

#gecici.txt dosyasinin herbir satiri line degiskenine ataniyor
File.foreach("gecici.txt") { |line|
sayac = 0
# satir kelimelere bolunuyor
line.split.each { |kelime|
# herbir kelime uygun degiskene ataniyor

case sayac
when 0
pid1 = kelime.to_i
when 1
cpu1 = kelime.to_i
when 2
pid2 = kelime.to_i
when 3
cpu2 = kelime.to_i

end
sayac += 1


}
#atanan degiskenler 2 ayri dizide toplaniyor
h1[pid1] = cpu1
h2[pid2] = cpu2

}
pidx = 0
sayac1 = 0
#birinci okumadan gelen butun surecler taraniyor
while (pidx < 65536)
#birinci okumada olum sinirinin uzerinde oldugu saptanan
#surecler kontrol dizisine atiliyor
if (h1[pidx] != nil && h1[pidx] > olum)
kontrol[sayac1] = pidx
sayac1 +=1
end
pidx += 1

end


#ikinci okumadan gelen butun surecler taraniyor
pidy = 0
while (pidy < 65536)

# ikinci okumadan gelen süreclerin olum sinirinin
# uzerinde olup olmadigi kontrol ediliyor.
if ( h2[pidy] != nil )
if ( h2[pidy] > olum )
#Eger uzerinde ise birinci okumadan gen surec id leri ile karsilastiriliyor
kontrol.each {|kont|

if (pidy.to_i == kont.to_i)
# sureci gercekten oldurmek icin system("kill -9 pidy") satirini aktive edin
puts pidy.to_s + " olecek"
#system("kill -9 pidy")
end
}
end
end
pidy += 1
end

}
}

#threadler baslatiliyor
t1.join
t2.join

end

# ana program cagiriliyor
anaProgram

...Ruby

Sayın A.Murat EREN Ruby e ısınamadığından bahsetmiş. Olabilir... Ben Python'a çok hakim değilim ama birkaç Python denememin bana fazla tat vermediğini söyleyebilirim. Ruby de hergün biraz gelişiyorum ve temiz kodlamasından zevk alıyorum. O for ların sonuna end leri benim kodu daha rahat okumamı sağlıyor. Matz in Ruby i tasarlamadan önce Pythonu Perl ü Lisp i ve Smalltalk ı oldukça iyi incelediğini düşünürsek tasarım amacınında bu olduğunu tahmin ediyorum. Ama tabi ki kendisine de sorulabilir bu soru...

Ara ara burada yazdığım Ruby kodlarını yayınlayacağım. Daha önce yayınladığım bu küçük programa ek olarak 2 program daha geliyor... İlk programımız Ruby de thread lerin kullanımını gösteriyor.
=begin
Bir bankadaki müşteri ve memurların çalışma düzenleri simüle edilmistir. Bankadaki memur sayısı sabit tutulmus her thread in bir memuru temsil ettiği var sayılmıstır. Musteriler ise rastgele aralıklarla olusturulup musteri kuyruguna eklenmektedir.
=end
require "thread"
$global = 0 #global degisken

trap "SIGINT" , proc { # Programdan ctrl+c ile cikilması icin yordam düzenleniyor

puts "Su ana kadar " + $global.to_s + " musteriye hizmet verildi..."
exit

}

class Memurlar

def hizmet_ver (i)
sleep i # Musteriye Gore Degisen Hizmet Zamani
end
end

class Musteri

def zaman
return rand(5) # Musteri icin gereken islem zamani
end
end



def anaProgram
puts "Programdan çıkmak icin Ctrl ve C tuslarına birlikte basin"
sleep (5)

srand Time.now.to_i # Rastgele sayi üreteci baslatiliyor

memurlar = Memurlar.new #Yeni Memur nesnesi olusturuluyor
threads = [] #threadler dizisi hazırlanıyor

kuyruk = Queue.new # Musterilerin bekleme kuyrugunu temsil eder

musteriOlusturucu = Thread.new{ loop{

sleep rand(4) # Yeni musteri gelmeden gecen rastgele bekleme suresi
# Bu deger degistirilerek kuyruktaki musteri sayısı kontrol edilebilir

musteri = Musteri.new # Yeni musteri olusturuluyor
puts "Yeni Musteri Geldi Musteri No" + musteri.object_id.to_s
kuyruk << musteri # Musteri kuyruga ekleniyor
puts "Kuyrukta Bekleyen " + kuyruk.size.to_s + " Musteri Var"

}
}


3.times { |s| s += 1 # Memurları temsil eden 3 thread olusturuluyor

threads << Thread.new { loop{

musteriX = kuyruk.pop #kuyruktan yeni musteri cagiriliyor
i = musteriX.zaman # Musterinin hizmet zamanı alınıyor
puts "Memur" + s.to_s + " Hizmete Basladi Musteri Kodu" + musteriX.object_id.to_s
memurlar.hizmet_ver(i)
puts "Memur" + s.to_s + " in isi Bitti"
sleep rand(3) #Musteriler arasındaki bekleme suresi
$global += 1
}
}
}

threads.each { |aThread| aThread.join } # Threads dizisinde var olan threadler sırayla
# cagirilip aktive ediliyor

end


anaProgram # anaProgram calistiriliyor.

Çarşamba, Mart 08, 2006

Open Source Water ve Programcı Kimdir ?

Ateşli mizaca sahip bir insan olarak öncelikle gezegende süregelen acayip tartışmalardan bir şekilde uzak durduğum için kendimi tebrik ediyorum :) Emre'nin sessiz kalma konusunda yazdıklarına pek katılmıyorum çünkü insanlar net bir biçimde ortada olan gerçekler konusunda yorum yapmayı çok da gerekli bulmazlar kanısındayım.

Neyse asıl konuya girmeden Armish in çektiği fotoğraflarda görünen Açık kodlu suyun nasıl temin edileceğine dair açıklamaları beklediğimi bildirmek isterim :)

Asıl konuya gelirsek
A deterministic model for the dynamics of furunculosis in chinook salmon Oncorhynchus tshawytscha
başlıklı bir makeleyi anlamak için niçin iki gündür uğraşıyorum sorusunun yanıtını vermeye çalışıyorum. Bundan 4 yıl önce konservetuar sınavlarına hazırlanacak kadar tiyatroya aşıkken insanın bütün karakterleri anlayabilmesi gerektiğini fark etmiştim başarılı bir oyuncu olmak için. Onlarca değişik tip ve konu yüzlerce değişik psikolojik ruh hali.

Peki ya programcılar ? Bizim anlamaya çalıştığımız alan sayısı daha mı az ? Bizim karşımızdakinin isteklerini anlamak için öğrendiklerimiz, başarılı bir program yazabilmek için girdiğimiz ve okumaya çalıştığımız beyinler... Bilmiyorum bütün bu UML XP vb benzeri programcılık kavramlarının ötesinde birşey kod yazmak. İnsanın ve bilgisayarın en özel noktalarına temas edip her ikisinin çalışma biçimini sezmeyi gerektiriyor. Kullandığımız programlama dillerinin ve araçlarının yazarları ile kurduğumuz entellektüel bağdan bahsetmiyorum bile.

Yalnız matematik var bu kadar çok alanla birden ilişki kurmuş ama o da bilgisayar kadar yakın değil güncel hayata. Tabi bilgisayarında özünde matematik olduğunu gözden kaçırıyor değilim ama belki şöyle bir analoji kurulabilir. Matematik insanların ulaşamadığı tanrı ise bilgisayar onun haberci meleği, programcı ise mucizeler yaratan peygamberidir...

Not: Lütfen abuk yorumlarda bulunacak olanlar zahmet etmeden önce analoji kelimesinin anlamını bir okusunlar.

Cumartesi, Mart 04, 2006

Sinir Katsayısı

İsveç'te yüz bini aşkın Türk yaşıyor. Danimarka'dan sonra İsveç devlet radyosu da Türkler için yapılan Türkçe yayına 15 Ocak 2006 tarihinde son verdi.
İsveç radyosu yönetimi, "Türkçenin İsveç'te yaşayan Süryani ve Kürtler için çok hassas bir dil olduğunu, bu kişiler üzerinde olumsuz etki yapabileceğini, anadili Türkçe olmayanlar üzerinde psikolojik rahatsızlık yaratabileceğini göz önüne alarak" yayına son verdiklerini açıkladı.
İsveç devlet radyosu program şefi Kertsin Brunnberg, "Türkler kırk yılı aşkın süredir İsveç'teler. İsveççeyi öğrenmeliydiler. Öğrenemedilerse, bu onların sorunudur" dedi.

Devamı için http://www.milliyet.com.tr/2006/03/04/yazar/uras.html

Çarşamba, Mart 01, 2006

TABU

Tabu arkadaşlar arasında rahatlamak için güzel bir oyun. Ancak çok yoğun bir günün sonunda aşağıdaki gibi diyaloglar ortaya çıkabiliyor.

Anlatıcı: Abi hani çölde olur ???

Anlaymaya Çalışan: KUTUP AYISI

Pazartesi, Şubat 20, 2006

AB Tarama Sürecinde LKD nin Rolü

Yeni Gelen Edit: Konu ile ilgi Devlet Bakanı ve Baş Müzakereci Sn. Ali Babacan'ın özel kalemi ile görüştükten sonra Derneğimizi tanıtan ve verebileceğimiz katkıları belirten bir belgeyi hazırlamaya başladım. Bütün LKD üyelerinin wiki tarzındaki bu belgeye katkılarını bekleriz.

Geçtiğimiz 2 günlük süreçte EGE Çevre ve Kültür Platformunun bir toplantısındaydım. Bu toplantıda bu güne kadar fark etmediğimiz veya yeterli önemi vermediğimiz bir konuyu öğrendim.

Bildiğiniz gibi AB üyeliği için tarama süreci içindeyiz. Bu süreçte AB nin isteği üzerine tarama süreci için yapılan toplantılara STK larda davet edilmiştir. Bu aşamada oluşturulacak taslak metinlere göre müzakere süreci başlayacak ve bu süreç dahilinde ülkemizin geleceğini belirleyecek yasalar çıkacaktır.

Tarama süreci içindeki pek çok başlık doğrudan bilişim ve Açık Kod ile ilgili görünmesede aslında gerek bilgi-işlem dünyasını gerekse Açık Kod u ilgilendiren başlıklar olacaktır. Basit örnek vermek gerekirse eğer biz bu sürece müdahil olmaz isek önümüzdek 30 yıl Milli Eğitim Bakanlığının Müfredatında Bilgisayar Derslerinde Kelime İşlemci Değil MS Word öğretilmesi gerektiği yazabilir.

Şimdi eylem zamanı... Tarama süreci başladı ve son sürat devam ediyor. Bir an önce konu ile ilgili bir çalışma grubu oluşturulmalı AB Genel Sekreterliği ile temasa geçilip bu tarama sürecine diğer Sivil Toplum Kuruluşları gibi müdahil olmak istediğimiz söylenmeli ve en kısa zamanda her başlıkta bize neler düşüyor sorusunun cevabını bulup söz konusu toplantılara temsilcilerimizle katılmalı ve geleceğimiz üzerinde söz sahibi olmalıyız.

Geleceği göremeyiz ama ona müdahale etme ve şekillendirme şansı bugün elimizde.... Tarama süreci ile ilgili daha geniş bilgi için www.abgs.gov.tr adresine bakabilir, bu sürece destek olmak icin proje-cg listesine görüşlerinizi bildirebilirsiniz.

Çarşamba, Şubat 15, 2006

Yorum Yok !

Melih Aşık'tan

CHP Milletvekili Berhan Şimşek, dün Anadolu Ajansı'nın üst düzey bir yetkilisini aradı ve sordu:

- Başbakan'ın Mersinli çiftçi Kemal Öncel'e hakaretler yağdıran konuşmasını bütün ajanslar geçti. Bütün televizyonlar ve gazeteler verdi. Haberi bir tek sizin bültenlerinizde göremedim. Sebebi nedir acaba?

Yanıt ilginçti:

- Konuşmayı seviyesiz bulduğumuz için kullanmadık efendim!

Zor Aşk

Haber saldım
Dört bir yana
Karanfiller susuz kalmış
Muhabbete dost aradım
Bu şehri periler sarmış

Bitip tükenmez sigaram
Ciğerim nefessiz kalmış
Herşey yalan olsa bile
En güzel aşk zor olanmış

Söyle bana güzel kadın
Herşey yerli yerinde mi
Bırakıp gittiğin gibi
Deniz mavi gök yeşil mi

Perşembe, Ocak 19, 2006

Evlenmek İsteyen Kadın

"Hiç bir şey, evlenmek isteyen bir kadın ve susuz kalmış bir deve kadar kararlı olamaz"

Bir Eskimo Atasözü

Devamı burada... :-)

Salı, Ocak 17, 2006

Pardus da Lazrus Kurulumu

Delphi ile zorunlu bir gece geçirdikten sonra Linux üzerindeki alternatiflerine de göz gezdirdim. Kylix hem 90 mb lik boyutu hemde Borland a bağımlı olmasıyla beni pek cezbetmedi. Diğer taraftan daha önce adını duyduğum Lazarusu denemeye karar verdim.

İlk olarak bu adresden Free Pascal'ı yüklememiz gerekiyor. Yükleme işlemi oldukça kolay.

1. Paketi indirip açın.
2.Açtığınız klasörde sh install.sh yazıp enter a basın.
Bu noktada bir işlem daha yapacağız bu Lazarusdan kaynaklanan bir uyum probleminin üstesinden gelmek için bu adresde bulacağınız Free Pascal kaynak kodlarını indirip uygun bir klasöre açın. (Bu klasörün adı FPC daha sonra kullanacağız)

İkinci adımda Lazarus IDE'yi indirip yükleyeceğiz. Ancak bunun için gtk 1.x kütüphanelerinin kurulu olması gerekiyor. Eğer kurulu değilse PİSİ ile rahatlıkla kurmanız mümkün. Daha sonra bu adresden en son cvs kodlarını indiriyoruz ve açıyoruz. Lazarusu derlemeden önce yapmamız gereken bir diğer iş gdk-pixbuf paketini kurmak. Bunun için Gnome'un sitesinden kaynak kodu indirip ./configure, make, make install ile kuruyoruz. Daha sonra libgdk_pixbuf.so.2 dosyasının yerini tesbit edip export LD_PRELOAD=usr/local/lib/libgdk_pixbuf.so.2 şeklinde ortam değişkenimizi tanımlıyoruz. (Tabi daha sonra bunu açılış dosyalarından birine yazmakda fayda var) (Bu arada bu ipucu için cartman'a teşekkürler)
artık lazarusun kaynak kodlarını açtığımız klasöre gidip ' make clean install ' komutunu verebiliriz.

Derleme işlemi bittikten sonra aynı klasörde ./lazarus yazarak IDE mizi başlatabiliriz. IDE ilk başladığınde Free Pascal ı bulamadığına dair bir uyarı verecektir. Bu durumda Ana menüden Enviroments -> Enviroments options -> FPC source directory yi seçip daha önce açtığımız FPC klasörünün bulunduğu yeri yazıyoruz. IDE miz artık kullanıma hazır.

Çok iyi bir belge olmadığının farkındayım bunun ama Lazarus PISI paketi çıkana kadar kullanılacak geçici bir belge olduğundan çok da fazla bir önemi yok sanırım.

Pazartesi, Ocak 16, 2006

Delphi ile Bir Gece


( DELPHOI ) Antikçağ Yunanlılarının en ünlü kahinlik tapınağı

Eski Yunan inançlarına göre, tanrılar tanrısı Zeus'ün oğlu Apollon, yılan-canavar Python'un bekçilik ettiği bu tapınağı onu öldürerek ele geçirmiş. Pythia adlı kahin-büyücü kadını buraya yerleştirmiş, bu kadın gelecekten haber soranlara babası Zeus'ün sözcüsü olan Apollon'dan aldığı karşılıkları bildirirmiş. Burada yer altındaki bir yarıktan çıkan dumanın etkisiyle yarığın başındaki kahin ki adı phytia'dır transa geçer ve tanrı apollonin agzında konustuguna inanılırdı. Yarışma yeri Olympia'nın karşısında bir düşünme ve duyma yeri olan Delphoi'nin ortasında kutsal taş Omphales varmış, onun durduğu yer, dünyanın tam ortasıymış.

Gelecekten haber verme alanında ünlü eski Yunan kentlerinin sınırlarını çok aşan ve hemen o çağın bütün uygarlığına yayılan Delphoi tapınağı gerçekte, geleneğin hukuksal bir düzene dönüşmesini gerçekleştirmiştir. Apollon'un yetkesi, Zeus'ün sözcüsü olarak, düzenin sağlanması yolunda tanrılık yasalar oluşturmuştur. Delphoi antikçağ Yunanlılarının bir çeşit kilisesidir. Yunan tarihinde rastlanan ilk mezhep olan Pythagorasçılıkta bu kilisenin ürünüdür.

Bu başlığı neden yazdığıma gelince yarın sınav var Delphi'den (Tabi bu Borland'ın Delphi'si). Bu güne kadar miadı doldu diye öğrenmemekde direndiğim bu IDE'yi ( Bazılarına 100 defa yazdırmak lazım Delphi bir dil değil Object Pascal için bir IDE dir diye.) Öğrenmek için yarın saat 16.00 a kadar vaktim var. Hayırlısı olsun :-)

Cuma, Ocak 13, 2006

Yoksa siz hala ?

Evet efendim bakınız m$ si apple ı sizin için çırpınıp didiniyor pek faideli müzik ve video formatları geliştiriyorlar. Tabi ki bir hayır duanızı almaktan başka bir beklentileri olmadan. Ama siz ne yapıyorsunuz, hala mp3 dü ogg du acayip şeylerle muhattap oluyorsunuz. Peki devam edin ama aşağıdaki resmide aklınızdan çıkarmayın.

Biraz Ruby Bölüm 1

Saat 01:20 yani biraz Ruby kodlamak icin güzel bir zaman. İlk programımız ortak tampon bellek kullanan bir ana program ve çocuğu üzerine. Ana programın ortak alana yazdığını çocuk program okuyor ve ekrana yazıyor...





# ortak tampon tanimlaniyor
$buffer = nil

def anaProgram
#disaridan alinan deger integer olarak i degiskenine ataniyor
i = ARGV[0].to_i
sayac = 0

puts "Uretici kaynaklari yaratti"

# ana sürec i defa calistiriliyor
i.times {
if ($buffer == nil )
#Eger tamponda veri yoksa alfanumerik karakter uretiliyor

$buffer = rand(36).to_s(36)
puts "Uretici: \" #{$buffer} \" urettim, yaziyorum"
end

if ($buffer != nil )

#Eger tamponda veri varsa cocuk tarafindan okunuyor

fork do
puts "Tuketici: \" #{$buffer} \" okudum"
end
#tampon sifirlaniyor
$buffer = nil
end
}
end

# ana program cagiriliyor
anaProgram

Pazartesi, Ocak 09, 2006

Teorem...

Türkiyede yayınlanan gazetelerin sayını n kabul edersek. Bu gazetelerin 9*n/10 luk bir kesiminde Ali Kemal zihniyetinde n=>1 adet yazar bulunmaktadır.

Teoremin ispatını yapmıyor onun yerine Ali Kemal'den (nam-ı diğer Artin Kemal'den) bir anektod naklediyorum.Günümüzle benzerliği okuyanalar kursun...

"Demiştim sana Ankara ordusu Yunanı yenemez.Yenemiyor işte. Yunan ordusu yarın öbür gün Ankara'ya girer, bu haddini bilmez serserileri yakalar. Çok da iyi olur.Bu kuru gürültü biter,başımızı dinleriz. İstiklal, hürriyet, milli and, milliyetçilik filan gibi iyi tınlayan içi boş laflarla vakit kaybetmez, tıpkı Yunanistan gibi İngiltere'ye bağlanırız.Her sorunumuzu çözecek tılsım budur."


Anektod yine Turgut Özakman'ın Şu Çılgın Türkler Kitabından. Okumayan var mı ?

Ceylan Derisi Koltuklara İthafen...

"Salih.." dedi Kemal Paşa
"..kardeşimden mektup geldi. Paraları bitmiş. Şu notun gizlice anneme ulaşmasını sağla."

"Başüstüne."

Not çok kısaydı:"Bankadaki parayı harcayın. Yetişmezse evdeki halıları satın"

Turgut Özakman'ın Şu Çılgın Türkler kitabından...

Cuma, Ocak 06, 2006

Kedi Evden Kaçtı

Kardeşim bu internet nelere kadir. Sen kalk tee Prizren lerden Pardusu duy. Kurmaya kalk. Olmasın gel pardus kanalına sor. Şaka bir yana daha güzel yerlerde görürüz Pardusumuzu inşallah. Bir gün biri gelipde " Parle vu france " diye sorarsa pardus kanalında bu iş bitmiştir diyecem. Hani nasıl denir "Avrupa Avrupa Duy Sesimizi Bu Gelen Pardusun Ayak Sesleri".
Pardus kanal logundan;
<_RADIOhead> i hear from a friend of mine , we are very familiar with turkey i`m from Prizren if you know he told me that hear from a turkey TV channel so we download it :) and wanna give a try

Salı, Ocak 03, 2006

Değerlerin yerini değiştirme

Özellikle sıralama vb. algoritmalarında iki değerin yerini değiştirmemiz sıklıkla gerekir. Mesela;
int a = 1;
int b = 2;
int gecici;


gecici = a;
a = b;
b = gecici;

örneğinde olduğu gibi. Ama Ruby kullanıyorsak ne yapıyoruz;
a, b = b, a
Çok hızlı geldiyse yavaş çekimde bir daha seyredin ;-)