4 Aralık 2008 Perşembe

JavaFX SDK 1.0 Yayınlandı!

Sun Microsystems JavaFX SDK 1.0 yayınladı. Ancak linux ve solaris kullanıcıları biraz bekleyecek. Bendeniz ise incelemelerimi bitirince günlüğümde konuyla ilgili yazılar yayınlayacağım.(Tabi zavallı bir diş hekiminin programcılık anlayışı ile <:))) http://www.javafx.com/

24 Ekim 2008 Cuma

Yorumlayıcı (interpreter)

Yorumlayıcı (interpreter) için en basit örnek firefox gibi web tarayıcılarının içine gömülmüş olan yorumlayıcılardır. Yorumlayıcıların programlama diline script denir. Yorumlayıcıların varlığının önemi onu anlatmaktan daha önemlidir. Yorumlayıcılarla yazılan programlar (python, javascript, v.s) direkt derlenen programlara göre daha basit geliştirme sürecine yol açarlar. Bu sürece en büyük katkıları programlama dillerine göre script dillerinin daha basit, gevşek ve hata töleranslı kurallar ile yazılıyor olmasıdır. Ayrıca temel komutlarının yanında diğer programlama dillerinde satırlarca kod yazarak oluşturduğunuz bazı yapıları (telefon listesi gibi) tek bir anahtar kelimelerle sağlayabilirler. Yorumlayıcılar web sayfaları üretmek, program yazmak yada belirli programların içerisinde programa otomatik olarak bazı şeyler yaptırmak için kullanılabilir. Firefox ve internet explorer içerisinde javascript komutları ile html ve css yapılarına ulaşarak onları değiştirmek için kullanılmasına program içine gömülü yorumlayıcı örneği uyar. Yorumlayıcıların en büyük dezavantajı ise hızlarıdır. Yorumlayıcılar aslen herhangi bir programlama dili ile yazılmış bir programlardır. Doğal olarak bizim verdiğimiz komutların işletilmesi için yorumlayıcının yazıldığı programlama dilinde pek çok komut yürütmesi gerekir. Diğer bir performans düşürücü durum da yazdığınız script kodlarının çalıştırılması için ilk önce yorumlayıcının belleğe yüklenip çalıştırılması lazım. Bu da script kodlarının işletilmesini geciktirecektir. Script dilleri derlenmediği için düz tekst dosyalarında tutulurlar. Bu da değişiklik yapmayı kolaylaştırır. Örneğin siz C gibi geleneksel bir programlama dili kullanarak bir program yazdınız. Bu programı derlemek 10 dakika sürsün. Programı geliştirirken bir hata yaptığınızı fark ettiniz. Bu hattayı düzelttikden sonra tekrar derlemeniz gerekir. Bu durumda bir 1o dakika daha derleme süresi kadar bekleyeceksiniz. Farklı olarak javascriptle bir web sayfasın da kullanılmak üzere şık bir efekt hazırladınız ancak efektinizin animasyon süresini biraz uzun tuttuğunuzu fark ettiniz. Bu durumda değişikliği yaptıktan sonra sadece yenile düğmesine basmanız değişikliğin etkisini görmeniz için yeterlidir. Ayrıca efektininiz hiçbir değişiklik yapmadan firefoxun çalıştığı bütün ortamlarda (linux, mac,solaris, v.s ) çalışacaktır. Scriptler tasarım şekline göre programcılığın derinine inmeden basit bir şekilde uygulanacak biçimde olabilirler. Örneğin 3D tasarım programlarından 3DStudio Max MaxScript adında gömülü script dili kullanır. Bu sayede tasarımcı basit bir şekilde sahnedeki öğeleri değiştirebilir. Özellikle yapılan değişiklikler basit ama gerekli ise script kullanmak daha mantıklıdır. Script dilleri bazen işlevselliği arttırır. Örneğin öyle bir program yazacaksınızki pek çok iş yapacak ama bu işler sizin önceden tahmin edemeyeceğiniz türden kullanıcı istekleri olacak. Buna en iyi örnek geogebra (MathLab da olabilir.) adındaki geometrik ve cebirsel ifadelerin grafiğini çizen program verilebilir. Kullanıcı böyle bir durumda pek çok formül ve bilgi girecektir ve bunlar önceden tahmin edilemez olacaktır. Bu durumda onlara esnek bir dil sağlamalısınız ki onlarda anahtar kelimeleri kullanarak gereken cümleyi (formülü) yazsın. Burada programın kendisi yorumlayıcıdır. Gömülü script dilleri dışındaki script dilleri yorumlayıcının tasarımına göre hali hazırda bulunan bir kütüphaneyi gerektiğinde script avantajı ile kullanabilirler. Örneğin Python scriptleri gereken kurulum yapılmışsa MySql, GTK, gibi kütüphanelere erişebilirler. Scriptlerin diğer bir avantajı da yorumlayıcı sayesinde hatta töleranslı olmalarıdır. Tabi ki yorumlayıcı yada kullandığı yerel kütüphaneler (MySql gibi) hatalı çalışmıyorsa. C ile yazacağınız bir program işletim sisteminin çökmesine neden olabilir yada bir başka programa veya donanıma zarar verebilir (Tampon taşması v.s). Ancak script dili ile yazılan diller genelde direkt komut yürütmedikleri için böyle bir duruma sebep vermezler. Ayrıca hata ayıklama da script dillerinde daha kolaydır. Çünkü script dilleri genellikle direkt olarak işlemcide çalıştırılmazlar. Bazı script dilleri (Python gibi) çalışma zamanı (run-time) kısalsın diye derleme yaparlar. Ancak bu derleme dosyaları yinede exe dosyaları gibi direkt çalıştırılabilir dosyalar değildir. Script dosyası değişirse yorumlayıcı tekrar derleme işlemi ile bu ara-dosyayı günceller. Eğer script diliniz pek çok farklı platformda çalışabiliyorsa o zaman derlenmiş ara dosyalar bir platformdan diğerine uyumsuzdur. Örneğin sizin script dosyanızın derlenmiş versiyonu diğer platfomda çalışmaz. Ama script dosyanız bu platform için tekrar derlenir. Script derleme işlemi javadaki runtime compiler (hotspot) ile karıştırılmamalıdır. Hotspot java derleyicisi tarafından derlenmiş dosyaları eğer uygunsa anında işlemci diline çevirir. Bu işlem dosya üzerinde değil java çalışırken eş zamanlı yapılır (Bence javaya aşık olmak için bir neden daha). Evet şimdilik yorumlayıcı muhabbeti bu kadar.

