Skip to: Site menu | Main content

Autor

Chłopak z Bałut (Dołów), po uniwerku i stypendium. Wiecznie zestresowane, przemądrzałe bezguście. Więcej na stronie domowej.

Benzyna

"Zachód", Wynurzenia

Korzystając z dnia wolnego przypadającego w Święto Reformacji oraz jednego dnia urlopu, wybraliśmy się do Pragi. W drodze powrotnej zatankowaliśmy sobie do pełna i tak naszły mnie 2 refleksje:

  1. Nie można było zatankować Pb98, za to była Pb91. Myślałem, że Niemcy zaszli najdalej ze swoją Pb92, ale widać myliłem się. Ciekawe, czy można gdzieś jeszcze mniej-oktanową benzynę zatankować.
  2. Dziś mija ostatni dzień dziewiątego miesiąca odkąd tu mieszkamy i jak dotąd udawało nam się na tyle skutecznie unikać tankowania na miejscu, że zostawiliśmy tylko 15 eur na stacji benzynowej. No ale przy cenie 1,23 za litr, to trudno się dziwić. Ciekawe jak długo nam się tak jeszcze będzie udawać.

31 października 2006, 19:07:40 1 komentarz

Opera Wrocławska w natarciu

"Zachód"

Wczoraj zauważyłem, że naprzeciwko mojego domu zawieszono plakat reklamujący Operę Wrocławską i aż z zachwytu zrobiłem zdjęcie:

Plakat Nibelungów

I tak się zastanawiam: czy ja go do tej pory nie dostrzegałem, czy też powiesili go dopiero teraz (ostatnie reklamowane przedstawienie odbyło się prawie dwa tygodnie temu)? Zamierzałem pochwalić Operę za międzynarodową ofensywę, ale teraz zastanawiam się, czy nie powinienem napisać o zwykłym braku profesjonalizmu.

27 października 2006, 19:57:41 4 komentarze

Szczęśliwy zbieg okoliczności

Narcyzm, Wynurzenia

Zajrzałem sobie dzisiaj na google analytics i zauważyłem, że ktoś trafił na moją stronę domową wpisując w gógle frazę sliwerski fixes links. Zaciekawiony, co to zwróci, wrzuciłem w wyszukiwarkę i na pierwszym miejscu wyskoczyła strona skryptu cvs2cl. I tak mi się właśnie przypomniał szczęśliwy zbieg okoliczności z nim związany.

Otóż opiekun mojej pracy magisterskiej rozpoczynał swoją karierę (a trzeba mu przyznać, że ma całkiem sporo publikacji na najwyższej klasy konferencjach + staż w Microsoft Research) od analizy tegoż właśnie skryptu. Prozaicznie, nie? Otóż śmiem podejrzewać, że musiał któregoś dnia zauważyć, że jestem na liście contributors tego skryptu (pamiętam, że zgłosiłem jakiegoś buga, ale nie jestem przekonany, że podówczas znałem na tyle dobrze Perla, żeby móc coś w nim poprawić). Pewnie to naciągane, ale wierzę, że to właśnie dzięki temu nasza współpraca tak dobrze się układała. To znaczy: dzięki temu, że na samym wstępie zdołałem sobie zdobyć szacunek.

Właściwie, to chciałem napisać o jeszcze jednym, podobnym zbiegu okoliczności, ale to może innym razem. Dość już na dzisiaj wystarczy tego lansu.

26 października 2006, 21:59:40 Dodaj komentarz

Jeszcze więcej problemów z Reflection.Emit

Czepianie, Klepanie

Jedną mam olbrzymią radę dla wszystkich, którym by kiedykolwiek do głowy przyszło korzystać z niekonsekwentnie zaprojektowanego, słabo udokumentowanego i kiepsko zaimplementowanego nejmspejsa: zastanów się dwa razy, zanim wpakujesz się w to po uszy.

Dzisiejsze godziny poranne upłynęły mi pod znakiem próby dobrania się do konstruktora listy o elementach typu, który jest w trakcie generowania. Konkretnie chodzi o takie coś:

    ConstructorInfo GetListConstructorInfo(TypeBuilder elementType)
    {
        Type listType = typeof(List<>).MakeGenericType(elementType);
        return listType.GetConstructor(Type.EmptyTypes);
    }

Specjalnie zadeklarowałem tu elementType jako TypeBuilder, żeby podkreślić, że ten typ nie został jeszcze stworzony. Jeśli ktoś śledził moje dotychczasowe przygody, to już wie czym się kończy wykonanie tego kodu: NotSupportedException.

24 października 2006, 20:43:25 Dodaj komentarz

Niekonsekwencja

Czepianie, Klepanie

Znowu będzie o Reflection. Najpierw odpowiem sobie sam jak ładnie stworzyć sobie obiekt reprezentujący typ polimorficzny:

    return typeof(List<>).MakeGenericType(new Type[] { elementType });

Nie przypuszczałem, że C# dopuszcza coś takiego jak List<>. Niestety okazuje się, że nie wszędzie się programistom Microsoftu chciało i poniższy fragment kodu już przez parser nie przejdzie.

    class A<T> { ... }
    class B<S> where S : A<> { ... }

W powyższym przykładzie trzeba dodać drugą zmienną typową do deklaracji typu B, żeby to przeszło.

24 października 2006, 20:14:35 Dodaj komentarz

Nietypowe zaproszenie na browara

Niepoważne

Kilka dni temu grupa znajomych ode mnie z pracy pochwaliła się na naszej wewnętrznej liście dyskusyjnej, że ich (załączony do rzeczonego mejla) artykuł został przyjęty na międzynarodową konferencję i w związku z tą sytuacją zapraszają wszystkich kolegów na prezentację połączoną z dyskusją panelową...

Artykuł (jak się później okazało) wygenerowali sobie przy pomocy odpowiedniego narzędzia, a mejl był tylko żartobliwym sposobem zaproszenia wszystkich na browarka.

Ale to nie koniec historii. Na ich mejla nadeszła po kilkunastu minutach odpowiedź pani prezes, w której pogratulowała całemu zespołowi sukcesu i życzyła kolejnych ;] Na szczęście chłopaki zachowali się odpowiedzialnie i wyjaśnili, że IPv4 nie daje się zastosować w odkurzaczach. Pani prezes nie ma się z resztą co dziwić - ma na codzień inne dokumenty do czytania. Tym bardziej zaś, że wygenerowane artykuły były już przyjmowane na konferencje.

17 października 2006, 19:34:19 1 komentarz

MakeGenericType anyone?

Klepanie

Potrzebuję bardzo prostej rzeczy: mając obiekt klasy Type reprezentujący interesujący mnie typ T chcę uzyskać obiekt klasy Type reprezentujący typ List<T>. Ja to robię tak:

    Type MakeListType(Type elementType)
    {
        return typeof(List<int>).GetGenericTypeDefinition()
            .MakeGenericType(new Type[] { elementType });
    }

Da się to jakoś ładniej osiągnąć?

16 października 2006, 19:15:31 Dodaj komentarz

Delegaty w C#

Czepianie, Klepanie

Delegaty jako element języka C# zawsze wydawały mi się niewygodne w użyciu. Nie jestem w stanie zrozumieć logiki ich podwójnej deklaracji:

    public delegate TOutput Converter<TInput,TOutput> (TInput input);
    public List<TOutput> ConvertAll<TOutput> (Converter<T,TOutput> converter)

Tak, jakby TOutput converter<T,TOutput>(T element) nie było dobrym argumentem dla ConvertAll.

I musze zmartwić panów projektantów z Microsoftu (choć tego nie czytają, więc ich raczej nie obejdzie), że syntax highlighting w Visual Studio niewiele pomaga - deklaracja delegatu zawsze będzie mi się mylić z deklaracjami zmiennych i (jako osobie przyzwyczajonej do wskaźników do funkcji z C oraz do deklaratorów z Nemerle) zawsze będzie mi to wadzić (o słabiutkiej inferencji typów w C# w ogóle nie chcę wspominać).

Kolejnym problemem delegatów w wydaniu Microsoftu jest niekompletna dokumentacja. To znaczy - informuje ona programistów, jak z nich korzystać, ale w przeciwieństwie do innych klas, brak jest odnośnika Members, a do hierarchii typów trzeba się dobierać z innej strony. W tej sytuacji, w charakterze dokumentacji korzystam z pary: kompilator-dissassembler oraz Reflectora (np. kompilator C# nie używa żadnego z konstruktorów klasy Converter'2, który byłby odziedziczony z którejś z nadrzędnych klas).

Cała ta gimnastyka przypomina mi trochę czasy implementowania obsługi SMTP albo POP3 - najpierw czytałem RFC, a potem obserwowałem co robią inne programy pocztowe. A ponieważ inne programy nie były zgodne z RFC, to dla dobra użytkownika ja również nie byłem.

07 października 2006, 13:57:20 2 komentarze

Backquotes dla Windows

Klepanie

Ku pamięci. Tak się robi podstawienie wyjścia programu do zmiennej w windowsowych batach:

FOR /F "tokens=*" %%G IN ('wywolanie programu z argumentami') DO SET ZMIENNA=%%G

Edit: Tak się oczywiście robi przypisanie ostatniego wiersza wyjścia.

02 października 2006, 10:48:04 Dodaj komentarz

Polski sportowiec wszechczasów

"Zachód"

Zgodnie z wczorajszą obietnicą zamieszczam linka do zdjęć z wczorajszego konkursu letniej GP w Klingenthal, gdzie ku naszej olbrzymiej uciesze wygrał Adam Małysz.

Siedzieć musieliśmy niestety na schodach, bo wolnych miejsc po prostu nie było.

Tak wygląda kibic Polski na zawodach letniej GP w skokach.

No a to mistrz we własnej osobie.

Adam Małysz

Pozostałe zdjęcia można znaleźć w galerii Karoliny.

PS: Wiem, że teraz jest moda na Kubicę, ale śmiem wątpić, aby kiedykolwiek udało mu się osiągnąć taką pozycję w F1 jak Adamowi w skokach. Wczoraj ponad 12 tysięcy niemieckich fanów krzyczało "Zieh!", gdy Małysz leciał po zwycięstwo.

01 października 2006, 19:57:17 Dodaj komentarz