13.11.09

Bir farklıdır insan

a kişisinin yanına x şehrinden arkadaşı b kişisi y şehrine gelir. y şehri 3 günlük gezilecek görülecek yerdir. bu olayı a kişisi c kişisine böyle anlatıyor. aynı y şehrinde okumakta olan c kişisinin kafasında tabiki 3 günlük plan canlanıyor. kent parka gitmişlerdir, sonraki gün bilim kültür parka sonra da çarşıyı gezmişlerdir. sonra a kişisi anlatmayı sürdürüyor. bir gün doorsa , bir gün budaya bir gün de glow a gittik. bunlardan anlıyoruz ki y şehri eskisehirdir. c kişisi benimdir. gerileri meçhuldur. insanlar pek farklıdır.

Bir takıntı , bir oyun

Takıntı:

Duracell 10 pil gücündedir. Duracellin ayıcığı vardır diğer pillerin de öyle. Velhasıl 10 pil yıkılır , duracell ayaktadır. O halde duracell 10 pilden de dayanıklıdır.

Oyun:

Bir dakikayı ölçebilecek bir nesne (kum saati, kronometre, saniyeli saatler), hesap makinesi varsa elinizde 1 e basılır sonra da + ya basılır sonra saniye gözlenir aynı anda eşittire basmaya başlarsınız. Bir dakika içinde durduğunuzda kaç kere bastığınızı görürsünüz. En çok skor yapan yener. Bizim zamanımızda yoktu bilgisayarımız , "kendi oyunumuzu kendimiz yapardık "(alıntı: Selçuk hocadan)

29.8.09

Profiling

Merhaba arkadaşlar bu ay aklımızda bir fikir oluşması için kod analizinden bahsedeceğim. Kod analizinden bahsederken inceleyeceklerimiz; yazdığımız dot net kodunun çalışma zamanını incelemek, hangi metodda ne kadar zaman harcadığımızı görmek, programının ne kadar bellek kullandığını görmek ya da metodların kaç kez çağırıldığını farketmek ve buna benzer pek çok şeyi içerecek. Bunu yaparken visual studio 2008'e ek olarak

profiler

adresinden dotTracer isimli deneme sürümü olan program ile inceleme yapacağız. İnternette pek çok profilerlar mevcut. Arzu eden ücretsiz bulabileceği programları da deneyebilir.

Deneme amaçlı inceleyeceğimiz kod ise yapay zeka dersi için yazdığım

bir işlem

adresinde bahsettiğim kod olacak. Uzun hesaplamalar barındırdığından incelememiz için uygun olacağını düşündüm.

Profilerı kurduktan sonra visual studio' u açınca yeşil renkli start debugging butonun yanında start profiling butonun geldiğini farkediyoruz. Profile edeceğimiz projeyi açtıktan sonra bu butona basarak işlemi başlatıyoruz. Karşımıza 2 seçenek geliyor performance ya da memory profiling. Buradan istediğimizi seçerek işlemimize devam ediyoruz.

Kodu çalıştırıp bir işlem çözdükten sonra programı kapattığımızda inceleme ekranı ile karşılaşıyoruz.

Main thread bizim programızın ne kadar açık kaldığını gösteriyor. Tüm değerler ms cinsinden verişmiştir. Main thread 1 kere çağırılmış buna karşılık olarak 6 sayıyla hesap yapan hesapla fonksiyonu ise 3516060 kere çağırılmış. Tüm ihtimalleri denememiz için bu fonksiyonu kaç kez çağırdığımızın net sayısını bulmak kodu inceleyerek çok zor olurdu.

Daha detaylar incelemelere baktığımızda ToString fonksiyonun bile ne kadar çağırıldığını görebiliyoruz. Örneğin benim bu kodumda 10548180 kere çağırılmış. ToString fonksiyonunun performansı bu kadar düşüreceğini düşünmezdim bile yazarken. ToString in gereksiz olduğu yerleri kaldırırsam kodun daha hızlı çalışacağını bu sayede görmüş oldum.

Program 16 msde kapanmış. Kapanırken kaydettiğim veriler ya da dispose edeceğim fazla objectler olmadığından kapanış kısa sürmüş olabilir. Zaten kapanırken hangi metodların çağırıldığına bakıp bunu anlayabiliriz. Bu şekilde performans açısından daha verimli kodlar yazabiliriz.

Aynı şekilde profilinge başlarken memory profilingi seçersek çalışma anında dump memory butonu ile ne zaman istersek programımızda hangi nesne türünden ne kadar yarattık ya da stacki ne kadar kullandık, çöp toplarken ne kadar memory harcadık, uygulamamız çalışırken ne kadar hafıza kullanıyor bunu ayrı ayrı görebiliriz.

Memory incelemesindeki değerler byte ile ifade ediliyor. Bu şekilde değişkenlerimizin ne kadar yer fark eder ona göre değişimler yapabiliriz.


Uğur Atmaca

20.8.09

About the Athletics

At the moment we all following the 12th IAAF World Championships in Athletics Berlin-2009. When I thought about athletics; pentathlon , decathlon and like others are affecting me cause of being real war on athletes. Know that doing always same thing or work on the same branch is easy than others. In contrast decathlon athletes are racing at ten branches in two days.
We should accept that racing with ten branches is harder than running only 100m. Therefore what I am saying is the real athletes are doing these jobs.


