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.