Microsoft Popfly - 2

Bu makalemizde ise popfly'ı kullanarak ilk olarak basit projeler geliştireceğiz. Daha sonra ise bir RSSFeed'i ne kadar kolay yapabileceğimizi göreceğiz.

Popfly, Silverlight'ı kullanan bir teknoloji olduğunu ve silverlight'ında javaScript ve XAML tabanlı olduğunu daha önceki makalelerimizde öğrenmiştik. Popfly ile herhangi bir uygulama geliştirirken de yapmamız gereken aynı Silverlight'ta olduğu gibi javaScript ve XAML yardımları ile kod yazmamız gerekecektir.

Eğer ki siz ben kod yazmak istemiyorum derseniz. Daha önce hazırlanmış olan projeleri Mashup denen proje yöntemi ile de kullanabilirsiniz. Biz de işlemlerimizi ilk olarak Mashuplar yardımı ile yapacağız. Daha sonrada kendimizin nasıl bir mashup oluşturacağımıza değineceğiz.

Bu işlemleri yaparken ilk yapmamız gereken www.popfly.ms adresinden kullanıcı girişi yapmak olacaktır.Daha sonra karşımıza çıkan ekrandan CreateStuff yazan menüden Mashup'ı seçerek işlemimize başlıyoruz.



Bu menü altında yapabileceklerimiz genel anlamda eskiden hazırlanmış ve bizlerin kullanımı için paylaşılmış olan projeleri birbirine bağlayarak kullanabilmemizi sağlamaktadır. Fakat bu işlemi yaparken de bize Silverlight'ın hızlılığını kullanacağız. Bunun dışında uygulamaları geliştirirken göreceksiniz ki yapılan birçok grafiksel işlem üç boyutlu gibi gözükmektedir. Bu yapı, gelecekte hayatımızda yer alacak olan Web3.0 yapısına çok benzemektedir.

Mashup oluşturma işlemini sol tarafta block adı verilen, daha önceden hazırlanmış olan projeler ile yapabilmemiz mümkündür.



Bu projeler topluluğunu yalnız başlarına kullanabildiğimiz gibi bir kaç tanesini birleştir erekte güzel uygulamalar gerçekleştirebilmemiz mümkündür. Yalnızca tek bir Block ile projemizi yapmak istersek, tek yapmamız gereken menüde yer alan projelerden birinin üzerine tıklamamız yeterli olacaktır. Bu seçim sonrasında seçilen proje ekranda kendisini kullanmamız için hazır tutmaktadır.



Örneğin bizim seçtiğimiz block, bize çevresinde dönen resimler sunmaktadır. Fakat yalnız başına kullanıldığı zaman sadece tek resim göstermesine karşı, biraz öncede bahsettiğimiz gibi başka bir block ile birleştirildiğinde istediğimiz sayıda ve istediğimiz resmi gösterebilmesi mümkündür. Bu işlemi yapabilmemiz için menüden Images&Video seçeneğinden isteğimizi seçebilmemiz mümkündür. Bu resimleri alacağımız block'u da seçtikten sonra özelliklerinden nasıl bir resim göstereceğini seçmemiz ve onu resimleri gösterecek olan block'a bağlamamız yetecektir.



Yukarıda mavi ok ile gösterilmiÅŸ olan baÄŸlantı sistemi kullanmış olduÄŸumuz Mashupları birbirleri ile iliÅŸkilendirilmesi ile projenin çalışmasını saÄŸlayabilmekteyiz. Peki, bu baÄŸlantıyı birden fazla ile yapabilir miyiz? EÄŸer benzer görünüm gerçekleÅŸtirmeyecek ise rahatlıkla buna izin vermektedir. Örnek vermek gerekirse; hedefimiz resim resim görüntülemek olsun ve bu görüntülemek istediÄŸimiz resimleri internetteki verilerden çekmek istiyoruz. Bu resimlerimiz internette Flickr ve Yahoo Images’ te olduÄŸunu varsayalım. Ä°ÅŸte bu iki farklı resim saÄŸlama sisteminden çekmek istediÄŸimizi verileri özellikler kısmından belirledikten sonra tek sistemi baÄŸlamış olduÄŸumuz gibi iki sistemi de baÄŸlayabilmemiz mümkündür ve bu uygulama sorunsuz bir biçimde çalışabilmektedir.

