Na pierwszy ogień – Randomizery

Przy okazji odgruzowywania repozytoriów z Flaksatorem – 2-3 wersje ;-), ta na Githubie może się okazać, że nie jest najlepszą… (Nic to, po drodze się naprawi.) – odgrzebałem rozmaite wersje tzw. „wspólnych bibliotek”, do których w(y)rzucałem przydatne we współdzieleniu klasy i komponenty.

W pierwszej kolejności zająłem się ważnym komponentem generującym losowe wartości. Zwłaszcza, że w pewnych częściach przydatny jest / będzie w kilku moich innych pet-projektach. Ktoś powie – a na grzyba, przecież jest klasa Random?!
I w zasadzie słusznie. Problemy są trzy:

  • Podobno nie jest zbyt szybka
  • Podobno jej rozkład pozostawia wiele do życzenia
  • Nie da się spersystować / serializować jej stanu

Co do ostatniego – to BinaryFormatter powinien sobie z tym łatwo poradzić (Random implementuje interfejs ISerializable, mimo, że publicznych pól nie posiada…) – o tym w kolejnym poście.

W międzyczasie – myślę – warto spróbować zweryfikować dwie pierwsze tezy. Najlepiej móc porównać z czym innym. Idealnym kandydatem wydaje się szeroko rozpowszechniony algorytm Mersenne Twister, którego mam kilka wersji:

Czytaj dalej Na pierwszy ogień – Randomizery

Proste śledzenie wydajności serwisu (#bieda)

Uch, ponoć najtrudniej jest zacząć… Ciągle zbieram treść i materiały na zasadnicze posty, stąd najpierw chyba kilka szortów, które przyszły mi do głowy przy okazji pracy nad tamtymi / lub wygrzebałem je podczas przeszukiwania archiwów kodu i różnych jego wersji.

Na dzisiaj zagadnienie trywialne, ale wkurzające w realizacji. Zapewne można je rozwiązać na inne sposoby, ale implementacja tego zajęła mi o wiele mniej czasu niż prawdopodobne poszukiwania narzędzia (na którego użycie i tak zapewne nie dostałbym w firmie zgody ;-)). Zwłaszcza, że większość kodu już miałem kiedyś napisaną na inne potrzeby.

Otóż. Potrzebuję zweryfikować średnie czasy wykonania jakiegoś zdalnego kodu – wybranych funkcji lub ich fragmentów. Zdalne podpięcie profilera nie wchodzi w rachubę ze względu na brak dostępu do śledzonego serwera w sposób inny niż deployment/ WCF.

Można oczywiście zrzucać te czasy do logów, ale potem i tak trzeba by to zbierać i w jakiś sposób analizować. I jeszcze się do tego dobrać, co jak wspomniałem miałem utrudnione. Postanowiłem zbierać te dane ręcznie i wystawić przez WCF.

Wzmiankowana zdalna usługa posiada także stowarzyszoną usługę, wystawioną obok – nazwijmy ją InstrumentationService, która jest już wykorzystywana do zdalnego modyfikowania parametrów pracy głównej usługi – zamiast modyfikowania pliku web.config – na potrzeby testowania. Dobrze, mogę ją łatwo rozbudować.

Czytaj dalej Proste śledzenie wydajności serwisu (#bieda)

Flaksator – wprowadzenie

Zabawnie zbiegły się w jednym czasie interesujące okoliczności – Maciej Aniserowicz ogłosił kolejną edycję konkursu Daj się poznać, ja miałem ochotę wrócić do pisania a do tego odgrzebałem źródła jednego starego projektu – parodystycznego generatora tekstów piosenek black/death metalowych.

Zastanawiałem się jeszcze nad wznowieniem tworzenia Anonimizatora, ale póki co nie mam wystarczająco weny do tego – a bardziej zewnętrznej motywacji, ale głównie dlatego, że wznowiłem prace nad jeszcze innym, prehistorycznym projektem… Początkowo zastanawiałem się, czy nie pisać o niem, ale warunki konkursu (projekt open-source) go dyskwalifikują, mimo, że IMHO jest najciekawszy – ale to jest z założenia projekt o zamkniętym bazowym kodzie, za to otwarty na rozszerzanie. Ale pewnie i tak w jakiejś postaci prędzej czy później się tutaj pojawi 🙂

Tymczasem. Czym jest Projekt Flaksator? Jest to aplikacja oparta o moją wymyśloną (głównie) na jej potrzeby bibliotekę „Foneksator” do odmieniania części mowy przez przypadki, osoby itd. To nie miało być rozwiązanie do sprawdzania poprawności pisowni / gramatyki. Absolutnie. Założenie było takie by mając wybrany wyraz z bazy dostępnych słów zapisać go w potrzebnej odmianie. Za natchnienie posłużyły rozmaite prymitywne generatory białych wierszy i tekstów piosenek, ale bazujące jednak na sztywnych bazach wyrazów – a ja chciałem bardziej zróżnicowanych wyników. Poza tym było to całkiem zabawne, zwłaszcza po prowadzeniu do słownika wyrazów zupełnie od czapy.

Przykładowy wygenerowany tekst utworu:


[1.0] DARMOWY BLIŹNI
Wyjmuję miecz, robię zamach i mierzę w Ciebie,
To Twe ostatnie chwile, już za moment będziesz w niebie.
Chwyciłem mózg w dymającym smoczku,
Nadejdą dziś dziewicy polimorficzne fale.

(Refren)
W Twych duszach widzę tłuste gardło,
Dusząc Cię nie gryzie mnie jednak smoczysko.
Dostrzegłem ciało, doniczkę dziada,
Nie, nie zawiodę dziś mego doktora.
Już Cię widzę, jeszcze poranek, jeszcze frytka,
Ja już czuję jak bagno me się w Ciebie wbija.

Rzucasz mi się u nocy na ostrza o jęk mnie błagając,
Mnie to nie rusza, "Zginiesz jak Pan!" - krzyczę, trumną Cię przebijając.
Pancerz mroku w moich aparoskopiach,
Delektuje się w Twoich kaczuszkach.

(Refren)
W polnym odbycie dziś morduję,
skarbników, inkubów i inne śrubki.
Czuję Twój strach gdy ostrze me podąża wzdłuż Twej twarzy,
Woń flaków Twych, jelit, serca, płuc, podnieca mnie, ich dotyk parzy.
Rzucasz mi się u gnid na zwłoki o flak mnie błagając,
Mnie to nie rusza, "Zginiesz jak Yeti!" - krzyczę, lobotomią Cię przebijając.

Nastąpił świat zastanawiania,
Nadszedł już zew zabijania.
Jesteś w mej jatce, czas zmówić zielonego afrodyzjaku,
To już Twój zew, pochłonie Cię zombiaka kwiat.

Umywalki Twoje wezwały mnie,
Omamowi doktorowej nie powiem nie.
Znalazłem skrzep mojego wroga,
Wbiję go w łba mego sukuba.

Czytaj dalej Flaksator – wprowadzenie