Ana Sayfa | English Blog | Soru Sorma Merkezi | Fotoğraf Albümü | Dil Cookie Sil  RSS 2.0 Atom 1.0 CDF 
Daron Yöndem
bir yazılımcının tasarıları...
 Monday, July 21, 2008

Bizim INETA Summer Hit'ten bir hafta sonra 8-9 Ağustos (Cuma-Cumartesi) tarihlerinde riatalks.com konferansı var. Bundan yaklaşık bir ay kadar önce bu aktivitenin deneme sürümünü gerçekleştirmiştik. Ben aktivitede Silverlight sunumumla yer almıştım. Bu sefer de yine Silverlight sunumumla RIATalks'da yer alacağım. 9 Ağustos Cumartesi günü saat 18.00-18.45 arasında yapacağım sunumda daha doğrudan Silverlight 2.0 demoları yapacağız. Tabi 45 dakikalık bir zaman kısıtı epey sıkıcı fakat yapacak bir şey yok, kalan sahalar bizimdir :)

Monday, July 21, 2008 11:00:14 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Sunday, July 20, 2008

INETA Summer Hit aktivitesine kayıtlar devam ediyor. Bu süreçte bugüne kadar kayıt olan bini aşkın dostumuza aşağıdaki maili gönderdik. Sizinle blog üzerinden de paylaşmak istedim. Bizi izlemeye devam edin ;)

INETA Summer Hit

Daron Yöndem Hoş geldiniz!

Yanlış okumadınız, veya ben yanlış yazmadım. INETA Summer Hit'e hoş geldiniz. Seminerlerimiz 2-3 Ağustos'ta olabilir fakat siz online kaydınızı yaptığınıza göre şimdiden yavaş yavaş bu güzel yolculuğa ısınmakta fayda var.
Bu mail boyunca INETA Summer Hit'de 2 Ağustos gününde sizler için hazırladığımız planların bir kısmından bahsedeceğiz. Dahası mı? Çok yakında. 3 Ağustos'un detaylarını da kısa zamanda sizlerle paylaşıyor olacağım.
Takvimlerinize not almayı unutmayın, eşleri dostları haberdar edin. Çok sıcak bir hafta sonu bizi bekliyor.

Daron Yöndem
INETA Türkiye Başkanı, MVP

Silverlight 2.0
Bu demo içerisinde Silverlight nedir sorusuna cevap vermekle çok fazla zaman tüketmeyeceğiz. Onun yerine hemen Silverlight 2.0 uygulamalarına geçerek animasyonlu ve veritabanı bağlantılı dinamik örnekler hazırlayacağız. Video uygulamaları da tabi ki yine ilgi alanımızda olacak. Sabah 09.30'da başlayan seminere geç kalanlar üzülecektir, erken kalkar erken yol alır diyelim. Yapacak çok işimiz var, dolu dolu bir hafta sonu bizi bekliyor.
Gelmeden neler yapmalı?
Silverlight'ın bir önceki sürümü ile ilgili internetteki Daron Yöndem'e ait bir semineri online olarak izleyebilirsiniz. Konuya ısınmanızı sağlayacaktır. Seminere ulaşmak için tıklayın.

Yazılım Dünyası Nereye?
Sevgili Ali Servet Eyüpoğlu, Ali Rıza Babaoğlan, Eralp Erat ve Kadir Çamoğlu'nun katılacağı bu sohbette belki başka sürpriz katılımcılarımız da olabilir. Amacımız yazılım dünyasının gidişatını incelemek, gittiği yeri görmeye çalışmak. Tabi tüm bunları yaparken konuşmacılımızın da bu maceranın neresinde olduklarını ve kişisel taktiklerini öğrenmeye çalışacağız. Çok zevkli olacağından eminim.
Gelmeden neler yapmalı?
Sormak istediğiniz sorularınızı hazırlayın. Konuşmacılarımızın bloglarını bir inceleyin. Yukarıdaki metinde isimlerine tıklayarak sitelerine ulaşabilirsiniz.

Team Foundation Server
Yazılım dünyasında büyük işler takım işidir. Takım işi dediğimizde de TFS karşımıza çıkıyor. TFS sunumuyla Eralp Erat karşımızda olacak. Sevgili Eralp'in daha önce demolarına girmeyenler için ufak bir ipucu; 18.00'da biteceğini sandığımız sunuma erzak yedeği ile gelmenizde fayda var. Akşam gerçekten çok uzun olabilir.

Başka ne yapabilirim?
İş arkadaşlarınızı bu aktiviteden mahrum etmeyin! Hemen onlarla da http://tinyurl.com/inetasummerhit adresini paylaşarak aktiviteden haberdar edin. Sitenizde veya blogunuzda aktiviteyi duyurmak isterseniz yukarıdaki adrese linkleyerek aşağıdaki banner'ı kullanabilirsiniz.

INETA Summer Hit

Bir sonraki mini bültenimizde görüşmek üzere, iyi haftalar, iyi çalışmalar...

Sunday, July 20, 2008 10:31:48 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Saturday, July 19, 2008

Silverlight 2.0 Beta 2 içerisinde istemci makinedeki herhangi bir dosyaya ulaşmakla ilgili örneklerimizde Open File Dialog nesnesini detayları ile incelemiştik. Tam zıttı bir senaryoda da kullanıcıya sistemine kaydedebileceği bir dosya vermek isteyebiliriz. Bu gibi bir çözüm için maalesef Save File Dialog gibi bir kontrole sahip değiliz. O nedenle biraz farklı bir taktik uygulayarak kullanıcıya vermek istediğimiz dosyayı ilk olarak sunucuya göndererek kaydedeceğiz sonrasında da sunucudan dosyayı tekrar istemcinin alarak kaydedebilmesini sağlayacağız. Bu senaryo ilk bakışta çok saçma gibi gözükse de aslında dosya yaratma işlemini sunucu tarafında yaparsanız herhangi bir performans sorunu olmayacaktır. Gönül isterdi ki dosyayı tamamen istemcide Silverlight ile yaratarak kullanıcıya verebilelim. Fakat maalesef şimdilik en azından Beta 2 içerisinde böyle bir şansımız yok.

