5
Mar
Yine bana gelen soruları derledim. Soruları soran arkadaşlar gizli. Cevaplarımda hatalarım olabilir, bilgisayar/linux/programlama gurularından af diliyorum :)


1- İlk olarak banka programının arayüz kısmını nasıl yaptınız? Tüm proje ne kadar zamanınızı aldı? Sanıyorum GUI için yine kodlar kullandınız ama bana genel olarak bu işin nasıl yapıldığını anlatırsanız çok sevinirim. Çok kısaca mesela, belli classlar var bunları kullanıyorsun, bazı pencere kodları var gibi bir cevap...

Cevap: Arayüz'ü Netbeans IDE ile arayüz hazırlama tool'unu kullanarak yaptık. Otomatik olarak kodlar zaten var oluyor. Sadece hangi tuşa tıklayınca ne olacak onu kendim belirliyorum. Netbeans candır, tavsiye ederim.


2- Genel anlamda C# mı yoksa Java mı daha iyi? (C# 'ı biliyor musunuz bilmiyorum ama .. Eğer bilmiyorsanız bu soruyu geçebilirsiniz.)


Cevap: Java (1995), C# ve .net(2001)e göre çok daha eskidir. Fakat Java'nın C#'dan daha zor olduğunu söylüyorlar. O yüzden şu anda yaygın olmayabilir ama gelecekte daha yaygın olacak. C# bir çok projede kullanılıyor, fakat dünya çapında yapılan araştırmalar sonucu elde edilen verilere göre Java'ya daha çok önem verildiği için biz Java kullanıyoruz ve Java tercihimdir.


3- Sitenizde Assembly olarak yazdığınız bir Binary Search vardı. Bu assembly dilin özel bir adı var mı? Çünkü eğer yanlış bilmiyorsam her işlemcinin (Intel, AMD, ..) ayrı bir assembly dili var.

Cevap: Assembly dili makine diline en yakın dildir. Programcıların bilmesi lazımgelir. Bütün işlemciler kendi compiler durumuna göre yorumlar. Her işlemcinin assembly kodları farklıdır. Biz bir işlemci modeli üzerinde kullandık bu programı. Fakat işlemcilerin mantığı sonuçta aynı. Aralarında derleme yönünden bir sürü farklı kriter var. Microişlemciler dersinde bu konular uzun uzun anlatılıyor.


4- Ben ubuntu kullanıyorum. Daha önceden Pardus kullandım. 2007de kurdum ilk defa ama sonra bilgisayarım bozuldu ve çeşitli başka sebeplerden olmadı. Bu sene Pardus 2009 çıkar çıkmaz indirdim ve kullandım.. Daha sonra Ubuntu daha iyi dediler, ve Ubuntu Pardus'a oranla biraz daha mmm şey böyle Türkleşmemiş hani alıştığımız Windows tarzı yok. Ben o alışmışlığı kaybetmek için Ubuntu yükledim. Fakat Pardus'a destek vermek istiyorum. Siz aynı anda 2 Linux tabanlı işletim sistemi yüklemişsiniz sanıyorum. Bilgisayar için bir sorun oluyor mu?


Cevap: Eskiden benim bilgisayarım tam bir külüstür olmasına rağmen içinde 3 tane işletim sistemi takır takır çalışıyordu, istersem 8 tane bile yapabilirdim. Memory'yi elle istediğim parçalara bölüp biçimlendiriyorum. NTFS biçimlendirmesini Windows için, ext3'ü de diğerleri için. Geçen yıl 10 gb Ubuntu, 30 gb Pardus 35 gb Windows idi, sorun olmuyor. Yeni bir pc aldım. Bunda durum değişti 130 GB Windows, 40 Ubuntu, 60 da Pardus. Bunları da içlerinde bölümlendiriyorsun, home için ayrı bellek yeri tutuyorum, böylece sistem çökerse dosyalarıma bişe olmuyor.
Linux'da konsol'dan yapıyorsun her şeyi. Windows'da da Regedit'i ve Bilgisayar Yönetimi'ni Çalıştır'dan "C:\WINDOWS\system32\compmgmt.msc" komutu ile açarak incele, işe yarar şeyler var.