Åžimdi ise baÅŸka bir sistem daha deneyelim. ÖrneÄŸin görüntülerimizi hem döner bir yapı ile hem de sayfalarını çevirebildiÄŸimiz resim görüntüleyici ile görmek istiyoruz. Fakat dikkat etmemiz gereken bir nokta var ki o da bu iki sistemin aynı anda çalıştırmak istiyoruz. Ä°ÅŸte bu sistemi çalıştırmak deÄŸil koymak istediÄŸimizde bile “iki veya daha fazla benzer özelliÄŸi kullanıcıya sunacak olan Mashup kullanamazsınız” ÅŸeklinde bir mesaj ile karşılaşıyoruz. Bu aldığımız mesaj bize Popfly da bizim benzer uygulamaları aynı anda ekleyemeyeceÄŸimizi öğretmiÅŸ oluyor.

Popfly ile ilgili bu kadar ayrıntılı bilgiden sonra artık oluşturduğumuz uygulamanın nasıl bir ekran görüntüsüne kavuştuğuna bakabiliriz.



Karşımıza çıkan görüntüye hayran kalmamak gerçekten elde değil. Hiç kod yazmadan sadece iki özellik ekleyerek harika bir görüntüye sahip olduk.

Bu yapabileceklerimiz peki sadece görüntüsel işlemler değil tabii ki de, medya uygulamalarından haber servislerine kadar, haritada istediğimiz bir yeri görüntülemekten istediğimiz bir gazetenin haberlerini okumaya kadar ve bunların dışında daha birçok özellik yer almaktadır.

İşlemlerimizi yaparken kafamıza şöyle bir soru takıldı. Acaba biz bu uygulamalardan(Mashup) yapabilir miyiz? İnsanlar bizim yaptığımız bu uygulamaları bizim onlarındakileri kullandığımız gibi kullanabilirler mi? Şeklinde birçok soru takılabiliyor. Bu soruların ve benzer türdeki daha birçok sorunun cevabı EVET.

Bizlerde istediğimiz şekilde bir uygulama geliştirip, o uygulamayı kullanıcılara çalışmaları için sunabilmekteyiz. Bu işlemleri yaparken nasıl bir işlem topluluğu incelememiz gerektiğine değineceğiz.

Bu işlem topluğunda yapmamız gereken tabii ki kod yazmak olacaktır. Her ne kadar işlemlerimizi sürükle bırak işlemleri ile yapsak da uzman bir uygulama geliştirmemiz gerektiğinde kod yazmamız gerekmektedir. Bu gerçeği asla unutmamız gerektedir.

Ayrıntılı bilgilerden sonra kod yazacağımız yeri öğrenmekle başlayalım. CreateStuff menüsünde yer alan Block seçeneği yardımı ile projemizi geliştirmeye başlayabiliriz.



Uygulamamızı geliÅŸtirirken karşımıza iki menü çıkmaktadır. Bunlar yukarıdaki resimden de görebileceÄŸiniz gibi Block Description(Block Tanımı) ve Block Code(Block Kodu)’dur. Åžimdi bu üst menüde yer alan iki özelliÄŸin ne iÅŸe yaradığını basitçe açıklamaya çalışalım.

Block Description(Block Tanımı):Bu bölümde daha sonra görsel olarak kullanılacak olan projemizin görünümünü, ekran ne gibi yazıların olacağını belirtiyoruz. Yaptığımız bu işlemleri için ise XAML kodlaması kullanıyoruz.

Block Code(Block Kodu):Bu bölümde ise oluşturmuş olduğumuz projenin işlevselliğini ayarlayabilmemiz mümkündür. İşlevsellikleri sağlarken kullanacağımız kodlama dili ise JavaScript olacaktır.

