Nie je e-sluzba ako e-sluzba

Ako asi ako kazdy mam rad dobre sluzby. Za tych par rokov, co sa pohybujem v svete IT som si zvykol pozerat (hlavne) na e-sluzby o nieco kritickejsie ako na ostatne. Je to zrejme najma tym, ze vidim casto ten potencial, ktory v nich je. Z domu si mozeme objednat od noveho auta cez hotel v Tatrach az po kilo pomarancov. K tomu nam sikovny reklamny server ponukne cipkovane spodne pradlo. Preco? Lebo je to pohodlnejsie, rychlejsie, spolahlivejsie. Dnes to uz nie je ziadna “geekovina” ako pred par rokmi objednat si napriklad vstupenku na koncert prave cez web. Takuto chybu som urobil aj ja. Mnozstvo organizatorov voli ako jedineho prave internetoveho predajcu (zvacsa toho najvacsieho). Takze clovek si listky osobne uz objednat ani nemoze. Ak by sa predavali listky aj osobne, zvacsa systemy aj tak nie su prepojene a hladisko je rozdelene podla sektorov alebo radov na cast predavanu predajcom a cast predavanu organizatorom. Najst teda na poslednu chvilu viac listkov pohromade nie je prakticky mozne, kedze volne miesta su fragmentovane. Toto su ale vsetko relativne zlozite ulohy a povedzme si – sme maly a “specificky” trh.

Co sa mi stalo ale minulu sobotu, to nedokazem pochopit. Objednal som si listky na koncert cez internet. Osobne som ich zaplatil a vyzdvihol v stanku predajcu. Po prichode na miesto koncertu nas vsak cakal iba nic netusiaci vratnik. Cez mobil som si na stranke predajcu zistil, ze uz 10 dni je koncert v kolonke zrusenych koncertov. Naozaj som nechcel uverit tomu, ze hoci maju 10 dni informaciu o zrusenom koncerte, nedokazali ma mailom (ktory je nutnou podmienkou registracie) upozornit na zmenu v programe. Vyrobit skript, ktory by rozposlal aspon informaciu o zmene s linkou na web by netrvalo dlhsie ako 2-3 hodinky a stovky ludi rocne by si mozno nepovzdychli nad kvallitou e-sluzieb na Slovensku.

Posted in Nezaradené | Leave a comment

MTM – Flow3

V pondelok 16. 1. 2012 sa opäť konalo už 6. stretnutie Monogram Tech Mondays. Senior PHP programátor z PHP oddelenia Ondrej Hatala nám predviedol novinky v novom PHP frameworku Flow3.

Slideshow prezentacie si mozete pozriet tu

Posted in Monogram Tech Mondays, Život v Monograme | Leave a comment

MTM – Windows 8

V pondelok 21. 11. 2011 sa konalo 5. stretnutie Monogram Tech Mondays. Kolega zo C# oddelenia Daniel Turan nam ukazal Windows 8 a nove moznosti pre C# a C++ programatorov (Metro UI, WinRT API, spolupracu C#, C++ a JavaScriptu).

Slideshow prezentacie si mozete pozriet tu

Posted in Monogram Tech Mondays, Život v Monograme | Tagged | Leave a comment

MTM – LINQ, SCRUM

