Java slaytları
C/C++ Programcıları için Java’ya Giriş
Geçen çarşamba günü üniversitede ilk dersimi verdim. Data Structures and Algorithms dersini verecek olan Cesim hocam ilk 2 hafta öğrencilere Java anlatmam için rica etti ve ben de memnuniyetle kabul ettim. Seminer vermeyeli uzun zaman olmuştu zaten
Olley sonunda bir şeyler öğretebileceğim diye içten içe sevindim, her ne kadar Java’yı anlatmak zor olsa da.
Ders vakti geldiğinde önce öğrencilere Netbeans kurdurmaya çalıştım. Çoğu kişi internetten indirmekte sorun yaşadı. Ya bağlantı problemi ya da BİM engellemesi sebebiyle. Biz de USB Flash disk ile dağıttık. Millet kurmaya çalışırken baktım ki çok zaman geçiyor, hazırladığım sunum ile başladım anlatmaya. System.out.println’da sorun çıkmadı ancak Scanner sınıfını anlatmaya kalkınca Object Oriented’ın korkunçluğuyla yüzleştiler. Birkaç örnek yaptıysam da kendilerine çok yabancı gelen bu kavram kafalarını karıştırdı. Öyle olunca ben de madem öyle deyip doğrudan Object Oriented mantığını anlatmaya çalıştım. Class yapısını gösterdim, Python’da yaptığım gibi Insan sınıfı tanımladım ve bu sebeple o kısmı her zamanki gibi baya eğlenceli geçti diyebilirim
Ders böylelikle bitti. Dersin sonuna doğru öğrencilerin geçen sene gördükleri C++’ı unuttuklarını fark etmem sebebiyle (Işık’ta 2. 3. ve 4. dönem üst üste programlama dersi olduğu için böyle olmuyordu sanki) çok da verimli olmadı gibi. Artık takviye birkaç belge hazırlayıp çalışmalarını bekleyeceğim, tabii bir de gelecek haftaki dersler var. Sanırım statik metodlar kullanarak nesne oluşturmadan gitmeyi deneyeceğim bu sefer. Bir öğrenciden de çok güzel bir geribildirim aldım, moral oldu
(P.S.: Download links are provided at the bottom)
Bugünlerde kabul edilen makalemiz için yazdığımız yazılımın arayüzünü yeni baştan yazmakla uğraşıyorum. Önceki arayüz LEDA kütüphanesinin eski görünümlü bir penceresi yerine PyQt4 ile geniş, birçok aracı bulunan bir arayüz yapmak amacım. Şu anda birçok özelliği çalışıyor. Sırada arayüz ile arkaplanda çalışan programın parametrelerini verebilmekte.
Getirmeyi planladığımız yeni bir araç ise Heatmap (ısı haritası). Baktım ki bunu değil PyQt4, Qt4 ile bile yapan yok, oturdum yazdım. Kendi yazdığım ilk QWidget oldu ve oldukça hoşuma gitti bu görselleştirme işleri. Örnek bir ekran görüntüsü (programda sağ tıklayıp resim olarak kaydet de diyebiliyorsunuz):
Normalde çok daha uzun ancak bu görüntü sadece bir kesit. Veriler bir Microarray bicluster’ından. Satırlar gen isimlerini, sütunlar ise koşulları gösteriyor. Böylelikle hangi koşulda hangi gen nasıl tepki vermiş onu görebiliyorsunuz. Burada açık yeşiller en küçük değerleri, açık kırmızılar en büyük değerleri, siyah renk tam ortayı (median), koyu renkler de ortaya yakın olanları temsil ediyor. Yaptığım şey tüm değerleri sıralı bir küme haline getirip ortadakine siyah renk, küçüklere yeşilin [255, 1] aralığında tonlarını, büyüklere de kırmızının [1,255] arasında tonlarını verdim. Bu tamamen kafamdan uydurduğum bir algoritma / yöntem. Başka renk ve algoritmalar da var ancak açık olarak belirtildiği yerleri bulamadım henüz.
Bu görüntüyü oluşturan girdi ise şöyle:
satır sayısı kolon sayısı
heatmap kolon 1 kolon 2 kolon 3 kolon 4
satır 1 değer 1 değer 2 değer 3 değer 4
satır 2 değer 1 değer 2 değer 3 değer 4
…
rowNum colNum
heatmap column1 column2 column3 column4 …
row1 value1 value2 value3 value4 …
row2 value1 value2 value3 value4 …
Henüz kod tamamlanmadı ancak şimdilik ulaşmak isteyen olursa diye kodu ve örnek bir girdiyi siteme koyuyorum: Heatmap Source File and Input.
Tamamlanınca da GPL lisansıyla bir proje sayfasında yayınlayacağım.
Beyin fırtınası yapmayı severim. Çoğu zaman güzel bir fikir bulup bunu zaten yapan başka birisinin olduğunu görsem de yılmadan mantıklı-mantıksız, komik-ciddi, yapılabilir-zorluklarla dolu çeşitli fikirler üretirim. Ancak hayat koşuşturmacası sebebiyle sadece az bir kısmını gerçekleştirme fırsatı bulabiliyorum. Bu fikirlerin hepsini gerçekleştiremeyeceğim için belki bir yapan çıkar da insanlığa faydası olur ümidiyle paylaşım yoluna gitmek istedim. Bazıları saçma, yapılamayacak kadar zor, yapılmış, vs. olabilir. Ancak buradan esinlenerek başka fikirlerin de doğabileceğini düşünüyorum. Görüşlerinizi beklerim.
Özgür Yazılım
- Site ve hesaba özel parola üreteci. Yapacağı şey sitenin URL’ini ve kullanıcı adınızı alıp seçeceğiniz bir algoritmayla şifrelemesi ve bunu parola olarak size sunması. Böylelikle her siteye özel parolanız olacak.
- Yakuake’de çalışan/biten bir işlemi haber veren bir KDE4 plazmoid.
- Linux için PPPoE /ADSL bağlantı kurulum arayüzü – Pardus için NetLink modülü. Işık Üniversitesi yurtlarında kalan insanlar artık kolaylıkla internete girebilmeli.
- Python docstring parametrelerine (return vs) bakarak akıllı kod tamamlama yapılabilir.
Verimlilik – Sosyal Sorumluluk
- Okullarda yıl başında kitap takas / 2. el satış / bağış fuarı yapılabilir. Çoğumuz okul kitaplarımızın yüzüne bir daha bakmıyoruz. En azından kitaplar bu şekilde değerlendirilmiş olur, döviz çıkışı engellenir.
- Otistik insanların oldukça zeki oldukları söyleniyor. Günümüz yapay zeka / makine öğrenmesi çalışmalarında bu insanlar öğretmen (trainer) olarak hayata kazandırılabilir. Onların kullanabileceği tarzda görsel bir arayüz ile bir veritabanı oluşturulabilir. Bakınız: Open Mind Common Sense
- Organik çöplerden enerji elde edilebiliyor. Bunun yanında plastik çöpler ise geridönüşümle yeniden kullanılabiliyor. Akşamları atılan çöplerden pet şişeleri toplayan çok sayıda insan var. Eğer bu atıklar bir şekilde ayrılabilseydi ikisi de zararsız bir şekilde değerlendirilebilirdi.
- Ocakta pişen yemek/kaynayan su sıcak buhar üretir. Bu da aspiratör vasıtasıyla bir boruyla evin dışına atılır. Buradaki ısı enerjisi bir şekilde tekrar değerlendirilmeli, boşa gitmemeli. Uçuk bir fikir: çift katlı ocak. Alttaki ocağın ısısından üstteki, üsttekinin ısısından alttaki faydalanır.
Teknoloji
- TV’de reklamların girdiğini tespit edip reklam süresince başka bir kanalın / kaydın izlenmesini, asıl kanalda reklam biterken ise bunu tespit edip o kanala dönüşünü sağlayan bir yazılım. (Kanallar boşuna kızmasın, yapılması çok zor bir proje
) - Anadolu’da anız yakımları yasaklanmasına rağmen devam ediyor ve büyük tehlikeler arz ediyor. Yanan tarlalar ve hatta ormanlar uydudan tespit edilebilir (Orman yangını tespiti için böyle bir projeye başlanmış sanırım).
- Piyasada bilinmemekle birlikte ufak panelleriyle güneşten şarj olan, ardından gece olduğunda içeriyi aydınlatan perdeler mevcut. Aydınlatıcı led yerine pervane konularak gündüz vakitlerinde içerinin serinletilmesi sağlanabilir.
- Arabaların üstü güneş panelleriyle donatılıp klimaların bu güçten faydalanması sağlanabilir. Böylelikle arabaya nüfuz eden ısı da soğurulmuş olur.
Öncelikle CD’mizi takıyoruz ve CD içeriğini Dolphin’de açarak CD’nin mount edilmesini sağlıyoruz. Sonra Matlab kurulum dizinini hazırlamaya geçiyoruz ve lisans dosyamızı bu dizine kopyalıyoruz.
xhost + sudo su cd /usr/local mkdir matlab74 cd matlab74 cp ~/Desktop/licence.dat .
Burada 74, elimdeki sürümün numarası. matlab74 yerine başka bir yere de kurulum yapabilirsiniz pekala. xhost + ise grafik arayüzün root olarak çalıştırılabilmesi için gerekli ayar. Sonraki aşamada Matlab’ın gerektirdiği libXp kütüphanesini kuruyoruz ve CD’nin içerisine girerek install programını çalıştırıyoruz.
pisi it libXp cd /media/MATHWORKS* ./install
Şu aşamada bazı eksik dosyaların olduğunu söylerse o dosyaları içeren paketleri kurmalıyız. Mesela bende yukarıda bahsettiğim libXp eksikliği çıkmıştı. Başka eksiklikler varsa onları da kurup install dosyasını tekrar çalıştırmalıyız. Bundan sonra karşımıza bir kurulum sihirbazı çıkacak. Bu sihirbazı takip ediyoruz. MATLAB root directory location kısmına yukarıda oluşturduğumuz dizini yazıyoruz:
/usr/local/matlab74
Sihirbazı takip ederek kurulumu bitiriyoruz.
Matlab’ı çalıştırmak için
cd /usr/local/matlab74/etc ./lmstart cd ../bin ./matlab
Komutlarını veriyoruz. Bu işi kolaylaştırmak için ~/.bashrc dosyasına (böyle bir dosya yoksa oluşturun) şu satırı ekleyip kısayol komut oluşturabiliriz:
alias matlabs="cd /usr/local/matlab74/etc; ./lmstart; cd ../bin; ./matlab"
Ayarları etkinleştirmek için
source ~/.bashrc
ve Matlab’ı çalıştırmak için
matlabs
komutlarını vermemiz yeterli olacaktır. Artık her oturum açışınızda bu ayarlar yüklenecektir.
Bu yazımda size bir C++ veri yapıları ve algoritma kütüphanesi olan LEDA‘nın Pardus Linux üzerinde kurulumunu anlatacağım. LEDA’nın ücretsiz sürümünü sitesinden indirebilirsiniz. Anlatımda kullanacağım kullanıcı adı “emre” yerine kendi kullanıcı adınızı yazmanız gerekmekte.
Kaynak kodları istediğimiz bir yere açıyoruz. Ben /home/emre/lib/LEDA altına açtım. Bir metin düzenleyicisi ile (nano, vim, kwrite, vs.) /home/emre/.bashrc dosyasını açıyor (yoksa oluşturuyor), içerisine şu satırları ekliyor ve dosyayı kaydediyoruz.
(Add the following lines to ~/.bashrc where “emre” is your username)
export LEDAROOT=/home/emre/lib/LEDA export PATH=$PATH:$LEDAROOT/Manual/cmd export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LEDAROOT
Bu ayarları etkin hale getirmek için şu komutu veriyoruz.
source ~/.bashrc
Ardından LEDA/incl/LEDA/system/misc.h dosyasının içinde uygun yere
#includeekliyor ve dosyayı kaydediyoruz.
(Add the preceding include line to an appropriate position in LEDA/incl/LEDA/system/misc.h)
Sisteminizde g++ ve libX11-devel paketlerinin kurulu olduğundan emin olduktan sonra
(Make sure that g++ and libX11-devel packages are installed on your system,)
Sonra demoları derlemek ve çalıştırmak için aşağıdaki komutları veriyoruz:
(Run the following:)(
cd $LEDAROOT make shared make xlman cd demo/xlman ./graphwin
LEDA’da yazdığınız bir main.cpp kodunu derlemek için konsolda main.cpp’nin olduğu dizine gelip şu komutu vermeniz yeterli:
(To compile a main.cpp you need to give the following command:)
g++ -I$LEDAROOT/incl -L$LEDAROOT main.cpp -lX11 -lm -lleda
Eski sürümlerde ise şu komutu kullanmanız gerekebilir:
(For older versions, you might try:)
g++ -I$LEDAROOT/incl -L$LEDAROOT main.cpp -lX11 -lm -lL -lG -lP -lW -lD3 -lGeoW
