Miniblog: Jak sobie poradzić z negatywnymi uczuciami?

Z tego co zrozumiałem to recepta Buddyzmu na tego typu problem jest prosta: "do not feed the troll". Prawda, że łatwe? Problem w tym, że często jest tak, że nie można odpuścić takim trollom emocjonalnym.

Miniblog: Rozstanie, a pocieszenia

Wiele osób chciało mnie w jakiś sposób pocieszać. Czy to na łamach tego bloga, czy podczas zwykłej rozmowy. Zazwyczaj słowa otuchy były do siebie podobne. "To minie", "Czas leczy rany", "Wszystkie kobiety to kurwy są", "Będzie dobrze" itd.

Zabrakło mi słów w rodzaju: "ciesz się tym co było, wykorzystaj to w przyszłości". Myślę, że będę takie słowa kierować innym w podobnej sytuacji. Powód jest prosty. Świadome wykorzystanie doświadczeń z poprzedniego związku może wpłynąć na "jakość" kolejnego. Wiem z autopsji.

Miniblog: Rodzinna tradycja

A może zobowiązanie? W każdym bądź razie dowiedziałem się, że moi rodzice i rodzeństwo mieli ślub w przedziale wiekowym 21-22 lata. Z tego wynika, że mnie również pozostał niecały rok na to aby dopełnić rodzinnej tradycji. Ktoś chętny aby mi w tym pomóc?

Najwyraźniej Twoja przeglądarka ma problemy z obsługą podstawowych znaczników CSS3. Możliwe, że z tego powodu coś może wyglądać beznadziejnie ;-)

PS. Czas zmienić przeglądarkę na coś bliższego nowym standardom.

PHP: przezabawny sposób na wyskakiwanie z if'a

10 lutego 2010

Gdzieś na php.net znalazłem zabawny sposób na to jak wyskoczyć z if'a :).

Niestety nie wkleję kodu bezpośrednio tutaj, coś GESHI mnie nie lubi. Swoją drogą, od wersji 5.3 PHP oferuje możliwość użycia goto :D

Miniblog: programiści nie potrafią programować

Kategorie
17 stycznia 2010

Natknąłem się dzisiaj na artykuł "Dlaczego programiści nie potrafią.. programować?". Uwierzcie lub nie, ale ludzie podczas rozmowy kwalifikacyjnej w naszej firmie naprawdę mieli problem z rozgryzieniem tego jak zrobić pętlę FizzBuzz.

Miniblog: JsZen

24 listopada 2009

Na Joggerze wspomniano już czym jest ZenCoding. Jakoś nie potrzebuję odpowiedniego pluginu do mojego IDE. Pomyślałem sobie za to, że fajnie by było gdyby mieć takie coś co by generowało elementy po stronie JavaScript.

Okazało się, że coś takiego istnieje, ciągle jest rozwijane i zapowiada się naprawdę fajnie :) Ten skrypt zdecydowanie może przyspieszyć tworzenie dynamicznych elementów strony.

Czysto poglądowo zrobiłem klona z repo, kodziwo możecie zobaczyć na: radmen.info/jszen.

Nie zapominaj o RSS autodiscovery!

27 października 2009

Przeglądając sobie stare śmieci trafiłem na adres do stronki Minds.pl. Pomyślałem sobie, że może warto będzie śledzić ich kanał RSS. Patrzę sobie na pasek adresu i nie widzę znajomej mi ikonki. Pobieżnie przeglądam witrynę, również nie znalazłem nic co by przypominało ikonkę kanału RSS. Zrezygnowany chciałem już opuszczać witrynę, gdy nagle udało mi się odnaleźć to co poszukiwałem. Potrzebowałem na to ok. minuty, co w zasadzie oznacza, że poświęciłem sporo czasu na odnalezienie tylko jednej rzeczy!

Normalnie to ZU po prostu opuściłby przeglądaną witrynę. Pomyśleć, że wystarczyłoby dodać RSS Autodiscovery i byłby jeden problem mniej.

Pamiętaj, jeśli już robisz kanały RSS/Atom to nie zapomnij również o tej jakże przydatnej rzeczy. Zdecydowanie zwiększy użyteczność i zwiększy zapewne oglądalność (o ile użytkownik będzie śledził feedy).

