Ciekawe..


I am nerdier than 98% of all people. Are you a nerd? Click here to find out!




NerdTests.com says I'm a Dorky Nerd God. What are you? Click here!

Dodaj komentarz

No bo inaczej tego wytłumaczyć nie potrafię.

Dziś rano, szczęśliwy jak skowronek, że dwa dni batalii z różnorakim sprzętem, w tym moim, zostały zakończone i że zaktualizowałem wreszcie kernela, usiadłem i odpaliłem kompa.
Ponieważ na wakacjach korzystam z pożyczonego laptopa wyposażonego w zmyślne urządzenie zwane modemem GPRS w porcie PCMCIA (People Can’t Memorize Computer Industry Acronyms), celem utrzymania kontaktu ze światem, to także i dziś nawiązałem połączenie na laptopie, podpiąłem wszystkie potrzebne przewody i… no i właśnie nic. Połączenia brak. Pierwsza myśl to zmiana kernela, no ale ostatnia kompilacja wypadła na wczoraj o 21.10, potem były jeszcze dwa restarty i net wciąż działał, co wyczytałem z logów, po czym aż do 5-tej rano trwało pobieranie wieczorem ustawionych plików (ach ta radość GPRSa i jego 5kb/s), po czym komputer zgodnie z moim życzeniem i komendą w terminalu, wyłączył się.
Logi dalej poprowadziły mnie do stwierdzenia „Interfejs eth0 nie istnieje”, wydanego dziś rano przez skrypt za eth0 właśnie odpowiedzialny. Tu już zgłupiałem, w świetle faktów że działało wieczorem, nic nie było w międzyczasie zmieniane i w ogóle czemu to nie działa?
Sprawdziłem kernel, sprawdziłem wszelkie możliwe komunikaty błędów, nawet odpaliłem na chwilę znów ze starym jądrem, bez zmian. Wreszcie wyjąłem kartę sieciową, poszukałem ewentualnych uszkodzeń, przedmuchałem wszystkie porty pci z kurzu i wpiąłem kartę spowrotem. Bez zmian. Następnie wpiąłem kartę w port pci niżej. Efekt był taki, iż system skapitulowałem zaraz po POST, kiedy to normalnie powinien szukać sieciowego boot managera, celem bootwania przez sieć. Czyli znowu karta sieciowa. Wyjąłem ją ponownie i włożyłem w port wyżej, zaraz obok karty graficzej (celowo wcześniej zostawiłem tam trochę więcej miejsca na powietrze).
Tym razem system wstał, bootowanie nastąpiło i natychmiast ujrzałem znajome:
kernel: PCI: Found IRQ 11 for device 0000:00:08.0
kernel: eth0: OEM i82557/i82558 10/100 Ethernet, 00:08:C7:2B:F5:B1, IRQ 11.
I dlaczego tak?
Karta sieciowa się znudziła swoim dawnym portem PCI albo numerem IRQ?
Najważniejsze, że teraz działa, ale powodu chyba łatwo nie znajdę...

1 komentarz

Najpierw podziękowanie dla Wuzetesa za naukę – jak tworzyć chwytliwe tematy ;)
Problem na jaki się natknąłem ostatnio, to zawieszający się co jakiś czas serwer mysql’a. Przyczyną najpewniej jest mało optymalny kod serwisu na tym działającego, co w połączeniu z większym ruchem daje taki oto efekt.

Zacząłem czytanie dokumentacji i testowanie różnych ustawień celem wyeliminowania z mysqld się tej wrednej maniery, jednak w trakcie gdy tak szukam rozwiązania (rozważam nawet przyśpieszony kurs sql’a i podjęcie próby naprawy tego własnoręcznie, co by mi prawdę mówiąc na dobre wyszło), coś trzeba było zrobić z problemem: jak się zawiesi to trzeba go ręcznie restartować.. ale co to za problem dla obywatela kraju wiecznej prowizorki.
Najpierw spróbowałem swoich sił z prostym bashowym skryptem, niestety to rozwiązanie było zbyt wolne (~10 minut, gdy serwer wisi i mysqld zajmuje 99% mocy procesora), a nawet raz kompletnie zawiodło. Zdecydowałem się zatem na napisanie mojego wskrzeszacza (bo tak nazwałem projekt: Mysql.Reviver) w C++.
Po paru godzinach dłubania coś całkiem sensownego udało mi się wydłubać, więc jako zdrowy opensource’owiec postanowiłem się tym podzielić na zasadach GPL’a.
Z tego adresu można pobrać kod: mysql.reviver.cpp
Czekam na komentarze o tym, które rozwiązanie dotyczące zawieszających się mysqld najbardziej Wam się podoba i dlaczego akurat moje ;)
Miłego użytkowania :)

2 komentarze

