Silverlight etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Silverlight etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Pazar, Ekim 10, 2010

SharePoint 2010 Client Object Models – The ECMAScript library

a managed .NET API for building client applications using a SharePoint object model.
a managed Silverlight object model.
an object model to be used in Javascript, the ECMAScript library.
For developers this is an important step forward. Until now, developing SharePoint applications using an object model was limited to applications running on the server. For client applications we had to rely on web services and the RPC protocols. Using these 3 new models, it will be much easier to create client applications. And the reach of our applications will be bigger, because they are very likely to also run on the new SharePoint Online. The three object models are a limited sub set of the server object model. Most objects, properties and methods of the site collection (SPSite) and it’s underlying structures are available in the new models.

In this article I will show you an example of a custom ASPX page that will use the Javascript library. It is a page that runs in the LAYOUTS folder. It shows all users that have direct permissions on the current site. By clicking a user name, the page will show me more information about that user. By selecting a user and one of the available SharePoint groups, the page will add the user to that group. After doing that, the page will remove the permissions for the user.

Showing the users and the user groups is done in server side code. Showing user information and moving the user’s permissions to the group is handled by javascript using the ECMAScript library.

Step 1 – Show the users and groups

The ASPX page loads the lists with users and groups in the OnLoad of the page. It creates a collection of custom objects and sets these collections as the datasource for the Repeater controls. The code snippet below shows how the users are loaded:

   1: SPWeb web = SPContext.Current.Web;
   2: List<SharePointUser> users = new List<SharePointUser>();
   3: foreach (SPRoleAssignment assignment in web.RoleAssignments)
   4: {
   5:     if (assignment.Member is SPUser)
   6:     {
   7:         SPUser user = (SPUser)assignment.Member;
   8:         SharePointUser usr = new SharePointUser(user.ID, user.Name);
   9:         users.Add(usr);
  10:     }
  11: }
  12: listUsers.DataSource = users;
  13: listUsers.DataBind();
The snippet below shows the ASPX code for the repeater that shows the users:

   1: <asp:Repeater ID="listUsers" runat="server">
   2:     <HeaderTemplate>
   3:     <h3>Users with direct permissions on this site</h3>
   4:     </HeaderTemplate>
   5:     <ItemTemplate>
   6:     <li style="list-style-type:none">
   7:         <input type="checkbox" id="selectUser<%# DataBinder.Eval(Container.DataItem, "ID") %>" name="selectUser" />
   8:         <a href="javascript:getUserInfo(<%# DataBinder.Eval(Container.DataItem, "ID") %>);">
   9:             < %# DataBinder.Eval(Container.DataItem, "Name") %>
  10:         </a>
  11:     </li>
  12:     </ItemTemplate>
  13: </asp:Repeater>
For every user in the collection, a hyperlink is rendered. When the link is clicked, javascript function “selectUser” is called. This function takes the ID of the user as parameter

Step 2 – Preparing the page for using the ECMAScript library

The ECMAScript library is available in a number of JS files in the LAYOUTS folder. The main file is SP.js. When you include this file in the APSX page using a ScriptLink control, all other required JS files are loaded automatically. This MSDN page shows all relevant files. By linking SP.js to your page, the SP namespace is registered. This is the SharePoint namespace that contains all objects. If you are going to build code using this library, you will very likely need this MSDN Page to reference what object, properties and methods are available. The SharePoint js files are minified (‘crunched’ in the SDK) versions. This makes them hard to read and use for debugging. Therefore every js file also has a ‘debug’ equivalent in the same folder. By opening sp.debug.js you will be able to see what is available in the SP namespace.

The snippet below show how to prepare the ASPX page:

   1: <SharePoint:ScriptLink
   2:     Name="sp.js" LoadAfterUI="true" Localizable="false"
   3:     runat="server" ID="ScriptLink1" />
Step 3 – Getting the user information

As we have seen in step 1, clicking a user’s name fires the javascript function ‘selectUser’. This function is shown in the snippet below.

   1: function getUserInfo(userID) {
   2:     var clientContext = new SP.ClientContext.get_current();
   3:     var web = clientContext.get_web();
   4:     var userInfoList = web.get_siteUserInfoList();
   5:     var camlQuery = new SP.CamlQuery();
   6:     camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ID\'/>' +
   7:                           '<Value Type=\'Number\'>' + userID + '</Value></Eq>' +
   8:                           '</Where></Query><RowLimit>1</RowLimit></View>');
   9:     this.collListItem = userInfoList.getItems(camlQuery);
  10:     clientContext.load(collListItem);
  11:     clientContext.executeQueryAsync(
  12:         Function.createDelegate(this, this.onQuerySucceeded),
  13:         Function.createDelegate(this, this.onQueryFailed));
  14: }
As in server side code, we first need to get the SharePoint context. Because our page is an ASPX page running in the LAYOUTS folder, it is always in context of the current SharePoint site. In all 3 new client object models, the SharePoint context is represented in a ClientContext object. In line 2 of the snippet above, we’re getting the current SharePoint context. The next few lines look pretty familiar if you are used to SharePoint server side programming. We are getting a reference to the User Information List of the current site. Next we create a CAML query to find the list item for the user that was selected, and we load the items based on that query from the list. The big difference with the server side object model, is that we did not yet have any contact with SharePoint. Although we have called the getItems method of the list, our collection is not yet loaded. This happens when we load the collection in line 10 and execute the query using clientContext.ExecuteQuery in line 11. This gives you the option to minimize the number of roundtrips to the server from your client code. This makes SharePoint client programming different from server side programming. You need to do more thinking about what objects and properties to use when. It makes sense to load as many objects you need, before calling ExecuteQuery once, to actually get the objects from the server.

In the sample above, you see another difference between client and server side programming. The ECMAScript library is, as the Silverlight API, asynchronous. The ExecuteQuery method takes 2 parameter, the functions that will be called in both a success and a failure scenario. The snippet below shows the ´success´ function of my sample page:

   1: function onQuerySucceeded(sender, args) {
   2:     var item = collListItem.itemAt(0);
   3:     var profile = item.get_item('Notes');
   4:     var pictureUrl = item.get_item('Picture').get_url();
   6:     var userImage = document.getElementById('userImage');
   7:     userImage.src = pictureUrl;
   8:     var profileDiv = document.getElementById('userProfile');
   9:     profileDiv.innerHTML = profile;
  10: }
This code loads the first item from the collection, get the values of the Notes and Picture

Step 4 – Move the user to the group

Last part of this article show how to remove the user permissions and add the user to the selected group. When a groupname is clicked, the javascript function moveSelectedUsersToGroup is called and the ID of the group is passed as parameter. The snippet below shows this function:

   1: function moveSelectedUsersToGroup(groupID) {
   2:     var users = document.getElementsByName('selectUser');
   3:     this.clientContext = new SP.ClientContext.get_current();
   4:     this.web = clientContext.get_web();
   5:     var groups = web.get_siteGroups();
   6:     var group = groups.getById(groupID);
   7:     var groupUsers = group.get_users();
   8:     for (i = 0; i < users.length; i++) {
   9:         if (users[i].checked) {
  10:             var id = users[i].id.replace(/selectUser/, '');
  11:             var siteUsers = web.get_siteUsers();
  12:             var user = siteUsers.getById(id);
  13:             groupUsers.addUser(user);
  14:             var assignments = web.get_roleAssignments();
  15:             var assignment = assignments.getByPrincipalId(id);
  16:             assignment.deleteObject();
  17:             clientContext.executeQueryAsync(
  18:                 Function.createDelegate(this, this.addUsersSucceeded),
  19:                 Function.createDelegate(this, this.onQueryFailed));
  20:         }
  21:     }
  22: }
What this does before the query is executed to SharePoint, is:

get a reference to the SharePoint group
find the selected user in the site users
add the user to the selected group
find the role assignment for the selected user
delete the role assignment for the selected user
By submitting the query to SharePoint, all these actions are all executed at once in 1 roundtrip to the server. If this action is successful, the javascript function addUsersSucceeded is called. This function has not specical function, it notifies the user about the outcome of the process.

In this article we have seen how to use one of the three new client object models, the ECMAScript library. Although programming client applications is now a lot easier, and is more like programming the server, the are some conceptual differences that are important to understand. The next few articles will show you some examples on how to get started using the other two client object models.

Pazartesi, Mayıs 10, 2010

Son Kullanıcı Deneyimi için Tasarım Süreçleri - UX Design Process

