• Kolejny rower

    image

    Będzie remont kolejnego roweru. Tym razem takie cudo dla żony. Zaszaleję i chyba nawet będzie malowanie ramy. A co!

  • Nowe Endomondo

    Kilka dni temu pojawiła się aktualizacja Endomondo, jednego z najlepszych GPS trackerów na smartfony. Pisał o tym Grzegorz na Pendrajwiku. Korzystam z niej od ponad roku i w sumie, jeśli nie liczyć kilka wpadek (na przykład, aplikacji zapomniało się zapisać pierwszych 50km trasy rowerowej, ot tak, zupełnie przez przypadek), sprawowała się bardzo dobrze.

     

    Co się zmieniło? Interface użytkownika. Nie mówię, że nowy jest ładny, a stary był brzydki. Stary był OK, nowy jest ładniejszy, czystszy, bardziej elegancki, czy jakkolwiek to określić. Do tego, teraz można wybrać wskaźniki jakie widać na ekranie. Fajnie. Tyle tylko, że jest to zmiana, która nic nie zmienia. Dlaczego? Może opowiem na przykładach.

    Idę biegać. Co robię?

    1. wychodzę z domu
    2. uruchamiam Endomondo
    3. czekam na złapanie fixa
    4. wciskam Start
    5. chowam smartfon do kieszeni
    6. biegam
    7. wyciągam smartfon z kieszeni
    8. wciskam Stop
    9. wyłączam Endomondo

    Ok, Ok, bieganie mogło być złym przykładem. Lepszym będzie jazda na rowerze.

    1. wychodzę z domu
    2. uruchamiam Endomondo
    3. czekam na złapanie fixa
    4. wciskam Start
    5. chowam smartfon do kieszeni/sakwy
    6. jeżdzę na rowerze
    7. wyciągam smartfon z kieszeni/sakwy
    8. wciskam Stop
    9. wyłączam Endomondo

    Dobra, rower też nie był najlepszym przykładem. Pływanie? Chodzenie? Nie... to zawsze wygląda tak samo. Już wiecie o czym piszę? W aplikacji na którą się nie patrzy, wygląd nie ma dużego znaczenia. Wystarczy, żeby była używalna i nie gwałciła poczucia estetyki. Naprawdę. Wysiłek developerów zmarnowany. Osobiście bym wolał jakieś przydatne ficzersy.

    Ale, ale... nie będę hejtował. Nowe Endomondo jest lepsze od starego. I to dużo lepsze. Jest jedna rzecz, która powoduje, że cała przebudowa UI była tego warta. Już nie można przez pomyłkę zatrzymać treningu. Teraz, po uruchomieniu treningu nie ma już przycisku Stop. Jest tylko duża pauza. Mały Stop pojawia się dopiero po zapauzowaniu. Koniec o pomyłkami. Jednak było warto!

  • Archaiczne przeglądarki to zło!

    Na Smashing Magazine jak zwykle można polegać. Tym razem obszernie o tym, dlaczego "stare ale jare" uprzykrzacze dla webdeveloperów spowalniają rozwój internetu. Ciekawa lektura.

    Ze swojej strony jeszcze powiem, że jak tak dalej pójdzie, to Internet Explorer 6 na papierze będzie żył wiecznie. Choć obecnie stanowi grubo poniżej 1% wszystkich przeglądarek dalej każe nam się pisać strony z nim zgodne. Odkąd regularnie analizuję zamówienia publiczne związane z tworzeniem stron internetowych nie mogę się nadziwić, czemu zamawiający w SIWZ czy OPZ dalej jako jeden z wymogów wpisują zgodność z IE6. Wymagają zgodności z przeglądarką, której praktycznie nie ma na rynku. W efekcie, wykonawcy muszą robić coś, co w samych swoich założeniach jest złe i pozbawione głębszego sensu. Zarówno ideowego, jak i finansowego. A spróbuj Wykonawco nie zrobić zgodnie z OPZ jak Zamawiający się uprze... oj spróbuj...

  • Pulsar Online: adventure continues

    Ten projekt chyba nigdy mi się nie znudzi. Od kilku tygodni znów siedzę wieczorami nad silnikiem Pulsara, po raz kolejny przepisując to i owo. A w szczególności:

    Interface gameplay.

    Obecny jest zbyt zakręcony. Za dużo danych zbędnych męczy gracza, a nowy gracz od razu się pogubi. Jak zwykle w ruch poszedł mój ulubiony Twitter Bootstrap i kolejne etapy ewolucji wyglądają mnie więcej tak:

    Wersja oryginalna

    Wersja przejściowa 1

    Wersja przejściowa 2

  • Asfaltowanie Niemierzyńskiej

    Na remontowanej Niemierzyńskiej, na wysokości Technoparku Pomerania trwa właśnie układanie warstwy zdzieralnej asfaltu na pasie prowadzącym w kierunku ulicy Krasińskiego.

  • Muszę oduczyć się prób naprawiania elektroniki

    Zdecydowanie muszę. Szybko. Nie stać mnie na samodzielne naprawy, czy raczej próby napraw na własną rękę. W zeszłym roku zepsułem tani tablet, wczoraj ten sam los spotkał nawigację GPS. Na ekranie pojawiła się przerywana linia. Przerywana linia, znak, że coś nie kontaktuje w LCD. Rozkręciłem, poprawiłem taśmy, chciałem docisnąć, krótki "brzdęk" i LCD pęknięty. Drugi raz to samo. Następnym razem od razu niosę do serwisu, mam dość psucia elektroniki.

  • Będzie nowy (stary) mobilny system operacyjny

    A jednak... Do walki mobilnych systemów operacyjnych wchodzi nowy gracz: Jolla Ltd. ze smartfonami wyposażonymi w system MeeGo. Jak na razie, mamy tylko ogólne zapowiedzi chęci "(...) tworzenia, produkcji i sprzedaży nowych smartfonów na platformie MeeGo (...)". Miejmy nadzieję, że im się uda, bo na rynku przydał by się powiew świeżości i nie ma w chwili obecnej systemu który spełniał by moje oczekiwania. W związku z tym, sam posiłkuję się nieoficjalnym Androidem (LG P970 z CyanogenMod) z launcherem w stylu Metro z Windows Phone. Ot, takie pomieszanie z poplątaniem.

    Źródło: pendrajwik.pl

  • Szybki kurs Twitter Bootstrap, lekcja numer 6

    Od poprzedniego odcinka przyspieszonego kursu Twitter Bootstrap minęło sporo czasu. Nic to, nadrabiamy zaległości i w dzisiejszym odcinku będzie o przyciskach.

    W Bootstrapie przyciski tworzymy dodając klasę CSS btn do tagów <a> i <button>. Przykładowo kod HTML

    <button class="btn">Przycisk</button>

    Wygeneruje coś takiego:
    Oprócz klasy btn mamy jeszcze do dyspozycji jej modyfikatory (dodajemy do elementu klasę btn i jej modyfikator):

    Szybko, prosto, łatwo i przyjemnie. A w następnym odcinku będzie o ikonach. A może nie... zobaczymy...

  • Włamanie do zbiornika paliwa

    Mieszkam na wisi. Cisza, spokój, niezbyt daleko od miasta. Byłoby super, gdyby raz na jakiś czas nie zdarzały się rzeczy burzące mój spokój. Na przykład, popatrzmy na zdjęcie poniżej.

    Co jest nie tak? Korek paliwa zamocowany na srebrna taśmę klejącą aka duct tape. Domorośli złodzieje paliwa postanowili włamać się do baku i spuścić paliwo. Korek wyrwali, w krzakach znalazłem tylko białą maskownicę. Cały mechanizm jest bóg wie gdzie. Spuścili paliwo? Aby spuścić paliwo w baku najpierw paliwo musi być w tymże baku. A akurat nie było, bo samochód ruszany z parkingu raz na 2 tygodnie. Innymi słowy. Jestem w plecy korek paliwa. Nowego nie kupię, bo nie produkują. A na szrotach za używany chcą absurdalne pieniądze, a w dodatku będzie potrzebny dodatkowy kluczyk. Z tego powodu we wlewie siedzi korek uniwersalny, a dziura jest zakryta oryginalną maskownicą. Prawda, że wygląda to cudnie?

  • Haters gonna hate!

    Zupełnie nie wiem dlaczego, ale wygląda na to, że PHP jest ulubionym tematem haterów-programistów. OK, nie jest idealnym językiem, ma swoje wady i absurdy. Nawet całkiem sporo. Nie ma co ukrywać. Ale jak wiemy haterów ci u nas dostatek i dziś wpadł mi w ręce pewien przydługi artykuł na którym to smutny programista wypisuje jakie to PHP jest be i w ogóle. OK, czasami ma rację, lecz częściej albo mija się z prawdą albo podaje tak absurdalne przykłady, że głowa boli. Oto subiektywne 'the best of':

    • "There is no threading support whatsoever.". Przepraszam bardzo, ale po co PHP wielowątkowość. PHP nie musi być wielowątkowe, bo PHP służy do dynamicznego generowania stron WWW. Just like that. Jeden request, jeden wątek PHP i starczy. Nie trzeba więcej. Na prawdę;
    • "== converts to numbers when possible  (123 == "123foo"… although "123" != "123foo")". Nie... rzutowanie występuje tylko w przypadku kiedy jeden z argumentów jest typem liczbowym. A nie kiedy to tylko jest możliwe;
    • "There is no way to declare a variable.". A za przeproszeniem $foo = null; to niby co to jest?;
    • "Global variables need a global declaration before they can be used.". I bardzo dobrze. Na prawdę nie rozumiem po co do funkcji importować domyślnie WSZYSTKIE zmiennie zainicjowane poza innymi funkcjami;
    • "There are no references. What PHP calls references are really aliases;". A co to niby za różnica, skoro działa? Hatujemy dla zasady?;
    • "Try it: not only does var_dump(int) not work,". A niby czemu miało by działać? I do czego miało służyć? Jak sama nazwa wskazuje var_dump zrzuca dane o zmiennej/obiekcie. Tylko tyle i aż tyle;
    • "Appending to an array is done with $foo[] = $bar." One more time: no i co z tego? Składnia jak każda inna. Bardzo wygodne rozwiązanie, brakuje mi tego w pythonie;
    • "PHP errors and PHP exceptions are completely different beasts. They don’t seem to interact at all.". OK, tutaj się zgodzę, to się twórcom PHP nie udało. Jednak prosty kawałek kodu naprawia tą niedogodność;
    • "Classes have something like variable declaration (var and const) for class attributes, whereas the procedural part of the language does not." Może się nie znam, ale to chyba dobrze, że język się rozwija. Tyle tylko, że autor chyba nie doczytał, że nie ma var const (no dobra, jest ale PHP 4) tylko trochę inna składnia;
    • "Classes are not objects." Dokładnie. Klasa to klasa, a obiekt to obiekt danej klasy;
    • "Object attributes are $obj->foo, but class attributes are Class::$foo. ($obj::$foo will try to stringify $obj and use it as a class name.)" Uhum... -> do obiektów, :: do właściwości/metod statycznych. Konstrukcja językowa jak każda inna;
    • "newprivatepublicprotectedstatic, etc." i programistycznemu bogu dzięki, że są;
    • "PHP has first-class support for “abstract classes”, which are classes that cannot be instantiated. Code in similar languages achieves this by throwing an exception in the constructor." No nie... kolega chyba zapomniał, że to nie to samo. Wyjątkiem w konstruktorze to ja mogę rzucać. Ale jedno słówko załatwią tą sprawę czyściej i prościej;
    • "Subclasses cannot override private methods. Subclass overrides of public methods can’t even see, let alone call, the superclass’s private methods. Problematic for, say, test mocks." bo od tego są metody chronione, a nie prywatne... eh...;
    • "There are no constructors or destructors. __construct is an initializer, like Python’s __init__. There is no method you can call on a class to allocate memory and create an object." to niby jak udało się w PHP zaimplementować singletona? Czary jakieś, czy co?;
    • "There is no overloading for equality or ordering." wow... aż pójdę sobie zrobić co złego z powodu straty;
    • "Static variables inside instance methods are global; they share the same value across all instances of the class." Dokładnie. Do tego w końcu służą;
    • "Three ways to access a MySQL database: mysqlmysqli, and the PDO abstraction thing." tak i każda ma swoje wady i zalety. I to od programisty zależy która mu bardziej będzie potrzebna;
    • "fork and exec are not built in." jak pisałem wcześnie, po co?;
    • "Negative indexing doesn’t work, since -1 is just as valid a key as 0." no i? No i to, że bardzo dobrze;
    • "No template system." A takie Smart to niby co? Python nie ma wbudowanej obsługi MySql i jakoś nikt go za to nie hatuje;
    • "No authentication or authorization." PHP jest językiem programowania. Nie frameworkiem. Frameworkiem jest choćby Symfony, czy ZendFramework;
    • "No interactive debugging." prosz... podstawowe braki wiedzy się kłaniają;
    • "register_globals. It’s been off by default for a while by now, and it’s gone in 5.4. I don’t care. This is anembarrassment." Dokładnie. Nie ma register_globals. Po co komu ustawienie które nie działa bo go nie ma?
    • "Magic quotes. So close to secure-by-default, and yet so far from understanding the concept at all." Też już nie ma. I też bardzo dobrze;

    Dalej jeszcze smutny programista pisze jeszcze coś o bezpieczeństwie, ale chyba też nie do końca wie o czym pisze. To co bracia phpowcy? Może teraz nasza kolej na hatowanie? Od pewnego czasu pracuję z pythonem i już zaczynam zbierać materiał...