„Z mojego punktu widzenia (prawdopodobnie dlatego, że nie mam laptopa), jedną z głównych zalet nowoczesnego telefonu jest możliwość przechowywania na nim danych, do których mam stały dostęp (Dokumenty/Grafika/Audio/Video), dlatego właśnie kluczowym problemem był wygodny dostęp do plików, tak jak dla pamięci przenośnej, i najlepiej – bezprzewodowy. Oto co zrobiłem by to uzyskać.”


Słowem wstępu

Nie, tytuł nie pomylił mi się ze słowami kluczowymi, ponieważ dokładnie opisuje o co chodzi :)
Posiadam od 2 dni nokię E50, zgrabny i lekki telefonik z symbianem 9, który podobno jest następcą 6310i. Jak dotąd przechodzi przez moje kolejne testy pomyślnie i chyba faktycznie go zatrzymam. Jedyny istotny minus to bateria, ale myślę że jeśli chce się mieć kolorowy wyświetlacz i tyle różnych gadżetów w środku, to trzeba za to jakoś zapłacić użytecznością, trudno – może się przyzwyczaję do dwa razy krótszego czasu życia baterii, a może się okaże że wartości podawane w sieci (3-4 dni) nie są tak bliskie prawdy w moim przypadku.


Wracając do tematu głównego…

Z mojego punktu widzenia, jedną z głównych zalet telefonu jest możliwość przechowywania na nim danych, do których mam dostęp (Dokumenty/Grafika/Audio/Video). Brakuje mi co prawda opcji odczytywania i edycji ODT, ale ostatecznie pozostają PDFy (tak, uparłem się i z doc korzystać nie będę, prędzej sam napiszę plugin do ODT :P).
Dlatego właśnie kluczowym problemem był wygodny dostęp do plików, tak jak dla pamięci przenośnej, i najlepiej – bezprzewodowy. Zdaję sobie sprawę, że większość dystrybucji domyślnie instaluje potrzebne pakiety, ale w moim przypadku (system Linux From Scratch) taka opcja nie wchodziła w grę, więc musiałem zrobić to co zawsze, czyli zainstalować wszystko ręcznie krok po kroku.
Zacząłem od wyszukania w sieci strony Open Obex (otwarta implementacja protokołu wykorzystywanego do przesyłania plików między urządzeniami przenośnymi a komputerem) i sprawdzenia co u nich nowego. Nie zawiodłem się, gdyż dowiedziałem się o ObexFS, czyli o systemie plików opartym na FUSE, dzięki któremu pamięc telefonu możemy zamontować poprzez bluetooth tak – jak zwykłą pamięć przenośną.


Potrzebne oprogramowanie

FUSE (wybrałem wersję 2.4.2, zgodnie z zaleceniem na stronie ObexFs)
OpenObex
ObexFTP
ObexFS, beta
dodatkowo, aby mieć możliwość korzystania z anteny bluetooth, potrzebne są także:
D-Bus (chyba opcjonalne)
BlueZ

