Odrobina zabawy z platformą Mozilla

W czasie ferii, tj. ca. miesiąc temu pozwoliłem sobie na odrobinę zabawy przy pisaniu aplikacji w oparciu o platformę Mozilli. Cel był szczytny, ponieważ potrzebowałem wygodnego narzędzia do katalogowania plików audio, a skrypt PHP już dawno przestał robić to dobrze, o konfigurowalności nie wspomnę.

Faktem jest, że takie pisanie to prawdziwe RAD - nie mając dotąd żadnych większych doświadczeń z XUL-em, w ciągu jakichś 3 dni złożyłem coś, co działa, mało tego - działa tak jak chciałem ;-)

screenshot z MkCtl

Aplikacja o wdzięcznej nazwie MkCtl produkuje listing podkatalogów katalogu o podanej ścieżce (nawet jest przycisk Przeglądaj), rozbija nazwy wg zdefiniowanych filtrów i zapisuje ów listing w formacie CSV. Do szczęścia brakuje jednak kilku ficzerów, np. otwierania katalogu wskazanego na liście (bez wklepywania ręcznie ścieżki), listy wyświetlanej jako xulowe tree, jakiegoś menu kontekstowego, focusu na button Odśwież etc. W międzyczasie pojawił się pomysł przeniesienia bazy zbiorów muzycznych z Excela (odpalanie tego za każdym razem nie jest wygodne, szczególnie zaś nie było, kiedy pod Linuksem używałem OpenOffice) do bazy danych o interfejsie webowym. Zapewne będzie to baza SQLite na moim domowym Apache'u, co przy okazji uczyni ją dostępną również poza domem. No chyba że przypadkiem wyłączę komputer... Wtedy też chciałbym zastanowić się nad sprzężeniem aplikacji bezpośrednio z bazą.

Reasumując, polecam tę zabawę każdemu, kto miałby ochotę szybko i wygodnie zmajstrować jakąś prostą aplikację, a szczególnie jeśli mamy doświadczenie (no, moje było raczej mocno przeciętne :P) z JavaScriptem i XML-em. Jako runtime może służyć XULRunner (jak w moim przypadku), choć jeśli ktoś ma odrobinę cierpliwości, zawsze może wyprodukować sobie rozszerzenie dla Firefoksa. Sam mam teraz różne większe plany padające w tym kierunku, ale co i kiedy, jeśli w ogóle, z nich wyjdzie to się jeszcze okaże.

Bug #36307 - Status: Closed

Bug #36307 na bugs.php.net, który pozwoliłem sobie parę dni temu zgłosić - zamknięty. Bynajmniej nie odkryłem jakiegoś super błędu, który uratuje świat przed ekspansją ASP itp. - ot, drobny bug w dokumentacji. Ale miło wiedzieć, że ktoś to chociaż przeczytał...

Notabene, trochę czasu przez tę cholerę straciłem. I po raz kolejny się przekonałem, że dobrze jest zaglądać na angielską wersją manuala PHP... a może i w ogóle zrezygnować z PL.

O IE słów kolejnych kilka

Jaki jest IE, każdy widzi, generalnie rozpisywać się nad jego doskonałością i nowoczesnym enginem nie zamierzam. Chciałem tylko wspomnieć o dwóch właściwościach IE, które niedawno (bądź trochę dawniej) mnie zdziebko zaskoczyły i sprawiły nieco problemów.

#1: formularz się nie wysyła

czyli wysyła się, a jakoby się nie wysłał ;-) Problem pojawia się, gdy zamiast, jak na dobrego internautę przystało, kliknąć w <input type="submit" /> dokonamy aktu wysłania formularza poprzez klawisz ENTER. Nie wysyła się wtedy pole przypisane do buttona (czyli z <input type="submit" name="dupa" value="wielka" /> w $_POST nie wyląduje $_POST['dupa']), co potrafia sprawić problemy. Swego czasu właśnie za pomocą jakiejś tam wartości z submita sprawdzałem, czy formularz wysłano (inna sprawa, że można to było zrobić inaczej) i niestety się przejechałem.

BTW jakiś czas temu czytałem o tymże problemie na jakimś forum... ale sam natrafiłem nań dużo wcześniej, więc mogę czuć się po trosze odkrywcą.

#2: uploadowany obrazek nie jest obrazkiem

