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.