Nov 28, 2008

BBCode parser kontrola za WPF/Silverlight

Na strani codeproject.com sem objavil majhno kontrolo, ki vam omogoči definiranj lastnih BBKod (ki jih vsi poznate iz phpBB forumov) in njihov prikaz v Silverlight WPF aplikacijah.

Nov 20, 2008

Asp.net Reverse Ajax Chat

1. Motivacija
Ker je bil danes tak turoben dan, sem se odločil napisati demonstracijsko aplikacijo, ki uporablja t.i. reverse ajax, s pomočjo tehnologije Asp.net in WCF. Pred kakim letom sem se udeležil poletne šole, kjer smo podoben primerček spisali v Javi. Danes sem se hotel prepričati ali je kaj podobnega mogoče tudi z asp.net. Gre pa zgolj za predstavitev koncepta, programska koda je zgolj provizorična.

Do kode lahko dostopate preko tega naslova ali kar preko priljubljenega svn klienta:
Uporabniško ime inu geslo se glasi "blog" (brez narekovajev).

2. Kaj je Reverse Ajax?
Predvidevam, da veste kaj je ajax in kako se uporablja. Problem pri klasičnem ajaxu je, da se podatki posredujejo na zahtevo uporabnika. Kot že ime pove pa pri reverse ajaxu gre za obraten koncept, želimo namreč, da se na klientu proži akcija na zahtevo strežnika.

3. Implementacija
Najvažnejša stvar pri implementaciji je zanka preko katere se klient prijavi na obvestila, ki jih potem pošilja strežnik. Strežnik za vsakega klienta hrani vrsto obvestil. Zahtevek za novo obvestilo preveri ali so za klienta na voljo kaka obvestila. Če jih ni zahtevek damo v spanje, dokler za klienta ne prispe novo obvestilo. Pri tem je med strežnikom in klientom ves čas odprt XmlHTTPRequest, preko katerega se (takoj ko je na voljo) pošlje novo obvestilo. Ob sprejetju in obdelavi obvestila klient nemudoma zahteva novo obvestilo.
Spletna storitev - strežnik - izpostavi naslednje metode:

Tukaj je najbolj pomembna metoda GetNextNotification, preko katere klienti zahtevajo nova obvestila. 

Slabost tega pristopa je blokiranje niti spletnega strežnika. Ko je teh čakajočih niti več se delovanje slednjega znatno upočasni.

V izvorni kodi je dodana tudi implementacija ki uporablja t.i. Async Pattern,  kar omogoči lastno asinhrono implementacijo izvajanja zahtevka. Dotična implementacija je kar zanimiva in malce lepše pokomentirana kot "navadna" verzija, tako da priporočam vsem, ki so željni malce bolj poglobljenega znanja, da si kodo tudi ogledajo.


4. Testiranje
Dodana je tudi ena majhna javaskripta za obremenjevanje vašega mlinčka. Zaganjal sem jo v po 3-5ih instancah v vsakem brskalniku (Chrome, IE, Firefox, Opera) in je zadeva delovala solidno, vendar ob 100% obremenjenosti CPU-ja. A upoštevati je potrebno, da vsak klient pošilja 1 sporočilo na sekundo, da se za vsako poslano sporočilo aktivira ~15 spečih niti (ker se je sporočilo pošiljalo vsem odprtim instancam), ter da je vse skupaj potrebno pomnožiti še z ~15! Sporočila so letela s tako hitrostjo, da jih IE ni uspel prikazovati in je nekajkrat popolnoma zamrznil.

5. Zaključek
Reverse ajax je mogoče implementirati tudi s pomočjo  asp.net tehnologije. Žal je java kar se tega tiče veliko pred asp.net saj obstajajo posebaj za te namene razviti strežniki (recimo putty) ter ogrodja (DWR). Obstajajo pa tudi implementacije s pomočjo Flasha in Java Appletov, kjer komunikacija poteka preko Socketov, ti vtičniki pa ob sprejemu obvestil kličejo javascript na klientovem spletnem brskalniku. Naslednjič se bom najverjetnje lotil iste naloge s pomočjo Silverlight-a in WCF-a z uporabo povratnih klicev. Stay tuned ;)

Nov 17, 2008

Oda snihu

Dej dej snih zej!
Jebeš pumlad, dej zej snih!
Kipn ga en metr zej,
snih, snih, snih, snih!

Moje sneške, toje sneške,
super sanke, tralala.
Če ha manka, nam se sanka,
kuhan uinu nam ga da.

Zakua ni snih ciu lit (ciu lit)?
Kua je hlup ta svit (ta svit)!
Jest čem bit eskim (eskim),
snih na smi bit sam pazim!

Moje sneške, toje sneške,
super sanke, tralala.
Če ha manka, nam se sanka,
kuhan uinu nam ga da.

Ris ni lipa, če ni sniha.
Prid ablak, kipn ha!
Če se u pismc kej na rima,
je zatu, ka ni snihá.

Moje sneške, toje sneške,
super sanke, tralala.
Če ha manka, nam se sanka,
kuhan uinu nam ga da.

by Sneti & idrijski knapi


No, mogoče bo kaj pomagalo :)

Nov 11, 2008

Prva objava

Po dolgem razmišljanju sem se tudi sam odločil, da začnem pisati blog.