PS:
Except Usain Bolt. He is doing impossible things.
Iron Man race is hardest sport. It shows your hardiness.

10.8.09

Laptop Soğutucu

Gerekli Malzemeler

Kesilebilecek Usb kablo (ya da adaptör)
Karton kutu
Bozuk power supply (ya da fan)

Ne yapacagız? Fanımızı alacagız ya da power supply ı kırıp içinden fanını cıkaracagız. Daha sonra ne yapacagız? Usb kablomuzu keseceğiz ya da adaptörün ucundan enerji alacagız. Usb de 4 kablonun biri data+ digeri data- bunlar mavi ve beyaz ise geriye kalan ikisi +5v ve ground sa bize bunlar gereklidir. Ne yaparız bunları fanın kırmızı siyah kablolarına ayrı ayrı baglarız. Sonra kartona fan tam oturacak bicimde delikler açar resimdeki gibi laptop sogutucumuzu yapmıs oluruz.






Usb kullanmanın avantajı az yer kaplaması.
Adaptörün avantajı 5v dan fazla oldugunu varsayarsak daha çok sogutması.
Usb kullanmanın dezavatajı usb girişlerimizi bosyere kullanması.

24.7.09

Bayan Yanı

Bu mutlu bir adamın hikayesi. Bu hikayede okuyucuya aktarılan bir hüzün yok. Bazılarının duygulanmalarını da garanti edemem. Remzi Amca herhangi bir beldenin, kasabanın belki ilçenin ya da bir vilayetin tren garı gişesinde bilet satardı. Bu işi onca yıldır yapardı, ne zaman başladı ben bilemem. Güler yüzü ve sevecenliği insanlara yayılırdı. O gardan insanlar mutlu binerlerdi trenlere. İnenler için aynı şeyi söyleyemeyeceğim. Onca yıldır bu işi yapardı, onun sayesinde pek çok yuva kuruldu. Nasıl mı? Zaten hikayenin yazılma amacı bunu anlatmak sizlere.
Tonton bir amca artık Remzi Amca. Her sabah erken kalkar şükür eder. İşine başlar. İnsanlara iyilik aşılar. Akşam üzeri evine döner. Ailesi ile yemek yer, sohbet eder. Remzi Amca gizli bir halk kahramanıdır. Bildiğiniz üzere trenler de bayan yanı tabiri kullanılmaz. Otobüslerde buna özen gösterilir ama trenlerde bu kontrol yoktur. Bu yüzden Remzi Amca yalnız gelenleri, yalnız bildiklerini aklına yazar. Hangi trene bindi? Hangi vagon, kaç numaralı yere verdiğini aklında tutar. Sadece bu ince detaylar değildir aklında kalan. Bu çiftli koltuğa yer verdiği kişi kaç yaşlarındadır? Giyimi nasıldır? O kısa sürede gözlemleyebildiği kişilik özellikleri. Tüm bunları aklında tutar. Özellikle tek kişilik koltuk istemeyen tüm yalnızlara çiftli koltuklarda yer verir. Daha sonra da karşı cinsten onunla en iyi anlaşacağını düşündüğü kişiyi yanına oturtur. Tren vakti darsa bu tercihler bazen zorlama olur. Lakin genelde memnundur Remzi Amca kararlarından. Hele bir de bu çiftler uzun yola gidiyorlarsa ne ala. Remzi Amca'nın hafızası çok kuvvetlidir. Sanmayın ki unutsun önceden yan yana yer verdiği kişileri hemen. O hikayesini çoktan yazmıştır bile. Neler konuşacaklardı? Belki de çekineceklerdi. Tüm bunları düşünür, kurar. Tren ilerlerken o da düşünür çiftleri nasıl diye.
Remzi Amca'nın favori çiftleri vardır. Ne de güzel oldu der her aklına geldiklerinde. Bir de ayın çiftleri vardır. Çiftler ise bu durumdan habersiz. Eğer Remzi Amca başarmışsa onları bir araya getirmeyi, çiftler ilk tanışmaları akıllarına geldiklerinde ne de hoş bir tesadüf derler. Kader bizi istemişler derler. Zaten Remzi Amca da bilinmek istemez. Utanır yoksa çekinir.
Remzi Amca sağlıklıdır. Uzun yaşar. Çok uzun yaşar. Remzi Amca trenlerde de bayan yanı kavramı gelecek zamana kadar yaşar. O gardan binen yolcular gülümser. Tasaları azalır. Remzi amca çiftlere göz kırpar. Her zaman haber verir onlara mutluluğu...

20.7.09

En Beğendiğim Karakterler

Burhan Altıntop (avrupa yakası)

İhsan Yıldırım (tatlı hayat)

Komşu İrfan (tatlı hayat)

Pöti Avni (ekmek teknesi)

Popstar Ajdar

Meriç Erkan

Sinan Sağıroğlu (cevizkıran)

Rin Tin Tin (lucky luke)

Mürsel (geniş aile)

aklıma geldikçe eklerim yanlarına bu harika karakterlerin.

19.7.09

Balıkçı ve Karbeyaz

