Jozef Izso

Číslovanie strán v Microsoft Word

February 27th, 2013

Jedným z najúspešnejších článkov môjho blogu je Číslovanie strán od určitej strany v MS Word, ktorý má najvyššiu návštevnosť hlavne v apríli, keď najviac študentov píše diplomové práce.

Tento článok však dlhú dobu nemal dostupné obrázky znázorňujúce kontrétne kroky v Microsoft Word 2003 pre nastavenie číslovania strán, pretože som pri aktualizácii WordPress systému zabudol presunúť niektoré obrázky zo starého priečinku do nového.

Dnes je už chyba opravená a študenti majú dostupný celý manuál, ktorý im pomôže v očíslovaní ich diplomoviek a iných záverečných prác. Teraz už chýba iba príručka ako nastaviť číslovanie v nových verziách Word-u, ktoré majú ribbon rozhranie.

Google Tag Manager

February 23rd, 2013

Google Tag Manager je zaujímavý nástroj pre spravovanie rôznych analytických a marketingových JavaScriptových kódov. Priamo podporuje Google Analytics a Adwords a vďaka Custom HTML Tags si môžete zadefinovať HTML a JavaScript kód pre iné meracie systémy.

Do stránky vkladáte kód pre Google Tag Manager, ktorý následne stiahne ďalšie meracie kódy, napr. Google Analytics. Google Tag Manager je tak určený pre web stránky, ktoré potrebujú flexibilne meniť meriace kódy na stránkach, ale zmena stránky a jej aktualizácia by si vo firme vyžadovala zdĺhavú birokraciu. Pravidlá v Google Tag Manageri vám umožnia vložiť iné meracie kódy podľa URL adresy web stránky.

Automatizované buildovanie softvéru

May 30th, 2011

V bývalej práci som sa naučil, že je výborné mať na softvérovom projekte bug tracker (používali sme, a ešte stále používam(e) FogBugz), verziovanie zdrojového kódu (Subversion alebo Mercurial Hg) a automatické buildy (CuiseControl­.NET). Mám skúsenosť s tým, že firmy používajú repozitár so zdrojovým kódom a bug tracker systém, ale málokedy majú nainštalovaný a funkčný systém, ktorý zautomatizuje kompiláciu a nasadenie aplikácie. Súvisí to aj s tým, že buildovacie systémy sa komplikovane nastavujú a treba sa o ne starať viacej, ako Subversion repozitár či bug tracker.

Pri mojich prvých automatických buildoch, ktoré som mal možnosť konfigurovať, som používal NAnt. Kolega bol expert na Ant, NAnt a ostatné veci okolo projektového manažmentu a pred niekoľkým rokmi bol NAnt jediný spôsob, ako jednoducho napísať skript, ktorý skompiluje zdrojový kód, spustí unit testy, vytvorí balíček aplikácie (ZIP so súbormi webovej aplikácie, alebo spustí nástroje pre vytvorenie inštalačného balíčku) a zarchivuje výsledný build. Toto sú základné veci, ktoré sa zídu snáď na každom projekte a v dobe .NET 1.0 a 1.1 bolo v NAnt-e potrebné skriptovať kompiláciu na úrovni jednotlivých zdrojový súborov a manuálneho volania. V prípade C# projektu to znamenalo zobrať všetky .cs súbory a použiť csc.exe kompilátor, nájsť výslednú DLL/EXE assembly a niečo s ňou spraviť. Nevýhoda tohto postupu bola, že treba všetko ručne písať a Visual Studio robilo vlastnú kompiláciu podľa projektového súboru .csproj a NAnt robil druhú podľa vlastných nastavení. Bol to však vynikajúci a silný nástroj, ako celý proces zautomatizovať.

S .NET Frameworkom 2.0 prišiel systém MSBuild, ktorý sa stal základom pre kompiláciu nielen zdrojového kódu, ale celého projektu. MSBuild spracuváva projektové súbory (.csproj, .vbproj) vo formáte XML a okrem kompilovania dokáže aj spracovať resource súbory .resx, XAML súbory, digitálne podpísať assemblies a skopírovať výsledné súbory do výstupného priečinku. MSBuild obsahuje pre každý typ projektu vlastnú sadu úloh, ktoré vedia, ako správne konkrétny typ projektu spracovať. Windows aplikácie teda dokáže správne pripraviť na Click-Once nasadenie a webové aplikácie zase zabaliť do balíčku, ktorý je možné poslať na IIS a nasadiť tak aplikáciu na web. A ani poslanie tohto balíčku nemusíte robiť ručne – MSBuild obsahuje úlohu, ktorá automaticky pošle balíček na IIS server.

Visual Studio a MSBuild sú spolu integrované a preto čo zmeníte vo Visual Studiu, to sa prejaví v projektovom súbore a MSBuild ho rovnako spracuje aj pri spustení z príkazového riadku. Vývojári teda po zmene nastavení projektu môžu zmenený projektový súbor uložiť do repozitáru a keď sa na serveri spustí automatický build, tak si môžu byť istý, že bude spustený s novými nastaveniami a nemusia pracne prekonfigurovávať a prepisovať buildovacie skripty. MSBuild je súčasťou základnej inštalácie .NET Frameworku a nie je potrebné mať nainštalované Visual Studio pre jeho použitie. Toto sa však týka použitia základných úloh dostupných v MSBuild. Po nainštalovaní si Visual Studia a Windows SDK sa do MSBuild pridajú nový typy úloh, ktoré vedia pracovať s novými funkciami potrebnými pre správne zbuildovanie projektov (napr. sa nainštalujú nástroje pre kompiláciu Entity Framework súborov). Na build serveri teda je potrebné mať nainštalované Visual Studio a Windows SDK a udržiavať ich aktuálne – podľa toho, ako to vyžadujú použité funkcie v projektoch – ale integrácia s build systémami je veľmi jednoduchá, pretože na skomplikovanie projektu stačí spustiť msbuild.exe z príkazového riadku.

Priamu podporu pre MSBuild má CruiseControl.NET a aj TeamCity a samozrejme Team Foundation Server (a určite aj ďalšie systémy, ja však poznám iba tieto).

NoSQL Is Hard (Stack Overflow Architecture)

August 8th, 2010

Vyberám zaujímavú časť o NoSQL databázach z článku Stack Overflow Architecture.

The biggest problem of all is that transactions can not span arbitrary boundaries. There are no ACID guarantees beyond a single record or small entity group. Once you wrap your head around what this means for the programmer it's not a pleasant prospect at all. References must be manually maintained. Relationships must be manually maintained. There are no cascading deletes that act correctly during a failure. Every copy of denormalized data must be manually tracked and updated taking into account the possibility of partial failures and externally visible inconsistency.

All this functionality must be written manually by you in your code. While flexibility to write your own code is great in an OLAP/map-reduce situation, declarative approaches still cover a lot of ground and make for much less brittle code.

What you gain is the ability to write huge quantities of data. What you lose is complacency. The programmer must be very aware at all times that they are dealing with a system where it costs a lot to perform distribute operations and failure can occur at anytime.

Unit testing videá

March 6th, 2010

Na konferencii NDC2009 vystupoval aj Roy Osherove, ktorý vie celkom pekne prednášať o unit testingu. Video záznam z konferencie je dostupný na blogu MSDN UP North vo forme torrentu. Odporúčam pozrieť si jeho prezentácie, na ktorých predstavuje Test Driven Development, ukazuje hlavné best practises pri písaní unit testov a taktiež objasňuje mockovanie.

Konfigurácia web aplikácií vo VS 2010

February 14th, 2010

Veľmi príjemnou zmenou v ASP.NET 4 je nový web.config súbor, ktorý podstatne schudol a normálne obsahuje iba 2 potrebné direktívy. Od .NETu 2.0 web.config postupne rástol s každou novou verziou (3.0, 3.5, 3.5 SP1), pretože pôvodný machine.config z 2.0 verzie sa nemenil, ale nové funkcie a ich nastavenia pribúdali rapídne.

Všetko čo potrebujeme určiť je použitá verzia frameworku a nastaviť IIS, aby používal ASP.NET moduly.

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>

Druhou novinkou je správa rôznych konfigurácii web aplikácie priamo v projekte. Doteraz bol v projekte jeden Web.config súbor, ktorý sa používal hlavne počas vývoja a pri nasadení aplikácie do produkčného prostredia bolo potrebné vytvoriť iný konfiguračný súbor a ten udržiavať samostatne. Problém bol aj s verziovaním nastavení ktoré mal každý vývojar iné. Teraz máme k dispozícii transformačné konfiguračné súbory.

Visual Studio v nových projektoch vytvorí základný Web.config súbor a k nemu dve ďalšie verzie: Web.Debug.config a Web.Release.config. Základný konfiguračný súbor sa použivá rovnako ako doteraz – nastavíte v ňom všetko potrebné pre beh webovej aplikácie. Nové Debug a Release konfiguračné súbor slúžia na popísanie zmien v ladiacej a produkčnej verzii. Ich syntax je presne taká istá ako v normálnych Web.config súboroch. Používajú však XML-Document-Transform rozšírenie, čo sú špeciálne XML atribúty, ktoré určujú, ako budú zmeny aplikované.

