IKVM.NET to wirtualna maszyna Javy napisana w .NET oraz zbiór implementacji podstawowych klasy z Javy dzięki którym możliwe jest uruchamianie kodu Javy bezpośrednio w środowisku .NET/Mono. Paczka IKVM.NET zawiera dwa główne narzędzia ikvm.exe (maszyna wirtualna) oraz ikvmc.exe – translator bytekodu Javy do .NET IL. IKVM.NET (ikvmc) umożliwia wykonanie szybkiego portu (translacji) biblioteki Javy do .NET. W moim przypadku była to biblioteka Morofologik – analizator morfologiczny, słownik morfologiczny i ...
Sztuka programowania 4083 dni, 17 godzin, 25 minut temu 226 źrodło rozwiń
« Mity o sieci sie26Kategorie: .Net, C# przez graf W ostatnim wpisie z tej serii chciałem przedstawić najważniejszą cechę linq, mianowicie niezależność od źródła danych. Jak pisałem wcześniej Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees We wszystkich poprzednich wpisach pracowaliśmy na kolekcjach, które przechowywane były w pamięci, jednak linq ma dużo większe możliwości obsługuje przeróżne źródła danych. Ja...
Sztuka programowania 4097 dni, 20 minut temu 135 źrodło rozwiń
This time I would like to point out the behavior, that should be absolutely clear to any C# developer. When an exception is thrown inside try..finally block (without catch), and consequently in the scope of a using statement, it is bubbled up to the caller, rather than handled in any way.
Sztuka programowania 4098 dni, 47 minut temu 101 źrodło rozwiń
Przed przeczytaniem tego postu zachęcam do zapoznania się następującymi wpisami: 1. Typ dynamic w C# 4.0 2. Zastosowanie dynamic: ExpandoObject 3. Zastosowanie dynamic: DynamicObject ExpandoObject to przydatna czasami klasa, ale problem z nią taki, że nie można jej rozszerzać i nawet została oznaczona jako sealed. Aby skorzystać z klasy Gemini, najpierw należy zainstalować odpowiedni pakiet z NuGet: Zacznijmy od przykładu pokazującego, że faktycznie można po Gemini dziedziczyć:internalclass Progr...
Sztuka programowania 4099 dni, 23 godziny, 45 minut temu 332 źrodło rozwiń
Dzisiaj opisze mechanizm lamba expression. Dla przypomnienia Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees Wyrażenia lambda to nic innego jak syntactic sugar czyli taki bonus od Microsoftu, który ułatwia pisanie kodu. Wyrażenia lambda upraszczają zapisu delegatu. Przypomnijmy przykład z poprzedniego wpisu.C# class Program { ...
Sztuka programowania 4102 dni, 21 godzin, 58 minut temu 183 źrodło rozwiń
Kolejna część artykułu o Enterprise Library i wykonywaniu logów: http://msdn.microsoft.com/pl-pl/library/enterprise-library-logging-application-block–czesc-2.aspx Zapraszam do lektury!Explore posts in the same categories:Ogólne, Patterns & Practices This entry was posted on Wednesday, August 21st, 2013 at 7:47 pm and is filed under Ogólne, Patterns & Practices. You can subscribe via RSS 2.0 feed to this post's comments. ...
Sztuka programowania 4102 dni, 21 godzin, 58 minut temu 111 źrodło rozwiń
Dzisiaj króciutki przykład:class ItemInfo
Sztuka programowania 4104 dni, 14 godzin, 7 minut temu 230 źrodło rozwiń
W kolejnym wpisie o linq przedstawię zasadę działania Func, Predicate, Action. Dla przypomnienia Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees Przyjrzyjmy się najpierw deklaracji tych trzech typów. C# public delegate void Action
Sztuka programowania 4107 dni, 44 minuty temu 210 źrodło rozwiń
W poprzednim wpisie opisałem extension methods, dzisiaj czas na kolejny element moim zdaniem bardzo ważny do zrozumienia działania linq mianowicie słowo kluczowe yield. Dla przypomnienia Linq jest połączeniem 5 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambdaIQueryable i Expression Trees Zasadę działania słowa kluczowego yield najlepiej zobrazuje przykład. Załóżmy, że mamy metodę, która generuje ...
Sztuka programowania 4112 dni, 1 godzinę, 4 minuty temu 165 źrodło rozwiń
W zdecydowanej większości przypadków jestem przeciwnikiem singleton’a i uważam to za anty-wzorzec. Dużo lepiej użyć IoC i przekazywać wszędzie w konstruktorach tą samą instancję. Istnieją jednak przypadki, w których użycie singleton’a nie jest brzydkie. Ostatnio miałem klasę, która potrzebowała pewnych danych – kolekcję prostych struktur. Każda struktura zawiera string i pole bool. Ze względu, że ta kolekcja musi być wykorzystana w kilku klasach, zdecydowałem się na przeniesienie jej do osobnej klasy (s...
Sztuka programowania 4112 dni, 1 godzinę, 4 minuty temu 256 źrodło rozwiń
Od ponad 3 lat używam TDD z lepszymi i gorszymi wynikami, zawsze koniec końców okazuje się, że kod napisany w TDD (nie TAD czyli nie dopisując testy post factum ale w prawdziwym TDD czyli pisząc testy NAJPIERW) sprawia najmniej problemów i jest najłatwiejszy do utrzymania i do modyfikacji. Czyli wydaje się, że TDD to świetne narzędzie, dlaczego zatem tak mało osób stosuję tą metodykę? Poniżej postaram się zebrać co popularniejsze wymówki. Jeśli macie swoje to proszę dopisywać. 1) Pisanie ...
Sztuka programowania 4112 dni, 1 godzinę, 4 minuty temu 324 źrodło rozwiń
Dzisiejszy wpis dotyczy wszystkich klas, jednak zostanie on zaprezentowany na przykładzie ViewModel znanego z MVVM. W moim projekcie używam MVVM i dlatego jest to dla mnie naturalne. W poście zaprezentuje bardzo sztuczne przykłady, dlatego proszę nie skupiać się na nazewnictwie czy na zaprezentowanej funkcjonalności. Przedstawiony problem jest jednak bardzo częsty w realnych projektach i sam mam\miałem z nim do czynienia w codziennej pracy. Powiedzmy, że napisaliśmy ViewModel prezentujący jakąś część ...
Sztuka programowania 4113 dni, 20 godzin, 16 minut temu 284 źrodło rozwiń
sie10Kategorie: .Net, C# przez graf Blogowania chciałem rozpocząć od cyklu wpisów o Linq. Każdy dobry programista C# powinien umieć się posługiwać Linq, nie każdy niestety wie jak to właściwie działa. Linq wprowadza wspólny interfejs do pracy z kolekcjami niezależnie od źródła danych. Linq jest połączeniem 4 elementów:extension methodsyieldFunc, Predicate, Actionwyrażenia lambda W tym poście omówię extension methods czyli metody rozszerzające. Extension methods jak sama nazwa wskazuje ...
Sztuka programowania 4113 dni, 20 godzin, 16 minut temu 132 źrodło rozwiń
Dzisiaj będzie gadka motywacyjna o pisaniu testów więc jeśli jeszcze nie piszesz, może to Ciebie w końcu przekona. We wpisie Testowanie własnego ControllerFactory w MVC pisałem jak to zmarnowałem 6h na napisanie praktycznie jednego testu do kawałka kodu, który można napisać w 15 minut i przez dodatkowe 15 minut prze-klikać w kilku różnych przypadkach. Gdzie tu logika, gdzie tu sens. Pisząc CustomControllerFactory nie pisze się go z byle powodu, pisze się, ponieważ są potrzebne bardzo spec...
Sztuka programowania 4116 dni, 13 minut temu 170 źrodło rozwiń
Pierwszym etapem przy wdrażaniu się w nowy projekt jest poznanie jego funkcjonalności. Nie będziemy w stanie zrozumieć kodu, nie wiedząc do czego dana aplikacja służy. Jeżeli nieuchronnie zbliża się deadline i nie możemy poznać projektu w całości, skupmy się na jednej funkcjonalności. Ludzie, jakkolwiek nie pisaliby kiepsko, to zwykli pisać konwencyjnie. To znaczy, że opanowanie jednego modułu, otworzy nam drzwi do zrozumienia kolejnych modułów. Wyjaśnijmy to na przykładzie systemu TravelCRM, który pr...
Sztuka programowania 4116 dni, 23 godziny, 11 minut temu 216 źrodło rozwiń
Często można usłyszeć, że przypisania są zawsze bezpieczne w wielowątkowości i powinniśmy martwić się np. inkrementacją. Jest to prawda dla Int32 ale dla long już nie zawsze. Przykład:internalclass Program { privatestaticlong _x =0; privatestaticvoid Main(string[] args) { Task.Factory.StartNew(Task1); Task.Factory.StartNew(Task2); Thread.Sleep(5000); } privatestaticvoid Task2() { while (true) { Console.WriteLine(_x); } } privat...
Sztuka programowania 4116 dni, 23 godziny, 11 minut temu 137 źrodło rozwiń
Odkrywam kawałek tajemnicy dla osób, które zamierzają tworzyć strony internetowe używane przez tysiące…. jednym z wąskich gardeł jest Baza Danych… sic! Nie będę się tu wdawał w kwestie budowania architektury, dobrej I złej. Bardziej chciałbym naświetlić pewien problem I możliwe rozwiązanie. Bazy danych w .NET Framework w większości (zakładam, że 99% przypadków), są obsługiwane przez mechanizm ADO.NET, a ten bazuje na ConnectionString do źródła danych, który jest zdefiniowany według wzoru zgodnego z bazą...
Sztuka programowania 4118 dni, 23 godziny, 56 minut temu 200 źrodło rozwiń
W poprzednich wpisach omawialiśmy wewnętrzną implementację async\await. Dziś kolejne przykłady pokazujące, czego należy unikać aby optymalizować nasz kod. Jak wiemy, użycie await generuje masę kodu i niesie ze sobą alokację dodatkowych obiektów – maszyna stanów, wątki, wrappery itp. W zasadzie sama alokacja w .NET nie jest jakiś wielkim problemem i jest znacząco szybsza niż w językach niezarządzanych. Niestety, pomimo wielu optymalizacji dokonywanych przez GC, późniejsze ich zwolnienie jest czasochłonn...
Sztuka programowania 4120 dni, 1 godzinę, 6 minut temu 117 źrodło rozwiń
In the project, I am working with, there is a simple feature that imports data from external source. Import is only interested in new records. This condition is fulfilled with ‘DateTime’ comparision. Looks simple, Unfortunately I have encountered a nice ‘bug’.
Sztuka programowania 4120 dni, 19 godzin, 35 minut temu 90 źrodło rozwiń
Zacznijmy od synchronicznego kodu:internalclass Program { privatestaticvoid Main(string[] args) { ShortMethod1(); ShortMethod2(); ShortMethod3(); } privatestaticvoid ShortMethod1() { Console.WriteLine("1"); } privatestaticvoid ShortMethod2() { Console.WriteLine("2"); } privatestaticvoid ShortMethod3() { Console.WriteLine("3"); } } Mamy powyżej przykład 3 metod, które wykonują bardzo proste operacje. Nie są one zbyt skompl...
Sztuka programowania 4122 dni, 23 godziny, 21 minut temu 80 źrodło rozwiń