Mehtap bir ayrıdır onun için. Dalar dalar çıkar; bazen denize , bazen o sonu gelmeyen hayal
dünyasına. Komşuları vardır onun, bir güzel köpeği, bahçesinde meyve ağaçları, iki göz odalı evi.
Ha unutmadan söyleyeyim ufak bir de sandalı. Çok parası yoktur. Ne de bir arabası. Bir sevgilisi de
yoktur. Ne babası ne annesi sağdır. Kimseye borcu da yoktur, Allah'a bir can borcu. Arayan soranı
yoktur, ne de bir arkadaşı. Tek dostu oltası, sandalı, mehtabı seyrettiği sandalyesi. Her gün balığa
çıkar. Bazen de dalmaya gider.
Dalmaya gitti günlerden bir gün yine. Deniz kabukları toplardı genelde derinlerden. Bir istiridye
buldu o gün. İçini ancak kumsalda açacaktı. Gördüğü şey gözlerini kamaştırdı. Bu ne iri, ne temiz ,
ne de güzel bir şeydi. Bembeyaz bir inci. Beyaz şeyleri nitelemekte kullanılan nesne yani. Bir
pamuk gibi beyaz vardır bir de inci gibi. Görür görmez kapattı istiridyenin kabuğunu. Etrafına
bakındı önce acaba kimse görmüş müydü. Kimsecikler yoktu. Hemen cebine koydu ve evin yolunu
tuttu. Defalarca yerini değiştirdi, en sonunda gün ışığı bile almayan sandığında saklamaya kara kıldı
onu. Bir sevgilisi vardı artık, gözünden bile sakındığı sevgilisi. Görmeye kıyamadığı güzeller güzeli
sevgilisi. Artık daha çok evde vakit geçiriyordu. Dışarı çıktığı nadirdi. Hayaller kurduğu nadir,
mehtaba ya da denize dalmalar nadirdi. Düzeni sevmiş miydi? Sevgilisini bırakamıyordu.
Korkuyordu. Kıskanıyordu. Aşıktı, korkuyordu. Ona dokunmaya cesaret etmesi bir ayını aldı.
Kimse olanları anlamadı. Neden balıkçı artık ortalarda yoktu. Kimse bilemedi bizimki aşıktı. Çok
aşıktı. Artık kendine dikkat etmez oldu. Fazla da hareket etmiyordu.
Lakin balıkçı halinden memnundu. Ne bir şikayet, ne bir isyan. Bilakis pek mesuttu. Hep bunu
beklemiş ama hiç hayal etmemişti. Belki de edememişti. Şaşkındı. Yaşadıkları hayallerinden çok
daha güzeldi. Korkuyordu. Hiç bitmesin istiyordu.
Karbeyaz mutsuzdu. Yalnızdı. Etrafta gezinen ne bir balık, ne onu okşayan bir yosun. Hep aynı
karanlık, boğucu yer. Ara sıra balıkçının nasırlı elleri. Balıkçıyı seviyordu. Çünkü o onu çok
seviyordu. Ama olmak istediği yer burası değildi. Yaşamak istedikleri de bu değildi. O diğer
arkadaşları gibi zengin kadınların boyunlarında durmayı da istemezdi ama o karanlık sandıkta bunu
bile istediği oldu. Çoğu kez derdini anlatmak istedi. Beceremedi. Balıkçı onu dinlemedi. Hep kendi
bildiğine devam etti. Karbeyaz gün geçtikçe üzüntüden matlaştı. İlk günkü göz kamaştıran halinden
eser yoktu. Balıkçı bunu gördü ama görmezden geldi. O onu seviyordu, bütününü, parlaklığını değil
ki. Karbeyaz eridi, karbeyaz matlaştı, karbeyaz karardı.
Balıkçı onu sevdi. Hep daha çok sevdi. Bilemedi, ne kadar sıkıldığını onun , göremedi. Gözüne hep
ilk günkü gibi geldi. Hep sevdi. Daha çok sevdi. Kendi de yaşlandı ama her geçen saniye daha çok
sevdi. Çok kıskandı. Sakladı onu kimselere göstermedi.
Bir gün balıkçı borcunu ödedi, göçüp gitti. Evini bir garibe verdiler. Bir garip eşyaları karıştırdı.
Sandığı açtı. İçi bezlerle dolu sandığın dibinde kutu buldu. Kutuyu açtı içinde bir istiridye. Onun da
içini açtı. Siyah bir bilye. Toparladı sandığı dışarı gereksizlerin yanına koydu...

2.7.09

Fanta Gençlik Festivali

Öğrenciler ya da gençler için klasik olan 2 eylül konserlerinden birine giderken yaz olsa tedbirliydim. Üzerime oranın akşam rüzgarlarından korunmak için birşeyler aldım. Festival başlangıç saati 16ydı. Biz 17 de oradaydık. Rexonanın minderlerinde oturduk. Değişik aktiveteler vardı. Katılmak isteyenlerin ilgisini çeker 2 interaktif yarışma ve bungee jumping benzeri zımplama platformu. Fantanın karaokeleri ve alt gruplar sahne aldı. Senkron isimli Eskisehir grubunda bilişim günleri ekibinden ve dergimiz readmeede de yazan Gökmen Görgen de gitar çalıyor, gördüm.
Amacım Pinhani yi dinlemek Cezaya az bakıp Kenan ' a kalmadan dönmekti öyle de yaptım. Neden böyle mi Pinhaniyi aralarında en çok beğeniyorum ve konser de bunu gösterdi zaten. Çok beğendim bitişi çok güzeldi. 20:00de sahnedelerdi ve 50 dakika sahnede kaldılar. Cezayı dinledik , etraf kalabalıklastı, millet gelirken o gece eve dönme rezilliğine kalmadan geri döndük.

