Developerzy PHP, projektując “nową” implementację OOP (nową w cudzysłowiu, bo raz że to było już kilka lat temu, a dwa, że dotyczy tylko i wyłącznie samego PHP), dość mocno wzorowali się na Javie. Czy to dobrze czy to źle to kwestia gustu, jednak wynika z tego kilka znaczących drobiazgów. Jednym z nich jest jednodziedziczenie (czyli że jedna klasa w PHP może mieć tylko jedną klasę bazową). Od zawsze uważałem to za dużą niewygodę ;) Jak widać, nie tylko ja.

Padła propozycja dołączenia systemu “Cech” (ang. Traits) do PHP (podejrzewam że do wersji 6, ale to tylko moje zgadywanie – w każdym bądź razie są gotowe łatki m.in. do 5.2 i 5.3). Do czego służą Traitsy? W sumie… do obejście problemu jednodziedziczenia, czyli do wprowadzenia wielodziedziczenia.

Trzeba pamiętać, że ten mechanizm został podobno (nie sprawdzałem osobiście) sportowany także do Javy i C#, natomiast nie istnieje jeszcze ofiacjalna wersja dla PHP. Sam “wygląd” kodu, słowa kluczowe etc nie są jeszcze ustalone, ale to tylko szczegóły.

Szczegóły są dostępne w oficjalnym RFC: stefan-marr.de/artikel/rfc-traits-for-php.html. Ja tylko powiem, że da się często obejść niedogodność wynikajacą z braku wielodziedziczenia, ale problem leży właśnie w konieczności obchodzenia braków w języku (tak, wiem, to akurat jedna z typowych wojen wyższości jednych świąt nad drugimi ;) ale to akurat moje zdanie ;) ). Prostszym wyjściem byłoby wprowadzenie po prostu możliwości posiadania kilku klas bazowych, ale w to nie wnikam. Ja ogólnie jestem na tak.


Już od jakiegoś czasu używałem TrueCrypta, do przechowywania dość wrażliwych danych. Niedawno wyszła wersja 5.0, więc trzeba było się przesiąść ;) Jakkolwiek pierwsze odczucie nie było zbyt pozytywne, o tyle później już mniej więcej wróciło do normy.

Domyślnie, TrueCrypt dla linuksa potrafi sformatować nowy wolumen tylko jako FAT32. Można to nieco obejść, samemu formatując wolumen, a w oknie wyboru typu systemu plików, wybrać None (cały proces tworzenia wolumenu wraz ze zrzutami obrazów na jarzebski.pl). Następnie trzeba zamontować stworzony wolumen, ale zaznaczając opcję w oknie dialogowym ‘Do not mount’. Teraz pozostaje sformatować urządzenie loopbackowe (w moim przypdku było to /dev/loop0 – można podejrzeć wynik polecenia mount) na wybrany system plików (ext3 w moim wypadku), odmontować, zamontować ponownie już bindując pod wybrany katalog, i zacząć używać tak stworzonego wolumenu.

Problemy także występują przy próbie użycia kluczy. Jeśli wybrałem dowolny klucz (klucze teraz działają nieco inaczej niż w poprzedniej wersji TrueCrypta – do wersji 4.3 były generowane przez sam program, w tej chwili wskazuje mu się dowolną ilość plików i te pliki są traktowane jako klucze) przy tworzeniu wolumenu, to nie dało się podmontować go – krzyczał że niewłaściwy klucz. Okazało się, że klucze zostały olane, i montować trzeba bez nich ;) Za to po dodaniu kluczy do już stworzonego wolumenu wszystko działa jak powinno.

Od długiego czasu używałem swojego skryptu do montowania zaszyfrowanych wolumenów TrueCrypta. Oczywiście, jako zatwardziały zwolennik konsoli, działa on w trybie tekstowym :) Mam stworzony mały pliczek mapujący konkretną nazwę (alias) na plik zaszyfrowanego wolumenu, klucz użyty do zaszyfrowania go, i katalog pod który należy podmontować wolumen. Tutaj wyszedł problem – po każdym wywołaniu truecrypta z wybranymi opcjami, otwierało mi się okienko GUIowe i kazało klikać :/ Tutaj pomogło dodanie parametru -t do wywołania TrueCrypta.

Pozostał jeszcze jeden kłopot. Teoretycznie, nie można pod linuksem stworzyć “ukrytego wolumenu” – na etapie tworzenia wyskakuje monit “The selected feature is currently not supported on your platform.”. Więc, niech mi ktoś wyjaśni, dlaczego po próbie zamontowania zaszyfrowanego pliku w trybie tekstowym, dostaję jeszcze pytanie o włączenie ochrony ukrytego wolumenu? :/ I nie da się tego wyłączyć (OK, ja nie znalazłem, jeśli komuś się udało to proszę o info).

No dobra, powyżej skłamałem. Obeszłem problem brzydkim hackiem – w swoim skrypcie po prostu pobieram hasło samodzielnie, a następnie przekazuję je do odpowiednio wywołanej instancji TrueCrypta poprzez STDIN. Brzydkie, brudne, i źle działa przy błędnie wpisanym haśle, ale to akurat szczegół. Ważne że chwilowo działa…

To by było na tyle moich bojów z nową wersją programu. Zainteresowanych tematem odsyłam do dwóch artykułów:

  • wspomniany wcześniej artykuł na jarzebski.pl
  • bardzo ciekawy artykuł na temat starszej wersji TrueCrypta na jakilinux.org

Stwierdziłem niedawno, że brakuje mi w Vimie takiego drobiazgu jak wyświetlanie listy funkcji z edytowanego właśnie pliku. Można z jednej strony wykorzystać ctags, ale (pewien nie jestem, nie jestem znawcą tagsów ani ich obsługi w Vimie) po dodaniu funkcji/metody/czegokolwiek innego co można by nazwać tagiem trzeba by od nowa generować listę tagów. Nie jest to problemem takim bardzo dużym, do momentu gdy ciągle pracuje się nad różnymi projektami, z czego sporej części nie mam na dysku (tylko wykorzystując plugin netrw pracuję via ftp). W tym momencie moja znajomość systemu ctags podpowiada mi że robi się ciężko…

Postanowiłem więc napisać sobie prosty skrypt do tego, a że język wewnętrzny Vima mnie nieco odrzuca, postawiłem na Pythona ;) Żeby jakikolwiek skrypt pythona (jak ktoś lubi, można użyć też np perla) mógł zadziałać w Vimie, ten ostatni musi być skompilowany z jego obsługą. W Ubuntu wystarczy zainstalować pakiet vim-full. Łatwo sprawdzić czy Vim ma wkompilowaną obsługę pythona:

Przejdź do reszty tego wpisu »


Słyszeliście historyjkę, jak to kot wskoczył na klawiaturę, wklepując losowe znaki, a Larry stwierdził że to musi dać “Hello world” ? Znalazł się spec który odtworzył ten ciąg znaków:

perl -e 's^^i6(!@*^+s;\*; Wo\$_\;~;.s![(_\!]!l!g+y"i\$@"Hro"+tr-6;~-ed\012-;print'

Ja leżę i kwiczę :)

Źródło: goldenline.pl/forum/perl/127239


Przeniosłem na razie bloga (i w sumie nie tylko) z Dreamhosta, z którego radośnie rezygnuję, na home.pl. Przenosiny odbyły się z problemami, konkretnie dwoma:

  1. nie mogłem się zalogować do panelu administracyjnego WordPressa
  2. spi… się kodowanie

Problemy naprawione, a dla potomności:

Problem pierwszy: problem z zalogowaniem się. Problemu by nie było, gdybym zostawił dokładnie taki sam prefix tabel jaki był na dreamhoście. Niestety, wpadłem na pomysł zmiany prefiksu, i tu się wszystko rozjechało. Trzeba było poza aktualizacją pliku wp-config.php (która była oczywista) zaktualizować także zawartośc tabel PREFIX_options i PREFIX_users, zmieniając nazwom opcji prefiksy ze starego (u mnie np wp_opcja) na nowy (w moim przypadku byłoby to coś na kształt urzeniawp_opcja). Bez tego wyświetla się w kółko komunikat że nie mam uprawnień do zobaczenia żadnej strony w panelu…

Problem drugi: kodowanie. Nie udało mi się tutaj zrobić żadnej sztuczki, żadnego prostego zabiegu, nic. W końcu po prostu na dumpie z bazy danych wykonałem szereg operacji podstawiania ‘krzaczków’ na odpowiadające im litery. Zmienionego dumpa wrzuciłem z powrotem do bazy, do tego dodałem opcję (mój plik konfiguracyjny ma kilka lat) DB_CHARSET do pliku konfiguracyjnego, i zaczęło działać poprawnie. Porażka troszkę, ale cóż robić :(

Na tą chwilę wszystko powinno już działać OK, i to zdecydowanie szybciej – Dreamhost do demonów szybkości raczej nie należy ;) Liczę też że dużo bardziej niezawodnie ;)

Jeszcze tylko dopowiem, że przy całej walce z WordPressem na home, gdzie nie ma shella, wydatnie pomogła mi moja kolejna zabawka: wwwshell.php. Wbrew moim obawom, działa to całkiem nieźle, i gdyby nie brak historii i reakcji na enter po komendzie (tak, wiem, łatwo to naprawić zmieniając typ pola na <input type="text" />), to prawie nie byłoby różnicy ze zwykłym shellem ;)


Jako, że zbliża się koniec ważności mojego konta na DreamHost, a przedłużać go zamiaru nawet namniejszego nie mam, zaczęłem się przygotowywać do migracji. Jeszcze nie wiem gdzie pójdę sobie, ale pójdę na pewno :)

Jedną z rzeczy z tym związanych jest usunięcie mojego repo (repo.urzenia.net). Cała jego zawartość znajdzie się niedługo jako konkretne projekty na code.google.com. W sumie już wszystko przeniosłem, poza BlipApi.php, które też się tam niedługo znajdzie. Nowe adresy projektów to:

mPack
zestaw bibliotek pomocnych przy tworzeniu serwisów w PHP: m-pack.googlecode.com.
useless-scripts
kilka skryptów które wykorzystuje w mojej codziennej pracy na komputerze: useless-scripts.googlecode.com. Tutaj też dostał się mój ostatni “produkt” killer.pl.
WP Blip!
Plugin do WordPressa, wyświetlający na nim ostatnie wpisy z serwisu Blip!: wp-blip.googlecode.com.

Zrobiłem Killera ;)

Killer to skrypt w perlu który wyświetla tabelę dostępnych procesów, i pozwala wysłać dowolny sygnał (komenda kill w linuksie) do wybranych procesów. Działanie jest bardzo proste, wygląd jeszcze bardziej… Jak ktoś ma ochotę dorobić ładne cssy to jestem za tym żeby je tam dorzucić ;)

Skrypt jest do pobrania z jego strony domowej: repo.urzenia.net/Perl:Killer.


Jako że mojej kobiecie zepsuł się komputer (tzn zaczął się psuć, ale jak na karcie graficznej i na płycie głównej są ‘wypchane’ kondensatory to nie wróżę im długiego życia), trzeba było coś z tym zrobić. Stwierdziłem że nie będę się wygłupiał i rzęcha z 2k2 roku naprawiał i kombinował, szczególnie że Ani marzył się laptop. Poszliśmy i kupiliśmy laptopa.

Jako ciekawostka: model jaki wybraliśmy jest w “Nie dla idiotów” tańszy niż w większości sklepów w necie… Zdziwiłem się – choć wyboru nie miałem, musiałem kupić go w MM ;)

Wybrałem dla niej Toshibę Satellite A200 1S9. IMHO bardzo fajny sprzęt za tą cenę, dobrego i lubianego przeze mnie producenta (zawsze lubiłem laptopy Satellite).

Wybierając go zrobiłem jeden błąd, którego wystrzegałem się całe moje informatyczne “rzycie“: w laptopie jest karta ATI. O ile nie jest to problem pod Windowsem, o tyle na tym laptopie Windows będzie używany raz na kilka miesięcy. W sumie zrobiłem także drugi błąd, ale jego się nie wystrzegałem wcześniej ;) Tym drugim błędem jest to że jest tam karta sieciowa (wszędzie poniżej mówię o Wi-Fi) do której nie znalazłem działających wolnych sterowników, a ndiswrapper średnio sobie z nim radzi…

OK, wymieniłem 2 najważniejsze problemy, a poniżej sposób na poradzenie sobie z nimi.

Przejdź do reszty tego wpisu »