Peki herşeyi yaptık, dosyamızı Silverlight 2.0 Beta 2 ile yarattık, sunucuya bir web servisi aracılığı ile gönderdik ve kaydettik. Bundan sonrasında bu dosyayı Silverlight içerisinden istemcideki kullanıcıya nasıl vereceğiz. Kullanacağımız taktik aslında epeyce basit. Tüm tarayıcılarda kullanıcıyı dosya downloadu için dosyanın bulunduğu adrese yönlendirirseniz hemen "Download" penceresi açılacaktır. Kullanıcının içerisinde bulunduğu web sayfası hala görüntülenmeye devam edecektir. Yani aslında siz kullanıcıyı başka bir adrese yönlendiriyor olsanız da söz konusu adreste bir sayfa olmadığı için görüntüde bir değişiklik olmayacak ve hedef adresteki dosyanın download işlemi başlayacaktır. Biz de Silverlight tarafından bu taktikten faydalanacağız ve sayfanın adresini kullanıcının indirmesini istediği adres ile değiştirerek tarayıcının "Save File Dialog" açmasını sağlayacağız.

[VB]

        Dim Adres As Uri

        Uri.TryCreate(System.Windows.Browser.HtmlPage.Document.DocumentUri, New Uri("indir.zip", UriKind.Relative), Adres)

[C#]

            Uri Adres;

            Uri.TryCreate(System.Windows.Browser.HtmlPage.Document.DocumentUri, new Uri("teklialtyazi.zip", UriKind.Relative), out Adres);

İlk olarak kullanıcıyı yönlendirmek istediğimiz adresi oluşturmamız gerek. Bunun için Uri sınıfındaki TryCreate metodunu kullanacağız. Bu metod bizden bir base Uri ve Relative Uri alarak ikisini birleştirebiliyor. Base Url için içerisinde bulunduğumuz sayfanın adresini System.Windows.Browser.HtmlPage.Document.DocumentUri ile veriyoruz, relative Uri için yeni bir Uri değişkeni yaratıp download edilecek olan dosyanın adını veriyoruz. Son olarak da almak sonucun aktarılacağı yeni Uri değişkenimizi referans olarak aktarıyoruz.

[VB]

        CType(System.Windows.Browser.HtmlPage.Document.GetProperty("location"), System.Windows.Browser.ScriptObject).SetProperty("href", Adres.ToString)

[C#]

            ((System.Windows.Browser.ScriptObject)System.Windows.Browser.HtmlPage.Document.GetProperty("location")).SetProperty("href", Adres.ToString());

Simdi yapmamız gereken ise sayfanın adresini bir önceki adımda elde ettiğimiz adres ile değiştirmek. İlk olarak System.Windows.Browser.HtmlPage.Document.GetProperty ile sayfadaki dokümanın location özelliğini alıyoruz. Sonrasında da dokümanı bir ScriptObject'e cast ederek SetProperty ile href özelliğini değiştiriyoruz. Aslında bunu biraz JavaScript'teki document.location.href özelliğine benzetebilirsiniz. Artık kodumuzu çalıştırdığımızda Silverlight içerisinde herhangi bir düğmeye basıldığında otomatik olarak tarayıcının "Save File Dialog" penceresi açılacak ve kullanıcı istediği dosyayı Silverlight tarafından indirebilecek.

Hepinize kolay gelsin.

Saturday, July 19, 2008 1:58:35 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 2.0  | 
 Friday, July 18, 2008

Sanırım artık herkes benim "Derli Kerem" serimi biliyor :) Bir yenisi daha karşınızda...

Marketing çılgınlığı!

Geçenlerde yirmi yaşlarında bir kardeşim "Yoruldum artık kod yazmaktan. Pazarlama tarafına geçmek istiyorum." dediğinde nasıl güleceğimi şaşırdım bir an. Yanlış anlamayın bu cümleyi söyleyen arkadaşımı çok severim, güldüğüm şey aslında içerisinde bulunduğumuz durumun ta kendisi. Bugün etrafıma bakıyorum da bir "pazarlama" çılgınlığıdır gidiyor. Pazarlama ile ilgili dergiler, kitaplar, söyleşiler, seminerler, konferanslar... Seminerlerime katılanlardan en azından bazıları hatırlayacaktır, özellikle Anadolu'dakilerde benim de üstüne basa basa söylediğim bir şey vardı "Siz burada bir şeyler yapıyor olabilirsiniz, ama kimsenin bundan haberi yoksa bu işin hiçbir değeri yok." Tabi abartılmış bir cümle olduğunun farkındayım fakat satışın hayatın her alanındaki önemi çok büyük ve bir işi yapmak kadar onu satabilmek de önemlidir. Ammaaaa.... ÖNCE İŞ YAPMANIZ GEREK.

İş yapacak adam yok!

Sektöre bakıyorum ciddi bir kalifiye eleman açığı var. Bunun üzerine yeni mezunların ciddi bir kısmı da yukarıda bahsettiğim "pazarlama çılgınlığı" dalgasına kapılınca gidişatımızın cidden kötü olduğunu söyleyebilirim. Ben üretici bir adamım, pazarlama benim için "gerektiği kadar" var olması gereken bir olgudur hatta beş senelik bir şirket sahibi olarak yeni öğreniyorum bile diyebilirim. Üretim benim önceliğimdir. Herkes böyle olmak zorunda değil fakat bize üretecek adamlar da lazım.

Geçenlerde genç bir dostumuzdan (Başka bir genç:)) yine bir mail aldım "Nasıl sektörde adımı duyurabilirim?" demiş kardeşimiz. Cevabım basit oldu: "Güzel işler yaparak" Bunun için "iş nasıl yapılır" onu öğrenmen gerek. Amaç yanlış. "Nasıl tanınabilirim?" sorusunun sorulduğu sektör başka bir sektör. Oysa belli ki bizim sektörle ilgili gençlerin yanlış bir önyargısı var veya durumu yanlış yansıtmışız. Tabi şimdi bana şöyle bir cevap verebilirsiniz "Eh sen tanınıyorsun?". Ne yani her tanıyan gelip bana haftada bir haraç mı veriyor? Tanınmak güzeldir, hoştur ama risklidir de. Sevdiklerinizin sayısı arttıkça sevmeyenleriniz da artar, basit bir denklemdir aslında bu. Kendi adıma konuşayım, benim hoşuma giden insanlara yardım etmek, bu nedenle "tanınmak" da bu amaca hizmet ettiği için bana yarıyor. Daha çok insana yardımcı olabiliyorum. Sizin yerinizde olsam "Peygamber misin kardeşim sen?" diye ukalaca çıkışabilirdim :) Basit bir cevapla "değilim" :) ama benim yardım konusundaki zayıflığımı taaa lise veya ortaokuldaki arkadaşlarımdan bile öğrenebilirsiniz. (Referans : Istanbul Erkek Lisesi 11 Fen H). Neyse beni geçelim :)

