niedziela, 6 października 2024

Aktualizacja po 10+ latach

 Czasy

Czasy się zmieniły. Poprzednia rzeczywistość to malutka córka, praca u Janusza (sic!) od 8 do 17, kodowanie w C#, przewijanie pieluch i wynoszenie nocnika.

Obecnie: pojawiła się druga córka, zdążyła już pójść do przedszkola a nawet myśli o szkole. Janusz zmienił imię na Roland czy też Jim (korpo pełną gębą). Języki też się zmieniają. Obecnie głównie Java i Python, TypeScript też nie pogardzę. Gdzies tam po drodze dorobiłem się cerytifkatów, między innymi AWS Architect Associate.

Plany

Szczegółowych planów brak. Wiek jest jaki jest, czasu na klepanie kodu coraz mniej, chęci też. Killer MUD działa ciągle prężnie, być może nie w taki sposób, w jaki bym chciał, ale jednak. Wena na pisanie gier minęła. Obecnie głównie konsumuję artykuły o soft skillach i stosuję niektóre wytyczne. Czasem działa, czasem nie.

piątek, 20 grudnia 2013

Spring - użycie w mudzie

Próbuję napisać muda. Prostego, bez specjalnych udziwnień, za to z użyciem "w miarę nowoczesnych" technologii. Na razie jest to kontener Spring, docelowo ma być też Spring MVC (edytor) oraz Spring REST (interfejs do edytora i samej gry).
Napisałem działający szkielet - jak na razie tylko bardzo podstawowa funkcjonalność, testowana jednowątkowo. Podejrzewam, że puszczone na 20-100 użytkowników wysypałoby się po kilku minutach.

Jak na razie wykorzystałem niewielki wycinek możliwości. Bardzo przydane jest @Schedule (umożliwia cykliczną aktualizację danych). Poznałem też znaczenie @Primary.

niedziela, 1 września 2013

Java reloaded

Trochę się pozmieniało.

Z programisty Delphi/Java1.4/SQL zostałem programistą C#/SQL. Nie byłoby w tym nic złego, ale:
1. IDE - Eclipse wygrywa, VS2012 "nie wspiera dużych projektów" (na blogu można przeczytać, że "przyczyną problemów z wydajnością środowiska jest zły projekt aplikacji" ;)
2. Projekt - ten na który trafiłem można nazwać  Big Ball of Legacy (w połączeniu z 1. oznacza kilkuminutową kompilację po każdej zmianie w kodzie).
3. Język - Podobny do Javy, trochę wodotrysków, ale bez szaleństw.

Powstał więc pomysł, żeby wrócić do korzeni, a dokładniej do Javy 1.6 i aplikacji webowych.

Tematy do zapoznania się/przypomnienia:

TDD:
  • JUnit
  • Mockito
  • Selenium
DDD/DI:
  • Spring
Tools:
  • Maven
  • Gradle
Misc:
  • Apache Commons Library - builders
  • Zmiany w pomiędzy wersjami 1.4 a 1.8

poniedziałek, 6 czerwca 2011

SQL - potyczki

Przykład z życia:
Jest sobie zapytanie SQL. Prosty SELECT z kilkoma joinami, kilka parametrów. Baza klienta - IBM DB2 6.1. Sterownik jt400 (z jtopen).
Tabelki mają po kilkaset milionów rekordów. SQL przy normalnym obciążeniu wykonuje się około 1 sekundy, dając na wyjściu od 0 do 20-100 rekordów.
Zapytanie jest raz przygotowane, później wiele razy wykonywane z różnymi parametrami.
Od pewnego czasu pojawił się problem:
Zapytanie wykonane kilka (tu: 3 razy) z różnymi zestawami parametrów (nazwijmy je A, B i C) wykonuje się poprawnie.
Takie samo zapytanie wykonane w kolejności B, A, C - również wykonuje się poprawnie
Jednak kolejność C, B, A - powoduje zawieszenie się zapytania na długie godziny (w końcu po 2-3 godzinach jest poprawny wynik).

Pytania testowe:
1. Co może być przyczyną.
2. Co zrobić (bez znajomości przyczyny), żeby system działał poprawnie.

czwartek, 22 kwietnia 2010

Potyczki algorytmiczne

Na początku informacja, o co chodzi: http://www.konkurs.adb.pl

Wziąłem udział, zarejestrowałem się.
Na początku rozgrzewka, wybór języka i poznanie niuansów automatycznego testowania.
W naturalny sposób wybór padł na javę. Znam, używam na co dzień w pracy, co prawda w wersji 1.4, ale zawsze coś, pomyślałem, że nie będę miał większych problemów.
Runda próbna została rozwiązana metodą "brute force" - wynik i tak się nie liczył, chodziło głównie o sprawdzenie wydajności maszyny testującej - na co można sobie pozwolić.
Zadanie dosyć łatwe - o ile zastosowało się rozwiązanie najprostsze o poziomie komplikacji O(n^4).

