Tata 2.0!

Dziś znienacka powiększyła mi się rodzina. Do niespełna 3-letniej Milenki dołączył Janek.

p12005321

Z mojego korytarzowego punktu widzenia wszystko przebiegło bardzo sprawnie, poród z przyczyn zdrowotnych był przez cesarskie cięcie. Sam nie mogłem uwierzyć kiedy usłyszałem donośne wrzaski zaledwie 2 godziny po przyjeździe do szpitala. W drodze do ważenia junior był już grzeczny, choć nie omieszkał rozpłakać mi się na ręku. Nie ze mną te numery – po kilku sekundach lulania uspokoiłem brzdąca i oddałem do dalszej administracyjnej obróbki. Wyniki bardzo ładne – 3,56 kg i 55 cm. Mimo że od kilku miesięcy brzuszek Ani zajmował coraz większą część sypialni, a i Milena przygotowywała się na przyjście braciszka (sama przez chwilę też “była w ciąży”), to i tak do końca sam nie byłem przygotowany na szczęście, które mnie spotkało.

Dziękuję za życzenia i modlitwy! Nie mogę już się doczekać odzyskania ze szpitala malca i mojej ukochanej. A wraz z nimi Milenki, która zawędrowała na kilka dni do dziadków i chyba zaczyna autentycznie tęsknić. Zuch dziewczyna :-)

Advertisement

Klawiatura z wosku

Właśnie opublikowałem swój pierwszy open source’owy projekt – WPF On Screen Keyboard, czyli Wosk.

Wosk - Wpf On Screen Keyboard

Po zakupie zgrabnego tablecika z dotykowym ekranem (Samsung Q1U) brak prawdziwej klawiatury mocno dał mi się we znaki. Q1U to co prawda już druga, poprawiona wersja platformy UMPC (ultra mobile PC) i w przeciwieństwie do wersji pierwszej ma oprócz dotykowego ekranu prawdziwe klawisze, ale są one do niczego. Nie dość, że maleńkie (wyobraź sobie TicTaca. Przetnij go na pół. Brawo, masz dwa klawisze do Q1U.), to jeszcze brakuje rzędu z cyframi i trzeba się męczyć z NumLockiem.

Wosk running on Samsung Q1U UMPC

Po ściągnięciu kilku programów udających klawiatury ekranowe oczywiście okazało się, że żadna nie odpowiada moim wygórowanym potrzebom, więc napisałem swoją. Przy okazji nauczyłem się co nieco o starym, niskopoziomowym API Windowsa, oraz sporo o WPF – nowym, lśniącym, graficznym, wektorowym GUI Microsoftu.

Efekt kilkunastu późnych wieczorów (już zapomniałem ile czasu zabiera przesuwanie przycisków na formularzu płótnie i wymyślanie heksadecymalnych kolorków z kanałem alfa) oczywiście okazał się tak niesamowity, że postanowiłem podzielić się nim z całym światem. Wersja dość podstawowa, ale u mnie działa.

  1. WPF On Screen Keyboard, czyli Wosk: http://www.codeplex.com/wosk.

Surface pod strzechy

Jakiś czas temu było głośno o rewolucyjnym projekcie Microsoftu – dotykowym stole z ekranem, który nie tylko rozpoznawał kilka palców na raz, ale także inne położone na nim obiekty – telefony komórkowe, pędzle itp. i reagował na nie odpowiednio – np. wyświetlając SMSy z komórki lub umożliwiając malowanie po ekranie różnymi narzędziami. Entuzjazm studziła tylko informacja o cenie – ponad 10 tys. dolarów za sztukę (oferta kierowana do salonów sprzedaży, hoteli itp.).

