Artykuł: Systemy cząsteczkowe -- część 1

04.08.2010 @ 14:39:51 by Rafał Kozik | gamedev grafika strona

We Wrocławskim Portalu Informatycznym (WPI) jakiś czas temu pojawił się artykuł mojego autorstwa: "Systemy cząsteczkowe -- część 1". Mam nadzieję, że się spodoba ;)

Przy okazji komunikat: komentowanie na stronie zostało tymczasowo wyłączone w związku z pojawiającym się spamem. Wróci zaraz po przeniesieniu strony na WordPress.


Bliskie spotkania 3 stopnia z iPadem

28.05.2010 @ 21:10:52 by Rafał Kozik | iPad

Dzisiaj odbyła się premiera iPada w Europie, a przynajmniej w tej bardziej cywilizowanej części. Polska niestety musi sobie jeszcze na niego poczekać, a szkoda, bo urządzenie jest bardzo ciekawe.

Obrazek
my precious

Tak się złożyło, że jestem aktualnie na wakacjach w Barcelonie i udało mi się pobawić chwilę tym ciekawym urzadzeniem. Nie ma co się za bardzo rozpisywać w tej kwestii, bo wszystkie informacje na jego temat można znaleźć w sieci. Trochę wniosków z 10 minutowej zabawy:

  • Bardzo solidnie wykonany -- w sumie standard wśród produktów Apple, więc to nie jest żadne zaskoczenie.
  • Waży trochę więcej niż się spodziewałem, ale waga jest raczej w sam raz (w tej kwestii chyba każdy ma swoją opinię).
  • Duża klawiatura ekranowa nawet się sprawdza do wprowadzania tekstu.
  • Przy głośniejszym odtwarzaniu dźwięku bardzo drży -- nie wiem czy to wada egzemplarza którym się bawiłem, czy ogólny problem. Co najmniej irytujące.
  • Wbudowane aplikacje działają świetnie -- oglądałem mapy, książkę adresową, notatki i youtube. Są znacznie lepsze niż odpowiedniki na iPhone.
  • Prędkość działania jest bardzo dobra -- nie widać żadnych przycięć, spowolnień ani nic takiego. System działa lepiej niż na iPodach z którymi miałem styczność.
  • Gra się na tym bardzo fajnie -- sprawdziłem Plants vs Zombies, Flight Control, Labyrinth 2 i jakieś wyścigi. Ta platforma ma ogromny potencjał.

Gdybym miał wymieniać wady to z mojej perspektywy jest tylko jedna -- cena. Przy aktualnym kursie Euro podstawowy model kosztuje ~2000 zł. Wbudowana obsługa sieci 3G (moim zdaniem obowiązkowa przy tego typu urządzeniu) to koszt dodatkowych 100 Euro. Mimo wszystko chętnych nie brakuje -- koło godziny 15 nie było wystawionego żadnego egzemplarza na sprzedaż ;)


Mechanizm promocji w C++

18.05.2010 @ 11:33:28 by Rafał Kozik | C++ szablony programowanie

W standardzie języka C (i C++) opisany jest mechanizm promocji, który polega na automatycznej konwersji z mniejszego typu na większy (np. short na int). Istnieją dwa rodzaje promocji:

  • promocja całkowita (ang. integral promotion) -- konwersja liczb całkowitych
  • promocja zmiennoprzecinkowa (ang. floating point promotion) -- konwersja liczb zmiennoprzecinkowych

Zachowanie to jest bardzo intuicyjne. Dodatkowo, w przypadku użycia funkcji o zmiennej ilości argumentów (tzn. użycia ...), małe typy całkowitoliczbowe ulegają promocji do int / unsigned int, a float do double. To jest już trochę mniej naturalne, ale ta wiedza może czasami się przydać (choćby do tego, żeby tego nie używać ;)).

W C++, z mechanizmem promocji wiąże się dodatkowy problem przy pisaniu funkcji szablonowych. Typowa implementacja max wygląda tak:

template <typename T>
const T& max(const T& a, const T& b)
{
    return (a > b) ? a : b;
}

Wszystko byłoby fajnie, gdyby nie fakt, że wywołanie max(1.0f, 2.0) się nie skompiluje. Da się to rozwiązać bawiąc się trochę szablonami -- o tym w dalszej części.


Szablony w C++

17.05.2010 @ 20:27:08 by Rafał Kozik | C++ szablony programowanie

Szablony są bardzo ciekawym elementem języka C++. Zdarza mi się przeglądać nie mój kod i często mam wrażenie, że ich użycie (poza wykorzystywaniem biblioteki STL) ogranicza się do tworzenia uniwersalnych funkcji i struktur danych, a to dopiero wierzchołek góry lodowej.

