„Nie kradnij bo Cię złapią”

November 25th, 2009 Antoni Jakubiak 3 comments

Nie podoba mi się kampania www.oni-nielegalni.pl. Zgadzam się z ideą, nie zgadzam się z formą.

To tak, jakby mówić: “Nie kradnij samochodu bo Cię złapią” – “A jak mnie nie złapią to czy mogę kraść?”

Nie o to chodzi. Kampania “Bądź legalny” nie powinna być prowadzona jako zastraszanie przed wymiarem sprawiedliwości. Kampania “Bądź legalny” powinna być prowadzona bazując na hasłach takich jak:

  • “Nie kradnij samochodu, bo to jest złe”
  • “Nie używaj nielegalnych programów, bo to nie jest uczciwe”
  • “Odkryj darmową muzykę w sieci”
  • “Pograj w piłkę na dworze, zamiast w piłkę na komputerze”

Co o tym sądzicie?

Categories: Polityka Tags:

Google Wave

November 11th, 2009 Antoni Jakubiak 1 comment

Testuję Google Wave, niestety wymiękło…

Google Wave jest naprawdę interesującym narzędziem do komunikacji. Jeżeli programiści je zrozumieją a ludzie zaczną używać to będzie naprawdę niezła zabawa.

W Google Wave mogę na przykład utworzyć nową falę konwersacji do której mogę wkleić mój gadżet szachów i omalże mógłbym grać z swoim znajomym. Oczywiście, wcześniej musiałbym dodać obsługę odpowiedniego API co powinno zająć mi ze 2 lub 3 noce….

Categories: Google Tags:

Codility vs JavaBlackBelt

November 9th, 2009 Antoni Jakubiak 4 comments

Jakiś czas temu napisałem, że nie lubię testowania programistów tak jak się testuje kompilatory. Dobry programista nie musi wiedzieć czym różni się i++ od ++i, jednak musi czuć respekt przed takimi niuansami. Szkoda, że ta zasada nie jest znana społeczności JavaBlackBelt.

JavaBlackBelt to platforma do nauki Javy. Zawiera między innymi testy wymyślane przez społeczność programistów. Dzięki nim można wczuć się w rolę kompilatora:

Po co programista ma wiedzieć coś takiego? Żaden programista przy zdrowych zmysłach nie napiszę takiego kodu – intuicyjnie. A jak już napisze, to powinien dostać czarnym pasem po d….

Dlatego nie podoba mi się JavaBlackBelt. Czarnego pasa w karate nie dostaje się za nauczenie się nazw ciosów: “Mawashi Tobi Geri”.

Dlatego spodobał mi się polski program Codility. Dzięki Codility możemy sprawdzić jak programista poradzi sobie z napisaniem prawdziwego programu. Do wyboru mamy kilka języków programowania w których trzeba rozwiązać zadania algorytmiczne. Webowa aplikacja skompiluje podane rozwiązanie i sprawdzi wyniki przy pomocy testu jednostkowego. Genialne J.

Należy jednak pamiętać, że testy są zawsze pewnym uproszczeniem. Prawdziwych programistów poznaje się w pracy nad projektami a nie podczas rozwiązywania testów i zagadek algorytmicznych.

Categories: Programowanie, Recenzje Tags:

IE8 + Vim

October 21st, 2009 Antoni Jakubiak No comments

Dziś odkryłem fajną funkcję IE8. Otóż źródło strony – HTML – można wyświetlać w Vimie lub w dowolnym programie. Przydatne. Wciskamy F12 – narzędzia deweloperskie. Z menu wybieramy: “Plik” / “Dostosuj wyświetlanie źródła w programie Internet Explorer” / “Inny” i wskazujemy nasz ulubiony edytor tekstów którym mam nadzieję, że jest VIM J.

Categories: Vim Tags:

Fatalna jakość obsługi klienta w Skype

October 5th, 2009 Antoni Jakubiak 4 comments

