Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc

Optimalizace množství přenášených dat v ASP.NET - dokončení

Dopsal jsem pokračování článku o svých zkušenostech s minimalizací přenášených dat v ASP.NET. Tato druhá část se zabývá tématy optimalizace na úrovni IIS, je tedy použitelná i pro jiné serverové technologie, nejen ASP.NET.

Optimalizace množství přenášených dat v ASP.NET - II

Posted by nikola | 131 Comments

Optimalizace množství přenášených dat v ASP.NET

Na blogu jsem uveřejnil první díl článku popisujícího mé zkušenosti s minimalizací přenášených dat v ASP.NET. Díky popisovaným metodám se podařilo snížit množství přenášenách dat o více než 90% (bez úprav zdrojového kódu) a dramaticky tak zrychlit přístup na intranetové aplikace pro vzdálené uživatele. První díl se zabývá technikami pro ASP.NET, druhý obecnější bude o IIS. Pokračování vyjde příští týden.

Optimalizace množství přenášených dat v ASP.NET

Posted by nikola | 139 Comments

Programování pro Arduino

Pokud vám pojem Arduino nic neříká, jedná se o jednoduchou embedded platformu pro vývoj aplikací interagujících s naším analogovým světem. Takže až si budete chtít odpočinout od všech Enterprise Libraries, Web Serviců a replikací SQL Serveru a kouknout na něco nepoměrně jednoduššího, ale o to víc zábavného, jste srdečně zváni.

První zkušební projekt testující vstupy a výstupy

Úvod do HW a SW Arduina

Co mne k tomu vedlo?

Posted by nikola | 120 Comments

Stěhování

V roce 2005 mi Michal Bláha nabídl možnost publikování zde na Vývojáři. Byl to můj první blog a já po několika článcích zjistil, že stále častěji sklouzávám k off-topic tématům. A tak než plevelit tento kvalitní server mými příspěvky mimo mísu, radši jsem přestal psát úplně.

Nakonec jsem nedávno spustil nový blog mimo Vývojáře, který je pokusem o vzkříšení mého psaného exhibicionismu a spíše zde najdete příspěvky neprogramátorské (bez záruky). Jenom pro úplnost, tímto svůj blog na vývojáři neruším, pokud se dokopu k napsání programátorského příspěvku, objeví se tam i tady.

eNTý raNTs

Posted by nikola | 133 Comments
Vedeno pod:

OT: Paintball

Když tak koukám na svých posledních pár příspěvků, tak je to samý OT. A teď tu je další: Paintball

Tedy přesněji pozvánka ke hře. Zvedněte vaše pozadí z kancelářských židlí a pojdťe si to rozdat. Pojdťe konečně rozlousknout nekonečné spory a neplýtvejte přitom argumenty ale municí.

  • C# vs.VB.NET
  • složené závorky na samostatný řádek vs. inline
  • typové prefixy u promněných vs. podtržítka
  • .NET vs. JAVA (ale ti srabové by nepřišli :-)

Termín 30.6. sobota odpoledne. Císařská louka v Praze. Pokud by jste se chtěli zúčastnit, napište mi na nikola.tepper / google.com nebo pod příspěvek do komentářů.

Posted by nikola | 68 Comments
Vedeno pod:

OT: Grindhouse

Možná se k Vám už doneslo, že mimo USA bude nový dvojfilm od Tarantina a Rodrigueze GRINDHOUSE distribuován po částech, tedy zvlášť Planet Terror od Roberta Rodrigueze a zvlášť Death Proof od Quentina Tarantina. Protože patřím k menšině těch, kterým to není jedno, a náhodou mám program, který umí vytvářet animované gify, tak nabízím toto:

Petice proti rozdělení GRINDHOUSE

Posted by nikola | 171 Comments
Vedeno pod:

File > New > Project > "Tobiáš"

 
// version 1.0.0.0
static
void Main(string[] args)
{
    Mother jana = new Mother();
    Father nikola = new Father();
 
    Child tobias = jana.Join(nikola)[0];
    tobias.Sex = Gender.Male;
    tobias.Weight = Unit.FromKg(3.65);
    tobias.Height = Unit.FromCm(51);
 
    while (true) // possible bug here (incorrect condition?), needs review...
    {
        tobias.Scream();
        tobias.Sleep();
        // had to comment out next line, no exception throwing in this version
        // throw new TooManySleeplessNightsException(new object[] {jana, nikola});
    }
}
 
