WHAT'S NEW?
Loading...
Eraser Logic Control 3 was for the first time sucesfully installed in a O2 Arena, Prague where it is controlling and supervising over 170 eraser light units. This application was developer using .NET and WPF, WCF technologies.

Photo from director's room installation - before first startup

ELC 3 application screenshot
The ELC 3 application can be also controlled via external IO module, iPAD or DMX.
To takhle jednoho slunného prosincového dne jsem se rozhodl, že si nakreslím obrázek. Předtím jsem zkoušel pouze něco jednoduchého v tužce, oko, Benátky. No nebylo to nic moc ale dalo se na to dívat :-). Ale tentokrát to bylo jiné musel jsem něco nakreslit. Ta touha vevnitř byla neuprosná a tak jsem se vydal do obchodu s pár korunama a po předchozích krátkých studiích na internetu jsem se pro začátek rozhodl vydat se napospas akrylovým barvám a nejlevnějším školským štětcům, které pravda zanechaly nemálo svých štětin na papíře. 
Byl prosinec a tak jsem to zkusil prosincově...níže můžete vidět výsledek mého snažení. Po nakreslení těchto dvou obrázku se dostavila jistá úleva ale mám tušení, že to nebude na dlouho...
No jestli máte k těmto obrázkům co říct pište, smějte se, radujte se, nadávejte, když to ve Vás cokoliv vyvolá budu rád. 


Zimní les

Samota


Some time ago I started to use a great project called Caliburn.Micro as a supporting MEF and MVVM framework for one of the bigger projects, I'm working on.
It is a great project that help you to create very loosely coupled code in your project.
During the work on the project one of the first things that hit me and I wasn't able to find any clear solution to  it was how to set Caliburn's convention to set button's content (Caption) and leave it's natural action convention (like action method call and Can property for availability selection).
I chose a convetion to have:

  • every button's content save in ViewModel variable BtnName_Content
  • action method BtnName()
  • availability property in CanBtnName
Maybe somebody else will require similar function, so here is the source code for ViewModel action and property binding convention setting that works as described above. I put this code in my Bootstraper.cs file.

 private void setupElementConventions()  
     {  
       ViewModelBinder.BindActions += (namedElements, viewModelType) =>  
       {  
         var methods = viewModelType.GetMethods();  
         var unmatchedElements = namedElements.ToList();  
         foreach (var method in methods)  
         {  
           var foundControl = unmatchedElements.FindName(method.Name);  
           if (foundControl == null) { continue; }  
           if(!(foundControl is ButtonBase))  
             unmatchedElements.Remove(foundControl); //Remove from named elements only non button elements  
           var triggers = Interaction.GetTriggers(foundControl);  
           if (triggers != null && triggers.Count > 0) { continue; }  
           var message = method.Name;  
           var parameters = method.GetParameters();  
           if (parameters.Length > 0)  
           {  
             message += "(";  
             foreach (var parameter in parameters)  
             {  
               var paramName = parameter.Name;  
               var specialValue = "$" + paramName.ToLower();  
               if (MessageBinder.SpecialValues.ContainsKey(specialValue))  
                 paramName = specialValue;  
               message += paramName + ",";  
             }  
             message = message.Remove(message.Length - 1, 1);  
             message += ")";  
           }  
           Message.SetAttach(foundControl, message);  
         }  
         return unmatchedElements;  
       };  
       ViewModelBinder.BindProperties += (namedElements, viewModelType) =>  
       {  
         var unmatchedElements = namedElements.ToList();  
         foreach (var frameworkElement in namedElements)  
         {  
           var contentPropertyName = frameworkElement.Name + "_Content"; // Nastavení vazby pro ButtonName_Content pro Content property elementu Button  
           var contentProperty = viewModelType.GetPropertyCaseInsensitive(contentPropertyName);  
           if (contentProperty != null)  
           {  
             unmatchedElements.Remove(frameworkElement); // Odstraň použití element ze seznamu named elementů  
             var convention = ConventionManager.GetElementConvention(typeof(ButtonBase));  
             ConventionManager.SetBindingWithoutBindingOverwrite(  
               viewModelType,  
               contentPropertyName,  
               contentProperty,  
               frameworkElement,  
               convention,  
               convention.GetBindableProperty(frameworkElement));  
           }  
         }  
         return unmatchedElements;  
       };  
     }  