Jakiś miesiąc temu chciałem wysłać faks. Pomyślałem o Skype i PamFax. Niestety, w oprogramowaniu Skype jest jakiś błąd i faksu nie wysłałem. Płatność którą robiłem środkami Skype po prostu gdzieś się w Internecie zagubiła. Błędy się zdarzają. Postanowiłem więc wyjaśnić sprawę w Skype. Ponieważ to drobna kwota – kilka złotych, to się nie denerwowałem. Do czasu.

Zdenerwowała mnie moja korespondencja z Skype. Zaczęło się we na początku września. Zgłosiłem problem, otrzymałem odpowiedź że proszą mnie o zrzut ekranu. Przesłałem zrzut ekranu w załączniku w formacie Microsoft Word. Otrzymałem odpowiedź, że nie potrafią odczytać załącznika. Powiedziałem im że jeżeli nie potrafią odczytać tego załącznika to nie są firmy z branży nowych technologii. Dziś otrzymałem odpowiedź, że rzeczywiście jest problem i że ja muszę skontaktować się z ich podwykonawcą. Powiedziałem, że sami to muszą zrobić – ping pong za 4zł trwa.

Skype jest fajną technologią, jednak kontakt z działem obsługi klienta nauczył mnie, żeby nie korzystać z ich usług biznesowych.

Obecnie korzystam z oprogramowania Freeconet do wysyłania i odbierania faksów.

Jakie polecacie alternatywy dla Skype?

Categories: Recenzje Tags:

EeePC 1005HA

October 3rd, 2009 Antoni Jakubiak 3 comments

Mam okazję pobawić się netbookiem mojej żony – ASUS EEEPC 1005HA(H). To malutki, ważący trochę ponad kilogram komputerek. Różowy!!!

Co mi się podoba?

  • Ciekawy kolor.
  • Nowoczesny wygląd.
  • Maluteńki zasilacz.
  • Modne otwieranie wyświetlacza za klawiaturę.
  • Wygodna klawiatura. Klawisze mają krótki jednak stanowczy skok a po wciśnięci żwawo powracają na swoje miejsce. Klawisze są normalnej wielkości jednak aby pomieścić je na małej przestrzeni zmniejszono odstępy między nimi – do takiej klawiatury na pewno można się przyzwyczaić. Podoba mi się też dobór akcji dla przycisku Fn.
  • Nowoczesny touchpad umożliwiający skalowanie stron www i zdjęć dwoma palcami.
  • Szybkość działania.
  • Głośniczki grają głośno.
  • Wbudowany mikrofon umożliwia rozmowy Skype.
  • Sprawnie działająca kamerka webowa.
  • W zestawie jest pokrowiec.
  • Atrakcyjna cena.

Co mi się nie podoba?

  1. Ostra krawędź przednia laptopa, muszelki nie powinny być ostre ale wyszlifowane w falach oceanu.
  2. Instalacja oprogramowania ASUS, szczególnie odrażający był docklet na górze.
  3. Instalacja MSWorks, musiałem marnować czas na odinstalowanie.
  4. Stary system operacyjny Windows XP, wolałbym Vistę lub Linuxa.
  5. Brak różowego tematu kolorystycznego dla Windowsa XP.
  6. Gniazdo VGA, wolałbym małe DVI.
  7. Tylko 1MB pamięci, przecież to skąpstwo.
  8. Brak kart UMTS w sprzedaży..
  9. Brak stacji dokujących.
  10. Brak myszy pod kolor w sprzedaży.

Inne cechy:

  • Instalacja Microsoft Offica Home and Student wersja 60 dniowa.
  • Bateria, która ma wytrzymywać 10 godzin, o tym jednak wolałbym napisać za rok.

Co mnie wkurza chyba we wszystkich laptopach. Producenci zawsze dodają całą gamę swojego softu, którego wcale nie chcę używać. Kupując komputer wciskają mi rzeczy, których nie potrzebuje. W dodatku, nie wiem, czy są one konieczne do pracy komputera i muszę się zastanowić przed ich odinstalowaniem. A już kompletnym nieporozumieniem jest instalowanie oprogramowania które się na dzień dobry zawiesza – mam tu na myśli dysk sieciowy którego nazwy nie chcę pamiętać i jakiś synchronizator.

