Motorola 680x Emülatörü

Mikroişlemciler ve Mikroişlemciler Laboratuarı derslerini aldığım senelerde, saygıdeğer Prof. Dr. Rıfat YAZICI hocamın (kendisi uzun yıllar sonra Karadeniz Teknik Üniversitesi’nden emekli olmuştur, şu an İstanbul Ticaret Üniversitesi’nde görev almaktadır) referans aldığı mikroişlemci Motorola’nın 6802 modeliydi. Gerek Mikroişlemciler dersi olsun gerek laboratuar olsun, bu işlemciyi kullanarak yazdığımız programları test etmek pek mümkün değildi. Programları ezbere yazıyor, kağıt üzerinde adım adım işleyişi takip ediyoduk. Laboratuarda durum birazcık farklıydı, ama, nihayetinde günümüz debuggerlarında çalışabildiğimiz gibi çalışamıyorduk, hem program üzerinde hem deney seti üzerinde. İnternette bir miktar araştırdıktan sonra bu 6800 işlemcisi için bir emülatör buldum. Program konsol üzerinde çalışıyordu ve parametrik yapısı gereği kullanması biraz zordu. Kullanmalarını tavsiye ettiğim arkadaşlardan da olumlu geri dönüşler alamıyordum, çünkü emülatörün işleyişi, kullanımı pek de anlaşılır şekilde açık değildi. Ben, her iki dersi de bir takılma takılma yaşamadan geçtim fakat kafamda soru işareti oluşmasını engelleyemedim :) Arkamızdan gelecek olan her arkadaşımız bu sıkıntıları yaşayacak ve doğru düzgün kullanabileceği bir program bulamayacaktı. Ve beklenen florasan yandı: Hasan; bu emülatörü VCL ortamında sen neden yazmıyorsun?
Continue reading

String İçindeki Bir Alt String’i Kırpmak

Stackoverflow sitesinde rastladığım bir soru var. Kişi bir string verisi içindeki herhangi bir karakteri ya da alt string i nasıl kırpabileceğini sormuş. Topluluktaki bazı kişilerle ufak-tefek çatışmalar, tartışmalar olsa da istenilen işlemi genelleştirilmiş bir şekilde şu şekilde gerçekleştirebilirsiniz:
Continue reading

TThreadPool Günlükleri – Vol I : TParallelizableProperties

Son iki yazımda bahsettiğim üzere bir süredir YSA konusu üzerinde bazı çalışmalar yapıyorum. Hatta dün yayınladığım yazıda, üzerinde çalıştığım ağ ile ilgili bazı kısımların paralelleştirilebileceği hakkında birkaç kelam etmiştim. Bugün bu paralelleştirme çalışmaları üzerine mantığını oturtmaya ve işleyişini geliştirmeye yavaş yavaş başladım. İşte ilk meyveler:

Continue reading

İleri Beslemeli Yapay Sinir Ağları ve Geri Yayılım Algoritması – TNeuron , TLayer , TNeuralNetwork

Bir önceki yazıda İleri Beslemeli Yapay Sinir Ağları ve Geri Yayılım Algoritması konusundan bahsetmiştim. Şimdi ise bu sinir ağının kodlarını yayınlayalım. Elimden geldiğince açık ve anlaşılır bir şekilde kodlama yapmaya çalıştım. Gerek işleyiş, gerek isimlendirmeler olsun anlaşılmayan ya da kafanıza takılan herhangi bir soru işareti hakkında benimle rahatlıkla iletişime geçebilirsiniz…

Here we go!!

Continue reading

Google Code Jam ve ben..

1,5 ay kadar önce Google’ın düzenlediği Code Jam isimli yarışmaya kayıt yaptırmıştım. Yarışmada geçtiğimiz Cumartesi gecesi ön elemeler yapıldı. Aynı gün elektronik devreler sınavım olduğundan tüm 4 soruyu da yanıtlayacak kadar vakit bulamadım ve 4 sorunun 3üne çözüm getirerek, 45 puanla yaklaşık 10 gün sonra başlayacak olan 1. eleme turundaki etaplara katılmaya hak kazandım.