11 Ekim 2008 Cumartesi

JavaFX de değişkenler

JavaFX de değişken tanımı: var değişkenismi : değişkentürü = değer; var ogrenci_notu : Integer = 10; şeklindedir. "var" niteleyicisi değişken tanımı yapılacağını belirtir. Değişken türü eğer değişken değeri hemen atanacaksa önemsizdir. var image = Image { url: "{__DIR__}/myPicture.png" } Ancak hemen değer atamayacağınız değişkenlerde değişken tipi belirtilmelidir. var image : Image; ... image.url="http://host.com/myimage.jpg"; Değişken tipleri Integer, Number, String (karakter katarı), Duration, Sequence, fx sınıfı yada java sınıfı olabilir. Özel Duaration değişkeni : Bu değişken özellikle animasyon desteği için eklenmiştir. Fakat illa bu durum için kullanmak zorunlu değildir. var son_tur : Duration=10s var yineleme_zamanı : Duration=10ms var saat=10s Duration fx sınıfı zaman değişkeni için destek sağlar. s= Saniye ms = Milisaniye cinsinden değişken tanımlayabilirsiniz. Sequence: Javaki dizilerin karşılığı olarak görülebilir. Ancak sequenceler bundan daha fazlasıdır. Sequence değişkenleri string, number ve diğer sınıf değişkenleri olabilir. Number tipi sequenceler javafx de bağzı işleri kolaylaştırmak için özel tanımlamalar sağlar.Bu başlıkta sadece tanımlama özelliklerini veriyorum. Bu konuyu ayrıca bir başlıkta daha geniş olarak ele alacağım. String sequence tipine örnek: var yemekler =["Mantar sote", "Fırın tavuk", "Makarna"]; Number sequence tipine örnek: var sayısalloto = [1,4,12,15,23,36,42] var birden_ona_kadar_rakamlar = [1..10] Node sınıfını genişleten elips sınıfının sequence tipi değişkende toplanması: var nodes = [Ellipse{}, Ellipse{}] var nodes = [Ellipse{}, Rectangle{}]

20 Eylül 2008 Cumartesi

JavaFX teknolojisi nedir?!

JavaFX teknolojisi Sun microsystems firmasının RIA (Rich Internet Applications - Zengin Internet Uyugulamaları -) alanında yaptığı bir teknoloji atılımıdır (yatırımı). Teknoloji terimini kullandım çünkü her ne kadar JavaFX bir script dili gibi gözükse de bundan çok ileri bir şeydir. JavaFX script dilinin yanında bu dil kullanılarak yaratılmış bileşenler ve yine bu bileşenleri desteklemek adına işletim sistemine özgü kütüphaneler içerir. JavaFX mobil cihazlar, sınırlı bağlantı içeren mobil cihazlar ve popüler işletim sistemlerinde desteklenmek üzere geliştirilmektedir. JavaFX'in script dili henüz tam oturmuş değil önceki yazımdaki siteden changelogları takip ederseniz yada en güncel kaynak dosyaları incelerseniz v4 de olduğunu görürsünüz. Ancak SDK Preview den anlaşıldığı kadarıyla kolay ve etkin bir dil olacak. JavaFX Java ile aynı yoldan giderek bağzı teknikleri anahtar kelimelerle dil düzeyinde desteklemiş. JavaFX de animasyon için "tween" anahtar kelimesi kullanılması buna güzel bir örnek. JavaFX'in ilginç bir yanı da java sınıflarını direkt kullanabilmesi. Yani script dostanızda import java.io.*; yada import javax.swing.JFrame; kullanarak o sınıfı bir değişkene atayabilir ve sonra özelliklerine ve metotlarına ulaşabilirsiniz. Bu durumda JavaFX Java teknolojilerinin hepsini barındırıyor. Ancak bu tarz da ( Java sınıflarını import ederek) yazılan bir uygulama pek de JavaFX script kullanarak yazılmış olmuyor. Durumu script lehine çevirmek için ( uygulama yazma kolaylığı adına ) Java sınıflarını sarmalıyor ve JavaFX bileşenlerini oluşturuyor. Peki hedef ne?
  1. Multimedia desteği vermek
  2. Hem interaktif hem de şık kullanıcı arayüzleri oluşturmak
  3. JavaFX'in java plug-in'e adapte edilerek internet tabanlı kullanıma açmak
  4. Kolay kullanım
  5. Çok platformluluk
  6. Network tabanlı uygulama
  7. Hızlı ve etkin programlama
  8. Geliştirme ortamı desteği