Nie miałem możliwości pobawić się konkurencyjnymi produktami, jednak netbooka ASUS EeePC – muszelkę – śmiało polecam.

Categories: Recenzje Tags:

Własny renderer dla DataGrid (FLEX)

September 26th, 2009 Antoni Jakubiak No comments

Adobe FLEX posiada komponent do wyświetlania tabelek który nazywa się DataGrid. W komórce tabeli możemy wyświetlić tekst, tekst HTML lub inny prosty komponent. Mi jednak tego było mało. Postanowiłem więc napisać swój własny renderer dla komórek tabeli. Z początku wydawało mi się to proste: napiszę nową klasę dziedziczącą po DataGridItemRenderer i w niej upakuję logikę do wyświetlania mojej komórki tabeli. Niestety rzeczywistość okazała się niezwykle zagmatwana i zmusiła mnie do dokopania się do nieprzyzwoitych paskudztw ukrytych wewnątrz FLEX.

Nie mogłem zrobić klasy pochodnej z DataGridItemRenderer, gdyż tak klasa dziczy po UITextField czyli potrafi wyświetlać tekst. A ja potrzebowałem tekst i coś jeszcze. Spróbowałem więc pisać na płótnie Canvas. Okazało się, że Canvas prawie działa. Problemem były wartości, które poprzez interfejs IDataRenderer otrzymywała moja klasa: zamiast spodziewanego obiektu reprezentującego konkretną komórkę tabeli otrzymywałem obiekt reprezentujący cały wiersz. Zastanowiło mnie też dlaczego klasa Canvas – czyli obiekt reprezentujący płótno implementuje interfejs IDataRenderer – może Wy widzicie związek? Dla mnie to tak jak mercedes standardowo wyposażony w pieska kiwającego głową.

Analizując przykłady, odkryłem że klasa CheckBox powinna zachowywać się w tej materii właściwie, czyli gdy chciałem aby komórka tabeli była wyświetlana obiektem klasy CheckBox – to obiekt ten otrzymywał dane reprezentujące konkretną komórkę a nie cały wiersz. To mnie zastanowiło, dlaczego Canvas dostaje do wyświetlenia wiersz a CheckBox dostaje wartość komórki. Pomyślałem, że problem leży gdzieś w interfejsach. Pomyślałem sobie, że może DataGrid wpisując dane do komórek swojej tabeli sprawdza – czy klasa odpowiedzialna za wyświetlenie tej komórki implementuje wskazany interfejs – i w zależności od tego wysyła do nie odpowiednie dane. To by brzmiało rozsądnie. Niestety, debugger nie potwierdził moich przeczuć.

Zajrzałem więc do źródła CheckBox i oto co znalazłem. Jest tam sobie funkcja setter na pole data wymagana przez interfejs IDataRenderer. Oto ona:

W moim odczuciu, to nie wygląda jak zwykły setter. Dla mnie to wygląda jak na kod zepsutego projektu. Taka napisana funkcja zachowuje się w sposób nieprzewidywalny. W dodatku, po co ktoś projektował interfejs skoro większość klas FLEXa go odziedziczy?

Wracając do sprawy, aby napisać własną klasę służącą do wyświetlania komórek tabeli powinniśmy zaimplementować interfejsy: IDataRendererIDropInListItemRenderer. Aby dostać wartość wiersza potrzebny jest nam IDataRenderer, jednak ten interfejs implementują prawie wszystkie komponenty FLEXa. Aby dobrać się do wartości komórki, potrzebujemy IDropInListItemRenderer. Możemy do zrobić na przykład tak:

Martwię się o FLEX. To wspaniała technologia, która umożliwia tworzenie wspaniałych rzeczy. Jednak bałagan który w niej panuje może być dla tej niej zabójczy. Bałagan, o którym wie każdy programista, który programował w FLEX. Bałagan oczywiście zawsze towarzyszy pracy programistów, jednak w niektórych projektach jest czasami nie do zniesienia.