Notlar: rexona Kenan Doğulu ile tanısma fırsatı sunuyor
Kenanın konserine yakın kapıda bilet kontrolu kalmadı
halkım işini biliyor kimisi kampüs içinde bilet satıyor , kimisi ceza yazan kafa bandajı, kimileri de kontrol azalınca bira getiriyorlardı
unutmayın 2 eylül kampüsü eser , gece oradan dönmek biraz zordur

10.6.09

Bir Sarı Kedinin Kaçışı


Sarı kedim evde çok yalnızdı. Hep camlardan bakardı. Ben olduğum zamanlarda benimle oynardı. 15 tatilde ailecek bizim evdeydik. O zaman kalabalığı sevmişti. Yorulmadan oynardı. Ben bant atardım bana geri getirirdi ve tekrar ve tekrar... Dedemle camdan dışarıyı seyrederlerdi. Sonra tatil bitti. Herkes gitti. Kedi yine sıkılmaya başladı. Bazen gezsin diye çatıya salardım. Eve hiç dönmezdi ben çatıya çıkar alırdım. Yenileri gibi değildi elde tutmama kızmazdı. Diğerleri gibiydi kanepemi cırmalardı, banyo giderinden su içmeyi çok severdi, haraketli şeylere bayılırdı ve aklıma gelmeyenler. En sonunda mustafanın camından karşı çatıya atladı. Tek sevdiği güvercinler. İçgüdüydü bu sanırım. Ama diğer kedi geldi ona bir pati attı. Bir alt kata düştü. Sonra bir daha gelmedi. 2 kere gördüm benden kaçtı. Onu almaya gitmiştim ama benden kaçtı. O yalnızdı , özgürdü, güvercinleri sevmişti.

Çok dramatik oldu. Ailem kedinin kaçtığını öğrendi. Sarı kedinin dışında bir de yosun adında kaplumbağamız vardı. Onu da biliyorlardı. Bir gün dedeme gittim. Dedem sarı kediye bebe o derdi kedi hoplayıp zıpladıkça.

Kedinin kaçışı hakkında dedikleri.
-Mışık kaçmış (tatarca kedi).
-Evet kaçtı dede.
-Ama tosbağa duruyordur , o nasıl kaçsın , kaçamazki.

Tam olarak mışık dedi mi bilemiyorum , belki de uydurdum.

30.5.09

Yeşil Dalga Trafik Kontrol Sisteminin Veri Tabanında Saklanması ve Hesaplanması

Yeşil dalga sistemi:

- trafiğin daha hızlı akması
- yakıt tasarrufu
- çevre temizliği

ana nedenleri ile uygulanır. Bir anayoldaki araçların belirli olan yeşil dalga hızı ile ilerlemeleri halinde ilk ışık haricinde kırmızı ışığa yakalanmazlar. Böylece yukarı da bahsettiğimiz amaçları sağlamış oluruz.

Ben proje arkadaşlarım (Gamze Çukurluöz ,Metin Memişoğlu , Alperen Demirel) yeşil dalga sistemininin herhangi bir yolda uygulanabilmesi için bir veritabanı ve arayüz programı tasarladık.

Veritabanımızda şehir , cadde , yol ,kavşak ve ışık tabloları bulunmaktadır. Tüm bu tabloları c# da hazırladığımız arayüz programımızla stored procedureler yardımı ile alıp saklarken , aynı şekilde hesap için kullabilmek için verebiliyoruz. Veritabanımızda ayrıca trigger ve constraint örnekleri bulunmaktadır.

Kavşakların koordinatlarını google earthden derece şeklinde alarak kaydettik. İki kavşak arası mesafeyi hesaplarken ise özel bir fonksiyon kullandık. Kod aşağıdaki gibidir.