Teşekkür edelim, ettirelim

Konuyu çok feci değiştireceğim :) Başlıktan belli olmadı mı? Konumuz anaokulundan bir konu; teşekkür etmeyi öğrenelim. Geçenlerde çok fazla "teşekkür" ettiğimin farkına vardım. Yakın bir dostumla yemek yiyorduk ve bana yemeğin sonunda garsona toplam 24 kere teşekkür ettiğimi söyledi. Detay olarak belirtiyim, çorba, iskender, koladan oluşan bir menüydü. Yani 24 tabak yemek yemedim. Sonraki hareketlerimde biraz dikkat ettim konuya ve gördüm ki garsonun hesabı getirmesinden tutun, kolayı bardağıma doldurmasına kadar her aşamada refleks olarak teşekkür ediyorum. Sonrasında "Gariplik bende" sendromundan akıllıca sıyrılıp etrafıma bir göz attım ve gördüm ki en gerekli durumlarda bile kimse kimseye teşekkür etmiyor. Teşekkür etmeyi unutmuşuz ey millet!

Bu aslında kısır bir döngü gibi. Kimse kimseye teşekkür etmeyince herkes "Zaten bu onun görevi" şeklinde bir düşüncenin arkasına saklanıp "Abi para vermedik mi tabi ki getirecek yemeği!" moduna giriyor. İki sorum var "Teşekkür etsen başın mı ağrır?", "İnsanlar yaptıklarına teşekkür etseler hoşuna gitmez mi?" Şimdi oturup düşünün ve siz de kendi hareketlerinize dikkat edin. Eminim "Teşekkür ederim" demek içerisinde yaşadığımız ortamı çok daha yaşanabilir kılacaktır.

Türkçe elden gidiyor!

Dertli Kerem bu sefer "ortaya karışık" dertler döküyor, farkındayım. Bir sonraki konu belki de ağızlara sıkça sakız edilen bir konudur fakat ben farklı bir bakış açısıyla başlamak istiyorum.

Lise yıllarından başlayarak internette ve dergilerde yazılar yazmaya başladım. darkhardware.com'da o zamanlardan kalma yazılarım hala durur. Lisedeyken PCWorld multimedya editörüydüm. O zamanlar günlük Türkçe kullanımına bakış açım bugünlerden farklıydı. İngilizce kelimelerin gün içerisinde konuşmalarda kullanılmasına çok kızardım. Oysa bugün inanmazsınız o kadar fazla İngilizce kelime kullanıyorum ki! Bazen cümle bile kuruyorum :) Bu değişikliği engelleyemedim. Fakat Allah'ü Şükür hala Türkçe'yi yeri geldiğinde düzgün kullandığıma ve yazdığıma inanırım. Mesele şudur ki son zamanlarda dehşet bir yozlaşma var! Özellikle yazılı Türkçe ile ilgili. Bu durum konuşulan Türkçe'nin yozlaşmasından daha tehlikeli. Çünkü konuşulan Türkçe zaman içerisinde sürekli değişebilir fakat yazılı aynı kaldığı sürece herkes bir şekilde bir limana demirli demektir. Oysa yazılı Türkçe de değiştiği anda artık nerelere gidebileceğimizi tahmin bile edemezsiniz.

"SenınLe TanısTıgım İçiN Joq MuDLuYum..."

Bu nedir ya? Hatta "What is this?" :) Belki böylesini anlarlar. Türkçe mi bu? Zar zor da olsa ben anlayabildiğime göre sanırım, evet, Türkçe. Ama hayır! Ben Türkçemin bu hale gelmesini istemiyorum.

Yaratık 1:sLm npr?;)
Yaratık 2:eiim jnm senten npr?

Nasıl yani? Gençlik bu hale mi geldi? Kendimi bir an çok yaşlanmış hissettim. Bu arada uç noktada olduğunu tahmin etmek istediğim bu örnekleri benimle paylaşan sevgili Doğukan Demir'e buradan teşekkürler. Gözlerimi açmamı sağladı. Ben hala "dahi anlamındaki de" ve "soru anlamındaki mi"nin ayrı yazılması derdini çözemedik sanırken bir de baktım ki ohoooo....

Peki bu sadece bizde mi var? Yani sadece dilini çürüten biz miyiz? Aslında değiliz. Böyle sorunları hep salt kendimize mal etmeyi severiz ama durumun aslı farklı. İngilizce'yi ele alalım. Bakalım aşağıdaki yazılanı okuyabilecek misiniz?

Funky Man 1: sup?
Funky Man 2: nm u?

Biliyorum, biliyorum. Bizden kesinlikle geri kalmazlar. Hemen yukarıdaki yazışmanın düzgün İngilizcesini de sizinle paylaşayım da rahatlayalım.

Funky Man 1: What's up?
Funky Man 2: Nothing much, you?

Şimdi gelelim sadede; İngilizcedeki ile bizdeki yozlaşma arasındaki fark çok önemli. Onlar yazışmayı kısaltmaya çalışırken biz bu konuda onlar kadar başarılı olmamakla beraber bazen yazıyı uzatabiliyoruz bile. Bunların hepsinin internetteki MSN yazışmalarında kaldığını sanıyorsanız yanılıyorsunuz. Doğrudur bir kısmı gerçekten sadece internette kullanılıyor ama bir de bakıyoruz ki gençlerimiz İnternet olmuş çıkmış. Bunu zaten engelleyemeyiz. İnternet gün geçtikçe daha çok hayatımızın bir parçası olacak ama umarım düzgün Türkçe yazabilmek de sadece yazarların tekeline kalmaz. Belki blog dünyası bu işi kurtarır mı? Belki de kalıcı yazılar daha ciddiye alınır diye tahmin edebiliriz. Zaman gösterecek, ama bu soruna eğilmek gerek.

