Lovely MacBook

Lovely MacBook

I really love the new 12″ MacBook.

Speaking frankly if I have any single reason for throwing out my old MacBook Air, I would buy this horrible expensive new one in a heartbeat. I know there are milions of people who complain it for being unusable, overpriced and pointless. For having only a single USB-C port. For a low power CPU. Poor graphics. Even for its tiny size of mainboard. And for being a tablet pretending to be a laptop.

I love it for it all. For design but mainly for being so uncompromising and pointless.

I’m not blind (at least I think I’m not) and I see how limited is this new Macbook. I understand that for many people it’s too much castrated. But I still love it and it fits into my use cases. I’m not wired, me and my work live wirelessly.

I don’t use network cable since it annoys me this whole plug-out plug-in cycle everytime I want to move across the office. For the same reason I don’t use external monitor anymore (well, I would like to use it but I’m waiting for flawless wireless operation). I stopped using pendrives and external volumes about one year ago moving entirely into the cloud. No external keyboard. No compact flash cards as my phone dosen’t support it. No wired printers. No mouse… oh, wait. I still use my Logitech mouse and it’s hard to imagine me doing something more than writing without a mouse. It could be problem, beacuse the mouse need a USB dongle to operate. I couldn’t find nice mouse working with Bluetooth yet. But.. Yes, I think I could deal with it.

Another reason is possibility of charging battery from almoust every USB charger. No more carrying heavy power adapter in your briefcase. And beautyful picture on retina display.

It’s wonderful justification of my desires, isn’t it? :)

Finaly, there is very promising project on Kickstarter: Hub+ for USB-C that for $79 gives you all those old ports back. Moreover there is only one connector you have to un/plug when you move. Perfect solution.

Takie tam zrzędzenie tetryka

Zmieniłem dysk w Mac Mini, bo to co tam było zamontowane seryjnie przyprawiało swoją powolnością o bóle głowy. Przy okazji przypomniałem sobie, że ten cały osx wcale mi się tak bardzo nie podoba i pod Windows w wielu przypadkach pracuje mi się wygodniej – stąd też wymyśliłem sobie, aby równolegle z Lionem zainstalować Windows 7.

O samej instalacji osx na nowym dysku nie chcę pisać. Ot normalka.. Odtworzenie z TimeMachine się nie powiodło (3 godziny w plecy), instalacja czystego Liona z internetu trwałaby na moim łączu całą noc, odtworzyć system ze starego dysku się nie dało, bo był większy niż docelowy, a z kolei próba zmniejszenia partycji z systemem na starym dysku kończyła się komunikatem “Nie udało się odmontować partycji”. Ot, codzienność.

Wracając jednak do instalacji Windows.

Apple przewidziało, że będę kiedyś chciał mieć Windows na Macu i zrobiło dla mnie narzędzie o nazwie “Asystent Boot Camp”. Świetnie, nie muszę się nad niczym głowić, raz dwa i będzie gotowe! Trzeba tylko było zrobić obraz płyty instalacyjnej Windows, bo przecież w nowym Macu nie miałbym gdzie jej wsadzić.

Obraz zrobiony, teraz potrzebny był pendrive, aby go na nim wypalić. Wcześniej próbowałem z wersją Windows 32bit i dało radę bez problemu. Ale że mam dużo RAMu, to aby Windows ją wykorzystał zdecydowałem się na wersję 64bit. Ale… Asystent Boot Camp tym razem uraczył mnie komunikatem “Ten nośnik USB jest za mały”. Kurde, nie mam większego, co teraz?

Bo po mojemu to się powinno zmieścić.

Zrobiłem coś czego w samym Apple by nie wymyślili – wypaliłem na USB instalkę Windows w wersji 32 bitowej (tylko po to chyba aby mi się jakiś bootrecord czy coś utworzyło), a następnie zamontowałem w systemie obraz wersji 64 bitowej i przekopiowałem z niego wszystkie pliki. Zmieściły się, jeszcze zostało kilkadziesiąt wolnych bitów :) Polak potrafi!

