Weblica 2015 – konferencija o web tehnologijama


weblica

9. maja ove godine u medjimurskom gradu Čakovcu održat će se Weblica 2015 – konferenicja o web tehnoligijama. Konferenciju organizira tehnološko-inovacijski centar Međimurje te nekoliko softverskih kompanija iz Čakovca i okoline. Konferencija pod motom “prva prava tehnološka konferencija između Mure i Drave” želi okupiti sve poznate stručnjake iz regije na jedno mjesto te punuditi konferencija sa kvalitetnim sadržajima koje će prezentirati poznati predavači iz Hrvatske i regiona.

Ove godine pripala mi ječast da bude jedan od predavača na konferenciji te da pričam o Microsoft Azure Web Sites i integraciji sa nekoliko cloud baziranih servisa sa posebnim akcentom na Visual Studio online. Na predavanju će se moći čiti o zadnjim novostima na Azure Web Sites, kao i integraciji GitHub i Visual Studio Online servisa u implementaciji tzv. kontinualnog deploymenta (Continuous Deployment ) odnosno ispruke (Continuous Delivery).

Vidimo se na Weblici

 

Advertisements

MSNetwork po peti put


msn5_speaker

 

Po pet put Microsoft BiH organizira najveću i najpoznatiju Microsoft Konferenciju u Bosni i Hercegovini pod nazivom MSNetwork. Sjetimo se da je prva konferencija organizirana u Banjaluci, zatim u Mostaru, a nakon toga dva puta Microsoft je organizirao konferenciju u Tesliću. Ovog puta konferencija se održava u Neumu, a i datum konferenciju je malo pomjeren prema maju mjesecu, odnosno da bi i vremenski ugođaj puo potpun.

Po peti put pripala mi je čast da održim jedno od predavanja koja će se održati na konferenciji. Ovaj put predavanje će biti o jednom od najprepoznatljiviji Azure servisa i to Microsot Azure Machine Learning. Krajem jula mjesca 2014 godine Microsoft je najavio ovaj cloud servisa, a globalnu dostupnost Azure Machine Leraning, Microsoft je objavio tokom jeseni iste godine.

Od kada je objavljen u julu mjesecu 2014. godine, Azure Machine Learning, AML postaje jedan od najprepoznatljivijih Microsoft cloud servisa. AML je jednako interesantan kako akademskoj zajednici tako i industrijskom marketingu jer na jedinstven način omogućuje mašinsko učenje (machine learning) za modeliranje i predviđanje rezultata. AML je cloud servis čiji su algoritmi razvijeni kao rezultat su desetak godina korištenih tehnologija unutar Microsoft proizvoda od Internet Explorera, SQL Servera, BING-a, te drugih Microsoft proizvoda. Ovo predavanje će dati detaljan pregled cjelokupnog AML. Kroz demo primjere biće prezentirani neki od često korištenih primjera za predviđanje, kao i primjere vlastitih rješenja rađenih tokom eksperimentalnih istraživanja na doktorskoj disertaciji, te istraživanja u području praćenja i analize kvaliteta vode rijeke Une.

Predavanje će početi u 16:15, 28. aprila u dvorani Galerija.

datum_predavanja

 

Vidmo se na konferenciji.

Azure DevCamp @ HUB387 Sarajevo


azure_dev_Camp_sarajevo2014

Nakon decembarskog AzureDevCampa u Banjaluci, Microsoft BiH organizira jos jedan AzureDev Camp. Naime, u subotu 21. marta u tehnološkom parku HUB387, održat će se cjelodnevni trening o Microsoft Azure za developere, softverske arhitekte te IT profesionalce.

Kao i prethodni ut meni je pripala čast da vodim ovaj trening i nadam se da ću zahtjevnoj publici uspjeti prezentirati očekivano.

Koncept Azure DevCampa sastoji se od 6 predavanja koja uključuju osnovne cjeline koje Microsoft Azure nudi.

Polaznici će na radionici imati priliku vidjeti osnovne konceptima razvoja rješenja u cloud-u, prvenstveno paradigmama kao što su to SaaS, PaaS i IaaS. U nastavku, kroz različite Azure servise, biće demonstrirani različiti scenariji počevši od hostiranja web aplikacija baziranih na različitim tehnologijama (.NET, PHP, Java, Node.js, …) , skladištenja i upravljanja podacima (SQL, NoSQL, BLOB, …), podizanja infrastrukture (Win/Linux virtuelne mašine, virtuelne mreže,…) pa do integracije sa mobilnim uređajima.

 

Vidimo se na Azure DevCampu.

TechDay 2014: Azure Workshop – Demos and Slide Decks


After Microsoft TechDay finished yesterday I got several emails and questions about my demos and slides from the Azure Workshop.

So here is a link from which you can download all slides and demos you saw yesterday on my Workshop:

Slides about Microsoft Azure Training are general available at Git site: https://github.com/Azure-Readiness/DevCamp.

Once more thank you all for attending the workshop and see you next time. I am very glad I can see lot of people interested in Microsoft Azure and other cool technologies from Microsoft.

TechDay 2014: Azure Workshop – Banjaluka 8. dec. 2014


ms-event

Lokalni ured Microsofta u BiH ove godine u sklopu TechDay 2014 organizira 4 radionice koje će ponuditio cjelodnevnu edukaciju zainteresiranih iz 4 popularne teme. Jedna od nezaobilaznih tema svakog Microsoft događaja je svakako Azure, odnosno Microsoftova Cloud Computing platforma, a  koja je od ove godine dostupna i u Bosni i Hercegovini. Sve 4 radionice su potpuno besplatne, a zainteresirani se mogu registrovati putem slijedećih linkova. Klikom na zeljenu radionicu otvorit će se link sa registracijom.

1. Razvoj Universal Windows Apps (Spaso Lazarević)

2. Microsoft Azure radionica (Bahrudin Hrnjica)

3. Business Intelligence na Microsoft platformi (Petra Korica-Pehserl)

4. Microsoft Business Productivity Workshop + Enterprise Mobility Suite (Domagoj Pernar & Mirad Maglić)

Ove godine pripala mi je čast da budem jedan od 4 voditelja radionica, i to upravo Azure radionice.

U sklopu Azure radionice održat će se 6 predavanja, koja će obraditi sve značajne dijelove ove platforme.

Radionica je namjenjena kako početnicima i zaljubljenicima u Cloud Computing platformu, tako i developerima, IT profesionalcima i managerima.

Microsoft Azure platforma danas predstavlja najkompletniju, najkvalitetniju i najbrže rastuću Cloud Computing platformu, koju 80% Fortune 500 kompanija koriste.

Detaljnije informacije o Microsoft Azure radionici:

Azure Workshop Agenda

  1. Keynote Microsoft Azure Wokrshop, Bahrudin Hrnjica, Microsoft MVP
  2. Cloud Rješenja (PAAS) (Cloud Servisi na Microsoft Azure)
  3. Web (Microsoft Azure Web Hosting platforma)
  4. Podaci na Cloudu (SQL i NoSQL Data u Cloudu )
  5. IAAS (Azure Virtualne Mašine)
  6. Azure i Mobilne tehnologije

Vidimo se na Azure radionici.

Windows Azure Notification Hubs


Članak objavlje prošlog mjeseca na http://www.info.ba portalu.
Edin Mulić, Principal Developer
Damir Dobrić, Lead Architect
Bahrudin Hrnjica, Senior Developer
http://www.daenet.com

Familija produkata koji pripadaju grupi servisa za Windows Azure ( Windows Azure Platform Services) proširena je sa nekoliko novih rješenja. Krajem augusta ove godine Microsoft je objavio tzv. General Availability (GA) za Windows Azure Bus Notification Hubs. Sa početkom nove fiskalne godine, u julu 2013. Microsoft je stavio fokus na temu Devices & Services. U ovom članku vam predstavljamo jedan od važnijih Cloud servisa nove Microsofove strategije.

Razmjena poruka neovisna o platformi

Kao što je već poznato, broj pametnih uređaja iz dana u dan neprestano raste. U pametne uređaje ubrajamo sve one koji posjeduju određenu inteligenciju dovoljnu za pristup web-u ili sličnim okruženjima (npr. Intranet, Extranet itd.). Posebno interesantne vrste pametnih uređaja su tablet računari i pametni telefoni. Svi ti uređaji, neovisno o platformi na kojoj rade (iOS, Android, Windows itd.), nude poseban način prikaza obavijesti, poznat kao „Notijnnbfications“. Slika 1 prikazuje jednu takvu obavijest na iPhone uređaju.

Slika 1: iPhone PNS

Logično, za svaku platformu definisan posebam sistem slanja i primanja obavijesti.
Trenutno su prisutni sljedeći servisi za slanje obavijesti (Notification Messaging Services):

  1. Windows Push Notification Services (WNS) za Windows 8.
  2. Microsoft Push Notification Service (MPNS) za Windows Phone.
  3. Apple Push Notification Service (APNs)
  4. Google Cloud Messaging (GCM)

Microsoft nudi čak dva takva servisa. Jedan za Windows i jedan za Windows Phone.
Za dodatno usložnjavanje pobrinuo se XAMARIN, koji odskora nudi jedan daljnji Notification Hub Service.

Jedan od izazova pri razvoju softvera je implementacija servisa, koji podržavaju sve te platforme. Nažalost, svi aktuelno postojeći servisi za slanje obavijesti su međusobno vrlo različiti. Svi nude različite API i protokole.

Na slici 2 možemo vidjeti pojednostavljenu arhitekturu od Windows 8 Push Notification Service.

Slika 2: Arhitektura Win 8 PNS servisa

Slika 3 prikazuje Apple Notification Service.

Slika 3: Apple Notification Service

Arhitektura svih postojećih servisa za obavijesti, možemo reći da nisu trivijalne. Kod svih platformi potrebno je nekoliko koraka za izvršavanje dviju, ustvari, vrlo jednostavnih operacija:

  1. Da se App registruje kod servisa za slanje obavijest (Notification Service)
  2. Da se obavijest (Notification) pošalje

Ako je pri tome potrebno implementirati servis koji će biti u stanju opsluživati sve Notification servise, možemo konstatovati da složenost raste eksponencijalno.

Kao argument toj tvrdnji, zamislimo sljedeći primjer: Potrebno je implementirati konzolnu aplikaciju koja može slati obavijesti svim Android, iPhone, Windows Phone i drugim uređajima. Takav zadatak sigurno nije nerješiv, ali je neuporedivo teži za implementaciju od npr. programiranja prosječnog App-a.

Ako pođemo od činjenice da su obavijesti (Notifications) u većini slučajeva samo jedna od mnogih svojstava jednog App-a, vrlo brzo ćemo primjetiti da realizacija jednog takvog servisa u konvencionalnim projektima nema smisla,barem ne sa finansijskog aspekta.

Šta je Windows Azure Bus Notification Hub

Ako smo u stanju shvatiti kako obavijesti funkcioniraju na različitim platformama, onda nam neće biti teško shvatiti šta je ideja iza Windows Azure Notification Hubs.
Microsoft je izgradio jednostavan Cloud servis koji je u stanju da podrži sve trenutno postojeće platforme. Osim toga, jedan Hub mora biti u stanju u najkraćem vremenu doseći milione uređaja.

Windows Azure Notification Hub platforma rješava nekoliko problema, od kojih jedan prosječan programer često nije ni svjestan. U narednom tekstu pobrojimo nekoliko osobina:

Neovisnost o platformi
Svaki moderni servis je prije svega neovisan o platformi. Slanje neke poruke (Notification) implementirano je manje-više sa nekoliko linija koda, te kao takva može biti primljena od Android, iOS ili Windows (Windows 8 ili Windows Phone) uređaja.

Aktualiziranje token-a
PNS (Push Notification Services) servisi pretpostavljaju da jedan App redovno aktualizira PNS token-e. Kod mnogih registriranih uređaja to dovodi do enormnog opterećenja mreže.
Ako uz to uzmemo u obzir i povećanu potrošnju energije, možemo tvrditi da PNS servisi nisu baš idealno koncipirani. Service Bus Notification Hub preuzima taj zadatak od vašeg App-a.

Broadcasting
Većina PNS servisa ne podržava Boradcasting, tako da je upitno da li je uopće moguće dostići veliki broj uređaja. Prije svega, programski kôd u servisu mora biti koncipiran za sve moguće platforme (GCM, APNS itd.) te dodatno biti u stanju da upravlja jednim enormno velikim brojem registriranih uređaja. Naivno je mišljenje da je proces slanja miliona poruka jednostavno kao izheklati (programirati ) jednu foreach petlju za milion ili više registriranih uređaja. Proces slanja nije jednostavan, jer se u tom slučju moraju koristiti posebne implementacije poput primjera korištenja Topics od Windows Azure Service Bus.

Tagging
Windows Azure Notification Hubs nudi jednu vrlo jednostavnu mogućnost za kontroliranje trasiranja (Routing) obavijesti. Na primjer, pri registraciji je moguće definisati tzv. „Tags“ (oznake). Prilikom slanja obavijesti je moguće ciljano adresirati na jednu grupu uređaja koji su se registrirali za određene oznake (Tags).

Prvi koraci sa Hubs

Da bi radili sa Windows Azure Notification Hubs potrebna vam je Windows Azure pretplata. Ako je ne posjedujete, možete dobiti besplatnu test licencu (vidi pod [1]).

Prijavite se na Windows Azure Management portalu (vidi Sliku 4), izaberite Service Bus, pa onda željeni Service Bus Namespace i na kraju Notification Hubs. Bijeli kvadratići na slici 4 predstavljaju imena definisanih Hub-ova.

Slika 4: Hub Management Portal

Čitaoci, koji su već imali nekog dodira sa Service Bus tehnologijom znaju da Notification Hubs predstavlja samo jedan daljnji Service Bus entitet, kao što su npr. Queue, Topic ili Relay. Dobra vijest za one koji nemaju Service Bus predznanja je da ih i ne moraju imati. Notification Hubs su, iz perspektive jednog programera, potpuno autonomni.

U sljedećem koraku napravite jedan novi Hub, kao što je prikazano na slici 5. Pored unosa uobičajenih podatka kao što su Subscription i Datacenter, morate izabrati i jedno ime za Hub. Neposredno nakon toga, vaš će Hub biti aktiviran.
Slika 5: Pravljenje Hub-a

Za izradu jednog potpunog App-a sa Notification Hub neophodna su sljedeća četiri koraka:
1. Registracija App-a u Store-u
2. Konfiguracija Hub Portal-a
3. Registracija Channel-a u App-u
4. Implementiranje servisa za slanje obavijesti

U sljedećem poglavlju ćemo svaki od tih koraka detaljnije objasniti.

Registracija App-u u Store-u

Pod [2] ćete naći link preko kojeg je moguće registrirati jedan novi App (vidi sliku 6.)
Slika 6: Registracija App-a u Store-u

App u našem primjeru se zove dotnetpro.

Kao sljedeće, moramo registrirati Push Notification Service (vidi sliku 7).
Slika 7: Registracija imena

Na stranici „Push Notifications and Live Connect Site“, koju možemo pozvati preko linka koji se može naći u crvenom pravougaoniku na slici 8.
Slika 8: Registracija Push obavijesti

Preko linka označenog na slici 8 može se pristupiti na PNS i Live Services Site (vidi sliku 9).
Slika 9: PNS & Live Services

Kada se stranica otvori može se vidjeti Package Security Identifier (SID) (vidi sliku 10) i Client Secret, koji će biti potreban kasnije. Podatke ni u kojem slučaju se ne smiju dati na uvid neovlaštenim licima!
Slika 10: Package SID i Client Secret

Konfiguracija Hub Portal-a

U sljedećem koraku potrebno je izabrati Namespace u Windows Azure Service Bus Management portal-u (vidi sliku 4) i dalje na Notification Hub. Kliknite na dotnetpro (ime našeg Hub-a) i dalje na Configuration kao što je prikazano na slici 11.

Kopirajte u za to predviđena polja Package SID i Client Secret (vidi sliku 10). Time smo uspostavili vezu između PNS-a i Service Bus Notification Hub-a.
Slika 11: Hub konfiguracija

U koliko se klizač pomjeri na dolje (vidi sliku 12), možemo vidjeti sljedeće ključeve:

• DefaultListenSharedaccessSignature
• DefaultFullSharedAccessSignature

Slika 12: Shared Access Keys

Prvi ključ mora zajedno sa App-om biti podijeljen na uređaje koji će moći primati obavijesti. Bez tog ključa App-u neće moći primati obavijesti.

Drugi ključ će biti korišten od strane servisa za slanje obavijesti. Ako se prvi ključ (vidi sliku 12) malo detaljnije pogleda, može se primijetiti da on ima samo jednu Listen-Permission. I to je dobro da je tako, jer ako nekome pođe za rukom da „skine“ ključ sa uređaja, to neće predstavljati nikakav dodatni rizik ili sigurnosnu rupu.

Drugi ključ ima neuporedivo više prava. Ali to, također, ne predstavlja sigurnosni problem, jer se taj ključ neće nalaziti na svakom uređaju na kojem je App instaliran, nego samo na serveru na kojem je instaliran servis koji šalje obavijesti.

Registracija Channel-a u App-u

Konačno je došlo vrijeme i da napišemo prve linije koda. U Visual studiju potrebno je formirati novi projekt tipa Windows Store App. Pošto Notifikation Hub tehnologija nudi poseban API, neophodno je referencirati assembly u kojem se taj API nalazi. Do te biblioteke se dolazi korištenjem NuGet-a i zove se WindowsAzure.Messaging.Managed.

Dodajte ga u projekt kao Nuget Package uz pomoć akcije Add Reference.

Ako radije koristite Package Console, morate izvršiti sljedeću komandu:
Install-Package WindowsAzure.Messaging.Managed

Nakon instalacije API je registriran u projektu sa sljedećim Namespace-ovima:
Windows.Networking.PushNotifications
Microsoft.WindowsAzure.Messaging

Dodajte novu klasu u projekt sa imenom DotNetProHub te dodajte programski kôd iz listinga 1. U konstruktoru klase NotificationHub morate kao prvi argument dodati ime Hub-a. U našem primjeru je to „dotnetpro“.

Kao drugi argument unesite DefaultListenSharedAccessSignature. Taj argument dobijate iz portala kao što je prikazano na slici 14.

Sada morate još, na početku metode OnLaunched, pozvati metodu InitNotificationsAsync:

protected async override void OnLaunched(LaunchActivatedEventArgs args)
{
DotNetProHub.InitNotificationsAsync();
        . . .
}

Slika 14: Hub Connection Strings

Time je implementacija Client App-a za početak završena. Sada se App mora povezati sa Store Appom koji je formiran na početku (vidu slike 6 i 7). Izaberite u Visual studiju Project Property „Store“, a onda „Associate“. Ovdje se mora provsti autentikacija sa vašim Microsoft ID-jem. Na kraju se izabere App koji je ranije napravljen u Store-u (vidi sliku 15).
Slika 15: App pridružiti u Store

U ovom koraku je Visual Studio iz Publisher Certificate u manifestu (vidi package.appmanifest) pročitao informacije Package Identifier i Common Name (CN) te ih upload-ovao u Store. Ako bi se ovi podaci nekada promijenili, potrebno je ovaj korak ponoviti ili manualno promjeniti u manifestu.

Sada se može startovati App. Ako je sve ispravno urađeno, jedan Message dijalog će potvrditi registraciju (vidi Listing 1).

U ovom članku ćemo se kasnije posvetiti detaljima.

Implementiranje servisa za slanje obavijesti

Za slanje obavijesti implementirat ćemo jednu jednostavnu Konzolnu aplikaciju. Radi jednostavnosti, u ovoj demonstraciji ona će preuzeti ulogu servisa. Naravno, u jednom produktivnom rješenju na ovom mjestu bi se koristio servis, Web servis, Web aplikacija, Web Role ili čak jedna Office aplikacija.

Ne zaboravite da u Project Properties kao Target Framework postavite 4.5 prije nego krenete dalje.

U sljedećem koraku moramo referencirati Desktop verziju od Messaging Assembly, koja se također može dobiti kao NuGet paket.

Neophodne Hub funkcije se mogu naći u assemby-ju WindowsAzure.ServiceBus.
Čak ako do sada i niste imali kontakta sa Service Bus i Messaging funkcijama, nemate razloga za brigu. Nije neophodno imati ta predznanja. Hub-API „prekriva“ sve funkcije od Service Bus-a.

Listing 2 prikazuje kompletan programski kôd koji šalje Toast obavijest (Toast Notification) svim registriranim Windows 8 uređajima.

Možemo primjetiti da tri linije koda u listingu 2 predstavljaju bitno pojednostavljenje u usporedbi sa uobičajenim Notification Hub PNS modelom.

Da rezimiramo:
Prvo smo registrirali jedan App u Store-u. Onda smo unijeli SID i Client Secret u Hub konfiguraciju u Service Bus Management portalu.

U Windows App-u smo implementirali programski kôd za registraciju na obavijesti te smo implementirali i jednu Console aplikaciju kao servis za slanje obavijesti.

Kada startujemo Console aplikaciju, pojavi se obavijest kao što je prikazano na slici 16.
Slika 16: Primjer nativne Windows 8 obavijesti

Sve funkcionira skoro kao što smo i kazali.

Naš primjer može odlično skalirati te može neovisno aktualizirati Channels-e. Ali u trenutnoj verziji podržava samo Windows 8 uređaje. Pa da vidimo kako ćemo to promijeniti.

Rad sa template-ima

Da bi mogli podržavati sve tipove uređaja, programski kôd servisa bi morao na neki način koristiti različite template (šablone). To se u praksi pokazalo kao neizvodljivo tako da je razvojni tim donio fundamentalnu odluku, da App sam odlučuje koji template će biti korišten.

Dodajte u App programski kôd (kao što se vidi u listingu 3. Varijabla “toastTemplate” sadrži template jedne Toast-obavijesti za Windows 8 operativni sistem). Pod [3] pogledajte listu svih aktuelno podržanih template-a.

Od posebnog interesa su markirana mjesta sa placeholder-om ‚$‘. Na ovim mjestima Hub zamjenjuje placeholder-e sa vrijednostima koje su za to predviđene. Primjer template-a u listingu 3 predviđa korištenje jedne Toast obavijesti sa informacijama Title, Text (Subjekt) te jednom slikom. Sve tri informacije se u ovom primjeru definišu od strane servisa.

Za slanje jedne takve obavijesti koristimo programski kôd iz listinga 4. Rezultat se može vidjeti na slici 17.
Slika 17: Primjer jedne Windows 8 Toast obavijesti sa template-om

Za slanje jedne „Tile“ obavijesti jednostavno bi morali izabrati odgovarajući „Tile“-Template (vidi [4]).

Da bi to demonstrirali potrebno je uraditi minimalnu prepravku koda iz listinga 3. U principu, sve ostaje kao što je i bilo osim registracije Template-a.

Izaberite odgovarajući Template pod [4] te ga registrirajte kao što je prikazano u listingu 5.

U primjeru listing 5 korišten je „Tile“-Template, koji je skoro identičan sa „Toast“ template-om korištenim u listingu 3. Iz tog razloga se programski kôd koji je korišten za slanje obavijesti ne mora mijenjati.

await hub.SendTemplateNotificationAsync(new Dictionary<string, string>
                    {
                        {"pic",  "http://daenet.de/www/img/articles/apps-article.jpg"},
                        {"msgTitle", "Notification Title"},
                        {"msgSubject", "Notification Subject"},                 

                    });

Pošto smo utvrdili da je jedina razlika između „Toast“ i „Tile“ obavijesti u registraciji različitih template-a, možemo se pitati kako bi izgledalo slanje jedne „Badge“ obavijesti.

Odgovor je: „Tako što se registrira „Badge“-Template“. U tom slučaju trebali bi baciti pogled u Badge-katalog [5] i izabrati odgovarajući template.

Slika 18 prikazuje sve Badge-Template koji stoje na raspolaganju. Kako se može vidjeti radi se o jednom Template-u sa različitim vrijednostima za atribut „Value“.

</pre>
string badgeTemplate = @""; await hub.RegisterTemplateAsync(channel.Uri, badgeTemplate2, "BadgeTemplate", new List() { "badge" });

Da bi aktivirali taj Badge i unutar njega prikazali jedan broj, morali bi izvršiti sljedeću liniju koda na serveru:

</pre>
await hub.SendTemplateNotificationAsync(new Dictionary { {"msgTitle", "7"}, });

Ako pri tome treba da se prikaže Mail simbol, jednostavno moramo promijeniti vrijednost „Value“ atributa:

   await hub.SendTemplateNotificationAsync(new Dictionary<string, string>
                    {
                        {"msgTitle", "newMessage"},
                    });

U slučaju da Badge treba da bude isključen, moramo u Template-u koristiti vrijednost „none“:

   await hub.SendTemplateNotificationAsync(new Dictionary<string, string>
                    {
                        {"msgTitle", "none"},
                    });

Tagging (Routing)

Jedna od najvažnijih osobina Notification Hubs-a je Tagging ili Routing. Naime, prilikom registracije template-a je moguće specificirati listu oznaka (Tags):

await hub.RegisterTemplateAsync(channel.Uri, tileWideManagerTemplate, "NameDerVorlage", new List<string>() { "managers” });

await hub.RegisterTemplateAsync(channel.Uri, tileWideUserTemplate, "NameDerVorlage", new List<string>() { "users” });

Server koristi tu listu da bi definisao rutu za obavijest. Na osnovu šablona server određuje gdje će obavijest poslati. Npr., sljedeći programski kôd šalje obavijesti na sve „managers“-e.

await hub.SendTemplateNotificationAsync(new Dictionary<string, string>
                    {
                        {"pic",  "http://daenet.de/www/img/articles/apps-article.jpg"},
                        {"msgTitle", "Hallo Managers"},
                        {"msgSubject", "Es gibt keine Prämie "},                 

                    },
                "managers");

Oznake „Tagss¨ predstavljaju jedan zaista moćan, a istovremeno jednostavan feature. Uz pomoć oznaka kategoriziranje template-a postaje vrlo jednostavno. Na primjer, sa „smartphonedevice“, „managers“ i „tablett“, „managers“ mogli bismo napraviti razgraničenje između Managers app-ova na pametnom telefonu i na tablet-u. Na taj način će server biti u stanju da obavijest pošalje samo na pametne telefone.

Koliko to sve košta?

U ponudi su trenutno tri pretplatne opcije: Free, Basic i Standard.
Kod besplatne pretplate (Free) moguće je slanje obavijesti do maksimalno 500 uređaja. Osim toga, maksimalni broj servis operacija je ograničen na 100.000. Pod operacijom se podrazumijeva slanje ili primanje jedne obavijesti. Npr. jedan poziv metode SendTemplateNotificationAsync se računa kao jedna operacija. Osim toga se i primanje jedne obavijesti računa kao jedna izvršena operacija. Tako da ako npr. imate 500 uređaja, jedna obavijest poslata na sve uređaje implicira 501 izvršenu operaciju. Namjena Free ponude je prije svega testiranje aplikacija ali mogući su scenariji gdje se Free ponudom čak može i pokriti jedan određen broj korisnika.

Cijena Basic pretplate je 75$ mjesečno u dnevnom taktu. Moguć je i upgrade sa Free na Basic pretplatu, za vremenski period od sedam dana. Poslije isteka tog vremenskog perioda, moguć je ponovni povratak na Free pretplatu. Cijena za takav sedmodnevni upgrade iznosi jednu četvrtinu mjesečne cijene Basic pretplate od 75$. Basic pretplata je limitirana na 100.000 uređaja i 1.000.000 operacija.

Standard pretplata predviđa kupovinu takozvane jedinice „Unit“. Jedinica se može uporediti sa jednim čvorom (Node) u cluster server rješenjima. Jedna jedinica (199$ mjesečno) je u stanju da pokrije 5.000.000 obavijesti za 100.000 uređaja. I ovaj način pretplate predviđa obračun u dnevnom taktu.

Zaključak

Kako se čini, Microsoft proširuje svoju ponudu u oblasti Cloud, Integration & Messaging Plattform u sedmičnom taktu. Već par sedmica poslije predstavljanja novog Service Bus 2.0 servisa, Microsoft predstavlja i Notification Hubs servis.

Većina programera taj razvojni tempo kojim Microsoft uvodi nove produkte u svojoj Azure liniji vjerovatno doživljava kao prebrz. Ali bitno je razumjeti, da u svojoj novoj strategiji pod imenom „Devices & Services“, Microsoft vidi Service Bus kao centralnu integracionu komponentu. Windows Azure Notification Hubs je tipičan primjer novih Microsoft-ovih tehnologija, koje su pored karakteristika kao što je ekstremna skalabilnost, maksimalno reduciranje zavisnosti o drugim tehnologijama i platformama, toliko jednostavne za korištenje, da je cilj moguće ostvariti sa samo nekoliko linija koda.

[ 1] Windows Azure besplatno testirati http://www.windowsazure.com/en-us/pricing/free-trial/
[ 2] App registrirati u Store-u https://appdev.microsoft.com/StorePortals/en-US/Developer/Catalog/ReleaseAnchor?wa=wsignin1.0
[ 3] Katalog za Toast template http://msdn.microsoft.com/en-us/library/windows/apps/hh761494.aspx
[ 4] Katalog za Tile template http://msdn.microsoft.com/en-us/library/windows/apps/hh761491.aspx
[ 5] Katalog za Badge template http://msdn.microsoft.com/en-us/library/windows/apps/hh779719.aspx
[ 6] Getting started -Windows 8 https://go.microsoft.com/fwLink/?LinkID=317580&clcid=0x409
[ 7] Getting started – Windows Phone 8 http://www.windowsazure.com/en-us/manage/services/notification-hubs/get-started-notification-hubs-wp8/
[ 8] Getting started – iOS https://go.microsoft.com/fwLink/?LinkID=317579&clcid=0x409
[ 9] Getting started – Android https://go.microsoft.com/fwLink/?LinkID=310147&clcid=0x409
[10] Windows Azure Notification Hubs pregled http://msdn.microsoft.com/library/jj927170.aspx

Listing 1: Hub incijalizacija u Windows 8 App-u

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Windows.Networking.PushNotifications;
using Microsoft.WindowsAzure.Messaging;
using Windows.UI.Popups;

namespace DotnetproHubApp
{

    ///
    /// Provides the code for hub initialization
    ///

    internal class DotNetProHub
    {
        public static async void InitNotificationsAsync()
        {
            var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

            // Andere Moeglichkeit Channel zu initialiseren.
            // var channel = ServiceBusConnectionStringBuilder.CreateUsingSharedAccessKey(new Uri("sb://****.servicebus.windows.net"),
            //NotificationHubDescription.DefaultFullSasRuleName, "********888");

            var hub = new NotificationHub("dotnetpro", "****=");
            var result = await hub.RegisterNativeAsync(channel.Uri);

            // Displays the registration ID so you know it was successful
            if (result.RegistrationId != null)
            {
            var dialog = new MessageDialog("Uspjesno registriran: " + result.RegistrationId);
            dialog.Commands.Add(new UICommand("OK"));
            await dialog.ShowAsync();
            }
        }
    }
}

Listing 2: Push Notification Service primjer

using Microsoft.ServiceBus.Notifications;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DotNetProHubService
{
    class Program
    {
        static void Main(string[] args)
        {
        SendNotificationAsync();
        Console.ReadLine();
        }

        private static async void SendNotificationAsync()
        {
            NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("Endpoint=sb://******.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=*****Q=", "dotnetpro");
            string toast1 = @"Hello Notification Hubs!";

            await hub.SendWindowsNativeNotificationAsync(toast1);
        }
    }
}

Listing 3: Registracija template-a za Toast obavijesti

public static async void InitNotificationsAsync()
{
    var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

    var hub = new NotificationHub("dotnetpro", "****=");
    var result = await hub.RegisterNativeAsync(channel.Uri);

    string toastTemplate = @"$(msgTitle)$(msgSubject)";

    await hub.RegisterTemplateAsync(channel.Uri, toastTemplate, "ToastImageAndText02");

    if (result.RegistrationId != null)
    {
        var dialog = new MessageDialog("Template registration successful: " + result.RegistrationId);
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
}

Listing 4: Slanje jedne Toast obavijesti sa definiranim template-om

private static async void SendToastTemplateNotification()
{
    NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("Endpoint=sb://****.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=**=","dotnetpro");

    await hub.SendTemplateNotificationAsync(new Dictionary
            {
            {"pic", "http://daenet.de/www/img/articles/apps-article.jpg"},
            {"msgTitle", "Notification Title"},
            {"msgSubject", "Notification Subject"},

    });
}

Listing 5: Registracija jedne Tile obavijesti sa definiranim template-om

public static async void InitNotificationsAsync()
{
    var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

    var hub = new NotificationHub("dotnetpro", "****=");
    var result = await hub.RegisterNativeAsync(channel.Uri);

    // Register Tile Notifification Template
    string tileTemplate = @"$(msgTitle)$(msgSubject)";
    await hub.RegisterTemplateAsync(channel.Uri, tileTemplate, "TileSquarePeekImageAndText02”);

    if (result.RegistrationId != null)
    {
        var dialog = new MessageDialog("Template registration successful: " + result.RegistrationId);
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
}

How to Setup Counter Strike Dedicated Server on Windows Azure Virtual Machine


To setup Counter Strike Dedicated Server on Virtual Machine running on Windows Azure you have to perform 10 steps. This blog post is going to explain all them in detail.

1. First thing you should grab is Windows Azure Account. If you dont have one, you can create trial. More information about creating Windows Azure Account you can find on Windows Azure Portal.

CSWindowsAzureSl1

2. Create Virtual Machine on Windows Azure. Choose New From Bottom Bar and Choose: Compute->Virtual Machine-From Gallery (see pic below).

CSWindowsAzureSl2

3. From List of Virtual Machine Select Windows Server 2012.

CSWindowsAzureSl3

4. Setup Name of VM, default username and password, and follow instructions. After you finish with VM, by clicking Finish button, Windows Azure will create your VM in few minutes. If you need more information how to setup VM on Windows AZure please follow instruction on this link.

5. Download RDP Connection from Windows Azure Portal and connect to you Machine (See picture below).

CSWindowsAzureSl4

6. Open your Windows Server VM and Install Counter Strike. After installation go to Counter Strike Folder and Run hlds.exe to cretae Dedicated Server.  Fill the fields with the required information and choose Start Server.

CSWindowsAzureSl7

Now your dedicated server is running but no one can access it yet. We need to open default UDP port 27015 on Windows Firewall, as well as create endpoint on Windows Azure Portal.

7. Open Windows Firewall and Create Incoming and Outcoming Rule for UDP Port= 27015.

CSWindowsAzureSl5

8. Go to Windows Azure Portal and create Endpoint for this UDP Port.

CSWindowsAzureSl6

9. This is all you need to create. Go to Client PC choose Add Server and put public IP adress:27015  of you Windows Azure Machine or VMName.cloudapp.net:27015.

10. Invite your friends to play the Game by providing them with the  IP and the UDP Port.

Enjoy.