
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.
Kategoria:Programowanie, Użyteczne
Przekaż dalej:
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
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 »
Kategoria:Programowanie, Użyteczne
Przekaż dalej:

Ten wpis rozpoczyna cykl notek o aplikacjach ułatwiających zarządzanie zawartością telefonu opartego na Androidzie (bazuję na posiadanym LG GT540) poprzez komputer z systemem Windows. Jako pierwszy na tapetę idzie QtADB – bardzo ciekawy menedżer stworzony przez Polaków.
QtADB to aplikacja z kilkoma zastosowaniami, z czego jako główne wymieniłbym menedżer plików oraz aplikacji. Program posiada stosunkowo prosty, lecz przejrzysty interfejs oparty na bibliotece Qt. Nie wymaga instalacji, bo dostarczany jest jako paczka typu portable – wystarczy rozpakować i uruchomić plik QtADB.exe.
Z naszym telefonem może się połączyć na dwa sposoby: poprzez USB (wymaga włączonego debugowania USB: Ustawienia » Aplikacje » Dla programistów) lub przez wi-fi (wymaga zainstalowania w telefonie adbWireless). Połączenie bezprzewodowe na pewno jest wygodniejsze, ale po pierwsze wymaga telefonu z dostępem root (a konkretniej wymaga tego adbWireless), po drugie demonem prędkości w tym trybie program raczej nie jest… W przypadku połączenia przez USB wszystko działa szybciej, co w sumie jest nieco zaskakujące. Przeczytaj resztę tego wpisu »
Kategoria:Programowanie, Użyteczne
Oznaczone jako: android, gt540, menedżer aplikacji, menedżer plików, qt, qtadb
Przekaż dalej:

W pewnym momencie telefon zaczął mi świrować. Naciskałem ekran, a on reagował jakbym palec miał 3 centymetry dalej – wymazałem więc dane użytkownika, wgrałem oryginalny rom operatora i chciałem odnieść do serwisu… okazało się jednak, że okres gwarancji już minął. Pogooglowałem więc i odnalazłem problem – uszkodzony digitizer. Postanowiłem więc kupić go i wymienić własnoręcznie, a co!
Na wstępie zaznaczę – operacja udana, pacjent przeżył
To w razie gdyby ktoś miał wątpliwości lub posiadał wewnętrznego leniuszka, który nie pozwalałby mu na doczytanie do końca. Ale do rzeczy, jak wymienić ekran w LG GT540 Swift?
Odpowiedź nie może być jednoznaczna, bo również zdecydowanie różne są umiejętności każdego z nas. Powiem więc tak: jest z tym sporo dłubaniny, bo żeby wymienić ekran trzeba w zasadzie całkowicie rozłożyć telefon, ale jednocześnie stosunkowo proste – poza jednym krokiem, o którym za chwilę – i wykonalne dla każdego, kto nie boi się śrubokręta i majsterkowania.
Uwaga, nie odpowiadam za szkody wyrządzone w Waszych telefonach – jeśli nie jesteście pewni, że potraficie wykonać opisane tu czynności, zostawcie to fachowcom.
Kategoria:Użyteczne
Przekaż dalej:

Jako, że jakiś czas temu w pracy na warsztat trafiła do mnie aplikacja oparta o Symfony (1.2), z którym nie miałem wcześniej do czynienia, musiałem trochę zgłębić temat i zaowocowało to tym, że spodobał mi się ten framework. Z kolei chyba stosunkowo niedawno ukazała się nowa wersja, więc chcąc zgłębić temat jeszcze bardziej, postanowiłem przygotować sobie środowisko spełniające wymagania Symfony2. I tu natrafiłem na problemy….
Już na starcie okazało się, że mam za niską wersję PHP (wymagana jest 5.3.2), więc trzeba było sięgnąć po bardziej aktualną. O ile instalacja nowej wersji WampServer 2.2 przebiegła bezproblemowo, jak również przeniesienie istniejących deklaracji wirtualnych hostów o dziwo poszło jak z płatka (no poza jednym błędem szybko wyłapanym dzięki C:\wamp_server\logs\apache_error.log), o tyle dołączony do Symfony2 skrypt sprawdzający kompatybilność z wymaganiami (symfony2/app/check.php) pokazał dodatkowo dwa ostrzeżenia. Jedno udało się wyeliminować błyskawicznie, wystarczyło włączyć rozszerzenie intl w PHP. Z drugim nie było tak łatwo.
Wprawdzie bez tego Symfony2 również by działało, ale taki komunikat:
*** Install a PHP accelerator like APC (highly recommended) ***
a zwłaszcza „highly recommended” robi swoje
Podrażniło to moją ambicję i zabrzmiała nutka pedantyzmu
Ale do rzeczy. Przeczytaj resztę tego wpisu »
Kategoria:Użyteczne
Przekaż dalej:
Wszelakie pliki tymczasowe, przeważnie także obrazy i inne media, dodaje się do pliku .gitignore po to by w ogóle nie były indeksowane. A co jeśli plik jest wymagany, by aplikacja działała poprawnie, ale jego zawartość może ulegać zmianie, np. w zależności od instancji lub chwilowych zmian w konfiguracji?
Gdy plik zostanie już raz zaindeksowany, można przestać śledzić jego stan usuwając wszystkie informacje z repozytorium dotyczące tego pliku, wykonując komendę git rm --cached nazwa_pliku i dodając odpowiedni wpis do pliku .gitignore. Nie jest to jednak to, co chcielibyśmy osiągnąć w przypadku plików, bez których aplikacja przestaje działać – bo co w przypadku, gdy zrobimy git clone? Nasza nowa instancja nie będzie zawierała tego pliku i grozi nam fatal error. Samo dodanie do .gitignore również nie rozwiązuje problemu, bo Git tak czy siak podpowiada zmiany w pliku i z łatwością można nieświadomie zatwierdzić zmiany w tym pliku używając git commit -a. Przeczytaj resztę tego wpisu »
Kategoria:Programowanie, Użyteczne
Przekaż dalej:
Automatyczne aktualizowanie zawartości katalogu roboczego po wepchnięciu zmian do repozytorium Gita
Rozwlekły tytuł notki niejako obrazuje skalę mojego problemu – dłuuuugi czas męczyłem się z dziwnym zachowaniem Gita, który zamiast aktualizować aplikacje nad którymi pracowałem, aktualizował jedynie historię wersji, a katalog roboczy musiałem poprawiać ręcznie. Bardzo upierdliwa robota, gdy problem dotyczy wielu aplikacji, z których każda może mieć więcej niż jedną zdalną instancję…
To, co dla mnie było błędem Gita, okazało się przemyślaną strategią. Tak właśnie zachowuje się Git podczas wpychania zmian do aktywnej gałęzi – dla pewności zostawia nienaruszony katalog roboczy, a jego aktualizację należy wymusić ręcznie za pomocą komendy git checkout -f. Zupełnie nie skojarzyłem tej zależności i za każdym razem zastanawiałem się czemu raz katalog roboczy aktualizuje się wraz ze zmianą w repozytorium, a raz wymaga ode mnie bym logował się przez ssh i dokańczał robotę własnoręcznie. Dziś postanowiłem zwalczyć problem i proszę, sukces!
Kategoria:Programowanie, Użyteczne
Oznaczone jako: bash, git, hooks, post-receive
Przekaż dalej:
Google Chrome – oczyszczanie pamięci

Gdy Chrome był jeszcze w powijakach jednym z koronnych argumentów za tą przeglądarką była niska zasobożerność. W porównaniu do innych przeglądarek, zwłaszcza do Firefoxa, wydawał się lekki jak piórko. A jak jest teraz?
Prawdopodobnie najlepszym benchmarkiem dla przeglądarek jest…. moja żona
Sposób, w jaki przegląda Internet, stawia komputery i przeglądarki pod ścianą – dziesiątki, czy też setki, otwartych zakładek w kilku przeglądarkach jednocześnie. Całkiem niezły komputer potrafi tak zamulić, że na jego reakcję po naszej aktywności trzeba chwilę poczekać.
Nie jest to jednak Jej wina; trendy webowe, bazujące na ciągłym aktualizowaniu zawartości w tle (zawołania ajax), wodotryskach (przesuwane tła, zmieniane rozmiary elementów) – wszystko to realizowane jest przez setki linii kodu JavaScript. Jak łatwo można się domyślić, sporo witryn tworzonych przez domorosłych webmasterów zawiera duże partie nieoptymalnego kodu, któremu nawet najlepszy garbage collection nie pomoże. Nawet najlepsi i najwięksi gracze Internetu czasem muszą znaleźć kompromis między wydajnością, zużyciem zasobów, a tym co chcą osiągnąć. Jak bardzo JavaScript obciąża pamięć? Szybki rzut oka na about:memory i co:
Połowa zużywanej pamięci to JavaScript! Przeczytaj resztę tego wpisu »
Kategoria:Użyteczne
Oznaczone jako: chrome, firefox, garbage collection, google, javascript, memory, pamięć, przeglądarki
Przekaż dalej:

Wyobrażaliście sobie kiedyś log serwera jako walkę zawołań z obsługującą je maszyną, walkę realizowaną w stylu legendarnej gry Pong? Zapewne nie, ja zresztą też nie ![]()
Jak się jednak okazało, ktoś wpadł na tak szalony pomysł i w dodatku fantastycznie go zrealizował. Zawsze zdumiewa mnie, gdy ludzie potrafią spędzać wiele godzin nad czymś, co w praktyce nie ma wielkiego zastosowania, ale po prostu ładnie wygląda, oferuje swojemu autorowi dobrą zabawę i rozwój osobisty. Taka sztuka dla sztuki poniekąd, ale jaka ładna:
I jeszcze jak „romantycznie” się nazywa: Logstalgia
Bliźniaczym projektem, do którego trafiłem najpierw przeklikując się przez repozytorium w GitExtensions jest Gource. On z kolei przedstawia historię zmian aplikacji jako rozwój drzewka, z centralnie umieszczonym folderem głównym, gdzie na każdej gałęzi rosną pliki:
Genialne jest to, że autorzy commitów latają wokół drzewa jak pracowite owady. Naprawdę, w kategorii „zrobienie sztuki z czegoś trywialnego”, oba wspomniane narzędzia dostają Złote Globy i Oskary jednocześnie ![]()
Kategoria:Programowanie, Rozrywka, Użyteczne
Oznaczone jako: apache, gitextensions, gource, logstalgia, systemy kontroli wersji
Przekaż dalej:





