Kodlayıcı, Programcı ve Mühendis

En çok tartışılan konulardan biri Kodlayıcı (Coder) veya Programcı olmaktır. Kodlayıcılar kodlama konusunda çok başarılı olduklarını söylerler (gerçekten de öyle olabilirler), programcıları küçümseyenleri bile vardır. Ben ise işin daha farklı bir boyutunu ele alacağım.

Çoğu kodlayıcı mühendisleri, mühendisliği de küçümsemektedir. Bu küçümseme mühendislerin iyi kod yazamadığı iddiasına dayanmaktadır.

Bu konuda ilginç yazılar ararken karşıma çıkan bir yazıda önemli tespitlerle karşılaştım. Yazar bir "aptalın" bile kod yazabileceğini söylüyor. Ve bu söyleminde haklıdır. Bahsettiği gibi UML sayesinde bilgisayarlar bile kodu üretmektedir. Mühendisin en önemli farkı burada ortaya çıkmaktadır.

Mühendis kodlama işini yapmak zorunda değildir. Ama bu işten hoşlanıp yapanlar vardır. Mühendisin temel işi problem çözmektir. Teorik bilgileri pratiğe dökmektir. Tasarım yapmak, modellemek mühendisin işidir. Kodlamayı mühendis yapmayabilir. Modelleri hazırlar (UML mesela) daha sonra bir bilgisayarın bile bu modellerden kodu üretmesini sağlayabilir (Model Driven Architecture). Bu noktada kodlayıcı ile mühendisi karşılaştırmak, hatta mühendisi iyi kod yazamıyor diye küçümsemek bilgi eksikliğinden kaynaklanmaktadır. Türkiye'deki mühendislere bakış açısından kaynaklanmaktadır (Bilgisayar mühendisleri programcıların işlerinde çalıştırılmaktadır).

Özetle kodlayıcıları takdir ederim, gerçekten iyi algoritmalar yazan kişileri de takdir ederim. Ama bir mühendis olarak yapmam gereken problem çözmektir, tasarım yapmaktır. Benden çok süper kod yazmam beklenmemelidir. Yazacağım kod yazılım mühendisliği pratiklerine uygun olacaktır. Aldığım eğitim bunu gerektirir.

Değinmek istediğim bir başka konuda bir forumda şans eseri karşılaştığım bilişimci olmak isteyenler tavsiyelerini içeren yazılar. Bu yazılarda yeterli bilgi olmadan sadece ekonomi dergilerinde yazan cümlelerle nasıl fazla para kazanırım düşüncesiyle sertifika programlarıyla "mühendis" olmaya çalışanlardan resmen para emmeye çalışan kişilerin düşüncesidir. Türkiye'de mühendislik ünvanını dört yıllık üniversiteler dışında kimse veremez. Microsoft'un veya diğer kısa süreli kurslarda alınan sertifikalar sizi mühendis yapmaz.
Bu forumu okuyunca "Bilgisayarcı" olmak teriminden ne kadar nefret ettiğimin farkına vardım.

Mesela aşağıdaki cümlelere bakalım:
" Şimdi öss ye girseniz kazansanız sistem müh. = 4 yıl demek hazırlık fln 5 yıl.. aynı şekilde yazılım okumak isterseniz yine 5 sene demek aşağı yukarı bunları aynı anda okumak imkansız gibi bişi oldugundan çift üni yani = 10 sene demek 19 da okul bitir 29 da üni ee askerlik fln noldu öldünüz gittiniz yane tecrübe yok bişi yok bide kafayı çalıştıran bir genci düşünelim..

Lise biter kafası rahat olur gider bir kursa yazılır sistem mühendisliğine 9 ay diyelim.. 9 ay bitince yazılır yazılım mühendisliği / uzmanlıgına 6 ayda bu = 15 ay = 1 yıl 3 ay demek ortalama 1,5 sene diyelim elinizde ne var ?
mirosoft sistem mühendisliği sertifikası + microsoft yazılım uzmanlıgı/mühendisliği sertifikası+ kursun ize sağladıgı iş olanakları+edindiğiniz harika çevre ve yıllık düzenlenen mezunlar buluşması vs.."

Ben Lisans+Yüksek Lisans toplam 7 senemi "Mühendis" olmak için "harcamış" biriyim. Yukarıdakileri yazan arkadaş işi ne güzel özetlemiş. Ne gerek var bu kadar okumaya, gidin bir kursa, 9 ayda mühendis olun, kartvizitinizde mühendis yazsın, ama nedense hiç bir problemi çöz(e)meyin.

Mühendisliğin bu kadar ucuz bir meslek olmaması gerekiyor.

Cümleler biraz karışık oldu, kusura bakmayın. Bazen insanın tepesi atabiliyor :D

JAR içerisindeki kaynaklara erişim URL'si

Daha önce takıldığım noktalardan biri jar içerisinde bulunan xml dosyalarına URL yardımıyla nasıl ulaşacağım konusuydu. Bunu çözmek için birinin tavsiyesiyle jar protokolünü denedim. Ve işe yaradı:

jar:{URL}!/{ICERIK}

Yukarıdaki gibi bir protokol yardımıyla jar dosyası içerisindeki kaynaklara erişebilirsiniz.

Mesela http://www.ornek.com/dosyalar/projeler/Deneme2.jar dosyası içerisindeki bir resime erişmek istiyoruz, bu durumda şu şekilde erişebiliriz: jar:http://www.ornek.com/dosyalar/projeler/Deneme2.jar!/net/tekrei/deneme/resim/icon.gif

Başka bir örnek: jar:http://www.ornek.com/dosyalar/projeler/EasyLab.jar!/resimler/NORMAL.gif

Kaynak: https://docs.oracle.com/cd/E19253-01/819-0913/author/jar.html#jarprotocol

İstanbul

Arkadaşlarımı görmek için gidecektim İstanbula. Ankara'dan sonraki uğrak olarak planlamıştım yolu. Birkaç ay önce EMO dolayısıyla gönderdiğimiz makalenin bildiri olarak önümüze düşmesi biraz değiştirdi durumu. Bildirimiz kabul edilmişti, sunum yapmak gerekiyordu.

Akademik katkısı büyük olmasa da, güzel bir çalışma olmuştu. Katılım beklediğimden çok daha iyi ve kaliteliydi. EMO izmir yönetimi de yalnız bırakmamıştı bizi. Sunum yardımcısının Emre'nin kardeşi olmasını, oturumda karşılaştığım ve üzerimizde çok emeği olan Ahmet Kaşlı hocamı görmek tamamlayınca ayrı bir güzel oldu.

Malzemeyi ben toplamıştım ama pişiren ve tabaklara koyan olmasa hiç birşey olacağı yoktu, sonlanmayacaktı. İki kişi olunca bile birşeyleri çok daha rahat üretebiliyorsunuz; teşekkürler Meltem.

Sempozyumun iyi hazırlanışı bir yana, arkadaşlarımı görebilmekti asıl mutlu eden. Zaten sırf bu nedenle ve birde İstanbul'u onlarla gezebilmek için gitmeyi planlıyordum. Gezme fırsatım oldu da :). Osman ve Levent, 5 dakika boş bırakmadılar beni, her şey düşünülmüştü; ve çok kapıştık hesap ödemek için. Mükemmel muzlu-krokanlı pastasından heralde, Barcelona pastanesinde de hesap ödemede başarısız olunca; ara sokaktaki kahvecide kasaya doğru attığım depardan, bizimkiler önce dumur oldu sonra gülmekten yarıldı :). Eve dönüş yolunu tuttuk. Güzel bir uyku; yatağından ettiğim Zeki'den özür dilemem gerek, ve Osman, herşey için teşekkürler.


Gelmişken birde Ayasofya'yı görelim dedik. Öğleden sonra 4 te kapanıyormuş meğer. Bunu da bizi yabancı sanıp ingilce konuşan birinde yine ingilizce konuşarak öğrendik. Adamı mahçup etmeyeyim diye bende öyle devam ettim, sonra "where are you from?" diye sordu, attım tabii aksanlı bir şekilde "Italiano" diyerek; nerden bileyim adamın italyanca da bildiğini. Vınn, arkana bakmadan, "thank you" deyip kaç :). Önümüzde Sultan Ahmet Camisi. Böyle bir yapı, adam gibi bir koruma önlemi alınmamış ve hafif yıpranmalara maruz kalmış olsa da inanç(ve tabi şan, gösteriş gibi etkenler) uğruna yapılabilecek ve görülebilecek en güzel yerlerden biridir heralde. Bu kadar çok işlenmiş mermeri bir arada görmemiştim hiç.

İstanbullu değilseniz size tüm ulaşım yolları 1.3 YTL. Koyduğunuz yol parasına şaşırabilirsiniz. Çünkü çoğunlukla iki araç kullanmak zorunda kalıyorsunuz. Herkes koşturuyor, herkes sinirli. "Yaşamak istemem artık aranızda" diye düşünüyor insan. Ve üzülüyorsunuz, harcanan kültüre, tarihe ve yapılara. Nereye baksanız tarih var bu şehirde, değeri hiç mi bilinmez?

Böylece bir macera daha bitti(çizgi film sonu gibi oldu), ve bir sunum daha yapıldı. Sempozyum kartlarını da biriktiriyorum, ne yapacaksam. Şimdilerde başka bir çalışmamız daha var: yapay zeka ve RFID üzerine, iki kişiyiz yine. Birde bize doğrudan hiçbir katkısı olmayacak bir yazılımın peşinde koşuyoruz, üç kişiyiz burada da. Ne kadar kalabalıksak o kadar büyük çalışabiliyoruz, ne kadar uyumluysak o kadar üretebiliyoruz. Vakit az, iş çok. Yapılanlara katılımı kabul ediyoruz, yapılmasını istediklerinizi tartışıyoruz. Umarım sonunu getirebiliriz tümünün.