public static class GeoDistance{

public static double Calculate(double startLat, double startLong, double endLat, double endLong)
{
return 6371.0 * Math.Acos(
Math.Sin(DegreeToRadian(startLat)) *
Math.Sin(DegreeToRadian(endLat)) +
Math.Cos(DegreeToRadian(startLat)) *
Math.Cos(DegreeToRadian(endLat)) *
Math.Cos(DegreeToRadian(endLong - startLong))
);
}
private static double DegreeToRadian(double degreeValue)
{
return (degreeValue * Math.PI / 180.0);
}

private static double RadianToDegree(double radianValue)
{
return (radianValue / Math.PI * 180.0);
}

Bu method kilometre dönürmektedir. 4 tane parametre almaktadır. Bunlar iki noktanın enlem ve boylamlarının google earthden aldığımız derece değeridir.

Yeşil dalga problenin asıl çözümü yeşil ışıkların referans noktasına göre (ilk ışığa) yeşil yanmaya başlama sürelerini hesaplamaktır. Bu ise başlangıç sıfır alındıktan sonra aradaki mesafenin hıza bölünmesi ile hesaplanır.

Örneğin ilk ışık ile ikinci ışık arasındaki mesafe 400 metre olsun. Yeşil dalga hızımız 60 km/saat olsun.

60 km/saat=16,667 m/sn

O halde aracımız 400 metreyi 24 saniye almaktadır (Kalkış süresi ihmal edilmektedir).
İlk ışığımız referans olduğu yani sıfırdan başladığını kabul ettiğimize göre ikinci ışığımızın 24 saniye sonra yeşil yanmaya başlaması gerekmektedir.

Özet olarak programımız kullanıcıdan aldığı verileri gerçeklemektedir. Programımızda aynı zamanda simülasyon kısmında ise hesabımızın doğruluğunu görebilmekteyiz.

Biz eskişehirdeki 2 caddenin yeşil dalga sürelerini 60 km hıza göre hesapladık.

Proje raporları ve kodları en yakın zamanda eklenecektir.

29.5.09

Thread Programlama

Bu makale de sizlere öncelikle basit olarak threadin ne olduğundan bahsedeceğim. Daha sonra C# ve C de iki örnekle nasıl kullanıldığını anlatacağım.
Processler işlemcinin yapılacak işlere aksaklık olmadan belirli zaman aralıklarında hizmet vermesidir. Bu sayede kullanıcıya hem görüntü verilmesi hem de birçok programı aynı anda kullanması imkânı sunulmuş olur. Threadleri ise process içinde bu şekilde değerlendirebiliriz. Bir process içinde farklı işlerin bölünerek yapılmasını sağlar. Hizmet zaman aralığı çok az olursa her thread ya da process arası değişimleri yaparken çok fazla zaman kaybetmiş oluruz. Eğer bu zaman aralığı çok uzun olursa da kullanıcı etkileşimi aksamış olur. Kullanıcı programdan beklediği yanıtı daha geç alır.
Basit olarak thread ve processler birbiri arasında değişim yaparken program işleme de kaldıkları yerleri korurlar ve sıra tekrar kendilerine geldiklerinde bulundukları yerlerden işlerini sürdürürler. Processler arası değişimler gerçekleşirken eğer birden fazla process aynı hafıza alanından veriler kullanıyorsa bu belirli sorunlar yaratabilmektedir fakat ben onlardan bu makalede bahsetmeyeceğim.
Öncelikle thread kullanımının öneminden biraz bahsettikten sonra ilk programa geçmek istiyorum. Threadler bizim normalde tek işlem olarak yapmaya çalıştığımızda verimli sonuçlar alamadığımız durumlarda bize yardımcı olurlar. Örneğin ciddi bir hesaplama yaparken kullanıcıya bunun ilerleyişini göstermek istediğimizde progress bar kullanmak istiyorsak bunu thread kullanmadan yapamayız. Eğer yaparsak progress barımız hesaplama işlemi bittikten sonra çalışmaya başlayacaktır.
İlk programımızda c# da basit olarak thread yaratma ve çağırmaya örnek olacak bir kod göstermek istiyorum. Bu kod aynı zamanda threadin işleyişi için iyi bir örnek olacaktır.
İlk olarak System.Threading kütüphanesini projemize ekliyoruz. Daha sonra global olarak thread ve başlangıç değerini tanımlıyoruz.
ThreadStart thread_baslama;
Thread thread;

Bu kodumuzda c# ın timerı ile thread arasındaki işleyiş farkını göreceğiz. Normal olarak c# daki timer nesnesi interval adında bir değere sahiptir. Bu değer kaç milisaniyede kendini tekrar edeceğini belirler. Dinamik ve global olarak bir timer yaratıyoruz ve bir yerde durması için bir değişken tanımlıyoruz.

System.Windows.Forms.Timer ilerle = new System.Windows.Forms.Timer();

int timersayisi = 0;


Form yüklendiğinde 3 ayrı butonu dinamik olarak yaratıyoruz. Burada dinamik olarak bir nesneyi nasıl yaratacağmızı da görmüş olduk. Bunlardan birisi sadece threadle birlikte ilerleyecek, bir diğeri timer ile ilerleyecek. Son olan ise bunların ilerlemesini başlatacak.



private void Form1_Load(object sender, EventArgs e)
{
this.Text = "thread_karsılastırma";
this.Size = new Size(750, 400);

Button thread_butonu = new Button();
thread_butonu.Text = "Thread";
thread_butonu.Location = new Point(10, 75);
thread_butonu.Name="thread_nesnesi";
this.Controls.Add(thread_butonu);

Button timer_butonu = new Button();
timer_butonu.Text = "Timer";
timer_butonu.Location = new Point(10, 150);
timer_butonu.Name = "timer_nesnesi";
this.Controls.Add(timer_butonu);

Button oynat_butonu = new Button();
oynat_butonu.Text = "Oynat";
oynat_butonu.Location = new Point(10, 225);
oynat_butonu.Click += new EventHandler(oynat);
oynat_butonu.Name = "oynat";
this.Controls.Add(oynat_butonu);

}


Threadimizi çalıştırmak için içine bir fonksiyon yazmamız gerekmektedir. Bu fonksiyonda threade ait olan butonu ilerleteceğiz. Her ilerleyişinde uyku komutu ile 1 milisaniye bekletiyoruz. Mantıksal olarak baktığımızda timer ile aynı işi yapmaktadır. Ayrıca burada dinamik olarak yarattığımız bir nesneye nasıl erişeceğimizi gördük.


private void thread_baslat()
{
for (int i=0;i<500 ;i++ ) { this.Controls["thread_nesnesi"].Location = new Point(this.Controls["thread_nesnesi"].Location.X + 1, this.Controls["thread_nesnesi"].Location.Y); Thread.Sleep(1); } } private void timer_tick(object sender, EventArgs e) { if (timersayisi == 500) ilerle.Stop(); else this.Controls["timer_nesnesi"].Location = new Point(this.Controls["timer_nesnesi"].Location.X + 1, this.Controls["timer_nesnesi"].Location.Y); timersayisi++; } Timerın her ilerleyişinde aynı işi timer butonu için yapıyoruz. Her ikisini de 500 piksel kadar ilerlemesine izin veriyoruz. Oynat butonunda ise thread başlama değerine thread butonumuzu ilerleten fonksiyonu atıyoruz ve onu çalıştırıyoruz aynı zamanda da timerımızı çalıştırıyoruz. private void oynat(object sender, EventArgs e) { System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; thread_baslama = new ThreadStart(thread_baslat); thread = new Thread(thread_baslama); thread.Start(); ilerle.Interval = 1; ilerle.Tick += new EventHandler(timer_tick); ilerle.Start(); } Normalde thread kullanmak yerine oynat butonumuza tıkladığımızda thread _baslat fonksiyonu çalıştırmayı denersek ilk önce thread butonun 500 piksel ilerlediğini daha sonra timer butonun ilerlemeye başladığını görebilirsiniz. Ama bizim kodumuzu çalıştırdığınızda 2si de aynı anda ilerlemeye başlayacaktır ve thread butonun timer butonuna göre ne kadar hızlı gittiğini göreceksiniz. Bu Thread.Sleep komutunun timerin kendi nesnesin gereğinden çok daha sade olarak çalışıtığının bir kanıtıdır. İkinci örneğimizi linux tabanlı bir işletim sistemi olan Parduste yazdım. Bu örnekte ise C de thread nasıl yaratılır , nasıl kullanılır bunu göreceğiz. Bu örneğimiz ilkinden daha işlevsel çünkü klasik gameboy oyununa benzer bir şey olacak. Bu programda ayrıca ekran temizleme , rastgele sayı üretme , linux de entera basmadan karakter alma ve kuyruk (queue) gibi ek kodları da göreceğiz. Karşıdan max 9 araba gelmektedir ve onlar X şeklindedir. Bizim yönettiğimiz araba ise A şeklindedir. Yol üç şeritledir. Arabamızı sağa sola ilerletmek için a ve d tuşlarını kullanıyoruz. Kullanıcının hangi tuşlara bastığını bir threadle alıyoruz. Şimdi bu threadin kısa koduna bakalım. void *kontrol_tus(void *parameter){ double *p = (double *)parameter; // bu programda kullanmasak da parametreyi bu //şekilde ana programdan alabiliriz. char nereye; while(hak) //hak kullanıcın kaç hakkı kaldığını tutuyor { nereye = mygetch(); if(nereye==97 && bzm_araba>1) //a tuşunun asciisi 97 ve d tuşunun 100
bzm_araba-=1; //bzm_araba bizim arabamızın hangi kulvarda
//olduğunu tutuyor 1,2 ve 3 dışına çıkamaz
if(nereye==100 && bzm_araba<3) bzm_araba+=1; } return 0; } Ana programda threadleri nasıl yaratıp çağırdığımıza bakalım. int main(int argc, char* argv[]){ arabatemizle(); // karşıdan gelen arabaları tuttuğumuz dizinin elemanlarını sıfırlıyor pthread_t araba, kontrol; // threadlerimiz isimleri int arguman1 = 0; //kullanmasak da argümanları pas edebiliyoruz double arguman2 = 1.1; printf("Oyunda Arabalardan Çarpmadan İlerleyeceksiniz, a Tuşu Sola , d Tuşu Sağa Gider 5 Hakkınız Vardır , Oyun Başlıyor"); printf("\n"); sleep(2); //program 2 saniye bekliyor pthread_create(&araba, NULL, arabalar, (void *)&arguman1); pthread_create(&kontrol, NULL, kontrol_tus, (void *)&arguman2); //threadleri yukarda yaratıyoruz. Arabalar ve kontrol_tus thread fonksiyonlarımız. pthread_join(araba, NULL); //burada threadlerimiz son buluyor. Oyunda burada bittiği için printf("Tebrikler %d puanla oyunu bitirdiniz.\n",puan); //puanı burada yazdırıyoruz. pthread_join(kontrol, NULL); return 0; } Asıl kontrolleri (çarpıp çarpmadığımız ve hakkımızın bitip bitmediği ) yaptığımız ve rastgele olarak karşıdan gelen arabaları belirlediğimiz threadimiz ise aşağıdaki gibidir. void *arabalar(void *parameter){ int *p = (int *)parameter; int i; srand(time(NULL)); //rastegele sayıyı zamana göre üretmek için gerekli olan tanımlama yukari: while(hak) { if(sayac==0) { gelen_arabalar[0]=(rand()%3)+1; //arabayı rastgele olarak 1,2 veya 3.yola koyuyoruz } //her zaman 0. indexli elemana atıyoruz çünkü else //queue yapısı olarak ilk giren ilk çıkar { gelen_arabalar[0]=0; //gelen arabaları birer boşluk koyarak belirliyoruz ki } //bizim arabamız gerektiğinde aralardan kaçabilsin for(i=18;i>-1;i--)
{gelen_arabalar[i]=gelen_arabalar[i-1];} //kuyruk sırasını birer ilerletiyoruz


for(i=0;i<19;i++) { switch(gelen_arabalar[i]) //arabaları bulundukları kulvara {case 3:printf(" "); // yerleştiriyoruz case 2:printf(" "); case 1:printf(" X "); case 0: break;} printf("\n"); } switch(bzm_araba) //bizim arabamızı kulvara yerleştiriyoruz {case 3:printf(" "); case 2:printf(" "); case 1:printf(" A "); break;} if(bzm_araba==gelen_arabalar[18]) //eğer son araba ile bizimkinin kulvarı {hak--;goto asagi;} // aynı ise çarptık demektir. asagi gidiyoruz. printf("\n"); if(gelen_arabalar[18]!=0) {puan+=10;} //her araba geçtiğimizde 10 puan alıyoruz sleep(1); // arabalar 1 er saniye bekleyerek ilerliyor system("clear"); //ekranı her seferinde temizliyoruz sayac=(sayac+1)%2; } asagi: if(hak>0)
{printf("%d Hakkiniz Kaldi, Oyun devam ediyor",hak);
arabatemizle();
printf("\n");
sleep(2);
goto yukari;
}
return 0;
}

Linux de kodu çalıştırmak için aşağıdaki resme bakabilrisiniz.




Basit de olsa 2 kodda threadlerin nasıl uygulanacağını görmüş olduk. Kodları aşağıdaki linklerden indirebilirsiniz.

c# kodu

c kodu

readmee yazı

readmee 3. sayı


Uğur Atmaca



Linux getch fonksiyonu referans: http://www.daniweb.com/forums/thread148447.html

24.5.09

Macera Dolu Piknik




Önceden planlandığı gibi tam takım (bilişim günleri ekibi (hemen hemen :) )) sakaryabaşına yola çıktık (metal catal unuttuk). Hemen önde oturanlara okuduğum liseden bahsedip yanından geçerken gösterdim (y.a.ö.l).
Biraz erken gittiğimizi düşünmüş olsam da sonradan gelen bir kaç grubu gördükten sonra iyi bir karar verdiğimizi düşündüm. Bir güzel pohaçalarımı yedikten sonra komik , çok komik , neşeli aylık oyunumuzu oynadık. Daha neler uzun eşşek , yakan top oynayanlar , çift kale maç , voleybol , mangal gibi keyifli aktiviteler. Sakaryabaşı ufaktan beri gittiğim bir yer. Piknik alanı olarak çok güzel bir yer. Yalnız temizlik konusunda biraz sıkıntı farkettim. Bizler gittiğimiz yeri bulduğumuz gibi bırakmadığımız için çok fazla çöp vardı. Biz elimizden geldiğince önce kendimizin olduğu yerdeki çöpleri topladık ve tabiki giderken kendi çöplerimizi. Onun dışında ben , Gamze ,metin , Nilüfer salıncağa bindik (yaprak yakaladık). Sonra aynı grup ayaklarımızı su yılanı bulanan suya soktuk . Artı olarak bu grup ve Alperenle de gölette önce yunus sonra da kayığa bindik.
Beni çok seven sivrisineklerden yakındım. Bunların yerine arı soksa daha iyi olur dedim. Hiç ortalıkta arı yokken (o kadar ete rağmen) geldi benim kolumu birisi soktu. Pek de büyük konusmamak gerek. Bayağı yorulduk. Ama çok zevkli bir piknik oldu. Ben çok mutlu ayrıldım. Nicelerinde görüşmek üzere.

