<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blog.vyvojar.cz/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Greenyho pracovní zápisníček</title><subtitle type="html">Tento blog vznikl jako vedlejší produkt během mé práce na různých projektech pro společnost Adastra CZ. Blog není koncipován jako pravidelná rubrika. Budu sem zveřejňovat zajímavé věci, na které během svého zápasu se světem .NETu narazím. Doufám, že vám tím váš vlastní zápas učiním o trochu lehčí.</subtitle><id>http://blog.vyvojar.cz/danielsmolka/atom.aspx</id><link rel="alternate" type="text/html" href="http://blog.vyvojar.cz/danielsmolka/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blog.vyvojar.cz/danielsmolka/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61129.1">Community Server</generator><updated>2009-12-06T11:48:00Z</updated><entry><title>SEO: Odkud přicházejí naši zákazníci?</title><link rel="alternate" type="text/html" href="http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx" /><id>http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx</id><published>2010-09-28T13:26:00Z</published><updated>2010-09-28T13:26:00Z</updated><content type="html">&lt;p&gt;
O SEO (Search Engine Optimalization) už byly sepsány megabyty textu. Pro zájemce o hlubší poznání SEO jsou velmi zajímavé články na &lt;a href="http://www.jakpsatweb.cz/seo/seo.html" target="_blank"&gt;jakpsatweb.cz&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Já bych se s vámi rád podělil o jednoduchou techniku, která zjistí, jak je optimalizace úspěšná a odkud k nám přicházejí cenní zákazníci. Cenným zákazníkem nemyslím kteréhokoliv návštěvníka našeho webu, myslím tím návštěvníka, který si něco koupí v našem eshopu nebo je nám jeho návštěva jinak prospěšná.
&lt;/p&gt;

&lt;p&gt;
Abychom zjistili, co se s našimi stránkymi děje, je velmi vhodné zvolit nějaký monitorovací nástroj. Nejběžnější dostupné nástroje jsou: &lt;a href="http://www.google.com/analytics/" target="_blank"&gt;Google Analytics&lt;/a&gt; a &lt;a href="http://toplist.cz/" target="_blank"&gt;TopList&lt;/a&gt;.
To jsou ale plošné monitory, které nám sice krásně zanalyzují celkovou návštěvnost, ale už nám neřeknou, jak se k nám dostávají cenní zákazníci. Nástroj, který nám na tyto otázky částečně odpoví, je nástroj „Sledování konverzí“ v seznamáckém &lt;a href="http://www.sklik.cz/" target="_blank"&gt;Skliku&lt;/a&gt;.
Ten mi ale přišel ne úplně domyšlený a navíc nepoužitelný s jinými reklamními systémy, například bannery nebo &lt;a href="http://www.google.com/adwords" target="_blank"&gt;Google Adwords&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Jako nejjednodušší řešení mi přišlo si monitoring cenných zákazníků napsat sám. &lt;/p&gt;&lt;p&gt;Co o nich tedy můžeme zjistit?
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;	Pokud na naši stránku přišli z vyhledávače, pak z jakého a jaká klíčová slova použili.&lt;/li&gt;

&lt;li&gt;	Pokud na naši stránku přišli prostřednictvím nějaké naší reklamní kampaně, pak která to byla.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Tyto zjištěné informace pak mohu lehce asociovat s konkrétní objednávkou. Následnou analýzou pak zjistím, které reklamní kampaně generují zisk a které jsou jen vyhazováním peněz.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;br&gt;
&lt;b&gt;Jak na to?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Pro zjištění názvu vyhledávače a klíčových slov použijeme atribut Request.UrlReferrer. V něm je uloženo URL stránky, na které je odkaz na naši stránku, na který zákazník kliknul, aby se k nám dostal. Z URL nás zajímají dvě části:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;	referrer.Host – doména vyhledávače&lt;/li&gt;

&lt;li&gt;	parametr „q“ – dotaz zadaný do vyhledávače (google, seznam, jyxo)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Příklad: Člověk se chce stěhovat po Praze, tak zadá do googlu „stehovani praha“. Dotaz se přeloží na URL &lt;a href="http://www.google.cz/search?q=stehovani+praha" target="_blank"&gt;http://www.google.cz/search?q=stehovani+praha&lt;/a&gt;. Host je „google.cz“, parametr „q“ je „stehovani praha“. Po kliknutí třeba na &lt;a href="http://www.mula.cz/" target="_blank"&gt;www.mula.cz&lt;/a&gt; se dostanete na titulní stránku, která si do Session uloží obsah parametrů Host a „q“.
&lt;/p&gt;
&lt;p&gt;
Určení použité reklamní kampaně se děje obdobně. Do URL odkazu na inzerovanou stránku nebo produkt se vloží identifikátor kampaně. URL by mělo být ve tvaru "http://{url-inzerovaneho-produktu}?campaign={id-kampane}", tedy například &lt;a href="http://www.mula.cz/?campaign=vyvojar" target="_blank"&gt;http://www.mula.cz/?campaign=vyvojar&lt;/a&gt;. Po kliknutí na odkaz pak s parametrem „campaign“ zacházíte jako s výše zmiňovaným parametrem „q“.
&lt;/p&gt;