Kevin Smith Filmleri

Dogma'yı izleyerek haberdar olduğum Kevin Smith, Dogma'daki farklı bakış açısı, eleştirel yazarlığı ve Star Wars hayranlığıyla ilgimi çekmişti. Bu Dogma filminin Jersey Üçlemesi adlı bir serinin filmi olduğunu öğrendiğimde üçlemenin önceki filmlerini de izlemeye karar verdim.

Clerks çoğu kişinin duymuş olabileceği bir film. Quik Stop dükkanında o gün dükkanda olmaması gereken tezgahtar ve yandaki video kiralama dükkanındaki tezgahtarın bir günlük ( sanırım bir günlüktü :S ) macerasını anlatıyor. Kadın erkek ilişkilerine de değiniyor. Ve Jay ile Sessiz Bob'la tanışmamız sağlanıyor.

Mallrats gün başlarken sevgilileri tarafından terkedilen iki arkadaşın teselli bulmak için büyük bir alışveriş merkezine gitmeleri, orada yaşadıkları olaylar ve kadın erkek ilişkilerine değiniyor. Günün sonunda elbette mutlu son yaşanıyor. Elbette Jay ve Sessiz Bob karşımıza burada da etkili rollerle çıkıyorlar :)

Chasing Amy bence değişik bir film. Bir lezbiyene aşık olan çizgiroman çizerinin bu kızla arkadaş olmasını, çizgiromanı beraber çizdiği arkadaşıyla bozuşmalarını, lezbiyen kızla sevgili olup daha sonra kızın geçmişiyle ilgili kendince dayanılmaz birşey öğrendikten sonra ayrılmalarını ve travmaları anlatıyor. Jay ve Sessiz Bob yine karşımıza çıkıyorlar.

Dogma filmi, iki kaçak meleğin Katolik mezhebi tarafından yaratılmış olan bir açığı değerlendirip Tanrı'yı hata yapan konumuna düşürüp insanlığı yoketmelerini önlemek için Hz. İsa'nın bilinen en son soy varisinin çağrılmasıyla başlıyor. Olaylar gelişiyor. Ve Jay ve Sessiz Bob bu filmde daha fazla karşımıza çıkıyorlar. Duyduğum kadarıyla bu film katolik mezhebi karşıtlığı ve tanrı tasviri nedeniyle bazı ülkelerde yasaklanmıştı. Ayrıca Kevin Smith tehdit mektupları da almış.

Son olarak Jay and Silent Bob Strike Back filmini izledim. Bu filmde Jay ve Sessiz Bob'un kendilerinden esinlenilerek yaratılmış olan çizgi romanın film yapılmasını, internette kendilerine (daha doğrusu onlardan esinlenilerek yaratılan Bluntman and Chronic'e) film küfür edenlerin olması nedeniyle engellemeye çalışmalarını ve yol hikayelerini anlatıyor.

Kevin Smith bu filmlerinde yarattığı sanal bir dünyayı kullanıyor. Tüm karakterler filmlerde karşımıza farklı zamanlarda çıkabiliyor. Bu filmleri farklı bir komedi örneği olarak izlemenizi tavsiye ederm. Ancak belden aşağı (bol küfürlü, hem de çok bol) espriler tadınızı çok kaçırıyorsa hiç tavsiye etmem. Jay ve Sessiz Bob'tan zevk almamın belki de en önemli nedeni Jay'in inanılmaz derecede küfürlü konuşmasıdır (Örn: Jay'in küfürlü rapi).

Kevin Smith ekşisözlük girişi
Jay and Silent Bob

Sağlık Raporu

Sağlık raporu almak gerekti, bunun içinde tam teşekküllü bir devlet hastanesi bulmak gerekti. İzmir gibi büyük yerde bir kaç tane devlet hastanesi olduğu için ulaşım açısından en kolay olanı seçmek istedim. Bu da Karşıayaka devlet hastanesiydi. Herşeyi ayarladık sabahın köründe uyandım, dolmuşa 7.30'da bindim, 8'de ordaydım. Hemen işlemleri başlattım. Parayı ödemek için (telefonla sormuştuk) veznede kuyruğa girdim. Evet ben kredi kartı geçiyordur diye düşünürken ilk şokla karşılaştım 160-180 YTL arası parayı nakit olarak vermemiz bekleniyordu. Yani kredi kartı geçmiyordu. Tam o esnada arkadaşımla konuşan bir bayan Eşref paşa belediye hastanesinde 60 YTL karşılığı raporu (aynı raporu) alabileceğimizi söyleyince biz de Karşıyaka devlet hastanesinden çıkıp telefonla aradık. Ve doğru olduğunu öğrendik. Alsancak'a doğru yola çıktık. Karşıyaka'dan doğrudan nasıl gidebileceğimizi bilmiyorduk. İlk önce belki daha ucuzdur diye Alsancak devlet hastanesine sorduk. Orası 129.5 YTL alıyormuş. O zaman dedik farz oldu, Eşref Paşa belediye hastanesine gidiyoruz. Ama orası da 8:00-10:00 arası kabul ediyormuş heyet raporu alacakları. Biz en azından bilgi alalım diye gittik ve 10:30 civarı vardık öğrendik. Günümüz böylece bitti (öldü, mahvoldu ne derseniz artık)

Ertesi gün sabahın köründe kalktım, ve hastaneye gittim. Önceki gün 1 dolmuş, 2 otobüs ve 1 metro seferi yapmıştım. Bugün doğrudan metro ile Basmane'ye gittim, oradan 10 dakikalık yürüyüş ile Hastaneye ulaştım. Ama yürümeyi tavsiye etmem, tırstırıyor :S. Hastanede hemen işlemleri başlattım, 3 fotoğraf önceki gün heba olmuştu, bugün de üç tane daha verdim. Ve idrar, kan tahlilleri için numuneleri verdim, röntgeni çekildim ve muayenelerin başlayacağı saat 11:00'e kadar beklemeye başladım. Orada aynı işlemleri yapmak için gelen 3 kişiyle oturup çay içtik, muhabbet ettik. Bu kadar farklı (benden) insanlarla muhabbet ilginç oldu. Farklı bir deneyimdi. İnsanların sıkıntılarını daha iyi anlamak için önemli bir deneyim. Aslında arada sırada böyle farklı mahalledeki (köylerdeki) kıraathanelerde insanlarla konuşmak gibi düşüncelerim oluyor ama tırsak yapımdan dolayı pek yapamıyorum. Neyse gelelim sağlık raporuna. 11:00 olunca oradan oraya koşturmaya başladık. Doktorlar muayene etmeden bir sorunun var mı diye sorarak imzaladılar. Bu arada röntgen, kan ve idrar tahlili yaptırmış oldum :) Saat 11:50 gibi işler bitti. Eğer gezmem gereken tüm poliklinikleri gezmeseydim ertesi güne kalacaktı öğleden sonra muayene yapmıyorlar diye duymuştum. Herşey bitti ve şimdi rapor için ertesi gün 13:00'da tekrar gitmemi istediler. Şu raporu alsam da kurtulsam demeye başladım. Bürokrasi şu son bir kaç aydır iyice bir sıkıntı yaratmaya başladı :(

Size tavsiyem rapor almadan telefonla bilgi alıp hazırlıklı gitmeniz. En ucuzunu bulun, üstünüzde yeterli para olsun.

Not:Sağolsun kan alan hemşirenin eli o kadar hafif ki kan aldığı yer bir süre şişti. Acaba bu normal mi ?

Java ve Oyun Programlama

Java çıktığından beri aldığı standart eleştiriler nedeniyle oyun programlama için uygun bir dil olmadığı savunulmuştur. Ancak her zaman savunduğum gibi Java ile'de oyun geliştirilebilmektedir. Bunu örneklemek için youtube 'ta bulunan bir videoyu paylaşmak istedim (java gaming diye aratınca da bir sürü çıkıyor).




Görüntülerle verilen oyun linklerini de inceleyebilirsiniz. C, C++ bilmediğiniz için oyun geliştiremiyorsanız, büyük bir oyun geliştirmek için tam zamanı. Nasıl yaparım ne ederim diyorsanız başlamak için bağlantılar aşağıda:

-JOGL ne ola ki?
-Jumping into JOGL
-Java Gaming forums

Not:Ben Chrome ve Squareheads oyunlarını beğendim, denemek lazım. Ayrıca bir süreliğine Runescape oyununu da oynamıştım. Hoşuma gitmişti. Tam bir MMORPG oyun olarak göze çarpıyor.

IzPack ve Java kurulumları hazırlama

Bir projeyi bitirdikten sonra yaşanan en büyük sıkıntılardan biri tüm platformlarda çalışacak bir kurulum dosyası oluşturmaktır (installer). Java uygulamaları için son aşamaya geldiğinizde kullanabileceğiniz güzel bir aracı ben araştırmalar sonucu buldum. IzPack işimi gerçekten kolaylaştırdı ve hem linux hem de windows tabanlı makinelerde kurulum dosyası oluşturmamı sağladı.

IzPack sitesinden kurulumunu indiriyoruz. İndirdikten sonra java -jar izpack-dist-5.0.10-installer.jar komutuyla kurulumu başlatıyoruz. Daha sonra aşamaları izleyerek kurulumu tamamlıyoruz.

Kurulum tamamlandıktan sonra paketini hazırlayacağımız projenin çalıştırılabilir jar dosyasını oluşturuyoruz. Ve bu aşamadan sonra IzPack için gereken xml tanıtma dosyasını yazıp projemizin paketini hazırlayabiliriz.