AdBlock potrafi zirytować

15 października 2009

Osobiście uważam, że AdBlock jest jednym z najlepszych rozszerzeń dostępnych dla Firefoksa. Świat bez reklam jest milszy. Niestety nie zawsze. Okazało się, że podczas pisania kolejnego frontendu, oraz przy pracach nad Just Proto AdBlock sporo namieszał. Zaczęły znikać poszczególne boksy, lub całe grafiki (nawet z tła). Zanim wpadliśmy na to co jest przyczyną stracono sporo czasu.

Najczęściej jest to wina omyłkowego nazwania elementów, lub plików. Robiąc zaślepkę, która w nazwie ma frazę "_300x250" ryzykuję, że jej nie ujrzę. Podobnie może się stać nadając boksom z ogłoszeniem nazwę typu "Ad". Pamiętaj, gdy ze stroną dzieją się cuda, upewnij się, czy to przypadkiem nie jest zasługa AdBlocka.

Obrazkowy bruteforce

Kategorie
06 października 2009

Wczoraj uświadomiłem sobie, że skoro piksel (w bitmapach 24-bitowych) przyjmuje wartości R,G i B z zakresu 0-255, to istnieje 256^3 (czyli 16 777 216) kombinacji jednego piksela. Bitpama 2-megapikselowa zawiera 1600x1200=1 920 000 pikseli, czyli istnieje (256^3)^1920000 => (((2^8)^3)^1920000) => 2 ^ 46080000 kombinacji bitmap dwumegapikselowych...

Przypuścmy, że istnieje komputer kwantowy, który wygenerowałby wszystkie 2 ^ 46 080 000 kombinacje takowych bitmap Jakie zdjęcia znalazłyby się w tej "bazie"? Każde Np. każda chwila z Twojego życia widziana z każdej możliwej kamery, dodatkowo na każdym możliwym tle, z kiełbasą, drukarką, papieżem i kartonie po mleku na pierwszym planie...

Ty z 23 nogami, Ty uprawiający seks ze zwierzętami, Ty siędzący w tej chwili przed komputerem czytający ten wątek, najpiekniejsze zdjęcie na świecie, zdjęcia z nieodkrytych planet, zdjęcia nieistniejących marsjaninów z tobą w tle jedzącym słonecznik i to wszystko w różnych poziomach zaszumienia od wysokiego/niskiego ISO oraz wiele wiele innych ciekawych zdjęć A te "sensowne" zdjęcia to mikroskopijna część tych wszystkich 2 ^ 46 080 000, bo reszta to jakieś kolorowe śmieci...

Tamyl @ DigArt

Który framework PHP?

06 lipca 2009

W pracy siedzę na firmowym frameworku. W wolnej chwili chciałbym poznać jakiś inny, tak aby móc porobić coś z własnych pomysłów. Po głowie chodzą mi trzy frameworki:

  • Symfony
  • Kohana
  • CakePHP

Który z nich jest warto większej uwagi. Nie chciałbym, żeby to była kobyła pokroju Zenda. Poza tym chciałbym móc w miarę łatwo zmieniać pewne rzeczy itd. Generalnie proszę o wypowiedzenie się, dlaczego ten, a nie inny framework :)

Bruteforcowy generator wyrazów w PHP :)

13 marca 2009

Nudziłem się i machnąłem sobie taki skrypt co to za pomocą łopatologicznej metody generuje sobie wszelkie możliwe kombinacje z zakresu [a-zA-Z0-9]. Jakie efekty? Po pół godziny pracy (każde słowo wrzucałem do bazy danych) otrzymałem jakieś 30 mln rekordów. Całość zajmuje mi na dysku ponad 500Mb, a średni czas wykonania jakiegokolwiek zapytania 15 sekund wzwyż :)

Co ciekawe wszystkie wyrazy zaczynają się tylko od literki 'a', czyli przez ten czas nie wygenerowano ani jednej kombinacji typu 'bxxxxx', gdzie x jest dowolnym znakiem alfanumerycznym.