Dnes jsem v rámci tvorby jednoho projektu potřeboval do programu EAGLE pro návrh desek plošných spojů vložit LCD displej s 8. sloupci a 2. řádky (ATM0802A), který se prodává ve firmě GME. Jako vždy nejdříve přišel na řadu google, když jsem zjistil, že strejda google nepomohl rozhodl jsem se knihovnu pro tento displej vytvořit. V příloze si ji můžete stáhnout a volně využívat.
JJ_lcd.lbr (U tohoto souboru je třeba smazat koncovku .xls (kvůli zabezpečení, který nedovolí nahrát soubor s příponou .lbr))

Dalším problémem během skoro nekonečné kompilace modulu matplotlib byla chyba o neexistujícím symbolu Py_InitModule4, která je zapříčiněna nesprávnou detekcí 64 bitového prostředí pro jiné kompilátory než jsou kompilátory od Microsoftu. Chybí definice symbolu -DMS_WIN64 a kompilátr si mylně myslí, že chceme v 32. bitovou knihovnou pythonu kompilovat 64. bitový modul. Řešení je poměrně jednoduché a stačí vám k tomu patch, který upravuje obsah souboru pyconfig.h. Celý problém a jeho řešení je popsáno zde: (http://bugs.python.org/issue4709)

Dnes jsem pokračoval v instalaci svých oblíbených vývojových nástrojů na svůj nový notebook Lenovo S205, kde jsem nainstaloval Win7 64. bitovou verzi. Při instalaci pythonu a dalších knihoven, které používám mě čekali na této cestě dobrodružství, které jsem opravdu nečekal. A nejednou jsem musel zažehnout oheň a pořádně rozpálit své mozkové závity a závity strejdy googla abych dospěl ke zdárnému konci. Verzi pythonu používám 2.6.7 a easy_instal z package distribute (http://pypi.python.org/pypi/distribute).
První nemilé překvapení mne čekalo při instalaci numpy, které je nutným při instalaci matplotlib. Tento balík jsem po chvilce hledání našel i pro 64 bit verzi windows na stránkách Christofa Goelkeho, Unofficial Windows Binaries for Python Extension Packages (http://www.lfd.uci.edu/~gohlke/pythonlibs/)
Další nezbytnou součástí pro instalaci matplotlib byla knihovna freetype. V aktuální verzi 2.6.4. K této verzi ani žádné předchozí strejček google verzi pro 64 bitové windows nenašel a tak jsem se rozhodl pro vlastní kompilace ze zdrojových souborů pod mingw64, které jsem získal ze stránek projektu MinGW-w64 (http://mingw-w64.sourceforge.net/) přesněji tedy personal build od uživatele sezero (http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/sezero_20110510/).
Instalace a konfigurace mingw64 a msys-w64 je na další článek, který budu brzy publikovat (mingw64). Binární soubory Freetype2 ve verzi 2.6.4 zkompilované gcc, MinGW-w64 dávám k dispozici a jsou zde ke stažení.
Po kompilaci a instalaci 64-bit verze freetype2 bylo ještě zapotřebí doinstalovat microsoft Visual C++ 2008 redist knihovnu msvcr90.dll ale opět v 64-bitové verzi. Tato knihovna se nenácházi kupodivu ani ve Windows\system32 ani ve Windows\systemWoW64 ale ve Windows\winsxs, přesný adresář a postup pro úspěšnou instalaci je popsán na stránkách biopythonu (http://www.biopython.org/wiki/64-bit_Windows_Biopython)
Dále samozřejmě potřebujeme knihovny pythonu, které nejsou v mingw k dispozici a dll verze pro kompilaci nestačí. Je zapotřebí pomocí nástroje gendef či pexports vytvořit import library (libpython.a), která kompilátoru už napoví jak přistoupit do rutin obsažených v dll knihovně. Program gendef.exe je už součástí mingw-w64, takže doporučiji použít následující postup, kde pythonXX představuje Vaši verzi pythonu (python27.dll) pro verzi 2.7
gendef.exe pythonXX.dll
dlltool.exe -D pythonXX.dll -l libpythonXX.a -d pythonXX.def
copy libpythonXX.a MINGW64_PATH\lib
V případě, že by se kompilace někomu nepovedla klidně napište do komentáře svůj mail a rád poradím, případně zašlu zkompilovanou knihovnu.
Tuto knihovnu je dále nutno zkopírovat do adresáře, kde máte nainstalován pyton/libs, neboť je při kompilaci a hledání knihoven prohledáván např. tento adresář.
Dalším problémem během kompilace je chyba o neexistujícím symbolu Py_InitModule4, která je zapříčiněna nesprávnou detekcí 64 bitového prostředí pro jiné kompilátory než jsou kompilátory od Microsoftu. Chybí definice symbolu -DMS_WIN64 a kompilátr si mylně myslí, že chceme v 32. bitovou knihovnou pythonu kompilovat 64. bitový modul. Řešení je poměrně jednoduché a stačí vám k tomu patch, který upravuje obsah souboru pyconfig.h. Celý problém a jeho řešení je popsáno zde: (http://bugs.python.org/issue4709)
Dalším problémem byl chybějící hlavičkový soubor png.h je třeba doinstalovat libpng.

Dnes jsem potřeboval zkompilovat freetype2 knihovnu pod windows 7 (64bit), protože ji dále potřebuji pro kompilaci matplotlib v 64 bitové verzi. Vzhledem k tomu, že je tohlé mé prví setkání s 64. bitovou verzi systému windows a vidím, že strýček google je vcelku bezradný co se týče nalezení, některých knihoven, které používám pro 64bitovou verzi systému pro win7, řekl jsem si, že by bylo dobré umět si zkompilovat vše co potřebuji a tak začalo mé dobrodružství s 64 bitovým windows 7.

Řekl jsem si, že když už mám tu 64 bitovou verzi tak se nebudu vracet k 32 bitové verzi což jsou řešení poměrně často doporučována na různých fórech v případě chyby typu nekompatibilní knihovny.

MinGW-w64 (http://mingw-w64.sourceforge.net/)

Jako první bylo třeba stáhnout a nainstalovat 64. bitovou verzi mingw, která obsahuje všechny gnu nástroje potřebné ke kompilaci v 64 bitovém prostředí. Díky personal buildu uživatele sezero je instalace pouhá otázka zkopírování již zkompilovaných programů a knihoven do příslušného adresáře. Personal build si můžete stáhnout tady (http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/sezero_20110510/)

MSys-w64 (http://sourceforge.net/apps/trac/mingw-w64/wiki/MSYS)

Dále potřebujeme ke stažení tzv. Minimal System, který poskytuje základní unixové nástroje pro kompilaci, v 64-bitové verzi. Tento balík je opět v binární podobě ke stažení ze stránek uvedených u nadpisu. Tento balík obsahuje také bash, v kterém bude kompilace probíhat.

Freetype2 (http://www.freetype.org/index2.html)

Jako další následovalo stažení zdrojových souborů knihovny freetype2 ke kompilaci http://sourceforge.net/projects/freetype/files/freetype2/. Po stažení rozbalíme do libovolného adresáře do, kterého se poté přes bash dostaneme a spustíme samotnou kompilaci. Při kompilaci mi vyskočila stejně asi jako dalším lidem chybová hláška nasledována mnoha dalšíma podobnýma hláškami.
„libtools += o command does not exis“
Oprava tohoto problému je velice jednoduchá. Problém je v tom, že skript, který provádí makefile ma na začátku #!\bin\sh a tento jednodušší shell nepracuje při kompilaci správně. Pokud v bashi napíšeme následující příkaz, dojde k vyřešení problému.
„rm /bin/sh && ln -s /bin/bash /bin/sh“
Po této úpravě by kompilace mělo už proběhnout v pořádku. Tak hodně štěstí a pevné nervy.