1. Multimedia desteği JavaFX tarafından desteklenmesindeki en önemli sebep artan internet hızı ve depolama kapasitesi nedeni ile artık uygulamaların video ortamlarını desteklemesi gerekliliği. Bu durum video yayınlama sitelerin artışı ve buna ulaşan programlara olan rağbetle kendini belli ediyor. Javada zaten multimedia desteği yok muydu dersek Java Media Framework (JMF) vardı. Ama popüler codecleri desteklemiyordu. JMF 'de üçüncü parti codec desteği ancak java sınıfları ile yazılmış olmalıydı ( Zahmetli ve güncellik zor sağlanıyor). JMF encoderlerı iyi desteklemiyordu. Çok platformlu değildi. Sadece JavaSE destekli ortamlarda çalışıyordu. Java Media Components (JMC): Platforma bağlı multimedia bileşenlerini (DirectShow, Gstreamer) kullanan doğal kütüphane (jmc.dll, jmc.so gibi) ile java sınıfları arasında iletişim kurularak codec desteğinin büyük bir kısmı platformdan sağlandı (codec desteğinin JavaFX den soyutlanması). Kullanıcının istediği codec'i yüklemesi ve gerekli güncelliği sağlaması kendi elinde oldu ( Lisans Problemleri kullanıcının problemleri haline geldi). Encoding (kodlama) decoding (kodu açma) işlemi çok kolay yapılabilir olacak. Codec' in yerel sistemden sağlanıyor olması durumunda eğer codec destekliyorsa SSE, MMX , çok çekirdekli işlemciden yararlanma , deinterlace v.s. gibi teknolojilerden yararlanmak mümkün . Codecler sisteme kurulu olmasa bile Sun microsystem'in JavaFX'in ileri ki sürümleri için söz verdiği HD ortamları destekleyen hızlı, On2's TrueMotion codeclerinin rahatlıkla kullanımı mümkün olacak 2. JavaFX' de görsel olan herşey bir düğümdür (Node) ve stage denen sahnelerde sunulurlar. Sahne desteği Sun microsystems'in yürüttüğü scenegraph projesiyle destekleniyor. Bu projede herşey birbiri ile ilişkilli birer düğüm zinciri tıpkı html ağacı gibi. Scenegraph görsel efektleride destekliyor. Görsel efektler Decora projesi ile destekli. Decora platforma yönelik donanım hızlandırması için doğal kütüphanelerin yazıldığı proje. Decora efektleri uygularken eğer destekleniyorsa windows ortamalarında hem DirectX9 hemde OpenGL destekli. Linux, Solaris ve MacOSX de ise OpenGL destekli. Bunun yanından sisteme göre SSE veya software (yani işlemci) desteği de var. Efektlerin donanım hızlandırması duruma göre DirectX shader language yada Opengl shader language diline çevrilen ancak henüz ayrıntıları belli olmayan java shader language ( jsl ) dili kullanılarak sağlanıyor. Böylece işlemci zamanı boşa harcanmamış oluyor. Eğer ilgili dosyaları bulamazsa (Decora-D3D.dll, v.s gibi) işlemci devreye giriyor. Hangi sistemin kullanıldığı sorgulanabiliyor. JavaFX de Swing bileşenleri scenegraph tarafından desteklenen çizimler, yine ilerde kavuşacağımız ileri düzey bileşenler (akordiyon menü, görünüşleri değiştirilebilir bileşenler -skinable- v.s) ve JMC tarafından gösterilen media Stage eklenebilir tarzda yazılıyor. Bu durumda stage eklenecek her türlü görsel bileşene ayrı ayrı olmak üzere efekt uygulanabiliniyor. Bu da oldukça şık arayüz tasarımlarının önünü açıyor. Efektler birbiri ardına uygulanabiliniyor. SVG desteği JavaFX SDK Preview de var. 3. JavaFX teknolojisinin son zamanlardaki kaynak kodundaki yapılan değişikliklere baktığımız zaman yansıtma (reflection) uygulandığını ve bunun java plug-in desteği ile alaklı olduğunu ifade eden açıklamalar görüyorum. Böylelikle JavaFX java plug-in le etkileşime girecek. Dolasıyla bu durum tarayıcı ortamı ile iletişim ve applet teknolojisinin canlanması anlamına gelebilir. Ancak bu etkileşimin mimarisi zaman içinde belli olacak. 4. JavaFX javafxc, javafx, javafxdoc adlı çalıştırılabilir dosyalarla geliyor. javafxc bir derleyici. javafx gerekli kütüphane dosyaları ve jar dosyalarının yolunu çalışma yoluna ekleyerek scripti çalıştırıyor. javafxdoc ise isterseniz kaynak dosyalarda kullanılan özel etiketlerle belgeler üretiyor. Ancak javafxdoc bu işi javadocdan çok daha iyi yapıyor. javafxdoc'un ürettiği belgeler html ve xml belgesi olabiliyor. Üretilen belgeler görsel olarak zengin ve interaktif. 5. Yine JavaFX teknolojisinin geliştirme deposunu incelediğimiz zaman Windows, Linux, MacOSX ve Solaris platformlarının desteklenmesi konusunda çalışmalar sürmekte. Fakat JavaFX çok platformluk konusunda javanın girdiği her yere girmeye çalışıyor. Bu bağlamda cep telefonları, cep bilgisayarları, dijital televizyon kutuları (Dijitürk gibi), gelişmiş multimedia ürünleri (Blue-Ray) gibi sınırlı bağlantılı cihazlarla bağlantılı cihazlar dahil pek çok ortamda var olma yolunda ilerleyecek. 6. Tabi ki yine her şey network ve buna JMC dahil. JMC akış (streaming) teknolojisini destekleyecek. RIA için gereken destek verilecek. Hali hazırda JavaFX SDK Preview sürümünde resimlerin direkt networkden indirilmesi mümkün. 7. JavaFX Javanın izinden giderek satırlarca kod yazarak elde ettiğiniz bazı teknikleri anahtar kelimeler ile sağlamış bulunuyor. Örneğin bir bileşenin ekranda artan ve azalan şekilde parlaması için ilk önce ilgili efekti uyguluyorsunuz. Sonra uyguladığınız efektin etki derecesini arttırıp azaltarak animasyonu elde ediyorsunuz. Normal de sadece bu işlem satırlarca kod yazmayı gerektirir. Birde değer tipi çok çeşitli olsun dersen ( Tamsayı -Integer-, Noktalı sayı -Float-) kod satırı sayısı iyce büyür. JavaFX de "tween, bind" anahtar kelimeleri ile "=>" operatörü yeterli desteği sağlıyor. Dizilere alternatif olarak sequence değişkenleri var. Sequence değişkenlerine özel operatörler ve anahtar kelimeler dizi oluşturma eleman ekleme çıkartma işini kolaylaştırıyor. JavaFX script ilk önceleri interpreter olarak tasarlanmıştı. Ancak performans endişeleri python gibi script dillerinde olduğu gibi JavaFX script dosyalarını yorumlayıp derleyerek java sınıfı karşılıklarına çeviriyor. 8.JavaFX geliştirme ortamı olarak Netbeans üzerinde JavaFX plug-in kullanıyor. JavaFX SDK Preview ile beraber çıkmış olan bu plug-in henüz basit bir destekden ibaret. Basit destek dediysek tabi ki debug, profiler paletden sürükle bırak kode klipleri ve parser desteği var. Fakat parser, otamatik tamamlama, otomatik import hanüz iyi çalışmıyor. Büyük ihtimalle bu konuda da kapalı kapılar ardında çalışmalar sürüyor. Ancak Sun microsystems Swing tabanlı uygulama inşahasında kullanılanan matise benzer bir ortam sağlıyacak ve bu ortam flash programına pek benzemeyecek.Çünkü Sun microsystemse göre bu web programcılığı tarzında bir destekden ibaret. Diğer yandan sanatsal destek JavaFX SDK Preview Project Nile adı altında grafik programları ile (Adobe Photoshop ve Illustrator) görsel öğelerin JavaFX de kullanılması için SVG formatında plug-in düzeyinde destek veriyor. Bu destek linux tabanlı ortamlar için varda denemez yok da denemez. Çünkü linux ortamındaki grafik programları SVG yi zaten destekliyor. Project Nile dosyalarının exe olduğuna bakmayın jar dosyalarıda çalışıyor. Bu durum linux ortamında da geçerli. Inkspace ile yarattığınız çizimleri düz SVG dosyası olarak kayıt edin ama türkçe karakter kullanmayın. SVG converter ile çizimlerinizi fx dosyalarına çevirebilirsiniz. Peki tüm bunlarla neler yapılabilir: Henüz dosya sistemine erişim script düzeyinde yok ama yine de scriptin sınıflara erişimi ile desteği kendiniz oluşturabilirsiniz. Bu durumda az sayıda kod yazarak mp3 çalar video oynatıcı yazabilirsiniz. JMC bileşeni bir node sınıfını genişletir. Bu durumda oynatdığınız filme tek satır kod ile efekt (siyah beyaz) ekleyebilirsiniz. Efektleri arka arkaya sıralayarak daha fazla efektle daha ilginç şeyler yapabilirsiniz. Skin özelliği eklenince oynatıcınıza istediğiniz skinleri üretebileceksiniz. Kendi bileşenlerinizi yaratabilirsiniz. Node sistemi nedir ve bizim için önemi ne olabilir: Node (düğüm) sistemi tek bir sahne (stage) üzerine pek çok birleşen eklemek üzerine geliştirilmiştir. Kendi özel düğümlerinizi yaratabilirsiniz. Örneğin bir basit bir araba çizmek için CustomNode sınıfını kullanarak siyah bir daire ve içine daha küçük beyaz bir daire çizerek bir teker oluşturursunuz. Artık her sınıf örneğinizde bir tekerleğiniz var. İki tekeri oluşturup bunu Grup sınıfı ile tek bir node haline getirebilirsiniz. Geometrik öğelerin kesişimlerini alabilir, birbirinden çıkarabilir, ekleyebilirsiniz. Bir görselin (swing, Media viewer, SVG, resim, kare, daire, v.s) node olarak sarmalanması demek tüm nodların sahip olduğu özelliklere sahip olması demektir. Bu özellikler
  1. Mouse ve klavye olaylarını alabilmek yada almamayı tercih etmek
  2. Efektlerin uygulanabilmesi
  3. Öteleme (translate)
  4. Bükme (shear)
  5. Çevirme (Rotate) ve belirli bir noktadan çevirme
  6. Transformasyon (öteleme, bükme ve çevirme işlemlerinin bir arada uygulanması)
  7. Saydamlık(Opacity)
  8. Daha hızlı çizim için ön bellekleme (cache)
  9. Ebeveyn tespiti
  10. Düğüme kimlik (id) ataması
  11. Görünülük (Visibility)
  12. Diğer düğümlerin önüne alma gerisine atma
  13. Kırma (Clip) ve kırpma yumuşatma