Hepinize iyi hafta sonları ;)

Friday, July 18, 2008 6:45:26 PM (GTB Standard Time, UTC+02:00)  #    Comments [7]    | 
 Thursday, July 17, 2008

İster PHP olsun ister farklı sunucu taraflı programlama dilleri olsun hepsi de "adı üzerinde" sunucu tarafında çalışıyorlar. Biz ise Silverlight tarafında tamamen istemcide çalışıyor. Bu çerçevede Silverlight'ın tamamen sunucudan bağımsız olduğunu düşünürsek aslında sunucu ile belirli standartları yakaladığımız sürece istediğimiz sunucu taraflı programlama altyapısı ile entegrasyon sağlayabiliriz. Bu standartlar WSDL kuralları çerçevesinde hazırlanmış bir web servisi olabileceği gibi bazen çok basit bir POST işlemi bile olabilir. Bu yazımda Silverlight 2.0 Beta 2 ile beraber sunucu tarafında bir PHP kodu kullanarak mail gönderim işlemi yapacağız. Hazırladığımız Silverlight 2.0 uygulamasının XAP dosyasını sunucuya atmamız uygulamamızın çalışması için yeterli olacaktır.

Önce PHP tarafını çözelim!

PHP tarafında çok detaya girmeyeceğiz. Yapacağımız şey basit bir şekilde sayfaya POST ile gönderilen değişkenleri alıp uygun bir mail mesaj stringi haline çevirdikten sonra mail olarak istediğimiz kullanıcıya göndermek olacak.

<?php

$senderName = $_POST['Gonderen'];

$senderEmail = $_POST['Email'];

$emailMessage = $_POST['Mesaj'];

$recipient = "alici@domain.com";

$subject = "Mesaj Konusu";

$headers = "From: $Email";

$message = "Kimden: $Gonderen\nEposta Adresi: $Email\n\n Mesaj: $Mesaj";

$message = stripslashes($message);

mail($recipient, $subject, $message, $headers)

?>

Örneğimize devam ederken ufak bir uyarıda bulunmam gerek. Kesinlikle yukarıdaki gibi bir PHP dosyasını sitenize bu haliyle bırakmayın. Şu an yukarıdaki dosyada ne post eden arkadaşın kimliği, ne sender'ın agent tipi hiçbir şey kontrol edilmiyor. Güvenlik açısından kesinlikle bu kodun geliştirilmesi gerek aksi halde önüne gelen buraya bilgileri POST ederek size milyonlarca mail yollayabilir.

Uygulamamızın tasarımını yapalım

Yine çok basit bir mailform hazırlayacağız. Blend 2.5 içerisinden Silverlight sayfamıza toplam üç adet TextBox ve bir de Button koyuyoruz. Site ziyaretçileri isimlerini, maillerini ve mesajlarını yazarak düğmeye basıp gize gönderebilecekler. Oluşturduğumuz uygulamanın XAML kodunu aşağıda inceleyebilirsiniz.

<UserControl x:Class="SilverlightApplication2.Page"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">

        <TextBox Height="32" Margin="96,42,74,0" VerticalAlignment="Top" Text="Adınız" TextWrapping="Wrap" x:Name="txtAdi"/>

        <TextBox Height="29" Margin="96,88,74,0" VerticalAlignment="Top" Text="Mailiniz" TextWrapping="Wrap" x:Name="txtMaili"/>

        <TextBox Margin="96,132,74,81" Text="Mesajınız" TextWrapping="Wrap" x:Name="txtMesaji"/>

        <Button Height="32" HorizontalAlignment="Stretch" Margin="180,0,146,31" VerticalAlignment="Bottom" Content="Gönder" x:Name="btnGonder"/>

    </Grid>

</UserControl>

Kodlamaya geçelim

Uygulamamızın kod kısmında bir WebClient nesnesi kullanacağız. WebClient nesnemize sahnedeki tüm bilgileri bir String olarak vererek POST metodu ile bilgileri kendisine parametre olarak vereceğimiz bir adrese göndermesini isteyeceğiz.

[VB]

        Dim VeriGonder As New System.Net.WebClient

        VeriGonder.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"

[C#]

            System.Net.WebClient VeriGonder = new System.Net.WebClient();

            VeriGonder.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

VeriGonder adını verdiğimiz WebClient nesnemin hemen ContentType bilgisini ayarlamam gerekiyor. Bunun için WebClient'ın Headers dizisinden ContentType'ı bularak form-urlencoded olarak değiştiriyorum. Böylece birazdan URLEncode tekniği ile hazırladığımız verileri bu WebClient ile rahatlıkla sunucuya gönderebileceğiz.

[VB]

        Dim GonderilecekData As String = "Gonderen=" & Browser.HttpUtility.UrlEncode(txtAdi.Text) & "&"

        GonderilecekData &= "Email=" & Browser.HttpUtility.UrlEncode(txtMaili.Text) & "&"

        GonderilecekData &= "Mesaj=" & Browser.HttpUtility.UrlEncode(txtMesaji.Text)

[C#]

            string GonderilecekData = "Gonderen=" + System.Windows.Browser.HttpUtility.UrlEncode(txtAdi.Text) + "&";

            GonderilecekData += "Email=" + System.Windows.Browser.HttpUtility.UrlEncode(txtMaili.Text) + "&";

            GonderilecekData += "Mesaj=" + System.Windows.Browser.HttpUtility.UrlEncode(txtMesaji.Text);

Kodumuz içerisinde hemen göndereceğimiz verileri Key/Value çiftleri şeklinde birleştiriyoruz. Göndereceğimiz her verinin bir ismi ve tabi ki değeri olması gerekiyor. Aslında yaptığımız şey normalde URL üzerinden göndereceğimiz veriyi URLEncode ile aynı şekilde oluşturmak. Eğer göndereceğiniz verilerin sayısı çok ise performans açısından standart String işlemleri yerine bir StringBuilder kullanmanızı tavsiye ederim.

[VB]

        AddHandler VeriGonder.UploadStringCompleted, AddressOf VeriGonder_UploadStringCompleted

        VeriGonder.UploadStringAsync(New Uri("http://localhost:49424/SilverlightApplication2Web/mailgonder.php", UriKind.Absolute), "POST", GonderilecekData)

[C#]

            VeriGonder.UploadStringCompleted += VeriGonder_UploadStringCompleted;

            VeriGonder.UploadStringAsync(new Uri("http://localhost:49424/SilverlightApplication2Web/mailgonder.php", UriKind.Absolute), "POST", GonderilecekData);

Son olarak verimizi sunucuya göndermeden önce gönderme işlemi tamamlandığında çalıştırılmak üzere VeriGonder nesnemizin UploadStrintCompleted event'ına da bir event-handler bağlıyoruz. Artık verimizi sunucuya göndermeye hazır olduğumuza göre hemen adresini vererek POST metodu ile veriyi yolculayabiliriz.

[VB]

    Private Sub VeriGonder_UploadStringCompleted(ByVal sender As Object, ByVal e As System.Net.UploadStringCompletedEventArgs)

        btnGonder.Content = "Tamam"

    End Sub

[C#]

        private void VeriGonder_UploadStringCompleted(object sender, System.Net.UploadStringCompletedEventArgs e)

        {

            btnGonder.Content = "Tamam";

        }

Veri gönderme işlemi tamamlandığında ekrandaki kontrolleri kaldırıp bir teşekkür mesajı göstermek güzel olabilirdi. İşin o kısmını ben size bırakmış oliyim. Şimdilik UploadStringCompleted event'ında düğmeye "Tamam" yazdırarak örneğimizi çalıştırabiliriz.

@ İşaret Sorunu!

Ufak bir sorunumuz var. Silverlight 2.0 Beta 2 ile beraber gelen bu sorun ufak gibi gözükse de aslında epey önemli :) Yukarıdaki örneği çalıştırdığınızda göreceksiniz ki herhangi bir TextBox içerisinde @ işareti koyamıyorsunuz. Bunun basit bir nedeni var, aslında AltGr tuşu ile oluşturduğunuz hiçbir karakteri TextBox'lara yerleştiremeyeceksiniz. Neden mi? Bilmiyorum, bu bir bug. Silverlight 2.0'ın Beta 2 sonrasında sürümlerinde bu hata giderilecek. Şimdilik aşağıdaki gibi bir çözüm uygulayabiliriz.

[VB]

    Dim Oncekiler(1) As Integer

 

    Private Sub txtMaili_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles txtMaili.KeyDown

        If e.PlatformKeyCode = 81 Then

            If Oncekiler(0) = 17 And Oncekiler(1) = 18 Then

                txtMaili.Text &= "@"

                txtMaili.SelectionStart = txtMaili.Text.Length

            End If

        End If

        Oncekiler(0) = Oncekiler(1)

        Oncekiler(1) = e.PlatformKeyCode

    End Sub

[C#]

        int[] Oncekiler = new int[2];

 

        private void txtMaili_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)

        {

            if (e.PlatformKeyCode == 81)

            {

                if (Oncekiler[0] == 17 & Oncekiler[1] == 18)

                {

                    txtMaili.Text += "@";

                    txtMaili.SelectionStart = txtMaili.Text.Length;

                }

            }

            Oncekiler[0] = Oncekiler[1];

            Oncekiler[1] = e.PlatformKeyCode;

        }

İlk önce uygulamaya çalıştığımız mantığı kavrayalım. txtMail adındaki textBox içerisinde herhangi bir tuşa basıldığında yukarıdaki gibi KeyDown event'ı çalışacaktır. Bu event'a baktığımızda klavyede AltGr tuşuna basıldığında sırası ile iki tuşa basılmış gibi sistemin 17 ve sonrasonda da 18 numaralı PlatformAnahtarları'nı döndürdüğünü görebiliriz. Bu tuşların Macintosh dahil tüm sistemlerdeki PlatformKeyCode adında anahtarları vardır ve bu değerler sürekli aynıdır. Normalde biz @ işaretini koyabilmek için AltGr'ye bastıkdan sonra bir de Q harfine basarız. O zaman kontrol etmemiz gereken durum şu; Q harfine basıldıysa acaba bir önceki basılan tuş AltGr miydi? Eğer öğleyse bana bir @ işareti lazım. İşte kodumuz da bu kontrolü yapıyor. Sürekli olarak basılan son iki tuşu Oncekiler adındaki dizimizde saklıyor ve her tuşa basıldığında KeyDown içerisinde eğer Q harfine basılmış ise son basılan iki tuşun KeyCode'larının da 17 ve 18 olup olmadığını kontrol ediyoruz. Eğer durum buysa txtMaili TextBox'ı içerisine bir @ işareti ekleyip imleci metnin en sonuna gönderiyoruz.

Sonuç

Makalemizde kullandığımız teknik aslında web programcılığının en ilkel zamanlarından bu güne kadar gelen ve yapı taşı diyebileceğimiz POST metodunun ta kendisi. Bu çerçevede sunucu taraflı programlama sistemlerinin hepsi bu şekilde veri trafiğine açık olduğu için aynı teknikler ile Silverlight'ı sunucu tarafı ile rahatlıkla konuşturabilir ve ister sunucunun işletim sistemi olsun, ister kullanılan teknoloji olsun her konuda tam bağımsızlığın tadını çıkartabilirsiniz.

Hepinize kolay gelsin.

Thursday, July 17, 2008 1:43:17 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight 2.0  | 
 Wednesday, July 16, 2008

Expression Web 2 ile beraber gelen belki de en ilginç ve güzel yeniliklerden biri de PHP desteğinin gelmesi. Microsoft'un Windows Server 2008 ile beraber gelen "PHP Windows sunucularda artık Apache'den daha hızlı çalışıyor" iddiası çerçevesinde böyle bir gelişme aslında çok da garip değil. Yazılımcılar olarak baktığımız bu durum tabi ki bizim için çok faydalı, tek bir Expression Web ile hem ASP.NET hem PHP siteleri "color coding" dahil düzenleyebiliyor ve çalıştırabiliyor olmamız müthiş bir avantaj. Peki tüm bunları nasıl yapacağız?

Expression Web 2 ile beraber Expression Development Server geliyor. Bu yapı bizim Visual Studio içerisinde alıştığımız ASP.NET Development Server'a çok benziyor ve sistemde herhangi bir şekilde IIS yüklü olmasa da siteleri çalıştırabilmenizi sağlıyor. Expression Development Server'ın tabi ki PHP desteği de var fakat sisteminizde PHP'nin yüklü olması gerek. Gelin şimdi tüm ayarları ve yüklemeleri nasıl yapabileceğimize bir göz atalım.

  • İlk olarak http://us3.php.net/get/php-5.2.5-Win32.zip/from/a/mirror adresinden PHP 5'i bilgisayarınıza indirerek kaydedin. İndirdiğiniz ZIP dosyası içerisindeki herşeyi sisteminizde herhangi bir klasöre boşaltın. Benim tavsiyem  C:\PHP gibi bir yerlere koymanız olacaktır.
  • Bir sonraki adımda ZIP dosyasından çıkardığınız dosyaların içinden php.ini-recommended adındaki dosyanın bir kopyasını alarak adını da PHP.ini olarak değiştirmeniz gerekiyor. Bu dosyayı ASP.NET'teni Web.Config'e benzetebiliriz.
  • Expression Web içerisinde herhangi bir boş site yaratıp içerisinde bir PHP dosyası oluşturduktan sonra bir defalığına PHP motorunu Expression Web'e göstermeniz gerekiyor. Bunun için program içerisinde "Tools / Application Options" menüsünden ilerleyerek "Path to PHP Executable" ayarını değiştirmeniz gerekiyor. Örneğin şöyle bir ayar uygun olacaktır: "C:\PHP\php-cgi.exe"

Hepinize kolay gelsin ;)

Wednesday, July 16, 2008 11:15:47 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Web  | 
 Tuesday, July 15, 2008

Tam bir ay olmuş! Geçen ayın 14'ünde açılışını yaptığımız Soru Sorma Merkezi'nin üzerinden bir ay geçti ve 100 soru rekorunu kırdık. İster buna "Cevaplanmış 100 Soru" sloganı atalım ister "100 Soru Cevapladık" diyelim her ikisi de bir aylık bir süreç ve yeni açılan bir sistem için sanırım güzel bir başarı.

Bu süreçte sisteme cevapları ile katkılarından dolayı teşekkür etmem gereken dostlar var; Eren Emre Kanal, Eralp Erat, E. Altuğ Yılmaz, Tayfun Akçay ve belki de adını üzülerek şu an atladığım tüm dostlara çok teşekkürler. Soru Sorma Merkezi ile ilgili geleceğe yönelik planlarım var, bunları da en kısa zamanda hayata geçirmeye çalışacağım.

Tabi en önemlisi, sorularını tüm samimiyetleri ile benimle paylaşan siz sevgili dostlara da çok teşekkürler.

Tuesday, July 15, 2008 7:52:34 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 
 Monday, July 14, 2008

Yaz aylarının seminerler ve eğitimler açısından biraz sakin geçtiğinin farkındayım. Bu nedenle bir süre önce ayaklanarak tatile gidemeyen yazılımcılara bir hafta sonu dopingi hazırladık; INETA Summer Hit 2008!

Hepinizi aktiviteye bekliyorum. Her zamanki gibi aktiviteler boyunca vereceğimiz hediyelerden aktivite öncesi bahsetmeyeceğim :) Peki neler yapacağız? İlk gün Silverlight 2.0 ile sıcak bir giriş yaptıktan sonra yemek sonrası "Yazılım Dünyası Nereye?" konulu bir sohbet panelimiz olacak. Bu panele sektörden uzmanlarımız katılacak, sizin de sorularınızı alacağız, ayrıca söz konusu uzmanların haberi yok ama onlarla ilgili sinsi planlarım da var :) Öğleden sonra ise Team Foundation Server sunumumuz var. Özellikle hangi sunumu hangi uzmanımızın yapacağından bahsetmiyorum :) 3 Ağustos Pazar günü ise Internet Explorer 8.0 yenilikleri ile başlayacağız. Yakın zamanda Beta 2 sonrasında da tam sürümü ile IE 8.0'in çok ilginç yenilikleri var. Sonrasında bir Web 3.0 vizyonerlik sunumu ve Web Client Software Factory konusunu inceleyeceğiz. Son olarak LINQ'in hem C# hem VB kısmına göz atarak (Tamam, itiraf ediyorum VB kısmında ben varım) iki güzel günü bitirmiş olacağız.

