Programátorský víkend

Nějaký ten prográmek tu, nějaká ta aplikace támhle, komponenta sem, tutoriál tam.

Když už jsem přišel o většinu dat, operační systém a o pracovní maily za poslední tři měsíce, tak jsem si řekl, že si aspoň radost udělám a zaprogramuju si.

Totiž...

Jak jsem tak nastavoval svou Vistu (skloňujeme: MáVista, TváVista, JehoVista), tak jsem zjistil, mimo jiné, že třeba nastavení /etc/hosts je docela pěknej opruz, protože ho nelze přímo otevřít, ale je potřeba "otevřít ho jako admin". Ne že by řešení neexistovalo... Stačí jen kliknout tuhle, kliknout támhle a spustit si editor jako admin. Nebo si lze udělat symbolický odkaz a...

... no anebo si s chutí zaprogramujete, když už si musíte pocvičit C# kvůlivá nové práci. Takže jsem se ponořil do knih a tutoriálů a manuálů a za odpoledne jsem si sesmolil první verzi hosts editoru, který stačilo jen spustit, nebylo třeba se šmudlat s adminem.

Fajn, ale textbox není až tak úplně editor, jak si ho představuju. Takže jsem zase sednul a udělal jsem si Opravdový Editor, tedy takovou tu věc, kde nepíšu text, ale připravím si sadu IP adres serverů a pak jen píšu aliasy. Výborná věc na testování, než nastavím DNS. Klik, nový server, doménové jméno, klik na "Hostmonster IP", uložit... Ptákovina, ale na pocvičení výborná věc. Například jsem si zkusil, jak si napsat vlastní generickou třídu odvozenou od generické Directory, která přidává metody pro serializaci a deserializaci ve formátu XML. Ze začátku se to sice trochu vleklo, ale po jednom odpoledni jsem se do toho vpravil a šlo to jak po másle.

A abych si trošku odpočinul, tak jsem si pohrál se sidebarem. Hledal jsem nové "miniaplikace" (proboha to je slovo!) a našel jsem tam "Rádio Impuls". Zeptal jsem se Filipa Rožánka, jestli má ČRo taky svůj gadget. Prý ne...

Hm, to přeci nemůže být tak těžký, řekl jsem si, pohledal zase pár tutoriálů, ukázek a existujících přehrávačů a za večer jsem si sesmolil i "ČRo Sidebar Player". Teď mi tu hraje Český rozhlas po internetu, což je docela nezvyk. :)

Mimochodem, moc mě těší, že se různí lidé ptají po smyslu toho či onoho... Například teď – proč si vypalovat seriál na DVD? Nebo třeba k tomu gadgetu konkrétnější dotaz: Jaký smysl má poslouchat rádio online, když si ho přeci můžu pustit? V takovou chvíli se vždy zarazím a říkám si: Že to VY nepotřebujete a že to VY nechápete přeci ještě neznamená, že někdo jiný ten smysl nevidí! Například já si rádio pustit nemůžu, neboť přijímačem doma neoplývám. (Ne, kecám, mohl bych si ho pustit vedle ze satelitu, ale já chci poslouchat rádio u počítače při práci.) Krom toho Wave ani Leonardo na rádiu nenaladím, že...

Navíc, a to se vracím, mám rád Český rozhlas, takže jsem gadgetík udělal s chutí. Můžete si ho, máte-li Visty, nainstalovat a poslouchat rádio se mnou.

Jo a taky jsem napsal článek o OAuth pro Zdroják a Martin Hassman o mně stvořil tak krásnou autorskou stránku, že jsem si byl skoro sympatický! :) (Ovšem v roztomilosti těžko mohu konkurovat českému maskotovi PHP programátorů – posuďte sami.)

Já jsem se sebou za tento víkend spokojený... A co vy? ;)

Dne 16.11.2008

Twittni

Přidej do: asdf.sk StumbleUpon Toolbar Stumble It!

Komentáře

[1] (suchosch - Mail - WWW) 17.11.2008, 00:32:11 [X] [D]
sidebar jsem vyhodil z plochy hnedle první den. (protože ho nepotřebuju a nechápu!) takže mi teď poraď, kde se zapíná, ať to můžu vyzkoušet :)

[2] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 00:54:54 [X] [D]
[1] My, co máme dva širokoúhlé monitory vedle sebe, my sidebar oceníme... Jinak Start - Spustit - "sidebar" - enter :)

[3] (Tonda - Mail - WWW) 17.11.2008, 01:06:27 [X] [D]
[1]Arturovo návod na znovuspuštění sidebaru mi sice nefunguje, ale když si klikneš na jeho link na miniaplikaci, tak se ti nabídne spuštění v sidebaru a tím se spustí. Pak musíš kliknout na link ještě jednou, aby se aplikace skutečně nainstalovala. :)

