Dodano 05 KWI 2008 roku o godzinie 23:25:58
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ć.
Dodano 04 KWI 2008 roku o godzinie 07:40:20
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ł ;-)
Dodano 13 LUT 2008 roku o godzinie 22:25:32
Mała ciekawostka (może znana i suchar), wyświetlić po przecinku dwa zera. Pewien koleś uczepił się mnie o to i koniecznie chciał, żeby cena była wyświetlana z dwoma cyframi po przecinku (nawet jeśli to były zera). Okazało się, że to jest dość dziwny problem.
Załóżmy, że mamy cyfrę 1.00. Po jej wyświetleniu zobaczymy jedynie "1". Rzutowanie tej wartości do string [ (string)(1.00) ], skutkuje tym samym. Ponieważ nie chciało mi się myśleć, ani szukać zrobiłem troszkę naokoło. Do tej cyfry dodałem 0.001, a później przy użyciu funkcji substr wyciąłem tą ostatnią cyfrę i nagle PHP wyświetla dwa zera po przecinku! Całość wygląda, mniej więcej, tak:
<?php
$a = 1.00;
$a += 0.001;
$a = substr($a, 0, -1);
echo $a;
// Propozycja Jan'a IMHO lepsza ;p
echo sprintf("%.2f", $a);
?>
Czasami ten język faktycznie bywa dziwny, albo to ja coraz bardziej dziwaczeję... o0
Dodano 23 GRU 2007 roku o godzinie 13:07:25
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
Dodano 20 PAŹ 2007 roku o godzinie 15:42:17
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...
Dodano 23 WRZ 2007 roku o godzinie 23:35:20
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
Dodano 23 WRZ 2007 roku o godzinie 01:20:48
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.
Dodano 02 WRZ 2007 roku o godzinie 13:11:16
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.
Dodano 07 CZE 2007 roku o godzinie 10:43:23
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.
Dodano 04 CZE 2007 roku o godzinie 13:02:36
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.
Dodano 18 MAJ 2007 roku o godzinie 23:08:06
Robiłem sobie dzisiaj szablon. Wszystko wypas, działa pod IE, FF i prawie pod Operą. Dlaczego prawie? Wyświetlane wszystko jest ok. Ale, coś pod nagłówkiem nie mogę kliknąć, na żaden z elementów formularza. Ba, gdy przewinę stronę w dół, a potem z powrotem do góry to część tego tekstu co jest pod nagłówkiem znika :)
Ale to jeszcze pikuś. Gdy na tej stronie odpalę skryptozakładkę, która robi obwódkę wokół DIVa to wtedy magicznie mogę korzystać z całego formularza. O dziwo te ramki pokazują mi, że wysokość jednego z DIVów jest nienaturalnie duża. Jutro zbadam ten problem, może wtedy znajdę rozwiązanie :)
Dodano 18 MAJ 2007 roku o godzinie 15:14:58
Mam do wykonania parę zadań. Jedno z nich to napisanie funkcji/procedury w MySQL. Jak dla mnie to jest (a właściwie była) czarna magia. Troszkę czasu na to przeznaczyłem i okazało się, że takie coś wcale nie jest straszne ;-]
Podobnie jak PHP, C++, Java i masa innych języków programowania ma procedury i/lub funkcje. Jak wiadomo mogą one posłużyć do wielu różnych rzeczy. W MySQL można je wykorzystać aby zwiększyć bezpieczeństwo. Zapisana funkcja/procedura może być bez problemu wywołana z poziomu PHP, ponieważ wystarczy wysłać zapytanie do bazy będące wywołaniem funkcji/procedury. W dalszej części postaram się nieco opisać te dwie rzeczy.
Dodano 02 KWI 2007 roku o godzinie 18:28:57
Cała sprawa wyszła przy okazji organizowania mojej muzyki. Wprawdzie znalazłem program (Amarok, a dokładniej Amarok + Amarok Web Fronted), który w 100% mnie satysfakcjonuje, problemem okazały się uprawnienia do plików.
W moim katalogu z muzyką jest masa plików. Okazuje się, że nie wszystkie miały jednakowe uprawnienia i nie zawsze mogłem zapisywać w nich poprawione tagi ID3v1.
Nie chciało mi się za każdym razem edytować od nowa kolejnych chmodów dla każdego mp3, dlatego odpaliłem program chmod z parametrem -R, ale szybko żałowałem tej decyzji. Wprawdzie pliki miały dobry chmod (taki jaki chciałem, czyli 644) to nie miałem dostępu do katalogów.
Zależało mi na tym, aby każdy katalog, w folderze z muzyką, otrzymał chmoda 755, a każdy plik 644. Przyszła decyzja o napisaniu skryptu, który by rozwiązał mój problem.
Dodano 29 MAR 2007 roku o godzinie 23:18:53
Raz na stronie zlecenia.przez.net znalazłem zlecenie dotyczące stworzenia skryptu, który generuje formularz na podstawie struktury tabeli MySQL. Pomyślałem sobie, że to zadanie jest czymś ciekawym dla mnie i w wolnej chwili postanowiłem napisać prosty (a właściwie prowizoryczny) skrypt, który by wykonywał takie zadanie.
Dodano 26 MAR 2007 roku o godzinie 21:06:58
Pamiętacie jeszcze tą sympatyczną sówkę? Jeszcze całkiem niedawno była tak powszechnie wykorzystywana na różnych kanałach IRCowych i nie tylko.
Cały czas jej różne wersje budzą u mnie taki łagodny uśmiech ;-]
Dodano 17 MAR 2007 roku o godzinie 23:13:10
Kiedyś widziałem takie różne fajne ficzery na stronach, które pokazywały czy serwer jest online czy offline. Niektórzy próbowali użycie JS, inni mieli swoje sposoby. Ja dzisiaj sobie o tym przypomniałem i postanowiłem przedstawić swój sposób wykorzystujący CSS.
Dodano 12 MAR 2007 roku o godzinie 18:09:29
Dodano 06 MAR 2007 roku o godzinie 14:12:33
Edie przeszedł kolejną fazę ewolucji. Tym razem jest bogatszy o kilka nowych funkcji.
Przypominam, że Edie jest jabberowym chat botem. Wystarczy, że się do niego zalogujesz i możesz rozmawiać z innymi zalogowanymi. Można powiedzieć, że to jest taka konferencja jabberowa, tylko że nie musimy się martwić tym czy posiadamy obsługę konferencji jabberowych.
Jak masz ochotę pogadać to tutaj masz JID'a Ediego: edi@uaznia.net
Dodano 05 MAR 2007 roku o godzinie 19:21:06
ScoreParser.php to klasa napisana w PHP5 na zlecenie pewnej osoby. W jaki sposób działa? Mamy plik XML z wynikami. Klasa ma za odczytywać/dodawać wyniki. Jeśli chodzi o dodawanie, to jeśli wynik jest lepszy (lub równy) od najgorszego to ten ostatni jest wywalany. W dalszej części krótki opis i link do kodu.
Dodano 01 MAR 2007 roku o godzinie 23:39:11
Tak jak wcześniej obiecałem daję linka do kodu źródłowego Jabberowego Chat bota - Ediego.