Artykuł: Systemy cząsteczkowe -- część 1We 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 iPademDzisiaj 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.
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:
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++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:
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++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?
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 domenyZa 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 IEWię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ęść 1Chyba 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 integrationJedną 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:
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 drukuWe 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):
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 OneDzisiaj 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.