V pondelok 12. 9. sa konal uz v poradi 4. stretnutie Monogram Tech Mondays. Temy boli trochu jednoduchsie ako v minulosti. Ja som ukazal, co je to LINQ (http://msdn.microsoft.com/en-us/library/bb308959.aspx). Nie je to najnovsia technologia, ale v inych jazykoch ako C# je nieco podobne stale malo zname. Miso Vilagi mal prezentaciu o SCRUM (http://en.wikipedia.org/wiki/Scrum_%28development%29) – metodologiu agile developmentu.

draft mojej prezentacie: LINQ

Posted in Monogram Tech Mondays, Život v Monograme | Leave a comment

MTM 1

Prvy MTM je uspesne za nami. Ucast bola vyborna. Atmosfera este lepsia. Prebrali sme okrem hlavnych tem (Git a Redis) aj vselico okolo toho, co bolo aj cielom stretnutia. Tesim sa teda na dalsie stretnutie.

Moja prezentacia k teme Redis v ladeni Mythbusters REDIS

Tomajova prezentacia o Git-e

Posted in Monogram Tech Mondays, Programovanie, Život v Monograme | Leave a comment

Monogram Tech Mondays

Zdravim vsetkych monogramakov,

som rad, ze sa nasa spolocnost streta stale s novymi vyzvami a reaguje na ne pouzitim novych rieseni. Ze to nie je len moj nazor potvrdzuje ocenenie, ktore sme nedavno ziskali (http://www.monogram.sk/novinky/ziskali-sme-ocenenie-podnikatel-roka-2010-v-oblasti-inovacii.html). Urcite nemalu zasluhu na tom ma fakt, ze velku cast zamestnancov tvoria studenti. Prave v studentskom obdobi ma kazdy najviac casu a tiez chuti skusat nove veci (nie len zo sveta IT :-) ).

Rozhodli sme sa tomuto prudu napadov dat priestor a preto by som Vas rad pozval na prve stretnutie Monogram Tech Mondays, ktore sa uskutocni uz tento pondelok 20.6. o 17:00 vo velkej zasadacke. Odhadovany koniec je do 18:00, zalezi od aktivity v diskusii. Ucast je dobrovolna a nie je sucastou pracovneho casu.

Prve dva prispevky bude mat Tomaj (Git) a ja (Redis).

Kazdy prezentujuci bude mat 15 minut na oboznamenie s vybranou technologiou alebo temou.
Nasledovat bude 5-7 minutova diskusia, kde sa zhodnoti hlavne moznost pouzitia v nasich projektoch.
Prezentovat moze ktokolvek. Prezentacia je dobrovolna, ale bude hodnotena kladne v mesacnom hodnoteni a teda sa moze odrazit aj na plate.
Sucastou prezentacie by mal byt aj blogovy prispevok k teme.

Verim, ze sa tieto pondelky stanu zvykom, nezaberu viac ako napriklad precitanie dsl.sk a prinesu napady na premyslanie.
Dalsi zaujemcovia o prezentacie sa prosim hlaste u mna, nech mozem vyhlasit co najskor dalsi termin.

Tesim sa na Vas
Lubo

Posted in Monogram Tech Mondays, Život v Monograme | Leave a comment

to 64bit or not to 64bit

64 bitový windows tu máme už nejaký ten piatok, ale stále ma dokáže udiviť niektorými vlastnosťami. Písať o tom, aké sú rozdielne klasické Win32 DLL a to aj systémové asi nemá ani zmysel. Pod 64 bitovými windowsmi (tým viac server edition) len ťažko rozbeháte napríklad náhľady videa v exploreri. Našťastie C# je na tom o niečo lepšie.

64 bit + C#

Aplikácia pod .NET sa snaží vždy bežať „čo najlepšie“ (čo je chválitebné), preto sa pri prvom spustení sama prekompiluje podľa dostupného prostredia (verzie OS, procesora, nainštalovaných frameworkov atď.). Zožere nám to nejaké to miesto na systémovom disku a trochu času, ale druhý krát sa už spúšťa v skutočnosti kópia z cache. Ak teda spustíme “hello world” pod 64 bit OS, bude sa spúšťať ako 64 bitový proces. Čo ak ale využívame 32 bitové DLL knižnice? Tie musia bežať pod 32 bitovým procesom (nemôžeme mat časť procesu 32 bitovú a časť 64). Našťastie môžeme povedať celému .NET procesu, aby bol 32 bitový a takto zachrániť aj tieto postaršie knižnice.
Nastavíme to v Properties aplikácie (môžeme aj assembly, ale dôležité je to hlavne v aplikácii, inde necháme Auto).

Aké jednoduché… by to mohlo byť

Väčšinou je to naozaj až také jednoduché. Stále ale niečo môže vyskočiť. Napríklad si treba dať pozor, že adresár C:\Windows\System32 smeruje do iného adresára pod 32 bitovým a 64 bitovým procesom (v tom istom case pod tym istym OS).
Ďalším problémom je IIS, ktorý sa nedá úplne jednoducho prepnúť do 32 bitov, ale je to možné.

Posted in Nezaradené, Programovanie | Tagged | 1 Comment

WPF: Farba textoveho kurzora

Zmenit farbu kurzoru v TextBox-e nie je take jednoduche, ako by sa zdalo. Je to preto, ze WPF sa snazi tuto farbu udrziavat automaticky kontrastne ku farbe pozadia textboxu. Prave tuto vlastnost mozeme vyuzit

<Style TargetType="{x:Type TextBox}">
            <Setter Property="KeyboardNavigation.TabNavigation" Value="None" />
            <Setter Property="FocusVisualStyle" Value="{x:Null}" />
            <Setter Property="AllowDrop" Value="true" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Grid>
                            <Border x:Name="Border” BorderThickness="2"  SnapsToDevicePixels="True"  Padding="2" CornerRadius="2">
                                <ScrollViewer Margin="0" x:Name="PART_ContentHost" Style="{DynamicResource SimpleTextScrollViewer}"  />
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Background" Value="{DynamicResource DisabledBackgroundBrush}" TargetName="Border" />
                                <Setter Property="BorderBrush" Value="{DynamicResource DisabledBackgroundBrush}" TargetName="Border" />
                                <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Zdroj: Lester’s WPF\SL Blog

Posted in Programovanie, WPF | Tagged | Leave a comment

Rozdelenie app.config do suborov podla sekcii

Aj o trochu vacsia aplikacia v .NET si vyzaduje aspon niekolko nastaveni, ktore by sme radi zmenili uz v skompilovanom kode. Existuje niekolko moznosti, ako tieto nastavenia ulozit v konfiguracnych suboroch alebo inom mieste. Asi najstarsi a mozno najjednoduchsi je pouzit subor app.config (web.config). Problem pouzivania tychto suborov je, ze pri vacsej aplikacii sa subor nafukne do neprehladnych rozmerov. Skusme ho teda rozdelit do viacerych suborov podla Section ku ktorej patria.

V app.config pridame do configuration nody:

<configSections>
 <sectionGroup name="customSettings">
 <section name="gameParts" type="MyClasses.GamePartsSection, MyAssemblyName"/>
 </sectionGroup>
</configSections>

Dalej samotne nastavenie (tiez v app.config)

<customSettings>
 <gameParts configSource="GameParts.config" />
</customSettings>

V subore GameParts.config bude povodny obsah gameParts nody.

<?xml version="1.0" encoding="utf-8" ?>
<gameParts periodName="Tretina">
  <times>
    <add name="Play" value="-0:20:00"/>
    <add name="Intermission" value="0:18:00"/>
    <add name="Overtime" value="0:5:00"/>
  </times>
</gameParts>

Pre to, aby nam tato sekcia vobec fungovala potrebujeme este vyrobit triedu

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
 
namespace MyClasses
{
  public class GamePartsSection : ConfigurationSection
  {
    [ConfigurationProperty("times", IsDefaultCollection = true)]
    public NameValueConfigurationCollection GamePartsTimes
    {
      get
      {
        return (NameValueConfigurationCollection)base["times"];
      }
    }
 
    [ConfigurationProperty("periodName")]
    public string GamePartName
    {
      get
      {
        return (string)base["periodName"];
      }
    }
  }
}

Cele to vytiahneme takymto kodom.

GamePartsSection section = ConfigurationManager.GetSection("customSettings/gameParts") as GamePartsSection;
      if (section != null)
      {
        var gamePartsTimes = section.GamePartsTimes;
        var gamePartName = section.GamePartName;
        //... a ulozime si to napr. do statickych premennych
      }

Vyhoda pouzivania vlastnych Section oproti systemovej sekcii appSettings je v oddeleni semantickych celkov, moznosti pouzivania inych typov ako len string a vyssej modularite. Mnozstvo kodu na to potrebne je tiez minimalne. Ked si pridame moznost vynat si celu sekciu do ineho suboru, dostaneme vcelku pouzitelny system.

Posted in Nezaradené, Programovanie | Tagged | Leave a comment

WPF Virtual ListBox

Problém:
Často sa stáva, že niečo ide krásne, keď máme 100 prvkov, ale pri 1000 prvkoch, už je to zabité. Rovnaký problém som mal nedávno pri jednej WPF aplikácii. V zozname aktivít, ktore bolo nutné s 5 sekundovou periodicitou obnovovať bolo nutné zobraziť niekoľko stoviek záznamov.

Dôvod problému:
Pri zmene nejakého prvku v tomto zozname si musí WPF prekresliť (preusporiadať) všetky prvky, čo mu samozrejme trva veľmi dlho a žere CPU. Uložený layout tiež zaberá nejaké to miesto v pamäti.

Riešenie
Našťastie som presne tento problém kedysi riešil v jednej databáze návodov a cheatov (kde sa ich zobrazovalo niekoľko desiatok tisíc). Bola to Win Forms aplikácia. Tam našťastie umožňuje Windows chápať listbox ako virtuálny = kóder rieši iba počet prvkov a aktuálne zobrazené prvky. Ostatné prvky sa ani nezobrazujú, ani nie su v pamäti UI.

Riešenie ala WPF
Veľmi jednoduché – namiesto StackPanel containera použijem VirtualizingStackPanel. Ten sa postará o všetko.

Iné riešenie by bolo napr. nevymazávať prvky, iba ich zamienať a iba v prípade zmeny počtu ich pridávať alebo uberať – ak sa však tento počet mení často, tak sme si veľmi nepomohli + niektorých problémov sme sa stále nezbavili – aj tak ide o relatívne účinný spôsob

Nejaký benchmark

zoznam v “idle” stave CPU
bez optimalizacie 40%
s optimalizaciou cez “prepisovanie” prvkov 20%
VirtualizingStackPanel 10%

Takže zhruba 4-násobné urýchlenie pri cca 1000 položkách – čo je ale dôležité, že tento čas uz bude zhruba konštantný pri akomkoľvek počte prvkov. Aj keď neplatí to tak celkom. Stále hovoríme o “idle” stave. Ak začnem scrollovať v listboxe, tak CPU utešene rastie. Potom mi nezostane nič iné, ako poobzerať sa po iných urýchleniach, ale o tom niekedy nabudúce.

Záver

Odporúčam použivať pri všetkých relatívne dlhších zoznamoch vo WPF. Veľa muziky zadarmo.

Posted in Nezaradené, Programovanie | Tagged , | Leave a comment