Python İle Java Applet'i Yazmak Caiz Midir?

0
pismikrop
'One Ring to rull them all, one Ring to find them, one Ring to bring them all and in the Darkness bind them' (Tolkien)

İşte bu yüzük bir programlama dili olsaydı; şüphesiz o python olurdu. Python ile java, .NET, PE (Portable Executable) programlar oluşturabilirsiniz. Zaten yazdığınız kod hiçbir değişikliğer uğramadan. Linux, Mac ve Windows'ta çalışabilmektedir. Linux ise ARM, SPARC, Intel, AMD, PowerPC gibi bir çok işlemcide çalışabildiğine göre varın gerisini siz düşünün.
Python ile yazdığımız uygulamayı nasıl java bytecode'ları ile çalışabilecek hale getirebiliriz?
import java.applet.Applet;
import java.awt.Graphics;

public class HelloWorld extends Applet {
    public void paint(Graphics g) {
        g.drawString("Hello world!", 50, 25);
    }
}
Bu tahmin edeceğiniz üzere "merhaba dünya" java applet'imiz Derleme işlemimiz kısaca şöyle (Tabi Java SDK'sının kurulu olması gerekli).
$ javac HelloWorld.java
from java.applet import Applet

class HelloWorld(Applet):
    def paint(self, g):
        g.drawString("Hello from Jython!", 20, 30)
Bu da aynı uygulamanın python eşdeğeri, bir başka ifade ile jython eş değeri. jython'da derleme sonucu .jar arşivleri oluşturuyoruz. Çünkü gereken python dönüştürücüsünün (adapter) arşive eklenmesi gerekmekte.
$ jythonc --deep --core --jar HelloWorld.jar HelloWorld.py
Eğer programımız applet değilde swing, awt veya console programı olsaydı
$ java HelloWorld
Şeklinde çalıştırabilirdik. Fakat java bytecode'larına derlenen appletleri html içine gömüp çalıştırabiliriz.
<html>
 <head></head>
 <body>
  Java ile yazılıp javac ile derlenmiş applet:<br>
  <applet code="HelloWorld.class" width="200" height="50"></applet><br>
  Jython ile yazılıp jythonc ile derlenmiş applet:<br>
  <applet code="HelloWorld.class" archive="HelloWorld.jar" width="200" 
   height="50">
  </applet>
 </body>
</html>

Gömülü html dosyasını
$ appletviewer test.html
Şeklinde veya doğrudan tarayıcınız ile test.html dosyasına erişerek deneyebilirsiniz. Ancak.... jython kullanıyorsanız kodu derlemeden de deneyebilirsiniz. Bütün python uygulamalarında olduğu gibi. jython tercümanı derlemeye gerek duymaz. Bu nedenle ufak bir kaç ek kod ile derlemeden de jython appletimizi görebiliriz.
from java.applet import Applet
import sys

class HelloDirect(Applet):
    def paint(self, g):
        g.drawString("Hello from Jython %s!" % sys.version, 20, 30)


if __name__ == '__main__':
    import pawt
    pawt.test(HelloDirect())
Burada __name__ değişkeni __main__ katarına eşitse yani jython betiği doğrudan çalıştırılıyorsa, betik kendi kendini test eder. Normal jython betiklerini çalıştırdığımız gibi betiği deneyebiliriz.
$ jython HelloWorld.py
bol jython'lu günler :)

Uygulamanın kodlarını http://firat.kucuk.org/jython/ adresinden temin edebilirsiniz.


Orjinal makaleyi ise http://firat.kucuk.org/blog/index.php?p=5&more=1 adresinden temin edebilirsiniz.

Görüşler

0
Geryon
Caiz değildir.
Caiz olmadığını düşünmemin temelinde şu sebep var.
mesela gcc linux'un yegâne derlyicisi linux için üretliği koldara pek diyecek yok.
Ama windows'a geçtiğinde(PE takıldığında) dünyanın en rezil derleyicisi konumuna düşüyor. üretdiği kodlar tek kelime ile rezalet... hani linux'un tek gücü nerede ?

Sevgili yılanımızın başınada böyle bir olay gelebilir. üretdiği java kodları ne alemde ? SUN derleyicisi gibi mi ? yoksa windows'a geçmiş gcc tadındamı ?