Posted by nikola | 157 Comments
Vedeno pod: ,

Od GE k UI

Ač je tento příspěvek otitulkován krypticky, jeho obsahem je spíše obecné filozofování nad kvalitou software (-u?) než technické ptydepe. Všechno začalo koupí nového bytu a s tím spojené tak nenáviděné papírování. Jednou z důležitých institucí, se kterou jsem vedl papírovou válku, byla i jistá, skoro-nejmenovaná (modří už vědí, ostatní musí ještě chvíli de-kryptovat), banka. Cena nového bytu přesahovala mé současné možnosti a tak jsem se pod vlivem reklamní masáže na hypotéky, jejichž pořízení prý svou jednoduchostí připomíná nákup rohlíku v pekařství, rozhodl půjčit si. Jsa celkem rozmazlován svou stávající bankou (která si za to dost účtuje), očekával jsem podobný přístup i zde. Běda. S tím jak přibývalo množství lejster, které jsem musel k žádosti o úvěr přikládat, přibývalo i absurdit (část z těch papírů byly dokumenty od té samé banky, které banka na základě mé žádosti vydala prodávajícímu, ten je dal mně a já zase zpátky bance), nesmyslů (požadavky na dokumenty, jejichž samotná existence by vedla k zhroucení časoprostoru)  a především přibývalo případů absolutní neschopnosti stran pracovníků banky (nucené založení běžného účtu - samo o sobě absurdní - se neobešlo bez TŘÍ návštěv dvou různých poboček a cca 6 telefonátů).

Protože se toto odehrávalo až v době, kdy byly sepsány všelijaké smlouvy a úpisy a žádosti, změna banky by byla bolestná, ne-li nemožná. Tak jsem nejdřív tiše a poté i nahlas nadával. Přátelé mně uklidňovali a omlouvali GE (sakra, teď sem to prosek :-), že je to dobrá banka, že jsem jen narazil na pitomce, že je to náhoda... a ti opravdoví přátelé nadávali se mnou. Je to všechno možné, třeba jsem opravdu narazil na zaučujícího se nováčka, kterého Ernst Stavro Blofeld vyrazil pro přílišnou krutost. Třeba jsem opravdu propadl dírou v jinak skvělém systému. Ale to je právě ten problém, banka je pro mně přesně taková, jací jsou lidé, kteří ji reprezentují. Je taková, jaké jsou její procesy, které se mne týkají. Uvnitř to může být fantastická organizace, kde spokojení, usměvaví zaměstnanci pilně plní své smysluplné úkoly v dokonale antiseptickém prostředí. Ale dokud bude na svých přepážkách zaměstnávat či tolerovat takové lidi, na které jsem narazil já, budu jí vnímat jako výhradní zastoupení Mordoru v Čechách.

A jak souvisí mé veřejné pranýřování nevinné banky s UI (první technický pojem tohoto článku, programátoři mohou začít číst odsud, ostatní mohou přestat - pokud již tak neučinili dříve, v kterémžto případě je tato poznámka bezpředmětná)? Uživatelé software, který v potu tváře (protože peníze na klimatizaci oddělení vývoje se projedly na bujarém vánočním večírku na který nás "zapomněli" pozvat) tvoříme, neposuzují podle kvality naší architektury (slyšte, slyšte) ani podle počtu použitých design patterns (rouhání!). Naprosto ignorantsky kategorizují SW stylem líbí/nelíbí. Takže si radši koupí aplikaci, kterou tvoří sedm snímků v PowerPointu (s designem Pininfarina) než naši lacinější moudulární aplikaci postavenou na CommerceMax SuperPlatform 2008 XT, napsanou ve WPF, XNA, MHD a dalších (a to i v případě, když čirou náhodou ta naše celkem splňuje jejich požadavky). A i když náhodou koupí tu naši, budeme mít každý den na stole srovnání s PowerPointovou konkurencí, kterou zastupuje ta šarmantní slečna/pán v padnoucím obleku od Gucciho předkládající screenshoty na křídovém papíře.