Aşağıda açıklamasıyla bir örnek vardır. Bu örneği denemek için Dosya Parçalayıcıyı indirip oluşturduğunuz bir klasöre koyun. Ayrıca paketle beraber bir lisans dosyası göndereceğimizi varsayalım. Onu da siz yazabilirsiniz veya hazır bir lisans dosyası indirebilirsiniz. Bu örnek için GPL lisansını kullanacağız. Verdiğim adresten html dosyasını indirin ve aynı klasöre koyun. Daha sonra çok basit bir html dosyasını elimizle yazalım. İçeriğinde kurulum aşamalarını, programınız hakkında bilgiyi içerebilirsiniz. Örnek için dosyamız şu şekildedir:
Bu program dosyaları parçalamaya yarıyor. KodVeUs tarafından eğitim amaçlı yapılmıştır.
Ve kullanıcıların çalıştırma işlemini kolaylaştırmak için iki tane (linux için ve windows için) script yazıyoruz. İçerikleri oldukça basit:
Linux (calistir.sh):
#!/bin/bash/
java -jar DosyaParcalayici.jar

Windows(calistir.bat):
java -jar DosyaParcalayici.jar

Dil seçiminde kullanmak üzere de bir resmi aynı klasöre koyuyoruz. Aşamaları bitirdikten sonra aşağıdaki gibi bir klasörünüz olmalıdır:

Yukarıdaki klasor yapısından sonra aşağıdaki örnek IzPack derleyicisi için hazırladığımız xml dosyasını aynı klasorde yaratacağız:
<installation version="1.0">
<info>
<appname>Dosya Parçalayıcı</appname>
<appversion>0.1</appversion>
<authors>
<author name="Kod ve Us" email="kodveus@gmail.com" />
</authors>
<url>http://www.blogcu.com/kodveus</url>
<javaversion>1.5</javaversion>
</info>

<guiprefs height="600" resizable="yes" width="800">
<laf name="metouia">
<os family="unix" />
</laf>
<laf name="looks">
<os family="windows" />
<param name="variant" value="extwin" />
</laf>
</guiprefs>

<locale>
<!-- Hem ingilizce hem de Turkce calissin kurulum programi -->
<langpack iso3="tur"/>
<langpack iso3="eng"/>
</locale>

<resources>
<!-- HTML olarak bilgi panelinin icerigi (html dosyasi olmali)-->
<res src="oku.html" id="HTMLInfoPanel.info"/>
<!-- lisans panelinin icerigi (txt dosyasi olmali) -->
<res src="gpl.txt" id="LicencePanel.licence"/>
<!-- Dil ekranindaki resim -->
<res src="kvu.gif" id="installer.langsel.img"/>
</resources>

<panels>
<!-- Gosterilmesini istedigimiz paneller -->
<panel classname="HelloPanel"/>
<panel classname="HTMLInfoPanel"/>
<panel classname="LicencePanel"/>
<panel classname="PacksPanel"/>
<panel classname="TargetPanel"/>
<panel classname="InstallPanel"/>
<panel classname="SimpleFinishPanel"/>
</panels>

<packs>
<pack name="Core" required="yes">
<description>Dosya parçalayıcı için gereksinim duyulan çekirdek dosyalar.</description>
<fileset dir="" targetdir="$INSTALL_PATH">
<!-- Calistirilabilir dosyamizi ekliyoruz -->
<include name="DosyaParcalayici.jar" />
</fileset>
<!-- Linuxte calistirmayi saglayacak olan script -->
<file src="calistir.sh" os="unix" targetdir="$INSTALL_PATH/"/>
<!-- Windowsta calistirmayi saglayacak olan script -->
<file src="calistir.bat" os="windows" targetdir="$INSTALL_PATH/"/>
<!-- Kullanicilarin daha sonra da erismesi icin lisans ve oku dosyalarini ekliyoruz -->
<file src="oku.html" targetdir="$INSTALL_PATH/doc/"/>
<file src="gpl_tr.html" targetdir="$INSTALL_PATH/doc/"/>
<file src="gpl.txt" targetdir="$INSTALL_PATH/doc/"/>
<!-- Linuxte scriptin calismasi icin executable isaretini koyuyoruz -->
<executable targetfile="$INSTALL_PATH/calistir.sh" stage="never" />
</pack>
</packs>
</installation>


Daha sonra komut satırını açıp aşağıdaki komutları çalıştırıyoruz:

$ cd YarattigimizKlasor
$ IzPackKurulumKlasoru/bin/compile dp.xml

Bu komutu çalıştırdıktan sonra aynı klasorde dp.jar isimli bir dosya oluşacaktır. Bu dosyayı java -jar dp.jar ile çalıştırdığımızda kurulum aşamaları başlayacaktır.

Kurulum tamamlandıktan sonra seçilen konumda bizim dosyalarımızla birlikte bir Uninstaller klasoru oluşuyor. O klasorun içerisindeki uninstaller.jar dosyası (çift tıklayarak veya java -jar uninstaller.jar komutuyla) yardımıyla programımızın kaldırılması sağlanmaktadır.

Kaynaklar:
-IzPack kurulumuyla birlikte klasör altında oluşan belgeler (doc klasörü altında)
-IzPack tutorial
-IzPack sitesi

