Piotr Gabryjeluk blog

BASH HTTP server evolves

31 Jan 2012 18:34

Some time ago, mainly for fun I created a HTTP server in just BASH and netcat. The aim was to instantly and simply share files between computers in local network with a one-line command:

quake@vaio /home/quake/files $ http_server.sh 8000

And voila, the files in directory /home/quake/files are accessible via a web browser (or a wget command) on every computer in local network.

Some time ago I learned I can achieve the same effect using simple Python one-liner:

python -m SimpleHTTPServer

This work for standard Python 2.x installations, for Python 3.x even simpler:

python -m http.server

No need for custom scripts, netcat or other fancy stuff, you need just a standard Python installation and it works ;-).

But recently I faced a challenge of copying many gigabytes of files over network. Copying files over SSH was too slow (data is copied from an ARM machine, not really blazing fast at encryption stuff). I tried to copy files over FTP, but I failed at configuring read-write FTP server in limited time. I wanted to avoid configuring other fancy file servers like Samba/CIFS. I could use NFS, which is both simple to configure and fast enough, but I decided to go more fancy.

I took my old http_server.sh, tweaked it a bit (including replacing lame cat "$file" | wc -c - with stat -c %s to determine file size and replacing gawk with awk in the script) and then created a specialised version of it: tar_server.sh.

tar_server.sh is a HTTP server based on http_server.sh that shows you list of directories inside of directory it was run from and allows you to download the directories as tar files. It does the taring on the fly, so you don't waste the disk space.

It's as simple as:

quake@vaio /home/quake/files $ tar_server.sh 8000

Then you can see the list of tar files to download at http://your_ip:8000/ . Suppose you have a directory /home/quake/files/backup. You can download it on some other machine using:

quake@other-machine /home/someuser/files $ wget http://your_ip:8000/backup.tar

Or to unpack on the fly:

quake@other-machine /home/someuser/files $ wget http://your_ip:8000/backup.tar -O - | tar -x

This way you can mirror part of your filesystem with almost no dedicated tools. The script is quite OS-independent and requires only netcat, awk, tar and stat commands, that are likely to found in any Unix-like systems.

Also the script proves BASH is still very useful tool and adapting simple scripts is easy and FUN :-).

Remember, the scripts (just like original version) can handle only one client at once, so if you want to do parallel stuff, you need to launch more of them on different port each.

Here are the scripts:

http_server.sh:

tar_server.sh:

Comments: 2, Rating: 0

Reklamacja wg HTC

15 Nov 2011 20:36

Jak część z moich czytelników już wie, ekran LCD w moim HTC Desire rozlał się, ot tak, bez wyraźnej przyczyny. Rano działał, by po pół godzinie nagle pęknąć i się rozlać. Smutek, ale przecież od tego jest reklamacja, aby takie sprawy rozwiązać. Postanowiłem więc ową usterkę na gwarancji oddać.

Na początku się nieco wahałem, bo jak to wynika z mojego doświadczenia związanego z reklamowanymi produktami, producent zawsze stara się winę zrzucić na użytkownika. Jednak pomyślałem, że skoro firma jest niepolska, to pewnie ma wyższe standardy traktowania klienta, co zresztą potwierdził krótki research w internecie dotyczący wymiany pękniętych ekranów LCD w telefonach tejże firmy na gwarancji, z którego wynikało, że o ile faktycznie nie było w usterce winy klienta, to ową wymianę przeprowadzają.

Zadzwoniłem na hot-line HTC, gdzie opisałem sprawę. Wpierw zaproponowano mi restart ustawień telefonu, no ale co zrobić — procedury — tak samo w Netii zawsze mówili, żeby sprawdzić ustawienia Firewalla Windowsa, nawet jeśli dokładnie opisuję pomiędzy którymi routerami brzegowymi wg traceroute'a giną moje pakiety ;-). No nic, wyjaśniłem, że jestem świadomy, że to usterka mechaniczna, a nie softowa i już się nie upierali przy tym resecie ;-).

Potem poproszono mnie o wykonanie zdjęć ekranu, co uznałem za dobry znak — ktoś faktycznie przejmuje się moim losem i chce się zająć moim smutnym telefonem. Wykonałem zdjęcia, przesłałem i po niedługim czasie dostałem info, że mogą mi załatwić transport do serwisu, gdzie zostanie rozpatrzona gwarancja. Jeśli uszkodzenie wynikło z mojej winy (a wiem najlepiej, że nie), to będę musiał jednak pokryć koszty kuriera. W tym momencie robi się nieco niemiło, bo brzmi to jak typowy zniechęcacz klientów. Na pewno sporo ludzi się wystraszy ewentualnych kosztów, bo przecież nigdy nie wiadomo, czy producent reklamację rozpatrzy pozytywnie, czy nie.

No ale w moim przypadku nie ma się czego bać. Uszkodzenie wyraźnie nie było z mojej winy, skoro nawet tego telefonu w czasie gdy nastąpiło nie dotykałem, więc poprosiłem o zamówienie kuriera. Przygotowałem z 6 kartek różnych dokumentów (opis uszkodzenia, kartę zgłoszenia sprawy — co ciekawe wysłane w formacie TIFF — i kartę adresową dla kuriera), zawinałem telefon w bąbel folię i zostawiłem Marcie, aby przekazała tę paczuszkę kurierowi.

Nie ukrywam, że byłem ciekawy rozwoju sytuacji. Od dzisiaj mam dzięki kumplowi zastępczy telefon, ale jego milczenie podpowiedziało mi, że jeszcze sobie poczekam na jakąś odpowiedź. Jednak po powrocie do domu znalazłem na mailu informację z serwisu. Jednak szybka reakcja. Niestety wiadomość, którą dostałem to ani przyjęcie do serwisu, ani odpowiedź na zgłoszenie gwarancyjne, a kosztorys naprawy! WTF??!?!?!?! Trochę mnie zlewa ile kosztuje naprawa, bo ma za nią zapłacić producent, tak?

Dodatkowo proszą o wypełnienie danych do faktury i w przypadku nieodpowiedzenia w ciągu dni zastrzegają prawo do obciążenia kosztami. No i tu się robi chamsko.

Postanowiłem zadzwonić do HTC i wyjaśnić sprawę. Mówię o co biega, że wysłałem na gwarancji a dostałem kosztorys naprawy do zaakceptowania zamiast decyzji o rozpatrzeniu gwarancji i, że nie było to najmilsze. W infolinii dostałem informację, że skoro dostałem kosztorys to "na pewno" technicy sprawdzili telefon i "zgodnie z wytycznymi firmy HTC" przebadali telefon i stwierdzili, że uszkodzenie mechaniczne zaistniało z mojej winy. To dość daleko idąca dedukcja.

Potem nastąpiła wymiana poglądów na temat pęknięć ekranów LCD ("one NIGDY nie pękają same", ciekawe, a mój niby to co?), później na temat poinformowania mnie na temat kosztów kuriera. Rozmowa prawie nie miała końca, ale ja swoje, oni swoje.

Kilka faktów:

  • Pan, który pracuje w HTC "od wielu lat" jest pewien, że ekrany LCD "NIGDY nie pękają same"
  • Pani, która pracuje z tamtym Panem, która mi załatwiła kuriera dostała zdjęcia telefonu oraz jednoznaczną informację, że ekran LCD jest pęknięty i rozlany
  • ta sama Pani, miała wyraźną informację, że interesuje mnie wyłącznie wymiana ekranu na gwarancji producenta
  • Pani poinformowała mnie, że JEŚLI zostanie stwierdzone, że uszkodzenie nastąpiło z mojej winy, to będę musiał zapłacić za kuriera

Teraz zgodnie (mam nadzieję) z logiką i zdrowym rozsądkiem:

  1. Telefon ma pęknięty LCD, o czym Państwo HTC wiedzą
  2. Skoro ekrany LCD nigdy nie pękają same, to wiadomo, że pęknięcie nastąpiło z mojej winy
  3. Chcę telefon oddać na gwarancji, ale skoro usterka jest z mojej winy, to wiadomo, że gwarancja będzie odrzucona
  4. Jeśli gwarancja będzie odrzucona, to nie ma sensu proponować kuriera z zastrzeżeniem, że zostanę obciążony kosztami JEŚLI to będzie moja wina. Oni już wiedzą, że jest to moja wina, więc od razu wiedzą, że będę musiał zapłacić za kuriera, czego nie chcę, skoro telefon chcę reklamować, a nie naprawić na swój koszt.

To dlaczego to robią? Naciąganie klienta na koszty? Brak komunikacji w zespole? A może jednak każdy element ma z jakimś prawdopodobieństwem pęknąć, więc faktycznie gwarancja może być rozpatrzona pozytywnie — ale wtedy mówienie z całą pewnością, że ekrany LCD nie pękają jest bardzo nieprofesjonalne i nierzetelne.

Może miałem tylko pecha, ale wkurwienie na firmę zostanie i mój następny smartfon to już nie będzie HTC (którego musiałbym szczerze polecić, gdyby nie ten incydent).

Przypomina mi się też jeden raport na temat polskich sprzedawców i kupujących. O ile kupujący w Polsce są jednymi z najuczciwszych na świecie, to sprzedający na każdym kroku kantują kupującego. Ile razy już czytałem o tym, aby omijać polskie oddziały firm z daleka. A ile razy słyszałem o przypadkach dobrego traktowania klienta? Mnóstwo, ale nigdy w Polsce. A mówię o rekompensowaniu wadliwych laptopów PO gwarancji (Sony), wysyłanie baterii do telefonów komórkowych kurierem do domu klienta BEZ konieczności wysyłania dowodu zakupu (chyba Nokia), wymiana sprzętu wyraźnie uszkodzonego przez klienta łącznie z pokryciem kosztów przesyłki (bez konieczności przedstawienia dowodu, że faktycznie tyle to kosztowało) uszkodzonego urządzenia do US czy UK (Amazon).

I przypomina mi się jak raz kupiłem sobie laptopa sprowadzonego z US, wiedząc, że w ramach usterki nie mam żadnej gwarancji. Wtedy stwierdziłem, że szansa, że coś się faktycznie stanie jest niewielka, a ta gwarancja w Polsce jest gówno warta, bo w Polsce zawsze wpierają, że usterka jest winą klienta. Dzisiaj się jeszcze bardziej utwierdziłem w tym przekonaniu.

Comments: 1, Rating: 0

Wieści Z Pyrlandii

08 Nov 2011 19:10

Blog prawie umarł, więc czas tchnąć weń nieco życia.

Pomimo różnych plotek, wciąż pracuję w Grupie Allegro, ale już nie nad samym serwisem Allegro.pl (te ostatnie przerwy w działaniu, to więc wyraźnie nie moja robota), tylko nad ciekawym nowym tajnym sajtem, o którym opowiem może tochę więcej jak tylko wystartuje. Na razie nie chcemy go zbytnio rozgłaszać.

Obecnie jestem trochę chory, więc będę pewnie kilka dni siedział/leżał w łóżku, co powinno mi dać trochę czasu na zapoznanie się z ciekawymi rzeczami dziejącymi się wokół frameworka Symfony, który jest ostatnio obiektem moich fascynacji. Wychodzi na to, że wszystko co pochodzi od Fabiena Potenciera jest świetne i przenosi to co dotychczas było zarezerwowane dla "fajnych" języków programowania wprost do PHP. Czasem nawet jest to zrobione fajniej niż w oryginale.

Weźmy taki microframework Silex. Pozwala stworzyć aplikację WWW w jednym pliku (jeśli w PHP 5.4 faktycznie znajdziemy wbudowany serwer HTTP, to już w ogóle będzie super wygodne rozwiązanie). Silex jednak jest bardzo rozszerzalny i modularny, co sprawia, że może być ciekawym rozwiązaniem nie tylko na malutkie projekty ale i te trochę większe, a może i całkiem duże. Taki framework nie narzucający zbyt wiele konwencji może być fajny dla nowego nietypowego projektu.

Kolejna moja ostatnia fascynacja to MongoDB. Jest to fajna rzecz w czasach, gdzie duże projekty oparte o bazy SQL-owe shardują dane na kilka różnych baz danych i celowo rezygnują z kluczy obcych i transakcji, żeby zyskać na wydajności. Ponadto często w pracy z relacyjną bazą danych denerwująca jest konieczność ustalania z góry kolumn, które mają się znaleźć w tabelach. Często po prostu chcemy w bazie danych zachować obiekty, które mają różne właściwości, których nawet nie znamy na początku rozwoju projektu. Dodawanie kolumn do tabel zwykle nie jest szybką operacją, a może być wręcz operacją blokująca, co jest najgorszą możliwą sytuacją, gdy mamy już całkiem sporo danych w tabeli.

MongoDB zostało owrapowane w całkiem fajny mechanizm (DocumentManger) we wtyczce dla Doctrine. Podejście do obiektów jest tam podobne jak w Javowym db4o. Dla projektów w Symfonowy wsparcie Doctrine dla MongoDB jest dostępne jako bundle — jedną z paczek, z których składa się aplikacja (kod który piszemy w ramach aplikacji — kontrolery, widoki itd. też jest bundlem).

Generalnie trzeba powiedzieć, że w PHP i okolicach zrobiło się ostatnio całkiem ciekawie. Numerki 5.3 i 5.4 wniosły podobny powiew świeżości do tego języka co zmiana 4-ki na 5-kę. Coraz częściej spotyka się różne biblioteki działające tylko z wersją 5.3+, np. świetna biblioteka Imagine do obsługi obrazków wzorowana na Pythonowym PIL.

To chyba na tyle przynudzania. Jak coś jeszcze ciekawego wymyślę, to napiszę :P. Pozdro.

Comments: 0, Rating: 0

Carrefour a ceny za litr

21 Aug 2011 17:38

Carrefour ma duże problemy z arytmetyką. Rzućcie okiem na ceny za litr:

Zdjęcia zrobione w Poznańskim Carrefourze w Centrum Handlowym Pestka. List elektroniczny do PIH wysłany, bo niestety obsługa wolała mi zwracać uwagę, że nie można robić zdjęć w sklepie zamiast mnie normalnie wysłuchać.

Comments: 1, Rating: 0

page 1 of 39123...3839next »

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License