Proje geliştirme süreçleri ile bu projeleri kullanacak olan son kullanıcıları göz önüne aldığımızda projelerden beklentiler gittikçe artmaktadır. Gerek işlevsellik gerekse fonksiyonellikte artış aranırken bir yanda da yeni çıkan teknolojiler ile birlikte artık oluşturulan projelerde tasarıma da oldukça fazla öncelik tanınmaya başlamıştır. Son 2-3 yıla kadar son kullanıcı deneyimini uzan süreç geliştirme ve entegrasyon süreçlerinden ötürü geri planda bırakırken artık tasarımsal öğelerin uygulamalara uyarlanabilmesi kolaylığı sayesinde istekler içerisine girmiştir. Çok basit bir örnek vermek gerekirse, boş bir windows form oluşturup içerisine standart bir button eklendiğimizde Windows Vista öncesi işletim sistemlerinde çok basit bir görünüm ile karşımıza çıkmaktadı. Ancak bu basit görünümün sebebi windows 'un kullanmış olduğumu temadan kaynaklandığını son kullanıcılara açıklamak oldukça zor bir durumdu. Aynı uygulamayı Windows Vista ya da sonrası bir işletim sisteminde çalıştırdığımızda ise o basit, standart button 'un ne kadar görsel bir görünüme kavuştuğunu görürüz. Ya da eskiden tasarımcılar tarafından hazırlanmış olan görsel öğeleri uygulamalara entegre etmeye çalıştığımızda tasarlanan ile sunulan arasında bariz farkların oluşması proje açısısında oldukça olumsuz bir izlenim bırakıyordu.

Son kullanıcı deneyimlerini en üst seviyeye çıkartmanın yollarından biri de 3. parti yazılım firmalarının hazırlamış olduğu bileşenleri kullanarak tasarımsal zenginliğin sağlanması mümkün. Ancak bu tür yazılım firmalarının bileşenlerini kullanmanın da bariz bir sıkıntısı bulunmaktadır. PERFORMANS. Evet tasarımsal öğelere öncelik vermek istediğimizde performans konusunda bariz kayıplar yaşamamıza neden olabiliyor. Bu durumda da karşımıza seçmemiz gereken iki seçenek sunuluyor. Ya tasarımını benzersiz bir güzelleğe taşıyacağız ya da uygulamanın performanslı bir şekilde çalışmasına olanak tanıyacağız. İşte artık bizler için önemli olan bu iki seçenekten birini seçmek yerine ikisini de kullanıcılara sunabilmektir.

Kullanıcı Deneyimi için Temel Başarı Faktörü Nedir?

Biraz önce de açıkladığımız üzere daha önceden uygulamalar için cin ali gibi tasarımı ile olsun ama herşeyi yapsın yaklaşımı içinde yaklaşılırdı (Yazılımcılar bu yaklaşımı besler. Bu düşüncelerini etrafta istenene benzer örnekleri olmadığı için de son kullanıcı olan müşterilerine kabul ettirebilirlerdi.). Ancak artık müşteriler için projelerde fonksiyonellik başarı için yeterli bir etken olarak görülmemeye başladı. Artık başarılı bir projenin ön şartı her uygulamanın basit yapabildiği bir işlemi olağan üstü birşeymiş gibi gösterebilmek olarak algılanmaktadır. Eskiden bu imajı uygulamayı satan satış temsilcileri sağlar ve satış işlemi tamamlandığında bir butona basar ve o işlemi yapardınız biterdi. Ama dikkat edilmeyen bir nokta var. Müşteri için önemli olanı tekrardan anlatmak gerekirse, bir butona basıp onun bir mi yoksa iki mi saniyede mi olduğu ile ilgilenmek yerine ben bu butona bastığımda ekranda bana farklı birşey gösteriyor mu diye beklenti içerisine giriyor. İşte bu nokta da projeler üzerinde yapılacak olan makyajlar devreye giriyor. Yine butona basma örneğini ön plana alırsak veri transferi esnasında işlem yapılıyor yazmak yerine iki tane kamyon ekran üzerinde hareket ederse bu son kullanıcıyı oldukça fazla etkileyen, şaşırtan ve büyüleyen bir ekten olarak ortaya çıkması olacaktır. Başka bir basit örneği daha incelemek gerekirse, Windows 'un fare ikonlarından klasik kum saati görünümü yerine dönen bir halka ya da bayan Windows kullanıcılarının en çok hoşuna giden yürüyen bir dinozor görünümü insanların ya da son kullanıcıların beklerken sıkılmalarını önlerken hoşta bir görüntü sunuyor olacaktır. mak90_1

Kısaca özetlemek gerekirse son kullanıcıların deneyimleri için yapılacak en iyi işlem projelerin fonksiyonellik özelliklerine verilen önem kadar tasarımsal özelliklerine öncelik vermektir.

Bugüne kadar son kullanıcıların tasarımsal ihtiyaçlarını karşılamaktan bahsederken sürekli olarak bu işlemi çok basit bir şekilde Windows ortamında WPF, web ortamında ise XBAP ve Silverlight yardımı ile yapabileceğimizi açıklamaya çalıştık. Bu uygulamalarda tasarım işlemlerini bu kadar basit yapılabilmesini sağlayan faktörlere göz atıyor olalım.

Tasarımcı için Araçlar

Tasarımcılar hazırlamış oldukları grafikleri kendi kullanmış oldukları uygulamalar yardımı ile hazırlamaktadır. Ancak bu uygulamalar Visual Studio ile tam uyum içerisinde çalışmamakta ve yukarıda bahsetmiş olduğumuz sorun, eksiklik v.b. gibi durumlar ile yazılımcıları tabikii de projeyi karşı karşıya bırakmaktadır. Bu sebepte hazırlanmış olan grafiklerin Visual Studio 'da sorunsuzca kullanılması için güzel bir ürün grubu hazırlandı ve tasarımcıların kullanımına sunulmuştur. Bu ürün Expression Studio ailesidir.

Microsoft Expression Studio ürün ailesinin içerisinde yer alan araçlar yukarıdaki gibidir. Bu araçları kısaca açıklamak gerekirse,

Expression Blend: WPF ve Silverlight için grafik ve animasyon tasarımlarının Visual Studio ile uyumlu olarak tasarlanabildiği araçtır. Bu araç sayesinde tasarımcı ile geliştirici arasında köprü kurularak daha etkileşimli bir şekilde çalışmaları sağlanır.

Expression Design: Adobe ürünlerinde olduğu gibi vektorel ve Illustrator grafik tasarımlarının yapıldığı araçtır. *.psd dosyalarını düzenleme özelliği ile tasarımcıların işlerini kolaylaştırmaktadır. Ayrıca WPF ve Silverlight uygulamaların da XAML kullanıldığı için bu ürün yapılmış olan tasarımları XAML çıktı verir ve yazılımcıların işlerini kolaylaştırır.

Expression Media: Medya dosyalarını zenginleştirilmiş içerik ile desteklemek ve Silverlight için Streaming optimizasyonunu sağlar.

Expression Web: HTML, CSS, JavaScript ve Asp.Net bileşenlerini kolayca düzenleyebileceğimiz web editörüdür. Ayrıca PHP ve ASP desteği de vardır.

Expression Studio ailesi ürün gruplarının tümü ile birlikte oldukça güçlü bir paket halini almakta ve geliştirici tasarımcı arasında ki ilişkiyi geliştirmektedir. Ayrıca geliştiricilerin Visual Studio üzerinde geliştirmiş oldukları WPF ya da Silverlight projelerini tasarımcılar Expression Blend yardımı ile düzenleyebirler. Ayrıca bu düzenleme olanağının tam tersi de mümkündür.


Kısaca toparlamak gerekirse, son kullanıcıya tasarım olanaklarını kolayca sunabilmek için Expression Studio ailesine gereksinim vardır.

WPF Projesi Geliştirmenin İş Akışı

WPF projesi geliştirmek analistlerden, geliştiricilere, tasarımcılara, testçilere çok daha fazla dikkat gerektiren bir süreç sunmaktadır. İstenen son kullanıcı deneyimini çok iyi anlamak ve ihtiyaçları çok doğru olarak tespit etmiş olmak gerekmektedir. Proje geliştirme sürecini en basit ve iyi şekilde anlatan süreç aşağıdaki şemada görülebilir.

WPF projesini geliştirmek için gerekli iş süreci bu şekildedir. Şimdi adım adım neler yapmaları gerektiğine göz atalım.

1. Elicit Requirements (Gereksinim Analizi - İster Gereksinimleri)

Yazılım projelerini geliştirirken en önemli faktörlerin başında ne gibi istekler ve bu isteklere karşın ne gibi kaynakların harcanacağını tespit etmek gelir. Bu ihtiyaçları karşılayabilmek için müşteriler ile detaylı ve akıllarında yer alan bütün istekleri söyletecek kadar konuşturmak ve bilgi toplamak gerekmektedir. Bütün ihtimallerin, durumların ve senaryoların belirlenmesi ile bu süreç işini tamamlayacaktır.

2. UI Prototype (Doğrulanabilir Prototifler Oluşturmak)