No, to teraz z górki. Moment.. skoro będę używał naprzemiennie dwóch systemów, to przydałaby się jakaś wspólna partycja z danymi, która będzie mogła być odczytywana i zapisywana w obu systemach bez żadnych sterowników firm trzecich. FAT32 będzie do tego odpowiedni, trzeba tylko nakazać Asystentowi zrobienie 3 partycji.

Eeeee… nie ma takiej możliwości. Można tylko podzielić partycję osx na dwie części. No ok, Asystent to tylko asystent, nie musi umieć wszystkiego. Uruchomiłem więc “Narzędzie dyskowe”, zmniejszyłem partycję z osx, i utworzyłem dodatkową na dane. Wróciłem do Asystenta.

“Nie można przeprowadzić tej operacji.”

Asystent nie podzieli partycji, jeżeli oprócz tej z systemem osx istnieje jeszcze jakaś inna. No kurde!

OK, trzeba się uspokoić i pomyśleć. Nie potrzebuję przecież jeszcze teraz tej partycji z danymi, zrobi się ją później. Przywróciłem więc jedną wielką partycję z osx, Asystentowi pozwoliłem ją podzielić na dwie (dla Windows dałem większą, aby później z niej wykroić partycję na dane), rozpocząłem instalację i w instalatorze microsoftu usunąłem “bootcampową” partycję, a w jej miejsce utworzyłem dwie nowe. Windows się zainstalował, osx pozostał gdzie był, partycja z danymi została stworzona, wszystko świetnie.

…do momentu gdy nie zechciałem odpalić tego świeżo zainstalowanego Windowsa w Parallels. Cholera (to znaczy Parallels) nie chciała widzieć tej partycji, no nic a nic. Nie wiem w jaki sposób oni zaprogramowali tam wyszukiwanie windowsowych dysków, ale na pewno tak, że w moim przypadku nie zadziałało.

No to spróbowałem alternatywnego podejścia. Ponownie przywróciłem jedną wielką partycję dla osx, następnie pozwoiłem bootcampowi ją podzielić, ale tym razem przydzielając mniej dla windows, a zostawiając więcej dla osx. Następnie, zanim rozpoczęła się instalacja Windows, uruchomiłem z pendrive’a Lion Recovery, w którym zmniejszyłem rozmiar partycji osx, a w powstałym pustym miejscu utworzyłem partycję na dane. Zainstalowałem Windows. Wróciłem do Liona, odpaliłem Parallels.. voila! Wykrył partycję z Windowsem, mogłem więc go sobie uruchomić bezpośrednio pod osx.

Done!

My (very short) experience with startMonitoringForRegion method

Since iOS 4.0 there is cool method in CoreLocation framework:

– (void)startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

that can send events (even while application is in background) when phone is entering or leaving specified area.

But there are two “small” disadvantages:

1) Works only on iphone 4 and newer
2) It’s based on cell position (not GPS!) so accuracy is about houndreds of meters

Could be so beautiful.. :)

SSL connection lag on Android

While I was developing a Homer application for Android, I met frustrating problem with delays on ssl connection. Homer uses ssl for every http request, so I decided use HttpsURLConnection class for this job. Everything was fine until you run Homer in LAN without access to internet. Than, unexpectedly, every request started taking about 5 to 10 seconds. If you connect the internet, everything was fine back.

I resigned from HttpsUrlConnection and made directly communication using sockets. However, it didn’t solve problem – every call to SSLSocket.getSession() took the same 5 to 10 seconds as before.

Finaly, I found solution. There is a bug in Android prior to 4.0 version, which makes reverse DNS lookup for every https request. So, when you have no access to dns servers, it takes long time. To fix problem you can use code from:

http://code.google.com/p/android/issues/detail?id=13117#c14

Voila!

Galaxy Tab 10.1 and DatagramSocket problem

While working with sockets on Android you may face the problem with InvalidArgumentException thrown when you try to create a new instance of DatagramSocket:

InetSocketAddress bindInetAddr = new InetSocketAddress(bindAddr, bindPort);
DatagramSocket ssdpUniSock = new DatagramSocket(bindInetAddr);

The second line causes InvalidArgumentException error. Fortunately, the solution exists and is quite simple. Instead of creating an instance of DatagramSocket, you can obtain in from DatagramChannel and then bind an address:

DatagramChannel channel = DatagramChannel.open();
DatagramSocket ssdpUniSock = channel.socket();
InetSocketAddress bindInetAddr = new InetSocketAddress(bindAddr, bindPort);
ssdpUniSock.bind(bindInetAddr);

Voila, done!

Warsztat programisty Androida

Tak się jakoś złożyło, że ostatnio w moim mobilnym warsztacie zebrało się całkiem sporo różnorakiego sprzętu, który świetnie sprawdza się w jednym praktycznym zastosowaniu: testy, testy, testy – każde z tych urządzeń jest niepowtarzalne i zapewnia zupełnie odmienne “doznania” dla użytkownika. Oto i one:

Stajnia Adama

Poniżej krótki opis widocznych na zdjęciu urządzeń, zaczynając od lewej strony:

Od razu na początek interesująca ciekawostka: “devopment platform” od Qualcomma. Zbudowany na jednordzeniowym procesorze Snapdragon MSM8655 taktowanym zegarem 1.2GHz i z 1GB RAM w środku, na zewnątrz wygląda jak prototyp smartfona z końca ubiegłego wieku (brakuje tylko wystającej antenki). Pozory jednak mylą i jest to niezła, zeszłoroczna maszyna z systemem w wersji 2.3. No ale w kieszeni się nie mieści :)

Kolejny smartphone, Galaxy S, charakteryzuje się tak jak i inne produkty Samsunga kiepsko działającym automatycznym dostosowywaniem jasności ekranu. Jasność ekranu zmienia się co chwilę w zbyt dużym zakresie i jak dla mnie jedynym prawidłowym rozwiązaniem jest wyłączenie tej funkcji. Jednak sam ekran to już inna bajka – 4”, 480x800px i cukierkowa kolorystyka – po prostu super! Aktualnie używam tego telefonu na co dzień, i sprawdza się prawie tak dobrze jak… iPhone 3GS w którym niestety ducha wyzionął moduł GSM.

Trzeci telefon, to jednocześnie pierwszy smartphone, jaki wszedł w moje posiadanie i na którym zaczynałem realizować swoje pierwsze projekty. Samsung Galaxy Spica (i5700) – zaktualizowany do systemu 2.1 i z ekranem o rozdzielczości 320x480px. Dosyć słabe urządzonko na którym android wyraźnie się dusi i krztusi, ale dzięki temu, pisząc soft, baczniejszą uwagę zwraca się na kwestie optymalizacji.

Kolejny model to HTC Wildfire z systemem 2.2, który w odróżnieniu od Samsunga S, w celu korzystania z radia FM nie wymaga włożonej karty SIM (SIC!!!). Choć sama jakość odbiornika jest bardzo niska, Samsung w tym samym miejscu odbiera dużo lepszy sygnał. Jak na niepozorny wygląd, telefon te działa całkiem żwawo – wydaje się, że nawet sprawniej od i5700. Być może wynika to z niewielkiego ekranu o rozdzielczości 240x320px i przekątnej 3.2”, dzięki któremu jest mniej pikseli do rysowania :)

Pora na Chińską zabawkę z okrągłym przyciskiem (Apple nie pozwie o to producenta?) i piękną obudową w kolorze kości słoniowej. Mini tablet o przekątnej 6.9” napędzany przez Androida w wersji 1.6 działającym na 128MB Ramu, a za “feeling” i interakcje z użytkownikiem odpowiada opornościowy(!) ekran dotykowy pracujący w rozdzielczości.. hmm, nie wiem jakiej. Co ciekawe okrągły przycisk na obudowie jest JEDYNYM fizycznym przyciskiem w tym urządzeniu (nie ma on przycisku włączenia, blokady, powrotu, głośności ani żadnych innych). Idea Jobsa stała się realna dzięki chińczykom :) Ale tak czy siak, toporna to maszyna, baaardzo toporna.

No i w końcu “gwiazda wieczoru” czyli tablet mogący śmiało konkurować z Ipadem2: Samsung Galaxy Tab 10.1 z systemem 3.1. Wszystko świetnie, tylko dlaczego nie ma on wbudowanego normalnego portu micro-USB? Znowu kolejny rodzaj kabelka niezbędny na podorędziu. A tabletu nie trzeba opisywać – jest prawie tak dobry jak to piszą w internecie, jednak płynność interfejsu użytkownika wciąż pozostaje w tyle za pierwszym ipadem.

Epe Eater

icon_512x512 Za górami, za lasami, hen w dalekiej krainie żyła sobie wesoła jaszczurka o imieniu Epe. Jak wszystkie jaszczurki z tej krainy, Epe uwielbiała wcinać kurczaki. Czerwone kurczaki, zielone kurczaki, niebieskie kurczaki. Czarne i kolczaste kurczaki trochę mniej. Różowych wcale.

Wiodła spokojny żywot aż w końcu trafiła na ekrany telefonów.

Z dumą prezentuję pierwszą własną produkcję na telefony z systemem android – gra Epe Eater, do znalezienia w oficjalnym markecie w promocyjnej cenie $1.99. Będąca remakiem klasyki z PRLu, została wydana ponownie na miarę XXI wieku. „To prawdziwy łamacz palców, po którym długo będziesz leczył obolałe stawy. Czeka na Ciebie kilkadziesiąt poziomów, globalny ranking graczy, świetna muzyka i wielka przygoda.”

Epe EaterEpe Eater  - gra na androida

Gra została wydana pod szyldem świeżo powołanej marki Shakescreen, czyli kooperacji świetnego grafika i równie świetnego programisty. Jak to mówią – firma mała ale jara. :)

Aktualnie trwają prace nad wersją na telefony iPhone, jak i rozważania nad wydaniem wersji pod Windows Phone 7 Phone.

Wystartowała konkurencja Allegro!

W końcu na rodzimym rynku pojawiła się rzeczywista konkurencja dla wiodącej platformy aukcyjnej ;) W serwisie www.aukcja-gogosy.pl można wziąć udział w licytacji unikalnych przedmiotów, które każdy kolekcjoner z ambicjami powinien posiadać w swojej kolekcji.

Dobra, koniec żartów :) Chociaż nowy serwis wizerunkowy dla Real, to faktycznie aukcje internetowe:

gogosy

..to jednak użytkownicy nie mogą wystawiać na nich swoich przedmiotów, ale mogą wziąć udział w licytacji Gogosów, wygrywając je za punkty payback. W tym projekcie byłem odpowiedzialny za projekt bazy danych jak i wykonanie całego backendu. Stroną wizualną zajęli się koledzy z S4. Zapraszam do zabawy! :)

Kwestia GIODO – jak postępować z danymi osobowymi

W sierpniu, na własne potrzeby, opracowałem wytyczne dotyczące technicznych aspektów postępowania ze zbiorami danych osobowych, przetwarzanymi w serwisach internetowych. Wnioski, którymi się teraz z wami dzielę, zostały wyciągnięte na podstawie analizy ustaw, komentarzy prawników i przedstawicieli GIODO, oraz dostępnych w sieci opinii. Nie prezentuję tam prawniczych dywagacji, ale kwintesencję tego co istotne z mojego punktu widzenia i co może być użyteczne dla innych osób świadczących usługi w internecie.

Pełną wersję dokumentu można pobrać tutaj w formacie PDF. Poniżej prezentuję kilka wybranych zagadnień:

Czy adres email jest daną osobową?
Zgodnie z interpretacją GIODO sprawa jest jasna: adres email może być uznany za daną osobową, gdy pozwala na zidentyfikowanie osoby fizycznej. Przykładem adresu pozwalającego na identyfikację jest adres w formacie imie.nazwisko@nazwafirm.pl.
Internauci cały czas toczą polemikę w tym temacie, jednak stanowisko urzędników jest niezmienne, a co więcej, logicznie umocowane w ustawie.

Czy zbiór adresów email należy zgłaszać jako bazę danych osobowych?
Jak ustaliliśmy, email może być daną osobową. Jeżeli nie jesteśmy w stanie zapewnić, że w tworzonym zbiorze nie pojawi się adres, który spełni taki warunek, to zbiór adresów email powinien być zgłaszany do GIODO i podlegać wymaganiom ustawy. Można wyobrazić sobie, automatyczną i ręczną weryfikację adresów, przed ich dodaniem do bazy, jednak nieżyciowość takiego rozwiązania jest oczywista.

Zabezpieczenie zbioru danych osobowych.
Minister, w rozporządzeniu o bardzo długiej nazwie (Dz.U. 2004 nr 100 poz. 1024) wydzielił trzy poziomy bezpieczeństwa systemów informatycznych, przy czym poziom podstawowy (najniższy) stosuje się tylko w przypadku, gdy w systemie nie są przetwarzane dane osobowe – a więc nie pozostaje on w zakresie naszych rozważań.
Interesuje nas natomiast poziom podwyższony i wysoki. Poziom podwyższony powinien być stosowany w przypadku gdy system informatyczny, nie jest połączony z siecią publiczną – co w przypadku aplikacji www jest rzadko spotykane (często nawet sieci firmowe czy inne wewnętrzne, mają punkty styku z siecią publiczną), a poziom wysoki, gdy system jest połączony z siecią publiczną.

Ochrona danych, a hosting współdzielony
Istnieje powszechna opinia, jakoby w żadnym przypadku nie było możliwości spełnienia wymogów bezpieczeństwa na hostingu współdzielonym – gdzie obok naszej aplikacji, uruchomionych są dziesiątki innych, a na serwer logują się zupełnie nieznane osoby. Ustawa ani rozporządzenie jednak nie stawiają precyzyjnych wymogów w tej materii, mówią natomiast że rozwiązania z zakresu ochrony danych powinny być dostosowane do zagrożeń oraz kategorii tych danych. W szczególności dane muszą być zabezpieczone przed udostępnianiem, zmianą czy ich utratą. Wydaje się, że poprawnie skonfigurowany serwer obsługujący hosting współdzielony, spełnia te wymagania, co więcej serwery utrzymywane w poważnych centrach danych, którymi operują duże firmy hostingowe, mają szansę być lepiej zabezpieczone niż przypadkowy serwer dedykowany, zarządzany przez niewprawnego administratora. Tak więc zakładam osobiście (nie jest to opinia prawnicza, ale techniczna), że dla wielu typowych rozwiązań (sklepik internetowy, forum itp.) w razie kontroli GIODO można skutecznie obronić się z wykorzystania takiego hostingu. Zadbać należy tylko o wybór sprawdzonego hostingodawcy, z jasną polityką bezpieczeństwa i klarownymi
zasadami tworzenia i odzyskiwania kopii zapasowych oraz, opcjonalnie przeprowadzić z zewnątrz test bezpieczeństwa a jego wyniki zachować na wypadek kontroli.

Pobierz pełną wersję dokumentu w formacie PDF.