czwartek, 23 lipca 2009

Fchuj z dreamhostem!

No to sru! Kolejny raz się sypło. Pamiętacie jak zachwalałem tenże przezajebiaszczy dreamhost?
No to kłamałem, ale dopiero teraz zdałem sobie z tego sprawę.
Baza - leży i kwiczy. Jakże fachowe określenie współpracowników z działów NIE-IT tutaj pasuje - "Nic nie działa!"
WWW - bez bazy to gówno nie www, ale nawet to, co bazy nie musi muli w kit.
Maile - o dziwo chodzą przez thunderbirda (jeszcze). Przez www oczywiście zmuła.
Limity maili - ta, że niby każdy user to potencjalny spammer, to max 200 maili na godzinę można słać. Toć mi kurwa sajty przy ich częstotliwości padania alertami, że znów nie działa limit momentalnie wyczerpują!
SVN - jeszcze chodzi
Jabber - póki co świeci na zielono, nie wiem czy działa, bo akurat nikogo nadającego się do testu nie widać ;)
ssh - muli, ale jeszcze żyje
cron - póki co się wykonuje, ale to, co tam siedzi bez bazy i tak gówno może

Ogólnie miarka się dziś przebrała. W związku ze związkiem POSZUKUJĘ HOSTINGU, który "umi":

  • min 13G transferu na miecha (preferuję unlimited na wszelki wypadek)
  • min 12G na dysku (również wskazane unlimited)
  • unlimited domains (+sub +wildcards)
  • unlimited mails (+catch-all)
  • własne repo SVN
  • jabber w swojej domenie (ewentualnie bez tego mogę się obyć)
  • ~ 700M MySQL5 (tu także unlimited mile widziane)
  • ssh access (+cronjobs)
  • PHP 5 (miło by było z własnym php.ini)
  • apacz (z mod_rewrite'm koniecznie)


Jak ktoś może coś ciekawego polecić, to bardzo chętnie się zapoznam.
HELP!


p.s. za ludzką cenę, co bym z mojej murzyńskiej pensji umiał to opłacić!

sobota, 28 marca 2009

iPhone, czyli PRAWIE jak telefon XXI wieku

Ludziska ocipieli, bo iPhona do polski dali. Pokupowali ten sh### za grube dolary i co? I mają wielkie g... :D
Oto krótkie 'z życie wzięte' wynalezione gdzieś na sieci:

Oto doskonała rozmowa między dwoma użytkownikami telefonów - jednym z nich jest użytkownik iPhone

1. Mam fajną fotkę, włącz bluetooth to Ci ją prześlę!
iPhone ma wprawdzie wbudowany bluetooth, ale nie można nim przesyłać plików na inny telefon. Służy tylko do zestawu słuchawkowego.

2. W takim razie prześlę Ci tą fotkę MMS. Zajebista, zobaczysz! Jaki masz numer ?
iPhone 3G nie ma funkcji Obsługi MMS

3. Wyślę Ci fajny sprośny SMS jaki dostałem od poznanej laski, ale proszę zaraz jak go przeczytasz wykasuj!!! Obiecujesz?
iPhone 3G nie ma opcji pojedynczego kasowania wiadomości. Użytkownik albo kasuje wszystkie wiadomości albo wcale.

4. Mam fajne dzwonki MP3 na różne okazje. Jak będziesz w domu przerzucisz je sobie kablem i ustawisz. Jak dzwoni Twoja dziewczyna, do wiadomości SMS…
iPhone 3G nie pozwala ustawić mp3 jako dzwonka. Ma wgrane tylko 20 dzwonków i tylko je można sobie ustawić, bo klient w Polsce nie ma sklepu aby kupić kolejne w sklepie iTunes.

5. Jak będziesz w domu coś Ci wyślę SMS-em. Tylko nie pokazuj żonie bo pomyśli, że ją zdradzasz.
iPhone 3G otrzymaną wiadomość wyświetla od razu całą na pulpicie bez pytania się o pozwolenie. Nie można tego wyłączyć, zatem lepiej nie zostawiać go na stole bo nigdy nie wiadomo.

6. Fajny ten Internet w telefonie. Weź zapisz te pliki video z tej strony zanim je usuną.
iPhone 3G nie pozwala zapisać innych plików z internetu jak tylko zdjęcia.

7. Pokaże Ci fajne stronki z animacjami i grami. Możesz w nie się bawić używając tylko przeglądarki!
iPhone 3G ma przeglądarkę Safari ale nie pozwala ona na oglądacie stron w formacie java ani flash. |Wyskakuje błąd.

8. Wow zobacz! Weź to sfilmuj dla mnie, albo chociaż zrób zdjęcie ze zbliżeniem! Twój telefon taki wypas, pewnie ma dobry aparat!
iPhone 3G ma wbudowany aparat 2 Mega Pixele bez zoomu ani optycznego ani cyfrowego i lampy błyskowej. Nie pozwala również kręcić filmów video.

9. Dzisiaj dzwoniłem do Ciebie. Jak to do Ciebie nie dzwoniłem? Weź pokaż mi swoje połączenia przychodzące ! O widzisz jestem ? Jak to Ty do mnie ? Przecież to ja do Ciebie dzwoniłem!
iPhone 3G pokazuje wszystkie połączenia przychodzące i wychodzące razem w jednej liście. Trzeba głęboko wejść w opcje każdego połączenia, aby przekonać się jaki ono miało charakter.

10. Chwaliłeś się, że Twój telefon ma nawigację. Weź ją włącz, zobaczymy jak działa!
iPhone 3G ma wprawdzie nawigację, ale bez wgranych map i wszystkie pobiera z internetu. Zatem jeżeli Wasz kolega nie posiada akurat wykupionego pakietu internetowego z dużym limitem, nie będzie chciał jej włączyć.

11. Mogę się trochę dłużej pobawić Twoim telefonem ?
iPhone 3G ma baterie która przy stałym wykorzystywaniu jego funkcji wymaga ładowania go ok. raz na półtorej godziny, szczególnie jeżeli chodzi o filmy i nawigacje.


Dla tych, co kupili sobie superaśnego ajfona do szpanowania na wsi obrazek na pocieszenie. Są jeszcze na świecie telefony, z którymi iPhone wygrywa:

niedziela, 15 lutego 2009

Miszczu programowania

Jakiś czas temu wziąłem pod swoje skrzydła pewien portal motoryzacyjny.
Kwiatków jest tu całkiem sporo, ale niektóre wołają wręcz o pomstę do nieba.
Widać, że poprzednik usłyszał gdzieś, że programowanie obiektowe jest fajne, więc próbował porobić obiekty, ale bardziej tylko zakręcił, bo nie rozumie sensu obiektowości.
Najlepsze są funkcje, które służą tylko temu, aby wywoływać je po innej, zwykle dłuższej niż dostarczona wraz PHP nazwie. Oto i przykład:
function trim_value(&$value) {
    $value = trim($value);
}

Prawdziwych intencji autora nie znam, ale chyba musiał mieć w tym jakiś wyższy cel, nie nie chce mi się wierzyć, że pisze w ten sposób kod, bo takiego właśnie potrzebuje.
Mój apel do ludzi podających się za programistów, piszących gdzieś kod, który ktoś inny może zobaczyć: zanim opublikujesz zapytaj kogoś, kto się zna, czy nie przegiąłeś. Zaoszczędzisz sobie wyśmiania Cię przez innych.
Tak... wiem, nikt nie jest od razu alfą i omegą w programowaniu, ale programowanie nie zwalnia od myślenia.

piątek, 26 grudnia 2008

Rozmowa w sprawie pracy, czyli czym jest pensja brutto

Tak jakoś mnie naszło jak wyglądają moje rozmowy w sprawie pracy:

Ile chciałby Pan zarabiać?
Nie mam górnego limitu
... konsternacja ... kompilacja ... uśmiech - zrozumiał i się poprawił:
Ile minimum chciałby Pan zarabiać?
Poniżej XXXX nie mamy o czym rozmawiać
Hmm... netto czy brutto?
Podawanie pensji brutto jest jak podawanie długości penisa razem z kręgosłupem
... konsternacja ... kompilacja ... zakłopotanie - zrozumiał:
Yyyyy... czyli rozumiem, że netto?
Podoba mi się Pana tok myślenia

Apel do pracodawców: Nauczcie się w końcu, że wartość brutto nic nie znaczy. Dla pracownika ważne jest ile będzie zarabiał, a nie ile by zarabiał gdyby nie podatki, składki i inne duperele.

:)

niedziela, 21 grudnia 2008

Wesołych Świąt

Krótko i treściwie:



p.s. Gdyby ktoś jeszcze nie widział gdzie przywita Nowy Rok, to polecam oferty sylwestrowe.

wtorek, 16 grudnia 2008

Ustawienie domyślnej przeglądarki w Thunderbird

Czasami tak bywa, że mamy w mailu jakieś linki i akurat chcemy je kliknąć celem sprawdzenia, co kryje się pod tym adresem.

Bywa niestety też tak, że klikamy jak pogibani w te linki, a thunderbird ani huhu albo odpala nam te linki w innym programie, niż byśmy chcieli, np. otwiera w Operze, a my wolimy Firefox'a.

Na szczęście jest na to bardzo prosty sposób.

W naszym thunderbirdzie klikamy na menu Edycja→Preferencje. W okienku, które się nam otworzy klikamy w prawym górnym rogu na Zaawansowane i następnie przycisk Edytor ustawień.

Wyskoczy nam okienko z mega tajnymi kodami-ustawieniami ;)

W pole Filtr wpisujemy frazę app.http.

Jeśli znajdzie nam pola network.protocol-handler.app.http i/lub network.protocol-handler.app.https to w kolumnie wartość widzimy ścieżkę do programu, który odpowiada za otwieranie linków (http lub https) z wiadomości email. Jeśli wartością tą jest nic, lub ścieżka do programu innego niż ten, którym chcemy otwierać linki, to klikamy prawym przyciskiem mychy na właściwą linię, a następnie na modyfikuj. W okienku, które wyskoczy podajemy ścieżkę do naszej ulubionej przeglądarki, np. /usr/bin/firefox.

Bywa jednak, że nie mamy takich wartości. Wówczas klikamy prawym przyciskiem mychy gdzieś na białe pole (to, w którym jest dużo tych różnych napisów ;) ), z menu, które się nam ukaże wybieramy Dodaj ustawienie typu→łańcuch. Wyskoczy nam okienko, w które wpisujemy nazwę network.protocol-handler.app.http, klikamy OK. W kolejnym okienku podajemy wartość - pełną ścieżkę do aplikacji przeglądarki internetowej, która ma nam otwierać linki z thunderbirda. W moim przypadku wpisałem /usr/bin/firefox.

Czynności te powtarzamy dla nazwy network.protocol-handler.app.https. Zamykamy okienka z konfiguracją, opcjami, itp.

Otwieramy jakiegoś maila z linkami, klikamy na linka, i... TADA!!! Bangla, gra i trąbi - otwiera się link w naszej ulubionej przeglądareczce :)

niedziela, 7 grudnia 2008

Instytut Blend-a-med i Oral-B promuje Linuksa

Tak... jak w temacie...
Promuje linuksa, pokazując, że można na nim obrócić monitor i kliknąć ikonki z pulpitu ;)

czwartek, 9 października 2008

Gdynia _PRAWIE_ dostępna dla inwalidów

Jak powszechnie wiadomo "prawie" robi wielką różnicę.

Oto przejaw geniuszu projektanta bądź talentu wykonawcy.

Gdynia Główna - nowy peron SKM, jakże dostępny dla inwalidów na wózkach i matek z dziećmi:





Czyżby nastała pora na nowy sport ekstremalny - jazda na jednym kole wózka inwalidzkiego/dziecięcego?

Nic, tylko pogratulować ;)

piątek, 26 września 2008

Makro spacerkiem po Redzie

Kilka fotek pstrykniętych komórką Sony Ericsson K550i przy okazji spaceru z rodzinką:

Spacerem po Redzie

czwartek, 25 września 2008

Błąd wysłania formularza

Ku pamięci...
Nazwa funkcji w JS nie może być taka sama jak id jakiegoś pola formularza.
FF sobie radzi, opera i m$ - nie.

Żeby nie być gołosłownym...
W pewnym projekcie zaistniała potrzeba użycia javascriptu do submitu formularza z uprzednim podmienieniem wartości pola hidden na wartość podaną jako parametr funkcji.
Czuję, że jak zwykle zakręciłem i nie wiadomo o co mi chodzi.
Do rzeczy więc.
Mamy sobie stronkę:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Form error</title>
<meta name="author" content="Kashub" />
</head>
<body >
<?
if(!empty($_POST)) {
echo '<pre>POST:<br />' . var_export($_POST, 1) . '</pre>';
}
?>
<form action="" method="post" id="updateWirtForm">
<script type="text/javascript">
function sru(avid) {
document.getElementById('sru').value = avid;
document.getElementById('updateWirtForm').submit();
}
</script>
<input type="hidden" name="sru" id="sru" value="" />
<a href="#" onclick="sru('1')"/>wyślij z podmianą hiddena</a>
</form>

</body>
</html>
Na pierwszy rzut oka nic szczególnego - po kliknięciu na link ma się ustawić wartość wpolu hidden i wysłać formularz.
W wyniku spodziewamy się czegoś takiego:
POST:
array (
'sru' => '1',
)

wyślij z podmianą hiddena

... i tak też się dzieje na Firefoksie.
Wszystko było by fajnie, ale spójrzmy co na to np. Opera:
JavaScript - http://localhost/f.php
Event thread: click
Error:

name: TypeError

message: Statement on line 1: The Object does not implement [[Call]]
Backtrace:
Line 1 of script

sru("1");
At unknown location

[statement source code not available]

Również pod m$ie zaawansowany debug wyświetlił niezwykle treściwą informację - "Błąd na stronie". Być może dało by się gdzieś doczytać komunikat, ale pod winkiem jakoś nie da się nic więcej :)

Rozwiązanie okazało się bardzo proste, ale nieco nieoczekiwane. Wystarczy zmienić albo nazwę funkcji w javascript albo id hiddena w formie.
Mam nadzieję, że zaoszczędzę komuś nieco czasu dzięki temu wpisowi :)

piątek, 5 września 2008

Włam do bankomatu przez bluetooth

Receptura:

Podchodzimy do bankomatu PKO w Redzie:



Włączamy w komórze bluetooth'a i nawiązujemy połączenie z bankomatem.
Bankomat grzecznie nas informuje, że odnaleziono nowe urządzenia:



W telefonie wciskamy kombinację klawiszy XXX-X-XX-XXXXX-XX-XX, następnie zieloną słuchawkę i podstawiamy jakiś worek
pod bankomat, który wypluje wówczas wszystkie banknoty, które posiada w środku.

Na koniec wciskamy "Rozłącz" i idziemy do kolejnego bankomatu celem powtórzenia operacji ;)

sobota, 2 sierpnia 2008

Makro komórką

Kilka fotek machniętych sonyeryksonową komórą z nudów u rodziców na podwórku w Gnieżdżewie :)
BTW, ma lepsiejsze makro niż

Trochę makro

czwartek, 31 lipca 2008

Jestem - mieszkam :)

Tak... w końcu się udało.
Mam gdzie mieszkać! :)
Nie, nie oznacza to, że wcześniej spałem pod mostem :D
Udało się w końcu z mieszkaniem. Kupiłem mieszkanko z pół roku temu (oczywiście podpisując cyrograf na 30 lat, czyli biorąc kredyt mieszkaniowy) i w końcu udało się z miesiąc temu je wykończyć lepiej niż mi się marzyło.
Chciałem tylko na tyle, żeby szło mieszkać, czyli generalnie kilka niezbędnych "mebli" w łazience i materac w pokoju ;D
Do całkowitego ukończenia mieszkania jeszcze daleka droga, ale pomalutku "się zrobi".

Ale do rzeczy. Ten post ma być podziękowaniem dla osób, bez których bym nadal "nie mieszkał". Z tego miejsca dziękuję serdecznie:

  • Mamie - za zaangażowanie, poświęcenie masy czasu na załatwienie wszystkiego, organizację, pomysły, pracę twórczą, projektowanie, itp.,
  • Tacie - za wkład finansowy, bez którego ani moje marzenia, ani Mamy pomysły na nic by się nie zdały,
  • Bratu - bez Niego moje marzenia z Mamy pomysłami i Taty pomocą finansową też na nic by się zdały, bo nie było by komu zrobić tego wszystkiego,
  • Koledze Mariuszowi - za pomoc w ściągnięciu na miejsce Żony i Córeczki, bez których nie miałbym po co tu mieszkać,
  • wandzie (wtajemniczeni wiedzą o co chodzi) - za to, że nie muszę oglądać jej gęby ani słuchać, jak bez przerwy robi awantury Rumcajsowi kompletnie o nic. Napisałbym z byle powodu ale to nie starcza, bo bywa na ogół, że bez powodu (sic!).

Dziękuję też wszystkim innym, którzy wspierali mnie w jakikolwiek sposób, zwłaszcza Żonie za wsparcie psychiczne.

Raz jeszcze z całego serca dziękuję Wam!

p.s. Osoby zainteresowane parapetówą z przykrością informuję, że już po. Kto przyszedł, ten wyszedł :P

środa, 9 stycznia 2008

Skype na OpenSuse 10.2 x86_64

Zachciało mi się wrzucić Skype na swoim pingwinowym laptopie a tu klops. Skype nie chce banglać na OpenSuse 10.2 .
Po przegooglowaniu kawałka świata okazało się, że skype z rpm, to se mogę w buty schować, b oi tak nie pójdzie. Trze było pokombinować inaczej. Dokładnie już nie pamiętam co i jak, ale mniej więcej żeby Skype działał trzeba zrobić tak:
Pobrać sobie skype jakiś tam 'static', czyli:
wget http://www.skype.com/go/getskype-linux-static
Potem jak się zassa, to trza by to wypakować:
tar -jxf skype_static-1.4.0.118.tar.bz2
No i fajnie jest skype, jak wpiszemy w konsoli ./skype to... no właśnie, to wielkie g... - coś krzyczy, że czegoś tam sobie nie ma.
Żeby skype banglał na naszym 64-bitowym OpenSuse 10.2 trzeba mu dociągnąć cosik z 32 bitow. Generalnie sprawa wygląda tak, że ściągamy libsigc++2-2.0.17-32.i586.rpm:
wget http://ftp.gwdg.de/pub/opensuse/distribution/10.2/repo/oss/suse/i586/libsigc++2-2.0.17-32.i586.rpm
Potem trza by przejść na root'a, żeby móc zrobić to, co za chwilę zrobimy:
su
mc

Tak, to słynny legendarny Midnight Commander. Jest on nam potrzebny, bo ma pewny 'ficzer', o który w innych programikach dość ciężko w dzisiejszych czasach - umożliwia łażenie po rpm'ach tak, jakby to były katalogi. Przyda się nam to, bo musimy cosik wyciągnąć ze ściągniętego przed chwilą rpm'a.
Wchodzimy za pomocą mc do libsigc++2-2.0.17-32.i586.rpm -> CONTENTS.cpio -> opt -> gnome -> lib Jak używasz KDE, to się nie przejmuj, ja też, ale mimo wszystko używamy katalogu 'gnome'. Z katalogu, do którego przed chwilą weszliśmy kopiujemy libsigc-2.0.so.0 oraz libsigc-2.0.so.0.0.0 do katalogu /lib w naszym systemie.
Po skopiowaniu zamykamy mc (klawisz F10). Następnie wpisujemy exit żeby wrócić z root'a na naszego 'normalnego' usera.
Wpisujemy w konsolkę ./skype & i... powinno banglać.
Piszę, że powinno, bo nie mam pojęcia, czy u Ciebie zadziała czy nie. U mnie pomogło, u kolegi też, więc jest duża szansa, że i Tobie pomoże, jeśli masz kłopoty ze Skype'm.
Jeśli chodzi o mnie, to do używania Skype'a u mnie jeszcze daleko z dwóch powodów, a mianowicie dodupnej jakości czy raczej głośności dźwięku oraz jeszcze bardziej dodupnego dostawcy internetu, u którego padu-padu nawet potrafi przymulać (poza przymulaniem własnym).
Gdyby ktoś miał jakieś pytania/uwagi/cokolwiek, to pisać w komentarzach, może przejdzie moderację ;)

sobota, 29 września 2007

Koniec z goleniem nóg!

No tak... w końcu stało się to, co prędzej, czy później stać się musiało.
Zanim posądzicie mnie o jakieś skłonności trans czy coś, przeczytajcie o co chodzi z tym goleniem nóg :)
No ale może od początku... albo nie... od końca, o!
Krótko mówiąc w końcu zmieniam pracę!
Zaczęło się niewinnie. Numer telefonu od kogoś do kogoś (niestety publicznie nie mogę zdradzić, bo obiecałem), jeden dzień wolnego akurat w pracy, więc poszedłem na rozmowę nazwijmy to kwalifikacyjną. Pogadaliśmy na luzie i usłyszałem Zadzwonię do ciebie w poniedziałek. Niczego nie podejrzewając siedziałem wczoraj w byłej (heh, jak to fajnie brzmi) pracy. No właśnie.... Siedziałem... ale o tym za chwilę.
Zamiast dzwonić w poniedziałek zadzwonili już w piątek z informacją Od poniedziałku zapraszamy do pracy. Odpowiedziałem więc, że będę, tylko muszę iść powiedzieć do widzenia szefowej. Tak też zrobiłem. Nie wiem do końca co sobie o mnie myślała, ale mimo wszystko miło chociaż ostatniego dnia pracy dowiedzieć się, że władzy na mnie zależało.
Siedziałem, bo taka to praca była. I nie to, żeby siedzieć przy kompie i zajmować się programowaniem czy czymkolwiek użytecznym, tylko praca jako tzw. zapchaj dziurę, a konkretnie siedziałem na recepcji i to nie pierwszy raz, bo nie ma komu tak siedzieć(sic!). I właśnie stąd taki temat wpisu, bo nie mając innego wyjścia zwyczajnie naśmiewałem się sam z siebie, że stanowisko zobowiązuje i muszę golić nogi :D
Dużo by pisać i opowiadać o tamtej byłej pracy i rzeczach, które tam musiałem robić, ale wolę zapomnieć. Pewnie nie będzie łatwo, powróci nie raz w koszmarach wraz ze wszystkowiedzącym i upartym prawie tak bardzo jak ja Zorrem (wtajemniczeni z lekką znajomością hiszpańskiego wiedzią o co biega ;) ).
Póki co zostawiam to wszystko w spokoju i pewnie tak już pozostanie. Póki co czekam jeszcze na wypłatę za wrzesień, więc spokój może przerodzić się w niemałą i niemiłą (już nie dla mnie) wojnę, ale to tylko ostateczność w postaci obrony przez atak ;) Taki już jestem, że jak mi ktoś nadepnie na odcisk, to po trupach, ale udupię. No ale może nie będę musiał się użerać :]
Co będzie dalej się zobaczy. Jednego jestem niemal pewien, że ani przez moment nie pożałuję tego kroku.
Teraz będę pracował bliżej, od poniedziałku do piątku po 8 godzin, wolne weekendy, urlop (normalnie szok! co to znaczy "urlop"?), zwrot kosztów dojazdu, itp. ale przede wszystkim będę robił to, co lubię, czym się interesuję i to, w czym chcę się dalej rozwijać.
Co z tego wszystkiego wyniknie dowiem się już wkrótce.
Póki co kończę wywód, bo nic mi się już dziś nie chce. Znowu zaczęło się jeżdżenie w weekendy na parodię uczelni.

p.s. Dziękuję wszystkim normalnym z tamtej roboty. Fajnie czasami było ponabijać się z pozostałych - cholernych tchórzy, dupowłazów i kablarzy.

niedziela, 29 lipca 2007

Kashub Geek za 3625 dolców?!?

Hmm... idąc za linkiem na wykopie zrobiłem sobie teścik.
Pytanka wypełniałem uczciwie i wyszło mi oto coś takiego:
50% Geek
Tylko kto mi powie co to oznacza? Czy 50% Geek to dobrze, czy źle?
Myślę, że ciężko tak po prostu to stwierdzić po jednym "badaniu".
Ale mam plan. Wypełnię sobie ten teścik raz jeszcze, na przykład za kilka miesięcy. Wtedy zobaczymy jak zmienia się moja "Geekowatość" :D
Tylko żeby się nie okazało, że jest już za późno... 0_o

//edit
Widzę, że stronka ma kilka ciekawych testów. Nie wiem czy to, co napiszę nie okaże się dla mnie zagrożeniem, ale wyszło mi, że martwy jestem warty $3625 :
$3625.00The Cadaver Calculator - Find out how much your body is worth. From Mingle2 - Free Online Dating

sobota, 21 lipca 2007

Sposób programisty na blokowanie reklam

Wszystkich nas denerwują natrętne i wszędzie obecne reklamy na stronach internetowych.
Osoby mniej cierpliwe starają się je blokować na różne sposoby, np. używając tworzonych do tego celu programów czy też plug-in'ów do przeglądarek.
Nie wszyscy jednak wiedzą, że istnieje jeszcze sposób, który polega na wskazaniu systemowi operacyjnemu, że w przypadku, gdy przeglądarka łączy się z jakimś adresem (np. z serwerem reklam), to ma zamiast tego łączyć się z wybranym innych adresem. Najczęściej jest to przekierowanie tych wywołań na adres własnego komputera, czyli na adres 127.0.0.1, czyli inaczej localhost.
Blokowanie reklam tym sposobem odbywa się poprzez dopisanie znanych serwerów do pliku hosts w systemie operacyjnym. W porządnych systemach operacyjnych lokalizacja tego pliku to /etc/hosts. W Windows 98 jest to domyślnie c:\windows\hosts, w Windows XP oraz Viście - c:\WINDOWS\system32\drivers\etc\hosts. W tym czymś ostatnim, to AFAIK nie da się tak po prostu mieszać w omawianym pliku, ale tutaj jest na to sposób.
Struktura pliku jest bardzo prosta. W pierwszej kolumnie wpisujemy adres ip, na który mamy zostać przekierowani przy odwołaniu do serwera, którego nazwa podana jest w kolumnie drugiej. Przykładowy wpis wygląda następująco:

127.0.0.1 pagead2.googlesyndication.com
Dzięki dodaniu tej jednej linijki do naszego pliku hosts nie będziemy już na przykład zmuszeni do oglądania reklam z Google'a.
Jak się zapewne domyślasz wystarczy dodać inne serwery z reklamami do naszego pliku hosts i jesteśmy wolni od reklam. Pojawia się tylko pytanie Skąd wziąć te wszystkie adresy, albo choćby większość z nich? Czy trzeba je samemu śledzić i wpisywać ręcznie? Spokojnie, nie trzeba. Można sobie pobrać stąd lub wykorzystać ten, którego ja używam (tu wielkie dzięki dla Vip'a).
No dobra. Mamy adresy, wszystko niby ok, już nie ściągamy znikąd reklam, tylko kierujemy na swój komputer. Ale co dalej? Mi osobiście nie podobał się ani komunikat o błędzie, że nie można załadować strony ani też po odpaleniu Apache'a ładowanie domyślnej stronki z localhost'a.
Postanowiłem wykorzystać moc wirtualnych hostów w Apache'u.
Najpierw do httpd.conf dodałem nowego wirtualnego hosta, na który chciałem przekierowywać wszystko, co mi plik hosts wyłapuje. W sekcji odpowiedzialnej za hosty wirtualne dodałem tych kilka linijek. Oznaczają one tyle, że w katalogu /mnt/lin2/web/v/localhost...
    DocumentRoot /mnt/lin2/web/v/localhost
...mam sobie plik index.php, który jest zarówno domyślnym plikiem, jak również plikiem, który jest wykonywany w przypadku, gdy żądanego obiektu nie można odnaleźć na serwerze:
    DirectoryIndex index.php
ErrorDocument 404 /index.php
Zdecydowana większość wyświetleń będzie się opierać właśnie na błędzie 404.
OK, po restarcie Apache'a doszliśmy więc do tego, że jak chce się gdzieś pokazać reklama, to się nie pokaże, tylko odwoła mi się do pliku /mnt/lin2/web/v/localhost/index.php.
To niestety jeszcze nie wszystko. Jeśli chodzi o jakieś iframe'y, to można by w pliku index.php napisać po prostu [spam] i to by wystarczyło. Dla mnie to jednak za mało.
Chcę, żeby mój skrypt:
  • działał dla
    • stron html,
    • zdjęć, animacji i obrazków,
    • skryptów JavaScript
  • posiadał funkcjonalność, która pozwoli mi określić jaki element został właśnie zablokowany, aby wiedzieć jaki adres usunąć z pliku hosts na wypadek gdyby nie podobało mi się to, że zablokował dany element.

Przechodzimy więc do naszego pliczku index.php.
Aby wiedzieć czego dotyczy dane żądanie i co zostało zablokowane używamy:
$req = $_SERVER['REQUEST_URI'];
Samo to nie wystarczy, bo musimy jeszcze wiedzieć jaki adres odblokować w hosts. Pełną ścieżkę wraz z nazwą serwera pobieramy więc za pomocą:
$full_path = $_SERVER['HTTP_HOST'] . $req;
Mamy już pełny adres pod zmienną
$full_path
. Przechodzimy więc do części właściwej - wypisania w miejscu, gdzie miała być jakaś reklama napisu [SPAM] wraz z pełną ścieżką żądanego elementu. Jeśli zablokowany element to strona HTML, to wystarczy kawałek kodu (już z kolorowaniem):
<div style="width: 98%; height: 98%; overflow: auto;
background-color: #fee; color: #f00;
font-family: courier; font-size: 14px;"
>
[SPAM] <?php echo $full_path; ?>
</div>
Jeśli gdzieś był jakiś iframe z blokowaną przez nas reklamą, to zamiast owej reklamy zobaczymy przewijane okienko z jasnoczerwonym tłem i czerwonym napisem z adresem zablokowanego elementu. Proste? Proste!
Przejdźmy teraz do skryptów JavaScript. Tu sprawa nieco się komplikuje. Najpierw sprawdźmy, czy adres żądanego elementu kończy się na .js:
if (eregi('^(.)+(js)$', $req))
Teraz musimy wypisać nasz komunikat za pomocą JavaScriptu na stronie, która ten skrypt wywołała:
document.write('<span style="overflow: auto;
background-color: #fee; color: #f00;
font-family: courier; font-size: 14px;">'
+
'[SPAM]<?php echo htmlspecialchars($full_path) ?></span>');
Żeby przeglądarki wiedziały, że mają do czynienia ze skryptem JS musimy jeszcze przed wysłaniem w/w treści wpisać:
header('Content-type: text/javascript');

Wszystko niby ładnie i pięknie, jednak w testach się okazało, że tak generowany skrypt nie działa, czyli nie wypisuje treści w referującym dokumencie. Po chwili zastanowienia znalazłem gada. Błąd polegał na tym, że jeśli element nie istnieje (a na ogół nie istnieje), to serwer www wysyła nagłówek 404, który informuje przeglądarki, że tego, co otrzyma za chwilę nie ma interpretować jako skrypt, bo coś nie poszło. Rozwiązaniem jest dodanie przed w/w linią poniższego kodu:
header('HTTP/1.1 200 OK');
Dzięki temu przeglądarka uzna, że plik skryptu istnieje i poprawnie go wykona.
Pozostało nam teraz napisanie kodu, który będzie się wykonywał w przypadku, gdy blokujemy jakiś obrazek. Najpierw sprawdźmy, czy żądany element jest obrazem (na podstawie rozszerzenia oczywiście):
if (eregi('^(.)+(jpg|png|gif|jpeg|svg|bmp)$', $req))
Informujemy przeglądarkę, że będziemy wysyłać np. GIF'a:
header('Content-type: image/gif');
Tworzymy tego GIF'a o wysokości np. 20 px i szerokości równej ilości liter w adresie żądanego elementu razy 10 px + 30 px na napis [SPAM]:
$obrazek = ImageCreate(10*strlen($full_path)+30,20);
Teraz na obrazku piszemy znany już nad pełny adres żądanego elementu:
ImageString($obrazek,4,3,2,'[SPAM] ' .
htmlspecialchars($full_path),$kolor_tekstu);
I na koniec wysyłamy spreparowany obrazek do przeglądarki:
ImageGif($obrazek);

No i to wszystko!
Troszkę pisania, ale bynajmniej nie muszę oglądać reklam, szybciej ładują mi się strony i widzę co zablokowałem na wypadek, gdybym jednak chciał gdzieś tam coś obejrzeć :]
Osoby, którym się nie chce pisać podaję kod źródłowy pliku odpowiedzialnego za przechwytywanie reklam ze stron internetowych. Może nie jest to kod idealny, pewnie można go i ulepszyć i przyspieszyć, dodać obsługę np. flash'a, napisać w OOP, itp, ale podaję go tylko jako przykład i jeden ze sposobów na natrętne reklamy na stronach www.
Na zakończenie screen z zasypanej na ogół reklamami stronki przy użyciu opisanej metody ich blokowania:

poniedziałek, 21 maja 2007

Czego to Wy u mnie nie szukacie?

Przeglądałem sobie ostatnio statystyki oglądalności mojego bloga. Niby nic specjalnego, ale moją uwagę zwróciły frazy wpisywane w wyszukiwarki, które powodowały znalezienie tej właśnie strony. O ile frazy takie jak Kashub, generator napisów czy bezpłatne domeny są jak najbardziej właściwe, to pojawiło się też kilka innych, które spowodowały, że postanowiłem o nich właśnie napisać.
Oto niektóre frazy, które mnie zainteresowały wraz z krótkimi komentarzami z mojej strony:

  • generator muzyki na bloga - hmm... nigdy nie miałem i podejrzewam, że nie będe miał takich "ficzerów" na żadnej z moich stronek. Nie wiem też jak mógłbym pomóc temu poszukiwaczowi,
  • zdjęcie zlewki - widać jakiś amator fotografii innych niż wszystkie. Jedyne, co mogę na to poradzić, to poszukanie w wyszukiwarce obrazów Google, bo nie wiem o jakie zlewki akurat chodziło,
  • po co są ferie? - a no po to, żeby sobie odpocząć od belfrów a niby po co mają być? Mimo wszystko wcześniej u mnie takiej informacji nie było,
  • co to jest zatoka? - myślę, że tu najlepiej pomoże hasło z Wikipedii,
  • kluby dla wyższych sfer - hmm... tu się poddaję, bo w takowych nie bywam i nie pomogę nic w tym temacie,
  • animowane żołnierze - tu też raczej nic nie pomogę. Mogę jedynie odesłać do animowanych wygaszaczy na komórkę. Może się poszczęści i znajdzie się tam jakiś animowany żołnierzyk,
  • wolne miejsca w wojsku - heh, nie wiedziałem, że ktoś jest zainteresowany tym tematem, bo u mnie to co chwilę się wojsko samo upomina. Mam wrażenie, że oni to rekrutację prowadzą na okrągło ;),
  • programista php z bydgoszczy szuka pracy - i co ja Ci chłopie na to poradzę? Sam bym se popracował jako programista, a nie jako tzw. "zapchaj dziurę" (oficjalnie, to niby informatyk),
  • szukam pracy maszynista pkp - no tu, to już wcale nie pomogę. Proponuję poszukać na jakichś stronach PKP, bo u mnie nie znajdziesz. Akurat maszynisty nie potrzebuję. Coś widać wszyscy roboty jakiejś szukają,
  • pkp dzwonek - nie wiem jak osoba szukająca takich dzwonków wyobraża sobie jego brzmienie, bo ja to sobie wyobrazić za bardzo nie mogę. Zamiast tego mogę polecić dzwonki polifoniczne,
  • skm ze szczecina do gdyni - myślę, że nasza SKM aż takiej ekspansji terytorialnej nie prowadzi, ale może ktoś ma nowsze informacje na ten temat. Osobiście uważam, że jeśli ma to być tak szybka kolej jak teraz, to taki przejazd ze Szczecina do Gdyni można by śmiało podpiąć pod wycieczkę krajoznawczą. Przy tej prędkości można obejrzeć dosłownie wszystko, co znajduje się na trasie przejazdu,
  • misie pkp - ta fraza też mnie ładnie zaskoczyła. Nie wiem czy chodzi komuś o maskotkę czy o co? Temu Poszukiwaczowi mogę polecić zajrzenie na tę stronę. Można tam sobie zamówić misia w koszulce z dowolnym nadrukiem,
  • nieletnie za free - no, no... takie rzeczy to tylko... nie tutaj. Na pewno nie nieletnie. Osobom dorosłym mogę polecić jedynie ostre filmiki na komórkę,
  • mama jak se wsadzić w dupe kija - nie wiem... po prostu nie wiem co poradzić osobie, która szukała odpowiedzi na takie pytanie. Tak na chłopski rozum, to myślę, że kija trzeba wziąć, przyłożyć do otworu w dupie i po prostu energicznie popchnąć. Nie gwarantuję skuteczności, bo nie próbowałem tego robić ani nie mam zamiaru,
  • gruchy oraz polskie pietruchy - sprzedaży warzyw przez internet niestety nie prowadzę ani też nie wiem gdzie można by takie towary nabyć. Proponuje w sposób tradycyjny wybrać się po warzywka na jakiś bazar, lub do marketu w ramach niedzielnych spacerów z rodziną (ponoć tak teraz jest modnie),
  • grzegosz szefka blog - no przepraszam bardzo. do tego, że w moim nazwisku często mylą literkę f z w (pisząc Szewka) to już przywykłem, ale jak można napisać grzegosz??? Czy to aż takie egzotyczne imię, żeby takiego byka w pisowni strzelić???
  • wielki napis przepraszam - wychodząc na przeciw oczekiwań czytelników tego bloga (chłyt martetindowy), specjalnie dla osoby, która szukała wielki napis "przepraszam" (większy nie mogę, bo mi się blog rozjedzie ;P):

    PRZEPRASZAM

Jak widać ludzie różne rzeczy wpisują w szukarki. Niejednokrotnie trafiają nie tam, gdzie pewnie by chcieli, co widać po tych kilku nietrafionych keywords'ach. Jestem też przekonany, że pisząc tego posta spowoduję więcej tego typu odwiedzin. Mimo tego nie mogłem się powstrzymać i musiałem się pochwalić co to Wy u mnie byście chcieli zobaczyć ;)
Pozdrawiam serdecznie zagorzałych Poszukiwaczy [~]o

sobota, 12 maja 2007

Google nie zna granic Europy!

Od jakiegoś czasu Google chwali się, że ich statystyki się zmieniają, będzie nowy layout, funkcjonalność, itp.
Ostatnio wprowadzili sporo widocznych zmian. Oczywiście skorzystałem z możliwości wykorzystania tej nowej funkcjonalności. Kiedy jednak zobaczyłem sobie mapkę z geolokalizacją odwiedzających witrynę to przeżegnałem się lewą nogą. Oto jak taki gigant jak Google zna granice naszego kontynentu:



Napisałem do nich wczoraj do południa, ale nic (bynajmniej na razie) to nie dało. Jedyne, co otrzymałem to odpowiedź z automatu w stylu "Dzięki, że chcesz ulepszyć Google".
Mnie w podstawówce uczono nieco innych granic, chyba, że Google planuje jakąś grubszą akcję i chcą te granice przesunąć tak, aby im pasowały.
Mapki pozostawiam bez komentarza, bo po prostu brak mi na to słów.

czwartek, 10 maja 2007

Prawie jak uczelnia

Może i nie trzeba, może nie wypada, może mi za to dowalą... dłużej nie mogę tego trzymać, bo szlag to już mnie trafił dawno, a to, co mnie strzela teraz to nawet do napisania przeze mnie się nie nadaje.
Studiuję sobie na Wydziale Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej. Już od samego początku jakieś jaja się działy, bo legitymację to dostałem prawie 2 miesiące od rozpoczęcia studiów jako powód słysząc Proszę zrozumieć, że to nie tak hop-siup!.
Prawdziwy rozpierdziel pojawił się jednak w okolicach sesji. Nie, nie chodzi o to, co zawsze, że egzaminy, że sesja, że zaliczenia, że nauka, itp. Z tym akurat nie było większych kłopotów (tym razem). Zaliczenie poszło mi gładko. Egzaminy miałem 3. i 4. Lutego, wyniki - po maksymalnie tygodniu.
I tu zaczęło się piekło.
Jak wiadomo po egzaminach trzeba do psorka po wpis i oddać indeks z autografami do dziekanatu. Niby nic strasznego, gdyby nie to, że to wydział ETI na PG:

  • Najpierw problem był z uzyskaniem swojego indeksu, bo Jednak musi pan donieść to, tamto, albo może coś jeszcze. Na początku roku celowo spytałem czy będą jeszcze potrzebować jakieś papiery ode mnie. Wtedy usłyszałem, że to wszystko
  • jak już dostałęm indeks to problem był aby dorwać w weekendy wykładowców. Skoro studiujemy zaocznie, to chyba logiczne, że wypadało by umożliwić nam uzyskanie wpisów w weekendy. W dziekanacie Pani podsumowała, że wykładowcy nie będą przyjeżdżać w weekendy żeby jakieś wpisy dawać, bo nikt im za to nie zapłaci. Proszę sobie przyjść w tygodniu. Oczywiście nie można było się dowiedzieć w dziekanacie kiedy można by zastać poszczególnych wykładowców
  • jako, że dojazd na tę "uczelnię" zajmuje mi min. 2 godz. zostawiłem mój indeks koledze z Gdańska. Co chwilę chodził z naszymi indeksami z nadzieją, że kogokolwiek zastanie. Tu również okazało się, że w sekretariatach wykładowców jest równie "dobra" organizacja co na całym wydziale. Bo co oznacza zapis Sekretariat czynny w poniedziałkie w godz. 800 - 12000, skoro w poniedziałki około godziny 10-11 było zawsze i tak zamknięte?
  • jak już się udało w pewnym sekretariacie zostawić indeks (bo tak se wymyślili, że wpisu nie dadzą, tylko trzeba dla każdego psora w jego sekretariacie zostawić) to się okazało przy odbiorze po kilku dniach, że Nie ma pana indeksu i nie wiem co się z nim stało
  • znowu dziekanat. chyba jeszcze nie wspomniałem, że dla wszystkich zaocznych na tym wydziale jest jedna Pani w dziekanacie, która pracuje tylko w soboty po kilka godzinek. Dopchanie się do dziekanatu też na ogół graniczyło z cudem. No ale się dostałem, mówię, że z sekretariatu prof. XYZ ktoś mi zawinął indeks. i co? Doznałem szoku. Dostałem jeszcze opierdziel po co pana indeks leży w moim dziekanacie, skoro nie pan wszystkich wpisów?
  • wszystko było by może jeszcze do zniesienia, gdyby nie to, że mamy prawie kolejną sesję, a ja nadal nie mam wpisów. I tak dużo, że za którymś razem udało mi się otrzymać pieczątkę w legitymacji studenckiej. Gdyby nie to, to bileciki droższe (przez miesiąc i tak musiałem jeździć na "całym". Pieczątkę dostałem po tym, jak księgowa w pracy mi powiedziała: jako, że nie ma pan podbitej legitymacji studenckiej, trzeba będzie panu potrącić składki, jakieś 300 złotych. Wtedy trafił mnie szlag i powiedziałem, że nie wyjdę z dziekanatu póki nie dostanę pieczątki.

Legitymację mam, wpisów - dalej nie. Brakuje jeden... w weekendy pani profesor nie ma, w tygodniu może będzie. Niedługo znów sesja... Dla mnie koszmar. I nie mówię tutaj bynajmniej o trudności egzaminów czy sporej ilości nauki. Ogarnia mnie tylko lęk, że od czerwca czy lipca do końca roku kalendarzowego będę zmuszony użerać się z tymi wszystkimi na uczelni, żeby dostać jakieś autografy do indeksu. Żenada.
Na zakończenie fotka (sorrki za jakoś, ale telefonem robiłem) Wydziału Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej (to w tle oczywiście, ale widoki takie mamy dookoła):