Właśnie pojawiły się pogłoski, że MS bada rynek pod kątem wprowadzenia uproszczonej, domowej wersji, w hipotetycznej cenie 1500$. Dla mnie bomba, wszak to cena porównywalna z telewizorem. A dodatkowo można grać na nim w pasjansa i warcaby oraz czytać gazety! Hmm chwileczkę… ok, to chyba nie są najlepsze przykłady zastosowania, dużo lepsze podaje sam Microsoft, zapraszam do źródła: istartedsomething.com

Pasja programowania

Właśnie wróciłem ze spotkania krakowskiej grupy .net. I mam powody do mruczenia (z zadowolenia). Przypomniały mi się trochę czasy konwentów RPG, o których mój zacny kompan Michał Mochocki pisał, że tak naprawdę nie chodzi o tematy, prelekcje i granie, a raczej o spotkanie ludzi dzielących z nami wspólną pasję. Choć spotkania grupy programistów są o wiele mniej serdeczne i żywiołowe niż zjazdy samozwańczych Sarmatów, krasnoludów czy wampirów, łączy je jedno – pasja.

Dzisiejsze spotkanie było specjalne – gościliśmy dwóch popularnych showmanów – Carla Franklina (prowadzącego podcast .NET Rocks) i Tima Huckaby, którzy wnieśli sporo amerykańskiego luzu do poważnej sali konferencyjnej Comarchu. Jak dla mnie – strzał w dziesiątkę. Niezależnie od tematów (obracających się głównie wokół I/O oraz WPFa), największą zaletą gości był prawdziwy entuzjazm, z jakim opowiadali o programowaniu. Autentyczne “coding4fun“. Dla mnie fun był podwójny – podczas sesji udało mi się wygrać trochę softu oraz całkiem porządną kamerkę USB Microsoftu – parę dni wcześniej rozważałem zakup podobnej dla jakiegoś domowego hackowania :-). Żałuję trochę, że nie wykorzystałem możliwości pogadania z Carlem i Timem po spotkaniu… Wiele z przedstawionych przez nich ciekawostek dobrze komponowało się z moimi domowymi projektami (surface/multipoint, wiimote, niedługo może roomba i MIDI)…
Note to self: następny punkt doświadczenia przeznaczyć na podniesienie social skilla.

Swoją drogą to ciekawe jak MS zjednuje sobie tubylców z całego świata, na szczęście nie tylko świecidełkami. Steve Ballmer podskakujący na scenie dobitnie to ilustruje. Tę firmę naprawdę można lubić. Czuć w niej wciąż odradzającą się pasję, autentyczną chęć zmiany świata na lepsze i świadomość realności tego celu. Tablet PC, UMPC, Surface, Media Center, Home Server, Xbox Live (IMHO chyba najprostszy w obsłudze wideotelefon dla babci), Mesh… Nawet jeśli czasem chybione i niedoskonałe, z pewnością mają/miały potencjał na polepszenie jakości życia wielu ludzi. Przedsięwzięcia Google czy Apple wyglądają często przy tym jak czysty, wyrafinowany, i – niestety – nudny w gruncie rzeczy biznes.

Wizualizacja trasy z GPSa

W poprzednim poście zamieściłem linka do GPS-owej mapki z wycieczki, chwilę później doszedłem do wniosku, że może komuś przyda się krótki opis tworzenia takiej mapki (zamiast biegania po góglach).

Automapa 4 na Pocket PC zapisuje trasę (w naszym przypadku ślad, czyli aktualną pozycję) jako czyste komunikaty GPSa w pliku tekstowym .gps. Zdaje się że niektóre programy obsługują to jako .nma (można ręcznie zmienić rozszerzenie). Notabene AM zapisuje także to samo w pliku .gps.bin, ale on nas nie interesuje.

Automapa 4 na Pocket PC

W moim przypadku wystarczyła świetna strona GPS Visualizer, która przyjmuje zapis .gps (można go ew. zzipować przed uploadem) i produkuje efekt w wybranej postaci: Google Maps, Google Earth lub statyczne obrazki czy inne wykresy.