Až nepříjemně často se setkávám s mnoha fantastickými SW produkty, které však vypadají, že User Interface bylo něco, na co si programátoři vzpomněli až večer před tiskovkou a narychlo ho tvořil "ten student co chodí ve čtvrtek". Mnoho produktů tak zapadá prachem a s nimi i jejich mimořádně nadaní vývojáři a přitom tak dlouho ladili tu synchronizaci vláken! Samozřejmě, že nejde jen o UI, ale i o dokumentaci (pěkný článeček na toto téma napsal včera Jeff Atwood) a o způsob prezentace a prodeje. Jenže na propagaci narozdíl od UI nemáme vliv. A když na něco máme vliv, tak je to taky naše odpovědnost. Takže až se příště budou kolegové v kanceláři hádat, zda použít Observer nebo Memento, jukněte na Váš poslední výtvor, zda je OK vlevo a Cancel vpravo.

Shrnutí pro netrpělivé:

Obal prodává.

Posted by nikola | 74 Comments

Raketoplán o Silvestra nelétá

Pokud máte někdy pocit zmaru nad kvalitou softwaru, který používáte, vězte, že NASA je na tom ještě hůř. Utratit stovky miliard dolarů za vývoj raketoplánu, a pak zjistit, že nemůže létat přes Silvestra, to opravdu naštve. Prostě kalendářový systém v raketoplánu funguje jinak, než v navigačních systémech na zemi a 1.ledna 2007 je pro něj 366-tý den roku 2006.

Na druhou stranu, možná se jedná o nějaký speciální systém, který má zabránit bujarým oslavám na palubě.  Vždyť vzhledem k oběžné rychlosti můžete slavit Silvestra během 24 hodin třeba třikrát.

Posted by nikola | 74 Comments
Vedeno pod:

Hledání ou-tů

Tak jsem v televizi zahlédl reklamu na jakousi novou firmu, O2 (nebo snad ou-tů?). Chtěl jsem si něco o té firmě najít, takže jsem logicky namířil na www.o2.cz. Je to divné, z reklamy se zdálo, že snad nabízejí nějaké služby v oblasti akvaristiky (nebo kynologie?), ale tenhle web vypadá jako velmi amatérský rozcestník a vůbec na něm nejsou žádné bublinky. V reklamě jsem ještě zahlédl další jméno - Telefonica (Možná však jde o tu samou firmu, těžko říct). Zkouším tedy www.telefonica.cz a dozvídám se, že doména je obsazena. Tak nevím, rád bych si třeba od ou-tů koupil nějaké ty kolibříky, ale asi mi není přáno...

Posted by nikola | 140 Comments

OT - učitel češtiny

Tohle jsem našel ráno na dveřích našeho vchodu:

Případný zájemce bude mít asi hodně práce :-)

Posted by nikola | 72 Comments
Vedeno pod:

Pes baskervillský

Za chvíli začíná na ČT1 “Pes baskervillský“. Mne zaujal příslušný filmový plakát, který je k vidění na http://www.tvprogram.cz

Vidíte to taky, nebo se jen vracím do puberty? Což mi připomíná, že jsem cestou domů zase do jednoho šlápnul. Tento týden už asi potřetí, ale tentokrát to byl asi opravdu baskervill.
Milí spoluobčané, když už jste tak krutí ke svým “miláčkům”, které celý den týráte v malých panelákových krabicích, buďte prosím alespoň ohleduplní ke svým sousedům a uklízejte po svých psech jejich H**** !!!
Pro ty kdo to nedělají a dělat nebudou mám připraven krutý link.

Posted by nikola | 139 Comments
Vedeno pod:

Monitoring ASP.NET aplikací

V ideálním světě by vývojář napsal aplikaci, předal ji lidem z Operations, a ti by ji nasadili a spravovali. Veškeré trable s chováním a výkonem aplikace by padaly na jejich hlavu a teprve až by bylo nejhůř, tak by se obrátili zpět na programátory. My však ale nežijeme v ideálním světě (spíše naštěstí než bohužel) a tak musíme mnohdy spravovat (nebo aspoň pomáhat spravovat) i vlastní aplikace (možná je to tak dobře, aspoň trestáme sami sebe, a ne nevinné správce :-).
I v tom ideálním světě bychom ale museli správcům naší aplikace nějak pomoct, minimálně by jim naše skvělá aplikace měla umožnit sledování svého stavu. ASP.NET aplikace jsou zrádné. Většinou jsou hostovány v rámci jiného procesu (aspnet_wp.exe pro IIS5 a w3wp.exe pro IIS6) a zjistit tak jejich stav je obtížné.
Ideálním místem monitorování stavu ASP.NET aplikací je Performance Monitor. Najdeme ho v Control Panels > Administrative  Tools > Performance. Ten nám umožní sledovat performance countery, které můžeme přirovnat k průmyslovým čidlům. Narozdíl od sledování tlaku a teploty válcovací pece (pokud existuje :-), pokud ne, tak bych si ji měl rychle patentovat), performance countery sledují využívání paměti, přístup k disku, vytíženost procesoru a další hodnoty. Mnohé z nich nabízí operační systém a spoustu dalších přibude s každou další nainstalovanou a dobře napsanou službou či aplikací.
Ačkoliv .NET ( a ASP.NET) nabízí myriády performance counterů, všechny se týkají buď obecně .NET CLR nebo ASP.NET jako celku. Pokud na serveru běží více ASP.NET aplikací najednou, těžko můžeme identifikovat v rámci counteru vliv jedné z nich.
Naštěstí systém performance counterů je schopen přidat countery nové a organizovat je do vlastních kategorií. .NET dokonce v rámci System.Diagnostics namespace nabízí managed prostředí pro práci s performance countery. Můžeme si tak přidat vlastní countery a jejich hodnotu přímo nastavovat z naší aplikace. Správce pak může s našimi performance countery pracovat stejně jak je dosud zvyklý, vytvářet logy, definovat alerty a i pro nás vývojáře mohou být takové vlastní countery nedocenitelnými pomocníky při ladění výkonu a hledání úzkých hrdel (možná by se prostě některé terminus technicus neměli do češtiny překládat, z tohohle mi jde mráz po zádech :-).

Performance Monitor

System.Diagnostics
Dvě hlavní třídy slouží pro práci s performance countery. Je to PerformanceCounter, který zprostředkovává práci s konkrétním counterem a PerformanceCounterCategory, což je třídá, sloužící ke správě kategorií counterů.
Většinu metod třídy PerformanceCounterCategory v ASP.NET aplikacích bohužel použít nemůžeme. Při vytváření a správě kategorií je totiž na pozadí manipulováno s klíči v registrech (větev HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services), na což typicky účet, pod kterým ASP.NET běží nemá dostatečná práva a přidělovat je kvůli těmto operacím je zcela zbytečné bezpečnostní riziko.
Vytvoření vlastních kategorií a jejich counterů by tedy mělo proběhnout buď ručně, nebo v rámci jednoduché speciální aplikace, kterou spustí např. administrátor. Velmi jednoduché je to v rámci Server Exploreru ve Visual Studiu.

Performance Monitor

Implementace
Jak tedy pracovat s vlastním counterem z naší aplikace? Řekněme, že bychom rádi zpřístupnili počet aktivních sessions v naší aplikaci. Taková úloha je celkem univerzální a tak by bylo vhodné ji od vlastní aplikace nějak oddělit, aby byla snadno použitelná i jinde. Napíšeme si ji tedy například jako vlastní HttpModul.
V rámci něj budeme odchytávat události Start a End pro SessionStateModule. Uděláme si statickou proměnnou udávající počet sessions. Při startu nové session ji přičteme jedničku a při konci jedničku odebereme. Při každé změně počtu sessions zavoláme metodu, která aktualizuje hodnotu daného counteru.
Vlastní HttpModul implementuje rozhraní IHttpModule. V rámci něj musíme implementovat metodu Init a Dispose. Typicky v rámci Init() zaregistrujeme vlastní logiku pro události BeginRequest a EndRequest třídy HttpApplication (která je předána v Init jako parametr).
SessionStart a SessionEnd však nejsou události třídy HttpApplication, ale jsou ve vlastním modulu, již výše zmíněném SessionStateModule.
V rámci Init, tedy modul najdeme v kolekci Modules a zaregistrujeme jeho události:

public void Init(HttpApplication context)
{
   // get session module
   SessionStateModule sessionState = GetSessionStateModule(context);
   sessionState.Start += new EventHandler(sessionState_Start);
   sessionState.End += new EventHandler(sessionState_End);
}

private SessionStateModule GetSessionStateModule(HttpApplication application)
{
   HttpModuleCollection modules = application.Modules;
   foreach(object module in modules)
   {
      SessionStateModule sessionState = module as SessionStateModule;
      if (sessionState != null)
      {
         return sessionState;
      }
   }
   throw new Exception("SessionState module not found!");
}

SessionStateModule by se dal pravděpodobně nalézt rychleji použitím:

HttpModuleCollection modules = application.Modules;
SessionStateModule sessionState = modules["Session"] as SessionStateModule;

Je ale možné, že se jméno modulu změní; hledáním podle typu si tak spíše zajistíme jeho nalezení a daná operace se bude provádět jen jednou při startu aplikace, takže si můžeme náročnější hledání dovolit.
Předpokládejme, že již máme vytvořenou vlastní kategorii (pojmenovanou například podle aplikace – „NaseAplikace“) a v ní vytvořen counter „ActiveSessionCount“ typu NumberOfItems32 (countery mohou mít mnoho typů – zlomkové, průměrové, časové za vteřinu apod. – NumberOfItems32 je základní typ, ukazující prostý počet „jevů“).
Naše reakce na události Session.Start a Session.End pak bude vypadat nějak takto:

private void sessionState_Start(object sender, EventArgs e)
{
   sessionCount ++;
   UpdateSessionCounter();
}

private void sessionState_End(object sender, EventArgs e)
{
   sessionCount --;
   UpdateSessionCounter();
}

private static void UpdateSessionCounter()
{
   PerformanceCounter counter = new PerformanceCounter("NaseAplikace", "ActiveSessionCount", false);
   counter.RawValue = sessionCount;
   counter.Close();
}

Pak už jen stačí ve web.configu přidat náš HttpModul:

<httpModules>
   <!-- Provides performance counters for application monitoring -->
   <
add  name="PerformanceCountersModule" 
         type="Shared.HttpModules.PerformanceCountersModule, Shared" />
</httpModules>

A nyní můžeme přidat náš nový counter do grafu a sledovat počty sessions. Můžeme si postupně přidat další a další countery, ať už formou našeho HttpModulu, nebo přímo do naší aplikace, pokud budeme chtít sledovat nějaké specifické údaje.
Velmi dobrým zdrojem dalšího studia je pěkná knihovna s článkem Using custom attributes to add performance counters to your application. Pozor ale, v rámci knihovny dochází k vytváření kategorií a counterů a na to ASP.NET nemá právo, jak jsem zmiňoval výše. Doporučuji také přehledný článek na MSDN: How To: Use Custom Performance Counters from ASP.NET.

Zdrojový kód PerformanceCountersModule

Posted by nikola | 45 Comments
Vedeno pod:

Hledáme nového kolegu...

Možná už jste slyšeli o firmě KPMG. Pokud ne, tak vězte, že patříme k „velké čtyřce“, čtyřem největším poradenským společnostem na světě. Pokud by Vás, programátory, lákalo pracovat pro oddělení interního vývoje pro CEE (Central and Eastern Europe), tak máte skvělou šanci. Pro náš vývojářský tým hledáme nového kolegu. Chcete-li se podílet na projektech, které využívají tisíce uživatelů z poboček po celé střední a východní Evropě a které jsou postupně převáděny do nové integrované platformy a umíte

  • .Net - WebForms, WebServices, WinForms,
  • SQL Server,
  • anglicky,


tak neváhejte a pošlete svůj životopis a pár vět o sobě panu Kukanovi na alexandrkukan@kpmg.com

 

Posted by nikola | 164 Comments
Vedeno pod:

Kdo si hraje, nezlobí

Tak pod tohle rčení se podepíšu. A nejen podepíšu, v krátkém článečku vám ukážu, co je příčinou mého současného nezlobení. Varuji vás předem, jste-li hračičkové, už jste je prakticky o tisícovku lehčí :-) Pokud jsem vás neodradil, čtěte!

 

Posted by nikola | 145 Comments
Vedeno pod:
Více článků Další stránka »
 
Vyvojar.cz na prodej!