İsteyenler aktivitelere laptopları ile gelebilirler. Hem anlatılanları denemek hem de kullanılan uygulamaları hemen konuşmacılardan almak için hoş bir seçenek olacaktır. Lütfen kayıt olmayı unutmayın, Yıldız Teknik Üniversitesi'ndeki aktiviteye girişte isimleriniz kontrol edilecektir.

Aktivitenin organizasyonunda yardımlarından dolayı sevgili Ali Rıza Babaoğlan ve Oğuz Yılmaz'a teşekkür ediyorum.

Kayıt adresi: http://tinyurl.com/inetasummerhit

Aktivitenin duyurulması için aşağıdaki banner'ı yukarıdaki adrese linkleyerek kullanabilirsiniz ;)

Monday, July 14, 2008 12:41:11 PM (GTB Standard Time, UTC+02:00)  #    Comments [9]   Seminer  | 
 Sunday, July 13, 2008

Bundan yaklaşık 6 ay önceydi sanırım GGK organizasyonunda bir Silverlight seminerimiz olmuştu. Bu seminerin video kaydı alınıp internete konmuş olsa da ben blogdan paylaşmayı unutmuşum :) Sağ olsun sevgili Recep Selli durumu hatırlamamı sağladı. Silverlight 1.0 gibi artık eski diyebileceğim bir konu olsa da buyurun arkadaşlar 3 saatlik Silverlight 1.0 semineri karşınızda.

Sunday, July 13, 2008 6:07:54 PM (GTB Standard Time, UTC+02:00)  #    Comments [12]   Silverlight  | 
 Saturday, July 12, 2008

Her programcının hayatında en az birkaç defe Office dosya formatları ile ilgilendiği projeler olmuştur. Bu durum ister yeni bir Word dosyası yaratmak olsun, ister bir Excel dosyasından veri çekmek olsun OpenXML öncesinde ciddi sıkıntılar çektiğimiz bir gerçek. En basit bir sebep olarak binary formatlı dokümanlar ile uğraşmak zorunda kaldığımızı söyleyebiliriz. Office 2007 ile beraber tanıştığımız ve sonlarına X harfleri eklenen dosya uzantıları aslında OpenXML'in geldiğinin bir işaretiydi. İyi ki geldin diyerek yavaş yavaş konumuza geçiş yapalım.