JavaScript’in web uygulamaları için ne kadar önemli olduÄŸunu bir kez daha görmüş oluyoruz. Web uygulamalarını deyim yerinde ise hayat veren bir dildir javascript. Yapmak istediÄŸimiz birçok kontrolü bu güzel dil ile yapabilmemiz mümkündür ki bunları sadece 50 komutu olan bir yapı ile gerçekleÅŸtirmek gerçekten çok hoÅŸ bir durumdur. JavaScript, hayatımızda daha birçok yerde karşımıza çıkacak gibi gözüküyor. Bu yüzdendir ki bu yapı olarak küçük içerik olarak büyük olan dili öğrenmekte bir zarar olmayacağını düşünüyoruz.

Kısa bilgilerimizden sonra yukarıda belirttiğimiz özellikler yardımı ile ufak bir RSSFeed(Yayın alıcı) uygulaması yapmaya çalışalım.

JavaScript’e bu kadar fazla övgü yaptıktan sonra isterseniz uygulamamızı geliÅŸtirmeye bu bölüm ile baÅŸlayalım.

Uygulamamızı geliştirirken de tamamen oluşmuş olan kodu verip üzerinde ne işlem yaptığımızı açıklamak daha anlaşılır olacaktır.

<?xml version="1.0" encoding="utf-8" ?>
<block class="RSSCsharpNedirClass">
<operations>
<operation name="getItems" callMode="auto">
<description>
Retrieves items from the specified RSS feed.
</description>
<inputs>
<input name="url" required="true" type="feedUrl">
<description>The URL of the RSS feed</description>
<defaultValue>http://www.csharpnedir.com/rss.xml</defaultValue>
<constraints/>
</input>
</inputs>
<outputs>
<output isArray="true" type="custom" object="RSSItem"/>
</outputs>
</operation>
<operation name="getFeed" callMode="auto">
<description>
Retrieves information about the specified RSS feed.
</description>
<inputs>
<input name="url" required="true" type="feedUrl">
<description>The URL of the RSS feed</description>
<defaultValue>http://www.csharpnedir.com/rss.xml</defaultValue>
<constraints/>
</input>
</inputs>
<outputs>
<output isArray="false" type="custom" object="RSSFeed"/>
</outputs>
</operation>
</operations>
<objects>
<object name="RSSItem">
<field name="title" type="title" isArray="false"/>
<field name="link" type="url" isArray="false"/>
<field name="description" type="description" isArray="false"/>
<field name="source" type="string" isArray="false"/>
<field name="sourceLink" type="url" isArray="false"/>
<field name="author" type="name" isArray="false"/>
<field name="tags" type="string" isArray="false"/>
<field name="comments" type="string" isArray="false"/>
<field name="commentRss" type="string" isArray="false"/>
<field name="publishedDate" type="date" isArray="false"/>
<field name="mediaLink" type="url" isArray="false"/>
<field name="mediaType" type="string" isArray="false"/>
</object>
<object name="RSSFeed">
<field name="title" type="title" isArray="false"/>
<field name="url" type="feedUrl" isArray="false"/>
<field name="link" type="url" isArray="false"/>
<field name="description" type="description" isArray="false"/>
<field name="imageURL" type="imageUrl" isArray="false"/>
</object>
</objects>
</block>

Kodlarımızı yukarıdan aÅŸağıya doÄŸru anlaşılır biçimde açıklayalım. En yukarıda gördüğümüz XML ‘in ekranda göstereceÄŸi dili belirtmektedir. Türkçe dil sorununu çözebilmek için ise encoding="utf–8" yazılması gerekmektedir. Teorik olarak bu yaptığımız tanımlama Türkçe karakterleri uygulamamızda saÄŸlaması gerekmektedir. Fakat Popfly’da karşımıza çıkan görünüm maalesef böyle olmuyor. Popfly’ın beta sürümünde bulunmasından ötürü daha tam olarak bütün dillere desteÄŸi eklenmediÄŸi için Türkçe karakterleri gösteremiyoruz. GöstermediÄŸi halde neden kullandığımıza gelirsek, daha sonraki sürümlerinde Popfly’ın Türkçe karakterlere de destek vereceÄŸini düşündüğümüz için ekliyoruz.