notlar:
ilk vuruşumda top gölete düştü
c# baslangıc dersleri yazacagım blogumda dedim
ufak yengeç gördük
sun tshirtleri giydik (selim,alperen,metin,ben,serap (saydım hepsini))
kavak polenleri çok kaşındırıyor.

13.5.09

Beğendiğim , Söylemeden edemediğim


1.Abdüsselam

Bir numara lezzet. O nasıl sostur ya yemeyenler hayatlarındaki eksikliğin farkında değildir. Büyükşehirbelediyesi arka sokağında bir pasajda. Yukarda yeşil tabelada yazar ismi. Ben ne yazsam fayda etmez. Gidin , tadın sonra da haklısın dersiniz anlatılmaz.


2. Kurukahveci Mehmet Efendi

Pek güzeldir kahvesi. Bilişim günlerinde geldi kendi kendine bize de ne de güzel de kahve verdi pek çok içtik. Teşekkürler.

not: Ben bilgisayarda hiç de uzun da yazamıyorum da :)

10.5.09

Esogü Bilişim Günleri 2009 Sonu



Yorgunluğu tam üzerimden atmadan kısa bir değerlendirme yazayım istedim. Onun dışında özel bir kaç şeyden de bahsedeceğim. Öncelikle organizasyon ekibine ve konuşmacılara çok teşekkür ediyorum. Umarım herkes için faydalı bir etkinlik oldu.
Çok daha faydalı olacağını düşündüğüm bilgisayar mühendisliği insanlarının (öğrencilerinin ve öğretim görevlilerinin) parmakla sayılacak kadar az olması herkesin kafasında soru işareti bıraktı. Organizasyon ayağına kadar gelirken insanların bizim sınıftan sadece 1 kişi gelmişti. Buna gerçekten aklım ermedi.
Paralel programlama sunumu için Tayfun Akçay' a ayrı bir teşekkürü borç bilirim. Benim için en faydalı oturumdu 3 gün içinde gerçekleşen.
Dağınık yazıyorum ama Esogü Kongre Merkezinin güzelliğinden bahsetmeden edemeyeceğim. Gerçekten üst standart bir yer olmuş, eminim içeri bir kafasını sokan herkes bunu fark etmiştir. Bizim tüm oturumlarımız 700 kişilik salondaydı ve son oturumda bile salon hemen hemen doluydu. Bu yüzden dinleyiciler ayrıca bir alkışı hakettiler.
Ücretsiz kurs çekilişlerinden bizlerden kimseye bir şey çıkmadı (organizasyon ekibinden) :). 

Seneye görüşmek üzere...

29.4.09

Ya Tutarsa

Sömesterda Eskişehirde bizim evde...
Büyük aile toplandık.
Kardeşim bilmem kaç kupona gazeteden alınmış yüz temel eserden hiç de beğenmediğim (gerçeklerinden farklı) Nasrettin Hoca fıkraları okumakta.
Bir de araya dedem anlattı.

"Hoca göle maya salmış. Hiç tutar mı? Tutmaz tabi."

12.4.09

Bir işlem (kör arama ile)

Projenin Adı: Bir İşlem Sorusunu Çözen Program

Projenin Tanımı:
Televizyon kanalı TRT’ de yayınlanan “Bir Kelime Bir İşlem” adlı yarışmadan esinlenerek yapılan bir projedir. Amaç bu yarışmadaki bir işlem bölümünü çözen programın yazılmasıdır. Bir işlem bölümü rastgele verilen 5 rakam ve en yüksek 100 olmak üzere 10 ya da 25 in katı olan bir sayı ile 100 ile 1000 arasındaki bir hedef sayıdan oluşmaktadır. Amaç verilen 6 sayıyı en fazla bir kez kullanarak 4 işlem yardımı ile hedef sayıya ulaşmaktır. Benim programım bunu yapacağı gibi aynı zamanda sayıların 10 un katı olması gibi kurallar dışında da sonuca ulaşmaktadır. Program yarışmadaki gibi rastgele sayılar belirleyeceği gibi aynı zamanda kullanıcının girdiği sayılarla da çalışmaktadır. Aynı zamanda eğer sonuç varsa çözülürken yapılabilen en az işlem sayısını kullanır.

