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…

Wysłany dnia 18 marca 2012 o godzinie 18:05. Skomentuj!, kategorie: Inne , tagi: .

Kindle TouchJakiś czas temu stałem się szczęśliwym posiadaczem e-book readera od Amazonu. Wybór padł na ten, a nie inny właśnie przez producenta(i świetny Kindle Store) i dość pochlebne opinie, które czytałem o rodzinie Kindle. Touch co prawda posiadał dość skrajne(szczególnie przez ekran dotykowy – jedni go chwalili, inni ganili), ale nie zrażałem się tym. Wybór okazał się trafiony, choć są rzeczy wkurzające.

Czytaj dalej…

Wysłany dnia 05 października 2011 o godzinie 20:34. Skomentuj!, kategorie: Programowanie , tagi: .

Z racji tego, że moja aplikacja jest już w fazie testów nie-u-mnie, byłem zmuszony napisać jakiś sposób do zgłaszania błędów – próba odtworzenia błędu u siebie(czy to na emulatorze, czy też telefonie) była bardzo trudna, albo wręcz niemożliwa. Nie sposób było powielić każde warunki(wersję oprogramowania, specyfikację urządzania, konfigurację samej aplikacji, o której zapominałem albo nie byłem w stanie się jej dowiedzieć). Jako iż od jakiegoś czasu staram się nie kombinować z robieniem jakichś pseudo-uniwersalnych i przekombinowanych cudów, zrobiłem to po najmniejszej linii oporu –
raport to zwykły mail(albo nawet nie, ale o tym za chwilę) z najpotrzebniejszymi informacjami(log, informacje o urządzeniu, informację od użytkownika).

Czytaj dalej…

Wysłany dnia 24 września 2011 o godzinie 00:07. Komentarzy: 2, kategorie: Natywne , tagi: .

Pisząc kolejny projekt, miałem sobie oto taki kod:

return
	this->Send(&msgSize, sizeof(MessageSizeType)) +
	this->Send(&catLength, sizeof(MessageCatLengthType)) +
	this->Send(category.c_str(), catLength * sizeof(wchar_t)) +
	this->Send(msg.c_str(), msg.length() * sizeof(wchar_t));

Nie wydaje mi się bardzo skomplikowany. Powinno wystarczyć, gdy zaznaczę, że wysyła on jedną „wiadomość” przez sieć – ot, 5 pierwszych bajtów to nagłówek(MessageSizeType – unsigned, MessageCatLengthType – unsigned char) a reszta dane. Oczywiście MUSZĄ być one dostarczone wszystkie, w takiej kolejności w jakiej są, więc wszystko leci po TCP. Pytanie: co tu jest źle?

Czytaj dalej…

Wysłany dnia 09 września 2011 o godzinie 23:47. Skomentuj!, kategorie: Programowanie , tagi: , .

Ostatnimi czasy dość dużo siedzę w Javie, programując na Androida(Kingdoms Clash.NET zostało niestety porzucone, ale o tym kiedy indziej (może)). Rozwijam swój stary projekt(w końcu!), który od początku miał być dość mocno związany z platformami mobilnymi. Mam tylko telefon z Androidem, więc na nim się skupiłem. Java nie jest moim ulubionym językiem, ale niestety zostałem „zmuszony” do poznania go ciut głębiej. Suma sumarum zły nie jest, lecz kilka rzeczy naprawdę mnie wkurza. Przy moim pierwszym spotkaniu z nim miałem problem z ogarnięciem obsługi nieblokujących gniazd – nie mogłem trafić na sensowne informacje o tym, tym razem miałem ciut więcej samozaparcia i udało mi się rozgryźć ten problem i stwierdziłem, że warto bym to, nawet jeśli będzie tylko dla mnie, zapisał. Mimo iż Java jest językiem bardzo wysokopoziomowym, obsługa gniazd jest… niskopoziomowa jak w C(C# też ma to dość niskopoziomowo zrobione, lecz nie odbiega bardzo od reszty)!

Czytaj dalej…

Wysłany dnia 06 sierpnia 2011 o godzinie 19:08. Skomentuj!, kategorie: Inne , tagi: .

Każdy, kto zetknął się z pisaniem aplikacji na Androida miał pewnie styczność z jego emulatorem. Przypuszczam, że nie było/jest to miłe doświadczenie – jest on koszmarnie wolny. Ja nauczony doświadczeniem(nikłym, bo nikłym, ale jednak) przy aktualnym moim starciu z nim(dość owocnym swoją drogą) postanowiłem nie używać go. Mam telefon z tym systemem(Hero, o którym wspominałem), lecz chciałem go nie używać. Rozwiązanie, do którego doszedłem okazało się bardzo dobre.

Czytaj dalej…

Wysłany dnia 16 lipca 2011 o godzinie 20:28. Skomentuj!, kategorie: Inne , tagi: .

Z tego, co się orientuję, do tej pory nie było problemu z instalowaniem softu nie od HTC na Bohaterach – w aktualizacji 2.1(ALBO 1.6, nie jestem pewien) zaktualizowali oni bootloader. Od tej pory nie przyjmuje on niepodpisanych paczek, a co za tym idzie – nie podmienimy partycji recovery, którą to trzeba zmienić, by zainstalować system(a przy okazji mieć kilka fajnych bajerków jak backup czy wipe danych/cache). Ale nie ma rzeczy niemożliwych. ;) Czytaj dalej…

Wysłany dnia 13 lipca 2011 o godzinie 13:45. Skomentuj!, kategorie: Inne , tagi: .

W niedzielę wpadłem na genialny pomysł, by wgrać do swojego Bohatera(którego mam już ponad rok, gwarancja niby nie wygasła, ale i tak jej nie tracę ;) ) customowy ROM. Android 2.3 jest ciut lepszy od 2.1, na którym to skończyły się oficjalne aktualizacje, ale głównie zależało mi na nowym Sense(najnowsze, jakie znalazłem: 2.1). Jak pomyślałem, tak zrobiłem i po całym dniu prób, błędów, gniewu i chęci rzucenia tego w cholerę udało mi się wgrać to, co chciałem. Czytaj dalej…