Yarışma ana sayfasına ve dolayısıyla ilgili diğer tüm detaylara http://code.google.com/codejam/ adresinden ulaşabilirsiniz.

Bu yazıda, ön eleme turunda çözmemiz istenen sorular içinde yanıtladıklarımdan ve problem çözümünde kurduğum algoritmalardan bahsedeceğim.

Her bir problemin Small-Set ve Large-Set olmak üzere 2 çeşit girdi seti vardı. Small-Set çözümleri için, çözüm gönderilmek istendediğinde 4dk lık bir zaman aralığında girdi dosyasını download etmem, programa okutmam ve çözümü yaptırmam, son olarak da çıktı dosyası ile kaynak kodumu upload etmem gerekiyordu. Small-Set çözümlerinde hatalı çözüm yapmışsam tekrar deneme şansım mevcut oluyor fakat her çözüm yapmak istediğimde, bir öncekinden farklı, yeni bir input set gönderiliyordu. Large-Set çözümlerinde ise tek bir şansım vardı. Çözüm yap dediğim anda, 8 dakikalık bir zaman çerçevesi içinde giriş dosyasını almam, çözdürmem ve sonucu geri yüklemem gerekiyordu. Eğer bu 8 dakika içinde çözüm yapamazsam o problemin Large-Set’i için 2.bir şansım olmuyordu. Problemi iyice analiz etmeden large set çözümünü yaptırmak istediğimden bir sorunun large-set çözüm hakkını kaybettim mesela. Bunun yanında çıkış dosyaları kesinlikle ve kesinlikle saf text modunda ve saf ASCII tablosu dahilinde karakterler içermek zorunda. 1. problemin çıkışını üretirken bir “NewLine”+”CarriageReturn” problemi yaşadığımdan 4 defa denemek zorunda kaldım. Continue reading

Bir TTrackBar Problemi – TMyTrackBar

Dün DelphiTürk forumlarında dolanırken üyelerden birinin bir sorusu ile karşılaştım. TTrackBar nesnesinin istenilen pozisyona konumlanması ile ilgili bir sorun hakkında yardım istiyordu. Sorun tam olarak TTrackBar nesnesinde herhangi bir noktaya tıklama yapıldığında işaretçinin o noktaya konumlanması idi.

Standart olarak TTrackBar nesnesinin tıklamaya karşı davranışı şu şekildedir: PageSize property’si ile belirlenen adım kadar ileri veya geri hareket etmek. Örnek olarak, Max değeriniz 10, PageSize değeriniz ise 3 ise, mesela Position değeri de 0 iken TTrackBar’ın ortalarında bir yere tıklama yaparsanız, her bir tıklama işleminiz için Position değeriniz 3’er artış gösterecektir. Yani tek tıklama yaptığınızı varsayarsak, işaretçinin yeni konumu 3 olacaktır. İkinci tıklamada 6 olacaktır. Üyenin problemi ise bu PageSize değerinden bağımsız olarak TTrackBar üzerinde 5 konumuna tıklamışsa işaretçinin 5 konumuna gelmesi, 2 konumuna tıklamışsa 2 konumuna gelmesi durumu… Yukarda bahsettiğim gibi TTrackBar’ın böyle bir davranışı yok…

Continue reading

Case Şart Koşulu ile String İfadeler Kullanmak

Bir değişkenin alabileceği 2 den fazla değeri kontrol etmek amacıyla bir çoğumuz C++ daki “Switch-Case” veya Delphi’deki “Case-Of” koşul kontrollerini kullanırız. Çok sayıda değeri iç içe If-then ler ile kontrol ettirmek hem okunurluğu azaltacaktır, hem kod kalabalığı yapacaktır, hem de eğer yapıyı düzgün bir şekilde kuramazsanız ve syntax a dikkat etmezseniz hata yapma olasılığınız çok yüksek olacaktır.

Temel olarak bir case-of deyimi şu şekilde kullanılır:

Continue reading