Saturday, July 21, 2007

Psi i Pidgin - solucje

Wszystko zaczęło się gdy zażyczyłem sobie SSLa do Google Talk na Psi... Znalazłem jakieś QCA w systemie ale SSLa nie było. Dopiero w README doczytałem, że do QCA potrzebne jest QCA-TLS aby Psi łapał szyfrowanie. Jednak w systemie miałem OpenSSLa 0.9.8e ... co zrobiłem ?

[Psi]

Wywaliłem OpenSSL 0.9.8e - który miałem zainstalowany.
Skompilowałem czyste QCA [http://delta.affinix.com/download/qca/qca-1.0.tar.bz2]
Skompilowałem OpenSSL 0.9.6m [http://www.openssl.org/source/openssl-0.9.6m.tar.gz], który domyślnie zagnieździł się w /usr/local/ssl
Skompilowałem plugin QCA niezbędny do działania SSLa w Psi [http://delta.affinix.com/download/qca/qca-tls-1.0.tar.bz2]:
./configure --with-openssl-inc=/usr/local/ssl/include --with-openssl-lib=/usr/local/ssl/lib
Uruchomiłem wcześniej zainstalowane Psi. Psi obsługuje już SSLa.

[Pidgin]
Bardzo spodobał mi się Pidgin [http://pidgin.im/pidgin/home/]. Jednak na wstępie miałem z nim już problemy. Otóż po zaimportowaniu listy kontaktów z serwera Gadu-Gadu podczas wyszukiwania przez wpisywanie gdb wyrzucał jakieś błąd sprawdzającej chyba długość stringu, a po kolejnym uruchomieniu wyskakiwał błąd, że nie można czytać blist.xml, że został skopiowany do blist.xml~ i, że jest źle.

Zajrzałem więc do ~/.purple/blist.xml~ - okazało się, że jest tam moja stara lista kontaktów, tylko są w niej jakieś dziwne krzaki. Doszedłem do wniosku, że to coś z kodowanie nie tak :/ Wszedłem więc do mojego kadu i wyeksportowałem listę do pliku kontakty.txt. Jednak po zaimportowaniu Jej do pidgina nadal było źle. Metodą prób i błędów znalazłem solucję. Otworzyłem plik z eksportem kotantków z kadu (kontakty.txt) w leafpad i zapisałem go ponownie ustawiając w Zapisz jako ... kodowanie na CP1250 CR+LF jako cp1250_kontakty.txt. Po zaimportowaniu kontaktów z tak przygotowanego pliku do Pidgina krzaczki zniknęły. Jednak to nie koniec :/ Otóż pidgin błędnie koduje znaczki (u mnie w nazawach grup). Otwieramy plik (kodowany jako utf-8) ~/.purple/blist.xml, ręcznie szukamy nieprawidłowo wpisanych znaków i je poprawiamy. U mnie osobiście występowały w nazwach grup w znaczniku name="". Po wprowadzeniu poprawek zapisujemy plik na razie pod jakąś inną nazwą (u mnie n_blist.xml) kodowany jako utf-8 (wszystko można wykonać na przykład w leafpad) Zamykamy pidgina. Pidgin błędnie zapisał nazwy do pliku blist.xml jednak nasz plik n_blist.xml jest poprawiony :) podmieniamy więc plik blist.xml na nasz własny, odpalamy pidgina i cieszymy się :)

Wednesday, July 11, 2007

Ładny terminal

Najlepiej działającym u mnie terminalem jest urxvt. Udało mi siew końcu ustawić dla niego przezroczystość. Oto mój plik .Xdefaults:
URxvt.background: black
URxvt.foreground: white
URxvt.font: -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso8859-2
URxvt.scrollBar: false
URxvt.tintColor: white
URxvt.shading: 20
URxvt.inheritPixmap: true
URxvt.saveLines: 777
URxvt.geometry: 110x40
#URxvt.loginShell: true

Thursday, July 5, 2007

System kontroli wersji podstawy

Zostałem ostatnio zmuszony do używania systemu kontroli wersji. No i dobrze. Na reszcie się czegoś nowego nauczę. Bardzo dobry tutorial, poleconym mi przez Łukasza, opisuje wszystko co trzeba wiedzieć aby z niego korzystać.

Do czego używać SVNa i dlaczego używać SVNa.
1) Każda zmiana jest logowana wraz z nazwą użytkownika. Wiesz więc kto co i kiedy zmienił w kodzie.
2) Gdy okazuje się, że program nie działa możesz jednym poleceniem wrócić do poprzedniego stanu - stanu w którym działał.
3) W razie utraty plików odzyskasz je z SVNa.