Protofif oluşturmak yazılım geliştiriciler, mühendisler ve tasarımcılar arasında daha etkili fikir paylaşımını arttırması sebebiyle daha çok tercih edilmektedir. Çünkü hayallerde olan bir tasarının gerçeğe dönüşmeye başlaması ile (herhangi bir çizim bile olabilir) çok daha etkili çözümlerin ortaya çıkabileceği ve son kullanıcı deneyimi açısından çok etkili çözümler bulunabilir. Prototif hazırlamanın bir kaç yolu vardır. Şimdi bunları inceliyor olalım;

    •Yazılı Dökümanlar: Oluşturulan her projenin adımlarını ve isterlerini barından yazılı bir dökümanı olması oldukça çok önemlidir. Herhangi bir araç ve alt yapı gereksinimi bulundurmaz. Sadece bir kağıt ve kalem yardımı ile aklınıza gelenleri o an yazarak daha sonrasında detaylı bir şekilde değerlendirebilmenize olanak tanıyabilir.

    •Tasarılaştırmak: Visio, Powerpoint gibi uygulamalar ile akış ve gelişim süreçlerinin tasarlanması. Visio ile oluşabilecek kullanıcı ekranlarının tasarımlarının temel anlamda hazırlanabilmesi.

    •Expression Blend 3 - Sketch Flow: WPF ile hazırlanan uygulamaların hangi adımlarından sonra nereye gideceğini ya da ne işlemler yapabileceğine açıklamak açısından kullanılması gerekmektedir.

    •Görülebilir Prototif: Sahte veriler yardımı ile gerçek uygulama üzerinde test yapmak ve sunumlarını gerçekleştirmek olarak görebiliriz.

Prototiflerin oluşturulması test süreçlerinin daha etkili yapılması ve gelecekte oluşabilecek olan sorunların tespit edilmesi ve hazırlanan uygulamaların daha stabil kullanılabilmesi açısından oldukça önem taşımaktadır.

    •İşleyişi: Prototifin oluşturulması ve gerekli dökümanların hazırlanabilmesi için öncelikli olarak bu süreçleri takip edebilecek bir ekip oluşturulmalı ve bir kişi ekibin liderliğini üstlenmelidir. Ayrıca test yapacak olan çalışan topluluğu lider tarafından hazırlanan test dökümanlarına göre hareket etmeli ve yapılan testler sonucunda oluşan gelişimleri yine bu dökümana ekleyerek tekrardan test liderine gönderir. Bu süreç test başarılı bir şekilde tamamlanana kadar devam edecektir.

3. İş Süreçlerinin Hazırlanması ve İşin Çalışanlara Dağıtılması

4. Grafik Tasarımı

Uygulama içerisinde yoğun olarak kullanılacak olan grafiksel öğelerin hazırlanması esnasında geçen süreçtir.

5. Test Yazılımı


Hepinizin tahmin edeceği üzere bir projede çalışan çalışanların üzerine atanan roller vardır. WPF ya da Silverlight ile son kullanıcı deneyimini maksimize edecek projeler hazırlarken de proje içerisinde çalışanların rol tanımları önceden belirlenmiş ve kesinleştirilmesi gerekmetkedir. Şimdi bu rollerden ve görevlerinden kısaca bahsediyor olalım.

    •Uygulama Geliştici & Mühendisi:
Bu ünvana sahip olan çalışanlar veri modellerinin, işlevselliğin ve temel tasarım üzerinde uygulamanın yapması gereken işlevleri yapabilmesine olanak tanıyan süreci tamamlamaktadır.
    •Grafik Tasarımcı: Analistlerin son kullanıcılar ile yapmış oldukları toplantılar sonrasında tespit edilmiş isteklerini karşılayacak olan görsel öğeleri tasarlayacak olan kişidir. 3B, 2D, Animasyonlar ve diğer bütün grafiksel işlemleri uygulama da kullanılması için tasarlar.
    •Etkileşim Tasarımcısı: Grafik tasarımcısı tarafından hazırlanan tasarımları uygulama içerisinde nerelerde kullanılabileceğine karar veren ve bu kararlarını Visio v.b. uygumalar ile dökümante eder.
    Entegrasyon Uzmanı & Mühendisi: İlk olarak söylememiz gereken sektörde çok zor bulunan biz uzmanlık alanıdır. Bu ünvan ile çalışan kişiler geliştiricinin ve tasarımcının hazırlamış olduğu parçaları birleştirerek uygulamanın geliştirme sürecinin tamamlanmasını sağlamaktadır.

Son kullanıcı deneyimini arttırmak için yapılması ve dikkat edilmesi gerekenleri, çalışanların ne tür vasıflarda olması ve neler yapması gerektiğini açıklamaya çalıştık. Ayrıca tasarımcı ile geliştiricinin birlikte rahatça çalışılması için gerekli olan araçların neler olduğundan da bahsederek genel hatları ile proje geliştirme sürecini tanımlamış olduk.
Ayrıca son kullanıcı tasarım süreçlerini akış şeması üzerinde incelemek isterseniz burada yer alan PDF dosyasından yararlanabilirsiniz.

Sonuç olarak bu yazımızda en temel hatları ile WPF ya da Silverlight teknolojilerinden yararlanarak son kullanıcıların deneyimlerini arttıracak uygulamaları nasıl geliştirebileceğimizi anlatmaya çalıştık.

Umarım sizler için yararlı olabilmiştir.

Turhal Temizer

Pazartesi, Mart 22, 2010

Silverlight 4 – Eğitim Videoları

Silverlight ‘ın 4 sürümünü kullanmak istiyorum ama önce bunu öğrenmek istiyorum diyorsanız ve yazılı içerik yerine görsel ders üzerinden bu teknolojiyi öğrenmek istiyorsanız Channel 9 üzerinde var olan Silverlight 4 öğrenme videoları tam size göre olacaktır. Link aşağıda yer almaktadır.

Perşembe, Mart 04, 2010

Silverlight: Merged Dictionaries

Silverlight ile uygulama geliştirirken resource dosyalarını kullanmanın en pratik yoludur MergedDictionaries. Ancak bunu kullanabilmek için çok az XAML bilmek gerekmektedir ve kullanım şekli aşağıdaki gibidir.

< ResourceDictionary >
    < ResourceDictionary.MergedDictionaries >
        < ResourceDictionary Source="BlueResourceDictionary.xaml" / >
    < / ResourceDictionary.MergedDictionaries >
< / ResourceDictionary >

 Bazı uygulama geliştiriciler "bu kullanımı kod ile yapabilir miyiz?" ya da "nasıl yapabiliriz?" şeklinde sorular sormaktadırlar. Bu mümkündür ve kullanım şekli aşağıdaki gibidir.

 var dictionary = Application.Current.Resources; dictionary.MergedDictionaries.Clear();
var dict = new ResourceDictionary { Source = new Uri("Blue.xaml", UriKind.Relative) };

Kolay gelsin...

Cumartesi, Temmuz 11, 2009

Silverlight 3.0 Final& Expression Studio 3.0 RC sürüm yayınlandı.

Web uygulamalarında RIA uygulamalarına en kapsamlı şekilde kullanılmasına olanak tanıyan Microsoft Silverlight teknolojisinin 3.0 sürümü artık tam sürümü ile hazırdır.

HD Medya uygulamaları, tarayıcı dışında çalışabilen uygulamalar hazırlayabilmemize artık olanak tanınabilecektir. Ayrıca Expression Studio ailesi Rc sürümüne Silverlight 3.0 sürümü ise final sürüm durumuna getirilmiştir.

Perşembe, Haziran 18, 2009

Silverlight 2.0 – SQL İşlemleri için WCF ve Linq To SQL Kullanım

Silverlight uygulamları RIA yapısında oldukları için direk sql işlemleri ile çalışmak yerine bunları bir servis olarak oluşturup kullanmamız önerilmektedir. Bu sebepten ötürü veri tabanı işlemlerimizi yapmak için ister Linq Data Model oluşturduktan sonra WCF servisine querynin yapılacağı metota bağlyoruz. Sonrasında Silverlight projesine Web service referance olarak ekledikten sonra gerekli işlemleri yaparak istediğimiz data kontrollerine ekleyebilinmesi mümkündür.

Sırası ile yapılması aşağıdaki adımları uygularsanız sizin projenizde sorunsuz bir biçimde çalışacaktır.

  • Silverlight projesi oluşturuyoruz.
  • Oluşturulan web projesine Linq To SQL Data Model ekliyoruz.
  • Oluşturulan web projesine WCF Service ekliyoruz ve aşağıdaki kodları interface ve sınıfa ekliyoruz.


using System.Collections.Generic;
using System.ServiceModel;

namespace SQLData.Web
    // NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
    public interface IService1
        List<Customer> GetCustomerGetByLastName(string lastName);


using System.Collections.Generic;
using System.Linq;

namespace SQLData.Web
    // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config.
    public class Service1 : IService1

        #region IService1 Members

        public List<Customer> GetCustomerGetByLastName(string lastName)
            var ctx = new DataClasses1DataContext();
            var matchingCustomer = from cust in ctx.Customers
                                   where cust.LastName.StartsWith(lastName)
                                   select cust;
            return matchingCustomer.ToList();


  • Yukarıdaki işlemleri gerçekledikten sonra webconfigte ws service content özelliğini basic olarak değiştiriyoruz.
  • Uygulamayı derliyoruz.
  • Sİlverlight uygulaması üzerine ilk olarak Silverlight.Data.Control assembly ‘ını projeye ekliyoruz. Bu işlem silverlight uygulamasında DataGrid kontrolünü kullanabilmenize olanak tanıyacaktır.
  • Silverlight uygulamasına WCF service ini referans olarak ekliyoruz.
  • Sonrasında Page.xaml ve page.xaml.cs ‘e aşağıdaki kod bloklarını ekliyoruz


<UserControl x:Class="SQLData.Page"
    Width="700" Height="300">
    <Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">
            <RowDefinition Height="30"/>
            <RowDefinition />
            <RowDefinition Height="30" />
        <TextBlock Text="Lütfen Arayacağınız kişinin soyadını giriniz.." Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left"/>
        <TextBox x:Name="txtLastName" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Right" Width="150" Text="Lütfen arayın..."/>
        <my:DataGrid x:Name="grd" AlternatingRowBackground="Beige" AutoGenerateColumns="True" Width="700" Height="200" CanUserResizeColumns="True" Grid.Row="1"/>
        <Button x:Name="btnClick" Grid.Row="2" HorizontalAlignment="Center" Content="Ara"/>


using System;
using System.Windows;
using System.Windows.Controls;

namespace SQLData
    public partial class Page : UserControl
        public Page()
            Loaded += new RoutedEventHandler(Page_Loaded);

        void Page_Loaded(object sender, RoutedEventArgs e)
            btnClick.Click += new RoutedEventHandler(btnClick_Click);

        void btnClick_Click(object sender, RoutedEventArgs e)
            ServiceReference1.Service1Client webService = new SQLData.ServiceReference1.Service1Client();
            webService.GetCustomerGetByLastNameCompleted += new EventHandler<SQLData.ServiceReference1.GetCustomerGetByLastNameCompletedEventArgs>(webService_GetCustomerGetByLastNameCompleted);

        void webService_GetCustomerGetByLastNameCompleted(object sender, SQLData.ServiceReference1.GetCustomerGetByLastNameCompletedEventArgs e)
            grd.ItemsSource = e.Result;

Yukarıdaki işlemleri adım adım yaptıktan sonra projemizi çalıştırdığımız da sorunsuzca uygulamamız çalışacaktır. Yaptığımız işlem ise soyadını girdiğimiz kullanıcıları DataGrid kontrolünde listelemektir.

Not: Linq To Sql Data Model de SQL Server 2008 veri tabanı örneklerinden AdventureWorks_LT veri tabanından Customer tablosunu kullandık.

Herkese mutlu günler diliyorum.

Perşembe, Mayıs 21, 2009

Visual Studio 2010 Beta1 – Kurulum ve Genel Bakış

Gün içerisinde çalışmanın dışında bir de Visual Studio 2010 ‘u kurmakla zaman harcadım. Web installer versionu ile kurduğum VS ‘in kurulum ile ilgili ekran görüntülerini size yazının devamında sunuyor olacağım. Bir çok yenilikle bizlere sunulacak olan VS2010 ilk Beta1 sürümü ile karşımızda. F# ‘tan paralel programlamaya ide güncellemesine kadar nice yeni özelliklerle biz yazılımlacıları mutlu etmeye geliyor.

Kurulum aşaması;






Yukarıdaki işlemler sonucunda uygumala kurulmuş oluyor. Kurulum sonrası bizi karşılayan ekrandaki değişiklik oldukça köklüdür.



Zaman içerisinde daha detaylı bilgi vereceğim.

Cumartesi, Şubat 21, 2009

Moonlight 1.0 Yayında


Yaklaşık 1 yıl önce Silverlight ‘ın alpha sürümü ile birlikte geliştirildiği duyurulan Moonlight (Linux için Silverlight) bizlerin kullanımına sürülmüş durumdadır. projesinin başında olan Miguel de Icaza bu projenin de geliştirilmesinde çok büyük katkıları olmuştur.

Novell firmasının desteği ile geliştirilmesi tamamlan Moonlight ‘a linki üzerinden erişebilmeniz mümkündür.

En sık kullanılan Linux sürümlerinden openSuse, Suse Linux Enterprise, RedHat, Fedora ve Ubuntu ‘da sorunsuz bir şekilde çalışabilmektedir. Silverlight en önemli özelliklerinden biri de media streaming işlemlerini çok başarılı bir şeklilde gerçekleştirebilmesidir. Fakat bu işlemleri yaparken wmv, wma, mp3, v.b. uzantılı dosyalar kullanmamız gerekiyor. Bunlardan Microsoft için olanlarını kullanmak ise Linux kullanıcıları için zor bir durumdu. Bu da Moonlight kullanımı esnasında ufak bir eklenti indirilerek çözülecektir.

Linux kullanıcıları, gözünüz aydın diyorum. :)

Pazar, Ocak 11, 2009

SmoothHD – Silverlight ile HD Video Streaming

Silverlight ‘ın HD görüntüleri çok hızlı bir şekilde yayınlayabilmesi özelliği (streaming) sayesinde bir çok görüntüyü çok yüksek kalitede artık internetten izleyebilme olanağına sahibiz.

Bu olanaklar ile yapılmış uygulamaları araştırırken isimli bir siteye denk geldim. Standart bir ADSL bağlantı hızı ile hiç takılmadan videoları izleyebilmemize olanak tanımaktadır. Ben içeriğini de çok beğendim. Sizlerinde beğeneceğini umarak paylaşmak istedim.

İyi eğlenceler…

Cumartesi, Ağustos 09, 2008

Sharepoint için Silverlight --> Blueprint

Çalıştığım şirketteki pozisyonum gereği belli bir süredir Sharepoint, WSS, MOSS gibi teknloljileri inceliyorum ve uygulama geliştiriyorum. Bu araştırmalarım esnasında Silverlight ile Sharepoint 'in entegreli olarak çalışabildiğine ve buna da Blueprint dendiğini gördüm.
Silverlight uygulamalarını sharepoint üzerinde çalıştırmak istediğimizde bizden hangi versiyon ile çalışmak istediğimiz hangi kod dosyası ile geliştirme yapmak istediğimiz gibi işlemleri yapmamızı istemektedir.
Kullanmak isteyenler ilk olarak bir Virtual PC indirmelidir. Daha sonra Microsoft tarafında 30 günlük deneme sürümü olarak hazırlanan ve içerisinde MOSS ve WSS kurulu olan Windows Server 2003 'ü indirmeleri gerekmektedir. Daha sonrasında ise yapacağınız uygulamalar geliştirmek olacaktır.
İyi çalışmalar...
Not: Blueprint ile ilgili daha ayrıntılı bilgi için İngilizce olarak yazılmış olan yazıda yer alan linklerden yararlanabilirsiniz...

Silverlight Blueprint for Sharepoint

Did you ever want to integrated Silverlight with SharePoint? Check out the brand new Silverlight Blueprint for SharePoint site: !

At U2U we've created the six samples of the Blueprint that illustrate the integration options. You can read more details on Patrick's blog and Karine's blog (she posted some screenshots). The Blueprint will also be announced by Bill Gates during the SharePoint Conference keynote later today, the SharePoint team blogged

Cuma, Mayıs 02, 2008

Galata Tours Showcase 'de

Biraz önce topluluğundan güzel bir mail aldım. Fransa 'da yer alan turizm şirketine yaptığım web sayfasının intro sayfası görülebilecekler listesine eklenmiş. Müşterilerimizin beğenisini kazanan bu tasarımın bütün dünyacada görülebilecek olması hem benim açımdan hemde Galata-Tours yöneticileri açısından güzel bir his olacak.

Sitenin gerçek site tam olarak işleme girmedi. Test için yazdığım latince kelimeler bile hala duruyor. :) Ana site Fransızca olacağı için böyle bir süreç geçiyor.

Intro sayfayı merak edenler için linki:

Intro sayfaya ilişkin 'den bir ekran görüntüsüde altta yer almaktadır.


Daha boş bir zaman bulduğum zaman ise sitenin içeriğini WPF browser uygulaması (XBAP) ile tekrardan düzenleyeceğim. Ama o zamana kadar ASP.Net ile kalsa da olur. :)

Silverlight 2.0 - Uygulama Alanımızın Kontrol Edilmesi