5- Son olarak Linux işletim sistemlerini öğrenmek için neler yapmalıyım? Bu işin tabiri caizse Gurusu olmak istiyorum :)

Cevap: Linux kullanmak zor değil, abartıyorlar. Bol bol konsol kullan, ayrıca Gentoo, Archlinux dene seni geliştirir.

***
1
Eyl





MultiThread Programming (ÇokluKanal programlama) terimine kısaca bakmak gerekirse, bir programdaki akış kontrol mekanizmasıdır. Örneğin; klasik batch modunda programlardan farklı olarak kullanıcı herhangibir anda girdi girerken program arka planda başka veriler toplayabiliyor olmasıdır.

Gelelim önemine: Çok çekirdekli işlemcilerin piyasaya çıkmasıyla beraber çok kanallı programlar önem kazandı. Performansın önemli olduğu çeşitli algoritmik uygulamalar için ise vazgeçilmez bir kaynak oluyor.

Java her ne kadar platformdan bağımsız olma özelliği gösterse de bu sadece byteCode konusundadır. Java sanal makinesini sonuçta işletim sisteminde çalışır. Bu açıdan işletim sistemlerinin çoğul çekirdekli sistemlerde programları yönetme farklılıkları gösterir. Örneğin C dilinde, dil seviyesinde çok kanallı programlama desteği yoktur. Ancak işletim sistemi öncül tiplerini kullanarak bu yetiye ulaşır.

Bu zamana kadar çeşitli Linux dağıtımları, Java'nın crossPlatform olmasını da kullanarak performans karşılaştırmaları yapmışlar. Örneğin Ubuntu vs Vista. Sunuyu burdan indirebilirsiniz: "JAVA Multi-thread Programming on CMP System" .

Biz de test için bir java sınıfı oluşturduk. Programa göre 1, 3, 5, 7, 10 saniye olmak üzere 5 farklı zaman diliminde, biri yüksek öncelikli(7) diğeri düşük öncelikli (3), 2 kanalın çalışması sırasında while döngüsünün 5 defa tekrarlanarak "counter" sayacını kaç defa arttırdığı ölçüldü.

Bu tip ölçümlerde her ne kadar sistem durumu, uygulamaların etkinliği vs vs birçok etmen olmasına rağmen kabaca bir ölçüm elde ettik.

**00****00****00****00****00****00****00****00****00****00****00**

Her zaman dilimi (1, 3, 5, 7, 10 saniye) için 5 ölçüm yapıldı. Bu beş ölçümün ortalaması ise o saniye dilimi için kullanıldı.

Yüksek Öncelikli Kanal ile Pardus ve Vista'da yapılan ölçümler sonucu:

Düşük Öncelikli Kanal ile Pardus ve Vista'da yapılan ölçümler sonucu:

Grafikleri yorumlamak gerekirse:
  1. Yüksek öncelikli kanalda, programların çalışma sürelerine bağlı olarak artış hızı Pardus'ta daha fazla olduğunu görüyoruz. Bunun yanında Pardus daha düzensiz olarak hızlı arttığını görüyoruz. Pardus burada birim zamanda daha çok döngü sağlayıp eşit süreli çalışma zamanları için daha çok counter hit üretmiştir.

    Vista ise düzenli bir hız artışına sahip ama birim zamanda performansı Pardus'a göre %14.06 daha düşük çıkıyor.

    Pardus dolu dizgin koşarken Vista düzgün ilerlemeyi seçiyor :)

  2. Düşük öncelikli kanalın her iki işletim sisteminde çalışmasını incelemek gerekirse, Pardus'un, her bir zaman diliminde üretilen ortalama sayaç sayısının zamana göre artış hızı Vista'dan daha fazla. Düşük öncelikli kanalda Pardus düzenli bir artışı seçerken Vista da yine düzenli olarak artıyor. Örneğin 5 sn'li çalışma süresince aralarında ki standart sapma ise %19.02 gibi azımsanmayacak bir rakam.
Düşük öncelikli kanalla yüksek öncelikli kanalın 2 işletim sisteminde hız karşılaştırmasını yaptık. Burada ilginç bir diğer nokta ise Pardus'ta yüksek öncelikli kanal bazen düşük öncelikli kanala yetişemiyor. :). Ölçüm sonuçları en sonda verilmiştir. İncelerseniz bu garipliği görebilirsiniz :).


Bu grafikte ise 5 zaman dilimi için(1, 3, 5, 7, 10 saniye) (High level, Low level) çifti çizildi. Bu grafiği Microsoft Math 2007'den çizdim bu arada. Gariptir ki Microsoft bu projeyi açık olarak yürütüyor, yoksa işimiz ne :). Çok kullanışlı bir program tavsiye ederim.

Kaynak Dosyalar ve Bilgisayar bileşen özellikleri için: Burdan

Ayrıntılı ölçüm sonuçları ve Grafikler için: Burdan


Eksik ve eklemek istedikleriniz varsa yorumlarınızı beklerim...
10
May

Son dönemlerde Java ve C# ile haşır neşir olmaya başladım. Tabi genel tercihim açık kaynak olması ve platform bağımsızlığı c#a göre daha iyi olması sebebi ile Java.

Fakat Java ile C# arasında çok ufak farklılıklar mevcut, ve bu farklılıklar C# lehinde basit kod yazımına yönelik (benim fark ettiklerim). Örneğin C# ile rastgele sayı oluşturmak Javaya göre daha kolay geldi.

Neyse gelelim kodlama kısmına…

Rastgele sayı üretimi (C#):

private int RastgeleSayi(int baslangic, int bitis)
{
Random rasgele = new Random();
return rasgele.Next(baslangic, bitis);
}

Bu şekilde artık dilediğimiz iki aralıkta rastgele sayı üretmemiz yeterli oluyor.

Örnek kod olarak iki metin kutusundan alınan değerler arsında rastgele sayı üretimi yapalım:

private void button1_Click(object sender, EventArgs e)
{
int baslangicsayisi = Convert.ToInt32(textBox1.Text);
int bitissayisi = Convert.ToInt32(textBox2.Text);
int[] dizi = new int[100];
for (int i = 0; i < dizi.Length; i++)
{
dizi[i] = RastgeleSayi(baslangicsayisi, bitissayisi);
}
}

Bu kod ile yukarıda tanımladığımız RastgeleSayi fonksiyonu ile baslangicsayisi ve bitissayisi aralığında 100 adet sayı üretip bu sayıları bir diziye atıyoruz.

Gelelim bu işin Java ile yapılmasına. Öncelikli olarak Javada rastgele sayı üretimi fonksiyonu yazalım:

private static Random rn = new Random();
int[] dizi = new int[30000]; // bu tanımlamayi daha sonra kullanmak için yapıyoruz…

public static int rand(int lo, int hi)
{
int n = hi – lo + 1;
int i = rn.nextInt() % n;
if (i < 0)
i = -i;
return lo + i;
}

Artık rand() fonksiyonu ile rastgele sayı oluşturabiliriz. Gelelim bu fonksiyon ile sayı oluşturma kodlarına:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int sayi1 = Integer.parseInt(jTextField1.Text());
int sayi2 = Integer.parseInt(jTextField2.getText());
for (int i =0; i< dizi.length; i++)
{
int sayi = rand(sayi1,sayi2);
dizi[i]= sayi;
}
}

Şeklinde bir kod karşımıza çıkıyor.

Aslına bakıldığında ikinci kısımlar (rastgele sayıyı diziye aktarma) her iki dil içinde yaklaşık olarak aynı. Fakat rastgele sayı oluşturma kısımları C# ile daha kolay geldi bana. Bu noktada Java ile daha basit bir yöntem var olabilir, fakat internet taramalarım, Java ile uğraşan arkadaşların yönlendirmeleri vb araştırma sonuçlarında bu yöntemin geçerli olduğunu gördüm :)

Bunun dışında Java ve C# ile yapmaya çalıştığım bir başka iş vardı. C# ile becerebildim, fakat Java ile yapamadım. Daha sonra tekrar bakacağım. Fakat burada yapmak istediğimi anlatayım. Bir işlem yapılıyor, bu işlem uzun sürebilimekte. Ve ben işlem sürerken bir etiket üzerine “İşlem Yapılıyor…” yazdırmak istiyorum. C# ta işe başlamadan hemen önce ilgili kodu yazdığımızda, işlem bittikten sonrada aynı etikete işlemin bittiğini yazan kodu yazdığımda çalışıyor. Fakat bu mantık Java ile oturmadı :) .