Önbellekleme çizimi geçici bir dizinde resim olarak saklamaya dayanır eğer çizimde değişiklik olursa ön bellek güncellenir. Sık değişmeyen öğelerde performans sağlar. Kimlik (id) özelliği ilgili node (düğüme) hızlı ve emin ulaşım sağlar. İlginç olan photoshop ve illustrator eklentileri katman isimlerini düğüm isimlerine atayarak her katmandaki SVG çiziminin ayrı tutulmasını ve ulaşımını kolaylaştırır. JavaFX'in geliştirildiği depodan indirdiğimiz kaynaklara ve changeloglara (yapılan değişiklikler günlüğü) bakacak olursak bütün her şeyin düğüm uzayına geçirilmek için çalışıldığına dair notlara rastlıyoruz. Eğer bu yapılırsa windows xp de olduğu gibi kapatma durumunda ekranın kararması gibi bizde program penceresinin kararmasını sağlayabiliriz. Artık günümüz kullanıcıları kullandığı programların zaten görsel yönden zengin olması taraftarılar. Bu durumdan dolayıdır ki RIA terimi ortaya çıkmıştır. Aslında JavaFX script olmadan da şu anda efektleri, stageleri, nodeları, grupları, geometrik çizimleri kullanabilirsiniz. Çünkü tüm bunlar açık kaynak kodlu olarak geliştirilen scenegraph ve decora projelerinden sağlanıyor. Örneğin decora kullanarak resim dosyalarınıza JavaFX olamada da efekt uygulayabilirsiniz. Efektler dedik ama hangi efektler kullanıma hazır olarak geliyor.
  1. Karıştırma (Blend) : İki resmi karıştıma moduna göre (BlendMode) bir birleriyle karıştırır. Photoshop, Gimp gibi fotoğraf editörleri ile benzer şekilde çalışır.
  2. Bloom : Bu efekt resmin beyaz öğlerinin parlamasını sağlar.
  3. Renk ayarlama (Color Adjust) : Parlaklık, doygunluk, renk değerlerini ayarlama imkanı sağlar
  4. Displacement map : Bu efekt aslında oldukça güçlü bir efekt. Yerdeğiştirme efekti ediğimiz bu efekt FloatMap denen bir haritaya ihtiyaç duyuyor. FloatMap adından da anlaşılacağı gibi noktalı rakamlardan (Float) oluşan bir dizi. FloatMap içerisindeki sayılar resim üzerindeki ilgili piksellerin yer değiştirmesini etkiler. FloatMap için bir genişlik ve yükseklik bilgisi verilmesi gerekir. Genellikle harita büyüklüğü resim büyüklüğüyle aynıdır. Bu da bu efekti oldukça güçlü yapar.
  5. Gölge ekle (Drop Shadow) : Gölge ekle efekti için gölgenin uzaklığını, rengini, gölgenin bulanıklığını ayarlamanıza izin verir.
  6. Flood (türkçesini bende bilmiyorum) : Bu efekt sadece bir dikdörtgen çizer ve içini istediğiniz bir renk yada gradient ile doldurur.
  7. Gaussian bulanıklığı (Gaussian Blur) : Gaussian tekniği ile bulanıklaştırma sağlayan bir efekt
  8. Parlatma (Glow) : Uygulandığı öğede parlak alanlar yaratır. Bloom dan pek farkını göremedim.
  9. İç Gölge (InnerShadow) : Gölgeyi kenarlardan uzağa değilde kenarlardan içeri doğru yerleştirir.
  10. Maskeyi Ters Çevir (InvertMask) : Eğer resiminizin bir alfa kanalı varsa bunu tersine çevirir. Bu durumda resmin saydam kısımları opak opak kısımları saydam hale gelecektir.
  11. Işıklandırma (Lighting) : İşte bir gelişmiş efekt daha. Bu efektle özellikle grafik ve yazılara ışıklandırma ile birlikte 3D efekt etkisi yaratabilirsiniz.
  12. Hareket bulanıklığı (MotionBlur) : Adı üzerinde hareket eden cisimlerin içerisinden bakarken gördüğümüz bulanıklaşması ile aynı etkiye neden olur.
  13. Perspektif Değişimleri (PerspectiveTransform) : Evet bir sağlam efekte bu efekt. Bu efekte en iyi örnek vistada programlar arasında geçiş yapmak için kullanılan efektdir. Bu resimlere özel olarak perspektif vermek için dört köşesinin koordinatalarını ayarlamanıza izin verir. Bu durumda sol köşeler normal konumlarındayken sağ köşeler ortaya doğru ve birbirlerine yakın konumlandırılınca resim yan duruyormuş gibi görünür bu da 3D efekti yaratır. Ama siz böyle yapmak zorunda değilsiniz. Eğer isterseniz köşeleri ters çevirerek resmi ters-yüz de edebilirsiniz.
  14. Yansıma (Reflection) : Bu efekt resmin altında yansıma oluşturur. Yansımanın resmin alt kenarına uzaklığını, alt ve üst kenarının saydamlığını ve saydamlaşmanın başlangıç hattını belirleyebilirsiniz.
  15. Eski fotoğraf tonu (SepiaTone) : Adı üzerinde resmin eski fotoğraflarda olduğu gibi kahverengimsi bir görünüm kazanmasına neden olur.