Z drugim problemem miałem przyjemność stosunkowo niedawno, tj. jakiś tydzień temu. Problem polega na tym, że niektórym typom obrazków (JPG, PNG) IE nadaje typy MIME zdziebeczko inne niż reszta przeglądarek (Fx 1.5, Opera 8.5). Przez to właśnie pojawiły się problemy we wstawianiu avatarów w skrypcie, który niedawno pisałem. Konkrety:

  • JPG - w IE ma typ image/pjpeg, w pozostałych image/jpeg
  • PNG - w IE ma typ image/x-png, w pozostałych image/png

Nie wnikam w to, które typy powinny się pojawić w poprawnej implementacji (choć nie podejrzewam IE o bycie poprawniejszym od reszty), po prostu warto chyba o tym wiedzieć i pamiętać.

Nie sądzę, że odkryłem Amerykę (ani tym bardziej dwie Ameryki), ale sam na te błędy trafiłem dość późno i chwilę czasu musiałem im poświęcić. Może komuś się przyda.

mod_rewrite i jego kapryśne kaprysy

Chciałem się pobawić mod_rewrite. Miałem z nim już kiedyś różne przyjemności i jeszcze więcej nieprzyjemności, więc miałem nadzieję, że jakieś mgliste przynajmniej pojęcie o tym module mam.

Zrobiłem sobie taki .htaccess:

RewriteEngine On
#RewriteBase /

# dla tych katalogow nic nie rob (URL tak jak jest)
RewriteRule ^(feed|gfx|css|js).*$ - [last]

# dla tych rozszerzen tez nic nie rob
RewriteRule ^.*\.(gif|jpg|png|css|js)$ - [last]

# wszystko inne wrzuc do index.php
RewriteRule ^(.*) index.php?r=$1 [last]

i wyobrażałem sobie takie działanie:

  • wywołanie: http://localhost:8001/dupa/dupa2/
  • m_r myśli nad takim ciągiem: "dupa/dupa2/"
  • ciąg ten nie zaczyna się żadnym z katalogów z pierwszego RewriteRule
  • nie kończy się też żadnym z rozszerzeń z drugiego RewriteRule
  • wykonany zostaje index.php z parametrem GET r=dupa/dupa2/

Sęk w tym, że do $_GET['r'] trafiało... "index.php". Tzn. w ostatnim RewriteRule "index.php" było matchowane z ^(.*) i tam kończyła się zabawa. Dodałem zatem coś takiego:

RewriteRule ^index\.php - [last]

przed ostatnim RewriteRule i... pomogło. Tyle że ja dalej nie mam pojęcia skąd się bierze "index.php" w tymże wspomnianym stringu, ani tym bardziej nie umiem wytłumaczyć obecnego zachowania m_r - czy po przerwaniu pracy poprzez RewriteRule ^index\.php - [last] całość jest przetwarzana jeszcze raz, już bez "index.php"?

Byłbym wdzięczny za wyjaśnienie. Pytałem na dwóch forach, ale albo mnie tam bardzo nie lubią, albo to wszystko jest jakieś popieprzone ;), bowiem nikt mi nie odpowiedział.

BTW słucham właśnie Sacrified Sons z Octavarium, ostatniej płyty Dream Theater. Miodny album ;-)

Lekki redesign

Miało to być zajęcie na pół godziny (czegóż dusza nie zrobi, by nie zajmować się szkołą), zeszło jednak połtorej godziny. Miałem początkowo nadzieję, iż wystarczy podmienić CSS, nie obyło się jednak bez przepisania XHTML-a, co podkradło mi również chwilę.

W wolnej chwili (czyli jak będę znów miał się uczyć :P) dorobię stronę komentarzy i poprawię niedoróbki w tym szablonie (np. brak archiwum, który w tej chwili i tak nie przeszkadza ;-)).

Szablon sponsorowany przez Color Blender.

Moja pierwsza skryptozakładka :]

Zdarza się od czasu do czasu, że jest mi cholernie wręcz potrzebny aktualny timestamp. Najprostszym sposobem na wydobycie tegoż było, jak dotąd, napisanie skryptu <?php echo time(); ?> i odpalenie go, co jak widać nie jest ani wygodne, ani przyjemne, ani szybkie.

I z tego właśnie powodu pozwoliłem sobie dziś na napisanie bookmarkleta czy też skryptozakładki (paskudnie brzmi to spolszczenie). Mój timestamp() wpisuje czas - w formacie zgodnym z tym z PHP, czyli liczba sekund (a nie np. milisekund, jak, z tego co zauważyłem, robi stdowa w JS metoda getTime()) - w bieżący dokument (za pomocą document.write()). Dlatego sugerowałbym, jeśli ktoś oprócz mnie zamierza tego używać, otwieranie odnośnika midclickiem.

