Makale Özeti

Bu makalemizde Python programala dilinin .NET üzerinde çalışan versiyonu olan IronPython ve Dynamic dillerle Silverlight 2.0 proje geliştirmeyi göreceğiz.

Makale

Silverlight teknolojilerinde direkt olarak desteklediği diller arasında C# ve Visual Basic bulunmaktaydı. Silverlight’ın 1.1 sürümünden itibaren Silverlight 2.0 ‘da bulunan dinamik dil desteği bulunmakta. Sonunda IronPython ile Silverlight uygulaması geliştireceğiz...

Dynamic Language Runtime (DLR) ile çalışan dillerden IronPython, IronRuby ve Managed JScript dillerinde rahatlıkla Silverlight geliştirme yapılabilmekte.
“The Silverlight Dynamic Languages” şeklinde adlandırılan ve .NET kütüphanelerini dinamik dillerle rahatlıkla kullanabilen bir ortamdır.

Buradan
Silverlight Dynamic languages geliştirme SDK’sına ulaşabilirsiniz. Ekim 15te çıkan 0.4.0 versiyonu ile Silverlight 2 tam sürümüyle sorunsuzca çalışmaktadır.

Bu SDK içerisinde istediğiniz dinamik dil klasörü içinde geliştirilmiş örnek projeler bulunmakta ve Chiron gelistirme aracı bulunmaktadır.

Silverlight geliştirme Dinamik dillerde biraz zahmetli bir iş şimdilik. Expression Blendle veya Visual Studio da direkt olarak editleyip test edemiyoruz. Bu yüzden dışarıda kodlamamız ve yayına hazır hale getirmemiz gerekecek.

Bildiğimiz gibi Silverlight projelerinin browserımızda yorumlanması için sıkıştırılmış dosyalar olan .xap bilgi dosyaları gerekmekte. XAP dosyaları aslında projemizde bulunan xaml ve code-behind kodlarımızın DLL dosyalarına dönüştürüldükten sonra silverlight uygulamamızın bilgilerini barındıran bir nevi zip dosyaları idi. Projemizin XAP kodunuz dışardan salt kodla üretmek büyük bir problem. Bu yüzden Dynamic Languages SDK ile birlikte gelen Chiron web server’ını kullanmamız gerekcek.

Chiron Nedir?
Chrion DLR(Dynamic Language Runtime) tabanlı diller için Silverlight geliştirme aracıdır. XAP dosyası oluşturur ve web server gibi çalışır. Xaml kodlarını ve altında çalışan dil ile kodladığımız silverlight uygulamalarını browserde çalışır hale getirir.

Chiron geliştirdiğimiz projelerde XAP dosyası oluşturur ve localhostta server’inde uygulamamızı çalıştırmamıza yardımcı olur.

Chiron exe halinde bulunur ve cmd ile birlikte çalışır. Chiron’un tüm özelliklerine onu aşağıdaki gibi çağırdığımızda erişebiliriz.
chiron_cmd
Proje hiyerarşimiz:

Projem\
Projem \index.html
Projem \app\
Projem \app\app.py
Projem\app\app.xaml
Projem\ assets\

şeklinde olacak ve proje kodlarına bakacak olursak:

app.xaml
<Canvas x:Class="System.Windows.Controls.Canvas"
xmlns="http://schemas.microsoft.com/client/2007"    
xmlns:x=
http://schemas.microsoft.com/winfx/2006/xaml

x:Name="parentCanvas">
<TextBlock Height="42" FontSize="28" Margin="36,40,170,0" VerticalAlignment="Top" x:Name="metin">Wooow, Supeeer!</TextBlock>
<Button Height="38" HorizontalAlignment="Left" Margin="27,103,0,0" VerticalAlignment="Top" Width="112" Content="Dugme" x:Name="dugme"/>
</Canvas>

app.py

from System.Windows import Application
from System.Windows.Controls import Canvas

xaml = Application.Current.LoadRootVisual(Canvas(), "app.xaml")
xaml.metin.Text = 'Wooow, Supeeer!'
xaml.dugme.Content = 'Dugme'

index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>IronPython + Silverlight = <3</title>
  <style type="text/css">
    #silverlightControlHost {
        margin: 20px;
    }
  </style>

  <script type="text/javascript">
    function onSilverlightError(sender, args) {
      if (args.errorType == "InitializeError")  {
        var errorDiv = document.getElementById("errorLocation");
        if (errorDiv != null)
          errorDiv.innerHTML = args.errorType + "- " + args.errorMessage;
      }
    }
  </script>
</head>
<body>
  <!--
    Syntax/Runtime errors from Silverlight will be displayed here.
    This will contain debugging information and should be removed
    or hidden when debugging is completed
  -->
  <div id='errorLocation' style="font-size: small;color: Gray;"></div>
  <div id="silverlightControlHost" width="480" height="320">   
    <object data="data:application/x-silverlight," type="application/x-silverlight-2-b1" width="480" height="320">
      <param name="source" value="app.xap"/>
      <param name="onerror" value="onSilverlightError" />
      <param name="background" value="#00000000" />
      <param name="initParams" value="reportErrors=errorLocation" />
      <param name="windowless" value="true" />
  <a href="http://go.microsoft.com/fwlink/?LinkID=108182" style="text-decoration: none;">
 <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
      </a>
    </object>
    <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>  
  </div>
</body>
</html>


öncelikle oluşturduğumuz silverlight projesinin XAP paketini hazırlayalım.XAP paketi Projem klasörünün içerinde oluşacak

>Chiron.exe /directory:Projem\app /zipdlr:app.xap
cmd_xap


Bu işlemi yaparken SDK’nın içinde bulunan bin klasöründeki tüm dosyalar proje klasörü ile aynı klasörde olması gerekiyor.
Bu XAP dosyası dll’ler ve gerekli program kodlarını ekleyecek.
Eklenen XAP Dosyamızın içeriğine bakarsak. Bildiğiniz gibi normalde C# silverlight projemiz derlendikten sonra xaml ve .cs uzantılı kod dosyaları dll assembly dosyasına dönüşüyordu fakat, Dynamic dillerde dll’e dönüştürmeden olduğu gibi ekleniyor.
xap_icerik

Daha sonra da projemizde
Chiron ‘ı web-server olarak çalıştırma:
> cd Projem
> Chiron.exe /webserver
chiron_server

Chiron uygulması böylelikle web server’ı şeklinde çalışacak ve localhost:2060 da kökdizinini çalıştıracaktır.
server_localhost

Buradan index.htm dosyasını tıklayarak çalışmamızı görebiliriz.
IronPython_browser

Yalnız geliştime yapmak bahsettiğim gibi biraz zahmetli ama IronPythonla yapılmasına değecek bir zahmet :) Ben xaml geliştirme için normal Expression Blend de C# ile normal bir projede geliştirme yapıp o projenin XAML kodlarını kopyalayarak çalışmak istediğim dosyama yapıştırıyorum. Diğer fonksiyonları ise elle yazarak hazır hale getiriyorum.

Daha kısa yollar keşfettikçe sizlerle paylaşacağım. Hepinize kolay gelsin.