Silverlight 2.0 ile uygulamalar geliştirmeye bir önceki yazımızda başlamıştık. İlk olarak Silverlight 2.0 ‘ın proje dosyaları konusunda bize sağlamış olduğu yeniliklere göz attıktan sonra 2.0 sürümü ile eklenmiş olan Silverlight kontrollerinden yararlanarak ilk uygulamamızı geliştirmiştik. Uygulamamızda tek bir buton yer alıyordu ve üzerine tıklandığı zaman içeriğini yönetilebilir kod tarafından değiştirebiliyorduk. Bu ufak örneğimiz ile Silverlight 2.0 dünyasına giriş yapmış bulunuyoruz. Hazırlamış olduğumuz web uygulamalarında ekranımızı istediğimiz oranda yönetebilmemiz gerekmektedir. Web formumuzda yer alan kontrollerimizi belirli alanlarda bulundururken, formumuzun çeşitli bölgelerine farklı farklı kontroller eklememiz gerekmektedir. Yukarıda vermiş olduğumuz bilgileri göz önünde tutarak bu yazımızda web formumuzu nasıl yönetebileceğimize değinmeye çalışacağız.

Web Formu Yönetebilmek

Windows Presentation Foundation ve Silverlight kullanmış olduğumuz formlar üzerinde sınırları zorlayacak ölçülerde değişiklik yapılmasına olanak tanımaktadırlar. Geliştiriciler için sağlanan bu kolaylıklar sayesinde ekran üzerinde yer alan bir kontrolün hangi noktada nasıl duracağından üstüne tıklandığında ne tür animasyonlar yapacağına kadar birçok kullanıcı arayüzü tabanlı işlem yapabiliyoruz. Ayrıca forma eklediğimiz kontrollerin dinamik animasyonlar alabilmesini ve internet tarayıcımızın boyut değişikliği durumunda form üzerinde yer alan kontrollerimizin de form üzerinde otomatik olarak boyutlanmasını sağlayabiliyoruz. Geliştiriciler Windows Presentation Foundation da form yüzeyinde yer alan kontrolleri istediğimiz şekilde boyutlandırarak kullanabiliyordu. WPF ‘te de form yüzeyi yönetilirken en çok kullanılan panel yapıları Silverlight Beta1 ‘in içerisine eklenmiştir. Şimdi bu panellerden en önemli üç tanesini açıklamaya çalışalım.


Canvas Panel

Canvas panel ’i en basit anlamda açıklamaya çalışırsak, form üzerine eklemiş olduğumuz kontrollerin pozisyon ve koordinat bilgilerini belirtebildiğimiz en temel form yüzeyidir.

Canvas nesnesinde kullanılan öğeler, XAML dosyadan çağırılan “Attached Property” kontrollerin pozisyonlarına ait bilgilere sağda, solda veya ortada biçiminde bilgiler aktarılmaktadır.

Attached Property ‘de tutulan veriler form üzerinde izin verildiği düzeyde işlem yapabilmemize olanak tanımaktadır. Canvas içerisinde, bir kontrolün form üzerinde hangi noktada tutulacağına ilişkin bilgileri, “Left”, “Top” v.b. özelliklerine form koordinatlarına ait değerleri verilerek çok basit olarak form üzerindeki yerlerini belirlememize olanak tanımaktadır. Şimdi çok basit bir örnek verelim. Canvas yüzeyimizin üzerine iki adet buton ekleyeceğiz. Eklemiş olduğumuz kontrollerin canvas üzerindeki koordinat özelliklerine Left için 50 Top için ise 50 ve 150 değerlerini vereceğiz. XAML kod tarafında belirttiğimiz özellikleri eklersek,

Canvas yüzeyinde kullanabileceğimiz koordinat noktalarına ilişkin bize sunulan özellikler,

Yukarıdaki gibidir. İki form kontrolümüzü uygulamamıza ekledikten sonra derlediğimiz zaman ise web tarayıcımızda aşağıdaki gibi bir görünüm elde ediyoruz.

Canvas yüzeyimiz internet tarayıcımızı her ne kadar büyültüp küçültürsek küçültelim belirtmiş olduğumuz boyut kadar ekran yer kaplayacaktır. Ayrıca canvas yüzey üzerinde yer alan kontrollere de canvas üzerindeki koordinat noktalarında kesin noktalar verdiğimiz için tarayıcı boyutunda yapılacak her türlü değişiklikte kontrollerin form üzerinde kalacakları noktalar aynı olacaktır.

Canvas yüzeyimize alternatif olarak geliştirilmiş olan StackPanel ve Grid yüzeylerde yer almaktadır. Bu yüzeyler dinamik olarak kontrollere özellik atayabilmemize olanak tanımaktadır.


StackPanel üzerine eklediğimiz kontroller aynı değerler almaları durumunda yüzeyi eşit satırlara bölecek ve bu satırlara ne kadar kontrol belirlediysek onları yerleştirilecektir. Şimdi bahsettiğimiz bu özellik içim XAML dosyaya bütün özellikleri aynı olan üç buton ekleyelim ve sonucu hep birlikte görelim.

Buton kontrollerimizi ekledikten sonra uygulamamızı derlediğimizde internet tarayıcımızda aşağıdaki gibi bir sonuç alırız.

Eğer biz satırlar olarak değil de sütun yani yatay biçimde sıralamak istiyorsak orientation(yönelim) özelliğini Horizontal(yatay) olarak belirleyeceğiz. StackPanel varsayılan olarak orientation özelliği Vertical(dikey) olarak belirlenmiştir.

Uygulamamızı derlediğimiz zaman web form üzerinde yer alan kontrollerin otomatik olarak koordinat noktalarını değiştirdiğini göreceğiz.


Grid kontrolü yüzey yönetimi konusunda karşımıza en kompleks yapı olarak çıkıyor. Grid, geliştiricilere çoklu satır ve sütun özelliklerini sumaktadır. Dinamik olarak satır ve sütun özelliklerini belirledikten sonra form kontrollerine atayarak kullanabilmemiz mümkündür.

Satır ve sütuna ait özellikleri tanımlayabilmemiz için <Grid.RowDefination> ve <Grid.ColumnDefination>özelliklerine değerler atayabilmemiz gerekmektedir. Bu iki özellik Grid kontrolünün alt özelliklerindendir.

Şimdi bu Grid kontrolünü ve alt özelliklerini nasıl kullanabileceğimize göz atalım.

XAML dosyamızda kodlarımızı ekledikten sonra uygulamamızı derlediğimizde internet tarayıcımızda aşağıda ki gibi bir ekran görüntüsü bizi karşılayacaktır.

Grid kontrolünü kullanarak çok satır ve sütun kullanımı öğrenmiş oluyoruz. Fakat grid kontrolü ile ilgili değinecek olduğumuz bir nokta daha eğer form kontrollerinin boyutlarını tarayıcı ile otomatik olarak şekillenmesini istiyorsak Height ve Width özelliklerine Auto yerine geçen “*” ‘ı koymamız yeterli olacaktır.

Web Formda Panellerin Kullanıma Göre Sıralanması

Web formumuzun alanını iki satıra böleceğiz. Bu bölme işlemimizi yapmamızın amacı üst satıra arama bölümü yaparken alt bölümü genel bilgilendirme ekranı olarak belirleyeceğiz. Peki, biz bu işlemi satıra bölmeden de yapamaz mıydık diye kafanıza bir soru takılır. Cevabı yapabilirdik olur ama yapmış olduğumuz tasarımın sonucunda kullanıcılar internet tarayıcısı boyutlarını değiştirdikleri takdirde karşılaşacakları görüntü hiçte hoş olmaya biliyor. Göze güzel gözükmemesinin sebebi işlemlerimizi tek satırda yapacağız için ya satır ve sütuna tek değer vereceğiz ya da değerlerini otomatik olarak aldıracağız. Bu iki durumda da istenilen verim sağlanamayacağı için alanımızı iki parçaya bölüyoruz. Üst satırımızın yüksekliği özelliğine “40” değerini verirken alt satırımızın yüksekliği değerine otomatik olarak şekillenebilmesi için “*” değerini veriyoruz. Ayrıca ayırdığımız alanı görebilmemiz için Grid kontrolümüzün çizgi değerlerini de True değerine getiriyoruz.

Grid de oluşturmuş olduğumuz satır ve sütunları göstermesini istediğimiz için uygulamamız boş olduğu halde yalnızca bu çizgileri gösterecektir.

Şimdi Grid kontrolünün içerisine yeni bir alt kontrol daha ekleyelim ve bu kontrolümüzün içerisine sütunları da ekleyeceğiz. Ayrıca Grid kontrolümüzün çizgilerini yine açık tutuyoruz.

Uygulamamızı derlediğimiz zaman internet tarayıcımızda karşılaşacak olduğumuz ekran görüntüsü aşağıdaki gibidir.

Yukarıda belirttiğimiz satır ve sütun özellikleri HTML tablolardan alışık olduğumuz satır ve sütunlar ile aynı mantıkta çalışmaktadır. Bu ufak notu aklınızdan çıkarmazsanız çok daha kolaylıkla işlemlerinizi yapabilirsiniz.

Web formumuzun alanını daha rahat kullanabilmek için parçalara böldüğümüze göre artık form kontrollerimizi uygulamamıza eklemeye başlayabiliriz. <Border> kontrolü ile arama çubuğumuz yanında bir tasarım oluşturacağız ve border kontrolümüzün içerisinde yazı gözükmesi için >TextBlock> kontrolünü ekliyoruz. Arama yapabilmemiz için içerisi kullanıcı tarafından doldurulacak bir kontrol eklememiz gerekmektedir. Bunun için <WatermarkedTextBox> ekliyoruz. Son olarak ta alanımızın alt kısmının boş gözükmemesi için bir <TextBlock> daha ekliyoruz.

Uygulamamızı çalıştırdığımızda ise aşağıdaki ekran görüntüsünü elde ederiz.

Uygulamamızın Boyutunun Dinamik Olarak Değiştirilebilmesi

XAML dosyamızdaki kodları eklerken projenin boyutunu elimizle giriyoruz ve bu girdiğimiz boyut doğrultusunda uygulamalarımız oluşmaktadır. Eğer bu boyut sabitleme işlemleri ile devam edersek bizim form kontrollerimize atadığımız otomatik boyutlandırma özelliklerinin hiç biri aktif olmayacaktır. Aktif olmayacaktır sözünde anlatmak istediğimiz nokta, uygulamamızın içeriğinin boyutunu belirli sınırlar içerisinde tuttuğumuz için kullanıcılar internet tarayıcılarında herhangi bir boyut değişikliği yaptığında belirli sınırların dışına çıkmadığını görecektir. Uygulama penceresini küçülttüğünde kontrollerin dışarıda kaldığına ya da büyülttüğünde ise arka plan renginin yerine uygulama sınırları dışında beyaz bir ekran olduğunu göreceklerdir.

Şimdi bu sorunu ortadan kaldırabilmemiz için yollar arayalım.
İlk olarak uygulamamızın genişliğini sabit tutarken boyutunu daraltmayı deniyoruz.

Bu değişiklik sonrasında uygulamamızı derlediğimizde aldığmız görüntü aşağıdaki gibi olacaktır.

Dikkat edeceğiniz üzere uygulamamızda hala sınırların dışında beyazlıklar gözükmektedir. Ayrıca internet tarayıcımızın boyutunu değiştirdiğimizde kontrollerimizin yerlerin sabit kaldığına dikkat çekmek isterim.

Bu durumda aklımıza şöyle bir çözüm geliyor. HTML sayfaları hazırlarken mecbur kalmadıkça formumuzun boyutunu belirlemezdik. Kullandığımız bu tekniğin en büyük avantajı da sayfamızın internet tarayıcılar üzerinden hangi tür değişiklik yapılırsa yapılsın görünüm açısından bir bozulma oluşmamasına olanak tanımaktadır. Bizde bu mantıktan yola çıkarak uygulamamızda yer alan boyutlandırma değerlerini siliyoruz.

Uygulamamızı derlediğimizde aldığımız sonuç ise aşağıdaki gibi olmuştur.

İnternet tarayıcımızın boyutunu elimizle küçülttükten sonra,

İstediğimiz sonucu elde etmiş gibi gözüküyoruz. Artık uygulamamızı sunduğumuz kullanıcılar hangi çözünürlüğü kullanırlarsa kullansınlar sorunsuz bir biçimde kullanabileceklerdir. Ayrıca bu özelliğimiz ile TurhalDigi uygulamamıza arama bölümü de eklemiş oluyoruz.

Kısaca bu yazımızda neleri incelediğimize değinmek gerekirse, Web Formları kontrol edebilmemiz için bize sunulmuş olan üç kontrolü yani, Canvas, StackPanel ve Grid kontrollerinin temel özelliklerini inceledikten sonra Grid kontrolünden oluşturmuş olduğumuz dinamik boyut özelliklerini form kontrollerine nasıl taşıyabileceğimize değindik. En son olarak ise internet tarayıcılarının boyutlarında veya ekran çözünürlüklerinden kaynaklanan sorunları ortadan kaldırmak için otomatik boyutlandırma özelliklerini nasıl kullanabileceğimize değinmeye çalıştık.

Bir sonraki Silverlight yazımızda TurhalDigi projemiz için adresinden çekecek olduğumuz veriler yardımı ile uygulamamızda yer alan GridView kontrolünü nasıl doldurabileceğimizi incelemeye çalışacağız.

Umarım yararlı olmuştur.

Yazımızda değinmiş olduğumuz uygulamanın kaynak kodlarına linkten erişebilirsiniz.

ScotGu Blog 

Cumartesi, Nisan 26, 2008

Controlling the Distribution of Silverlight Updates in the Enterprise

If you're a systems administrator, one of the aspects of Silverlight that concerns you is probably controlling the distribution of updates. In general, enterprises like to control their desktop and laptop environments to ensure no sudden surprises are caused (for example, by a runtime update that breaks a commonly used application). So some people may wish to dial down the update settings that are optimized for end-users when Silverlight is running in a corporate environment.

Silverlight supports enterprise rollout via WSUS and we provide guidance on how to roll it out across an enterprise via other means such as Group Policy (using the EXE-based installer). Silverlight is installed via a normal MSI plus an MSP-based patch which can be chained through a variety of means. Updating Silverlight to the latest revision can be done automatically or manually (by pushing out the latest MSP).