Czy warto? Raczej nie, chociaż kiedyś dobry słownik był podstawą :D. Ogólnie gdybym chciał wygenerować całość (o ile się nie mylę to liczba kombinacji to 62! * n, gdzie n to maksymalna długość) w jakiś sensowny sposób to musiałbym posiadać armię komputerów zombie i jakoś dane między nimi synchronizować.

Ogólnie całość traktuję jako ciekawostkę, kod wrzucam poniżej.

PyShredder - inny sposób na kasowanie plików

Kategorie
01 marca 2009

Ostatnio zastanawiałem się nad tym, czy jest jakaś inna możliwość kasowania plików, w sposób trudny do odzyskania. Metoda znana - zamazywanie sektorów. Ja natomiast pomyślałem o czymś innym - zamazanie zawartości pliku. Konkretniej mówiąc kilkukrotne nadpisanie jego zawartości po czym skasowanie.

Ot pomysł trywialny. Skoro myśl prosta, to i pewnie metoda odzyskania pliku po takiej zabawie również. Nie byłem pewien jak to wygląda, także spytałem się po prostu na pewnym forum. Z uzyskanej odpowiedzi od "Hash Frau" wynika, że ta metoda wbrew pozorom jest całkiem skuteczna (wcale nie, ssie :D). Pomimo tzw. księgowania plików, odzyskanie pliku po nadpisaniu jest dość trudne, wręcz niemożliwe.

Ps, sprostowanie. Metoda jest słaba. W takim razie zdejmuję to z techbloga, natomiast napisany niżej skrypt pozostawiam do Waszej oceny :)

Pomówmy o prototypowaniu

28 stycznia 2009

Pracując jako programista nie raz, nie dwa musiałem się zmierzyć z tym co klient ma na myśli. Niestety specyfikacja nie oddaje tego jak w rzeczywistości dane funkcjonalności mają się prezentować. Sprawia to sporo problemów. Przede wszystkim konieczność wprowadzania masy poprawek z tego względu, że wyobrażenie klienta było zupełnie inne od wizji programisty.

Jest pewna metoda, która może skutecznie pomóc w poprawieniu tworzenia aplikacji oraz uniknąć wprowadzania zbędnych (a czasami czasochłonnych) poprawek. Ów metoda to, wspomniane w tytule, prototypowanie.

Prototypy pozwalają urzeczywistnić wizję tego jak poszczególne funkcjonalności, a zarazem cała aplikacja mają wyglądać. Pozwalają klientowi w początkowej fazie na ustawienie wszystkiego zgodnie z tym jak chce, a w późniejszych etapach ułatwiają stworzenie serwisu.

Miałem okazję tworzyć serwis zgodnie z wytycznymi dostarczonymi w prototypie. Muszę przyznać, że dostarczony prototyp okazał się niesamowicie pomocny i zdecydowanie przyspieszył stworzenie aplikacji z bardzo prostego powodu - uniknięcia zbędnych pytań oraz tworzenia kolejnych poprawek.

Zmiany na blogu

14 grudnia 2008

Po raz 150 przyszła mi ochota zmienić wygląd bloga. Koncepcji było kilka. Od okienek, oraz czymś na wzór filemanagera notek, po coś ascetycznego. Niestety poprzednie dwie wersje miały szaleć z JavaScriptem przez co po ich skończeniu uznałem je za brzydkie. W końcu doszedłem do tego, żeby zrobić coś naprawdę prostego.

Chwila szukania na deviantart.com i znalazłem odpowiednią grafikę (co ciekawe, tylko dwa obrazki :P ) i jakoś to sobie umieściłem. Nie ma żadnego JSa, w 100% CSS. Poza tym stwierdziłem, że nie będę się sugerował z kompatybilnością na przeglądarki słabe. Stąd też wykorzystuję składnię CSS3, a przeglądarki które jej nie obsługują mają problem. Tak, wiem że efekt wspaniały nie jest i można spokojnie zadbać o kompatybilność.

Tak się składa, że na moim blogu nie muszę się tym przejmować. Nie widzę sensu oglądać się ciągle do tyłu za tworami typu IE6. Nie działa to trudno, postaram się żeby chodziło sprawnie pod tymi przeglądarkami, które mają implementacje CSS3.