&lt;pre&gt;protected void Page_Load(object sender, EventArgs e)
{
	if (!IsPostBack)
	{
		// ... do your stuff
		ProcessSeo();
	}
}
private void ProcessSeo()
{
	string campaign = Request["campaign"];
	if (!string.IsNullOrEmpty(campaign))
	{
		Session["seo-campaign"] = campaign;
	}
	Uri referrer = Request.UrlReferrer;
	if (referrer == null) return;                   // referrer je neznamy =&amp;gt; end
	if (referrer.Host == Request.Url.Host) return;  // referrer neni cizi =&amp;gt; end
	Session["seo-referrer"] = referrer.Host;
	if (referrer.Query == null) return;
	NameValueCollection pars = HttpUtility.ParseQueryString(referrer.Query);
	string q = pars["q"];                           // vyhledavana klicova slova
	if (string.IsNullOrEmpty(q)) return;
	Session["seo-query"] = q;
}
&lt;/pre&gt;

&lt;p&gt;		
Všechny zajímavé parametry máme nyní uloženy v Sessions. Když nastane ta správná chvíle, třeba zákazník odešle objednávku vybraného zboží,  sáhneme si do Sessions a parametry společně s akcí uložíme.
&lt;/p&gt;

&lt;pre&gt;protected void OnSomeAction()
{
  // get the action
  
  SomeAction action = ... ;
 
  // associate SEO information with that action
  string campaign = Session["seo-campaign"];
  string referrer = Session["seo-referrer"];
  string query = Session["seo-query"];
  SaveSeo(action, campaign, referrer, query);
}
&lt;/pre&gt;

&lt;p&gt;
To je celý kód, nic složitého. Složitá je až analýza výsledků a upravování reklamních kampaní. SEO je běh na dlouhou trať, kde žádný krok není zadarmo.
&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
Na závěr ještě dotaz: &lt;br&gt;Máte někdo praktické zkušenosti s tím "během na dlouhou trať" a chtěli byste nám pomoci s bojem o lepší pozice a vyšší návštěvnost? &lt;br&gt;Pište na daniel.smolka(kyselá ryba)gmail.com. &lt;br&gt;Díky.
&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;br&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Přidej do&lt;/strong&gt; &lt;a href = "http://linkuj.cz/?id=linkuj&amp;amp;url=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;title=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;linkuj.cz!&lt;/a&gt; |  &lt;a href = "http://www.jagg.cz/bookmarks.php?action=add&amp;amp;address=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;title=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;jagg.cz!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;title=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;del.icio.us!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;title=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;title=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;title=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f&amp;amp;;top=1" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;live it!&lt;/a&gt; |  &lt;a href = "mailto:?body=Thought you might like this: http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx&amp;amp;;subject=SEO%3a+Odkud+p%c5%99ich%26%23225%3bzej%26%23237%3b+na%c5%a1i+z%26%23225%3bkazn%26%23237%3bci%3f" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/09/28/seo-odkud-p-ich-zej-na-i-z-kazn-ci.aspx"&gt;email it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.vyvojar.cz/aggbug.aspx?PostID=236965" width="1" height="1"&gt;</content><author><name>daniel.smolka</name><uri>http://blog.vyvojar.cz/members/daniel.smolka.aspx</uri></author><category term="Praxe" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Praxe/default.aspx" /><category term="ASP.NET" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/ASP.NET/default.aspx" /><category term="SEO" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/SEO/default.aspx" /><category term="Internet" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Internet/default.aspx" /></entry><entry><title>Source Control na mal&amp;#253;ch projektech</title><link rel="alternate" type="text/html" href="http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx" /><id>http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx</id><published>2010-06-22T18:10:00Z</published><updated>2010-06-22T18:10:00Z</updated><content type="html">&lt;p&gt;K&amp;nbsp;napsání tohoto článku mě inspiroval můj kamarád, taky programátor.
Říkal jsem mu něco jako: „Dělal jsem teď jeden projekt s&amp;nbsp;použitím
Subversion a hodně mi to při vývoji pomohlo.“ A on na to něco jako: „Jo, taky
už jsem o tom slyšel. Je to ale moc složité a stejně mi to k&amp;nbsp;ničemu není.“
Myslím si, že se mýlí. Ano, níže popsaný postup přináší do projektu nějakou
režii. Ta ale není zase až tak velká, aby byla na překážku při každodenním
používání. A výhody z postupu plynoucí tu režii plně vyváží.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;br&gt;Co je to ten source control?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;Source control&lt;/a&gt; (známý též jako Revision control nebo Version control) je
postup, který umožňuje se vrátit ke kterémukoliv předešlému stavu projektu.
Source control systémy pro vývoj software mají kromě této základní funkce ještě
další. Z&amp;nbsp;těch nejdůležitějších to jsou funkce, které:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;umožňují
současnou práci více lidem na jednom projektu;&lt;/li&gt;

