Recenzja iPhone 3G

Po trzech miesiącach użytkowania, jestem w stanie napisać konstruktywną recenzję iPhone 3G.

Na samym w stępie chciałbym zaznaczyć, że urządzenie jest warte swojej ceny. Moja opinia nie jest w żaden sposób zdeterminowana ślepą miłością do marki Apple. Nie będę się tu rozwodził nad wyglądem, jest to indywidualna sprawa każdego użytkownika telefonu – dla mnie iPhone ma po prostu elegancki wygląd. Urządzenie wyposażone jest w 4 przyciski: blokowanie telefonu, home button (powrót), wyciszenie i sterowanie poziomem głośności – klawiaturę zastępuje ekran dotykowy. Warto nadmienić, że pojawia się ona tylko wtedy, gdy jest potrzebna. Telefon ma bardzo czuły ekran z obsługą multi-touch. Wbudowana funkcja auto-jasności pozwala oszczędzać baterię w miejscach ciemnych – polega to na redukcji oświetlenia ekranu w mroku, gdyż ludzkie oko doskonale widzi, co dzieje się wokół, a rozświetlony (jak za dnia) ekran telefonu powodował by irytację (jak w urządzeniach starszej generacji).

Zwykłe użytkowanie urządzenia jako telefon

Produkty Apple charakteryzują się dużą intuicyjnością interfejsu. Telefon podzielony jest na dwie zasadnicze części: Text messages (SMS) i telefon. Obie “aplikacje” zintegrowane są z komponentem kontaktów, który jest de facto ogólnodostępny dla innych aplikacji (twórcy telefonu podeszli do tej kwestii bardzo ideologicznie). Zasadniczym brakiem w oprogramowaniu jest brak raportów doręczenia SMS, ale można to obejść crackując telefon, o czym później. Dodatkowym minusem jest długie ładowanie się listy SMS przy jej większej ilości, co również można obejść crackując telefon, o czym również później : -). Kolejnym minusem jest to, że wszystkie kontakty przechowywane są w pamięci telefonu, a nie na karcie SIM, co gorsza – nie ma możliwości eksportu kontaktów na kartę SIM, a jedynie istnieje możliwość importu. Nie ma się czego obawiać – przy każdej synchronizacji iPhone z iTunes, kontakty zapisywane są w backupie.

Telefon z niezniszczalnym software

Zdarzyło mi się “popsuć” oprogramowanie iPhone instalując nieautoryzowane przez Apple oprogramowanie na własną odpowiedzialność. Przywrócenie telefonu do stanu używalności? Nic prostszego – instalujemy nowy software na iPhone via iTunes i klikamy przycisk Restore – wybieramy nasz backup i gotowe. Wszystkie kontakty, SMS’y, save’y z gier, aplikacje, muzyka widnieją z powrotem na ekranie naszego telefonu.

Urządzenie przyjazne użytkownikowi

Wyobraź sobie, że słuchasz muzyki, masz telefon w kieszeni, jest zimno. Musisz ściągnąć rękawiczki, wyciągnąć telefon, włączyć odtwarzacz muzyki, wejść playlistę, kliknąć next, schować telefon, założyć rękawiczki. Nie ma się czym zachwycać, bo rozwiązania te zostały już zaimplementowane z poprzednich telefonach, ale Apple nie zapomniało o przycisku kontrolnym w zestawie słuchawkowym. Pomijając to, że wygląda elegancko, pozwala nam na odebranie/odrzucenie rozmowy i kontrolę iPod’a (play/pause – single click, next – double click, previous – tripple click).

Wcześniej wspomniałem o ekranie dostosowującym się do warunków oświetlenia. Gdy jest ciemno – ekran ciemnieje, bo nasze oko akomoduje się do otoczenia, oszczędzamy tym samym baterię. Gdy przykładamy telefon do ucha, ekran wygasza się, aby uniknąć przypadkowych kliknięć w ekran dotykając go uchem – tutaj również oszczędzamy baterię.

Szybka edycja danych – na liście wystarczy wykonać gest przeciągnięcia palca w prawą stronę i pojawi nam się przycisk usunięcia go ze stosu – genialne. Pomyliłeś się pisząc SMS? Potrząśnij telefonem, a iPhone zaproponuje Ci wprowadzenie korekty. Niewygodnie pisze Ci się SMS’a? Przechyl iPhone na bok, a dostaniesz do dyspozycji większa klawiaturę i większy obszar pola tekstowego. Trzymasz iPhone w ręku i słuchasz muzyki? Potrząśnij telefonem, a zmieni się track. Chcesz przeglądnąć swoje albumy z iPodzie? przechyl telefon, a wyświetlą Ci się okładki, które dodałeś w iTunes.

Szukanie w całym telefonie – kolejna opcja, która pomaga mi szybko dostać się do interesujących mnie rzeczy. Jedno pole wyszukiwania odpowiada za wyniki z: aplikacji, kontaktów, maili, sms’ów, tracków, artystów i albumów z iPod’a.

Nie ukrywajmy – Apple dostarcza nam masę aplikacji, z czego wiele jest darmowych. Co więcej, nasz telefon stara się utrzymać całe oprogramowanie w najnowszej wersji. Z telefonu możemy zrobić nawet zwykłą latarkę (której nie ma w urządzeniu) – aplikacja rozjaśnia ekran i pokrywa go białym kolorem. Nie wspominam już o masie gier serwowanych przez AppStore za darmo!

Przeglądanie Internetu nie było dla mnie prostsze – wbudowana przeglądarka Safari z obsługą kart i schowka jest idealnym narzędziem do surfowania po Sieci. Player YouTube również spełnia moje oczekiwania. Jeżeli jesteś społecznikiem – zintegruj swój telefon z Blip’em, Twitter’em, Flaker’em, Facebook’iem, importuj swoje ulubione kanały RSS, dodaj konta pocztowe i zainstaluj Parlingo – komunikator z obsługą sieci Gadu-Gadu, Jabbera, ICQ, AOL, Google Talk, MSN i innych.

Nieautoryzowane oprogramowanie na iPhone – Jailbreak

Jest wielu zwolenników crackowania oprogramowania iPhone, jest też wielu przeciwników. Moje stanowisko w tej sprawie – crackować. Co nam to daje? Wcześniej opisałem wiele nieudogodnień, które możemy poprawić w oprogramowaniu, np:

  • raporty SMS są dostępne w Cydii pod nazwą iDelivery,
  • możemy wyłączyć przycisk automatycznej sekretarki w telefonie, który może nam się zdarzać przypadkowo kliknąć,
  • mamy możliwość pobierania filmików z YouTube’a za pomocą MXTube,
  • możemy scrobblować piosenki przesłuchiwane w iPodzie do last.fm za pomocą Scrobbl,
  • mamy możliwość zainstalowania kamerki, standardowo niedostępnej w iPhone – Cycorder,
  • odblokowanie nowych theme jest teraz możliwe – Winterboard,
  • dostosowanie telefonu, wyłączenie EDGE, wyłączanie niepotrzebnych ikonek w Springboard (typu giełda) – BossPrefs.

I na koniec cały smaczek łamania oprogramowania:

Czyli… telefon mi ‘zamula’

Długie ładowanie SMS’ów, kontaktów, kalkulatora lub alarmów? Zcrackuj swój telefon i zainstaluj Backgrounder z pakietów Cydii. Pozwala on na działanie niektórych aplikacji “w tle”. Niektóre możemy ustawić jako automatycznie pracujące w trybie niewidocznym, innym nie pozwolić na taką opcję. Ile razy zdarzyło Ci się przerwać grę, gdy chciałeś odczytać SMS? Przytrzymaj Home button, gra schowa się do paska, odpisz na SMS’a i ponownie kliknij na ikonkę gry – powrócisz do stanu pierwotnego, a nie (jak w legalnym oprogramowaniu) proces zostanie całkowicie zakończony. Analogicznie sprawa wygląda w przypadku korzystania z komunikatora (np. Parlingo). Aby wyjść z trybu background, ponownie przytrzymaj Home button. Przycisk wprowadzania aplikacji w stan niewidoczny można skonfigurować indywidualnie, może to być np. Power button (Home jest chyba najwygodniejszy).

Dyskusja na temat działania aplikacji w tle jest burzliwa – pamiętajmy jednak, że crackując software narażamy się na nieoptymalne działanie telefonu i szybkie zużycie baterii, za co Apple nie odpowiada.

How to change iPhone`s SSH password

Jak zmienić hasło SSH w iPhone?

Ostatnimi czasy jest głośno o pierwszym znanym robaku na iPhone. Na szczęście jest on nieszkodliwy, ale pokazuje, na co narażeni są użytkownicy instalujący nieautoryzowane przez Apple aplikacje na swoim telefonie. Jak zabezpieczyć iPhone’a? Dla tych, którzy mieli wcześniej styczność z Linux’em lub OSX to norma, lecz warto przypomnieć pozostałym o zmianie hasła root‘a.

Z reguły SSH służy do zdalnego logowania się do urządzenia poprzez sieć. Połączenie jest szyfrowane, a technologia znana i uważana za bezpieczną, lecz nic nie stanie na przeszkodzie hakerowi, który po prostu zna hasło…

Aby spać spokojniej, możemy zmienić hasło dostępu do SSH. Aby to uczynić, wyszukujemy w Cydia paczkę o nazwie MobileTerminal. Po instalacji pojawi nam się dodatkowa ikona reprezentująca terminal. Włączamy aplikację, w której domyślnie jesteśmy zalogowani na użytkownika mobile, zmieniamy hasło:

passwd

System poprosi nas o podanie aktualnego hasła, które brzmi alpine. Wpisujemy nowy kod oraz potwierdzamy jego poprawność.

Wiele ludzi zapomina, że istnieje również użytkownik root. Mu także należy zmienić hasło. Aby przełączyć się na użytkownika root, wpisujemy:

su root

Podajemy hasło alpine oraz analogicznie zmieniamy nasz sekretny kod dla tego użytkownika. Ekran końcowy powinien wyglądać mniej więcej tak:

iPhoneSSHpasswd

How to create iPhone ringtone from mp3

Jak zrobić dzwonek iPhone z mp3?

1. Włącz iTunes, przejdź do sekcji Music i wybierz utwór, który chcesz wykorzystać jako dzwonek. Jeżeli nie masz jeszcze swojej playlisty, możesz przeciągnąć plik na iTunes metodą drag’n'drop.

2. Kliknij prawym przyciskiem na wybrany utwór, z menu kontekstowego wybierz Get Info. W zakładkach okna znajdziesz sekcję Options. Po włączeniu zakładki pojawią się parametry piosenki.

3. Zdecyduj, od którego momentu ma rozpocząć się Twój nowy dzwonek. W tym celu zaznacz pole Start Time i wprowadź czas w formacie MM:SS (minuty, sekundy). Jeżeli chcesz, aby dzwonek rozpoczynał się w od początku piosenki, ustaw czas na 0:00 lub odznacz pole Start Time. Pamiętaj, że możesz ustalać również dziesiętne, setne i milisekundy. Aby to uzyskać format czasu powinien wyglądać następująco MM:SS,X (minuty, sekundy, dziesiętna/setna/mili skunda), np.: 2:57,75 (czyli 2 minuty, 57 sekund i 3/4 sekundy).

4. Ustaw czas zakończenia dzwonka (Stop Time) analogicznie do czasu jego rozpoczęcia. Pamiętaj, że Twój dzwonek może mieć maksymalnie 40 sekund.

5. Zapisz zmiany. Ponownie kliknij prawym przyciskiem na piosenkę, tym razem wybierz Create ACC version. Gdy proces konwersji pliku się zakończy, usłyszymy charakterystyczny dźwięk.

6. Ponownie klikamy prawym przyciskiem myszy na plik, wybieramy Show in Windows Exlorer. Jeżeli widzisz rozszerzenia plików, przejdź do kroku 8.

7. Kliknij Narzędzia -> Opcje folderów -> Zakładka: Widok -> odznacz opcję Ukryj rozszerzenia znanych typów plików.

8. Zmień nazwę pliku, edytując rozszerzenie z m4a na m4r. Potwierdź zmianę rozszerzenia w ostrzeżeniu. Dwukrotnie kliknij w plik, po czym otworzy się on w iTunes.

9. W Devices wybierz swojego iPhone‘a. Wybierz zakładkę Ringtones w podglądzie swojego telefonu. Zaznacz opcję Sync Ringtones.

10. Wykonaj synchronizację. W ustawieniach dźwięku powinien pojawić się Twój dzwonek.

Pamiętaj, żeby nie usuwać pliku dzwonka ze swojego komputera, przy ponownej synchronizacji zostanie on usunięty z naszego urządzenia.

Allegro nie zawsze wygodne

Jestem zwolennikiem ułatwiania sobie życia wykorzystując Internet do robienia zakupów i zarządzania swoim kapitałem. Natomiast po ostatniej akcji na Allegro, zacząłem wątpić w moje ograne ideały, uznaję to za ostrzeżenie i poprawiam markerem cienką linię pomiędzy realnym shoppingiem, a dokonywania zakupów via Allegro na znacznie grubszą. Zamiast kupić pada do Play Station 3 kiloma kliknięciami, musiałem ruszać tyłek po kilku instytucjach.

Wszystko zaczęło się 25 czerwca, kiedy postanowiłem zakupić wcześniej wspominanego pada. Mam zwyczaj, że jeżeli jest opisana procedura płatności za przedmioty, a kontrahent jest Super Sprzedawcą, robię to od razu po dokonaniu zakupu – tak było i tym razem. System Sello wysłał mi potwierdzenie złożenia zamówienia.

Od 26.06 do 07.07 obserwowałem status wysyłki. Przelewu nie zaksięgowano po 13 dniach, stąd status wysyłki zakolorowany na czerwono. Sprawa zaczyna śmierdzieć, bowiem nie mogę się dodzwonić do kontrahenta (number busy), a gdy już mi się to udaje – nikt nie odbiera. Kilkukrotna próba kontaktu telefonicznego i mailowego pozostawiona bez odpowiedzi motywuje mnie, żeby…

09.07 wypełniłem wniosek w Centrum Sporów Allegro. Tego samego dnia wybrałem się na Policję, aby złożyć zawiadomienie o popełnieniu przestępstwa na tle wyłudzenia internetowego. Na komendzie czekałem około 40 minut zanim mnie przesłuchali, potem straciłem 30 minut na przesłuchanie i sporządzenie raportu.

Czas płynie i płynie…

27.07 – kontrahent dzwoni z wyjaśnieniami. “Okazało się”, że odwiedziła go Policja. Tłumaczenie: padła im baza klientów i zamówień, przez co nie mogli mnie zidentyfikować, pomimo szukania transakcji w historii sprzedaży na Allegro (przecież jest lista czarno na białym). Na moim koncie powinny być już zaksięgowane zwrócone pieniążki, ale niestety nie mogą wysłać mi mojego pada ze względu na to, że są zablokowani przez skarbówkę… muszą się rozliczyć. Za wszystko jeszcze raz przeprasza…

28.07 godz 11:00, telefon z Policji. Wezwanie na jutro, punkt 9 rano w pokoju numer 53. Sprawdzam konto, pieniążki są. Drukuję potwierdzenie zaksięgowania zwrotu jako załącznik do jutrzejszych zeznań.

29.07 godz 9:00 (wakacje są, daliby pospać). Zaniechujemy ściganie, dziękuję za pomoc. Kończę spór transakcyjny w panelu na Allegro i wystawiam negatywny komentarz:

Towar nie dotarł do mnie do dziś. Po interwencji Policji sprawa się wyjaśniła. Natomiast nieuczciwym wobec innych użytkowników Allegro byłoby wystawienie poz. lub neut. komentarza za transakcję, która nie doszła do skutku. Miesiąc w plecy.

MySQL: remove duplicate entries/rows

Usuwając coś permanentnie z bazy danych musimy być bardzo ostrożni, bowiem przywrócenie danych jest bardzo trudne, czasem niemożliwe. Podstawową strukturę bazy danych powinno się budować na samym początku tworzenia aplikacji, z biegiem czasu rozbudowywać ją, ale unikać przebudowywania. Niestety są przypadki, gdzie trzeba przebudować jedną rzecz, co powoduje zmianę w wielu warstwach nie tyle aplikacji, co strukturze bazodanowej.

Dziś postaram się opisać, jakie kroki trzeba wykonać, aby bezpiecznie usunąć zdublowane rekordy z bazy danych nie tracąc żadnych danych:

  1. Tworzymy dwie kopie bazy danych lub tabel, na których będziemy pracowali. Najlepiej, aby pracować na drugiej kopii, nigdy na oryginale, a potem wdrożyć zmiany z drugiej kopii na oryginał. Przezorny zawsze ubezpieczony.
  2. Analiza danych w tabeli. Musimy dokładnie wiedzieć jakie są relacje między tabelami, kiedy występują JOIN’y itp. Jeżeli rekordy są zdublowane, a posiadają ustalony ID, do których odwołuje się inny rekord z sąsiedniej tabeli, trzeba będzie w niej zmienić ID rekord zdublowanego na ID “substytuta”, bądź takiego rekordu, który nie spowoduje zmian w serwisie.
  3. Wykonanie operacji usunięcia zdublowanych rekordów.

Po wykonaniu kroku pierwszego zabieramy się za kolejny. Jest to najważniejszy moment naszych operacji. Aby ułatwić zrozumienie problemu, podam przykład z życia. Aplikacja posiadała poważny błąd, który umożliwiał zdublowanie użytkowników, ściślej: można było zdublować username. Za każdym razem, gdy użytkownik się logował i pisał komentarze, był ich właścicielem, ale comment_author posiadały różne ID tego samego użytkownika. Zaraz po skopiowaniu bazy danych spróbowałem przepisać ID autorów komentarzy na pierwszy rekord identyfikujący użytkownika, jaki istnieje w tabeli użytkowników. Skonstruowałem zapytanie:

UPDATE cms_comments
JOIN cms_members AS user_original ON(user_original.user_id = comment_author)
SET comment_author = (
  SELECT user_first.user_id FROM cms_members AS user_first
  WHERE user_first.user_name = user_original.user_name
  ORDER BY user_first.user_id ASC LIMIT 0, 1)

Usunięcie zdublowanych użytkowników było już tylko formalnością. Teraz się okaże, dlaczego zależało mi na wyciągnięciu dokładnie pierwszego rekordu reprezentującego “unikalnego” użytkownika: poniższe zapytanie (ALTER IGNORE TABLE ADD UNIQUE) usunie wszystkie kolejne rekordy oznaczone jako duplicated:

ALTER IGNORE TABLE cms_members ADD UNIQUE INDEX(user_name);

Krótki komentarz z manuala do ALTER TABLE:

IGNORE is a MySQL extension to standard SQL. It controls how ALTER TABLE works if there are duplicates on unique keys in the new table or if warnings occur when strict mode is enabled. If IGNORE is not specified, the copy is aborted and rolled back if duplicate-key errors occur. If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Incorrect values are truncated to the closest matching acceptable value.

Pisząc ostatnie posty związane z bazami danych, mam nadzieję, że komuś się przydadzą.

MySQL: how to convert NULL to 0 number/int

Im więcej nietypowych rzeczy programuję, tym więcej nietypowych problemów musze pokonać. Co powiecie na sumę 2 liczb, z których jedna jest wartością NULL powstałą w wyniku działania SUM() lub pochodnych, gdzie nie odnaleziono żadnego rekordu.

Badamy:

SELECT 1+2+3
>> 6

SELECT 1+2+NULL
>> NULL

SELECT COALESCE( NULL, 0 )
>> 0

Zatem analogicznie do powyższego przykładu:

UPDATE users SET user_points = user_points + COALESCE((SELECT SUM( ... ) WHERE ...), 0)

Punkty użytkownika już zawsze będą się sumowały poprawnie :-)

« Previous Entries Next Entries »