<block class="RSSCsharpNedirClass"> bölümünde ise oluşturduğumuz JavaScript dosyasını kullanmamızı sağlamaktadır.

<operations> bölümünde uygulamamızı kullanıcılara sunduğumuz zaman seçenekler menüsünde nelerin yer alacağını belirtebiliyoruz.

<defaultValue> bölümünde ise kullanacak olduğumuz adresi ekliyoruz.

Temel olarak kafamızı karıştıracak olan bölümler bunlardı. Diğer satırlarda ise JavaScript tarafında oluşturmuş olduğumuz değişkenleri kullanmak ve kullanıcıya sunmak gibi özelliklerden yararlanılmaktadır.

XAML kısmında oluşturduğumuz kodlara göz attıktan sonra şimdi de JavaScript kısmında yer alan kodlarımıza biraz değinelim.

function RSSCsharpNedirClass()
{
}

RSSCsharpNedirClass.prototype.getFeed = function (url) {
this.__checkValidation(url);
var returnResponse = environment.getXml(url);
return this.__formatResponseDataRSSFeed(url, returnResponse);
};

RSSCsharpNedirClass.prototype.getItems = function (url){
this.__checkValidation(url);
var returnResponse = environment.getXml(url);
return this.__formatResponseDataRSSItem(returnResponse);
};

RSSCsharpNedirClass.prototype.__checkValidation = function (url) {
var url = this.__trimParamValue(url);

if(url.length == 0) { throw "Please enter the URL of an RSS" }
};

RSSCsharpNedirClass.prototype.__trimParamValue = function (paramValue){

if(!paramValue)
{
return paramValue;
}
else if (!isNaN(paramValue))
{
return paramValue;
}

return paramValue.trim();
};

RSSCsharpNedirClass.prototype.__formatResponseDataRSSItem = function (resultXML){
var resultArray = new Array();
if(resultXML.getElementsByTagName("channel").length >= 1)
{
var errorCheck = resultXML.getElementsByTagName("channel")[0].getElementsByTagName("description")[0].text;
errorLength = errorCheck.indexOf('Error');

if(!resultXML)
{
throw "Sorry, the RSS block encountered a problem which it could not solve.";
}
if(errorLength != -1)
{
try
{
throw resultXML.getElementsByTagName("channel")[0].getElementsByTagName("description")[0].text;
}
catch(ex)
{
throw "Sorry, the RSS block encountered a problem which it could not solve.";
}
}
else
{
var itemNodeList = resultXML.getElementsByTagName('item');
var resultNodeCount = itemNodeList.length;
var resultArray = new Array(resultNodeCount);

if(!resultNodeCount resultNodeCount < 1)
{
throw "Sorry, it seems that the RSS feed does not contain any items.";
}

for(var i = 0; i < resultNodeCount; i++)
{
var itemNode = itemNodeList[i];
if(itemNode)
{
var title = itemNode.getElementsByTagName("title").length >= 1 ? itemNode.getElementsByTagName("title")[0].text : "";
var source = itemNode.getElementsByTagName("source").length>= 1 ? itemNode.getElementsByTagName("source")[0].text : "";
var sourceLink = itemNode.getElementsByTagName("source").length>= 1 ? itemNode.getElementsByTagName("source")[0].getAttribute("url") : "";
var link = itemNode.getElementsByTagName("link").length >= 1 ? itemNode.getElementsByTagName("link")[0].text : "";
var description = itemNode.getElementsByTagName("description").length >= 1 ? itemNode.getElementsByTagName("description")[0].text : "";
var author = itemNode.getElementsByTagName("author").length >= 1 ? itemNode.getElementsByTagName("author")[0].text : "";
var tags = itemNode.getElementsByTagName("tags").length >= 1 ? itemNode.getElementsByTagName("tags")[0].text : "";
var comments = itemNode.getElementsByTagName("comments").length >= 1 ? itemNode.getElementsByTagName("comments")[0].text : "";

var commentRss = itemNode.getElementsByTagName("wfw:commentRss");
if (commentRss.length == 0)
{ // IE:
commentRss = itemNode.getElementsByTagName("commentRss");
}
if (commentRss && commentRss.length > 0)
{
commentRss = commentRss[0].text;
}
var pubDate = itemNode.getElementsByTagName("pubDate").length >= 1 ? itemNode.getElementsByTagName("pubDate")[0].text : "";
var mediaLink = itemNode.getElementsByTagName("enclosure").length>= 1 ? itemNode.getElementsByTagName("enclosure")[0].getAttribute("url") : "";
var mediaType = itemNode.getElementsByTagName("enclosure").length>= 1 ? itemNode.getElementsByTagName("enclosure")[0].getAttribute("type") : "";

resultArray[i] = new RSSItem(title, link, description, source, sourceLink, author, tags, comments, commentRss, pubDate, mediaLink, mediaType);
}
}
return resultArray;
}
}
else
{
return resultArray;
}
};

RSSCsharpNedirClass.prototype.__formatResponseDataRSSFeed = function (url, resultXML){
if(resultXML.getElementsByTagName("channel").length >= 1)
{
var errorCheck = resultXML.getElementsByTagName("channel")[0].getElementsByTagName("description")[0].text;
errorLength = errorCheck.indexOf('Error');
if(errorLength != -1)
{
throw resultXML.selectSingleNode("/rss/channel/item/description").text;
}
else
{
var channelNode = resultXML.getElementsByTagName("channel")[0];
var title = channelNode.getElementsByTagName("title")[0].text;
var link = channelNode.getElementsByTagName("link")[0].text;
var description = channelNode.getElementsByTagName("description")[0].text;

}
else
{
return new RSSFeed("", "", "", "", "");
}
};

function RSSFeed(title, url, link, description, imageURL)
{
this.title = title;
this.url= url;
this.link = link;
this.description = description;
this.imageURL = imageURL;

this.toString = function() {
return "<a href='" + environment.escapeQuotes( this.url ) + "' target='_blank'>" + this.title + "</a><br>";
};
}

function RSSItem(title, link, description, source, sourceLink, author, tags, comments, commentRss, pubDate, mediaLink, mediaType)
{
this.title = title;
this.link = link;
this.description = description;
this.source= source;
this.sourceLink= sourceLink;
this.author = author;
this.tags= tags;
this.comments = comments;
this.commentRss = commentRss;
this.publishedDate = pubDate;
this.mediaLink = mediaLink;
this.mediaType = mediaType;
}

RSSItem.prototype.toString = function() {

var html = "";

html += "<strong>" + this.title + "</strong>";
html += "<br /><font style='font-size: xx-small'>"+ this.publishedDate +"</font>" + "\n";
html += "<p>"+ this.description +"</p><hr/>";

return html;
};


JavaScript kısmında dikkat etmemiz gereken tek bölge var itemNode = itemNodeList[i]; ile belirtmiÅŸ olduÄŸumuz dizidir. Bu dizide yayınlanan haberlerin baÅŸlıkları, özetleri ve kim tarafından yazıldığı gibi bilgiler tutulmaktadır. Bu dizide tuttuÄŸumuz verileri biraz öncede bahsettiÄŸimizi gibi XAML’de tekrardan kullanarak görselliÄŸi saÄŸlamaktayız. JavaScript kısmında yer alan diÄŸer kod parçacıkları standartlaÅŸmış olan kod bloklarıdır.

Şimdi inceleyeceğimiz kısım ise benim en çok hoşuma giden görsel kısmıdır. Tabi bu görsel kısma geçmeden önce yaptığımız bu uygulamayı kaydedip başka kullanıcılarında görebilmesi için paylaşıma açmalıyız. Bu ufak işlemi de gerçekleştirdikten sonra tekrar daha önceden yaptığımız gibi CreateStuff menüsünden Mashup seçeneğini tıklayarak uygulamamızı incelemeye başlıyoruz.

Uygulamamızı geliÅŸtirmeye baÅŸlayabiliriz. Daha önceden hazırlanmış olan projeleri kullanmak için kullanmış olduÄŸumuz Block menüsünün bu sefer arama bölümünü kullanarak kendi oluÅŸturmuÅŸ olduÄŸumuz block yapısını aratacağız. Bizim makalemizde oluÅŸturmuÅŸ olduÄŸumuz block’ın adı CsharpNedir olduÄŸu için bu adla arama yapıyoruz. Sizlerde hangi isimle oluÅŸturmuÅŸ iseniz o isimle aratarak projenizi çalışma ekranına ekleyebilirsiniz. Bu uygulamayı eklemeden önce üzerinde faremizi tuttuÄŸumuz zaman karşımıza çıkan bir bilgilendirme alanı çıkıyor. Bu bölümde ise yapılmış olan Block'ın kimin tarafından yapıldığı ve ne için yapıldığı yazılmaktadır. Bu bahsetmiÅŸ olduÄŸumuz bilgilendirme alanına bir göz atalım.



Biraz öncede bahsettiğimiz gibi kimin tarafında yapıldığı gibi bilgiler yer almaktadır.

Bu uygulamanın üzerine tıklayarak çalışma ekranın üzerine alınmasını sağlıyoruz. Bu sefer çalışma ekranının üzerinde iken özellikler kısmına göz atalım.



Bu bölümde uygulamamızın ismi, kullanmış olduğu link gibi özellikleri yer almaktadır.Bu özellkleri XAML kodlarını yazdığımız kısımda arttırabilmemiz veya da Türkçeleştirebilmemiz mümkündür. Fakat benim tavsiyem başka ülkelerden kullanıcılarında kullanabilmesi için İngilizce olarak uygulamalarınızı hazırlamanızdır.

Şimdi göz gezdireceğimiz ekran ise oluşturmuş olduğumuz uygulamanın detaylarının daha da ayrıntılı bir biçimde gösterilmesidir.



Tekrardan uygulamanın adını kimin tarafından yapıldığını ne zaman kullanıma açıldığı gibi bilgiler yer almaktadır. İçerik hakkında yer alan bölümde ise bizim projemizi kullanıma açarken yazmış olduğumuz bilgiler gözükmektedir. Bu yazıları istediğimiz şekilde şekillendirebilmemiz mümkündür.

Artık uygulamamız ile ilgili temel özelliklerine göz attığımıza göre çalıştığında nasıl göründüğüne bakabiliriz. Bunun için çalışma ekranımızın üst kısmında yer alan Preview seçeneğine tıklamamız yeterli olacaktır.



Uygulamamızın derlenmesi sonucunda oluşan görüntüye artık göz atabiliriz. Bakalım yapmış olduğumuz uygulamayı gerçek bir RSSFeed 'e benzetebilmişmiyiz.



Temel olarak Türkçe karakter sorununu katmazsak benzemişe benziyor. Bu kadar kolay bir biçimde RSSFeed hazırlamak çok güzel bir duygu oluyor.

Bir makalemizin daha sonuna gelmiş oluyoruz. Bu yazımızda Popfly ile hazır uygulamaları nasıl kullanacağımıza ve bizim oluşturmuş olduğumuz uygulamarı nasıl kullanıma açıp hazır uygulamalarmış gibi kullanabileceğimize değindik. Ayrıca bu uygulamada geliştirilmesi anlatılan CsharpNedir RSSFeed Block'unu da kullanabilmeniz mümkündür.

Umarım yararlı olmuştur. Bir sonraki makalemizde görüşünceye dek hepinize mutlu günler diliyorum.

Turhal TEMÄ°ZER

Yorum Gönder

0 Yorumlar

Ad Code

Responsive Advertisement