Javanın can sıkıcı başka bir tarafıda zamanlar(time) ile işlem yaparken milisaniye göstermesi için çeşitli fonksiyonlar vb. şeyler kullanmak gerekiyor anladığım kadarı ile. Fakat C#’ta işler çok daha basit. Şuanki zamanı alan DateTime.Now komutu ile aldığımız iki zaman arasında bulunan farkı TimeSpan kullanarak direk olarak milisaniyeleri ile birlikte alabiliyoruz.

Bu konuda daha geniş bilgisi olan arkadaşların yorumlarını ve eksik kalan noktalar konusunda bilgi vermelerini rica ediyorum….

9
Nis

seamlogo8. Linux ve Özgür Yazılım Şenliği kapsamında 17 Nisan Cuma günü, 13:00-15:00 arasında, JBoss Seam Atölye Çalışması yapılacak.

Çalışma içeriği ise şöyle :

  • EJB3, JPA, JSF teknolojilerine giriş
  • gerekli çalışma ortamının oluşiturulması
  • seam-gen kullanılarak bir seam projesi oluşturulması
  • eclipse ve netbeans altında ilgili projenin açılması
  • ajax destekli küçük bir uygulamanın yazılması

Atölye çalışması konuyla ilgilenen herkesin katılımına açık olmakla birlikte temel java ve web teknolojileri bilgisi faydalı olacaktır.

24
Mar

Bu hatayı aldığınızda öncelikle listelerde geçerli olan remove(int index) fonksiyonunun referans sayfasına bakalım;

Throws:
UnsupportedOperationException - if the remove method is not supported by this list.

Aslında hata gayet açıklayıcıydı ama başka tür hatalar aldığınızda da referans sayfasına bakmanızda fayda olduğundan bu aşamayı da yazdım.

Ben bu hatayı Arrays.asList ile liste oluşturduğumda aldım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        enumList.remove(3);

Bu kodun amacı ApplicationStatus sınıfındaki enum degerleri bir listeye atıp ardından bazı elemanları silme işlemi yapmaktı.

Bu şekilde asList ile oluşturulan listeler java.util.Arrays$ArrayList gibi bir liste döndürüyor ve bu tip listeler remove() add() gibi fonksiyonları desteklemiyor. Bu sebepten UnsupportedOperationException hatasını alıyoruz.

Bunun çözümü bir şekilde düzgün bir liste oluşturmak. Ben şöyle yaptım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        List realList = new ArrayList();
        for (int i = 0; i &lt; enumList.size(); i++) {
            realList.add(enumList.get(i));
        }
        realList.remove(3);

Artık realList ile istediğim gibi remove(), add() fonksiyonlarını kullanabiliyorum.

8. Linux ve Özgür Yazılım Şenliği, bu sene İstanbul Bilgi Üniversitesinde 17-18 Nisan  tarihlerinde gerçekleştiriliyor.

Bu sene şenlik sırasında JBoss Seam konusunda bir atölye çalışması yapıyor olacağım. İlgilenen herkesi beklerim…

16
Ara

turkcell-isolaTurkcell’den beklemediğim ve beni şaşırtan bir haber geldi. Turkcell Teknoloji ilk açık kaynaklı, GPL lisanslı ürünü Isola Framework’u duyurdu. Isola, Java ile web uygulaması geliştirenler için yine bir javascript frameworku olan Extjs’i temel alarak geliştirilmiş bir javascript frameworku. Sanırım ajax4jsf’e benzer bir işi yapıyor.

Böyle büyük ölçekteki bir şirektin özgür yazılıma destek vermesi, ülkemizde özgür yazılımın gelişmesi adına güzel bir gelişme. Turkcell Teknoloji için bu bir ilk ama son olmayacaktır diye düşünüyor ve umuyorum.

Bu güzel hareketinden dolayı Turkcell’i ben de (*) tebrik ediyorum.

Turkcell Teknoloji’nin nasıl bir yer olduğunu merak edenleriniz varsa Televidyon’un videosunu izleyebilirler ve bilgi alabilirler.

Bu arada haberi sevgili Görkem Çetin‘in linux sohbet listesine attığı posta sayesinde öğrendim. Kendisine bu güzel haberi ilettiği için teşekkür ederim.

12
Mar

Uygun Teknoloji, Java EE teknolojileri ile geliştirmekte olduğu özgür yazılım ürünlerinde birlikte çalışacak takım arkadaşları arıyor.

İlgilenenlerin CV’lerini bilgi [at] uygunteknoloji.com adresine göndermeleri rica olunur…

14
Oca

Pardus 2007.3′e kurduğum Eclipse yazılım geliştirme programında java dili kullanarak MySQL’e bağlanmaya çalışıyordum bir süredir (1-2 gündür). Ama bir türlü bağlanamadım. Bağlanmaya çalıştığımda şu hatayı alıyordum;

Cannot connect to db/user. Check your URL
Communications link failure

Last packet sent to the server 0 ms ago

Sonunda çözümü buldum… Problem mysql’in ilk kurulumuyla gelen ayarların dışarıdan erişime izin vermemesiymiş.. Düzeltmemiz gereken dosya /etc/mysql/my.ini dosyası.. Pardusta düzeltmeyi şu şekilde yapabiliyoruz;

Önce ALT+F2 ile çalıştır’ı açalım..

kdesu kwrite /etc/mysql/my.ini

yazıp root şifremizi girelim. daha sonra açılan dosyadaki

skip-networking

satırını bulun ve o satırın başına # ekleyin ve o satırı yorum satırı yapın. Yani o satır şöyle olsun,

# skip-networking

dosyayı kaydedip kapatın. daha sonra konsol açıp şunu yazarak mysql-serverı yeniden başlatın.

service mysql-server restart

Artık Pardus linuxta Eclipse kullanarak MySQL’e bağlanabiliyoruz…

Bu arada bu çözümü uzun araştırmalar sonucu buradan buldum..

20
Eyl

RedHat’ın Exadel’den devir alıp özgür yazılım haline getirdiği RichFaces JSF bileşen setinin yeni sürümü yayınlandı. Live demosuna buradan kendisine de şuradan erişebilirsiniz.

Seam uygulama çatısının 2.0 CR1 sürümü duyuruldu. Güncel kararlı sürüm 1.2.1′e göre bir çok yenilik içeren bu sürüm uzun zamandır beta aşamasındaydı. Sürüm hakkında bilgi için buraya indirmek için ise şuraya bakabilirsiniz.

Oracle ADF’den sonra Ajax destekli yeni bileşen setini de Apache vakfına bağışladı. Bilgi için buraya demo için ise şuraya bakabilirsiniz.

24
Ağu


Sun, SUNW olan NASDAQ borsa işaretçisini JAVA olarak değiştirme kararı almış. Sun ismin pek bilinmediğini Java adının ise daha çok tanındığını düşünüyorlarmış. Bakınız…

Bunun Sun için iyi olup olmadığını bilemeyeceğim ama sanırım Java için pek iyi olamayacak. Böyle bir hareketle Sun, insanların kafasında Java isminin kendileri ile daha yakın bağlar kuracağını hedeflemekte. Java’nın diğer teknolojilere göre en önemli üstülüğünün bir birine rakip bir çok şirketin ve kurumun bir arada aynı teknolojiyi geliştirmesiydi. Dolayısı ile de ismin / markanın biraz daha ortada, bir şirkete bu kadar da bağlı olmamasını, kendi adıma tercih ederdim.

31
Eki
Önce gelişmelerden bahsedeyim: Java ile bir program (hocanın verdiği java projesi) yaptım. İyi bir deneyimdi, nesne yöneliminin nasıl kolaylık sağladığını görmüş geçirmiş oldum. Ama tasarım kalıpları öğrenmeden bu iş zor gibi görünüyor. Amarok'un yüzünü görmüyorum, müzikten sıkıldım galiba... Java projesini yaparken Eclipse ile iyi ikili olduk :) . Pisidepo sürekli genişliyor ve wikilendi. Bu sayede wiki yönetmeyi de öğrendim. Eh bakalım tatilde ne yapacağız...