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

Vývojář webových aplikací ASP.NET

14.06 - 12. ledna 2009 | Moje práce

Požadujeme:

  • Znalost tvorby webových aplikací ASP.NET v jazyce C# – min. 2 roky praxe, zkušenosti s vývojem aplikací bez vestavěných ASP.NET controls
  • Základní znalost MS SQL
  • SŠ/VŠ vzdělání (technického zaměření)
  • Znalost anglického jazyka na úrovni čtení technické dokumentace
  • Ochotu učit se MS technologie
  • Zkušenosti s vývojem CMS řešení výhodou

Nabízíme:

  • Spolupráci a podíl při návrhu a vývoji produktů
  • Perspektivní a zajímavou práci v dynamickém, neformálním přátelském prostředí
  • Flexibilní pracovní dobu
  • Práci v menším týmu

V případě zájmu mě kontaktujte na e-mail: veronika@trixam.cz

Související

Autor: Veronika Vajdiaková | Zatím bez komentáře | Delicious | FriendFeed | Facebook | Linkuj!

Agregace a sdílení

15.08 - 2. ledna 2009 | Moje práce

Vrámci zdokonalování tohoto blogu jsem do nového roku přidal několik usnadnění jak sdílet a agregovat moje články.

Agregace

Box s možností přidat si tyhle stránky do své oblíbené čtečky najdete na konci stránky. Nejprve jsem přidal (vrátil) pár odkazů na přidání RSSka do Googlu, Windows Live a na Seznam.cz, což jsou nejpoužívanější portály mých návštěvníků. Pak jsem přidal možnost zaregistravat si můj FriendFeed, kde můžete sledovat nejen moje blogové příspěvky, ale i štěbetání a další aktivity v rámci sociální sítě. A když už jsem byl v tom, tak jsem ještě prolezl logy a podíval se z jakých agregátorů sem ještě lidi chodí a vyšlo mi z toho, že ještě musím přidat Bloglines, Netvibes a Newsgator, abych svým čtenářům registraci do jejich čtečky usnadnil. Tak jsou tam…

Sdílení

U každého článku jsem měl v zápatí odkaz na sdílení v Delicious a v českém Linkuj! a když už jsem byl u toho FriendFeedu tak jsem přidal možnost na něm sdílet i samotné články. Jenže hodně lidí používá hlavně Facebook, tak proč nejít „stádu“ naproti? :) Pak je tu ještě Digg a českej Jagg. Tak doufám, že teď budete mít, drazí čtenáři, snažší sdílet mé bombastické články se svými přáteli.

Jaké služby používáte k agregaci a sdílení vy?

Autor: Aleš Roubíček | 1x komentováno | Delicious | FriendFeed | Facebook | Linkuj!

Lehký facelift

17.04 - 7. prosince 2008 | Moje práce

Dnes jsem zapracoval něktreté drobné změny designu, které jsem už delší dobu připravoval. Hlavním cílem změny byla patička webu, protože na ní jsem se při původním návrhu moc nesoustředil.

Nyní by měla být trochu uspořádanější. Styl jsem tak trochu opajcnul ze slajdů PDC 2008. Homepage taky doznala lehké přeurovnání do mřížky. Další změnou jsou fonty. V boxu s agregací blogu, by měl být styl více podobný tomu, co je na blogu. Trochu se změnil i hledací formulář, který teď kopíruje aktuální styl Live Search, který je pro zdejší hledání použit.

Změny to jsou jen kosmetické, ale i tak zabraly dost času. Každopádně to není ještě vše. Na blogu brzo přibude patičkový box pro agregaci. Další EVO by pak měla mít jeden stylopis pro celý web. Že by dárek k pátým narozeninám?

Autor: Aleš Roubíček | 2x komentováno | Delicious | FriendFeed | Facebook | Linkuj!

Vývojová infrastruktura

09.40 - 14. září 2008 | Moje práce

Na začátku vývoje každého produktu bychom si měli připravit vhodnou infrastrukturu. Základem je verzovací systém – pokud pracujete sám, je značnou výhodou, v teamu nezbytností. Další důležitou součásti je systém pro vedení úkolů a bugů. Dále je vhodná wiki a taky nějaký buildserver.

Proč je to tak důležité?

Verzovací systém je vhodný na jakýkoli projekt, nemusí to nutně být ani projekt softwarový – my ho třeba s Borkem používáme na přípravu přednášky. Je to ochrana před ztrátou dat, občas pomůže se podívat do historie, dnešní systémy umějí mergovat změny z více zdrojů a jsou snadno zařaditelné do automatizovaného procesu.

Úkolník je dobrý z mnoha důvodů, vidíte, co máte dělat, jakou to má prioritu, kolik už máte hotovo. Slouží i jako váš výkaz, že se jen neflákáte. ;)

Build server je už jen třešničkou na dortu, která za vás dělá rutinu – špinavou a nudnou práci.

Jak to bylo v Atlase

Když jsem nastupoval do vývoje Atlas.cz, fungoval tam jen Visual SourceSafe, stagovalo se přes FTP. Vše bylo dost závislé na správném připravení verze do produkčního prostředí, to připravoval člověk a snadno mohlo dojít k chybě. :) Za nějaký čas jsme se rozhodovali jak to celé zautomatizovat a usnadnit. Nakonec jsme přešli na PureCM, Atlas.Build a Atlas.Autowebsite.

PureCM je verzovací systém s integrovaným úkolníkem a s možností skriptování v pythonu a dotnetím API. Má systém repository, které mají streamy a ty lze vzájemně mergovat v rámci hierarchie. Také k nim lze dopsat tzv. Custom action. Ta u nás nebyla nic jiného než spoušť události. Služba Atlas.Build tuto událost zachytila, provedla checkout, pročistila projekt a podle jednoduchého build skriptu (zjednodušený NAnt) připravila verzi buďto na dev servery nebo na staging, kterou pak nahrála na příslušný server pod danou verzí (názvem streamu).

Vývojář pak zadal do prohlížeče adresu, třeba http://katalog.3.6.0.dev2.atlas.cz, kde na něj čekal Autowebsite, který se zeptal jakou verzi frameworku použít a pak v IIS metabázi založil nový web.

Bylo za tím spousta magie a bylo celkem jednoduché a efektní a taky ušité na míru našim potřebám.

Jak to máme v Twaregu

Když jsme přišli do Twaregu, bylo opět potřeba připravit infrastrukturu. Po týdnu zkoušení a rozhodování jsme nakonec zvolili kombinaci Subversion (SVN), Trac, TeamCity.

SVN je celkem osvědčený verzovací sytém, je zdarma a multiplatformní, existuje pro něj dostatek nástrojů, včetně integrace do Visual Studia a je podporován všemi testovanými buildservery.

Trac je wiki a systém pro vedení úkolů s pěkným webovým prohlížečem repository. S SVN je spjat pupeční šňůrou a dá se dobře automatizovat tvorba nových projektů. Navíc je to OpenSource a je zdarma.

TeamCity je skvělý buildserver podporující Javu i dotnet (nejen tyto), umí se připojit do SVN a zvládá i vzdálené předtestované commity, což je killer feature. Pokud se dokážete smířit s omezením na 3 build agenty, 20 uživatelů a 20 konfigurací, pak je zdarma. Má pěknou integraci do Visual Studia a má API pro rozšiřování.

První měsíc v Twaregu jsem (nejen) připravoval infrastrukturu. Napsal jsem službu, která zakládá nové repository, připraví do nich základní adresářovou strukturu a založí projekt v tracku. Automatizované zakládání pro TeamCity zatím není a ještě nevím, jestli je potřeba. Jednotlivé konfigurace je lepší projít ručně a nastavit dle požadavků daného projektu. Na projektu většinou máme dvě konfigurace, jednu, která je pro vzdálený předtestovaný commit do vývojového branche a druhou, která se spouští při commitu do trunku. Provede se kompletní build, spustí se testy, pokud je vše ok, vytvoří se dokumentace a nahraje na intranet, provede se deploy knihoven do společného úložiště a vytvoří se weby, pokud nějaké v projektu jsou.

Co se všechno má udělat je řízeno MSBuild skriptem, pro který jsem připravil několik tasků. Upravil jsem xUnit.net task, aby se posílaly zprávy do TeamCity a přibalily výsledky testů do sumáře o buildu.

Je fakt, že tady máme build skripty mnohem ukecanější něž v Atlasu, ale jsou mnohem flexibilnější – vzhledem k heterogennímu prostředí je to potřeba.

Závěr

Investujete-li na začátku nějaký čas na vybudování infrastruktury, jistě se vám to vrátí později v podobě nevytrhaných vlasů a neokousaných nehtů, když někdo někomu omylem přemázne celodenní práci nebo vydeployuje nefunkční verzi. Nemít verzovací systém je vyložený hazard, nemít úkolník je přinejmenším nepohodlné a bez build serveru se dá žít…

A jakou infrastrukturu/sys­tém používáte vy?

Autor: Aleš Roubíček | 21x komentováno | Delicious | FriendFeed | Facebook | Linkuj!

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 | Delicious | FriendFeed | Facebook | 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 | Delicious | FriendFeed | Facebook | 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 | Delicious | FriendFeed | Facebook | 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 | Delicious | FriendFeed | Facebook | 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 | Delicious | FriendFeed | Facebook | 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 | Delicious | FriendFeed | Facebook | Linkuj!