Po wybraniu Google Maps i wczytaniu pliku mogłem przeglądać trasę online, ale link do niej był tymczasowy (można sobie zapisać źródło strony z danymi trasy w JavaScripcie). GPS Visualizer pozwala jednak automatycznie przenieść taką gotową mapkę do zaprzyjaźnionego serwisu, który ma wiele wycieczko-blogowych funkcji: EveryTrail.com. Po szybkim założeniu konta mamy gotową mapkę do dzielenia się ze znajomymi i nie tylko:

screenshot of everytrail.com

Niestety WordPress.com na którym hostuję tego bloga nie pozwala na wklejenie iframe’ów (np. z google maps) więc musi wystarczyć zwykły link; dla wygody powtórzę go tutaj: Krakow Kayaking at EveryTrail

Przeprowadzka na wordpress.com

Serwer, na którym wegetował ten blog, niedługo zostanie zlikwidowany, w związku z czym powrócił nieśmiertelny problem hostingu. W moim przypadku ten problem jest o tyle istotny, że jak każdy domorosły koder chciałbym od czasu do czasu opublikować jakiegoś webowego toola, najlepiej w ciekawej technologii. I tu leży pies pogrzebany – w Polsce “ciekawych technologii” hostuje się niewiele… O ile można jeszcze znaleźć ASP.NET (choć niekoniecznie z najnowszymi dodatkami) to już na Ruby czy Pythona prawie nie ma szans. Zresztą globalnie też trudno znaleźć coś kompletnego. Ręce dodatkowo wiąże mi kwestia mojego bloga, obecnie działającego na PHP-owym WordPressie. Po krótkich poszukiwaniach znalazłem dość zadowalające rozwiązanie – bloga będę hostował prawie za darmo na wordpress.com, a o prawdziwym hostingu na web appy jeszcze pomyślę, w każdym razie będę mógł bez obaw wybrać coś bez obsługi PHP :-D.

Jedyny problem z blogiem to adres – dotychczas blog był w podkatalogu domeny ekus.net, co przy wyodrębnionym hoście byłoby trudne do kontynuowania. Ostatecznie postanowiłem zmienić adres bloga z http://ekus.net/blog/ na htp://blog.ekus.net/ – oczywiście będę jeszcze musiał na starym adresie postawić przekierowanie wszystkich 20+ archiwalnych wpisów ;-)
Nowy engine routingu powstający przy okazji wprowadzenia ASP.NET MVC powinien gładko załatwić sprawę.

Aha, wordpress.com co prawda hostuje bloga za darmo, ale tylko pod adresem user.wordpress.com. Aby użyć własnej domeny, trzeba zapłacić 10$ na rok, czyli IMHO bardzo rozsądnie, biorąc pod uwagę renomę serwera i odporność na efekt slashdota czy innego digga (oczywiście to dla mnie kluczowe kryterium ;-) ).

Póki co skopiowałem dane ze starego serwera i może ustawię tymczasowe przekierowanie w PHP. A zyskawszy trochę na czasie pomyślę o nowym hostingu.

P.S. maila i trochę innych śmieci hostuję od dawna na googlu (google apps), w ramach własnej domeny. Gorąco polecam, choć niestety google nie traktuje hostowanych tak kont zbyt poważnie i do większości jego tooli i tak należy mieć dodatkowo konto na gmailu. Ostatecznie przekierowuję swoją pocztę na konto @gmail.com, a mail.ekus.net używam m.in. do zakładania jednorazowych aliasów do rejestracji w różnych serwisach.

Zapachy Raleigh

Mmmmm… Raleigh. Po raz kolejny jestem na delegacji w stolicy Północnej Karoliny i po raz kolejny zaparło mi dech po wyjściu z lotniska. Nie wiem czy to sprawa wysuszającego nos powietrza w samolocie, ale o ile w Chicago zwykle uderza mnie fala ciężkiego, gorącego powietrza, tak tutaj zawsze czuję się jakby mój nos obudził się po dłuuugiej hibernacji.