Lista rzeczy, których nie zrobiłem, a zamierzam wprowadzić:

  • stronicowanie, niestety nie ma jeszcze guziczków "wstecz" i "do przodu"
  • specjalnie dla IE - warstwę zakrywającą całego bloga, z poleceniem ściągnięcia czegoś ludzkiego
  • poprawki w stylach, w tym zmiana nieaktywnych linków

Więcej do głowy mi nie przychodzi, w razie czego zgłaszać.

Python ShoutPlayer ver 0.0.1 pre-alpha

05 kwietnia 2008

W ramach poznawania nauki Pythona postanowiłem zrobić bajer zaczerpnięty z mojej pracy. Właściwie żadna rewelacja, ot zwykłe odtwarzanie strumienia audio (z tzw. Shoutcastów), które co 30 minut zmienia strumień odtwarzania.

Już wcześniej wspominałem o tym, że mam problemy z zaciągnięciem jakiejś fajnej biblioteki, która może bezproblemowo odtwarzać dźwięk. Męczyłem się chwilę z PyMedia, ale tak szczerze mówiąc to program był jedną wielką rosyjską ruletką. Albo nie chciał się połączyć, albo to losowanie feedów i późniejsze ich odpalanie totalnie nawalało. Zdarzało się też tak, że wylosowany feed odtwarzał się dopiero po kolejnym losowaniu.. Niestety błedu nie znalazłem, dlatego na chwilę obecną postanowiłem zrobić małą prowizorkę.

Obecna wersja ma zaimplementowaną klasę, która pobiera listę serwerów (póki co tylko pliki z rozszerzeniem "pls", najlepiej dociągać z shoutcast.com), pobiera plik listy i kopiuje wszystkie adresy serwerów. Później następuje losowanie jednego adresu i przekazanie go jako parametru do programu "mpg123". Niestety na chwilę obecną to jest jedyna implementacja dźwięku jaka dość bezboleśnie przeszła. Niestety kurs obsługi GStreamera w Pythonie spalił w przedbiegach - okazuje się, że wtyczka za bardzo nie rozpoznaje parametru "alsasink". Trudno, później zagłębię się w tym.

Jak się łatwo domyśleć, będzie nam potrzebny program "mpg123" i chyba tylko tyle. Nie jestem pewien co do rozszerzeń samego Pythona. Aplikacja odtwarzająca dźwięk jest pakowana w tło, a jej PID jest zapisywany do pliku. Gdy nastąpi czas zmiany URLa program zostaje zabity, a po wylosowaniu kolejnego feed'u ponownie odpalony. Póki co czas zmiany serwerów to 5 minut (można to zmienić w pliku play.py). Lista serwerów znajduje się w pliku "stations_list". Przy okazji można zobaczyć jak mniej więcej to powinno wyglądać.

Poszukuję guru Pythona

04 kwietnia 2008

Czy znalazłby się ktoś z Jogga, kto zna Pythona i miał styczność z obsługą MP3? Robię taki malutki projekt (dzisiaj już przedstawię wersję 0.0.1 pre-alpha nightly build) i jest mi potrzebna sprawna obsługa plików mp3 (a właściwie strumieni z shoutcasta). Znalazłem bibliotekę PyMedia, ale tak naprawdę to wkomponowanie playera z jej przykładów jest masakryczne. Gdyby ktoś był chętny to dajcie w komentarzach znać, wieczorem bym się odezwał ;-)

Without JS it's nothing!

23 grudnia 2007

Niesamowity jest fakt, że dopiero po zainstalowaniu wtyczki NoScript można zauważyć jak wiele stron kuleje (ba często nawet się nie wyświetla) gdy JS jest wyłączone.

