abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Multimediální server a user space API PipeWire (Wikipedie) poskytující PulseAudio, JACK, ALSA a GStreamer rozhraní byl vydán ve verzi 1.6.0 (Bluesky). Přehled novinek na GitLabu.

    Ladislav Hagara | Komentářů: 0
    dnes 01:11 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.2 a 20.04 OTA-12.

    Ladislav Hagara | Komentářů: 0
    včera 18:00 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.0 otevřeného operačního systému pro chytré hodinky AsteroidOS (Wikipedie). Přehled novinek v oznámení o vydání a na YouTube.

    Ladislav Hagara | Komentářů: 1
    včera 16:00 | Zajímavý software

    WoWee je open-source klient pro MMORPG hru World of Warcraft, kompatibilní se základní verzí a rozšířeními The Burning Crusade a Wrath of the Lich King. Klient je napsaný v C++ a využívá vlastní OpenGL renderer, pro provoz vyžaduje modely, grafiku, hudbu, zvuky a další assety z originální kopie hry od Blizzardu. Zdrojový kód je na GitHubu, dostupný pod licencí MIT.

    NUKE GAZA! 🎆 | Komentářů: 5
    včera 13:33 | IT novinky

    Byl představen ICT Supply Chain Security Toolbox, společný nezávazný rámec EU pro posuzování a snižování kybernetických bezpečnostních rizik v ICT dodavatelských řetězcích. Toolbox identifikuje možné rizikové scénáře ovlivňující ICT dodavatelské řetězce a na jejich podkladě nabízí koordinovaná doporučení k hodnocení a mitigaci rizik. Doporučení se dotýkají mj. podpory multi-vendor strategií a snižování závislostí na vysoce

    … více »
    Ladislav Hagara | Komentářů: 4
    včera 12:22 | Humor

    Nizozemský ministr obrany Gijs Tuinman prohlásil, že je možné stíhací letouny F-35 'jailbreaknout stejně jako iPhony', tedy upravit jejich software bez souhlasu USA nebo spolupráce s výrobcem Lockheed Martin. Tento výrok zazněl v rozhovoru na BNR Nieuwsradio, kde Tuinman naznačil, že evropské země by mohly potřebovat větší nezávislost na americké technologii. Jak by bylo jailbreak možné technicky provést pan ministr nijak nespecifikoval, nicméně je známé, že izraelské letectvo ve svých modifikovaných stíhačkách F-35 používá vlastní software.

    NUKE GAZA! 🎆 | Komentářů: 22
    včera 06:00 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 162 (pdf).

    Ladislav Hagara | Komentářů: 0
    včera 05:55 | IT novinky

    Sdružení CZ.NIC, správce české národní domény, zveřejnilo Domain Report za rok 2025 s klíčovými daty o vývoji domény .CZ. Na konci roku 2025 bylo v registru české národní domény celkem 1 515 860 s koncovkou .CZ. Průměrně bylo měsíčně zaregistrováno 16 222 domén, přičemž nejvíce registrací proběhlo v lednu (18 722) a nejméně pak v červnu (14 559). Podíl domén zabezpečených pomocí technologie DNSSEC se po několika letech stagnace výrazně

    … více »
    Ladislav Hagara | Komentářů: 9
    18.2. 18:33 | IT novinky

    Google představil telefon Pixel 10a. S funkci Satelitní SOS, která vás spojí se záchrannými složkami i v místech bez signálu Wi-Fi nebo mobilní sítě. Cena telefonu je od 13 290 Kč.

    Ladislav Hagara | Komentářů: 8
    18.2. 16:22 | Komunita

    Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Fedora 43 Asahi Remix s KDE Plasma už funguje na M3. Zatím ale bez GPU akcelerace. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (11%)
     (27%)
     (3%)
     (5%)
     (2%)
     (12%)
     (27%)
    Celkem 909 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Jak shodit Visual Studio zkompilovatelným kódem

    10.12.2011 13:08 | Přečteno: 1470× | Zkušenosti | poslední úprava: 10.12.2011 14:02

    Jsem si jistý, že by to mnoho z Vás uvítalo a neváhali byste obětovat svou čest, abyste dokázali kolegovi, že ten Visual Studio šunt od MS nestojí absolutně za nic. Ale jak to udělat, aby pokud možno dlouho nepřišel na polohu zakopaného psa? Na něco jsem přišel, i když úplnou náhodou a mou vlastní blbostí. :-)

    Špatný singleton jako instance

    Nejprve si položte otázku: Používá dotyčný k vývoji WPF nebo Silverlight? Pokud ano, máte práci několikrát ulehčenou, za předpokladu, že aktivně používá MVVM (The Model-View-ViewModel design pattern). Další předpoklad je použití některého z jazyků .NET, já použil C#.

    Podívejme se nejdřív na XAML soubor, ať si to lépe vysvětlíme. Tu hordu definicí na začátku račte klidně přeskočit. Vyvíjím pro Windows Phone 7, čili i tento XAML soubor a celý projekt tomu odpovídají.

    MainPage.xaml

    <phone:PhoneApplicationPage 
        x:Class="SmartDial.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:helpers="clr-namespace:SmartDial.Helpers"
        xmlns:viewmodels="clr-namespace:SmartDial.ViewModels"
        mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" 
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Portrait"  Orientation="Portrait"
        shell:SystemTray.IsVisible="True">
        
        <phone:PhoneApplicationPage.DataContext>
            <viewmodels:MainViewModel />
        </phone:PhoneApplicationPage.DataContext>
        
        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Button Content="Sample button" />
        </Grid>
    </phone:PhoneApplicationPage>
    
    Hlavní pes nechť je zakopán v této poloze:

    Helpers/ContactsCache.cs

    using System;
    
    namespace SmartDial.Helpers
    {
        public class ContactsCache
        {
            protected readonly ContactsCache _instance = new ContactsCache();
            public ContactsCache Instance
            {
                get { return _instance; }
            }
    
            static ContactsCache() { }
            public ContactsCache()
            {   
            }
    }
    
    Tato třída je jedním z návrhů singletonu, neboli třídy, u které chceme, aby měla vždy jen jedinou instanci přístupnou přes ContactsCache.Instance. Ovšem pozor, u konstruktoru mi přebývá klíčové slovo public a mám ještě jednu zradu v klíčových slovech - u _instance a Instance mi chybí static.

    Proč je tak důležité, aby konstruktor singletonu nebyl public? Podívejte se na následující průšvih a spojte si ho s předchozím kódem:

    ViewModels/MainViewModel.cs

    public class MainViewModel
        {
            public MainViewModel()
            {
                this.ContactsCache = new ContactsCache();
            }
    
            public ContactsCache ContactsCache;
        }
    Singleton je obvykle třída navržená s záměrem, aby měla pouze jednu jedinou instanci, tedy u mě Instance. Současný návrh singletonu ovšem umožňuje vytvářet i další instance a společně s tímto kusem kódu způsobí, že po prvotním vytvoření instance třídy se budou neustále vytvářet další instance (taková malá rekurze), čímž dojde k přetečení zásobníku a následně k vyvolání výjimky System.StackOverflowException.

    Důsledky

    Co z toho vyplývá? Pokud je v XAML souboru stránky (nebo okna) navázán ViewModel (viz PhoneApplicationPage.DataContext), který v konstruktoru volá výše zmíněný řádek kódu (new ContactsCache()), Visual Studio a Expression Blend se budou pokoušet načíst strukturu ViewModelu, tedy zavolají konstruktor ViewModelu, ten zavolá zase konstruktor ContactsCache (- poslední krok se opakuje do nekonečna) - a proto po krátké době spadnou. A zase kvůli StackOverflowException. Nejsou ty nové technologie prostě skvělé? :-) A nejlepší je, že kompilátor si něčeho takového ani nevšimne.

    DOPLNĚNÍ: Visual Studio při pádu tímto způsobem prostě zmizí, v event logu sice dostane místečko, ale nic se z toho nedozvíte. Musíte tedy jednou instancí Visual Studia debugovat další instanci Visual Studia, abyste zjistili, co se vlastně stalo. :-D

    A na závěr

    Problém jsem nahlásil na MS Connect a už se jím prý někdo zabývá. Dostali dump soubory a stejný archiv se zdrojákem, který tady tímto teď zveřejňuji. Mimo moji chybu se můžete taky podívat, jak vypadá vývoj na WP7. Projekt je prakticky čistý a obsahuje jen to, co je nutné pro vyvolání chyby.        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    10.12.2011 13:44 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Jak shodit Visual Studio zkompilovatelným kódem
    Když jsme u toho, pokud si někdo chce shodit překladač Javy (taky na stack overflow), ať mu podhodí tohle:
    interface Interface<T> {}
    
    class Bang<T> implements Interface<Interface<? super Bang<Bang<T>>>> {
        static void bang() {
            Interface<? super Bang<Byte>> bang = new Bang<Byte>();
        }
    }
    :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    PaulosV avatar 10.12.2011 14:03 PaulosV | skóre: 10 | blog: dentoob
    Rozbalit Rozbalit vše Re: Jak shodit Visual Studio zkompilovatelným kódem
    Ó, díky :-D Mám někoho, na jehož kódu bych to mohl použít, tak to případně zkusím :-)
    10.12.2011 15:29 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Jak shodit Visual Studio zkompilovatelným kódem
    Tos neměl hlásit, fanoušci MS v komunitu nevěří, tak ať pocítí důsledky :-D
    PaulosV avatar 10.12.2011 16:28 PaulosV | skóre: 10 | blog: dentoob
    Rozbalit Rozbalit vše Re: Jak shodit Visual Studio zkompilovatelným kódem
    Já si radši zvykám chyby hlásit, neboť jsem vývojář a vím, jak je pro mě skličující, když už předem znám fakt, že ve svém kódu mám chyby, jen o nich nevím... :-D
    12.12.2011 11:46 Ivan
    Rozbalit Rozbalit vše Re: Jak shodit Visual Studio zkompilovatelným kódem
    A co je na tom tak zvlastniho? gcc jde sestrelit i jednodussim kodem. Kompilator patri k nejslozitejsim SW vubec a chyby najdete v kazdem SW.
    PaulosV avatar 27.12.2011 00:01 PaulosV | skóre: 10 | blog: dentoob
    Rozbalit Rozbalit vše Re: Jak shodit Visual Studio zkompilovatelným kódem
    Zvláštního? Jen to, že kompilátorem jazyka C# tento kód projde naprosto bez problémů a selže až při vykonávání. (Je to pochopitelné, jelikož tento kompilátor kód akorát převádí do MSIL.) Ale vzhledem k tomu, že Visual Studio a podobné si kód procházejí už při vývoji a zobrazení, tak na tu chybičku narazí taky a samozřejmě spadnou. :-)

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.