0
pismikrop
mozilla firefox'un da gcc ile derlendiğini unutma bence.
0
Geryon
Demek istediğinizi anlayabilmiş değilim.
Derleyicinin yetersizliği ile firefox'un ne ilgisi var ?
0
pismikrop
yani gcc'e yaptığınız ağır bir eleştri demek istedim. gcc windows ortamında da son derece başarılıdır. Eğer elinizde ciddi sayısal veriler varsa bu konuda bir makale yazıp fazlamesai ile paylaşırsanız bizi aydınlatmış olursunuz.
0
Geryon
İdeal bir "Standart Call" şöyledir
push 0
push 0
push offset szMsg ;szMsg="Hello World"
;szMsg bizim initalized data section'umuzda
push 0
call MessageBoxA

Fakat windows için uydurulmuş gcc ise şöyle yapıyor -O2
(adam data section kullanmıyor :))
sub esp,hello world uzunluğu+4*4
mov [esp+....],'lleh'
mov [esp+....],' row'
mov [esp+....],'l'
mov [esp+....],0
mov [esp+....],0
lea eax,[esp+....] ;EAX=Hello World'e başlağımız nokta
mov [esp+....],eax
mov [esp+....],0
call MessageBoxA
add esp,sadece "Hello World" uzunluğu

bu ki çok temel bir anomali daha sürü ile var
cdecl den çıka stdcall bu kadar oluyor


0
abakana
Sanırım gcc ile jython u kıyaslamanın pek bi manası yok. Zira sonuçta çıkan mamülü bir vm işletecek. Daha çok olay vm de bitecek.

Fırat Firefox u açar mısın? Yani firefox içinde jython ile hazırlanmış Java birimleri mi var? Bunlar alışılagelmiş yöntemlerle hazırlansaydı nolurdu?
0
bio
Zira sonuçta çıkan mamülü bir vm işletecek. Daha çok olay vm de bitecek.

Olur mu hic oyle sey? VM dediginiz sey de bir anlamda sizin mikroislemcinizin (mesela x86) bir baska mikroislemciyi (Java) taklit etmesidir. Her ne kadar modern JVM'ler HotSpot falan gibi runtime optimizasyon islerine girseler de, bytecode derleyici ne kadar iyiyse, calisan programin performansi da o kadar iyi olur.
0
robertosmix
Caizdir.. Ancak burada python'un övülecek bir tarafı yok. Python kendinden bahsetmek için JAVA'ya yada .NET'e ihtiyaç duyuyorsa (ki bence duyuyor) çok da bahsedilecek bir yanı yoktur diyebiliriz.

Zaten yazdığınız kod hiçbir değişikliğer uğramadan. Linux, Mac ve Windows'ta çalışabilmektedir. Linux ise ARM, SPARC, Intel, AMD, PowerPC gibi bir çok işlemcide çalışabildiğine göre varın gerisini siz düşünün.

Bu pyhton'un değil JAVA'nın getirdiği bir avantajdır. Python ile uzaktan yada yakından hiç bir alakası yoktur.

Hem sormazlarmı ki.. python bir canavar idi de neden jython'a ihtiyaç duyuldu?

Yanıtı basit, python.. basit bir scripting dilinden çok da fazla birşey değildir. Zaten pythonun geliştirilme amacı da ""scripting !!""

Ha şimdi burda eminim ki gücenen Python aleyhtarı arkadaşlarım olacaktır.. Onlar sakın alınmasınlar... tam tersine python ile şaheser yaratmanın JAVA da yaratmakdan daha zor olduğu gerçeği ortadayken.. onların kral olduklarını kabul etmek gerekiyor. Hayır pythonla uykusuz geceler geçireceklerine biraz JNI ve bir tutam zencefil ile harikalar yaratabilirler?

Saygılarımla..
0
tongucyumruk
Bir bakalım, Java ile geliştirilen birçok özgür yazılım var. Birçok özgür kütüphane var. Daha özelde konuşmak gerekirse Java konusunda Apache Foundation tarafıondan geliştirilmiş oldukça güzel kütüphaneler var. Ben Java bilmiyorum, öğrenmeye de niyetim yok. Ancak bir gün bir bakıyorum X işini yapan çok güzel bir kütüphane var Java için ben ne yapıyorum? Ne yapacağım herhangi bir günde yazdığım gibi Python kodumu yazıyorum, Sonra bunu her zamanki Python yorumlayıcım ile değilde jython ile çalıştırıyorum ve Voila! Java'nın bütün nimetlerine Python üzerinden erişebiliyorum. Üstelik bir tek satır Java kasmadan. Üstelik java'nın çalıştığı her platformda.

Ertesi gün canım .Net ile yazılmış bir kütüphaneyi kullanmak istiyor. Süreç yine aynı. Yine kodumu yazıyorum, yine Python'la yazıyorum. İstediğim .Net kütüphanelerini kullanıyorum. Programımı bu seferde IronPython yorumlayıcısı ile çalıştırıyorum. Voila. Çalışıyor. Acaba Python'a slogan olarak "It just works" gibi birşey mi seçmeli diye düşünüp yoluma devam ediyorum.

3. Gün Programımın Java veya .Net gibi özgür olmayan platformlara bağımlı olmasından sıkılıyorum. Kodumu değiştirmek zor geliyor. Ben de C ile şu anda kullandığım Python API'lerini C ile yazılmış kütüphanelere bağlayan bir modül yazıyorum, fazla vakit almıyor. Kodumu hiç değiştirmiyorum. O da ne! Neredeyse bir C derleyicisi olan her platformda çalışıyor. Sanırım bu bir mucize...

Python Zope gibi dev uygulamalar yazılmasına izin verecek kadar gelişmiş, fonksiyonel, prosedürel, nesne yönelimli programlama metodolojilerini içinde barındıran çok güçlü bir betik dilidir. Java, .Net gibi platformlar veya C gibi aşağı yukarı günümüzdeki her işletim sisteminde standart diyebileceğimiz bir dille kolayca bağ kurabiliyor olması Python'un güçsüzlüğünü göstermez. Gösterir diyenlere itinayla: It's not a bug, it's a feature denilir...
0
robertosmix
Bence "It just works" sloganı Jython ve IronPython için geçerli. Ve onlarda JAVA ve .NET ortamlarında geliştirilmişler.

3. Gün Programımın Java veya .Net gibi özgür olmayan platformlara bağımlı olmasından sıkılıyorum.

Hadi MONO'dan haberdar değilsiniz diyelim. GCJ ve GNU Classpath projelerinden hiç mi haberiniz yok? Özgür yığınla VM'i saymıyorum. Hepsini geçtik.. Diablo, Blackdown ve IBM 'in jdk'ları zaten yeteri kadar özgür. Sun önümüzdeki aylarda bütün JAVA kitaplıklarını ve derleyicilerini tamamen özgür kılacak.. bundan da mı haberiniz yok? E o zaman.. Voila!

Yorumsuz

IronPython ana sayfasından:
"At Microsoft I plan to continue the work that I've begun with IronPython to bring the power and simplicity of dynamic/scripting languages to the CLR"


Buda jython'un ana sayfasından
" Jython is an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform."

Eh daha diyecek birşey de yok zaten!
0
lifesdkver0_1
başta zaten java bilinmemesi gibi bir varsayımla hareket ediliyor. dolayısıyla java tabanlı özgür çözümlerin pek bir manası yok.

kaldı ki, jython gibi bir yapı sadece python programcıları için faydalı değil. birim test yazmak veya hızlıdan kod prototipi üretmek için güzel bir araç. yeri geldiğinde

MyClass instance = (MyClass)list.get(2);
yerine
instance = list[2] yazabilmek neden kötü olsun ki?

python'u küçümsemek ise, gülüp geçilecek bir davranıştan başka bir şey değil.
0
robertosmix
python'u küçümsemek ise, gülüp geçilecek bir davranıştan başka bir şey değil.

Değil python'u Microfocus Cobol 2.0'ı yada VBScript'i hatta gwbasic'i bile küçümsememeliyiz. İşin sırrı genelde dilde değil dili kullanan "nerd" lerde.
0
pismikrop
Python son derece güçlü bir dildir. Java ve Mono'da öyle Redhat'ın çoğu yapılandırma aracı, anaconda ve python.org'da yazılana göre google'ın bir kısmı python ile yazılmıştır.

Python ile java, .NET, C kodu yazmak python'un esnekliğini gösterir.

Ben şahsen kendi öğrencilerime nesne modelli olarak 3 dil tavsiye ediyorum. Python, Java, C#.

"written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform."

Jython'u kurduğunuzda gelen çoğu kütüphane python'a aittir ama cross platform mantığını sağlamak için elbetteki Java derleyicisini kullancaktır.
0
lifesdkver0_1
hangi dille olursa olsun, (çok çok gerekli değilse) applet yazmak ve bunu sitenize gömmek, ziyaretçinize işkence etmekten başka bir şey değildir.
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Günümüzde Bir Rönesans Adamı (mümkün mü?)

FZ