Młyn w okolicach Raleigh

Zaczyna się od przesyconego wilgocią zapachu lasu, igliwia i liści. Czyste, zdrowe powietrze. Staję na parkingu i łapczywie nadrabiam zaległości z zadymionego Krakowa. Samochód z wypożyczalni też uderza zapachem …nowości, ma dopiero 170 mil na liczniku. Po chwili ponownie zapach lasu na hotelowym parkingu i wyperfumowany środkami czystości hall. W windzie resztki papierosowego dymu, w pokoju klimatyzacja (lub ogrzewanie, też dmuchane) z odświeżaczem.

Przez pierwsze kilka dni po przyjeździe wszystkie te zapachy są bardzo intensywne, atakują na każdym kroku, licytują się, przebijają jedne przez drugie. Trawa, drzewa, zarośla przy drodze, wilgotny beton na piętrowym parkingu i schodach pożarowych w hotelu, krochmal w hotelowej pralni, woń gliniastej ziemi, deszczu, benzyny… i dyskretny, uspokajający zapach wielkich sklepów, wzmocniony jednostajnym szumem lodówek. “Polskie” Carrefoury czy Tesco niestety dawno ten klimat straciły, wymieniły na trąbione przez głośniki reklamy Neostrady i Pedigree Pal (i choć regały z psim żarciem jako nieliczne czuć z daleka, trudno to uznać za zachętę).

Z czasem nos się przyzwyczaja i człowiek nie zwraca już na to uwagi. Większość zapachów powszednieje, ale jeden za każdym razem uderza mnie na nowo. Zwłaszcza rano, po wyjściu z budynku, niezmiennie czuję zapach najbardziej tutaj powszechny, ten sam co na początku: leśnego powietrza.

Uwielbiam Raleigh.

Wiedźmin (PC) – rasowy, kultowy RPG

Każdy szanujący się, długo oczekiwany i rewolucyjny erpeg na PC musi spełniać jeden warunek: być potwornie zabugowany, przynajmniej przez pierwsze kilka miesięcy. Zainstalowałem dzisiaj tuż-przed-premierowo zdobytego witchera (niestety obyło się bez kolejki fanboy’ów pod empikiem, może następnym razem zrobią premierę w piątkową noc) i muszę przyznać że CD Projekt RED idealnie wpisał się w tradycję Bioware i Bethesdy.

Piękne intro… rozpocznij nową grę… loading… i pierwszy śliczny zwis (i komunikat że pamięć wirtualna się kończy… przy 2GB fizycznej?).

Na szczęście przy autouruchamianiu DVD jest opcja “ściągnij najnowszego patcha” – 109 MB później gra śmiga aż miło, choć początkowo ze sporadyczną czkawką (1280×1024, wszystko max, na GeForce 8600GT). Po zmniejszeniu filtrowania z 16x (WTF?) na 2x jest OK :-]

Geralt rządzi. Strzyga rządzi. Kaer Morhen rządzi. Postacie rządzą. System walki – na pierwszy rzut oka – rządzi. Grafika sama w sobie “tylko” bardzo dobra (do rządzenia na miarę Gears of War czy UT3 jej niestety trochę brakuje).

Na szczęście klimat i fabuła wszystko przebijają. Sapkowski może spać spokojnie.

Zakup ostatecznie bardzo udany, w komplecie (zestaw nie-kolekcjonerski) CD Audio z muzyką Skorpika, DVD z filmami Bagińskiego itp itd…

Aha, skrinszota niestety dzisiaj nie będzie bo pod koniec pierwszej misji (która rządzi) ponowny zwis.

Pracowity dzień z Subversion i PowerShellem