There are two different knobs an enterprise administrator can turn to control how updates are applied to the runtime:

  • Firstly, if the enterprise sets the UpdateMode DWORD registry value under the HKLM\Software\Microsoft\Silverlight key to 2 then the Silverlight auto-updater will be disabled (i.e. it won't automatically check for updates or try to install them). This is the equivalent to an end-user choosing the Silverlight Configuration dialog and manually disabling auto-updates from the Updates tab.
  • Second, the feature that allows a non-admin to patch Silverlight on Windows Vista without requiring admin elevation is not a Silverlight feature: it's a feature of Windows Installer which can be disabled if the admin wants to do so (and is indeed off-by-default in Windows Server 2008). You can switch this off using Group Policy by setting the DisableLUAPatching property. More information on UAC Patching can be found on MSDN.

If an enterprise disables the LUA patching feature in MSI and does not give their users administrative access to machines then users will not be able to install, remove or patch Silverlight. Only the enterprise administrator could touch the files. Obviously, it's important that someone is actively monitoring and distributing patches; as with any runtime for any operating system, without any means to fix potential security vulnerabilities, users' machines are at risk.

Configuring a Web Server to Host Silverlight Content

Deploying Silverlight content to a production web server is a pretty easy process. Despite occasional misconception, Silverlight doesn't require a Microsoft-based web server: Apache can host up Silverlight content just as happily as IIS.

But there's one little gotcha: web servers are typically configured to only serve up a limited set of known file extensions as static content. That's all well and good, but Silverlight introduces two new file extensions (.xaml for loose XAML files and .xap for the zip-based binary packaging format). As a result, you need to add the MIME types for those file extensions to your web server so that it recognizes Silverlight content appropriately. Here are the MIME types you need to add to the server configuration:

Extension - MIME Type

.xaml - application/xaml+xml

.xap - application/x-silverlight-app

That's all you have to do. Unfortunately, it's not possible to provide generic instructions for how to add MIME types, as it varies from server to server, but here are some links for various common web servers:

While you're updating the list of MIME types served, you might want to also add the relevant types to your web server to support WPF and ClickOnce applications. Here are the additional items you'll need:

Extension - MIME Type

.manifest - application/manifest

.application - application/x-ms-application

.xbap - application/x-ms-xbap

.deploy - application/octet-stream

.xps - application/

But what if you're hosting your Silverlight application on a shared hosting service and your hoster doesn't give you access to change these settings? The good news is that there are two options available to you. Obviously, you could take advantage of Silverlight Streaming, our free hosting service for up to 10GB of Silverlight content.

Alternatively, you can "cheat" the web server by renaming the XAP file extension to a compatible MIME type. The XAP container is ZIP-based, so you can simply rename the output file from .xap to .zip and change the source param within the object tag contained in the HTML file to point to the new file location. Click on this hyperlink to see the technique in action - it's a plain HTML file that points to a ZIP file (containing the Silverlight content).

One last piece of good news: IIS 7, included in Windows Server 2008, already includes all the relevant MIME types for both WPF and Silverlight, including both .xap and .xaml extensions, so if you're using Windows Server 2008, you're all set. (The same applies to a clean install of Windows Vista SP1, although if you upgrade from the RTM to the SP1 release, your settings will remain unchanged until you uninstall and reinstall the IIS feature).

Pazartesi, Mart 17, 2008

Expression Web 2.0 News

What's new in Expression Web 2.0 ?
Open up your PHP websites to the visual world of standards-based design by using advanced code editing features and effortless browser previewing. Microsoft Expression Web 2 enables you to preview PHP pages in your web browser without installing a separate development server or having to upload your website to a server. Just click the Preview in Browser button and you're done. Code view provides customizable color coding to help you identify the different components in your PHP syntax, and also provides PHP IntelliSense (auto complete), which lets you quickly look up and insert code. PHP IntelliSense options let you control the amount of IntelliSense that is provided. You can efficiently insert common PHP code snippets in eitherDesign view or Code view from the Insert menu. When you want to reuse content on multiple PHP pages, such as for a header or navigation menu, you can use a PHP include and preview it in Design view. Formatting marks in Design view identify your PHP script and enable you to modify the script outside Code view.
Byte order mark options
When you're designing documents encoded as Unicode UTF-8, a byte order mark (BOM) is typically a good thing to have embedded in your documents. But if you're working with PHP pages, or use a server or other tools that do not support a BOM, an embedded BOM can cause unwanted characters to appear in your document, or can create other issues. Expression Web 2 lets you add or remove a BOM in existing documents, and control whether a BOM is added to new documents.
Silverlight 1.0
Microsoft Silverlight is a cross-browser, cross–platform plug-in for delivering rich interactive applications for the web. You can use Expression Web 2 to either modify the HTML file that was generated by your Silverlight-authoring program or insert a Silverlight-based application into a web page.
Flash and Windows Media
Expression Web 2 lets you insert Flash SWF and Windows Media files into your pages, edit their properties, and preview your Flash files in Design view. In addition, you can insert and run any other type of ActiveX control, such as QuickTime or RealPlayer.
Photoshop Import
Expression Web 2 enables you to generate a .png, .gif, or .jpeg file from a Photoshop .psd file and select the Photoshop layers you want to include or exclude from the image. After using Expression Web 2 to generate a web-optimized image, you can quickly start Adobe Photoshop to modify the original .psd file and then update the image that you generated with Expression Web.
Expression Web 2 provides you with ASP.NET AJAX server controls that enable you to quickly create web pages that include a rich user experience with responsive and familiar user interface (UI) elements. By using AJAX features, you can improve the user experience with web pages that are richer, that are more responsive to user actions, and that behave like traditional client applications.
ASP.NET AJAX server controls supported by Expression Web 2 include the UpdatePanel, Timer, UpdateProgress, ScriptManager, and ScriptManagerProxy controls.

Note To work with these controls in Expression Web 2, you must install ASP.NET AJAX or the .NET Framework 3.5. See Microsoft .NET Framework 3.5 or ASP.NET AJAX 1.0 in the Microsoft Download Center online.
Custom ASP.NET controls
Expression Web 2 supports custom ASP.NET controls that you have put in the BIN folder of your website. You can preview custom controls and access the Common Tasks smart tag menu in Design view, edit properties, and use IntelliSense and syntax checking in Code view.
You can use custom ASP.NET controls developed by others, such as those featured in theControl Gallery on the Microsoft ASP.NET website, or create custom controls by using a visual design tool such as Microsoft Visual Studio.

ASP.NET data controls
Expression Web 2 provides the new DataPager and ListView ASP.NET controls. The ListView control is useful for displaying data in any repeating structure, similar to the DataList and Repeater controls. Unlike those controls, the ListView control supports edit, insert, and delete operations, and also sorting and paging. You use the DataPager control to enable users to page through data in a ListView control.
Note To work with these controls in Expression Web 2, you must install the .NET Framework 3.5. See Microsoft .NET Framework 3.5 in the Microsoft Download Center online.
FTP publishing
Expression Web 2 enables you to set the FTP publishing mode to Passive FTP or normal FTP, and save your FTP user name and password.
The Design view in Expression Web 2 now renders the CSS overflow property. The Compatibility Reports in Expression Web 2 now check external CSS files, in addition to embedded style sheets, for compatibility with the CSS schema you specify.
HTML file extension
Expression Web 2 lets you set your preference for the default HTML file name extension.
Alphabetized HTML attributes
A new setting in the Code Formatting options in the Page Editor Options dialog box enables you to control whether HTML attributes are alphabetized or not in the code of your web pages. By default, tag attributes are now written in alphabetical order when Expression Web 2 adds HTML tags to your page. Existing tags in a page are affected by the new setting only if you apply the Reformat HTML command to the page.

Bilsayayarımda kurulu olan Yazılımlar

Bu aralar bilgisayarınızı kullnırken hangi programları yüklüyorsunuz diye sorular almaya başladım. O yüzden buradan bilgisayarımda kurulu olan yazılımların listesi veriyorum. Ayrıca bilgisayara kurulmadan çalışan Java editörü Eclipse ve bu editörü kullanırken server olarak kullandığım apache-tomcat listede gözükmemektedir.

  • 2007 Microsoft Office Suite Service Pack 1 (SP1)
  • ADO.NET Entity Framework 1.0 (Pre-Release Version)
  • Adobe AIR
  • Adobe Anchor Service CS3
  • Adobe Asset Services CS3
  • Adobe Bridge CS3
  • Adobe Bridge Start Meeting
  • Adobe Camera Raw 4.0
  • Adobe CMaps
  • Adobe Default Language CS3
  • Adobe Device Central CS3
  • Adobe Dreamweaver CS3
  • Adobe ExtendScript Toolkit 2
  • Adobe Extension Manager CS3
  • Adobe Flash Player ActiveX
  • Adobe Flash Player Plugin
  • Adobe Help Viewer CS3
  • Adobe PDF Library Files
  • Adobe Setup
  • Adobe Type Support
  • Adobe Update Manager CS3
  • Adobe Version Cue CS3 Client
  • avast! Antivirus
  • Bilisim Sözlügü 1.0 b140
  • BisonCam, USB2.0
  • CCleaner (remove only)
  • Crystal Reports Basic for Visual Studio 2008
  • Dassault Systemes Software Prerequisites x86
  • FlashGet
  • Foxit Reader
  • GDR 3054 for SQL Server Database Services 2005 ENU (KB934458)
  • GDR 3054 for SQL Server Reporting Services 2005 ENU (KB934458)
  • GDR 3054 for SQL Server Tools and Workstation Components 2005 ENU (KB934458)
  • Highlight Viewer (Windows Live Toolbar)
  • Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB946344)
  • Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB946581)
  • Hotfix for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB947173)
  • iTunes
  • K-Lite Mega Codec Pack 1.25
  • Map Button (Windows Live Toolbar)
  • MATLAB Family of Products Release 14
  • Microsoft .NET Compact Framework 2.0 SP2
  • Microsoft .NET Compact Framework 3.5
  • Microsoft .NET Framework 3.5
  • Microsoft ASP.NET 3.5 Extensions CTP
  • Microsoft ASP.NET Futures (July 2007)
  • Microsoft ASP.NET MVC Preview 2
  • Microsoft Device Emulator version 3.0 - ENU
  • Microsoft Document Explorer 2008
  • Microsoft Document Explorer 2008 (6001.18000.367)
  • Microsoft Expression Blend 2 December Preview
  • Microsoft Expression Blend 2.5 March 2008 Preview
  • Microsoft Expression Design SP1
  • Microsoft Expression Web
  • Microsoft Expression Web MUI (English)
  • Microsoft Expression Web Service Pack 1 (SP1)
  • Microsoft Office 2003 Web Components
  • Microsoft Office Access MUI (English) 2007
  • Microsoft Office Access Setup Metadata MUI (English) 2007
  • Microsoft Office Enterprise 2007
  • Microsoft Office Excel MUI (English) 2007
  • Microsoft Office Groove MUI (English) 2007
  • Microsoft Office Groove Setup Metadata MUI (English) 2007
  • Microsoft Office InfoPath MUI (English) 2007
  • Microsoft Office OneNote MUI (English) 2007
  • Microsoft Office Outlook MUI (English) 2007
  • Microsoft Office PowerPoint MUI (English) 2007
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Proof (English) 2007
  • Microsoft Office Proof (French) 2007
  • Microsoft Office Proof (Spanish) 2007
  • Microsoft Office Proofing (English) 2007
  • Microsoft Office Publisher MUI (English) 2007
  • Microsoft Office Shared MUI (English) 2007
  • Microsoft Office Shared Setup Metadata MUI (English) 2007
  • Microsoft Office Visio 2007 Service Pack 1 (SP1)
  • Microsoft Office Visio MUI (English) 2007
  • Microsoft Office Visio Professional 2007
  • Microsoft Office Visual Web Developer 2007
  • Microsoft Office Visual Web Developer MUI (English) 2007
  • Microsoft Office Word MUI (English) 2007
  • Microsoft Silverlight
  • Microsoft Silverlight 2.0 SDK Beta1
  • Microsoft Silverlight Tools Beta 1 for Visual Studio 2008
  • Microsoft SQL Server 2005
  • Microsoft SQL Server 2005 Backward compatibility
  • Microsoft SQL Server 2005 Compact Edition [ENU]
  • Microsoft SQL Server 2005 Reporting Services
  • Microsoft SQL Server 2005 Tools
  • Microsoft SQL Server 2008
  • Microsoft SQL Server 2008 Tools
  • Microsoft SQL Server Compact 3.5 Design Tools ENU
  • Microsoft SQL Server Compact 3.5 ENU
  • Microsoft SQL Server Compact 3.5 for Devices ENU
  • Microsoft SQL Server Database Publishing Wizard 1.2
  • Microsoft SQL Server Native Client
  • Microsoft SQL Server Setup Support Files (English)
  • Microsoft SQL Server VSS Writer
  • Microsoft VC Redist 2008 (6001.18000.367)
  • Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022
  • Microsoft Visual C++ Compilers 2008 Standard Edition - enu - x86
  • Microsoft Visual Studio 2005 Tools for Office Runtime
  • Microsoft Visual Studio 2005 Web Deployment Projects
  • Microsoft Visual Studio 2008 Performance Collection Tools - ENU
  • Microsoft Visual Studio Team System 2008 Team Suite - ENU
  • Microsoft Visual Studio Web Authoring Component
  • Microsoft Windows SDK .NET Framework Tools
  • Microsoft Windows SDK for Visual Studio 2008 .NET Framework Tools
  • Microsoft Windows SDK for Visual Studio 2008 SDK Reference Assemblies and IntelliSense
  • Microsoft Windows SDK for Visual Studio 2008 Tools
  • Microsoft Windows SDK for Windows Server 2008 (6001.18000.367)
  • Microsoft Windows SDK for Windows Server 2008 .NET Documentation (6001.18000.367)
  • Microsoft Windows SDK for Windows Server 2008 Common Utilities (6001.18000.367)
  • Microsoft Windows SDK for Windows Server 2008 Headers and Libraries (6001.18000.367)
  • Microsoft Windows SDK for Windows Server 2008 Samples (6001.18000.367)
  • Microsoft Windows SDK for Windows Server 2008 Utilities for Win32 Development (6001.18000.367)
  • Microsoft Windows SDK for Windows Server 2008 Win32 Documentation (6001.18000.367)
  • Microsoft Windows SDK Intellisense and Reference Assemblies (6001.18000.367)
  • Microsoft Windows SDK MDAC Headers and Libraries (6001.18000.367)
  • Microsoft Windows SDK Net Fx Interop Headers And Libraries (6001.18000.367)
  • Mozilla Firefox (
  • MSDN Library for Visual Studio 2008 - ENU
  • New York Times - Times Reader
  • Paint.NET v3.22
  • Picasa 2
  • QuickTime
  • Realtek AC'97 Audio
  • Security Update for Excel 2007 (KB946974)
  • Security Update for Office 2007 (KB947801)
  • Security Update for Outlook 2007 (KB946983)
  • Smart Menus (Windows Live Toolbar)
  • Update for Microsoft Visual Studio Team System 2008 Team Suite - ENU (KB949325)
  • Update for Outlook 2007 Junk Email Filter (kb947945)
  • VC Runtimes MSI
  • Virtual Earth 3D (Beta)
  • Visual Studio 2005 Tools for Office Second Edition Runtime
  • Visual Studio Tools for the Office system 3.0 Runtime
  • Winamp
  • Windows Live Favorites for Windows Live Toolbar
  • Windows Live installer
  • Windows Live Messenger
  • Windows Live Sign-in Assistant
  • Windows Live Toolbar Extension (Windows Live Toolbar)
  • Windows Live Tools for Microsoft Visual Studio CTP
  • Windows Live Writer
  • Windows Mobile 5.0 SDK R2 for Pocket PC
  • Windows Mobile 5.0 SDK R2 for Smartphone
  • Windows Mobile 6.0 SDK Standart for Pocket PC
  • Windows Mobile 7.0 alpha SDK
  • Windows SDK Intellidocs
  • WinRAR archiver
  • Yurtici Kargo - 1
  • Yurtici Kargo - 2

Çok karmaşık bir liste gibi gözüksede genel yoğunluğu Visual Studio, MS Office oluşturmaktadır.

Cumartesi, Mart 08, 2008

Silverlight Can Go Full Screen and Back

So you want your Silverlight video player to play in full screen? No problem! It's pretty easy to go into full screen mode, hiding everything including browser frame, in Silverlight. It's just a line of code:
Interop.BrowserHost.IsFullScreen = True
While in full screen mode, user can press ESC key to exit full-screen mode, or your Silverlight application can exit programatically by:
BrowserHost.IsFullScreen = False
You can easily toggle between full screen modes by:
BrowserHost.IsFullScreen = Not BrowserHost.IsFullScreen
The BrowserHost class exposes two events FullScreenChange() which fires when the full screen mode is changed, and Resize() event which fires when the host element is resized (not when browser is resized). You can use these events to detect when user gets into and out of full screen mode. It's also worth mentioning that all keyboard events will not fire in full screen mode, only mouse events will. This feature is to protect user from password spoofing and other impersonation attacks.

Silverlight Libraries Source Code Will Be Available

On January 17 2008, Scott Guthrie announced the availability of .NET Framework Source Code under read-only reference for debugging purposes. That was great news indeed for .NET developers especially for those who had used .NET Reflector. This will solve a lot of debugging mysteries behind the "[External Code]" in the call stack. But hold on a sec, there is greater news for Silverlight developers, the source code of Silverlight libraries will be available as well according to his reply to our comment. I asked him if Silverlight source code could be opened. "Yes - we'll be releasing the source and enabling debugging for the Silverlight libraries as well once they ship." he replied. Although his reply is not an official announcement, it significantly leverages the possibility of having Silverlight source released.
I'm amazed to hear that from Scott Guthrie but at the same time I was wondering how it could be done. As far as I know, there is a ton of unmanaged code in Silverlight libraries. Shape and Transform classes are just managed wrappers on top of the unmanaged code, as somebody in Silverlight team pointed out to me. If the unmanaged code could not be released, we will see only the wrapper code which would not make much sense for debugging. But if it could be released, there might be some concerns over security issues.
What do you think, folks?

Perşembe, Mart 06, 2008

Silverlight 2,0

C#Nedir ailesi ile birlikte vermiş olduğumuz seminerlerde sürekli olarak Silverlight 'ın yeni sürümü olan 2.0 'a laf atarak sunumlarımızı bitiriyorduk. Bu sürümde bir çok kontrolün ekleneceği ve içerisinde yer alan bir çok fonksiyonunda bizlerin kullanımına sunulacağından bahsediliyordu. İşte bahsettiğimiz bu yeni sürümün beta sürümü 4 Nisan 2008 'de MIX'08 'de duyuruldu. Hem performans olarak hemde yönetilebilirlik açısından bir çok yenilik getirilmiş. Bende sizlere bu yenilikleri en kısa sürede makalelerini oluştururak sunmaya çalışacağım. Bu makaleleri bloğum 'dan , ve adreslerinden okuyabilirsiniz.

Peki ben de Silverlight 2.0 kullanmak istiyorum nereden bulabilirim derseniz. Tek yapmanız gereken, adresine girerek Arama çubuğunda Silverlight 2.0 yazmak olacaktır. Daha sonrasında çıkan sonuçlardan istediklerinizi indirebileceksiniz.

İndirmeniz gereken 2 ana dosya var. Bunlardan birincisi Silverlight 2.0 Add-in 'i. Bu araç, yapılmış olan uygulamaları web tarayıcınızda görmenize yarayacaktır.

İkincisi ise Silverlight VS2008 tool 'u. Bu araç ise Silverlight 2.0 uygulamalarını geliştirebilmeniz için lazımdır. Fakat ilk etapta bilgisayarınıza kurabilmeniz mümkün olmuyor. KB949325 güncelemesini yüklemeniz gerekecektir. Bu güncellemeyi yükledikten sonra artık Visual Studio 2008 içerisinde silverlight uygulamaları geliştirmeniz mümkün olacaktır.

Güncelleştirme yapmadıysanız karşılacağınız bilgilendirme ekranı aşağıdaki gibi olacaktır.


Bu iki aracı kurduktan sonra artık silverlight uygulamalarını sorunsuz bir biçimde geliştirebilmeniz mümkün olacaktır.


İyi çalışmalar...