Instalacja D-Bus’a i BlueZ’a nie powinna nikomu sprawić problemu (dość standardowe ./configure;make;su -c „make install;ldconfig” i edycja /etc/hcid.conf, /etc/bluetooth/hcid.conf lub /usr/local/etc/bluetooth/hcid.conf), ciekawie robi się dalej :)
Zależności nakazują dalej instalację FUSE. Ponieważ FUSE jest podzielony na dwie części: kernelspace (moduł) i userspace (biblioteki), moduł możemy skompilować razem z resztą FUSE’a, albo możemy skorzystać z kodu dołączanego do jądra (podobno od 2.6.8) i przekompilować kernel.
Ponieważ próba wykonania tej krótszej operacji, czyli kompilacji samego modułu dołączonego razem ze źródłem FUSE’a, zakończyła się z bliżej mi nie znanych przyczyn, już przy pierwszym pliku (fuse-2.4.2/kernel/dev.c:112: error: impossible constraint in `asm’), wybrałem bramkę nr 2, czyli rekompilację kernela. Potrzebną do włączenia opcję znalazłem szybko w „File systems/Filesystem in Userspace” (wybrałem dołączenie do jądra). Po załadowaniu od nowa systemu z poprawionym jądrem w dmesg pojawił się „fuse init (API version 7.7)”, czyli wszystko w porządku.
Dalsze kompilacje bibliotek FUSE, OpenObex, ObexFtp i w końcu ObexFS przebiegły standardowo (./configure;make;su -c „make install;ldconfig”).
Kolejnym krokiem była konfiguracja nowego punktu montowania, czyli stworzenie katalogu, w którym będzie montowany telefon (np. /mnt/nokia), a następnie dodanie odpowiedniej konfiguracji do /etc/fstab (strona ObexFS opisuje kilka możliwości konfiguracji punktu montowania), czyli w skrócie dodanie linii:
obexfs#-b00-11-22-33-44-55 /mnt/nokia fuse user,fsname=obexfs#-b00-11-22-33-44-55 0 0
gdzie oczywiście 00-11-22-33-44-55, to MAC adres naszego telefonu. Aby go uzyskać, włączamy bluetooth w telefonie, podłączamy antenę bluetooth do usb i wykonujemy polecenie:
hcitool scan
Po chwili powinna pojawić się lista wykrytych urządzeń:
Scanning ...
00:15:B1:14:B1:12 mSzift
wstawiamy myślniki w miejsce dwukropków, dodajemy całą linijkę do /etc/fstab i gotowe!
Teraz według teorii, wystarczyło wydać polecenie:
mount /mnt/nokia


Tu teoria się kończy...

Niestety w moim przypadku system chwilę potrawił, nie wyrzucił nic, a /mnt/nokia dalej było puste…
Z początku podejrzewałem zły kanał komunikacji. Wykonałem
sdptool browse
aby przekonać się jakimi kanałami usług dysponuje telefon… i telefony sąsiadów.. żartuję, potrzebna jest autoryzacja. Po stronie komputera powinno wyskoczyć okienko z pytaniem o kod PIN – nie chodzi tu o PIN telefonu – ale o dowolny najlepiej wymyślony na poczekaniu ( wyłącznie cyfrowy, ale nie typu 111..) kod, który następnie wprowadzimy w telefonie, celem weryfikacji, że oba końce połączenia są u Nas, a nie np. u sąsiada ;)
Już po chwili zobaczymy potok danych na ekranie, będą one podzielone na bloki tekstu, po parę linijek. Szukamy „Service Name: OBEX File Transfer” i niżej w tym samym bloku tekstu znajdujemy coś takiego:
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 11
"OBEX" (0x0008)
Oczywiście interesuje Nas właśnie ta liczba 11, bo mówi ona o numerze kanału, przez który będziemy przesyłać pliki. Ponownie według strony ObexFS, aby zdefiniować kanał podajemy wpis tak:
obexfs#-b00-11-22-33-44-55\040-B6 /mnt/nokia fuse user,fsname=obexfs#-b00-11-22-33-44-55\040-B6 0 0
gdzie „\040-B6” odpowiada „ -B6”, czyli w pokazanym wyżej przypadku ostatecznie będzie to wyglądało tak:
obexfs#-b00-15-B1-14-B1-12\040-B11 /mnt/nokia fuse user,fsname=obexfs#-b00-15-B1-14-B1-12\040-B11 0 0
niestety to u mnie nie podziałało. Cały czas otrzymywałem komunikat o źle podanej opcji B11, więc w końcu wyedytowałem plik /sbin/mount.fuse i na samym dole zakomentarzowałem (dodałem # przed)
${FSTYPE} ${MOUNTPATH} ${MOUNTPOINT} ${OPTIONS}
i poniżej wpisałem na sztywno:
obexfs -b 00:15:B1:14:B1:12 -B11 /mnt/nokia
Teraz po ponownym wykonaniu mount /mnt/nokia komputer jakby dłużej myślał, ale dalej bez skutku. Podejrzałem co się dzieje w /var/log/sys.log (lub dmesg) i zobaczyłem wpisy w tym stylu:
Apr 26 10:45:39 szift hcid[2171]: link_key_request (sba=11:11:11:11:11:11, dba=00:15:B1:14:B1:12)
a więc coś jeszcze było nie tak, chwila zastanowienia doprowadziła mnie do odpowiedzi…(haha! look at me, no google :P)


Tanie moduły Bluetooth

Czyli te sprzedawane po 10-20 zł na allegro, podobno mające zasięg do 100m. Korzystalem z nich od dłuższego czasu bez większych problemów, np. do łączenia się z siecią przez 6310i po GPRS, jednak zawsze zastanawiało mnie dlaczego ich adresy MAC to 11:11:11:11:11:11. W tym przypadku to właśnie okazało się być problemem, ale jak wszystko w Linuksie – tylko dopóki nie znalazłem właściwego rozwiązania. Tym rozwiązaniem okazał się mały prosty programik o nazwie bdaddr, służący właśnie do zmiany MAC adresu urządzeń bluetooth. Jest on dołączony do aktualnych wersji BlueZ’a, ale o ile dobrze pamiętam, nie kompiluje się i nie instaluje przy zwykłym standardowym ./configure;make..itd. Aby z niego skorzystać, należy w katalogu źródła wejść do katalogu „test” i tam wykonać polecenie make, a następnie ręcznie przekopiować go sobie do /usr/sbin (sbin a nie bin, bo do faktycznego działania wymaga uprawnień roota). W ten sposób jesteśmy już tylko 3 kroki od zamontowania telefonu:
1. jako root zmieniamy adres naszego urządzenia bluetooth na coś rozsądnego
bdaddr -i hci0 00:16:B5:11:B2:05
Manufacturer: Integrated System Solution Corp. (57)
Device address: 11:11:11:11:11:11
New BD address: 00:16:B5:11:B2:05

Address changed - Reset device now
2. dalej jako root, zgodnie z poleceniem resetujemy naszą antenę
hciconfig hci0 reset
to polecenie nie pokazuje nic, aby się jeszcze upewnić czy zmiana nastąpila pomyślnie, można wykonać:
hciconfig hci0
hci0: Type: USB
BD Address: 00:16:B5:11:B2:05 ACL MTU: 678:8 SCO MTU: 48:10
UP RUNNING PSCAN ISCAN AUTH ENCRYPT
RX bytes:3960523 acl:11027 sco:0 events:10752 errors:0
TX bytes:3114843 acl:10643 sco:0 commands:84 errors:0
czyli nowy adres jest już ustawiony, teraz pozostaje ostatni krok
3. jako zwykły użytkownik wykonujemy polecenie:
mount /mnt/nokia
i cieszymy się nową pamięcia przenośną ;)
ls /mnt/nokia/C:/Data
A0000BEC Documents Games Images Installs Others Sounds Videos


Na koniec
Trzeba pamiętać, że ustawienie adresu MAC trzeba przeprowadzić po każdym podłączeniu anteny do usb, lub po każdym zrestartowaniu komputera. Można pewnie napisać do tego jakiś prosty skrypt, który przy każdym podłączeniu urządzenia będzie robił to za nas. Sam narazie dodałem te polecenia do sekwencji startowej systemu (po uruchomieniu hcid), ponieważ antenę mam i tak cały czas podłączoną do usb.

Warto zauważyć, że df nie pokazuje nam nic o nowym podmontowaniu, natomiast zwykłe cat /etc/mtab i owszem:
obexfs /mnt/nokia fuse rw,nosuid,nodev,user=szift 0 0

Mamy dostęp tylko do dysku C: i ewentualnie D: (karta pamięci), ale w sumie nie ma dużego problemu z dostępem do innych części telefonu, dzięki Y-Browser do przeglądania wszystkiego w telefonie – z poziomu telefonu.
Bardzo ciekawą pozycją jest także PuTTY for Symbian OS, czyli niemal kompletny klient w stylu PuTTY (u mnie ma tylko problem z zapamiętaniem konfiguracji domyślnej, ale zmieniłem to przerzucając plik C:\System\Apps\putty\defaults do C:\Data, edytując ręcznie z komputera (jakoś tak wygodniej ;) i wrzucając spowrotem na swoje miejsce).

1 komentarz

Wszyscy, którzy mieli doczynienia z adesklets, świetną alternatywą gdesklets dla szerokiej gamy menagerów pulpitów (kde, e16, nautilus, xfce, rox, xffm, jest nawet możliwość wybrania samemu warstwy na której desklety będą rysowane (czyli niekoniecznie tylko pulpit)), wiedzą napewno jak funkcjonalny potrafi nagle stać się zwykły desktop, wyświetlając wszystko od prognozy pogody, poprzez kuchenny alarm, po aktualny wykres obciążenia procesora. Niektórzy poznali to być może dopiero niedawno jako ‘gadgets’ w Windows Vista, inni trochę wcześniej jako ‘widgets’ w Mac OS X, ale z moich informacji wynika, że Linuksowe deskletsy byly ich pierwowzorami w postaci gDesklets dla GNOME, SuperKaramba dla KDE oraz GKrellM i adesklets dla dowolnych WM :)
Wracając do tematu, korzystając z istniejącego już feedscrollera 0.0.1, rozwinąłem trochę jego możliwości i opublikowałem dziś jako feedscroller 0.0.2
Jest to desklet czytający nasze kanały RSS, który następnie sortuje znalezione wpisy według czasu dodania i wyświetla razem na jednej liście, bezpośrednio na pulpicie.. zaraz obok prognozy pogody dostarczonej przez weatherforecast-0.2.0, wykresu obiążenia procesora wbcpu-0.1.1 i innych…
A wygląda to tak:

(kliknij, aby zobaczyć w całości)

adesklets w akcji

Aby daty z wykop.pl były poprawnie wyświetlane, musiałem dokonać pewnej modyfikacji w /usr/lib/perl5/site_perl/5.8.6/XML/Feed/RSS.pm, podobnie musiałem troszkę poprawić /usr/lib/perl5/site_perl/5.8.6/adesklets.pm, aby bez problemu wyświetlać Polskie znaki. Szczegóły, razem z kompletnym rozwiązaniem, znajdziecie w pliku README dołączonym w archiwum.

1 komentarz

Powered by Jogger.PL and Tarski · Ported by alberht