Categories: FLEX Tags:

Gang Wars

September 24th, 2009 Antoni Jakubiak 1 comment

Rzadko zdarza mi się pisać o grach komputerowych. Dotychczas pisałem tylko o moich szachach i o polskim Wiedźminie. Rzadko gram w gry komputerowe, bo zgodnie z założeniami ich twórców – wciągam się w nie. A na to szkoda mi czasu.

Mam też zboczenie zawodowe. Na gry komputerowe, patrzę jako na potencjalną pracę do wykonania. Zawsze zastanawiam się jak napisać taką grę i jak na niej zarobić? Wydaje mi się to bardzo ciężkim kawałkiem chleba. Gry komputerowe są najbardziej poszkodowane z powodu piractwa. W dodatku starzeją się znacznie szybciej niż aplikacje dla biznesu. Może poza szachami.

Ostatnio zainteresowałem się aplikacjami na Androida w tym również grami komputerowymi. Próbowałem różnych gier. Fajnie jest pobawić się grami z ekranem dotykowym, akcelerometrem, poziomicą. Fajnie jest potrząsnąć telefonem, po to żeby rozeszły się chmury i można było dalej strzelać dotykowo. Te wszystkie hardwarowe bajery w które wyposażone są dziś telefony wpływają na radość grania i dają programistom nowe możliwości. I to mnie ciekawi. Jednak najciekawsze jest zawsze rywalizacja z innymi graczami. Pierwsze gry w które grałem ponad 20 lat temu, były super dlatego, że siedziałem z kumplami przy CPC 464 i wyrywaliśmy sobie joystick, kradnąc kurze jakie w Chuckie Egg. Była w tym rywalizacja o to kto ukradnie więcej jajek.

Gang Wars na Androida to pierwsza gra która mnie na prawdę wciągnęła. Gang Wars – to gra strategiczna. W Gang Wars wcielamy się w rolę gangstera. Naszym zadaniem jest zdobywanie pieniędzy, szacunku i doświadczenia. Aby zarobić trzeba najpierw kupić broń i dokonać kilku przestępstw takich jak grabieże i włamania. Doświadczenie zdobywamy szybciej walcząc z innymi gangsterami. Czasami, zdarza się okazja “zrobienia batonika” z innego gangstera. Zarobione pieniądze inwestujemy w nieruchomości, kupujemy lepszą broń i samochody. Sporo kasy wydamy też na doktora, który będzie leczył nas z obrażeń. Zapraszając znajomych do gry budujemy swój gang i dzięki temu możemy dokonywać bardziej wymyślnych przestępstw jak choćby napad na sklep jubilerski.

W Gang Wars rywalizujemy z innymi graczami i to jest fajne. Rywalizujemy w czasie rzeczywistym i to jest super. Dzięki Gang Wars odkryłem nowy termin – MMOSG. Odkryłem też, że gra komputerowa może być odmianą aplikacji biznesowej. Do napisania takiej gry potrzebne są umiejętności które już mam, które nabyłem pisząc aplikacje biznesowe działające w Internecie. I to mnie cieszy najbardziej.

Podzielę się moim spostrzeżeniem o tym, jak można było by zaprojektować MMOSG.

W Gang Wars energia jest elementem kluczowym. Są aż trzy rodzaje energii: siła, zdrowie, wytrzymałość. Energię tracimy wykonując zadania. Energia uzupełniana jest po czasie. I to jest genialne. Pamiętam, że gdy byłem mały to grałem w gry planszowe najchętniej w Monopoly. W grach planszowych ruchy wykonujemy turowo. W MMOSG tury nie były by możliwe, kto chciałby czekać aż na swoją kolej aż tysiące graczy wykona ruch. W Gang Wars tury zastąpiono czasem. Czas jest barierą która uniemożliwia nam wykonywanie zbyt wielu ruchów. Czas jest motywatorem, do wykonania kolejnego ruchu. W Gang Wars możemy wykonać swoje ruchy, wyłączyć telefon na godzinę czekając aż nasza energia się uzupełni i znów wykonać ruchy. Dla mnie to niesamowite odkrycie. Z tą wiedzą czuję się jak dziecko które odkryło gdzie mama trzyma cukierki.

Tury zastąpiono czasem. Dzięki temu odkryciu można przenieść koncepcje wielu gier planszowych do świata MMO.

Tak naprawdę, gdy byłem dzieckiem, to nie grałem w Monopoly. To były czasy komuny i grałem w podróbki Monopoly, między innymi w klona Monopoly wykonanego przez moich rodziców. Naprawdę się napracowali: olbrzymia plansza; elegancie figurki hoteli, trolejbusów i samolotów; kostki i laminowane karty wprowadzające element losowość. To działało na moją dziecięcą wyobraźnie i zakochałem się w tej grze. Mój tata nawet chciał napisać Monopoly na CPC 464 lecz niestety zbrakło mu wytrwałości. Dzięki Gang Wars i zasadzie zastąpienia tur czasem wiem, że można było by przenieść Monopoly na świat MMOSG (zresztą pewnie już tam jest).

PS. Mój Friend Code w Gang Wars to: 053F6.

Categories: Android, Recenzje Tags:

Czy Android prześcignie IPhona?

September 18th, 2009 Antoni Jakubiak 3 comments

Zainteresowanie Androidem przekroczyło już poziom zainteresowania Symbianem. Widać to w Google Trends. Jednak, zainteresowanie Androidem jest tylko małym ułamkiem zainteresowania IPhonem. Czy telefony z Androidem mają szansę pobić rewelacyjny marketing Apple?

Categories: Android, Recenzje Tags:

BuddyRunner vs CardioTrainer

September 12th, 2009 Antoni Jakubiak 9 comments

BuddyRunner i CardioTrainer to dwie aplikacje które ostatnio mnie zainteresowały. Gadałem przez telefon z kumplem – też programistą . Okazało się że też ma Androida. Powiedział mi że uprawi sport. Pomyślałem że w poprzednim zdaniu brakuje słowa “też”. Powiedział mi że biega z BuddyRunnerem. Ja nie biegam. Ale pomyślałem że mogę jeździć na rolkach i będę miał lepsze czasy, co zmierzy BuddyRunner. Więc zainstalowałem na moim telefonie tą aplikację.

Niestety, pierwsza przejażdżka na czas się nie udała. Czasy się nie zapisały. A naprawdę się starałem. Pomimo krótkiego dystansu – to się nieźle zmęczyłem. Trochę mnie to wkurzyło i w tym momencie złości zauważyłem w Android Market CardioTrainera. Następnego dnia zebrałem siły by wypróbować ten produkt na serce.

Tym razem wszystko się udało. CardioTrainer zadziałał poprawnie i zapisał ścieżkę mojej przejażdżki.

Dziś znowu spróbowałem BuddyRunnera i niestety znowu się nie udało. Dlatego napiszę krótkie podsumowanie tych dwóch aplikacji:

Plusem BuddyRunnera jest przede wszystkim znakomita strona WWW o publicznym adresie URL, prostszy system rejestracji, powiadamianie na e-mail oraz integracja z Facebook. W telefonie wygląda dobrze, lecz brakuje w nim wyboru jednostek miar – są mile.

CardioTrainer wygrywa przede wszystkim w telefonie komórkowym. Lepiej odbiera sygnał GPS i pozwala go konfigurować. CardioTrainer pozwala wybrać rodzaj treningu: bieganie, rower, rolki i inne. Pozwala wybrać jednostki miary – kilometry lub mile. CardioTrainer lepiej dba o prywatność. Niestety, strona CardioTrainera jest słabsza – brakuje w niej statystyk i nie znalazłem opcji udostępniania.

Na chwilę obecną będę jeździł z CardioTrainer. Istnieje szansa, że telefon z Androidem poprawi moją kondycję.

Categories: Android, Recenzje Tags: