Wysłany dnia 17 marca 2013 o godzinie 13:17. Skomentuj!, kategorie: .NET, Programowanie , tagi: , .

Wiedząc, jak można zastosować wyrażenia lambda do pobierania wartości i nazwy sprawdzanej zmiennej oraz mając jako-tako rozwiązane warunki, można zająć się dodatkowymi funkcjonalnościami. Nie są one niezbędne, ale czasami(nawet nie tak rzadko) się przydają.
Czytaj dalej…

Wysłany dnia 03 lutego 2013 o godzinie 16:12. Skomentuj!, kategorie: .NET, Programowanie , tagi: , , .

Trochę wolnego czasu jest, czas wrócić do blogowania. Jak pisałem poprzednim razem, dziś będzie o moim rozwiązaniu problemu mnogości walidatorów i możliwości użycia ich tylko dla niektórych typów. Problem może wydawać się banalny, lecz mnie nie udało się dojść do idealnego rozwiązania, które byłoby zgodne z moimi pierwotnymi założeniami. To, co aktualnie udało mi się wymyśleć nie jest złe i mi odpowiada, ale jednak niedosyt pozostaje.

Czytaj dalej…

Wysłany dnia 22 grudnia 2012 o godzinie 19:35. Skomentuj!, kategorie: .NET, Programowanie , tagi: , , .

lambdaW poprzednim poście ogólnikowo pokazałem, czym są “strażnicy parametrów”. Przyszedł czas na ich ulepszenia(czy też realizowanie mojej wizji). Lambda i drzewa wyrażeń są często wykorzystywane w .NET, nie tylko w tym specyficznym przypadku, więc post ten wykorzystuje temat cyklu tylko za przykład.

Chyba każdy wie, że ciągi znaków nie są podatne na refaktoryzację(nie twierdzę jednak, że nie jest to możliwe) i należy ich unikać, jeśli można wykorzystać lepsze rozwiązanie. Podobnie jest tutaj – przekazywanie nazwy parametru za pomocą stringu jest lekkim strzałem w stopę. Dzięki wprowadzonym w C# 3 lambdom można to zrobić bardziej elegancko i tylko niewiele mniej efektywniej.
Czytaj dalej…

Wysłany dnia 14 grudnia 2012 o godzinie 17:48. Komentarzy: 2, kategorie: .NET, Programowanie , tagi: , .

Któż nie spotkał się, programując w C#, z tzw. strażnikami? Nie sposób ich ominąć, nawet jeśli samemu ich się nie używa, gdyż są wykorzystywane prawie, że w całym .NET Frameworku. Ile to razy w mojej karierze, szczególnie na początku, spotykałem się z jakimś ArgumentNullException czy innym Argument*Exception rzucanym przez proste wywołanie funkcji, które to wyjątki nie raz ustrzegły mnie przed trudniejszym do wyłapania błędami.

Pewnego dnia postanowiłem przelać moje przemyślenia na powyższy temat w kod. Rozwiązanie okazało się nie być tak trywialne, jak na początku sądziłem, ale po wielu bojach i kilku wersjach udało mi się osiągnąć satysfakcjonujący efekt. Gotowy projekt, jako część FLib(więcej o tym kiedy indziej), dostępny jest na Bitbucket(dokładnie tutaj). Wydaje mi się, że jest to też ciekawy temat na cykl postów, który niniejszym inicjuję.

Czytaj dalej…

Wysłany dnia 30 listopada 2012 o godzinie 16:39. Skomentuj!, kategorie: .NET, Programowanie , tagi: , .

Tworząc Draw the World natknąłem się na całą masę problemów, co pozwoliło mi dość dobrze wyrobić sobie zdanie na temat WinRT(i niestety nie jest ono zbyt pochlebne, ale o tym kiedy indziej). Jednym z tych bardziej “wkurzających” był bug w kontrolce Canvas(występuje też w innych Panelach, ale one honorują Horizontal/VerticalAlignment kontrolki), który, jak udało mi się wygooglać, był znany Microsoftowi już w Silverlight(na którym to WinRT bazuje), a nie został naprawiony nawet w wersji finalnej.

Czytaj dalej…

Wysłany dnia 27 listopada 2012 o godzinie 21:33. Skomentuj!, kategorie: Draw the World .

Tym razem Microsoft mnie pozytywnie zaskoczył – po moich wczorajszych bojach z aktualizacją, proces certyfikacji zajął im mniej niż 24h(a dają sobie nawet 7-8 dni) i Draw the World już jest dostępne w sklepie!

Wersja ta wprowadza nową paczkę („Średniowiecze”), integrację ze Share oraz masę mniejszych udogodnień i poprawek. Zachęcam do pobrania(i może kupna ;) ) nowej wersji.

Link: http://apps.microsoft.com/webpdp/app/draw-the-world/263ac640-2036-41b0-a66b-2c5f7c5fcc62

Wysłany dnia o godzinie 17:50. Skomentuj!, kategorie: Draw the World , tagi: .

Z okazji oddania Draw the World 1.1 do certyfikacji(~7 dni) postanowiłem wskrzesić tego bloga. Na ile tym razem – zobaczymy!

Tak więc chciałbym przedstawić moje najnowsze dzieło – grę Draw the World, która bazuje na tzw. “japońskich krzyżówkach”, znanych jako “malowanie liczbami” czy “nonogram”(ang.), gdzie gracz ma za zadanie wypełnić kolorami siatkę pól zgodnie ze wskazówkami umieszczonymi na bokach planszy. Jest to mój największy ukończony projekt jak do tej pory.

Gra oferuje(w wersji pełnej) ponad 50 plansz oraz 2 tryby rozgrywki, co powinno wystarczyć na długie godziny. Dodatkowo udostępnia wbudowany edytor plansz, dzięki czemu każdy może w prosty sposób stworzyć własne. Być może niedługo uruchomię publiczne repozytorium z planszami stworzonymi przez użytkowników, lecz kiedy to nastąpi – nie potrafię powiedzieć.

Gra kosztuje jedyne 10,99zł i aktualnie jest dostępna tylko w Sklepie Windows na system Windows 8, lecz powoli snuję plany portu na desktopowe wersje systemu Windows(acz pewnie tak szybko do tego nie dojdzie – mam stanowczo zbyt mało czasu).

Link do sklepu: http://apps.microsoft.com/webpdp/pl-PL/app/draw-the-world/263ac640-2036-41b0-a66b-2c5f7c5fcc62

Wysłany dnia 05 maja 2012 o godzinie 19:23. Skomentuj!, kategorie: .NET, Programowanie , tagi: , .

do_you_want_to_savePisząc jedną z moich aplikacji(która nie ujrzała światła dziennego, ale jest w planach) natknąłem się na dość ciekawy problem. Mianowicie w WPF(nie pamiętam jak to dokładnie w WF jest, więc uwzględniam tutaj tylko WPF) zmuszenie bindingów do aktualizacji źródła tylko na życzenie(czytaj: przy zamknięciu okna) przy ciągłym walidowaniu danych wejściowych graniczy z niemożliwym(o ile w ogóle jest możliwe, mi się nie udało). Całe szczęście z pomocą przychodzi dodany w .NET 4 i Visual Studio 2010 typ dynamic i klasa DynamicObject z DLR.

Czytaj dalej…

Wysłany dnia 14 kwietnia 2012 o godzinie 14:30. Skomentuj!, kategorie: Programowanie , tagi: .

Od dłuższego czasu zbierałem się, by napisać programik, który pomoże mi utrzymywać moją bibliotekę muzyczną w stanie względnie poprawnym(mam małego bzika na tym punkcie). I tak oto w święta powstał programik, który wyręcza mnie z żmudnego procederu poprawiania tego ręcznie.

Nie jest om może doskonały(i nie jest przetestowany do końca), ale swoje podstawowe zadanie spełnia. Aktualna wersja potrafi:

  • Utrzymywać prawidłową ścieżkę(zgodną z tagami)
  • Usuwać zbędne pliki i katalogi
  • Tworzyć play listę(m3u)
  • Usuwać zbędne rzeczy z tagów(m.in. (bonus track) czy [*], którego nie trawię)

Dodatkowo został napisany tak, by nie przeszkadzać w odtwarzaniu muzyki – potrafi działać tylko w wyznaczonych godzinach. Jeśli ktoś boi się uruchamiać program, ma on specjalny tryb, który pyta się, czy wykonać akcje, która może coś zepsuć.

Aktualna wersja to 0.3.6, i nie planuję dalszych zmian w programie, chyba, że „społeczność”(której aktualnie nie ma ;) ) wyrazi taką potrzebę.

Licencja: MIT
Adres do strony projektu: http://libraryguard.codeplex.com
Link do aktualnej wersji: http://libraryguard.codeplex.com/releases/view/85931

Wszystkie opisy są w języku angielskim, lecz przypuszczam, że nie są w pełni poprawne, więc jeśli ktoś znajdzie jakiś błąd to niech da mi znać.

Wysłany dnia 03 kwietnia 2012 o godzinie 16:16. Skomentuj!, kategorie: .NET, Programowanie , tagi: , .

ironyOstatnimi czasy miałem potrzebę pisania DSL na potrzeby aplikacji(aktualnie dwóch, obie będą kiedyś opublikowane). Jest dość duża liczba rozwiązań dostępnych dla .NET(Antlr, Coco/R, SableCC i masa innych) lecz żadnego z w/w nie potrafiłem ogarnąć w sensownym stopniu i czasie(a nie miałem wystarczającej motywacji). Całe szczęście istnieje jeszcze jeden projekt o wdzięcznej nazwie Irony, który to miałem okazję poznać dzięki wpisowi na blogu Scotta Hanselmana.

Czemu on? Bo jest PROSTY!

Czytaj dalej…