Ostatnio zainstalowałem lokalne repozytorium Subversion i wczekinowałem solucję nad którą ostatnio pracuję. Niestety, okazało się, że oprócz wartościowych plików VB/C# znalazły się tam śmieci typu bin/*.* (głównie dll-ki). Szybko naprawiłem błąd i zacząłem od nowa, tym razem ustawiając w TortoiseSvn ignorowanie plików dll. Wszystko było OK do czasu, aż zacząłem pracować z kodem – okazało się, że warto byłoby wyrzucić z repozytorium także katalogi obj/Debug/ – oprócz dll-ek znajdują się tam np. pliki .projdata, które Visual Studio chce lockować, co nie bardzo podoba się żółwikowi (Tortoise).

Niestety, w międzyczasie mam wprowadzone sporo zmian i nie chcę tworzyć repozytorium od nowa (w końcu po coś ono istnieje ;-)

Aby repozytorium było bez skazy, zacząłem mozolnie usuwać z niego niechciane foldery i pliki. Niestety, obecna solucja zawiera około 50 takich zestawów w poszczególnych podprojektach. Zamiast poświęcić pół godziny na wyszukiwanie i usuwanie tych śmieci, postanowiłem zaprząc do pracy…

PowerShell.

Czytałem swego czasu o projekcie nowego shella (command line’a) Microsoftu, pierwotnie nazywanego Monad. Przemianowany na PowerShell i wydany oficjalnie pod koniec 2006 coraz częściej przewija się na blogach i webcastach. Jest podobny do powłok *niksowych, duży nacisk położono w nim na przekazywanie wyników jednego polecenia do następnego (piping), przy czym ma jedną bardzo istotną zaletę – zamiast stringów przekazuje obiekty. To się wiąże z kolejną zaletą: działa na .necie i w pełni korzysta z jego dobrodziejstw.

W rezultacie dostajemy nowoczesny sposób dostępu do bardzo różnych struktur danych (system plików, rejestr, otoczenie sieciowe, różnorakie API programów…). Microsoft zobowiązał się publikować wszystkie nowe narzędzie administracyjne w formie nakładek GUI na właśnie skrypty i klasy (tzw. cmdlety)PowerShella. Tak właśnie wygląda panel administracyjny najnowszego MS Exchange Servera.

Kilka przykładów z wikipedii:

  • Stop all processes that begin with the letter “p”:
 PS> get-process p* | stop-process
  • Find the processes that use more than 1000 MB of memory and kill them:
 PS> get-process | where { $_.WS -gt 1000MB } | stop-process
  • Calculate the number of bytes in the files in a directory:
 PS> get-childitem | measure-object -property length -sum

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

O ile dobrze rozumiem (dopiero zaczynam się tym bawić), to teoretycznie używając składni z ostatniego przykładu i podając inne dane wejściowe, możemy np. usunąć wszystkie klucze rejestru lub np. userów z grupy. Raj dla adminów/skrypciarzy/hackerów :-)

Wracając do mojego Subversiona…

Po kilku godzinach :-D udało mi się usiągnąć cel. Znajduję wszystkie niechciane katalogi na dysku i na ich podstawie uzyskuję bliźniaczą listę takich katalogów, tyle że w Subversion. Pozostało tylko wykasować je z repozytorium, co uczyniłem z poczuciem dobrze spełnionego obowiązku. Co prawda w tym przypadku to była armata na muchy, ale za to mam zainstalowanego PowerShella, napisane pierwsze skrypty w nowym środowisku z użyciem pajpingu i iterowania, poustawiane kilka rzeczy w systemie na przyszłość no i …czyste repozytorium :-]

Get-ChildItem Src\ -include bin,obj -Recurse | foreach { 

 $fullPath = $_.FullName.Replace("\","/")
 $srcPath = (get-location).Path.Replace("\","/")
 $repoPath = "file:///c:/Repo/NexTra"
 $fullPath = $fullPath.Replace("$srcPath","$repoPath")
 svn delete --message "AutoDelete" --force --non-interactive "$fullPath"
}