Enjoy, jeżeli komukolwiek poza mną się to przyda :]. Ja i tak jestem zadowolony, czegoś się może nauczyłem przy tej zabawie.

edit:

Wersja z prompt() - nie rozwala otwartej strony: timestamp() 0.2.

Riverside - Conceiving You

Wprawdzie nie jestem pierwszy z tym newsem, ale płytka dotarła do mnie dopiero w piątek, choć w sklepach jest już gdzieś od początków października.

Poza tym dwa z trzech kawałków na tym singlu miałem okazję usłyszeć nieco wcześniej (I Turned You Down dostępny był dla fanklubowiczów, a Conceiving You prezentował Piotr Kaczkowski), tyle że i tak będę je miał prędzej czy później, bowiem już za tydzień premiera Second Life Syndrome, drugiej w dorobku Riverside pełnej płyty.

I jak wyszedł singielek?

Osobiście mam mieszane uczucia. Dwa wymienione numery nie są złe (w końcu to Riverside!), ale też spodziewałem się czegoś ciekawszego, mniej przewidywalnego. Muszę jednak przyznać, że z każdym przesłuchaniem podobają mi się one coraz bardziej :]

Uwielbiam za to numer ostatni, The Piece Reflecting the Mental State of One of the Members of Our Band (choćby za tytuł :P), dla niego zresztą w dużej mierze kupiłem ten singiel (utworek nie znajdzie się na płycie). Taki instrumentalny, pełen polotu Riverside lubię najbardziej.

Aha, jeszcze jeden detal - płytka kosztuje 5 PLN, a członkowie fanklubu dostali ją za free (ja się nie załapałem).

Phiend

Swego czasu znajomi poprosili mnie o pomoc przy napisaniu oskryptowania strony klasowej. Co by uprościć se życie, a i żeby się czegoś nauczyć, postanowiłem skorzystać z jakiegoś frameworka. A że nie znałem ich zbyt wielu, jak również dlatego, że skrypt powstaje w PHP4, wybór padł na Phienda.

Świetna rzecz! ;-) Bardzo logiczna budowa aplikacji, prosta konfiguracja, wszystko jest dość intuicyjne. Do tego wyczerpująca dokumentacja. Wady? PHP4. Tzn. tym razem akurat jest to zaleta, ale na przyszłosć interesowałyby mnie frameworki pisane w PHP5. Brak rozwoju - ostatnia wersja pochodzi z listopada 2003. Z tego co się orientuję (zdarza mi się czytywać forum.php.pl), powstanie Phienda 2 stoi pod znakiem zapytania...

Po dość krótkim oswojeniu się z tą zabawką, pisanie aplikacji sprowadza się do stworzenia zestawu akcji... które akurat w moim projekciku szczególnie wyszukane nie są. To MVC nie jest takie głupie! ;]

Centrum Języka Włoskiego SI

Nie wiem, czy jest czym się chwalić, ale jestem z siebie całkiem zadowolony. Stronę Centrum Języka Włoskiego SI robiłem ok. 2 tygodni. Mój jest layout, jak również XHTML/CSS (ach, te <abbr />y... wyglądają cokolwieczek cyniarsko, a i znajomością rozwinięcia skrótu się można popisać :P)

Jeszcze piękniejszym jest fakt, że po wykonaniu tego zlecenia następna oferta przyszła do mnie sama... ;-) Ale zobaczymy, co z tego wyjdzie. Póki co nie chcę zapeszać.

Drobnym problemem w całej obecnej sytuacji jest czas. Szkoła, masa innych projektów (i tak połowy pewnie nie ukończę :|) plus oczywiście problemy ze zmobilizowaniem się... zamiast robić coś poważnego - co robię? Piszę bloga :P

Piotr Kaczkowski, Minimax, 18.09.2005 - wywiad z Mackiem

Gdyby kogoś miało zainteresować - właśnie uploadowałem w nieco innym celu, a nuż tu tez komuś się przyda. Fragment wczorajszego Minimaksu z radiowej Trójki, część wywiadu z Mackiem, producentem muzycznym. Część poświęcona oczywiście grupie Queen. Do pobrania tutaj.