To tylko kilka cech, które zauważyłem. Na pewno bardziej zaawansowani użytkownicy podali by znacznie więcej argumentów. Jednak te wystarczają aby spróbować nauczyć się choć podstaw tego narzędzia. SVN trzyma informacje o projektach w swojej bazie. Musimy wybrać sobie katalog, gdzie svn będzie trzymał swoje informacje. Powiedzmy, że dla użytkownika dziubdziub będzie to katalog svn w jego katalogu domowy. Jako użytkownik dziubdziub wydajemy polecenie:
svnadmin create --fs-type fsfs /home/dziubdziub/svn

Polecenie to stworzy "bazę danych" dla SVN a. Teraz możemy zacząć z niego korzystać. Powiedzmy, że w katalogu public_html tworzymy stronę internetowa dziubdziub. Mamy więc katalog /home/dzibdziub/public_html/dziubdziub w którym są pliki naszej strony internetowej. Jeżeli chcemy je włączyć do naszego systemu kontroli wydajemy polecenie:
svn import /home/dziubdziub/public_html/dziubdziub file:///home/dziubdziub/svn/dziubdziub -m 'Pierwszy import. (działa)'

Co właśnie zrobiliśmy. Już omawiam:

svn - uruchomiliśmy program svn
import - z opcją importowania istniejącego projektu do Jego bazy danych (drugie polecenie to zawsze import)
/home/dziubdziub/public_html/dziubdziub - projektu znajdującego się w tym katalogu
file:///home/dziubdziub/svn/dziubdziub - i zaimportować go do katalogu SVN file:///home/dziubdziub/svn/ jako dziubdziub - SVN założy sobie swój własny katalog dziubdziub i będzie w nim trzymał pliki naszego projektu.
-m "Pierwszy import. (działa)" - Każdy "import" musimy jakoś opisać. W opis wpisujemy zmiany, których dokonaliśmy, oraz możemy zaznaczyć czy coś działa, co zaczęło działać, a może coś było do dokończenia...

Kilka słów komentarza. SVN tworzy swój własny "system plików"... Po zajrzeniu do /home/dziubdziub/svn zobaczymy tylko kilka nic nie mówiących nam plików i katalogów. Aby oglądać ten system plików wydajcie polecenie:
svn ls file:///home/dziubdziub/svn/
svn ls file:///home/dziubdziub/svn/dziubdziub

Zobaczymy nasze pliki :) Istnieją też komendy svn rm, svn mkdir i kilka innych analogicznych do poleceń dostępnych w powłoce Linuksa. Jeżeli wywołamy:
svn log file:///home/dziubdziub/svn/
svn info file:///home/dziubdziub/svn/dziubdziub