Şimdilik bu kadar ama aklıma geldikçe bir şeyler eklemeyi düşünüyorum. Hatta zamanım oldukça kod örnekleride yayınlayacağım.

13 Eylül 2008 Cumartesi

JavaFX Decora ve Scenegraph linux'te

JavaFX için linux versiyonu donanım hızlandırması ile birlikte şu adreste: http://openjfx.java.sun.com/hudson/job/jfx-scenegraph/label=linux-i586/ Bütün JavaFX çalışmaları ise burada: http://openjfx.java.sun.com/hudson/

5 Haziran 2008 Perşembe

VAyyy!! Pardus Naber

Sana diyom beta olan 2008 olan memleketimin el emeği göz nuru, yerli malı haftasında "kapat windows'u aç pardus'u kızdırmayın l.n beni" dedirten kurcalanası,hatası,eksiği gediği bildirilesi pardus beta 2008 hoj geldin!!!! -Hoj bulduk yeğenim. -Aha konuştu. Vay be bayağı geliştirmişler :-)))

Programlama dili nedir ki(ne)?!

Önceki yazımı yayınladıktan birkaç saniye sonra hemen başlayayım dedim programlama ile ilgili yazmaya. İlk önce program yazmayı merakeden yada bilgisayarı bir deney aracı bir uğraş haline getiren pek çok insanın hemen aklına gelen şu basit soruyu cevaplamaya çalışmak istiyorum:Programlama dili nedir (aslında ilk soru "Bu programlar-oyunlar- nasıl yapılıyor ki yahu" dur.) neden vardır? Aslında programlama dili sihirli bişey değildir. Hatta hepsi aynı şeydir (Durun yahu hemen itiraz etmeyin tamam sizde birşeyler biliyorsunuz).Yani hepsi bilgisayara birşeyler yaptırtır. Yaptırtır yaptırmasına da ama nasıl yaptırtır ki(ne)? Şimdi ilk önce ayrıntıya girmeden şu an ekranına baktığımız şeyi işletim sistemiyle, işlemcisiyle, ekran kartıyla, hafızasıyla, disk sürücüsü ile bi bütün olarak yani bilgisayar olarak ele alalım.Bu kabullenme ile program yazan insan bu bilgisayara bir şeyler yaptırtacak ama onla nasıl iletişim kuracak. Yani derdini nasıl anlatacak? Anlatmak için kullandığı şey ne olacak? Eğer o bir insan olsaydı konuşarak anlaşırdık ama o bir insan değil! Hadi insan diyelim ama türk değil o zaman onla aynı dili konuşmanız gerekir yada bir tercuman tutarsınız o anlatır derdinizi.İşte o tercumana programcı bir şeyler söyler "iki düğme oluştur düğmenin birinde TAMAM yazsın diğerinde İPTAL yazsın TAMAMI tıklayınca AYARLARI kaydet İPTALİ tıklayınca bir şey yapmadan çık v.s." tercumanda bilgisayara şöyle söyler: "101011110101010111110101010101010001010101011111010 1010101010100011111101010101010101111010101011110101 1010101010101000101010101111101001011110101010111110 0101111010101011111010101010101000101010101111101011 010101010100010101010111110100101111010101011111010" . Şimdi siz olsanız tercumanı aradan kaldırmak istermisiniz? Şahsen ben hiç istemem. Peki neden sadece bir tek programlama dili yok? Aslında ilk başlarda varmış ve adıda assemblymiş(Bir varmış bir yokmuş gibi oldu!).Fakat hiç düşündünüzmü dünya üzerindeki konuşulan her dilin kendine göre avantaj ve dezavantajları var. Doğal olarak insanlar kendi dili dışında dil öğrenme ihtiyacı duydukları zaman bu dez/avantajları göz önünde bulundurur.Örneğin fransızca öğrenmeyi denemeye kalksak ne olur. Bildiğim kadarıyla fransızlar her nesneye hatta hayvana dişi-erkek kavramıyla yaklaşıyorlar(Kedi dişi masa nonoş v.s. :)) ). Bu da fransızca öğrenmek işi bayağı karmaşık olacak demek. Öteki taraftan dünyanın en nazik dili olarak geçiyor ve etkili bir romantizim yaratıyor.Bu bağlamda assemblyde fransızca gibi. Yukardaki örnek de olduğu gibi assembly 1 ve 0 larla konuşmaktan bir adım uzak sadece. Ama öteki yandan yazdığınız programın performansı için oldukça iyi bir dil. Şu bilgiyi hemen vermek istiyorum.Makina diline (yani bizim için bilgisayar dili) yakın olan dillere düşük seviye diller (low-level language) insan konuşmasına benzeyen yani "eğer şu yoksa bunu al o da yoksa geri dön şunu yap" şeklindeki dillere yüksek seviye (high-level language) denir. Derleyici -Compiler-?! (Af buyur o ne yav annem gibi bişey mi ortalığı toplayan falan :))) Eh madem biz bu bilgisayarla aynı dilde hiç konuşmadık bu adama nasıl söz geçiriyoruz? Şöyle ki hemen her programlama dilinde komutlar (bilgisayara emir vermek için kullandığımız dilin sözcükleri anlamında kullanıyorum) düz yazı ile yazılır (içinde yazı karakteri, büyüklüğü, rengi gibi bilgiler taşımayan sadece "abvds" gibi harfler bulunan dosyaya düz yazı dosyası denir.) ve bu yazı dosyası derleyiciye verilir. Derleyici dosyayı okur ve bilgisayarın anlayacağı dile çevirir. Böylece programımız üretilmiş olur. Bu bağlamda derleyici bizim tercümanımızdır. Komut kelimesi yanlış anlaşılmasın. Komut çoğu zaman bilgisayardaki tıklayacağınız bir düğmesi olmayan klavye ile yazarak isteğimizi belirttiğimiz programlardır." del foto.jpg " komutu foto.jpg'yi siler ve del bir programdır fare ile tıklayacağınız bir öğesi bulunmaz.Komut satırından emirlerimizi bilgisayara iletiriz. Sonuç: Yazımın sonunda size şunları anlatmaya çalıştım:
  1. Programlama dili nedir neden gereklidir? -Bilgisayara derdini anlatan programcı dilidir.
  2. Programlama dili ile bilgisayara derdimizi anlatan kimdir. -Derleyici yada yorumlayıcı(yorumlayıcı için daha erken ama anlatacam onu da elbet).
  3. Madem ben bilgisayarıma doğrudan bişey anlatamıyorum o zaman uygun bir dil ile mi anlatacağım derdimi? -Evet aynen öyle
  4. E o zaman ben gidip bir programlama dili mi öğreneyim? Evet bu da doğru ama...
  5. Bu kadar mı şimdi! -Hayır devamı gelecek tabi :))
  6. Programcı büyüklerimize saygı onlardan da bize sevgi arz ediyoruz.(Yav adam bizden büyük yada küçük ama o yazıyor e biz kullanıyoruz. Mesela Pardus'u yazıyor. Firefox'u çeviriyor zembereği yazıyor. E biz de yeni yeni programlama ile ilgili birşeyler öğreniyoruz o zaman kavga etmek, kırılmak, kırıcı eleştiri yapmak karşılıklı olarak yok! <:))