Nadeszła runda pierwsza.
Dwa zadania, na początku wydawało się, że zadanie dla grupy B jest trudniejsze niż dla grupy A - co w zasadzie nie powinno nastąpić. Okazało się, że jednak zadanie dla grupy A było trudniejsze, ze względu na ilość danych.
Java poległa - ze względu na obowiązki zawodowo/domowe nie miałem czasu na testowanie różnych rozwiązań - zakodowałem to co wymyśliłem w pierwszym podejściu.
Metoda rekurencyjna... Dla małych ilości danych spisywała się "śpiewająco", ale dla średnich i dużych porażka. Pierwszy raz w życiu udało mi się zobaczyć komunikat "Heap overflow error". Zadanie B - podobnie rozwiązane "na kolanie", dzięki dobrym duszyczkom z forum miałem wystarczającą ilość danych do testowania.

Później zaczęły się schody...

Drugi etap zaskoczył mnie - miałem małe problemy ze zrozumieniem treści zadania dla grupy A, a zadanie dla grupy B przerosło mnie. Na dobrą sprawę nie były zbyt trudne - problemem okazał się poraz kolejny język i jego ograniczenia. Samo wczytanie danych do zadania A w wersji "maksymalnej" zabierało 50% limitu czasu...

Stwierdziłem, że spróbuję w przyszłym roku, uzbrojony w C/C++, kilka przeczytanych książek o algorytmach dotyczących grafów (Dijkstra, Bellman-Ford, itp.).

wtorek, 5 stycznia 2010

Wrażenia po MMORPG'ach

Niedawno, w celach rekreacyjnych, grałem w kilka MMORPG'ów - m.in. w Metin2, PerfectWordl i Rappelz Była to dosyć duża odmiana po tekstowym Killerze.

Gry jako takie nie są specjalnie świetne - w zderzeniu z moją maszynerią mają zbyt duże wymagania, procesor smaży się, a karta grafiki ledwo daje radę. Fabuła niekiedy przejawia się w postaci natarczywego okienka "Idź do" albo "Zniszcz/zabij X", lecz ciężko na nią trafić w innych momentach. Odnoszę czasem wrażenie, że gracz jest prowadzony za rękę "rób questy, a osiągniesz jakiś poziom", po czym na którymś poziomie (zależnie od gry) pozostawiany jest samemu sobie. Po przejściu Morrowinda mam nieco zwichrowane wymagania dotyczące grywalności i nieliniowości fabuły - chciałbym aby wszystkie gry były takie.

sobota, 5 grudnia 2009

Ubuntu - wrażenia po instalacji

Tytułem wprowadzenia - jestem posiadaczem laptopa Toshiba Satellite Pro L300. Kiedyś była na tym Vista, ale wyleciała po 30 minutach użytkowania, znalazł się XP - znaleziony w pudełku z laptopem. Próbowałem odpalać różne linuxy, ale zazwyczaj albo zawieszały się podczas odpalania, albo nie wykrywały poprawnie sprzętu - ot taki urok.
Jako, że jestem leniwy zdecydowałem, że poczekam na jakiegoś linuxa, który zaskoczy za pierwszym podejściem.

Po kilku podejściach (bootowane z usb, lista na http://www.pendrivelinux.com/) okazało się, że warunki spełnia najnowsze Ubuntu 9.10.

W tak zwanym międzyczasie znalazłem wpis o możliwości dostania darmowej płytki z Ubuntu. Dostałem 4 dni po premierze - co spowodowało bardzo miłe zaskoczenie.

Dziś nadszedł dzień instalacji - płytka w napęd, reboot...

Odpalił się Live CD, potwierdzając wcześniejsze obserwacje - cały sprzęt wykryty, działa poprawnie, nawet kółko kontroli dźwięku zostało poprawnie obsłużone.
Wpisałem hasło do WLAN'a - też zadziałało od razu.

Potem poszło już z górki - gparted zmniejszył jedną z partycji, wolne miejsce użyłem na 2 partycje - ext4 i swap. Odpaliłem program instalujący Ubuntu - kilka pytań dotyczących języka, czasu i partycji, na których ma się zainstalować system, dalej, dalej, dalej... - prawie jak w Windows ;)

System instalował się, a ja oglądałem kolejne odcinki LFG.

Reboot - i zawiodłem się. Poprzednio używane sytrybucje - takie jak OpenSuse przyzwyczaiły mnie do ładnie wyglądającego menu startowego, łatwego w konfiguracji i łatwym sposobie wyboru systemu domyślnego (komputer użytkuje również żona, więc domyślnie Windows).
Domyślnie instalujący się grub jest ohydny.... Czarne, wyświetlane za pomocą BIOS'u menu - całe szczęście, że w 0x13h.

Pogodziłem się z sytuacją - chciałem ustawić Windowsa jako system domyślny:
su xterm, mc, cd /etc/grub2 i kolejny szok - z czegoś co było łatwe proste i przyjemne zrobiono coś zrozumiałego tylko dla maszyny.

Idę czytać dalej...