Çözüm Algoritması: Bu problemi çözmemiz için kör arama kullanarak tüm ihtimalleri denedim. Kör aramayı yaparken derinlik öncelikli arama (Depth-First Search) algoritmasını kullandım. Kodlarımı yazmak için C# programlama dilini kullandım. Kodları yazmadan önce taslak olarak durumları tanımladım. Her durum hangi 2 sayının hangi işleme tabi tutulacağını ve kullanılabilir kaç sayı olduğundan oluşmaktadır.

Programın Yapısı: Programı yazarken kullandığım metotlardan bahsetmem gerekirse; programın ana kısmı, hesapla bölümü, rastgele sayı üretici ve bazı kontroller bulunmaktadır.
Ana bölümde kullanıcıdan alınan ya da rastgele olarak üretilmiş sayılar alınarak DFS algoritmasına göre ve de programda kullanılan sayı âdetine göre hesapla fonksiyonu sürekli olarak tüm ihtimaller bitene kadar çağırılır. Bunu sağlamak için sayı adetine göre 15, 12 yada 9 for döngüsü kullandım.
Hesapla bölümünde ana bölümden alınan durumları yani alınan 2 sayıyı işlemi uygun olarak yapıp hedef sayıya ulaşıp ulaşmadığımızı kontrol ettim. Hedefe ulaşan çözümü daha önce hedefe ulaşmış olan en kısa çözümle karşılaştırdım. Eğer son yaptığım en kısadan daha kısa ise yeni en kısa olan çözümü diğerinin üzerine kaydettim. Tüm arama bittiğinde en kısa sonucu ekrana yazdırdım.
Eğer kullanıcı 6 sayılı bölümü seçti ise tüm ihtimalleri denemek 4-5 saniye sürdüğünden ekrana görsellik olarak progress bar ekledim.(Şekil-1)
Yine şekilde görüldüğü gibi kullanıcı hedef sayıya ulaşmak için 4, 5 ya da 6 sayı seçebilmektedir.



Programın kodunu adresten indirebilirsin. Kod