Samsung Galaxy S4

Niedawno, przez niespełna 9 miesięcy, miałem przyjemność pracować w Samsung R&D Center Poland w Warszawie. Jednym z dużych plusów pracy w tej korporacji jest możliwość zetknięcia się z produktami producenta, także tymi, których jeszcze nie ma na rynku. Będąc pracownikiem Samsunga stałem się posiadaczem kilku telefonów z serii Galaxy: S2+, S3 a na sam koniec – S4.

Nie ma co kryć – było to naprawdę wartościowe doświadczenie. Można powiedzieć, że dzięki niemu teraz mogę korzystać z mojego wysłużonego LG GT540 bez ciśnienia na flagshipy. Oczywiście nie oznacza to, że nie chcę lepszego telefonu (epopeja z wyszukiwaniem odpowiedniej oferty to temat na osobny wpis), ale mam do tego większy dystans.

Pierwsze wrażenie

Nie będę oszukiwał – gdy dostałem swój egzemplarz S4, jarałem się jak strzecha po uderzeniu pioruna ;) Było to podekscytowanie ogólne, nie związane z wyglądem czy możliwościami telefonu – po prostu byłem ciekawy z czym mam do czynienia. W moim przypadku była to bezpośrednia wymiana S3 na S4, więc w grę wchodziło duże przyzwyczajenie wizualne, dlatego przez pierwsze 2-3 dni wydawało mi się, że S4 jest brzydszy od poprzednika. Po opatrzeniu się i przyzwyczajeniu, uznałem że jednak jest to krok w dobrą stronę i że telefon prezentuje się bardzo dobrze. Sytuacja zmieniała się jednak jak w kalejdoskopie, ale o tym później…

Konfiguracja telefonu przebiegła sprawnie, przy okazji skapnęło mi mnóstwo miejsca na Dropboxie (48GB, niestety tylko na 2 lata)  za połączenie urządzenia do swojego konta :) Wszystko działało płynnie, szybko, wrażenia z korzystania były bardzo pozytywne. Pierwsze zabawy aparatem fotograficznym wywoływały duży entuzjazm i budziła się we mnie świadomość, że Żona na pewno skorzysta z jego możliwości. Jedną z rzeczy, które zrobiły największe wrażenie to edytor zdjęć, w którym można zdziałać cuda, czyli powiększyć/pomniejszyć automatycznie wykrytym na zdjęciu twarzom oczy/nos/usta/kontur twarzy. Trzeba przyznać, że działa to bardzo dobrze i każda osoba, której tę funkcję pokazywałem robiła równie wielkie oczy jak te, które ja edytowałem ;) Przeczytaj resztę tego wpisu »

Samsung Smart TV

Na stronach Samsung Smart TV Apps Developer Forum można znaleźć narzędzia do tworzenia aplikacji na tę platformę (Smart TV). Dla ludzi zaprzyjaźnionych z Eclipse dobrą opcją jest wersja zintegrowana właśnie z tym IDE. Niestety, nawet najnowsza wersja środowiska (SDK 4.0 Beta) bazuje na Eclipse Indigo, czyli jest przestarzała o niemalże dwie generacje (stabilne Juno, Kepler na etapie M3). Na szczęście jest sposób na rozwiązanie tego „problemu” :)

Zanim rozpoczniemy integrację, kilka uwag:

  • Nie należy ruszać już posiadanych środowisk Eclipse, a także współdzielić workspace’ów (lub przynajmniej zrobić ich backup)
  • W przykładzie integracja bazuje na edycji Juno, choć prawdopodobnie identyczna (lub analogiczna) będzie dla każdej kolejnej wersji Eclipse
  • Aby nie rozwlekać opisu, w niektórych miejscach zastosuję „skróty myślowe” licząc na samoogarnięcie czytelnika ;)

English-speaking readers  should read stackoverflow’s question/answer.

Przeczytaj resztę tego wpisu »

Grzegorz Korba prezydentem Polski (UWAGA, TO ŻART!)

Trafiliście kiedyś na screenshoty np. Google Translate pokazujące jakieś dziwne tłumaczenie lub zrzut dyskusji na Facebooku zawierającej bardzo dziwny/kompromitujący wpis? A czy zastanowiliście się choć chwilę czy jest on prawdziwy?

Natknąłem się nie tak dawno na obrazek pokazujący, że Google Translate podpowiada „Real Madrid” gdy wyszukuje się „equipo de mierda„:

(FAKE) Real Madrid: equipo de mierda

Nie wnikam w to, czy jest on prawdziwy, czy to psikus silnika wyszukiwarki. Po prostu przypomniały mi się różne inne podejrzane screenshoty i wróciło do mnie pytanie: czy screenshoty mogą być dowodem na cokolwiek? Przeczytaj resztę tego wpisu »

Terminal

Wpis ten otwiera cykl jednolinijkowców, czyli użytecznych komend (czy też raczej zestawów komend) rozwiązujących niejeden frapujący problem. One-liners, bo tak zwą się w oryginale, dotyczą języków skryptowych wykorzystywanych w konsoli (linii poleceń).

W tego typu wpisach nie będę się rozwodził na temat zasad działania owych poleceń, będę tylko podawał do czego służą i jak są skonstruowane. Czasem dodam tylko jakąś małą informację, jeśli będzie potrzeba.

Na pierwszy ogień idzie komenda zamieniająca nazwy plików w katalogu (i jego podkatalogach).

Wymuszenie małych liter:

for f in `find . -type f`; do mv $f $(dirname $f)/`echo $(basename $f) | tr '[:upper:]' '[:lower:]'`; done

Wymuszenie dużych liter:

for f in `find . -type f`; do mv $f $(dirname $f)/`echo $(basename $f) | tr '[:lower:]' '[:upper:]'`; done

Oczywiście . (katalog bieżący) możemy zamienić na dowolną ścieżkę. Ten jednolinijkowiec różni się od tych krążących po sieci tym, że do konwersji bierze pod uwagę jedynie nazwę pliku, a nie całą ścieżkę.

GIT

Dziś krótko i węzłowato: jak skonfigurować połączenie ze zdalnym repozytorium Git tak, by wykorzystywać klucz SSH logując się jako użytkownik o innym loginie niż lokalny systemowy?

Załóżmy, że lokalnie nasz login to jan.kowalski, a dostęp do zdalnego repozytorium wymaga logowania jako piotr.nowak – wszystko pięknie, znamy host, login i hasło, tylko że ciężko nam zapamiętać ciąg znaków typu UnXTlIx5dLCGlzYF9qRp (co jest zupełnie zrozumiałe) i zupełnie nie uśmiecha nam się wizja robienia kopiuj/wklej przy każdym połączeniu. Robimy więc wszystko co potrzeba by wygenerować i wrzucić na serwer klucz SSH. W zależności od tego czy chcemy klucz zabezpieczyć, czy też nie, stosujemy passphrase (wtedy może to być nasze, łatwiejsze do zapamiętania hasło) lub go nie używamy.

Ok, mamy klucz ssh, do dzieła! Klonujemy zdalne repo na nasz komputer:

git clone -o nazwa_zdalnego_repo -- piotr.nowak@serwer:/sciezka/do/repo

I niespodzianka… Wcale się nie łączy – pyta nas o hasło (Password:), zamiast o passphrase (Enter passphrase for key '~/.ssh/wygenerowany_klucz':). Zaraz zaraz, myślimy, przecież mam klucz SSH! Przeczytaj resztę tego wpisu »

GIT

Jeśli mamy do wykonania 2-3 komendy, to problemu nie ma. Jeśli natomiast praca z repozytorium przypomina ciągłe sprawdzanie statusu, zmienianie gałęzi, commitowanie, resetowanie i wszystko inne, to klepanie za każdym razem komendy „git” może być uciążliwe. Z pomocą przychodzi Git-sh.

Git-sh jest nakładką na konsolę bash, która sprawia, że zyskujemy sporo cennego czasu. Dlaczego?

  • Dzięki niej wszystkie komendy Gita stają się globalnymi, czy raczej komendami najwyższego poziomu (czyli zamiast git checkout master piszemy checkout master)
  • Analogicznie dzieje się ze zdeklarowanymi aliasami (sekcja [alias] w gitconfig)
  • Koniec z cyklicznym klepaniem git status  – linia poleceń cały czas pokazuje nam nazwę aktywnej gałęzi oraz stan katalogu roboczego (np. master!MojeRepo *>).

Poza udogodnieniami typowo zadaniowymi, Git-sh oferuje inne: uzupełnianie wprowadzanego tekstu (zarówno komend jak i nazw gałęzi) z użyciem tabulatora oraz kolorowanie wyświetlanych elementów (personalizacja poprzez gitconfig: color.sh). Przeczytaj resztę tego wpisu »

Iker widzi Barcelonę w lusterku wstecznym

Musiał kiedyś nadejść. Dzień, w którym Iker w lusterku wstecznym nie widzi Rozpędzonego Walca, a tylko oddalający się jego zarys.

Sobotnie Gran Derbi wywoływały we mnie duże obawy. Już jakiś czas temu na blogu red. Wołowskiego pisałem, że nie zdziwi mnie jeśli Real wygra to starcie. Oczywiście, nadzieja była, poparta statystyką i wspaniałym zespołem. Niestety, nawet najlepsze zespoły miewają zadyszki, no i każda era ma swój schyłek. Nie wiem, o czym można mówić w przypadku Barcelony – oczywistym jest jednak, że ten mecz im się po prostu nie udał*.

Daleko mi jednak do deprecjonowania osiągnięcia Realu Madryt. Po pierwsze nareszcie był to mecz piłki nożnej; bez brutalności, dziwnych zachowań piłkarzy i nielubianego przeze mnie trenera. Po drugie uważam, że zagrali rewelacyjnie taktycznie. Mocny pressing, szczelna obrona, bez zbędnego biegania za setką podań graczy FCB, no i przede wszystkim z wyjątkową skutecznością w ataku. Wprawdzie można podważać pierwszego gola mówiąc o błędzie Puyola lub o ewentualnym mikrospalonym (którego sędzia nie miał prawa zauważyć), ale na pewno nie można mówić, że Real wygrał szczęśliwie. Ciężko to pisać, ale wygrał zasłużenie (Barca pomimo bardzo wysokiego procentu posiadania piłki nie dominowała w tym meczu). To nie jest tak, że madrycki klub miał 1,5 okazji i strzelił 2 gole – równie dobrze mogli dobić Blaugranę w 92 minucie, wystarczyło żeby Ronaldo lepiej przyłożył nogę. Były też inne sytuacje, w których podnosiło się ciśnienie i naprawdę nie ma co umniejszać klasy Królewskim – są mocnym zespołem i to było oczywiste, że kiedyś przerwą tę fatalną passę starć z drużyną Guardioli. Szkoda tylko, że zrobili to akurat teraz.

A może nie szkoda? Wszystko zależy od tego co wydarzy się w Lidze Mistrzów. Jeśli Barcelona, która może już sobie podarować Primera Division, skupi się na rywalizacji w Europie, przejdzie Chelsea, a później wygra finał – będzie można mówić o kolejnym historycznym sezonie, bez względu na wynik w La Liga. Słowo klucz: jeśli. Co do tego mam jednak równie duże obawy, ponieważ Chelsea zagra bardzo podobnie jak Real – obrona całym zespołem, groźne kontry, symulujący Drogba (jak już w miarę podbudował u mnie swoją ocenę, to meczem na Stamford Bridge przypomniał mi dlaczego go nie znoszę). Będą gryźć trawę by wykorzystać tę olbrzymią szansę, być może ostatnią w karierze wielu z piłkarzy tego zespołu. We wtorek czeka więc Barcelonę epicka bitwa o uratowanie sezonu, utrzymanie się na szczycie, być może o zatrzymanie Pepa.

Gdybym miał pogdybać, to zastanowiłbym się jak by to wszystko mogło wyglądać, gdyby grali Abidal (myślę, że przy nim nie padł by gol Ronaldo) i Villa (ten Villa w formie), a Pedro byłby tym fantastycznym zawodnikiem, który zdobywał gole we wszystkich możliwych rozgrywkach. Z nimi być może można by mówić o najwspanialszej Barcelonie w historii, ale bez nich jest to tylko bardzo mocny zespół. Sięgając głębiej – ciekawe jak w drużynie odnalazł by się Eto’o, którego odżałować nie mogę do tej pory (wymiana na Zlatana była chyba najgorszym transferem w historii piłki nożnej). Tak czy siak wyraźnie widać, że brakuje w katalońskiej drużynie typowego snajpera, pazernego na gole. Sanchez, przy całym moim szacunku do niego, nie jest typem goleadora i bardzo ciekawi mnie jak Więcej Niż Klub załata tę dziurę na przyszły sezon.

Bez względu na wszystko ostatnie sezony Barcelony to błogi sen okraszony tyloma trofeami, że aż ciężko w to uwierzyć. Dlatego nie ma co się denerwować, że tym razem nie udało się wygrać ligi – nie można wiecznie wygrywać wszystkiego co się da. Teraz trzeba „przyjąć na klatę” mistrzostwo Realu, pogratulować im oraz ich kibicom i trzymać kciuki za Ligę Mistrzów i za Copa del Rey (chociaż to akurat nie będzie zbyt dużym pocieszeniem w przypadku przegrania obu najważniejszych trofeów). I oczywiście za dobre okienko transferowe i przyszły sezon ;)

ps. Zabawna karykatura użyta we wpisie przypomina, że kiedyś bywało ciut lepiej ;)

* Fatalna postawa Iniesty, który tracił mnóstwo piłek. Tello może i w teorii był dobrym pomysłem, ale w praktyce zupełnie to nie wypaliło (zwód na lewą nogę i piłka poza boiskiem), wprawdzie miał dobre momenty, ale jednak myślę że nie wytrzymał rangi meczu. Valdes niezbyt dobrze zachował się przy obu golach. Puyol powinien wykopać piłką z linii bramkowej bez chwili namysłu. Xavi bez błysku w rozegraniu, zmarnował rewelacyjne podanie Messiego. Leo zagrał nieźle, ale dopadł go syndrom reprezentacyjny – musiał robić wszystko, z czego wychodziło (prawie) nic. Patrząc na jego minę wydawało mi się, że jest wściekły na partnerów z zespołu, załamany ich postawą. Alves został zneutralizowany przez Coentrao (duże zaskoczenie).

Enter: znaki nowej linii

Znaki końca linii to, wydawać by się mogło, sprawa trywialna. Zapewne wiele osób w ogóle nie ma pojęcia, że coś takiego istnieje ;) Są jednak momenty, gdy znaki te mają znaczenie i decydują o działaniu skryptu czy też aplikacji.

Sposobów na zmianę znaków końca linii zapewne jest mnóstwo, ja postaram się przedstawić te najbardziej użytkowe – z użyciem IDE i gotowych skryptów. To, który sposób najlepiej w danym momencie zastosować, zależy tylko i wyłącznie od upodobań i aktualnych potrzeb. Co innego przecież skonwertować jeden plik, a co innego napakowany nimi katalog.

Na początek troszeczkę teorii. Znaki końca linii to \r (return) oraz \n (new line), które mogą pojawiać się pojedynczo lub razem. W zależności od systemu operacyjnego ich użycie jest inne, a wyróżnić można trzy rodzaje:

  • CR – wykorzystuje tylko \r, skrót pochodzi od anglojęzycznego zwrotu carriage return (powrót karetki)
  • LF – wykorzystuje tylko \n, skrót pochodzi od anglojęzycznego zwrotu line feed (w wolnym tłumaczeniu: nowa linia)
  • CRLF – połączenie obu powyższych, wykorzystuje \r\n

Tak prozaiczna sprawa potrafi wprowadzić niemały zamęt – otwieraliście kiedyś w windowsowym notatniku pliki pochodzenia unixowego? Wszystko jest wyświetlone ciurkiem i nie można się połapać co jest gdzie. Dlatego współdzielenie danych w plikach wykorzystywanych przez aplikacje uruchamiane na różnych systemach bywa kłopotliwe i nieprawidłowa obsługa znaków końca linii może doprowadzić do tego, że coś, co teoretycznie zaprogramowane jest prawidłowo, nie będzie działało. Można też natknąć się na inne problemy związane ze znakami końca linii, jak choćby „błąd składni” w plikach po klonowaniu repozytorium Git.

Przeczytaj resztę tego wpisu »

GIT

O tym, czym tak naprawdę jest Git-Flow postaram się napisać kiedy indziej. Dzisiaj przejdę do konkretów – jak go zainstalować na Cygwinie i rozwiązać ewentualny problem z „błędem składni” pliku wykonywalnego.

Instalacja pakietu Git-Flow opisana jest bardzo telegraficznie na githubowym wiki projektu. Wprawdzie podkreślone jest, że wymagane są pakiety git, util-linux i wget, ale jedno nie jest sprecyzowane – że komenda

wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash

która instaluje Git-Flow jednocześnie klonuje repozytorium do miejsca, w którym została wywołana. Warto więc odpalić ją tam, gdzie chcemy, by takie repo się zadomowiło.

Jeśli wykonamy git flow i ukaże się usage: git flow <subcommand> z całą resztą opisu pakietu, to znaczy, że wszystko poszło dobrze i możemy korzystać z dobrodziejstw git-flow. Jednak nie zawsze jest tak kolorowo… Przeczytaj resztę tego wpisu »