[4] (rarouš [openID] - Mail ) 17.11.2008, 07:22:05 [X] [D]
Ale fuj! Podědit vlastní Dictionary, aby uměla serializovat do XML, to se ještě v dnešním civilizovaném světě děje?

Composition over Inheritance! :)

[5] (banán ) 17.11.2008, 07:39:28 [X] [D]
Dík za gadgetík ČRo, hned jak budu moct, tak si ho tam šoupnu.

[6] (alfa ) 17.11.2008, 10:09:57 [X] [D]
super gadget!

[7] (JimX - Mail ) 17.11.2008, 10:20:46 [X] [D]
Mne by se ten sidebar i libil, na mym sirokohouhlaci je na nej mista dost, ale stval me, ze si obcas bral 50% CPU ... a to se nedela a dostal proto za vyucenou :)

Nicmene spis by me zajimala ta aplikace na upravu hosts, nebyla by nekde ke stazeni? Ja si ted hosts upravuju pres totalcommander, kterej kvuli jednoduchosti pouzivani spoustim jako admin, ale je to trochu drbani se pravou rukou za levym uchem, takze bych ocenil i neco lepsiho :)

[8] (Solvina - Mail ) 17.11.2008, 10:23:04 [X] [D]
Tak ja si to zkusim: Kdo kudla potrebuje Cesky rozhlas! Takhle kdyby to prehravalo BBC! Nebo CNN! (No a co, ze nevim esiva maji radio!)

Myslim, ze toto je dalsi autoruv utok na obyvatele Brna a mel by psat o necem jinem!

[9] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 10:47:33 [X] [D]
[7] Já ti řeknu proč... Protožes tam měl počasí od Meteopressu, co? :) Přesně z toho důvodu jsem ho vyrazil já - bral si příliš mnoho prostředků.

Aplikace by k dispozici i byla - teda zatím ta "prostá textboxovská". Bez veškerých záruk zde: http://misc.maly.cz...istahosts.zip. "Full" editor až příště. :)

[4] Rád se nechám poučit. Odkaz či vysvětlení by nebylo?

[10] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 11:15:52 [X] [D]
[8] Je tam i Český rozhlas Brno! Na druhou stranu se opakuje sprostý útok, protože je až ZA stanicí Praha!

Ovšem správná reakce by byla: "Četl jsem tu mnoho slov od Solviny, ale nevidím tam nic pozitivního, co by nás někam posunulo. Čím Solvina přispěla k naší snaze o zkvalitnění služeb ČRo?" (znalci vědí) ;)

[11] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 11:38:25 [X] [D]
[4] Už nehledej, už vím co tím myslíš. :) Ono by to šlo taky, ale přišlo mi to (v tom konkrétním případě) jako škrábání se levým uchem za pravou nohou. Samozřejmě jsem si mohl napsat i kašpárkovskou třídu, co má dvě statické metody (Serializuj a Deserializuj) a veřejný parametr "Dictionary"... šlo by to vyřešit mnoha způsoby, lišícími se co do pracnosti, elegance a efektivity, a já se rozhodl nedělat "composition blackbox", ale podědit třídu - především proto, že bych musel zpřístupňovat spoustu veřejných metod od původní generiky, nebo deklarovat vložený objekt jako veřejný.

Nebo má VS nějaký refactoring na composite třídy? Že by rovnou vygeneroval všechny wrappery pro všechny metody? Pak bych to chápal, ale tohle: http://jdem.cz/ahhc2 - to se mi přepisovat vážně nechtělo! :)

[12] (Borek - Mail - WWW) 17.11.2008, 12:07:53 [X] [D]
[11] Můžeš vysvětlit, proč bys musel přidávat wrappery pro všechny metody? Rovněž se podívej na mechanizmus extension methods, v .NETu velmi užitečná věc.

[13] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 12:33:02 [X] [D]
[12] Jasně že to můžu vysvětlit: Když se jazyk učíš a nevíš, že nějaké extension methods v C#3 jsou, tak používáš postupy, které jsou, jaksi, univerzální a o kterých se dočteš v knihách. To je celé.

PS: Kdyby ten komentář začínal třeba slovy "Nemusíš přidávat wrappery, dá se to řešit jinak..." tak by vypadal víc jako rada a míň jako peskování... ;)

PPS: Každopádně aby to nevyznělo, že jsem zaujal nějakou začátečnickou defenzivu vůči profesionálům: To ani náhodou, já děkuju za tipy (vám oběma) a s chutí se od vás nechám poučit.

[14] (Borek - Mail - WWW) 17.11.2008, 12:54:24 [X] [D]
[13] Promiň, vůbec to nemělo vyznít jako peskování, já se ptal čistě neutrálně. Bez návaznosti na C# nebo .NET, proč by utility třída, která vezme Dictionary a nějak ho serializuje, měla implementovat wrappery pro všechny metody? Je možné, že mi něco uniká, proto jsem se zeptal (nebyla v tom ani špetka ironie nebo čehokoliv jiného).

Rovněž s těmi extension methods to bylo míněno jako prostý odkaz na něco, na co jsi možná zatím nenarazil (není divu, C# je rozsáhlý jazyk).

Jestli můj předchozí komentář vyzněl urážlivě, promiň, vůbec to tak nebylo myšleno, jen mi asi dnes příliš dobře nefunguje mozkové centrum zdvořilosti :)

[15] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 13:21:01 [X] [D]
[14] Aha, tak to se omlouvám já, já to nepochopil jako prostý dotaz... Neber to, prosím, zle, už jsem holt vycvičen tak, že "můžeš mi vysvětlit, proč...?" nevnímám jako dotaz, ale jako peskování (vzor: "Můžeš mi vysvětlit, proč máš na triku kečup?") ;)

Ale tedy k věci: Situace je takováto - mám rozepsanou aplikaci, v níž používám k uložení dvojic "server - jeho IP" dictionary. Používám metody pro vyhledávání, procházení, hledání klíčů a hodnot, přidávání, ... A teď by se mi hodilo tohle všechno uložit na disk. Jaké mám možnosti?

1. Můžu si napsat prostou metodu do hlavní aplikace, která vezme dict a projde ho prvek po prvku a uloží.
2. Můžu si napsat třídu, která bude obsahovat původní dictionary a publikuje k ní nějaké rozhraní
3. Můžu si napsat statickou utility třídu, která dělá totéž co 1 (to je to o čem mluvíš, předpokládám, ty)
4. Můžu si podědit a rozšířit.

... a určitě i další by se našly. Ale páč jsem si chtěl procvičit práci s generickými třídami a s jejich děděním, tak jsem zvolil 4. A drobné plus navíc: Mám "XML serializovatelný generický dictionary", až ho budu potřebovat. :)

Pokud bych to pojal tak jak píšeš, tedy jako "utility třídu", tak ta samosebou nemusí wrapovat nic. Kdybych to ale udělal jako "composition", tak buď musím zveřejnit funkce pro přístup k embednutému objektu, nebo ho musím deklarovat jako veřejný (a přepsat všude "servery.add" na "servery.seznam.add" - já vím, refaktorizace, ale stejně...)

Ještě jednou - omlouvám se, vazba "můžeš mi vysvětlit..." evokovala něco co evokovat neměla. :) A za extension opravdu děkuju, o tom jsem neměl ani zdání. To tak chodí, když se rozhodneš, že se podíváš na nějaký jazyk, nakoupíš učebnice a knihy, a než se k tomu opravdu dostaneš, tak vydají novou verzi. :) Aspoň vidíš, jaké knížky mám: Hlavně ty o VS2005 a C#2 (znám generické třídy). Ale k "C#3 novinkám" jsem se ještě nedostal, takže díky!

[16] (Radek Hulán - Mail - WWW) 17.11.2008, 13:36:20 [X] [D]
"pracovní maily za poslední tři měsíce"

C:\Users\rADo>nslookup -q=mx maly.cz

maly.cz MX preference = 1, mail exchanger = aspmx.l.google.com
maly.cz MX preference = 5, mail exchanger = alt1.aspmx.l.google.com

Pokud se jedná o Gmail, ty jej používáš jako "průchozí", tedy s downloadem zpráv na klienta a jejich smazáním u Google?

Na tomto miluji Exchange či Live.com email, člověk instaluje nové PC, nastaví profil, půl hodiny počká a 2GB zpráv jsou doma :-) Také je príma, že se v tom dá vyhledávat z mobilu, klidně 2 roky stará zpráva syncu či downloadu všeho lokálně...

[17] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 13:42:06 [X] [D]
[16] Radku, Radku... Ještě extra kvůli tomu tam píšu: "pracovní". Tedy mailová schránka "v práci". U zaměstnavatele. O mailech pro maly.cz nepadlo ani slovo, tam jsem zapnul IMAP a jelo se dál, ale zprávy z mailserveru v práci, stahované přes pop3, jsou v rici.

[18] (Radek Hulán - Mail - WWW) 17.11.2008, 14:02:55 [X] [D]
[17] většinou bývá nezodpovědný či neznalý jednotlivec (POP3 download na lokál s mazáním na serveru), firmy se chovají tak, že emaily zálohují a nepoužívají jako "průchozí" :) To je zvláště u IT firmy (zaměstnavatele) dost mimo.

Budiž to poučením pro ostatní...

Každopádně přeji hodně úspěchů u zaměstnavatele nového, včetně lépe koncipovaného mail serveru! :)

[19] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 14:04:45 [X] [D]
[18] Ale možná to tam někde mají, nevím, zjistím až zítra. :)

U nového si to rovnou FWDnu na gmail :)

[20] (Borek - Mail - WWW) 17.11.2008, 14:51:04 [X] [D]
[15] Není zač se omlouvat, můj komentář byl nešťastně formulovaný.

Jinak C# 3.0 je paráda, bude se ti líbit. Pokud hákuješ v nějaké vyšší edici Visual Studia (ne v Express), doporučuji stáhnout trial verzi Resharperu - jak budeš psát svůj naučený (nebo právě učený) C# 2.0 kód, Resharper tě bude nenápadně upozorňovat, co a jak by šlo napsat pomocí nové syntaxe. Pro učení perfektní nástroj (a pro reálný vývoj neocenitelný :)

[21] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 14:57:34 [X] [D]
[20] Zrovna Resharper tu mám a potvrzuju, je perfektní. Automatické přidávání using klauzulí je fakt příjemná věc. (A nejen to, samosebou). Každopádně pokud u C# budu zůstávat (míněno i doma), tak je Resharper jasný "must have".

Ale zaboha si nevzpomínám, kde jsem na něj přišel... Nepsals o něm náhodou?

[22] (Borek - Mail - WWW) 17.11.2008, 15:26:02 [X] [D]
[21] To nevím, ale Resharper se zmiňuje snad v každé diskusi o Visual Studiu.

Tak ať se ve světě .NETu daří!

[23] (Dmagician.myopenid.com [openID] - Mail - WWW) 17.11.2008, 16:23:53 [X] [D]
Ja som spokojny so svojim vikendom. V sobotu som pracoval asi 3 hod na svojom projekte (ked bude vonku dam vediet). V nedelu som nepsravil nic (az na to ze som ho stravil so svojou manzelkou prechadzkou po meste, dceru sme nechali na par hodin u babky). Takze som zasa poriadne nic nestihol a tym padom teraz sedim v robote pocas takeho doleziteho sviatku a aj tak som dokopy nic neurobil ;-) Ok ale toto je hlavne test openid.. ci to vobec funguje. (Roman)

[24] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 16:27:46 [X] [D]
[22] Tak jsme udrželi tradici a zmínili ho i tady! :) Díky za přání, doufám že to bude příjemná změna, co mě zas na nějakou dobu motivuje. A když ne, tak mám v záloze furt tu variantu "salaš na Šumavě". :)

[25] (Michal - Mail - WWW) 17.11.2008, 17:13:22 [X] [D]
[22] Tedy kluci, zda se , ze Resharper se nejak pohnul dopredu (za posledni 2 roky). Ja jsem uz leta na DevExpress CodeRush a Refactor! a velmi spokojen. Ale takto mi neradi ;-).

Resharper byval u vetsich projektu (stovky tisic radek, 10 projektu ruznych typu v solution) velmi velmi pomaly (nejen poprve pri "analyze kodu", ale i po ni).
Jak je na tom ted?

[26] (Michal - Mail - WWW) 17.11.2008, 17:15:21 [X] [D]
Arthure, a co takova "obecna" trida pro XML serializace jakekoliv serializovatelne tridy? Pak se to hodi vzdy a vsude

Neco jako toto :

namespace Devmasters.OTR.Messaging
{
using System;
using System.IO;
using System.Runtime.CompilerServices;
using System.Text;
using System.Xml.Serialization;

[Serializable]
public abstract class XMLSerializator
{
public static object FromXml(string xml, Type type)
{
object objectValue = null;
if (xml == null)
return null;

if (xml.Length == 0)
{
return null;
}
StringReader textReader = new StringReader(xml);
if (xml.Trim().Length == 0)
{
return null;
}
try
{
XmlSerializer serializer = new XmlSerializer(type);
objectValue = RuntimeHelpers.GetObjectValue(serializer.Deserialize(textReader));
}
catch (Exception exception1)
{
Exception innerException = exception1;
throw new ApplicationException("Deserialization problem", innerException);
}
return objectValue;
}

public static string GetClassXMLRootAttribute(Type type)
{
XmlRootAttribute customAttribute = (XmlRootAttribute) Attribute.GetCustomAttribute(type, typeof(XmlRootAttribute));
if (customAttribute == null)
{
return "";
}
return customAttribute.ElementName;
}

public virtual string ToXml()
{
return this.ToXml(this.GetType());
}

protected string ToXml(Type type)
{
XmlSerializer serializer = new XmlSerializer(type);
StringBuilder sb = new StringBuilder(0x400);
StringWriter writer = new StringWriter(sb);
serializer.Serialize((TextWriter) writer, this);
writer.Close();
return sb.ToString();
}

public static string ToXml(object Obj, Type type)
{
XmlSerializer serializer = new XmlSerializer(type);
StringBuilder sb = new StringBuilder(0x400);
StringWriter writer = new StringWriter(sb);
serializer.Serialize((TextWriter) writer, RuntimeHelpers.GetObjectValue(Obj));
writer.Close();
return sb.ToString();
}
}
}

[27] (ringo - Mail ) 17.11.2008, 17:48:29 [X] [D]
Gatget ČRo přišel vhod. Přišel, nainstaloval, spokojen. Díky.

[28] (Borek - Mail - WWW) 17.11.2008, 18:44:36 [X] [D]
[25] Resharper se po výkonnostní stránce lepší s každou novou verzí, u projektů rozumné velikosti není jeho přítomnost na lepší mašině skoro znát, u velký projektů asi může nastat problém při solution-wide analýze, ale to se dá vypnout. Jinak co se vlastností týče, je Resharper super, ačkoliv s konkurencí od DevExpressu porovnat nemůžu. No VS2010 snad rapidně sníží potřebu pro různé pluginy od třetích stran aneb "control dot to rule them all" :)

[26] Pro .NET od verze 3 je doporučenou strategií Data Contract Serializer, který technicky vzato spadá pod WCF (tam je potřeba serializovat kde co). Viz http://jdem.cz...sdn2.microsoft.com

[29] (Trupik - Mail - WWW) 17.11.2008, 21:03:36 [X] [D]
25 Resharper 4.1 mám nainstalovaný ve VS 2008 - je sice skvělý (ano, zmiňovaný wrapper všech metod jde vygenerovat pomocí několika příkazů), ale u větších projektů skutečně silně zpomaluje - v Solution s cca 120 projekty je vypnutí
Solution Wide Analysis nutností a práce je skoro o nervy.

Pokud pracuju s celou solution, Resharper obvykle vypínám. Pokud pracuju jen s částí (cca 25 projektů zbytek unloadlý), tak se dá pracovat docela dobře (SWA ale stejně vypínám). Občas se to ale stejně nechutně zpomalí (především při debugování), takže ho i tak musím někdy vypnout.

Pro vypínání používám dvě makra, namapovaná na tlačítka v toolbaru - pokud bude zájem, tak je najdete zde (spolu s recenzí Resharperu): http://blog.jakubmaly.cz...-in.aspx

[30] (Trupik - Mail - WWW) 17.11.2008, 21:09:24 [X] [D]
A ještě - gadget by byl fajn, kdybych si mohl vybrat jinou stanici - třeba právě Wave, je to už v kečupové zóně reakcí? :)

[31] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 21:11:22 [X] [D]
[30] Eh? A zkusils kliknout na takové to tlačítko co vypadá jako "recyklace"?

[32] (Michal - Mail - WWW) 17.11.2008, 21:57:53 [X] [D]
[28] Muj kod byla primarne reakce na [11]. Cest k vysledku je spousta. Dik za tip na DataContractSerializer, podle dokumentace dela v zakladu to same (+ umi neco malo navic)

Muj kod je jeste pamatka z doby .net 1.1 ;-), kterou cas od casu oprasim a nekde pouziju....

[33] (Trupik - Mail - WWW) 17.11.2008, 22:07:46 [X] [D]
[31]: omlouvám se, moje chyba - hledal jsem to pod tlačítkem co vypadá jako "francouzák".

[34] (Radek Hulán - Mail - WWW) 17.11.2008, 22:54:45 [X] [D]
Pokud by to někomu vyhovovalo lépe, doplnil jsem do XML asi 20 dalších českých (ne ČRo) rádií a pozadí přebarvil do černa. Vždy 128kbps, nižší bitrate nemá smysl poslouchat.

http://myego.cz...eska.radia.gadget

Dávám ten odkaz jen sem, pokud s tím máš Martine jakýkoliv problém, smaž to.

[35] (Arthur Dent [openID] - Mail - WWW) 17.11.2008, 23:03:23 [X] [D]
[34] Díky, problém s tím rozhodně nemám.

[36] (rarouš [openID] - Mail ) 18.11.2008, 08:51:12 [X] [D]
Kompozicí jsem nemyslel návrhý vzor Composition, ale jednoduché skládání objektů. Statické helpery, jsou defacto špatné, vždycky je lepší použít nestatické řešení. Dá se pak snadno použít v řešeních, kde sáhneme po IoC kontejnerech, nebo chceme psát testy a statická třída se z principu nedá podědit, nebo mockovat. :)

Problém s neserializovatelností dictionary netrápí jen tebe. Tipuji, že tvé řešení vypadá nějak tak: http://jdem.cz/ahj81

Je to jeden z možných přístupů, ale osobně mám problém, že se to objektu zanáší příliš mnoho funkcionality, která ji nenáleží. Když to převedu ad absurdum, tak to je jako, kdyby jsi se uměl sám rozložit na jednotlivé molekuly a opět zase složit, bez cizí pomoci. :)

Single responsibility principle! :)

[37] (smad ) 18.11.2008, 10:41:11 [X] [D]
Pekna app. Skusim tam dat nejake slovenske radia. Da sa hodit niekde aj zdrojacik?

[38] (smad ) 18.11.2008, 11:55:01 [X] [D]
Co som nasiel slovenske radia cez asx, doplnil som do xml: http://jdem.cz/ahkh5

[39] (marek - Mail - WWW) 18.11.2008, 12:01:57 [X] [D]
s tím sidebarem jsem si teď taky hrál, musel jsem všechno formátovat, tak jsem jel taky nanovo. ale ono těch aplikací neni zrovna moc, každopádně rádio mam rockzone :)

[40] (jules - Mail ) 18.11.2008, 12:50:17 [X] [D]
dakujem ze paekny gadget :)

[38] len pre info, player zvláda aj mp3 teda napr. aj http://live.slovakradio.sk:8000...3

[41] (smad ) 18.11.2008, 13:14:20 [X] [D]
[40] neskusal som, dik

[37] - gadgety pre vista sidebar som este nerobil, preto taka zbytocna otazka

[42] (Arthur Dent [openID] - Mail - WWW) 18.11.2008, 13:16:04 [X] [D]
[41] ad [37] - stáhni, přejmenuj ".gadget" na ".zip" a rozbal :)

[43] (Džoukr - Mail - WWW) 18.11.2008, 14:21:12 [X] [D]
Když už je tu řeč o rádiích, doporučuju mkrnout na službu www.radiomix.cz, kde si lze vybírat rádia podle aktuálně hraného obsahu. ;) Ale ČRo tam teda není... :)

[44] (Arthur Dent [openID] - Mail - WWW) 18.11.2008, 18:23:13 [X] [D]
[36] Když to převedu ad absurdum, tak to je jako, kdyby jsi se uměl sám rozložit na jednotlivé molekuly a opět zase složit, bez cizí pomoci. No a kdo by to měl, ve světě OOP, dělat? Kdo jiný by měl serializovat objekt než on sám? Ba co dím: Kdo jiný SMÍ něco takového dělat? Kdo jiný má přístup ke kontextu objektu?

[45] (Michal - Mail - WWW) 18.11.2008, 20:32:14 [X] [D]
[36] oprava [45]:
Pod tvrzeni "staticke helpery jsou defacto spatne" bych se ROZHODNE nepodepsal. Ja nejsem zastance bezhlaveho mnohonasobneho dedeni.
Po tech letech uz dokazu dobre odhadnout kdy pouzit statickou metodu a kdy ne. V tomto pripade a me potreby (tak 4 roky zpet) mi staticka metoda plne vyhovovala.

Snad krome mockovani (fake u opravdu rozsahlych objektu) mi u XML serializace a deserializace potreba dedeni rozhodne nechybi. A urcite se shodneme, ze obalit statickou tridou instacni metodou v potrebne tride je az smesne snadne.....

BTW, co potom rikas na tridy jako System.IO.File a spousty podobnych?

[46] (eLKa - Mail - WWW) 19.11.2008, 06:13:19 [X] [D]
Pro "nešťastníky" bez Vist řešení pro XP http://jdem.cz...mp9#lifehacker.com

Jen je škoda, že těch použitelných gadgetů je zatím tak málo http://jdem.cz...0#gallery.live.com

[47] (rarouš [openID] - Mail ) 19.11.2008, 11:35:14 [X] [D]
[44] Ve světe OO prošpikovaném reflexí to může být rozhodně kdokoli, kdo na to má dostatečné znalosti. Ale mělo by to být jeho jediná dovednost. :)

Když se mi zanese komín sazema, tak taky zavolám kominíka, ať mi ho protáhne, komín to sám udělat nemůže. :) Sice by bylo hezké, kdybychom měli komín co se umí sám čistit, měnit svůj průměr a výšku tak, aby reguloval svůj tah podle okolních povětrnostních podmínek, ale za jakou cenu by to bylo?

[45] Přesně System.IO.File a spol jsou velice nešťastné, tejně tak FormsAuthentikace v ASP.NET. Pokud přijmeš praktiky jako testování jednotek, nebo dependecy injection musíš tyto věci abstrhovat nějakým wrapperem = práce na víc.

Tuším, že ve čtvrté verzi frameworku s tím možná bude něco uděláno. :)

[48] (Arthur Dent [openID] - Mail - WWW) 19.11.2008, 11:53:06 [X] [D]
[47] ... a to jsem se jako s chutí zasmál, to zase jo. :) Ne tomu, co říkáš, ale taknějak... světu.

Pravda, reflexe... :) Zase se ta houpačka zhoupla na druhou stranu, dosti bylo zapouzdření, nyní máme zapouzdření a reflexi. Dosti bylo soukromí, nyní máme na baráku vyvěšené plány. Dosti bylo "objektů coby blackboxu"... Kdybys náhodou nevěděl co že to melu, tak to jsou všechno poučky OO, na které se před, řekněme, deseti lety přísahalo jako na fundament OO a programátorští guruové té doby (Virius, Pecinovský, Kryl) bez konceptu "zapouzdření" nedali ani ránu. I když náznaky byly - všelijaké "friend" třídy apod. :)

Ale taknějak v tom vidím paralely... Pokud v "moderním, ochranou prošpikovaném světě" chci, aby mi soused vrátil vrtačku, co si ode mne půjčil, tak nepůjdu zazvonit a zavolat metodu "Sousede, vrať vrtačku", ale zavolám odborníka, který si sežene plán sousedovic domu, a tu vrtačku mi přinese! A bude to jeho jediná dovednost. Inu, ten krásný svět špikovaný reflexí a povinnostmi vše o sobě hlásit "nahoru". :)

[49] (David Grudl [openID] - WWW) 19.11.2008, 12:20:46 [X] [D]
[48] serializace má minimálně dvě stránky - vstup a výstup. Zatímco ta dekompozitní část, ten vstup, mi připadá nejvhodnější právě v rukou samotného objektu, výstup, který je spojen s volbou formátu a nástroje pro jeho generování, by už naopak neměl být věcí objektů. A teď babo raď.

[50] (Arthur Dent [openID] - Mail - WWW) 19.11.2008, 12:41:02 [X] [D]
[49] Baba povídá: Serializátor objektu dostane jako parametr delegát (ve světě PHP "callback"), kterému předává serializovaná data v dohodnutém meziformátu, a dotyčný delegát tato data uloží jak potřebuje (v XML, v JSON, v plain stringu, v PHP-serialized formátu apod.)

[51] (rarouš [openID] - Mail ) 19.11.2008, 12:52:21 [X] [D]
[48] V naprosté většině případů se bez reflexe obejdu, ale ve speciálních připadech - třeba jako je serializace - je nezbytná. K popisu toho, jak se má serializovat poslouží metadata (v C# atributy), které říkají co se má použít. Serializator pak už jen dostane objekt, ten očuchá a uloží v potřebném formátu.

Ad vrtačka: Ale to je zase jiná pohádka, ta je o sdílení prostředků a komunikačních protokolech. :)

[52] (David Grudl [openID] - WWW) 19.11.2008, 13:58:39 [X] [D]
[50] Meziformátem & delegátem pak mohou být třeba anotace zjistitelné přes reflection.

[53] (Radek Hulán - Mail - WWW) 19.11.2008, 14:07:18 [X] [D]
[46] gadgetů jsou tisíce, ale pokud máš český jazyk prohlížeče, Microsoft ti zobrazí jen české...

[54] (Borek - Mail - WWW) 19.11.2008, 15:57:29 [X] [D]
Předchozí debatě úplně nerozumím, přidání XML serializace do dictionary je jasným porušením Single Reponsibility principu, přičemž využití externího pomocníka princip zapouzdření nijak neporušuje (Dictionary má metodu GetObjectData).

Pro jednoduchý prográmek popsaný v článku zcela chápu, že není potřeba podobné "prkotiny" řešit a podědění od Dictionary se nabízelo, ale objektivně vzato to moc čisté řešení není. Proto mě v tomto kontextu překvapila otázka "Kdo jiný by měl serializovat objekt než on sám?"...

[55] (Arthur Dent [openID] - Mail - WWW) 19.11.2008, 16:47:21 [X] [D]
[54] Však říkám: Houpačka se přehoupla na druhou stranu, od extrému "objekt si dělá všechno sám a je to blackbox, je to dobré a bezpečné, když si to objekt udělá sám, tak je to lepší než kdyby tam někdo koukal" k "některé třídy smí koukat do jiných tříd, je to lepší než kdyby si to objekt měl dělat sám, dobré a bezpečné a". Netrápil bych se tím o moc víc než řečmi "mléko je zdravé - mléko je nezdravé", protože praxe je, jako vždycky, mnohem prozaičtější. To je ale všude. U databází taky: Třetí normální forma, vše jako stored procedure... a pak ejhle, v praxi to tak zcela nefunguje a je potřeba udělat trošku obchůzku jinudy...

A navíc - když si chci pocvičit dědění tříd a generování XML, tak si podědím Dictionary a přidám k němu generování XML, i kdyby čert na agilní koze jezdil! :)

[56] (Rene - Mail - WWW) 19.11.2008, 18:21:40 [X] [D]
Jednou z mých oblíbených činností je dekonstrukce zásady "objekty jsou černé skříňky, které se nestarají o své okolí a jsou oslňujícími kandidáty na - magické zaklínadlo - znovupoužitelnost". Mnoho autorů je neustále od sebe opisuje a přitom ani nejsou schopni ve svých knihách vysvětlit, jak se zbavit smížené soudržnosti rolí (opravdu má zákazník v tom nejtriviálnějším příkladu v sobě "přirozeně" a vždy obsahovat kolekci objednávek)? Jo to jsou lahůdky.

A co se týče odpovědnosti objektu a jen proto, aby se debata zase rozproudila - pokud byste Arture trval na tom, že neporušíte zapouzdření a nedovolíte sousedům lézt pod spodničku cudných objektů, co takhle využít "single responsibility" :) privátní třídu (která může být klidně v některém scénáři)dostupná okolí přes nějaké veřejné rozhraní. A privátní třída má samozřejmě přístup k potřebnému "kontextu". :)


BTW: Resharper je u malých projektů skvělý. U větších začíná být VS.NET neskutečně pomalé a podle mě Resharper způsobuje současné pády mého VS.NET 2008.

[57] (Rene - Mail - WWW) 19.11.2008, 18:23:40 [X] [D]
"jak se zbavit smížené soudržnosti" má být samozřejmě smíšené, omlouvám se.

[58] (Arthur Dent [openID] - Mail - WWW) 19.11.2008, 18:51:50 [X] [D]
[56] Asi tak o 30 komentářů výš jsem psal, že možných řešení je mnoho. Asi o 20 komentářů výš jsem psal, že si pamatuju základní poučky, které v roce 1996 psal (například) Virius a s nimiž futroval svůj výklad o C++, a ty zněly téměř skoro přesně obráceně. ;)

Asi o deset komentářů výš jsem psal, že se holt pohled na objekty mění, chvíli všichni přísahají na zapouzdření a dědění, pak na návrhové vzory a reflexi, a že mi to je v zásadě jedno, jen mě to zaujalo. Tenký klient, tlustý klient...

Kam byste chtěl tedy diskusi proudit... ehm, rozpruzovat... rozproudit?! ;)

[59] (David Grudl [openID] - WWW) 19.11.2008, 22:38:13 [X] [D]
Borkovi možná skromnost (jedna z nehorších špatných vlastností) nedovolila, tak pastnu odkaz za něj http://www.borber.com...y-principle

[60] (Arthur Dent [openID] - Mail - WWW) 19.11.2008, 23:52:28 [X] [D]
[59] Nikoli skromnost, ale antispam filter na Bloguje mu nedovolily, alespoň nakolik jsem pochopil... Snad pošle tetě Hekko svoji IP, ať na to koukne okem adminským.

[61] (Borek - Mail - WWW) 20.11.2008, 11:49:27 [X] [D]
Skromnost s tím skutečně neměla co dělat :)

[62] (Michal - Mail - WWW) 20.11.2008, 14:45:29 [X] [D]
[47] ano, o tom to je. u 100 programatoru najdes 105 nazoru. Asi jako u pravniku.
A kupodivu - z tech 100 nazoru jich tak 40 bude spravnych.

Zalezi na kontextu, pouziti a osobnich preferencich. a to vse je individualni.

Pravo statickych trid (metod) "na zivot" je zrejmy, a nejen z hlediska "prehlednosti, syntax sugar", ale i z hlediska vykonu (coz bys zrovna ty se zkusenostmi z Atlasu a praci na soucasnem projektu mel vedet ;-) )

PS: nechapu, jak ti staticka metoda znemoznuje jeji otestovani unit testy. To mi rozhodne unika

[63] (Zdenek - Mail ) 04.12.2008, 22:56:44 [X] [D]
Dobrý den,stáhl jsem si vámi vytvořený gadget ČRO a velice se mi líbí.Protože jsem pouze starý penzista a jenom uživatel PC ,dovoluji se vás zeptat,zda by bylo možné do tohoto progranu přidat stanice Blaník a CountryRadio - já to ovšem neumím a tak,kdyby to bylo možné,popište mi přesně,jak to mám udělat - potřebuji to z.zv.po lopatě.
Předem vám děkuji za ochotu a případnou odpověď - myslím,že by to využilo více lidí a nejenom já.
Děkuji ještě jednou a přeji hezký den Zdenek

[64] (Arthur Dent [openID] - Mail - WWW) 05.12.2008, 00:59:36 [X] [D]
[63] Radkova verze to umí, viz komentář [34], pro jistotu ještě zopakuju odkaz: http://myego.cz...eska.radia.gadget