Şunları ise henüz anlatmadım:
  1. Programlama dili öğrenmek kolaydır denir. -"İyi de ben geri zekalımıyım değişken, fonksiyon, nesne, örnek nedir hiç bişey anlamamıştım". Aslında geri zekalı değilsin sadece sen araştırmaya kalktığın zaman televizyon programlarında ki Prof.Dr. XXXX gibi "Efendim karsinomların iki çeşiti vardır malign ve selim malign olanların hemidesmazomları........." şeklinde konuşan yazarlarla karşılaşıyorsun o kadar. Ben de senin mahallenin çocuğu olduğum için sana sahip çıkmaya çalışıyorum.(Bu arada o insanları yadırgamayın tüm dünyaları bu olmuş olabilir ve sanki sizde onlardan ve o dünyadanmış gibi zanedebilirler ama siz de onlar sayesinde msn, internet, google gibi şeyleri kullanıyorsunuz ve hala onlar bunu size aşılamaya çalışıyorlar. Sonuçta aziz insanlar onlar)
  2. Programlama dilleri dışında daha kolay olan programlama dilcikleri var.(javascript,php v.s)
  3. Düşük seviye programlama ile yüksek seviye programlam nedir niye var? -Niye Arapça, Türkçe, İngilizce, Ugandaca var?
  4. Benim aklıma gelmeyen ama sizin aklınızda olan pek çok şey var! - E yaz bana o zaman abi biliyosan söyle şu ne diye. Ben de biliyorsam söyleyeyim sölemezsem de Bill GATES gibi olayım (Büyük yemin ettim bak).