Linux fedora üzerinde Jade, Jigloo, Eclipse kurulumu ve konfigurasyonu

Yüksek lisans derslerimizin biri de etmen tabanlı yazılım geliştirmeydi ve geçen yıl u ders kapsamında Jade çerçevesini kullanarak bir proje geliştirmemiz gerekiyordu. Ben linux üzerinde geliştirmeyi tercih ettim, zor oldu biraz ama oldu.
İzlediğim yolu adım adım özetlersek:
--------zorunlu adımlar
j2sdk-1_4_2_06-linux-i586-rpm.bin'i indirdim.
eclipse-SDK-3.0M2-linux-gtk.zip'i indirdim.
JADE-bin-3.2.zip'i indirdim.
mySql server'i indirdim.
--------isteğe bağlı
jigloo301.zip'i indirdim.
terminalden j2sdk-1_4_2_06-linux-i586-rpm.bin dosyasini kaydettiğiniz yere gidin ve şu komutu çalıştırın : "./j2sdk-1_4_2_06-linux-i586-rpm.bin" . Lisans sözleşmesini kabul edin, kurulum /usr/java klasörüne yapılacaktır. Bu klasörün yolunu web tarayıcınızın java applet ayarlarında da kullanabilirsiniz.
Not : Önce Jade ile j2sdk1.5 i birlikte kurup çalıştırmayı denedim ama olmadı.
Eclipse dosyasını linux dosya sisteminizde bir yere açın (örn. /home/Eclipse).
JADE dosyasını linux dosya sisteminizde bir yere açın (örn. /home/jade). Etmen platformunu çalıştırırken kullanacağımız ve Base64,http,iiop,jade and JadeTools jar dosyalarını içeren lib klasörünü göreceksiniz.
------------
Jigloo, kullanıcı arayüzü (GUI) tasarlamak için kullanılan bir eclipse eklentisi. JADE in çalışması için zorunlu ve gerekli değildir.
Jigloo dosyasını açın. Plugins klasörü altındaki "com.cloudgarden.jigloo_3.0.1" klasörünü Eclipse'i kurduğunuz yerin altındaki plugins klasörüne (örn. /home/Eclipse/plugins) kopyalayın. Eclipse i yeniden başlattığınızda jigloo seçeneğini de göreceksiniz.
/******Etmenleri Eclipse te çalıştırma*******
Kurulan ortamı test edebilmek için JADE-examples-3.2.zip içerisinde gelen "bookTrading" örneğini kullandım.
1)Yeni bir proje yaratıp bookTrading klasörünü 3 java dosyası ile Eclipse'in "workspace" klasörüne kopyaladım
(/root/workspace/MyProject1/bookTrading).
2)Project->Properties->Java Build Path->Add External JARs seçeneğinden, Base64,http,iiop,jade ve JadeTools jar dosyalarını seçtim.
3)Projeyi Run->Run... . ile çalıştırdım. "Main" sekmesinde "Main class" bölümüne "jade.Boot" yazdım.Ve
"(x)=Arguments" sekmesinin "Program arguments" bölümüne "-gui" yazarak jade'in grafiksel arayüz ile başlamasını sağlamış oldum. Apply ve Run'a basıp çalıştırdım.
Şimdi etmen ortamı RMA arayüzü ve ana kapsayıcı(main container) ile düzgün çalışıyor olmalı.
4)Sonraki adım ServerOfBank etmenini Run->Run seçeneğinden çalıştırmak. "Main" sekmesindeki "Main class" bölümüne yazılı olan "jade.Boot" girdisini değiştirmeyin. "(x)=Arguments" sekmesindeki "Program arguments" bölümünü "-container BServer:beys.ServerOfBank" olarak değiştirin("BServer", bizim tarafımızdan belirlenen, etmenin ismi; "beys.ServerOfBank" ise etmen sınıfının yolunu belirtiyor). Apply ve Run'a basarak çalıştırın.
Bu bir satıcı etmen yaratacaktır ve bu etmen size kitap fiyat ve etiketini soracaktır. RMA içerisinde yeni bir kapsayıcı oluştuğunu göreceksiniz.
5) Son adım CustomerOfBank etmenini, "(x)=Arguments" sekmesine "-container BCustomer:beys.CustomerOfBank" girdisini yazarak çalıştırmak.
Yazan: Mehmet KIŞ - Ege Universitesi, Türkiye 29/02/2005

Ericsson bilgisayar dağıtıyor (Yalan!!! :)

Ev arkadaşlarımdan birine şu klasik "bunu 20 kişiye gönderin kazanın", " şans meleği için bunu en sevdiğiniz n kişiye gönderin" maillerinden geldi. Ben de mail için bir araştırma yaptım. Nisan 2000'den beri bu mail ve türevlerinin dolaştığı iddia ediliyor. İlginç olan aslı mutlaka başka bir dilde olan bu maili hangi akıllı Türkçe'ye çevirdi.

Gelelim bu tip maillerde ne tür önlemlerle hoax ("sahte", "hile") olduğunu anlayabilirsiniz. Aşağıdaki maili inceleyelim:

KONU: Tasinabilir bilgisayar ( Laptop)

Herkese selamlar ERICSSON firmasi bedava tasinabilir bilgisayar dagitmaktadir.
Bunu, ayni sekilde davranan NOKIA sirketine karsilik vermek icin yapmakta.
ERICSSON boylelikle ununu daha yayginlastirmak amacini gutmekte ve yeni, WAP modeli tasinabilir bilgisayarini parasiz olarak dagitmaktadir. Bunun icin yapmaniz gereken sey, bu e-mail i 8 arkadasiniza gondermektir. Bunu yaptiginizda iki hafta icinde , bir adet T18 modeli ERICSSON bilgisayar alacaksiniz. Mesaji 20 yada daha fazla kisiye gondermeniz halinde ise,
alacaginiz bilgisayar ERICSSON R320 modeli olacaktir.

ONEMLI : bu e-mailin bir kopyasini
anna.swelung@ericsson.com
adresine gondermeniz sarttir!

Yukarıdaki mail için ilk yapılması gereken bu anna.swelung@ericsson.com adresini google veya benzeri bir arama motorunda aratmak olmalıdır. Aratma sonucunda mutlaka ilgili siteler çıkacaktır. Mesela google araması sonucu çıkan ilk sitede bu maillerin sahte olduğu açıklanmış.

İkinci olarak verileceği söylenen ürün gerçekten var mı kontrol etmek lazım. Ben Ericsson'un T18 dizüstü bilgisayar ürettiğine inanmıyorum. Gene bir google araması ile, veya bahsedilen firmanın web sitesinden ürünleri inceleyerek sonuca ulaşabilirsiniz.

Özetle vahşi kapitalizmin insanların sırtından en küçük kuruşu bile sömürerek kazanmaya çalıştığı bir durumda bu şekilde basit sebeplerle bedava ürün vermeyeceği gerçeğini unutmamak lazım. Unutulmamalı ki, bu tip mailler genellikle gereksiz mail trafiği yaratmak, mail adreslerini toplamak vb. nedenlerle yapılmaktadır. Unutmayın ki bu mail bir şekilde ilk gönderene geri dönecektir.

Java'da İş Parçacığı (Thread) Senkronizasyonu

Bu örnek uygulama üretici ve tüketici problemine Java kullanarak bir çözüm üretmeye çalışacağız. Projede üç adet üretici (SugarProducer, OilProducer ve FlourProducer), iki adet tüketici (HalvahShop, HotFlakyPasteShop) iş parçacığı bulunmaktadır.
Silolar (üretilen ürünlerin deposu) için bir adet sınıf yeterli olmuştur. Bu sınıf yaratıldığı zaman içinde ne barındırdığına dair bilgiyle yaratılmaktadır. Böylece her silo için ayrı sınıf yazma maliyeti kalkmıştır. Programda senkronizasyon Silo içerisindeki get ve put metodlarında sağlanmaktadır. get metodu üreticilerin ürettikleri ürünü silo'lara eklemek için kullandıkları metottur.
Aşağıdaki kod örneği incelendiği zaman get metodunun synchronized anahtar kelimesiyle aynı anda sadece 1 iş parçacığının erişebileceği kritik alan olarak işaretlendiği görülecektir. Metodun içerisine giren iş parçacığı silo dolu değilse (her silo azami 20 birim almaktadır) siloya ürettiği ürünü yerleştirmektedir. Eğer silo dolu ise iş parçacığı bekleme konumuna alınmaktadır. Ürün yerleştirme işleminden sonra iş parçacığı beklemede olan (syncronized anahtar kelimesi nedeniyle) diğer iş parçacıklarını notify metodu ile uyandırmaktadır.
public synchronized void put() {
while( unit==20 ){
try {
wait();
} catch (Exception e) {
}
}
unit++;
System.out.println(Thread.currentThread().getName()+" putting "+this.what);
notify();
}
Aşağıdaki kod örneği incelendiği zaman set metodunun synchronized anahtar kelimesiyle aynı anda sadece 1 iş parçacığının erişebileceği kritik alan olarak işaretlendiği görülecektir. Metodun içerisine giren iş parçacığı silo boş değilse silodan ürünü alacaktır. Eğer silo boş ise iş parçacığı bekleme konumuna alınmaktadır. Ürün alma işleminden sonra iş parçacığı beklemede olan (syncronized anahtar kelimesi nedeniyle) diğer iş parçacıklarını notify metodu ile uyandırmaktadır.
public synchronized void get() {
// Eger elimizde yoksa bekletecegiz
while( unit==0 ){
try {
wait();
} catch (Exception e) {
}
}
unit--;
System.out.println(Thread.currentThread().getName()+" getting "+this.what);
notify();
}
Üreticiler basit birer iş parçacığı olarak gerçekleştirilmiştir. Sonsuz bir döngü içerisinde rastgele üretilen bir bekleme zamanından sonra ilgili siloya (mesela Un üreticisi (FlourProducer) un silosuna) birim eklemektedir. Her üretici ilgili silosunu yapıcı metod içerisinde almaktadır. Aşağıdaki sınıf FlourProducer sınıfı olup, diğer üreticilerin tek farklılığı yapıcı içerisindeki iş parçacığını adlandırma kısmıdır (mesela super("Oil Producer"); gibi).
package net.tekrei.ds.producer;
import net.tekrei.ds.silo.Silo;
public class FlourProducer extends Thread {
Silo silo;
public FlourProducer(Silo silo) {
super("Flour Producer");
this.silo = silo;
}
public void run() {
while (true) {
try {
sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
}
silo.put();
}
}
}
Helva dükkanı yapıcısında kullandığı siloları (yağ silosu, un silosu ve şeker silosu) alan bir iş parçacığı şeklinde gerçekleştirilmiştir. Sonsuz bir döngü içerisinde rastgele üretilmiş beklemeden sonra helva yapmak için gereken birimler sırasıyla ilgili silolardan çekilmektedir. Aşağıda bu ilgili silolardan birim çekme kod parçacığı incelenebilir.
//2 birim oil
oilSilo.get();
oilSilo.get();
//1 birim flour
flourSilo.get();
//3 birim sugar
sugarSilo.get();
sugarSilo.get();
sugarSilo.get();
Poğaça dükkanı yapıcısında kullandığı siloları (yağ silosu, un silosu) alan bir iş parçacığı şeklinde gerçekleştirilmiştir. Sonsuz bir döngü içerisinde rastgele üretilmiş beklemeden sonra poğaça yapmak için gereken birimler sırasıyla ilgili silolardan çekilmektedir. Aşağıda bu ilgili silolardan çekme kod parçacığı incelenebilir.
//1 birim oil
oilSilo.get();
//1 birim flour
flourSilo.get();

Ana sınıf içerisinde ortam hazırlanarak bu üretici ve tüketicilerin birbirleriyle çalışması incelenebilmektedir. İlk olarak kullanılacak olan silolar oluşturulmaktadır.
Silo sugarSilo = new Silo("Sugar");
Silo oilSilo = new Silo("Oil");
Silo flourSilo = new Silo("Flour");
Daha sonra ilk önce üreticiler yaratılarak başlatılmaktadır. Her üreticiye dolduracağı silo aktarılmaktadır.
new SugarProducer(sugarSilo).start();
new OilProducer(oilSilo).start();
new FlourProducer(flourSilo).start();
Poğaça dükkanı ve helva dükkanı da silolar verilerek başlatılmaktadır. Ödevde istendiği gibi helva dükkanı bir süre sonra (1 saniye sonra) başlatılmaktadır.
new HotFlakyPastyShop(oilSilo,flourSilo).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
new HalvahShop(oilSilo,flourSilo,sugarSilo).start();
En son olarak bu üretici ve tüketicilerin davranışlarını inceleyebilmek için sonsuz bir döngü içerisinde o anki silo durumlarını ekrana basan komut çalıştırılmaktadır.
while(true){
System.out.println(oilSilo.toString()+" "+flourSilo.toString()
+" "+sugarSilo.toString());
}
Ve programın ekrana yazdığı mesajlardan çalışma gözlenebilmektedir.

Oil:0 Flour:6 Sugar:18
Oil Producer putting Oil
Hot Flaky Pasty getting Oil
Hot Flaky Pasty getting Flour
Oil:0 Flour:5 Sugar:18
İnceleme yapıldığı zaman poğaça dükkanının önceden başlatılması bir süre sonra yağ sıkıntısını başlatmaktadır. Böylece yağ 0'a inerek üretiminin yavaşlamasına sebep olmaktadır.
Bu yazıda basit bir şekilde Monitor kullanarak senkronizasyonu açıklamaya çalıştım, umarım faydalı olmuştur.
Kaynak Kodlar (Eclipse projesi şeklinde)

Türkiyede özgür yazılım geliştiren firmalar ?

Türkiyede, özgür yazılım geliştiren ve bunu GPL/BSD v.b. lisanslar ile dağıtıp, yaşamına devam edebilmek için teknik destek, ek özellik gibi hizmetlerle geçimini sağlayan firmalar varmı? Yoksa neden yok? Para mı getirmez, iş mi yapmaz? Özgür yazılım kullanmak isteyen büyük şirketlerin en büyük engeli/tatminsizliği yeterli ve garantili destek alamama. Güvenilir bir şirket kurularak bu aşılamaz mı?

Peki bunun yurtdışı örnekleri nelerdir, en azından onları inceleyip kendimizi sorgulayabiliriz. Bilen varmı?


Türkiye için biraz arama yaptım ama henüz hiç birşey bulamadım. Bulursam bu yazıya ekleyeceğim. Bulamazsam yurtdışı örneklerine bakarız.