&lt;li&gt;udržují
centrální úložiště kódu (repository), které slouží hlavně jako zdroj jediné aktuální
verze zdrojového kódu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Způsob použití repository je nakreslen na následujícím obrázku:&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://www.greeny.name/blog-support/SourceControl-ClientServer.png"&gt;
&lt;/p&gt;

&lt;p&gt;&lt;br&gt;Každý člen vývojového týmu se přes internet nebo místní síť připojí na
repository, které je umístěno na Source control serveru. Z repository si stáhne
na svůj počítač tu část zdrojového kódu, kterou potřebuje ke své práci. Po
vykonání svého úkolu, který typicky obnáší nějakou úpravu kódu a její
testování, odešle změny zpět do repository. Během společné práce v&amp;nbsp;týmu by
měly být dodrženy následující základní pravidla:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Každý
člen týmu by měl svou kopii zdrojového kódu pravidelně aktualizovat z&amp;nbsp;repository
(nejméně jednou denně).&lt;/li&gt;

&lt;li&gt;Práce
členů týmu by se neměla překrývat. Práce více lidí na téže věci vede
k&amp;nbsp;nepříjemným konfliktům, které jsou častým zdrojem chyb. V&amp;nbsp;nejlepším
případě vedou konflikty k&amp;nbsp;zahození práce některých lidí.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zatím jsem zde psal pouze o práci v&amp;nbsp;týmu. Vyplatí se použití source
control i pokud na projektu pracuje pouze jeden člověk? Na tuto otázku není
jednoznačná odpověď, protože v&amp;nbsp;tom případě nemá význam hlavní výhoda
source control, a sice možnost práce v&amp;nbsp;týmu. Stále ale zůstávají ve hře další
dvě důležité funkce. Zaprvé možnost vrátit se ke kterékoliv historické verzi
zdrojového kódu. Zadruhé zdrojový kód je pravidelně zálohován na JINÉM
počítači, než na kterém člověk vyvíjí. Zdá se to jako nepodstatný detail, ale
kolik jste už za život potkali smutných lidí s&amp;nbsp;crashlým diskem nebo
ukradeným noutbukem?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;br&gt;Používané source control&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Následující seznam source control systémů není úplný, obsahuje pouze
systémy, s&amp;nbsp;nimiž jsem měl možnost pracovat. Když tak mě prosím
v&amp;nbsp;diskusi doplňte:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe"&gt;MS SourceSafe&lt;/a&gt;&lt;/b&gt; – Source control systém od společnosti
Microsoft. Před lety byl hojně používán, ale trpí některými neduhy, jako je
krkolomná obsluha a tragicky dlouhé odezvy při práci přes internet. Vývoj byl
před pár lety zastaven.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;&lt;a href="http://cs.wikipedia.org/wiki/CVS"&gt;CVS&lt;/a&gt;&lt;/b&gt; – Open source Source control systém.
Před lety taktéž hojně používán, ale vývoj byl také před pár lety zastaven.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Team_Foundation_Server"&gt;MS Team Foundation Server&lt;/a&gt;&lt;/b&gt; – Enterprise řešení od společnosti
Microsoft, nástupce SourceSafe. Vhodný pro střední až velmi velké projekty. Výhodou
je široké spektrum podporovaných funkcí, zejména s&amp;nbsp;důrazem na řízení
projektu. Nevýhodou je cena licence.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;&lt;a href="http://cs.wikipedia.org/wiki/Subversion"&gt;Subversion&lt;/a&gt;&lt;/b&gt; – Open source Source control systém, nástupce
CVS. Vhodný pro malé až středně velké projekty. Výhodou je podpora více
platforem (Unix i Windows) a nulové pořizovací náklady. Nevýhodou jsou
chybějící funkce pro řízení projektu, které ale při malých projektech nejsou
nutné. Můj níže popsaný projekt je realizován právě s&amp;nbsp;použitím Subversion
v&amp;nbsp;kombinaci s&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/TortoiseSVN"&gt;TortioseSVN&lt;/a&gt;, které je jeho výborným a praktickým grafickým
rozšířením.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;&lt;br&gt;Organizace repository&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Repository lze uspořádat několika způsoby. Konkrétní uspořádání záleží na
zejména na složitosti projektu, na způsobu testování kódu a na deploymentu
aplikace. Zde se budu zabývat pouze dvěma nejjednoduššími způsoby:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Trunk only&lt;/b&gt; – Přírůstek kódu je lineární, tedy v&amp;nbsp;průběhu vývoje aplikace
nedochází k&amp;nbsp;žádnému větvení verzí. Toto je úplně nejjednodušší uspořádání,
které je vhodné pouze tehdy, když si jsou vývojové, testovací a produkční
prostředí velmi podobné a je možnost častého update aplikace na produkci.
&lt;br&gt;&amp;nbsp;&lt;br&gt;
&lt;img src="http://www.greeny.name/blog-support/SourceControl-TrunkOnly.png"&gt;&lt;br&gt;&amp;nbsp;
&lt;/li&gt;