Sürçü lisan ettiysek affola :))))

Programlama nedir diyorsan yamacıma gel

Hemen kabul ediyorum ki bu yazı tamamen ordan burdan okuyarak araştırarak programlamayı öğrenmiş fakat java programlama dilini 9 yıldır takip eden onla oynayan, parka giden, beraber yatan, beraber kahvaltı yapan, amatör, bu konuda akademik bilgi almamış (yani bilgisayar müh. de okumamış) bi tipim. Dolayısı ile bana güvenmek zorunda değilsiniz ve evet elbette ki bu işin sağlam eğitimini almış okuluna gitmiş bir insan olarak bazı insanlar benden çok iyi biliyordur bu konuları (kısaca bu insanlar bizi rahat bıraksın lütfen çünkü bu yazının amacı başka!! neyse sakinim ben, sakin olmalıyım). İşte bu kabullenmeden sonra birkaç tane günlük yazım olacak.Bu yazılar benim gibi programlamanın p'sini bilmeyen "donanımdan biraz çakarım o da hangi kartı nereye takacağım kadar" diyen sınıfa hitap edecek(Merak etmeyin şu an da bunlardan çok çok fazlasını biliyorum ama ilk başladığımda bu kadar biliyordum).

23 Mayıs 2008 Cuma

Türkçeleştirin şu yabancı kelimeleri

Açıkçası bu benim ilk günlüğüm ve türkçem berbat. Kısaca başlıkla anlatmak istediğimi anlatayım. Şimdi bu bizim Türk Dil Kurumu yabancı kelimeleri türkçeleştirmeye çalışıyorlar ya işte orda bir şeyi yanlış yapıyorlar anladığım kadarıyla.Mesela adamlar "yes" kelimesini türkçeye çevirecekler ya şöyle çeviriyorlar "ben seni doğruluyorum." yada "cam: içinden ışığı olduğu gibi geçiren cisim" gibi.Yani insanlara şunu diyorlar siz gidin kelime kullanmayın herşeyi açıklayın ömrünüzün diğer yarısını tanımlamalarla geçirin.Ama öbür tarafdan biraz da kendimizi eleştirelim.BilgiSAYAR ne kadar komik bir laf yahu. - Abi bizim kardeş illa bilgisayar istiyo bu yaşta ya! - Eee çocuk küçük olduğu için bilgileri saymakda zorlanıyor.Huhuhaha Yahu bilgi sayılır mı yaw!? E bak öyle yada böyle saçma ama değil çatır çutur kullanıyoruz işte.Peki neden bu psikoloji var bizde.Şöyle ki estağfurullah (Umarım doğru yazmışımdır) günümüzde anlamının tam zıttına kullanılıyor.Çünkü artık anlamını değiştirmiş.BilgiSAYAR da anlamını yitirmiş iki kelimenin birleştirilmiş halini bile ifade etmiyor.Kısacası kelime evrimi diye bişey var. Yani inatla bazı kelimeler seçsek onları tartışma sitelerinde(Forumlar) günlüklerde (Bloglar) kullansak yeni yetişen nesil bu isimlerle öğrenecek yine bu camiayı.Kısacası BilgiSAYAR lafına bizim gibi gücenmeyecek öyle alışacak.Kompüter diyen ve çokça kullanan kaç insan tanıyorsunuz. Son bir fikir daha:Tartışma siteleri(forumlar) kaynak kodlarında bazı değişiklikler yaparak leptop gibi kelimelerin yerine dizüstü kelimesiyle değiştirebilir yada yazarı bu konuda uyarabilir. İlk günlükten bu kadar.Sürçü lisan ettiysem af ola!!! Bu arada bozuk türkçe ve imla hatalarımı düzelten kız arkadaşım filize de teşekkürler(Kendisi türk dil kurumunun peşime düşmesinden korkuyor heralde).