Co właściwie można osiągnąć za pomocą szablonów?

  • implementacja uniwersalnych funkcji i struktur danych
  • wykonywanie obliczeń w trakcie kompilacji
  • podejmowanie decyzji w trakcie kompilacji
  • generowanie zoptymalizowanego kodu źródłowego
  • budowanie uniwersalnych wzorców zachowań

Ostatnie dwa punkty mogą wymagać dodatkowego wyjaśnienia.

Jeżeli chodzi o generowanie zoptymalizowanego kodu źródłowego, to za pomocą szablonów możemy generować kod, który nie ustępuje pod względem wydajności ręcznej implementacji. Możliwa jest implementacja klasy wektora (matematycznego), gdzie rozmiar jest parametrem szablonu, a wydajność jest zawsze taka jak w przypadku optymalnej implementacji dla każdego rozmiaru z osobna.

W kwestii budowania uniwersalnych wzorców zachowań sprawa jest trochę bardziej skomplikowana -- mam tu na myśli programowanie z użyciem wytycznych, które opisuje Andrei Alexandrescu w książce "Modern C++ Design". Podczas implementacji często istnieje wiele możliwych (i sprzecznych ze sobą) rozwiązań. Czy kod ma być thread-safe? Jak ma wyglądać alokacja pamięci? Decyzje o tym powinien podejmować użytkownik kodu w zależności od swoich potrzeb i takie właśnie zachowanie można osiągnąć używając szablonów w C++.

Mechanizm szablonów ma bardzo dużą siłę ekspresji, rzadko spotykaną w innych językach. Aby nie pozostać gołosłownym, w najbliższym czasie pojawi się seria wpisów z użyciem szablonów.


Zmiana rejestratora domeny

14.05.2010 @ 12:51:55 by Rafał Kozik | strona webdev z życia

Za kilka dni mija 5 lat odkąd jestem właścicielem domeny revo.pl. Zbliża się termin ważności i miałem kilka problemów z jego przedłużeniem. Mam nadzieję, że tym wpisem zaoszczędzę komuś nerwów w przyszłości ;)

5 lat temu wykupiłem plan hostingowy i domenę w firmie X (nie będę wytykał palcem). Z hostingiem, z powodu bardzo niskiej jakości usług, szybko się pożegnałem. Domena niestety została w tej firmie -- do wczoraj. Jakiś czas temu dostałem przypomnienie o terminie wygaśnięcia domeny i za nią zapłaciłem. Gdy zaczął zbliżać się termin ważności, a domena nie została przedłużona, upominałem się drogą mailową. Gdy to nie poskutkowało próbowałem się dodzwonić, jednak nikt pod wskazanym numerem nie odbierał telefonu. Na szczęście firma X jest tylko resellerem i udało mi się zdobyć kod AUTHINFO od rejestratora (firma HRD). Musiałem tylko dopełnić jeszcze kilka formalności związanych ze zmianą adresu e-mail w bazie danych resellera -- mimo, że w panelu administracyjnym zmieniłem e-mail kilka lat temu, do domeny była przypisana skrzynka, która już nie istnieje.

Po zdobyciu kodu AUTHINFO przeniosłem domenę do NetArt. Tam mam wszystkie swoje domeny i nigdy nie miałem z tą firmą najmniejszych problemów. Cały transfer zajął niecałą dobę. Konfiguracja dns została automatycznie przepisana, więc nie było żadnych przerw w działaniu strony i skrzynek pocztowych. Opłaciłem już fakturę związaną z przedłużeniem (sam transfer jest bezpłatny) i pewnie jeszcze dzisiaj będę miał przedłużoną ważność domeny.

Dlaczego o tym piszę? Pewnie wiele osób ma domeny i/lub inne usługi wykupione w małych, jednoosobowych firmach, które w pewnym momencie mogą przestać odpowiadać. Nie mówię, że takie firmy są złe z definicji, ale jeżeli bywały jakies problemy w przeszłości (a u mnie tak było) to warto uciec jak najszybciej, żeby nie tracić nerwów. W najgorszym przypadku można stracić trochę pieniędzy, domenę i/lub dane składowane na serwerze. Czasami jest to dość duża strata.


Testowanie stron w starszych wersjach IE

29.04.2010 @ 14:05:01 by Rafał Kozik | webdev

Większość nowoczesnych przeglądarek jest aktualizowana dość często (i automatycznie), więc nie ma potrzeby sprawdzania kompatybilności stron internetowych z ich starszymi wersjami. Niestety z IE jest trochę gorzej i wciąż dużo osób używa wersji 6 lub 7. O ile IE6 powinien zniknąć w czeluściach internetu, ponieważ wsparcie dla niego zaczyna znikać z popularnych serwisów, IE7 cieszy się dużą popularnością.

