23 Haziran 2009 Salı

Bir Yaklaşım Sıkıntısı


Ekşi Sözlük'te "Embedded System" başlığı altında 14 sıra no'lu yorumu yazan arkadaş bakın neler diyor:

optimizasyonu, hedeflenen kaynak ne olursa olsun en yüksek seviyede tutmayı düstur edinmiş ve yine akademik ortamda bunun matematiksel ve pratik olarak nasıl uygulanacağını pekiştirmiş ortalama bir programcı kolayca adapte olabilir. zaten dünyanın tamamında şirketler ezici oranla embedded ve vlsi türü low-level tasarım, mimari, vs. işleri için mühendis istihdam ederler.

gel gör ki .net gibi saçmalıklara gücü yeten kaymak peşinde koşan programcıların uzak durması gereken bir pratiktir bu.


Bu yazara göre "ortalama bir programcı"nın, optimizasyonun matematiksel ve pratik olarak nasıl uygulanacağını akademik bir ortamda pekiştirmiş olması mümkünmüş. Güzide akademik ortamlar... Optimizasyonu matematiksel ve pratik olarak uygulamak... ".NET gibi saçmalıklar" da (korkarım Java da nasibini alıyor) sadece "alt seviye programcı"ların uğraştığı bir oyuncak oluyor bu durumda.

Bu acaib kafaya göre, örneğin, karmaşık bir web uygulamasını assembly'de yazmak bir kahramanlık destanı olabilirdi.

Yine de, derinliklerden bihaber yaşayan yazılımcıya nispeten bu terli arkadaşa kendimi daha yakın hissediyorum.

22 Haziran 2009 Pazartesi

Java Interface ile Taklalar

Bir interface'in içinde başka bir interface, hatta public class tanımlamak mümkün imiş. İlk dosyamız OuterInterface.java:

public interface OuterInterface {

public abstract void doOuterInterfaceThing();

public interface InnerInterface{
public abstract void doInnerInterfaceThing();
}

public class ClassInTheInterface{
private static String slogan;
ClassInTheInterface(){
slogan = "Worst decision is better than no decision.";
}
public void speakOut(){
System.out.println(slogan);
}
}
}

Şimdi de hem dıştaki, hem de içteki interface'leri implement eden bir class yazalım. Bu class, haliyle her iki interface'in abstract method'larını implement edecek. Ek olarak da OuterInterface'in içinde tanımlanan public class'ı kullansın. İkinci dosya TestClass.java:

public class TestClass implements OuterInterface, OuterInterface.InnerInterface{

public void doInnerInterfaceThing() {
System.out.println("I am doing the inner interface thing.");
}

public void doOuterInterfaceThing() {
System.out.println("I am doing the outer interface thing.");
}

public static void main(String[] args){
TestClass obj1 = new TestClass();
obj1.doInnerInterfaceThing();
obj1.doOuterInterfaceThing();

OuterInterface.ClassInTheInterface obj2 = new OuterInterface.ClassInTheInterface();
obj2.speakOut();
}
}

Output:
I am doing the inner interface thing.
I am doing the outer interface thing.
Worst decision is better than no decision.

Böylece başımız göğe ermiş bulunuyor. Hayırlı uğurlu olsun.

21 Haziran 2009 Pazar

JMF - Capture Device List

Dün yolladığım kod örneğinde resmin yakalanacağı cihazı seçen bir satır var:


CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");


Burada görülen vfw:Microsoft WDM Image Capture (Win32):0 isimli cihaz, benim dizüstü bilgisayarımda A4 Tech Webcam'e işaret ediyor. Peki tüm cihazların listesini nasıl alıyoruz? CaptureDeviceManager adlı class'ın aşağıda görülen, getDeviceList static method'unu çağırarak bu listeyi alabiliriz, bu method'un döndüğü Vector parameterized olmadığı için, casting sebebiyle kısmen ilkel bir görünüm teşkil ediyor:


Vector captureDeviceVector = CaptureDeviceManager.getDeviceList(null);
for (int i = 0; i < captureDeviceVector.size(); i++) {
System.out.println(((CaptureDeviceInfo) captureDeviceVector.get(i)).getName());
}


Sonuç:
DirectSoundCapture
JavaSound audio capture
vfw:Microsoft WDM Image Capture (Win32):0

20 Haziran 2009 Cumartesi

Java Media Framework (JMF) 'te USB Webcam'den JPEG Yakalamak

Bu yazının başlığında yaşadığım dil sıkıntısını bu blog'da sürekli yaşayacağım. Anlaşıldı. Tamam. TUBİTAK tarzı kelime uydurmalara, soğuk teknik bir dil kullanmaya mecbur olacağım zamanlar olacaktır. İşte o ahval ve şeraitte dahi...

Java ile bilgisayarınıza USB portundan bağlı bir kameradan resim almak istiyorsanız, işte size kullanabileceğiniz bir örnek. JMF, Java Image I/O ve Java Advanced Imaging (JAI) ile ilgili daha sonra daha detaylı yazacağım.



import java.io.*;

import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;

import javax.imageio.ImageIO;

public class TestQuickCamPro
{
public static void main(String[] args) throws Exception{
// Webcam hangi isimle kayıtlıysa o isimle buluyoruz
CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
Player player = Manager.createRealizedPlayer(deviceInfo.getLocator());
player.start();
// Kameranın başlaması için 2.5 saniye bekle (yoksa img==null oluyor)

Thread.sleep(2500);
System.out.println("Resim yakalanıyor.");
FrameGrabbingControl frameGrabber = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");

// Bir kare yakala
Buffer buf = frameGrabber.grabFrame();
Image img = (new BufferToImage((VideoFormat)buf.getFormat()).createImage(buf));
BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.drawImage(img, null, null);
// Diske JPG olarak kaydet
ImageIO.write(buffImg, "jpg", new File("C:\\webcam.jpg"));

player.close();
player.deallocate();

System.out.println("Bitti.");
}

}

"Bildiğimiz bir dilde, seslerin donukluğunun yerini, fikirlerin şeffaflığı almıştır."

Yazılımla ilgili araştırıp bulduklarımı, alıp kopyaladıklarımı, kendi geliştirdiklerimi, kafama takılanları, başıma gelenleri, heyecanımı ve can sıkıntımı 20 Haziran itibariyle burada paylaşıyor olacağım.

Oldum.

İlk yazı Java Media Framework ile ilgili olmalı.