Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Téměř nový rarouš.weblog

10.42 - 23. června 2008 | Moje práce

Poslední týden jsem trávil úpravami tohoto blogu. Měl jsem už nějaký nástřel grafiky už několik dní před tím, dokonce rozběhaný na úvodní straně blogu. :) Jenže abych to mohl posunout dál i do článků, musel jsem šáhnout do šablon blogu. Jenže prezentační vrstva, byla napsaná tak nepoužitelně a každá změna vyžadovala dost práce.

Měl jsem před sebou dvě možnosti. Nechat to být a počkat až napíšu nový systém, nebo upravit stávající. Jenže čekat sám na sebe, až něco napíšu, to bych se taky nemusel dočkat… ;) Nakonec jsem napsal zbrusu novou prezentační vrstvu nad starým systémem.

Rozhodl jsem se pokračovat v započatém stylu, který jsem zvolil pro svoji homepage, tedy návrhový vzor MVP pro prezentační část a Repository pro datovou. Využil a trochu rozšířil některé entity modelu o další vlastnosti a přidal některé nové. Pro výpis článků a komentářů na stránce jsem napsal serverové prvky založené na Generickém repeateru. Pak jsem se dostal k formuláři pro přidávání komentářů. Aktuální WebForms implementace se mi moc nelíbila a tak jsem se rozhodl oprášit NForms a povolat je do služby.

Musel jsem odladit několik bugů, protože tohle bylo poprvé, co jsem je použil. :) Ale nakonec se z toho vyklubal celkem použitelný a elegantní kus softwaru. Proč elegantní? Líbí se mi definování validačních pravidel (sice zatím pouze serverových), znovupoužitelnost kódu apod.

NForms v akci

Když jsem vymýšlel, jak vlastně budu nově komentáře zpracovávat, rozhodl jsem se pro handler, který bude obsluhovat požadavky na akce a zavolá správnou třídu, která má požadavek zpracovat – v tomto případě ukládač komentářů. (Tento model jsem zvolil protože, každá třída by měla dělat pouze jednu věc, proto komentáře nezpracovává ta samá, co prezentuje články.) Jenže teď jsem stál před problémem, že budu muset definovat ten samý formulář na dvou místech. Naštěstí u NForms to není třeba.

Podědil jsem novou třídu CommentForm z formuláře NForms. V ní jsem nadefinoval, jaká políčka a s jakými pravidly se mají vytvořit. Kód vypadá nějak tak:

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using Rarous.NForms;
using Rarous.NForms.Validation;

namespace Rarous.Net.Components {
  public class CommentsForm : Form {
    public const string ArticleUrl = "comment_article_url";
    public const string ArticleId = "comment_article_id";
    public const string Validity = "comment_validity";
    public const string Text = "comment_text";
    public const string UserName = "comment_user_name";
    public const string UserEmail = "comment_user_email";
    public const string UserWeb = "comment_user_web";
    public const string UserAnswer = "comment_user_answer";
    public const string Submit = "comment_submit";

    public CommentsForm()
      :this(null) {
    }

    public CommentsForm(NameValueCollection data)
      : this(data, null) {
    }

    public CommentsForm(NameValueCollection data, List<string> messages)
      : base(data, messages) {
      CreateForm();
      BindData();
    }

    private void CreateForm() {
      AddHidden(ArticleUrl);
      AddHidden(ArticleId);
      AddHidden(Validity);

      AddTextArea(Text, "Text komentáře:", 10, 55).
        Required("Text příspěvku je povinný.");
      AddText(UserName, "Jméno:").
        Required("Jméno je povinné.");
      AddText(UserEmail, "E-mail:").
        SetEmptyValue("@");
      AddText(UserWeb, "Web:").
        SetEmptyValue("http://");

      AddText(UserAnswer, "Odpověď je pivo:").
        AddRule("Zadejte pivo.", s => String.Compare("pivo", s, true) == 0);

      AddSubmit(Submit, "Přidat komentář");
    }
  }
}

Tento formulář pak použivám ve View i handleru. V handleru se vytváří s daty poslanými přes POST, která se pak validují a dále zpracovávají. Líbí se mi, že data se předávají jako NameValueCollection, díky tomu se dá bez problému načítat z Request.Forms, Request.QueryString, nebo z kolekce Cookies.Values. Těmi můžu data předvyplňovat, nebo je nechat validovat a tak. V budoucnu by mohlo přibýt i inteligentní vytváření objektů…

Další featury

  1. U komentářů jsem oprášil Gravatary, které jsem tu už kdysi míval. Použil jsem implementaci z dotnetKicks, kde se používá lokální cachování.
  2. Bezpečnostní otázka se vyplňuje JavaScriptem, takže už vás nebude otravovat.
  3. Po letech jsem přidal stránkování v článcích. Jak na hlavní stránce blogu, tak v rubrikách.
  4. Zvýrazňovač syntaxe teď funguje jen napůl, protože už přestal stačit mým potřebám. Čekám na uvolnění zvýrazňavoče z Codeplexu, který by měl být o dost lepší.

Jsou to takové drobnosti, ale mám z nich radost, protože jsem je dlouho dobu odbýval.

Závěrem

Ještě mi zbývá pár věcí dopsat, aktualizovat odkazy v článcích na nové URL, ale už jsou to spíš drobnosti (doufám). Ještě bych chtěl závěrem poděkovat Davidovi a Honzovi, protože u nich jsem se dost inspiroval. Taky děkuju Exíkovi za hodnotné připomínky, Jerrymu za hosting a naší zahradě za příjemné pracovní prostředí atd.

Autor: Aleš Roubíček | 7x komentováno | del.icio.us | Linkuj!

Gryphoon 1.82 je venku

17.04 - 2. června 2008 | Moje práce

Kolega Ondra uvolnil systém Gryphoon, který pohání tento a mnoho dalších webů včetně nějakých vylepšení. Najdete ho ke stažení včetně návodu k nasazení na stránkách projektu.

Je to záležitost na kterou jsem nesahal takřka 3 roky a taky je to systém, na kterým jsem se učil. Spousta věcí je pojmenována česky, žádný komentáře v kódu a tak. Fakt to není dobrý ke studování, ale funguje to ;) Vím o spoustě míst, které by se daly snadno rozšířit, vylepšit, doplnit. Ani by to nezabralo moc času, ale z pricipu se mi nechce.

Měl jsem pak napsanou velkou část verze dvě, ale nikdy jsem ji nedotáhl do konce. Nelíbilo se mi, že jsem použil typované DataSety a nikdy jsem pro něj nevytvořil administraci. Dvojka je tedy mrtvá. V plánu je trojka postavená na 3.5 frameworku, ASP.NET MVC a ActiveRecord. Ale u tý jsem ve fázi pokusů a designování architektury.

Enjoy

Autor: Aleš Roubíček | 3x komentováno | del.icio.us | Linkuj!

Změny na stránkách

19.28 - 19. května 2008 | Moje práce

První viditelnou změnou je úprava RSS exportu, odedneška se budou v hlavním feedu zobrazovat celé články. Pokud chcete v mém feedu i nadále pouze perexy, použijte adresu http://feeds.feedburner.com/rarous/weblog. Je to experiment, ve kterém si chci ověřit, jaký vliv to bude mít na návštěvnost – čtenost článků. Druhým důvodem je Technorati – doufám, že tak začne indexovat tagy.

V rámci optimalizace výkonu homepage jsem všechny agregované feedy hodil do FeedBurneru, který jim dokáže nastavit cachovací hlavičky a hlavně ETag, kterej např. google nikam nedává. Navíc má mnohem kratší odezvy.

Teď mám na hlavní stránce celkem tři úrovně cachování.

  1. Veřejné. Stránka má nastavené cahování u klienta a po cestě na dvě minuty – její rychlejší aktualizaci nečekám a je to spíš ochrana proti zběsilému refreshování.
  2. Output cache na serveru. Využívám cachovacího mechanismu ASP.NET a vyredrovaná stránka se na serveru cachuje 5 minut. To má výhodu v tom, že se posílá odpověď 304, když se obsah nezměnil.
  3. Cachování agregovaných dat. Když načtu feed, uložím si ho pod jeho ETagem do cache na 45 minut. Při dalším dotazu se pošle požadavek HEAD a stáhnou se jen hlavičky. Pokud se změnil ETag, tak ho v cache nenajdu a musím data načíst GETem.

Myslím, že teď je to celkem účinné, ale stejně ještě přijde časem jedna změna, kdy se o načítání feedů nebude starat Controller, ale na pozadí poběží task, který bude agregovat podobně jako služba Weblogy.cz.

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!

Nový rarouš.net

12.40 - 17. února 2008 | Moje práce

Právě jsem spustil první beta verzi homepage rarouš.net. Po letech jsem se vrátil k homepagi oddělené od blogu, když ne tak úplně. Nová verze by měla v krátkosti informovat o mně. Je na ní kontakt, poslední články z blogu, poslední alba na picase, poslední zápich z twittru, co zrovna poslouchám a co mě zaujalo ve čtečce.

Všechny tyto informace jsou agregované a k jejich načítání používám nové třídy z .net frameworku 3.5 (LINQ to XML a Syndication services). Aby nedocházelo k přetěžování, tak jsou data cachována na 5min.

Zajímavé je, že to málo mi zabralo celé tři dny práce – vymyšlení konceptu, návrh grafiky, nakódování šablony a programování. Jenže zdaleka ještě nejsem hotov. :) Ještě mi zbývá přidat hledání, udělat celou patičku a dovymyslet způsob agregování muziky z raroušmusic­.com.

No ještě je toho dost, ale teď je načase nejakej relax…

Update

Tak patička je snad hotová.

Autor: Aleš Roubíček | 2x komentováno | del.icio.us | Linkuj!

Pozor změna feedu

07.28 - 22. prosince 2007 | Moje práce

Protože chystám, rozsáhlé změny ve struktuře webu a nemůžu zaručit funkčnost všech URL na RSSka, změnte si prosím URL na http://feeds.feedburner.com/rarous-weblog, tato bude fungovat vždy. Děkuji za pochopení.

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!

Přednáška o MSBuild

17.57 - 14. listopadu 2006 | Moje práce

Minulý týden jsem měl malou přednášku pro své kolegy, která si kladla za cíl proniknout do tajů MSBuildu, aspoň trošku. Malinko, prostě vědět o čem je řeč :)

Slíbil jsem, že dám slidy k dispozici na mým blogu, teda tady, tak jo. Přikládám prezentaci. Možná taky ještě jeden spot věnuji podrobnějšímu výkladu, ale to by se mi muselo hodně chtít :)

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!

Školení OOP, UML a návrhových vzorů

21.10 - 5. května 2006 | Moje práce

Poslední tři dny jsem se účastnil školení OOP, UML a návrhových vzorů, které pořádá René Stein. Na školení jsem se dostal čirou náhodou a dověděl jsem se o tom až den před zahájením – můj kolega Filip se nechal zapsat právě na tento kurz, ale vzhledem k tomu, že zrovna dokončuje důležitý projekt, nemohl se zúčastnit. Protože již byl kurz zaplacený, byl jsem nakonec vyslán já – tímto děkuji ;)

Začnu nejdříve tím, co se mi na kurzu nelíbilo: nelíbilo se mi, že pro tři učebny je pouze jedna toaleta v podobě jedné mísy. Tím výčet mé nespokojenosti končí :)

René se ze mne snažil vypáčit nějaký feedback, ale záměrně jsem mlžil a nechal jsem si ho až na tento zápisek, který píšu po shlédnutí kompletní sady přednášek. Školení pro mě bylo přínosem, ať už proto, že jsem se setkal se zajímavými lidmi z oboru nebo proto, že jsem poznal příjemnou pizzerii, která leží jen pár metrů od míst, která jsme skoro denně navštěvoval několik let (2,5 roku FELace na katedře počítačů :D). Samozřejmě, že největším přínosem pro mě byl obsah přednášek, kdy se René snaží v prvním dni projet OOP s návazností na UML, zbořit některé mýty – to já rád – a srovnat znalosti posluchačů na úroveň, se kterou budou schopni vstřebávat informace prezentované v následujících dnech. Musím říct, že je to pěkná nalejvárna a to, co jiní vykládají celé semestry, René zvládne za tři dny a má to větší efektivnost. Výhodou tohoto kurzu je spousta praktických ukázek a výměna zkušeností z praxe lektora, tak účastníků kurzu.

Vzhledem k tomu, že je školení velice přínosné, musím ho doporučit všem, kdož mají zájem navrhovat a psát kvalitní objektové aplikace. René taky chystá návazný kurz, který bude zaměřen více na praktickou stránku věci s využitím znalostí právě z tohoto kurzu. Nevím, jestli neprozradím nějaké tajemství, ale můžeme se těšit i na knihu věnovanou této problematice. Díky René.

Autor: Aleš Roubíček | 1x komentováno | del.icio.us | Linkuj!

Osečenské stránky

08.05 - 3. února 2006 | Moje práce

Během včerejška jsem pověsil na web novou verzi stránek obce Osečná. Kromě změny vzhledu došlo ke kompletní změně struktury a technologie. Nyní běží stránky z 90% na redakčním systému Gryphoon Obce a 100% na ASP.NET 2.0. Ještě mě čeká dodělávka několika modulů, ale to až po zkouškách…

Autor: Aleš Roubíček | 2x komentováno | del.icio.us | Linkuj!

Další omluva za výpadek

21.24 - 23. října 2005 | Moje práce

Chtěl bych se všem čtenářům omluvit za výpade těchto stránek. Na vině bylo nekvalitní FTP připojení a podivné chování IIS, kdy se mi nepovedlo uploadovat aktualizovanou verzi assembly na server a IIS mi pak nechtělo povolit tu assembly smazat nebo přepsat. Když admin tento problém vyřešil tak se mi to povedlo znovu :) Bohužel zrovna nefungovalo forum, kde bych problém nahlásil, proto takové zdržení…

V současné době připravujeme přechod na profi hosting, kde bude lepší technická podpora. Taky jsem zakoupil novou doménu a budu muset znovu budovat svoje pozice ve vyhledávačích :)

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!

Poslední dobou

21.06 - 24. dubna 2005 | Moje práce

Poslední dobou jsem udělal několik webů. Po zprovoznění Gigi D'Agostino Czech fan pages jsem udělal jednoduché stránky pro náš projekt v předmětu Softwarové inženýrství. Minulý víkend jsem udělal kompletní návrh webu pro Inkasní družstvo a teď čekám, jak se k tomu vyjádří. Dále jsme s mikem konečně zprovoznily jeho stránky, takže vás tímto zvu na prohlídku…

Microsoft konečně uvolnil druhou betaverzi Visual Studia 2005 a já se pomalu pouštím do rekonstrukce těchto stránek. Prvním krokem bylo převedení frontendu blogu do Masteru. Taky jsem přidal do pravého sloupce výpis mikových článků z jeho webu. Je to generovaný z RSS pomocí XSLT…

Po dlouhé době vyšla nová verze Opery, prvního prohlížeče s podporou SVG – vektorové grafiky zapisované v XML. Opera dělá promo akci, pokud přivedu 250 unikátních návštěvníků na jejich stránky, dostanu registraci zdarma, tak prosím klikněte na banner v horní části stránky, naoplátku pro vás taky něco udělám. Dík, je to jenom jedno kliknutí…

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!