Smutne jest to, że wielu designerów opiera całą funkcjonalność strony na JSie, a bez niego nie ma jej nawet widać (przykładowo http://fabryka.pl/), nie muszę chyba mówić, że strony w całości wykonane w flashu są równie kiepskie...

PS. wiem, że nie odkryłem niczego nowego ;p

Krótka myśl odnosnie kodu źródłowego

20 października 2007

Brak wcięć to zło, wcięcia w kodzie, ale nie właściwe to jeszcze większe zło...

Właśnie skoczyłem usuwanie wcięć kodzie HTML szablonu bo jakiś jełop robił wcięcia kompletnie na odwrót i lepiej, żeby w ogóle ich nie robił...

Logiczny wydaje się taki układ:

[blok]
        [blok2]
                cos
        [/blok2]
        [blok3]
                [blok4]
                        cos
                [/blok4]
        [/blok3]
[/blok]

Proste i czytelne. A co powiecie o czymś takim:

[blok]
        [blok2]
                [blok3]
        cos
        [/blok3] [/blok2]
        [blok4]
                cos
                [/blok4]
[/blok]

Może to nic, ale naprawdę wkurza...

jQuery - usuwanie obiektów

Kategorie
23 września 2007

Robiąc szablon, napotkałem jeden problem. Notki minibloga, które były wyświetlane na pływającej warstwie, były przysłaniane przez <object>(konkretniej filmy z YT). Chciałem w jakiś sposób pozbyć się ich na stronie głównej, w sposób podobny do tego na głównej joggera - zastąpienie obiektu napisem.

Przy wykorzystaniu jQuery, to żaden problem. Wystarczy napisanie jednego łańcucha. Założenie jest takie -> znajdujemy wszystkie <object>-> przechodzimy do rodzica -> tam zostawiamy odpowiedni tekst -> kasujemy <object>.

Całość wygląda tak:

$("object").parent().append("<i>[Obiekt]</i>").end().remove();

Muszę przyznać, że dzięki jQuery wykorzystanie JS'a staje się dla mnie przyjemnością :-)

PS. Riddle twierdzi, że powinno może być tak:

$('object').after('<i>[Obiekt]</i>').remove();

:-P

Akordeon

23 września 2007

Przyznam się, że nie wiedziałem jak nazwać tą notkę także wybaczcie mi to ;-) Chciałem napisać (specjalnie na prośbę Grzegorza Piechuły ;-] ) sposób w jaki przedstawione są u mnie notatki z minibloga.

Cel jaki chcemy osiągnąć to warstwa (w niej będzie treść notek), która zwija się i rozwija. Poza tym zrobimy tak, że gdy jedna notka będzie rozwinięta, a chcemy zobaczyć drugą to ta pierwsza posłusznie się zwinie, a dopiero później pokaże się druga.

Kurs PHP-GTK cz. 2

02 września 2007

Już minęło sporo czasu od pojawienia się pierwszej części kursu PHP-GTK. Chciałem mocno przeprosić za to, że musieliście czekać, niestety w sporej mierze to wina mojego lenistwa...

Dzisiaj zajmiemy się czymś bardziej skomplikowanym. Stworzymy formularz logowania, który pokaże komunikat błędu jeśli wpiszemy złe hasło/login.

Status serwera wykorzystując CSS - podejście drugie

07 czerwca 2007

Tym razem będzie krótka notka. Dawniej pisałem o tym jak za pomocą CSS można wyświetlać status serwera (czyli to czy jest offline, czy też online). Niedawno przyszedł mi do głowy nieco inny sposób na wykorzystanie CSSa do tego celu.

Kurs PHP-GTK cz.1

04 czerwca 2007

PHP-GTK to rozszerzenie PHP stworzone przez Andrieja Zmiewskiego pozwalające używać popularnej biblioteki GTK+ służącej do tworzenia graficznych interfejsów użytkownika na podstawie zestawu dostępnych widgetów (kontrolek). Programy korzystające z PHP-GTK wyróżniają się łatwością i szybkością napisania.

via Wikipedia

Już od dawna chciałem chociaż troszkę poznać to rozszerzenie. Trochę to potrwało zanim cokolwiek się dowiedziałem. Aktualnie sam poznaję PHP-GTK, ale mogę już opisać pewne "podstawy podstaw". Ten kurs proszę traktujcie raczej jako wolne tłumaczenie kolejnego z rozdziałów tutoriala znajdującego się na stronie projektu.