&lt;li&gt;&lt;b&gt;DEV-PROD&lt;/b&gt;
– Vlastní vývoj probíhá stejně jako v&amp;nbsp;předchozím případě. Pokud ale má
dojít k&amp;nbsp;nasazení na produkčním prostředí, je z&amp;nbsp;hlavní vývojové větve DEV
(tedy výše popsaného Trunku) oddělená verze PROD, jejíž obsah je nasazen na
vývojové prostředí (na obrázku DEV.3 na PROD.1). Výhoda tohoto uspořádání
spočívá v&amp;nbsp;tom, že je možné kód automaticky přizpůsobovat produkčnímu
prostředí, které může být trochu jiné než vývojové. Lze také opravovat chyby v nasazené
verzi, zatímco již probíhá vývoj nové funkcionality na DEV větvi (na obrázku PROD.1
na PROD.2). Navíc je stále k&amp;nbsp;dispozici kompletní zdrojový kód aplikace
nasazené v&amp;nbsp;produkčním prostředí.&lt;br&gt;&amp;nbsp;&lt;br&gt;
&lt;img src="http://www.greeny.name/blog-support/SourceControl-Branching.png"&gt;
&lt;/li&gt;


&lt;p&gt;&lt;b&gt;&lt;br&gt;Vývojová prostředí&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Při aplikačním vývoji se osvědčil způsob, kdy aplikace během svého životního
cyklu prochází následujícími prostředími:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Vývojové prostředí&lt;/b&gt; – Zde probíhá vývoj aplikace. Může to být buď lokální počítač
programátora nebo virtuální prostředí přístupné přes vzdálené připojení (typicky
Remote desktop).&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Testovací prostředí&lt;/b&gt; – Zde se nanečisto zkouší, jak se bude aplikace chovat v&amp;nbsp;praxi.
Testovací prostředí by tedy mělo být co nejpodobnější produkčnímu prostředí.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Produkční prostředí&lt;/b&gt; – Zde aplikace pracuje. Na produkční prostředí by měla být nasazená
aplikace pouze tehdy, když se osvědčila při fungování v testovacím prostředí.
Píšu měla by, protože se tak často neděje. Většinou se přeskočením testování
ušetří čas. Občas se ale stane, že se přeskočení testování vymstí a vzniklé
ztráty jsou pak větší než náklady na regulérní testování.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;&lt;br&gt;Použití source control&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Používání source control v&amp;nbsp;praxi budu demonstrovat na konkrétním
příkladu, kterým je nedávno releasnutá webová aplikace &lt;a href="http://www.mula.cz"&gt;www.mula.cz&lt;/a&gt; (zatím v&amp;nbsp;beta verzi). Při jejím
vývoji je používaná konfigurace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Source
Control Server&lt;/b&gt; – Starý počítač hozený pod stolem, na kterém jsou Windows 2000.
Na nich je nainstalován Apache 2.2, který je využíván Subversion source
control. Repository využívá uspořádání DEV-PROD. Počítač je připojen do
internetu tak, aby měl pevnou IP adresu.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Client
A&lt;/b&gt; – Vývojové prostředí&amp;nbsp;na mém počítači.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Client
B&lt;/b&gt; (není na obrázku) – Vývojové prostředí dalšího programátora.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Testovací
prostředí&lt;/b&gt; – Subdoména v&amp;nbsp;rámci hlavní domény aplikace. Důležité na
testovacím prostředí je, aby bylo co nejpodobnější prostředí produkčnímu. Projeví
se tak problémy, které se na vývojovém prostředí neprojeví. V&amp;nbsp;mém případě
to byly problémy způsobené zvýšenými požadavky na bezpečnost a integrací s ostatními
systémy (odesílání emailů). Testovací prostředí má svou vlastní aplikační
databázi, aby testy neovlivňovaly aplikaci nasazenou v&amp;nbsp;produkčním prostředí.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Produkční
prostředí&lt;/b&gt; – Hlavní doména na web hostingu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&amp;nbsp;&lt;br&gt;
&lt;img src="http://www.greeny.name/blog-support/SourceControl-Usage.png"&gt;
&lt;/p&gt;

&lt;p&gt;&lt;br&gt;Běžný vývoj probíhá tak, že vývojáři A, B až X kutají, jak je popsáno v&amp;nbsp;úvodní kapitole. Když dokutají do určitého bodu,
vývojář A ho označí v&amp;nbsp;DEV repository tzv. tagem, který jednoznačně
identifikuje aktuální verzi zdrojového kódu (třeba „Release 123“). Vývojář A
pak svou aktuální verzi kódu zkompiluje, zabalí a vystaví na testovacím
prostředí. Tam je nějakou dobu testována, zda vše funguje správně. Vývojáři
mezitím dál kutají...&lt;/p&gt;

&lt;p&gt;Pokud se na&amp;nbsp;aplikaci v testovacím prostředí vyskytují chyby, provede
se jejich oprava, která je označena novým tagem (třeba „Release 124“), a která
je opět nasazena na testovací prostředí. &lt;/p&gt;

&lt;p&gt;Pokud je aplikace v testovacím prostředí v&amp;nbsp;pořádku, provede se merge (spojení
verzí). Merge promítne změny aplikace nasazené v&amp;nbsp;testovacím prostředí (označené
tagem „Release 124“) do PROD repository. Po zkompilování a nasazení aplikace z&amp;nbsp;PROD
repository se by na produkčním serveru měla ocitnout stejná (nebo velmi podobná)
verze aplikace jako na testovacím.&lt;/p&gt;

&lt;p&gt;Navíc, jak jsem psal výše, pokud máme rozpracovanou implementaci nějaké
nové funkcionality a zjistíme nějaký závažný problém na PROD aplikaci, pak
můžeme opravu provést přímo nad PROD repository. Nejsme nuceni dělat release
rozpracované DEV aplikace, protože ten by určitě nedopadl dobře.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;br&gt;Závěrem&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Při vývoji software se vyplatí řídit se určenými procesy. Pod pojmem proces
si nemusíte představovat nějaké hroznosti. Pod pojmem proces si představte
postup, který si sami definujete, aby jeho výsledkem byl spolehlivý kód. Důležitým
bodem je, že proces je jednou daný a už se nemění. Takže nad ním již nemusíme
přemýšlet a jeho provádění můžeme svěřit počítači ve formě skriptů, které
vyžadují minimální manuální zásahy.&lt;/p&gt;

&lt;p&gt;Pokud se vývoj žádnými procesy neřídí, pak se tomu říká pankárna. A výsledek
pankárny je stejně spolehlivý, jako je spolehlivý typický pankáč.&lt;/p&gt;

&lt;p&gt;Výše popsaný proces je samozřejmě jen jednou z&amp;nbsp;možných cest. Tento
článek Vám má hlavně posloužit jako vysvětlení některých běžných pojmů a jako
inspirace založená na případové studii.&lt;/p&gt;

&lt;p&gt;A na úplný závěr reklama: Pokud chcete něco převézt nebo přestěhovat, jděte
na &lt;a href="http://www.mula.cz"&gt;www.mula.cz&lt;/a&gt;. Snad vám portál bude
sympatický, když teď víte, jak vznikal. Plánuju ještě navazující článek o jeho
architektuře, konkrétně o použití Linq2Sql v&amp;nbsp;ASP.NET aplikaci.&lt;/p&gt;



&lt;hr&gt;

&lt;p&gt;&lt;b&gt;Update (1.7.2010)&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Po diskusi s uživatelem &lt;i&gt;rarous&lt;/i&gt; jsem dospěl k závěru, že výše navrhované řešení je zbytečně komplikované a nepraktické. 
Projekt jsem překopal a buildovací workflow nyní vypadá takto:&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://www.greeny.name/blog-support/SourceControl-Usage4.png"&gt;
&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;br&gt;Úprava se řídila následujícími pravidly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dvě repository jsou nesmysl, jedno bohatě stačí.&lt;/li&gt;
&lt;li&gt;DEV, TEST i PROD aplikace by ideálně měly být stejné a lišit se pouze konfiguračním souborem.&lt;/li&gt;
&lt;li&gt;Aplikace nasazovaná na PROD vždy musí pocházet ze stejného buildu jako aplikace nasazovaná na TEST, protože TEST slouží k prověření funkčnosti nasazované aplikace.&lt;/li&gt;
&lt;li&gt;Projekt je tak malý, že mi přijde zbytečné rozbíhat build server a automatické buildy. Tuto funkcionalitu zastává ručně developer na Client A.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;nbsp;&lt;br&gt;Důsledky úprav jsou:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zjednodušení celého buildovacího workflow.&lt;/li&gt;
&lt;li&gt;Client A může dělat úpravy na TESTu a PRODukci i bez přístupu k source repository.&lt;/li&gt;
&lt;li&gt;Vždy je nasazovaná otestovaná verze (pokud Client A tento krok záměrně nepřeskočí).&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Přidej do&lt;/strong&gt; &lt;a href = "http://linkuj.cz/?id=linkuj&amp;amp;url=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;title=Source+Control+na+mal%26amp%3b%23253%3bch+projektech" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;linkuj.cz!&lt;/a&gt; |  &lt;a href = "http://www.jagg.cz/bookmarks.php?action=add&amp;amp;address=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;title=Source+Control+na+mal%26amp%3b%23253%3bch+projektech" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;jagg.cz!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;title=Source+Control+na+mal%26amp%3b%23253%3bch+projektech" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;del.icio.us!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;title=Source+Control+na+mal%26amp%3b%23253%3bch+projektech" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;title=Source+Control+na+mal%26amp%3b%23253%3bch+projektech" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;title=Source+Control+na+mal%26amp%3b%23253%3bch+projektech&amp;amp;;top=1" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;live it!&lt;/a&gt; |  &lt;a href = "mailto:?body=Thought you might like this: http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx&amp;amp;;subject=Source+Control+na+mal%26amp%3b%23253%3bch+projektech" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2010/06/22/source-control-na-mal-ch-projektech.aspx"&gt;email it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.vyvojar.cz/aggbug.aspx?PostID=236726" width="1" height="1"&gt;</content><author><name>daniel.smolka</name><uri>http://blog.vyvojar.cz/members/daniel.smolka.aspx</uri></author><category term="Praxe" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Praxe/default.aspx" /><category term="ASP.NET" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/ASP.NET/default.aspx" /><category term="Architektura" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Architektura/default.aspx" /></entry><entry><title>32bitová ASP.NET aplikace na x64</title><link rel="alternate" type="text/html" href="http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx" /><id>http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx</id><published>2009-12-06T12:20:00Z</published><updated>2009-12-06T12:20:00Z</updated><content type="html">&lt;p&gt;Přešli jste z 32bitové platformy na 64bitovou a najednou vám vaše ASP.NET aplikace začala vyhazovat divné chyby? Pracujete na 64bitovém prostředí, ale potřebujete z&amp;nbsp; ASP.NET aplikace volat 32bitové knihovny/ovladače?&lt;/p&gt;&lt;p&gt;Přesně tyto problémy jsem řešil po přechodu na x64 Windows7. Najednou mi přestaly chodit ASP.NET aplikace využívající 32bitový Oracle client. Produkční servery stále běží na 32 bitech, takže změnou ovladačů na x64 cesta nevede. Naštěstí mi jako obvykle pomohl pan Google. Nejprve jsem narazil na spoustu příspěvků, kde si lidé pomalu rvali vlasy, protože problém ne a ne vyřešit. Což ostatně dalo podnět i k vzniku tohoto krátkého příspěvku.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Pak jsem narazil na [1]. Autor popisuje několik cest, jak se dobrat k cíli. Pro mě nejjednodušší cesta byla prostě si řešení naklikat:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Otavřít IIS7 Manager.&lt;/li&gt;&lt;li&gt;Na položce "Application Pools" vybrat "Add Application Pool..."&lt;/li&gt;&lt;li&gt;Nový pool pojmenovat třeba "x86". &lt;br&gt;&lt;/li&gt;&lt;li&gt;Kliknout na něj v seznamu a zvolit "Advanced Settings..."&lt;/li&gt;&lt;li&gt;Vlastnost "Enable 32-Bit Applications" změnit na True.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Application pool problematické webové aplikace pomocí "Basic Settings..." změnit na "x86".&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Zdroje&lt;/p&gt;&lt;p&gt;[1] Rakki Muthukumar - IIS7 - Running 32-bit and 64-bit ASP.NET versions at the same time on different worker processes&lt;br&gt;&lt;a href="http://blogs.msdn.com/rakkimk/archive/2007/11/03/iis7-running-32-bit-and-64-bit-asp-net-versions-at-the-same-time-on-different-worker-processes.aspx" title="http://blogs.msdn.com/rakkimk/archive/2007/11/03/iis7-running-32-bit-and-64-bit-asp-net-versions-at-the-same-time-on-different-worker-processes.aspx" target="_blank"&gt;http://blogs.msdn.com/rakkimk/archive/2007/11/03/iis7-running-32-bit-and-64-bit-asp-net-versions-at-the-same-time-on-different-worker-processes.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Přidej do&lt;/strong&gt; &lt;a href = "http://linkuj.cz/?id=linkuj&amp;amp;url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;title=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;linkuj.cz!&lt;/a&gt; |  &lt;a href = "http://www.jagg.cz/bookmarks.php?action=add&amp;amp;address=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;title=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;jagg.cz!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;title=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;del.icio.us!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;title=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;title=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;title=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64&amp;amp;;top=1" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;live it!&lt;/a&gt; |  &lt;a href = "mailto:?body=Thought you might like this: http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx&amp;amp;;subject=32bitov%26%23225%3b+ASP.NET+aplikace+na+x64" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/32bitov-web-aplikace-na-x64.aspx"&gt;email it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.vyvojar.cz/aggbug.aspx?PostID=235902" width="1" height="1"&gt;</content><author><name>daniel.smolka</name><uri>http://blog.vyvojar.cz/members/daniel.smolka.aspx</uri></author><category term="Praxe" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Praxe/default.aspx" /><category term="x64" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/x64/default.aspx" /><category term="ASP.NET" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Dotazování Active Directory</title><link rel="alternate" type="text/html" href="http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx" /><link rel="enclosure" type="application/zip" length="26911" href="http://blog.vyvojar.cz/danielsmolka/attachment/235901.ashx" /><id>http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx</id><published>2009-12-06T10:48:00Z</published><updated>2009-12-06T10:48:00Z</updated><content type="html">
&lt;p class="MsoNormal"&gt;&lt;span&gt;Potřebovali jste
někdy zobrazovat uživatelům intranetové aplikace funkcionalitu omezenou podle
jejich příslušnosti do určité skupiny (manager, editor, lopata)? Zkoušeli jste
to někdy dělat pomocí Active Directory? Jde to docela snadno.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;br&gt;Co je to vlastně to Active Directory?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Active Directory
je implementace adresářových služeb LDAP firmou Microsoft pro použití v
prostředí systému Microsoft Windows. Active Directory umožňuje administrátorům
nastavovat politiku, instalovat programy na mnoho počítačů nebo aplikovat
kritické aktualizace v celé organizační struktuře. Active Directory ukládá své
informace a nastavení v centrální organizované databázi.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Adresářová služba
Active Directory je rozšiřitelná a škálovatelná adresářová služba, která
umožňuje efektivně uspořádat síťové prostředky.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vyžaduje instalaci služby DNS&lt;/li&gt;

&lt;li&gt;je založena na standardních internetových protokolech&lt;/li&gt;

&lt;li&gt;jednoznačně definuje strukturu sítě&lt;/li&gt;

&lt;li&gt;organizuje skupiny počítačů a domén&lt;/li&gt;
&lt;/ul&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;LDAP (Lightweight
Directory Access Protocol) je definovaný protokol pro ukládání a přístup k
datům na adresářovém serveru. Podle tohoto protokolu jsou jednotlivé položky na
serveru ukládány formou záznamů a uspořádány do stromové struktury (jako ve
skutečné adresářové architektuře). Je vhodný pro udržování adresářů a práci s
informacemi o uživatelích (např. pro vyhledávání adres konkrétních uživatelů v
příslušných adresářích, resp. databázích).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Více detailů
naleznete na Wiki (viz [1] a [2]), odkud jsem si také vypůjčil výše uvedené
definice.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;V tomto článku se
nebudeme podrobně zabývat všemi možnostmi Active Directiry, ale zaměříme se jen
na informace o uživatelích.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;br&gt;Co se dá z Active Directory zjistit o uživatelích?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;No, skoro
všechno. Nejzajímavější atributy jsou tyto: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
jak
se uživatel jmenuje (displayname)&lt;/li&gt;

&lt;li&gt;jaké
má uživatelské jméno (userprincipalname)&lt;/li&gt;

&lt;li&gt;jakou
má emailovou adresu (mail)&lt;/li&gt;

&lt;li&gt;jaký
má pracovní telefon (mobile)&lt;/li&gt;

&lt;li&gt;kterého
odboru je členem (department)&lt;/li&gt;

&lt;li&gt;kdo
je jeho nadřízeným (manager)&lt;/li&gt;