Öyle bir adam düşünün ki hem matematikle, hem bilgisayar bilimleri ile hem yapay zekâ ile hem mimarlıkla (!) hem müzik besteciliği ile hem ressamlıkla hem heykeltraşlıkla hem de... uff, ben yazarken yoruldum adam uğraşırken yorulmamış galiba.

Profesör Michael Leyton işte böyle bir adam. Profesörün 1987 yılında geliştirmiş olduğu "Process Grammars" teorisi şu anda şekil tanımlamak için radyoloji, bilgisayar, görüntüleri, linguistik, adli tıp, kimyasal süreçler, arkeoloji, vs. alanlarında kullanılıyor. Profesörün teorisi şu probleme dair: Bir şeklin şimdiki durumuna bakarak onun tarihçesini okuyabilir misiniz? Mesela bir tümörün şu anki şekline bakarak hangi aşamalardan geçtiğini nasıl anlarsınız? Ya da bir tasarımın son haline bakarak o tasarımı üretmiş olan şekil dönüşümlerini sayabilir misiniz?

Pazar Günü Haberleri

anonim

Siz de bir pazar günü bilgisayarınızın başına geçip FM'yi açtıysanız ve tam da "Ben yokken neler olmuş acaba dünyada " diye düşünüyorsanız, buyurun haber turumuza katılın...

Güzel bir araba (Quicktime ile IP üzerinden canlı yayın)

anonim

Bilişim 2001`i gezerken gözüme 2 şey takıldı: 1`ncisi Türkiye`de özellikle IT sektöründe kriz filan yok, adamlar ucuza eleman çalıştırmak (ya da işten adam atmak) için krizi bahane ediyor, 2`ncisi ise bir araba, bu araba gerçekten ilginç idi, bir canlı yayın arabası idi arabanın diğer TV`lerdeki canlı yayın araçlarından tek farkı bu araba IP yani internet protokolü üzerinden canlı yayın yapıyordu. Biraz inceledim ve detaylı bilgi sahibi olmaya calıştım ve hayretler içinde kaldım, neden mi fikir acayip güzel ve hiç de zor bir olay değildi yani böyle bir araba yapmak öyle çok büyük teknik bilgi gerektirmiyordu.

Yazılım mühendisliği mühendislik midir? Hacker mantalitesi nerede patlar?

FZ

Geçenlerde (en altta linkini verdiğim) bir sunum izledim. Tanıdığım pek çok yazılımcıyı ve yöneticiyi sandalyeye zincirleyip o sunumdaki her sayfayı, her sözcüğü onlara tane tane okutturmak, birkaç kez yüksek sesle tekrar ettirmek istiyorum.

Yazılım mühendisliği mühendislik midir?

Yazılım, çok akıllı bir ya da birkaç adamın odaya kapanıp harala gürele kod yazıp sonra da “bakın süper program çıktı ortaya, acayip sofistike işler yapıyor” dediği türden sanat, zanaat ve teknik bilgi karışımı gizemli bir üretim alanı mıdır? (Olası tepki: E ama DOOM öyle yazılmadı mı? Bak süper oyun yaptı o zeki ve bilgili adam. Yalan mı? Bak filanca da kapandı odaya süper derleyici, işletim sistemi filan yaptı. Efendim? Her şeyi tek başına yapmadı mı? Yaptı yaptı. Kapandı odaya. Tek başına. Canım birkaç kişi destek vermiştir. Onlar da odaya kapanıp yazan çok zeki ve çalışkan adamlardı. Keşke herkes böyle olsa. Hem tek bir kişinin ya da iki kafadarın geliştirdiği ürünler peşinden fanatiklerini yaratmadı mı ve sevilmedi mi?)

fazlamesai.net'e soralım: Para karşılığı ödev yapıyor ya da yaptırıyor musunuz?

FZ

Geçenlerde okuduğum bir Language Log yazısı uzun zamandır aklımda olan bir konuya dikkatimi çekti.

Bir üniversite hocası verdiği bilgisayar ödevinin öğrenciler tarafından değil de para karşılığı rentacoder.com sitesinden birilerine yaptırıldığını düşündüğünü ve bunu nasıl engelleyebileceğini sormuş. Bir başka hoca ise "rentacoder sitesine üye olur, kendini öğrencinin talebini karşılayabilecek bir programcı olarak tanıtır ve sonra da en düşük bedeli önererek işi alırsın, sonra da öğrenciye 'sen gel bakayım buraya' dersin" gibi bir yöntem önermiş. Ancak bu da garantili bir yöntem değil, kimlik gizlemesi durumlarında filan...