Transformácie XML dokumentu umožňujú pridať či odstrániť určité XML elementy a atribúty, nahradiť celý XML element úplne novým elementom, ale aj využiť XPath výrazy na definovanie podmienok, za akých má dôjsť z aplikovaniu zmi­en.

Typicky je teda v Release verzii odstránený debug="" atribút a nastavený connection string na produkčnú databázu:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
  <add name="MyDB"
    connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

Šablóna pre HelpStudio 3 založená na MSDN Lightweight štýle

November 17th, 2009

Hľadal som spôsoby ako jednoducho písať a spravovať dokumentáciu k softvérovému projektu. DocBook som hneď obišiel, keďže sa mi nechcelo písať ručne XML značky. Preferujem, aby som hneď videl naformátovaný výsledok (potrebujem „Word experience“). Visual Studio 2005 SDK obsahuje HelpStudio Lite, čo je voľne dostupná verzia WYSIWYG editora dokumentácie, ktorý dokáže vygenerovať MSHelp 2.x súbory (to sú .HxS a podobné balíčky dostupné s Visual Studiom 2005 a 2008 v ktorých je dokumentácia a prezerajú sa pomocou Document Explorera).

MSDN 2010 Template for HelpStudio 3

Druhá moja požiadavka bola môžnosť upraviť si výstup tak, aby pripomínal nový MSDN Lightweight štýl – ten fialový branding MSDN knižnice. HelpStudio Lite umožňuje vytvoriť si vlastné šablóny a štýlovanie pre HTML stránky, ale aj podporné súbory pre MSHelp (index dokumentov, navigácia, atď.). Šablóny sú obyčajné HTML súbory s vloženými špeciálnymi značkami označujúci miesta, kde sa majú vložiť údaje z dokumentácie. Samotné dáta sú uložené v HelpStudio projekte – .hsp – čo je XML súbor obsahujúci celú vytvorenú dokumentáciu.

<!--DXMETADATA start type="Stylesheets" --><!--DXMETADATA end-->
<!--DXMETADATA start type="ProjectTitle" -->Project Title<!--DXMETADATA end -->

Šablóny sa v pohode dajú upravovať v editore ktorý je súčasťou HelpStudia. Ja som však využil Dreamweaver, lebo sa v ňom oveľa ľahšie čistil kód a robili štýly.

Nevýhoda Lite verzie je nutnosť výstupu iba do MSHelp 2.x verzie. HS 3 vie spraviť aj HTML výstup. Je to však také krkolomné: treba vypnúť zmazanie vygenerovaných HTML súborov. Balíčky MSHelp totiž obsahujú HTML dokumenty a HS v prvej časti kompilácie vygeneruje HTML obsah a ten v druhej fáze spojí do balíčka .HxS. S prechodom na HS 3 prišli aj trošku problémy: najprv nedokázal rozpoznať moju šablónu, pretože config.xml súbor obsahoval starú definíciu šablóny a HelpStudio ju nevie automaticky prekonvertovať. Druhý problém bol podobný. Definícia tzv. HTML Scraps je síce stále uložená v .txt súbore ale z textovej definície prešli na nový XML formát a síce šablóny fungovali s pôvodnou verziu, niektoré premenné generovali len tak rôzne XML fragmenty do HTML kódu.

Samotnú šablónu som uverejnil na Google Code hostingu ako hs3msdn2010tem­plate projekt pod BSD licenciou. Ako verziovací systém som zvolil Mercurial, pretože si myslím že umožní prípadným používateľom tejto šablóny oveľa jednoduchšie lokálne verziovanie kódu. Stačí si stiahnuť binárky a zadať tento príkaz na „naklonovanie“ zdrojákov:

hg clone https://hs3msdn2010template.googlecode.com/hg/ hs3msdn2010template

Síce HelpStudio Lite a 3 má veľkú výhodu vo vizuálnej editácie dokumentácie, slušné HTML editory, kontrolu pravopisu, rôzne podporné nástroje a jednoduché rozhranie, má aj veľa nevýhod a problémov: nezdokumentované šablóny, kompilácia je nechutne pomalá, občas padne a predávajú ho za nekresťanských cca 350? za 1 licenciu. Preto teraz študujem možnosti projektov Sandcastle a DocProject. Ale o nich nabudúce.