W jaki sposób łatwo sprawdzać kompatybilność stron internetowych z różnymi wersjami IE? Istnieje bardzo proste rozwiązanie -- IETester. Program pozwala uruchomienie strony na każdym silniku IE, począwszy od wersji IE5.5.


Gry na iPhone warte polecenia, część 1

03.04.2010 @ 20:48:52 by Rafał Kozik | iPhone gry

Chyba każdy kto zajmuje się tworzeniem gier, niezależnie czy robi to hobbystycznie czy zawodowo, lubi sobie czasami w coś zagrać. Tak jest w moim przypadku i muszę przyznać, że w ciągu ostatnich kilku miesięcy grałem znacznie więcej niż wcześniej. Wszystko za sprawą iPoda Touch. Miałem wcześniej Nintendo DS i Sony PSP -- z żadnym z tych sprzętów nie spędziłem aż tyle czasu. Pewnie dlatego, że gry są strasznie drogie i nie ma darmowych gier i wersji demo. Dzisiaj postanowiłem napisać o kilku grach, które szczególnie przypadły mi do gustu. Zapraszam do dalszej części.


Continuous integration

20.03.2010 @ 00:15:46 by Rafał Kozik | agile iPhone programowanie gamedev

Jedną z rzeczy na które kładziony jest nacisk w zwinnych metodologiach (ang. agile) to ciągła integracja. Pod tą nazwą nie kryje się nic innego jak częste, automatyczne czynności dotyczące projektu, zwykle kompilacja i uruchamianie testów jednostkowych i/lub regresyjnych. Ma to na celu szybkie wykrywanie problemów i ich rozwiązywanie. Ponieważ problemy są wykrywane szybko, powinno dać się je dość łatwo wyeliminować. Dzięki temu w każdym momencie mamy dostęp do sprawnego builda.

Przykładowe zalety takiego podejścia:

  • częste buildy, np. po każdym uaktualnieniu repozytorium
  • uruchamianie testów i zbieranie informacji które zmiany odpowiedzialne są za ich niepowodzenie
  • możliwość kompilacji z różnymi kompilatorami i na różnych platformach

Podczas każdego builda powstają pliki, które możemy chcieć zachować -- nazywane są artefaktami. Mogą to być logi, wyniki testów, pliki wykonywalne, informacje o użytych plikach itp. Pozwala to na jeszcze lepsze śledzenie zmian w projekcie i znajdowanie problemów.

Najważniejszą rzeczą w całej idei continuous integration jest automatyzacja. Możemy kupić potężny komputer za kilka tysięcy, który będzie to wszystko robił i można znacząco zmniejszyć obciążenie członków zespołu. To inwestycja, która na pewno zwróci się bardzo szybko.

Tyle w teorii -- a jak to wygląda w praktyce? Na licencji MIT dostępny jest Hudson. Jego konfiguracja jest bardzo prosta i współpracuje chyba z każdym popularnym systemem kontrolii wersji ;) Sam używam go na komputerze Mac Mini do kompilacji 3 projektów -- frameworka i aplikacji, które go używają. Jak wiadomo, aplikacje pod iPhoneOS można niestety kompilować tylko pod systemem Mac OS X. Dzięki takiemu rozwiązaniu w kilkadziesiąt sekund od aktualizacji repozytorium mam przygotowanego zipa ze skompilowaną aplikacją, którą mogę pobrać w każdym miejscu na świecie przez przeglądarkę i zainstalować przez iTunes pod Windows. Ma to ogromne znaczenie w zespołach, które mają dostęp tylko do jednego komputera Mac.


Freedoku w druku

11.03.2010 @ 12:45:49 by Rafał Kozik | freedoku

We wrześniu pisałem o Freedoku w wersji do druku. Trochę to zajęło, ale Freedoku pojawiło się w wersji drukowanej!

Freedoku jest umieszczane na łamach miesięcznika "Teraz Zagłębie", ukazującego się w miastach Zagłębia Dąbrowskiego. Poniżej można zobaczyć jak to wyszło (pozwoliłem sobie rozmyć reklamy):


Obrazek

Pojawiło się kilka problemów technicznych z wydrukiem, jednak mam nadzieję, że uda się je rozwiązać w kolejnych numerach.

Jakie dalsze plany dla Freedoku? Na razie żadne, chociaż kto wie, może kiedyś pojawi się wersja na którąś z popularnych platform mobilnych.


Problem z multi-touch w Nexus One

05.03.2010 @ 23:31:30 by Rafał Kozik | sprzęt

Dzisiaj będzie trochę gdybania ;) Zrobiło się głośno o tym, że Nexus One 'gubi się' przy obsłudze multi-touch. Google obwinia HTC za użycie niskiej jakości ekranu dotykowego. Niestety wydaje mi się, że nie uda się tego rozwiązać w aktualizacji oprogramowania. Dlaczego? O tym w dalszej części.


 [1] 2 3 ...