čtvrtek 22. prosince 2011

Desatero uživatele Twitteru

Twitter je tu už více než pět let. Je na čase, aby někdo stanovil pravidla pro chování uživatelů :-)

  1. Nebudeš využívat jiné sociální sítě. Drž se Twitteru a budeš svobodný. Odprosti se od užívání Facebooku a Google+, které Tě svádí z cesty a narušují Tvé schopnosti stručného vyjadřování.

  2. Nebudeš posílat dotazy na nové tweety nadarmo. Nesmíš mě neustálým ručním dotazováním donucovat, abych Ti vracel nové tweety každých několik vteřin. Dost nám to zatěžuje systém. Nechej to na Tvém klientovi, který má interval občerstvování určitě nastavený rozumně.

  3. Budeš zachovávat každý den několik minut odpočinku. Během této doby se na Twitter ani nepodíváš. Naužírej se strachem, že zmeškáš nějaký zajímavý tweet, můžeš se kdykoliv podívat do historie.

  4. Budeš ctít zakladatele Twitteru i jeho mateřskou firmu Ordeo Inc. Budeš sledovat uživatele @Jack, @Biz, @Noah, @Crystal, @Jeremy, @Adam, @TonyStubblebine, @Ev, @Dom, @Rabble, @RayReadyRay, @Florian, @TimRoberts a @Blaine, protože právě oni byli na počátku vzniku našeho Twitteru.

  5. Nebudeš provádět Unfollow. Nebudeš přestávat sledovat uživatele, jenom proto, že je to Tvůj konkurent a protože nechceš, aby Tě předstihl v počtu followerů.

  6. Nesmilníš a nevložíš příspěvek do jiné mikroblogovací služby. Nemáš zapotřebí, aby ses karikaturami nezralých a příživnických mikroblogovacích služeb připravil o radost ze skutečného Twitteru. Drž se ho a naučíš se psát zajímavě a trefně a ocení Tě mnoho followerů.

  7. Neukradneš obsah cizího tweetu. Nesnaž se zalíbit tím, že zajímavý tweet označíš za svůj. Používej raději Retweet. Co získáš na oblíbenosti a počtu followerů, to ztratíš na klidné mysli.

  8. Nebudeš vystupovat pod falešnou identitou. Nesnaž se být zajímavý tím, že budeš vystupovat za známou osobnost. Twitter Tě odhalí a zablokuje Tvůj účet. Snižuješ důvěryhodnost celé sítě a sám sebe.

  9. Nebudeš žádostivě dychtit po followerech toho, kdo Tě sleduje. Nevnucuj se a nevyžaduj laciné retweety, jenom aby jsi získal rychlé followery. Svým chováním můžeš způsobit rozvrat a Unfollow dotyčného. Buď trpělivý a followeři si cestu k Tobě určitě najdou.

  10. Nebudeš závistivě projíždět seznamy followerů top uživatelů a chamtivě vyhlížet své nové followery. Neužírej se tím, že máš málo followerů. Někomu to jde líp a stačí mu pouze jeho jméno. Někdo to má těžší. Drž se své vize a kvalitním obsahem si své followery určitě získáš.

středa 21. prosince 2011

Vlastní úlohy pro MSBuild

Automatizujte. Váš čas je drahý. Nedělejte ručně činnosti, které za Vás mohou udělat stroje během několika okamžiků a s minimální chybovostí.

Součástí Visual Studia je buildovací systém MSBuild. MSBuild pracuje ve Visual Studiu na pozadí při kompilaci projektů do spustitelného kódu. MSBuild je také využíván při týmovém vývoji na speciálních buildovacích serverech. Ať už provádíte build produkční verze aplikace, build testovací verze, build kontinuální integrace nebo úplně jinou automatizovanou úlohu, může se stát, že vyvstane specifická potřeba, kterou standardní úlohy MSBuildu nezvládnou. Pak se přiblíží okamžik, kdy budete potřebovat napsat úlohu vlastní. Určitě se toho nebojte. Odměnou Vám bude zrychlení práce a uznání ostatních členů vývojového týmu ;-)

Vytvoření knihovny s úlohou

Vytvoříme projekt typu Class Library. V našem příkladu založíme projekt Firma.Nastroje.Build.Ulohy.

Do projektu přidáme reference na frameworkové assembly Microsoft.Build.Framework a Microsoft.Build.Utilities.v4.0 (pro .NET FW 4.0).

Založíme třídu úlohy. Třída musí implementovat rozhraní Microsoft.Build.Utilities.ITask. Je vhodné podědit abstraktní třídu Microsoft.Build.Utilities.Task. Překryjeme metodu Execute(), která je vyvolána MSBuildem během provádění. Provádění úlohy je konfigurovatelné přes nastavení veřejných vlastností třídy. Nezapomeňte projekt zkompilovat ;-)

using System;
 
namespace Firma.Nastroje.Build.Ulohy
{
    /// <summary>
    /// Implementace mojí úlohy sestavení.
    /// </summary>
    public class MojeUloha : Microsoft.Build.Utilities.Task
    {
        /// <summary>
        /// Povinný parametr úlohy.
        /// </summary>
        [Microsoft.Build.Framework.Required]
        public string PovinnyParametrUlohy { getset; }
 
        /// <summary>
        /// Nepovinný parametr úlohy.
        /// </summary>
        public string NepovinnyParametrUlohy { getset; }
 
        /// <summary>
        /// Provádění úlohy.
        /// </summary>
        /// <returns>true, pokud je provádění úspěšné.</returns>
        public override bool Execute()
        {
            throw new NotImplementedException();
        }
    }
}

Nasazení knihovny na buildovací počítač

Všechny rozšiřující knihovny, které by měl znát MSBuild, umístěte na buildovacím počítači do adresáře definovaného v proměnné $(MSBuildExtensionsPath). Obvykle se jedná o "c:\Program Files (x86)\MSBuild". Doporučuji knihovnu zařadit ještě do podadresáře podle firmy nebo projektu. Ukázková knihovna bude mít v našem příkladě absolutní cestu "c:\Program Files (x86)\MSBuild\Firma\Firma.Nastroje.Build.Ulohy.dll".

Použití v buildovacím projektu

Nejprve musíme zadeklarovat naši úlohu na začátku řídícího projektového souboru (.proj, .csproj) ...

<UsingTask 
   TaskName="MojeUloha" 
   AssemblyFile="$(MSBuildExtensionsPath)\Firma\Firma.Nastroje.Build.Ulohy.dll"/>

... a poté zadefinovat konkrétní použití buildovací úlohy:

<MojeUloha
   PovinnyParametr="HodnotaPovinnehoParametru"
   NepovinnyParametr="HodnotaNepovinnehoParametru"
   />

Poznámky

  • Pro účely ladění třídy Vaší úlohy si vytvořte jednotkové testy, viz. TDD.
  • Framework Vaší knihovny musí být na buildovacím počítači podporován. Úlohy v jednom buildovacím projektu mohou být napsány pro různé frameworky.
  • Úlohy mohou poskytovat i návratové argumenty.
  • Argumenty úloh mohou být kolekce hodnot, např. kolekce názvů souborů.
  • Alternativou k vlastním úlohám pro MSBuild je vytvoření spustitelné exe aplikace, které předáte potřebné parametry přes příkazovou řádku.

sobota 3. prosince 2011

Pravidla pro pojmenování objektů v C# - část 2

  1. Úvod, jazyk, názvy tříd
  2. Názvy vlastností (properties), polí (fields) a proměnných (variables)
  3. Názvy metod a argumentů
  4. Další pravidla, názvy balíčků, testovací třídy

V předchozím díle jsme se podívali na několik základních pravidel pro názvosloví tříd. Neméně důležité je logicky a významově pojmenovat její vlastnosti, pole a proměnné uvnitř metod.

Názvy vlastností, polí a proměnných

Chtělo by se říci, že názvy veřejných vlastností jsou důležitější než názvy neveřejných vlastností, polí a proměnných. Není to však úplně pravda. Veřejné rozhraní třídy je samozřejmě důležité pro klienty třídy. Správný název urychlí pochopení a ušetří přepínání mezi kódem a dokumentací. Neveřejné názvy jsou však významné pro znovupoužitelnost, čistotu kódu, pochopení významu a efektivní navigaci v kódu.

Na co bychom si tedy měli dát pozor?

  1. Pro názvy vlastností (properties) se používá PascalCase, např. RodneCislo.

  2. Pro názvy polí (fields) se používá camelCase, např. rodneCislo.

  3. Pro názvy konstantních polí se používá PascalCase, např.

    private const int PocetMesicu = 12;

  4. Pro názvy proměnných (variables) se používá camelCase, např. polozky.

  5. Pokud vlastnost a pole (a proměnná) odpovídají stejnému logickému významu, měli by si jejich názvy odpovídat. Např.

    private string rodneCislo;
    
    public string RodneCislo
    {
        get
        {
            return rodneCislo;
        }
    
        private set
        {
            rodneCislo = value;
        }
    }
    

  6. Pokud je vlastnost autoimplementovatelná, tzn. getter je jednoduché vrácení hodnoty pole a setter je jednoduché nastavení hodnoty pole, je vhodné použít zkrácený a přehlednější zápis:

    public string RodneCislo { get; private set; }
    
    Výhodou tohoto zápisu je mimo jiné i jednodušší refaktorizace názvu. Nemusíte refaktorovat zvlášť název vlastnosti a pole.

  7. Pravidla uváděná dále jsou společná pro názvy vlastností, polí i proměnných.

  8. Vyhněte se opakování názvu třídy v názvech jejích vlastností. Např. třída Objednavka by neměla mít vlastnost PopisObjednavky nebo ObjednavkaId. Použijte "holý" název Popis a Id.

  9. V případě odkazu na Id jiné třídy ("primární klíč"), bude název odkazované třídy předcházet názvu vlastnosti Id:

    public class Osoba
    {
        public int Id { get; set; }
    }
    
    public class Uzivatel
    {
        public int OsobaId { get; set; }
    
        public String Jmeno { get; set; }
    }
    
    V tomto případě by bylo zřejmě vhodnější, aby třída Uzivatel nabízela přístup k objektu typu Osoba
    public Osoba Osoba
    

  10. Použijte název třídy v názvech vlastností jiných tříd, které na ni odkazují nebo vlastnost odpovídá vlastnosti odkazované třídy. Všimněte si vlastnosti Kod u třídy Mena a vlastnosti KodMeny u třídy Objednavka. Obě mají v systému stejný význam.

    public class Mena 
    {
        public string Kod { get; set; }
        public string Nazev { get; set; }
    }
    
    public class Objednavka 
    {
        public string KodMeny { get; set; }
        public decimal Castka { get; set; }
    }
    

  11. Pokud je to vhodné, použijte upřesňující významovou příponu. Např. CastkaVMeneDokladu, DobaTrvaniVMilisekundach, DenVTydnu.

  12. Pro booleovské vlastnosti použijte vhodnou předponu, např. JePlatna, MaNarokNaOdmenu.

  13. U zkratek ponechejte pouze první písmeno velké, např. Html, Id, Ico, KategorieDph.

  14. Nepoužívejte v názvech datové typy. Místo PolozkaObjednavkyList použijte PolozkyObjednavky, místo VystaveniDate použijte DatumVystaveni.

  15. Pokud používáte víceslovné názvy, měly by být přiměřeně dlouhé a srozumitelné. Snažte se vyjádřit stručně. Pokud je to však nezbytné, nestyďte se použít delší název.

  16. Stejně jako u názvů tříd je vhodné používat názvy z domény problému. Vycházet byste měli z doménového slovníku, který navrhne doménový analytik.

  17. Vyhněte se používání různých synonym pro logicky stejnou vlastnost různých tříd.

Používáte pravidlo, které zde není uvedeno? Máte připomínku k některému doporučení? Neváhejte vložit komentář.