Dowiemy się jakie zmiany zaszły w naszych plikach. Powinniśmy teraz wykonać checkout-a. W tym celu przejdźmy do katalogu /home/dziubdziub/public_html (katalog niżej niż projekt), zmieńmy nazwę projektowi (lub usuńmy go, ja jednak wolę zmienić nazwę i nie usuwac plików na wypadek, gdyby SVN nawalił) mv dziubdziub dziubdziub_bak. Teraz katalog dziubdziub nie istnieje. Możemy teraz wykonać checkout svn checkout file:///home/dziubdziub/svn/dziubdziub. Co się stało ? SVN przeniósł zapisane przez siebie pliki do katalogu. Została sprawdzona poprawność naszego importu i coś jeszcze :)... Otóż po wykonaniu w katalogu projektu (w każdym z katalogów) okazuje się, że znajduje się katalog .svn. Dzięki niemu nie będziemy musili podawać ścieżki przy wykonywaniu poleceń svn log, svn info. Po wykonaniu checkout a możemy edytować swoje pliki i zmieniać je, tak jak wcześniej. Kiedy dokonamy zmian i chcemy odnotować je w naszym SVN możemy najpierw sprawdzić co nasz SVN odnotował. Sprawdzamy to wchodząc do katalogu z projektem i wpisujemy komendę svn status. Odpowiednie zmiany, usunięcia, dodania będą oznaczone odpowiednimi literkami. Powiedzmy, że utworzyliśmy plik opis.txt. Wtedy svn status wyrzuci nam:
? opis.txt

Musi więc dodać go do naszego SVN svn add opis.txt:
A opis.txt

I odnotować zmiany w naszym repozytorium. svn commit -m "Plik z opisem do programu." okraszając go odpowiednim komentarzem. Ale halo halo ! Ci, którzy zamiast czytać dalej spróbują wywołać svn log stwierdzą... Nić się nie zmieniło... A no właśnie. Musimy ponownie wejść katalog niżej cd .. skasować katalog rm -fr dziubdziub i wykonać checkout. svn checkout file:///home/dziubdziub/svn/dziubdziub Pliki zostaną przywrócone a svn log pokaże kolejną zmianę. Zwrócę jeszcze tylko uwagę na pewien drobiazg. Checkout (i commit) podają na dole numerek... checkout zawsze przywróci nam ostatnio opisaną wersję programu. A co jeżeli chcielibyśmy na przykład pierwsza ? Nic prostrzego. Powiedzmy, że chcielibyśmy wersję numer 1 (musi taka istnieć, jeżeli taka nie istenieje program zwróci błąd). Ponownie kasujemy katalog dziubdziub i wykonujemy polecenie svn checkout -r 1 file:///home/dziubdziub/svn/dziubdziub i analogicznie w zależności, do jakiego stanu chcecie przywrócić swój projekt.

Checkouta robimy tylko za pierwszym razem kolejne zmiany po wykonaniu commit (wcześniej add, del itd...) wykonaujemy komendą svn up

SVNa można używać także do utrzymywania porządków w plikach systemowych - szczególnie jeżeli jest wielu adminów, którzy wprowadzają wiele zmian.

Wednesday, June 20, 2007

Gdzie jest ...

Ciemno...
Czy jesteś przy mnie ?

Cisza...

Czy jesteś przy mnie ?

Kapanie...

Czy jesteś przy mnie ?

Ptak zatrzepotał skrzydłami...

Czy jesteś przy mnie ?

"Nie ma mnie ..."

Odpowiedział delikatnie słodki, kryształowy głos...

Thursday, June 14, 2007

Klucz

Zamknąłem swoje serce na złotą kłódkę z żelaza
I obciąłem sobie obie dłonie.

Wyzierając z zardzewiałego otworu
Złoty klucz sterczy i lśni w słońcu
Niczym strzała w piersi wojownika
Groźnie łypiąca swym krwawym pióropuszem
Na pole bitwy gdzie polegli ... zwycięzcy.

Klucz czeka ...

Aż weźmiesz go w swoje dłonie
Ożywisz dotykiem śnieżnobiałego cedru i płatków róż
Nie ważne kim będziesz, choć ma swoje marzenia.
Czeka tylko na czułości uśmiechu, kroplę miłości i ...
... zaufanie

I znajdziesz tam przestraszone szczenię
skulone w kącie,
z oklapłymi uszami,
walącym ze strachu sercem i
parą wielkich zaszklonych oczu, patrzących błagalnie wprost w Twoje serce

Przytul je - ono tylko tyle potrzebuje.

Monday, May 28, 2007

Dlaczego NIE Linuks

Wciąż trwająca wojna Windows(owcy) vs Linuks(owycy) to tylko fala na morzu... a co siedzi w głębi ?

Chęci... No właśnie... na czym Ci zależy. Wielu użytkowników Windows stwierdzają "działa" i to im wystarcza. W gruncie rzeczy o to tylko chodzi i żadne argumenty w stylu "Linuks ma to to to i tamto, lepiej zarządza pamięcią, siecią, jest bezpieczniejszy ..." (i ta cała lista plusów) nic nie zmienią jeżeli gość w życiu nie miał problemu z komputerem, albo nie był on dotkliwy to po co mu Linuks, który ... nie działa ? No tak ! Bo ile razy wejdzie się na forum linuksowe, widać tylko wątki "nie działa mi", "jak zrobić żeby", "dlaczego ...", "wyskakuje mi błąd", "error", "zawiesz mi się przy..." i pierwsza myśl, która się nasuwa to "To nie działa !"... Po co komu system, w którym może robić "cuda", które wcale mu nie są potrzebne...
Użytkownicy Linuksa to pewni perfekcjoniści, puryści, ideliści, którzy lubią mieć wszystko cacy, bomba i po swojemu... Ale Polacy to społeczeństwo raczej ... leniwe :P więc po co się "męczyć" skoro DZIAŁA w Windows... Dla grafika komputerowego, dla którego Corel i Photoshop to chleb powszedni tłumaczenie się GIMPem czy WINEem to porażka... Bo przecież to działanie jest takie "wymuszone" i nie stabilne, a tutaj po prostu wygoda działania i przyzwyczajenia. W gruncie rzeczy wychowaliśmy się w większości na Windows, na programach, które w nim są i często poszukiwanie tak wygodnych aplikacji jak PSPad, eSkiMoS, Foobar czy innych oznacza przesiadkę na mniej wygodną aplikację, korzystanie z kilku z nich, albo pogodzenie się z okrojoną funkcjonalnością... no i nie pomoże, że boli.

Myślę, że na Linuksa trzeba chcieć się przesiąść. W gruncie rzeczy nie ma wielu logicznych argumentów, dla których nie należałoby używać Windows kiedy jest się szarym użytkownikiem. Windows ma wiele wygodnych mechanizmów, na których człowiek się wychował, przyzwyczajenie staje się jego drugą naturą i zmiana powoduje obniżenie wydajności jego pracy. To na czym mu zależy działa, antywirus jak coś nie gra zgłosi co trzeba, firewall popyta o aplikacje i czuje się bezpiecznie... więc po co mu coś więcej ?

Linuks nie jest dla wszystkich i dla wielu użytkowników Windows to znaczenie leprze rozwiązanie, czasem z przyzwyczajenia, czasem z wygody, innym razem z powodu dostępnego oprogramowania... I denerwujące "aktulizacje" Windows... są denerwujące tylko dlatego, że zmusić do nich to jedyna metoda Microsoftu aby zadbać o bezpieczeństwo systemu LENIWYCH użytkowników, gdzie każdy świadomy użytkownik Linuks zadba o to sam... :) Więc nie narzekajmy tylko głowa do góry i czyńmy nasze aplikacje dla Linuksa jeszcze bardziej użytecznymi :) aby był to system, na który na prawdę warto się przesiąść.

Monday, May 21, 2007

Kilka słów o instalowaniu ze źródeł

Czasami naprawdę trzeba zainstalować coś ze źródeł. Po prostu nie ma naszego kochanego programu w żadnym repozytorium i nie pozostaje nam nic innego. Jest kilka rzeczy, które mogą nam pomóc, jeżeli wcześniej zwrócimy na nie uwagę.