&lt;li&gt;do
kterých skupin patří (memberof&lt;/li&gt;

&lt;li&gt;a
další volitelné atributy (extensionattributeX); každá organizace může definovat
své vlastní&lt;/li&gt;
&lt;/ul&gt;


&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;br&gt;Jak se Active Directory dotazovat?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Špinavou práci za
nás už naštěstí odvedl Microsoft. Objekty pro práci s&amp;nbsp;Active Directory
implementovány v&amp;nbsp;rámci .NET Frameworku v namespace System.DirectoryServices.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Nejvíce nás bude
zajímat třída DirectorySearcher, která v&amp;nbsp;Active Directory vyhledává. Této
třídě nejprve musíme říct, co a kde chceme vyhledat. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Co chceme najít,
specifikujeme pomocí nastavení filtru. Jedná se v podstatě o jinak zapsanou
WHERE podmínku, kterou používáme pro dotazování do databází (v tomto případě
hierarchické databáze). Dotaz na nalezení konkrétního uživatele může vypadat
takto:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;(&amp;amp;(objectCategory=user)(userPrincipalName=karel.ctvrty@domain.net))
&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Kde chceme
hledat, je vhodné určit co možná nejpřesněji. Čím přesnější cesta, tím kratší
doba vyhledávání a lepší výsledky. Cesta (Path) je zadávaná v&amp;nbsp;notaci
uvedené &lt;/span&gt;na&lt;span&gt;př. v [5]. Pokud
chceme hledat ve všech uživatelích v&amp;nbsp;doméně, můžeme cestu definovat jako „&lt;/span&gt;LDAP://DOMAINNAME&lt;span&gt;“.&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;br&gt;A nyní prakticky...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;K článku jsou
přiloženy dva projekty.&lt;br&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;ActiveDirQuery –
rozšířené &lt;/span&gt;[3]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vyhledávání
uživatelů, počítačů a tiskáren podle jejich jména (uživatelů podle přijmení)&lt;/li&gt;

&lt;li&gt;implementováno
jako WinForm aplikace&lt;/li&gt;
&lt;/ul&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;ActiveDirListing&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vypsání
všech dostupných atributů právě přihlášeného uživatele&lt;/li&gt;


&lt;li&gt;implementováno
jako ASP.NET aplikace&lt;/li&gt;

&lt;ul&gt;
&lt;li&gt;aplikace
musí mít aktivovanou authentikaci „Windows Authentication“ a zakázanou
„Anonymous Authentication“&lt;/li&gt;

&lt;li&gt;správci
IIS 7 musí komponentu „Windows Authentication“ ručně doinstalovat, protože
v&amp;nbsp;základní instalaci není obsažena&lt;/li&gt;

&lt;li&gt;„Windows
Authentication“ funguje pouze v&amp;nbsp;kombinaci s&amp;nbsp;Internet Explorerem&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;


&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Hmm, a odpověď na
úvodní otázku? Jak teda vlastně zjistím, do kterých skupin patří aktuálně
přihlášený uživatel? Nejsme v&amp;nbsp;mateřské školce, proto si kód musíte
vytvořit sami. K&amp;nbsp;řešení můžete použít následující kousky:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
zjištění
aktuálně přihlášeného uživatele – ActiveDirQuery.&lt;/li&gt;

&lt;li&gt;formulace
Active Directory filtru – tamtéž&lt;/li&gt;

&lt;li&gt;příslušnost
ke skupině v Active Directory – pomocí atributu „memberof“, implementace je
v&amp;nbsp;[4]&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;br&gt;Závěrem&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Active Directory
je mocným nástrojem, zejména pokud chceme nahlížet do organizačních struktur.
Dá nám odpovědi na mnoho otázek a jeho využíváním se vyhneme duplicitním
definicím skutečností, které jsou již definovány jinde.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Nicméně nic se
nemá přehánět a složitější dotazy do Active Directory mohou naši aplikaci
citelně brzdit (viz diskuse v&amp;nbsp;rámci &lt;/span&gt;[4]&lt;span&gt;). Proto je pro náročnější aplikace vhodné zvážit,
zdali není vhodnější místo přímých dotazů do Active Directory stáhnout každou
noc aktuální stav věcí, které nás zajímají a dotazovat se raději našich
vlastních databázových struktur.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;br&gt;Zdroje&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;[1] &lt;/span&gt;&lt;a href="http://cs.wikipedia.org/wiki/Active_Directory"&gt;&lt;span&gt;http://cs.wikipedia.org/wiki/Active_Directory&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;[2] &lt;/span&gt;&lt;a href="http://cs.wikipedia.org/wiki/LDAP"&gt;&lt;span&gt;http://cs.wikipedia.org/wiki/LDAP&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:14.2pt;text-indent:-14.2pt;"&gt;&lt;span&gt;[3] Sriram Chitturi&lt;span&gt;&amp;nbsp; &lt;/span&gt;- Querying Active Directory using .NET
classes and LDAP queries &lt;br&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/system/activedirquery.aspx"&gt;&lt;span&gt;http://www.codeproject.com/KB/system/activedirquery.aspx&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:14.2pt;text-indent:-14.2pt;"&gt;&lt;span&gt;[4] silentthread - Check if user is a
member of an Active Directory Group&lt;br&gt;
&lt;/span&gt;&lt;a href="http://www.vbforums.com/showthread.php?t=415856"&gt;&lt;span&gt;http://www.vbforums.com/showthread.php?t=415856&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:14.2pt;text-indent:-14.2pt;"&gt;[5] LDAP
Pathnames - Distinguished Names &lt;br&gt;
&lt;a href="http://www.selfadsi.org/ldap-path.htm"&gt;http://www.selfadsi.org/ldap-path.htm&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Přidej do&lt;/strong&gt; &lt;a href = "http://linkuj.cz/?id=linkuj&amp;amp;url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;title=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;linkuj.cz!&lt;/a&gt; |  &lt;a href = "http://www.jagg.cz/bookmarks.php?action=add&amp;amp;address=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;title=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;jagg.cz!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;title=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;del.icio.us!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;title=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;title=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;title=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory&amp;amp;;top=1" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;live it!&lt;/a&gt; |  &lt;a href = "mailto:?body=Thought you might like this: http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx&amp;amp;;subject=Dotazov%26%23225%3bn%26%23237%3b+Active+Directory" target="_blank" title = "Post http://blog.vyvojar.cz/danielsmolka/archive/2009/12/06/Dotazov_E100_n_ED00_-Active-Directory.aspx"&gt;email it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blog.vyvojar.cz/aggbug.aspx?PostID=235901" width="1" height="1"&gt;</content><author><name>daniel.smolka</name><uri>http://blog.vyvojar.cz/members/daniel.smolka.aspx</uri></author><category term=".NET" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/.NET/default.aspx" /><category term="Active Directory" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Active+Directory/default.aspx" /><category term="Praxe" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/Praxe/default.aspx" /><category term="C#" scheme="http://blog.vyvojar.cz/danielsmolka/archive/tags/C_2300_/default.aspx" /></entry></feed>