Daha önceki yazılarımda Silverlight 2.0 ile istemci tarafındaki dosyalara OpenFileDialog ile ulaşabildiğimizi görmüştük. Yine aynı sistemi kullanarak bu sefer amacımız bir Powerpoint dosyasını açarak söz konusu dosyanın Thumbnail görüntüsünü Silverlight içerisinde göstermek. Aslında çok şanslıyız, neden mi? Çünkü OpenXML var.

OpenXML'in bize faydası ne?

OpenXML formatındaki her dosya aslında bir ZIP dosyasıdır. Eğer dosyanın uzantısını ZIP olarak değiştirirseniz aslında içerisine girerek tüm detayları görebilirsiniz.

OpenXML dosyalarının içinde herşey XML formatında, açık seçik karşımızda.
OpenXML dosyalarının içinde herşey XML formatında, açık seçik karşımızda.

Yukarıdaki basit bir Powerpoint dosyasının içeriği görebilirsiniz. Gördüğünüz üzere aslında her şey ayrı ayrı XML dosyaları şeklinde kaydedilmiş. Yani bir Office 2007 dosyası yaratmak özünde XML'ler yaratarak ZIP'lemekten farklı değil. Hele bir de bu dosyaları açarak programlarınızda göstermek istiyorsanız LINQ2XML'in gücünden de faydalanarak çok hızlı çözümler geliştirmeniz mümkün.

Konumuza dönersek; bize Powerpoint dosyasının Thumbnail'i lazımdı. Bunun için XML'ler içerisinde ilk slayt ile ilgili bilgileri alarak gerekli çizimleri hazırlayabiliriz fakat buna gerek yok. Çünkü her PowerPoint dosyası zaten işletim sisteminde gösterilecek olan Thumbnail'i kendi içinde barındırır. OpenXML formatı sağ olsun, dosyamızın içini biraz karıştırdığımızda görüyoruz ki ZIP dosyası içerisinde docProps adındaki bir klasörün içinde thumbnail.jpeg adında bir JPG dosyası bulunuyor. İşte bu dosya bizim Silverlight tarafında göstereceğimiz thumbnail görselini içeriyor.

ZIP'ten resmi nasıl alacağız?

Yine daha önceki bir yazımda bir ZIP dosyalarını Silverlight tarafında açabilmenin yollarına değinmiştik. Hatta daha da ileri giderek Silverlight 2.0 XAP dosyaları da birer ZIP dosyası olduğu için onları açmıştık. Şimdi ise sıra başka bir ZIP dosyası açmaya geldi, Powerpoint dosyaları.

İlk olarak Powerpoint dosyasını açarak Thumbnail'i gösterecek olan uygulamamızın tasarımını basit bir şekilde yapalım. Sahnede bir düğme ve bir de Image nesnesi olsun. Düğmeye basında kullanıcıdan bilgisayarından bir Powerpoint dosyası seçmesini isteyelim ve sonrasında da seçili dosyanın Thumbnail'ini Image nesnesi içerisinde gösterelim.

<UserControl x:Class="SilverlightApplication58.Page"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">

        <Button Height="32" HorizontalAlignment="Left" Margin="24,32,0,0" VerticalAlignment="Top" Width="104" Content="Button" x:Name="btnDosyaAc"/>

        <Image Margin="160,32,80,140" x:Name="imgOnIzleme"/>

    </Grid>

</UserControl>

Sıra geldi gerekli işlemleri sırası ile yapacak olan kodumuzu yazmaya.

[VB]

        Dim DosyaAc As New OpenFileDialog

        DosyaAc.Filter = "PowerPoint 2008 Dosyaları (*.pptx)|*.pptx"

        DosyaAc.Multiselect = False

        DosyaAc.ShowDialog()