Źródła rozpakowuje się zazwyczaj:
tar -xf nasz-program-10.tar.gz
a czasami jeżeli spakowane są bz2
bunzip2 nasz-program.tar.gz.bz2
tar -xf nasz-program-10.tar.gz
Po wypakowaniu źródeł zazwyczaj powstaje katalog nasz-program. Po wejściu do niego koniecznie przeczytaj pliki INSTALL i README. To bardzo dużo ułatwia. Często programy używają innych bibliotek, które ktoś już opracował i na ich podstawie budują swoją funkcjonalność. Zamiast denerwować się, że coś się nie kompiluje sprawdź najpierw te dwa pliki (jak są inne wyglądające podejrzanie, których nazwy napisane są wielkimi literami też je sprawdź). Użyteczna przydaje się komenda:
vim INSTALL README -p
która otwiera nam nasze pliki w zakładkach, po których możemy poruszać się [gt] (jak go tab). Przeczesz stronę internetową, FAQ, manual, dokumentację (część z instalacją), aby zanim wykonasz pierwszy krok być pewnym, że w systemie jest już wszystko co jest niezbędne do działania tej aplikacji. Warto jest jeszcze zweryfikować czego możemy od programu oczekiwać, z jakimi opcjami kompiluje się domyślnie, jakich brakuje. Po lekturze ./configure --help | less lektura tego help-a jest niezbędna aby dopasować funkcjonalnośc programu (co ma obsługiwać co nie, jakich bibliotek się spodziewać jakich nie, czy ma korzystać z ALSA czy z JACKa itd...) Oczywiście możesz próbować robić podchody w stylu:
updateos -i brakująca-biblioteka
a jak nie znajdzie:
updateos -f brakująca-biblioteka
Czasami jednak trzeba wpisać nazwę biblioteki w googlach, z dodatkiem home page,albo bez i ściągnąć ją i kompilować ze źródeł. Po katalogu ze źródłami warto się jeszcze rozejrzeć po plikach konfiguracyjnych aplikacji, themah i innych gadżetach (pliki konfiguracyjne, themy i skróty klawiszowe znalazłem na przykład w źródłach MOCa). Później zaczynamy ./configure (będąc w katalogu ze źródłami). Programik sprawdza sobie biblioteki dostępne w systemie i patrzy czy są te przez niego wymagane. Jeżeli instalowałeś jakieś biblioteki do systemu (potrzebne do aplikacji) to aby system je "zobaczył", czy łyknął warto dla pewności po ich instalacji, a przed kompilacją źródeł programu wydać polecenie ldconfig. Configure może czegoś nie znaleść. niektóre biblioteki jeżeli nie zostaną znalezione nie spowodują błędu. Program je po prostu pominie, kosztem mniejszej funkcjonalności programu. Aby dowiedzieć się co dokładnie w trawie piszczy możemy wydać polecenie ./configure --help | less i z bliska przyjrzeć się co możemy sobie w programie "włączyć" lub wyłączyć. Często bywa tak że configure albo make generuje jakieś błędy przy jakiejś nazwie. Po przejrzeniu
./configure --help | less widzimy gdzieś tą nazwę a obok nie coś w stylu --disable-to_cos_co_nas_nie_lubi albo --to_cos_co_nas_nie_lubi=no albo --to_cos_...=disable. Wydanie polecenia ./configure --disable-cos. Spowoduje, że do programu nie zostanie włączona obsługa tego czegoś, nie zostanie to wogóle wzięte pod uwagę, program skompiluje się z mniejszą funkcjonalnością, ale w 90% przypadków w ogóle tego nie odczujemy :) bo programy pisane są tak, że jedną rzecz robią na 10 różnych sposobów i jak nie jednym to drugim. Często aby program skompilować pod nasze potrzeby albo pod nasz system piszemy spory tasiemiec: ./configure --disbale-options --enable-gtk --disable-qt [...] --prefix=/usr. No właśnie opcja prefix powoduje, że przed każdym katalogiem do którego będzie kopiowany plik (przed jego nazwą) dopisywane jest /usr. Co to znaczy ? Domyślnie prefix ustawiony jest na /usr/local (chyba, że w programie albo INSTALL albo README albo gdzie indziej jest napisane inaczej). I jak będziesz miał binarki tego progamu to znajdą się one w /usr/local/bin, zasoby w /usr/local/share. Mi to nawet pasuje i wszystko co nie pochodzi z systemu ładuję właśnie tam, wiem przynajmniej gdzie szukać plików w /usr/local. Jednak możesz chcieć władować to do /usr (bin, share itd...). Wtedy dajesz --prefix=/usr i wsio. Po ./configure kiedy system wie co jest i czego nie ma a dzięki temu wie jak skompilowac program tak aby się skompilował robimy polecenie make. To jest kompilacja źródeł. Czasami dopiero tutaj okazuje się, że biblioteki są w złej wersji albo coś nie działa. Możemy znowu instalować biblioteki, aktualizować je albo brutalnie wycinać przez przełączniki przy ./configure. Kiedy make już przejdzie mamy dwie opcje. Albo pokopiować pliki, które właśnie się utworzyły do systemu na łyso przez make install, albo zrobić paczkę. Make install wymaga uprawnień dostępu do katalogów systemowych a więc tu, należy wydać polecenie su i dopiero make install. Pokopiuje on pliki do katalogów i wsio. Wszystkie poprzednie czynności należy wykonywać z uprawnieniami zwykłego użytkownika ponieważ gdyby w kodzie źródłowym był jakiś wirus zadziała on z bardzo ograniczonymi uprawnieniami a nie uprawnieniami superużytkownika. make install ma pewną wadę - otóż, nie działa On jak paczka. Dzisiaj Linuxy mają swój system paczek. Make install nic nikomu nie mówi, gdzie i czy coś skopiowało. Tylko ono wie, że coś się działo. Jedynym sposobem aby potem odinstalować taki program jest zachować sobie katalog, w którym wszystko kompilujemy i w momencie chęci odinstalowania wejść do niego i wydać polecenie Jednak jeżeli katalog ten skasujemy czeka nas ponowna kompilacja z poprzednio ustawionymi flagami i po kolejnym zainstlowaniu do czasu kiedy jeszcze istnieją źródła wydanie natychmiast po tym komendy make uninstall. Jednak istnieje narzędzie checkinstall które pozwala robić paczki. W Kasi paczuszkę slackową (czyli nawet dość pasującą do naszych potrzeb) możemy zrobić wykonując zamiast make install checkinstall -S. Jeżeli nie chcemy być pytani o drobiazgi, i robimy paczkę tylko na chwilkę, aby ją zainstalować możemy kazać programowi stworzyć podstawową dokumentację i odpowiedzieć na pytania twierdząco poprzez checkinstall -S --nodoc -y. Po tym zabiegu powstanie ładna paczuszka tgz, która po pkg -i nasz-program.tgz zarejestruje się w systemie i pozwoli ładnie usunąć przez pkg -r nasz-program, a my źródła kompilacji będziemy mogli wyrzucić do kosza. Ma to jeszcze jeden plus. Możemy za w czasu podejrzeć paczuszkę i sprawdzić gdzie po kopiują się nam pliki i w razie czego prze konfigurować i skompilować ponownie program z innym, bardziej odpowiadającym nam prefiksem. Jeżeli dużo mieszamy ze źródłami, przerwaliśmy make-a bo zapomnieliśmy o dodanie do configure jakiś drobiazgów i przy tym zaczynają się dziać jakieś niespodziewane rzeczy, błędy możemy wyczyścić wszystko co do tej pory pozostawiło po kompilacji swoje pozostałości przez wydanie polecenie make clean co spowoduje, że zaczniemy kompilację od zera.

Jeżeli chcesz wyjść do sklepu i mieć po powrocie działający programik w systemie możesz łączyć polecenia w sprytne łańcuszki. na przykład:
./configure && make && checkinstall -S --nodoc -y && pkg -i nasza-paczka.tgz


Wracasz do domu, terminal zaśmiecony :) ale programik działa :P (o ile po drodze nie wyskoczył żaden błąd).

Powodzenia i miłego kompilowania programów !