[C#]

            OpenFileDialog DosyaAc = new OpenFileDialog();

            DosyaAc.Filter = "PowerPoint 2008 Dosyaları (*.pptx)|*.pptx";

            DosyaAc.Multiselect = false;

            DosyaAc.ShowDialog();

İlk olarak yukarıdaki şekilde Silverlight tarafında kullanıcıdan bilgisayarından bir Powerpoint dosyası seçmesini isteyelim. Sonrasında bize dosyanın Stream'i gelecek ve biz de içerisinden istediğimiz JPEG dosyasını almaya çalışacağız. Kodumuz içerisinde istemcideki dosyalara ulaşmak için bir OpenFileDialog kullanıyor, filtresini de sadece PPTX'leri gösterecek şekilde ayarlıyoruz.

[VB]

        If DosyaAc.SelectedFile IsNot Nothing Then

            Dim Foto As New Imaging.BitmapImage()

            Dim Gelen = Application.GetResourceStream(New Windows.Resources.StreamResourceInfo(DosyaAc.SelectedFile.OpenRead(), Nothing), New Uri("docProps/thumbnail.jpeg", UriKind.Relative)).Stream

            Foto.SetSource(Gelen)

            imgOnIzleme.Source = Foto

        End If

[C#]

            if (DosyaAc.SelectedFile != null) {

                System.Windows.Media.Imaging.BitmapImage Foto = new System.Windows.Media.Imaging.BitmapImage();

                System.IO.Stream Gelen = Application.GetResourceStream(new System.Windows.Resources.StreamResourceInfo(DosyaAc.SelectedFile.OpenRead(), null), new Uri("docProps/thumbnail.jpeg", UriKind.Relative)).Stream;

                Foto.SetSource(Gelen);

                imgOnIzleme.Source = Foto;

            }

Bu noktada Silverlight ile beraber gelen Resource yapısını kullanacağız ve sanki harici bir kaynak açarmış gibi ZIP dosyasını açtıracağız. Sonuçta hedefin bir Powerpoint dosyası olup olmadığı önemli değil. Bizim istediğimiz ZIP dosyasındaki docProps klasöründe bir dosyayı almak. Kullandığımız taktik daha önceleri Silverlight 2.0 XAP dosyalarından dosya almak için kullandığımız taktik ile birebir aynı. StreamResource olarak OpenFileDialog'dan gelen dosyanın içerisinde JPEG dosyasını alıyor ve GetResourceStream ile de dosyayı çekiyoruz. Çektiğimiz dosyayı daha önce Foto adında tanımladığımız BitmapImage değişkenine SetSource ile atayarak sonunda da delimizdeki resmi sahnedeki Image nesnesine aktarıyoruz.

Böylece Powerpoint dosyasında Thumbnail'i bularak Silverlight 2.0 içerisinde çok kolay bir şekilde gösterebildik. Bu aynı taktiği ASP.NET ile de kullanarak gerektiğinde sunucu taraflı olarak Powerpoint dosyalarında Thumbnail'ler yaratmak OpenXML sayesinde çocuk oyuncağına dönüşmüş durumda.

Hepinize kolay gelsin.

Saturday, July 12, 2008 5:05:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 2.0  | 
 Friday, July 11, 2008

Hazır yazılım kullanmak ile kullanmamak arasında çizgi aslında biz yazılımcılar için çok tehlikeli bir kararı temsil eder. Alıp kullanmaya karar vereceğiniz yazılımın ne kadar güvenli olduğu, ne kadar özelleştirilebilir olduğu veya ne kadar destekle geldiği gibi bir çok değişkene göz atıp doğru kararı vermek çoğu zaman tahmin ettiğinizden daha da zor olabilir. Tüm bu nedenlerle aslında konu özellikle benim çok temkinli yaklaştığım konulardan biri.

Son dönemde yurt dışında patlama gösteren projelerden biri de BlogEngine.NET projesi. Microsoft'ta tamamen bağımsız bir proje olarak ilerleyen yazılım geliştirme süresinde gönüllü yazılımcılar çalışıyor. Durum böyle olunca tabi ki profesyonel bir üründen bahsetmek pek mümkün değil. Fakat .NET altyapısı ve açık kaynak kodları ile gelen en başarılı blog altyapısı şu an için BlogEngine olarak gözüküyor.

Peki BlogEngine'den bu kadar neden bahsediyorum? Benim uzun vadeli ısrarlarım :) sonrası bir süre önce sevgili MSP, Murat Duman BlogEngine üzerine makaleler yazmaya başlamıştı. Sonrasında bu dünyaya (kısa zamanda iş arkadaşım da diyebileceğim :)) MSP, Ali Rıza Babaoğlan da katıldı. Sonuçta ortaya süper bir proje çıkardılar;

http://www.blogenginetr.com/

Site şu an için milyonlarca makale ile dolu değil, daha çok taze günlerinde. Zamanla Murat ve Ali'nin bu konuda yoğun çalışacağından eminim. Tabi bu süreçte hali hazırda BlogEngine ile ilgilenenler varsa, onlar da deneyimlerini belki birer makale olarak Ali'ye veya Murat'a ulaştırıp BlogEngine TR grubuna katılabilirler.

Hepinize iyi hafta sonları.

Friday, July 11, 2008 10:25:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [3]    | 
 Thursday, July 10, 2008

Silverlight 2.0 Beta 2 ile beraber 1.0 sürümüne göre uygulamaların dağıtım sistemi değişti ve karşımıza XAP dosyaları çıktı. Bu dosyaları standart HTML veya herhangi bir sunucu taraflı programlama altyapısında kullanmanın yolu da aslında eskiden Flash tarafında alışık olduğumuz Object taglarına dönüştü. Bu durumun tabi ki güzel yanları var, Silverlight 1.0'da olduğu gibi harici JavaScript dosyalarına (Silverlight.js) ve DIV elementlerine vs ihtiyacımız olmuyor. Şimdi gelin beraber Silverlight 2.0 uygulamalarını sayfalarımıza yerleştirirken kullanacağımzı OBJECT tagları ile gelen yenilikleri inceleyelim.

Yeni bir Silverlight 2.0 projesi

Visual Studio 2008 içerisinde yeni bir Silverlight 2.0 projesi yarattığımızda bizim için test amaçlı olarak örnek bir de HTML dosyası hazırlanıyor. Bu dosya içerisinde bir Silverlight uygulamasının gösterimi için konulmuş kodları yavaş yavaş inceleyelim.

    <div id="silverlightControlHost">

        <object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%">

            <param name="source" value="ClientBin/SilverlightApplication56.xap"/>

            <param name="onerror" value="onSilverlightError" />

            <param name="background" value="white" />

 

            <a href="http://go.microsoft.com/fwlink/?LinkID=115261" 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>

En dışta silverlightControlHost adında bir DIV elementi bulunuyor. Aslında böyle elementin bulunmasına hiç gerek yok, sadece CSS ile Silverlight uygulamasının boyutu ayarlanabilsin diye yerleştirilmiş bu DIV elementinin başka herhangi bir işlevselliği olmadığı için rahatlıkla koddan kaldırılabilir.

Esas OBJECT tagımıza geçtiğimizde karşımıza dört farklı özellik çıkıyor. Bunlardan Data özelliği OBJECT taglarının farklı tarayıcılarda farklı işlevselliklerle karşılaşmasından dolayı yerleştirilmiş. Data özelliği olmayan OBJECT tagları bazı tarayıcılarda sorun çıkartabiliyor. TYPE özelliği tarayıcıya Silverlight Plug-In'in bu OBJECT tagından sorumlu olduğu bilgisini verirken width ve height ise uygulamanın sayfadaki boyutunu belirtiyor.

            <param name="source" value="ClientBin/SilverlightApplication56.xap"/>

            <param name="onerror" value="onSilverlightError" />

            <param name="background" value="white" />

OBJECT tagları arasında bazı parametreler var. Bu parametreler uygulamanın özelliklerine göre değişecektir, hatta burada tanımlanmamış olan bazı farklı parametreler de kullanmak mümkün. Mevcut parametreler arasında Source parametresi istemciye yüklenecek olan XAP dosyasının adresini taşırken onerror parametresi ise hata durumunda istemci tarafında çalıştırılacak olan JavaScript metodunun adını saklıyor.

            <a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">

                <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>

            </a>

Buradaki kod ise aslında istemcide Silverlight Runtime yüklü olmadığında gösterilecek olan içeri