niedziela, 24 lipca 2011

XBMC match movie title based on filename

Bardzo często zdarzało mi się że XBMC przydzielał niepoprawny film z imdb na podstawie dziwnej nazwy pliku np: "rx-hl-720p-dtshd.mkv"
Z poziomu interfejsu XBMC znalezienie takich nieprawidłowości było niemożliwe.

Większość moich filmów ma poprawne nazwy katalogów więc pomyślełem że mogę użyć nazwy katalogu do weryfikcaji tego co XBMC przypisał do danego pliku na dysku.

XBMC składuje swoje dane w sqlite i ma ładny opis co gdzie leży. W związku z tym napisałem króciutki programik do weryfikacji mapowań XBMC:


require 'rubygems'
require 'sqlite3'

STOPWORDS = [ "the", "ii", "iii", "iv", "v", "vi", "3d"]
WHITELIST = YAML.load_file(ENV['HOME'] + '/bin/xbmc-verify.yml')

def detect_movie(title, path)
words = title.downcase.gsub(/[^a-z0-9]+/, " ").gsub(/ +/, " ").split(" ")
words.delete_if { |w| STOPWORDS.include? w }
dir = path.downcase
included = words.collect { |w| dir.include?(w) ? true : nil }.compact
included.length == words.length
end

db = SQLite3::Database.new ENV['HOME'] + "/.xbmc/userdata/Database/MyVideos34.db"

db.execute("select c00, c16, strPath from movieview" ) do |row|
next if WHITELIST.include? File.basename(row[2])
unless detect_movie(row[0], row[2]) or detect_movie(row[1], row[2])
movie_title = row[1]
movie_title << " (#{row[0]})" if row[0] != row[1]
puts "!!! #{movie_title} - #{row[2]}"
end
end

sobota, 28 maja 2011

Windows 7

Ponieważ w najbliższej przyszłości czeka mnie (o zgrozo!) naprawa dwóch windowso napędzanych pecetów które rodzinka i znajomi chcą mi podrzucić, postanowiłem przećwiczyć instalacje nowej odsłony okienek na własnym komputerze aby uniknąć problemów na w/w zestawach.

Korzystając z opisu Kevina stworzyłem z obrazu płyty instalacyjnen bootujący dysk USB i uruchomiłem system z niego, na czarnym ekranie mignęło coś ala "ładowanie windows", więc czekam...

Wow, po kilku minutach ujrzałem tapetę nowego windowsa i kursor myszki (nawet reagował na ruch gryzonia!) i to by było na tyle, więcej nic sie nie dzieje, dysk z którego uruchomiłem system nie pracuje - pomyślałem że już udało mu sie zawisnąć.

Ale dostał szansę, w tap defence na telefonie włączyłem kolejne kilka plansz więc dostał gdzieś z 10 minut spokoju. Okazało się że to mu bardzo pomogło bo po ~15 minutach nareszcie pokazał coś do klikania na ekranie.
A więc standardowa akceptacja regulaminu, czy robie upgrade czy instaluje od nowa etc.
Wybrałem nową instalację i moim oczom ukazała się następująca plansza:



Gwoli wyjaśnienia, mam w komputerze 9 dysków - system uruchamiam z WD Raptora 74GB,
na którym mam ubuntu i windowsa viste - domyśliłem się że to dysk 4.

Pytanie która partycja to Vista a która Ubuntu?

"Drogi" microsofcie - czy tak trudno było w polu nazwa dać nazwę producenta i model, a w typie wyświetlić typ partycji (ntfs, linux, etc) ?

Cóż - zagadka pozostanie niewyjaśniona bo szkoda mi stracić swoje dane, ja mam już dosyć, eksperymentował dalej będę na dostarczonych pctach.

niedziela, 15 maja 2011

ubuntu 11.04 so which tab is active?


Obok laptopa mam monitor, każdy z ekranów jest inaczej ustawiony i aby zobaczyć aktywną zakładkę muszę patrzeć na ekran pod odpowiednim kontem - okazało się że nie tylko ja mam taki problem, rozwiązaniem jest ostylowanie aktywnej zakładki w poniższy sposów:

lowang@lowang-laptop:~$ cat .gtkrc-2.0 
style "gnome_terminal_notebook"
{
fg[NORMAL] = "#00ff00"
}

widget "*TerminalWindow.*.GtkNotebook*" style "gnome_terminal_notebook"


po tym tylko restart aplikacji i zmiana powinna być widoczna.

na podstawie:

http://askubuntu.com/questions/40332/how-to-make-selected-tab-in-terminal-more-prominent

Ubuntu 11.04 Natty Narwhal

Od wersji 10.04 Ubuntu zaczęło być dla mnie na tyle dopracowane, że nie śpieszyłem sie z kolejnymi upgrejdami do nowszych wersji. Natomiast zawsze z niecierpliwościa obserwowałem co tym razem zostanie dodane/zmienione w tej wyśmienitej dystrybucji. Tym razem miał być to nowy interfejs więc zaraz po pojawieniu się wersji 'stabilnej' zrobiłem 2 upgrejdy - na kompuerze domowym i na laptopie. Pierwsze wrażenie - WOW, jak to teraz wygląda, nowy luncher ala osx, i ... zwis. Wróciłem do starego kernela na desktopie (Asus P5K Pro) i zniknęły problemy ze stabilnością. Przynajmniej tak mi się wtedy wydawało ;-) Co do samego nowego lunchera - jest świetny, uwielbiam jak ikonka epiphany (chat klient) podskakuje sobie po otrzymaniu nowej wiadomości - coś czego zawsze zazdrościłem osxowi (Adium) teraz mam w ubuntu.

Ok, teraz trochę o wadach - do tej pory nie wiem jak edytować programy w nowym luncherze, próżno szukać opcji edytuj pod prawym przyciskiem myski. Gdzieś na forach czają się opisy jak to zrobić ale nie wygląda to na trywialną operację.
Kolejna sprawa to po kilku dniach używania (robię sleep na noc w desktopie, laptop chodzi cały czas) zauważyłem że gdzieś mi pamięć znika. Winowajcą okazał się compiz - potrafi 3G pamięci zjeść przez kilka dni, magiczne Alt-F2 i compiz --replace rozwiązują chwilowo problem ale trzeba pamiętac aby raz na dzień to zrobić.

Podsumowując jestem zadowolony ze zmiany, Ubuntu to darmowe oprogramowanie i nie ma co od niego wymagać aby było perfekcyjne od dnia wydania, z czasem wszystkie niedogodności które napotkałem zostaną rozwiązane i dzięki automatycznym aktualizacją pojawią się na moich komputerach, lecz na przyszłość postaram się pamiętać aby nowy system instalować z kilkutygodniowym opóźnieniem.

piątek, 24 września 2010

Blueconnect Huawei E122 w Ubuntu 10.04

Po podłączeniu modemu gsm zazwyczaj wystarczy zrobic eject /dev/sr1
niestety huawei jest na to odporny :(

Aby go odpalic wystarczy:

$ sudo apt-get install usb-modeswitch usb-modeswitch-data
$ sudo usb_modeswitch -v 12d1 -p 1001 -H 1

teraz networkmanager juz widzi modem, w dmesgu otrzymamy potwierdzenie tego faktu:

[6020235.400753] usb 2-3: USB disconnect, address 28
[6020239.730122] usb 2-3: new high speed USB device using ehci_hcd and address 29
[6020239.881162] usb 2-3: config 1 interface 1 altsetting 0 bulk endpoint 0x85 has invalid maxpacket 256
[6020239.881174] usb 2-3: config 1 interface 1 altsetting 0 bulk endpoint 0x5 has invalid maxpacket 256
[6020239.881183] usb 2-3: config 1 interface 2 altsetting 0 bulk endpoint 0x86 has invalid maxpacket 256
[6020239.881191] usb 2-3: config 1 interface 2 altsetting 0 bulk endpoint 0x6 has invalid maxpacket 256
[6020239.883626] option 2-3:1.0: GSM modem (1-port) converter detected
[6020239.883820] usb 2-3: GSM modem (1-port) converter now attached to ttyUSB0
[6020239.884534] option 2-3:1.1: GSM modem (1-port) converter detected
[6020239.884700] usb 2-3: GSM modem (1-port) converter now attached to ttyUSB1
[6020239.885937] option 2-3:1.2: GSM modem (1-port) converter detected
[6020239.886088] usb 2-3: GSM modem (1-port) converter now attached to ttyUSB2
[6020239.887020] scsi69 : usb-storage 2-3:1.3
[6020239.887960] scsi70 : usb-storage 2-3:1.4
[6020240.883984] scsi 69:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
[6020240.883995] scsi 70:0:0:0: Direct-Access HUAWEI SD Storage 2.31 PQ: 0 ANSI: 2
[6020240.885180] sd 70:0:0:0: Attached scsi generic sg2 type 0
[6020240.903658] sd 70:0:0:0: [sdb] Attached SCSI removable disk
[6020240.904152] sr1: scsi-1 drive
[6020240.904317] sr 69:0:0:0: Attached scsi CD-ROM sr1
[6020240.904421] sr 69:0:0:0: Attached scsi generic sg3 type 5
[6020251.580164] sr1: CDROM (ioctl) error, command: Xpwrite, Read disk info 51 00 00 00 00 00 00 00 02 00
[6020251.580193] sr: Sense Key : Hardware Error [current]
[6020251.580203] sr: Add. Sense: No additional sense information

środa, 23 grudnia 2009

HP SmartArray P410i - what a piece of shit!

Platforma DL 160 jest oferowana w 2 wersjach 4x3,5" i 8x2,5". Pierwsza wersja jest NO Hotplug podłączona do kontrolera INTEL ICH10R, kolejna ma już kieszonki na dyski i działa na kontrolerze HP SmartArray P410i/ZM ( nie da się z niego zrezygnować, przynajmniej mi się nie udało )

Co do samego kontrolera HP SmartArray P410i, jest to urzadzenie które z premedytacją ukrywa dyski przed systemem więc przy instalacji debiana był 1wszy zonk, gdzie mam go zainstalować?

Pomęczyłem troche support HP i dostalem w koncu odpowiedz: "NIE DA SIE".
Ba, support był wielce zdziwiony że jak to chce wyłączyć funkcje raid w ich kontrolerze, przecież to nie będzie działać...
Pewnie tak samo sie dziwił dział zamówień że zamówilismy serwery bez cdromów... lol

Wcześniej miałem doczynienia z serwerami Fujitsu-Siemens i do głowy mi nie przyszło że taki absurd może się pojawić, ale cóż, to tylko hp.

Obejściem tego okazało się zrobienie fizycznej macierzy RAID z poziomu narzędzia zwanego ORCA - taki mini bios tego kontrolera, cholernie ograniczony z minimalną ilością opcji.
Teraz zamiast mieć wszędzie raid softwarowy przez to badziewie jesteśmy zmuszeni do robienia wyjątków w konfiguracji i korzystania z raidu softwarowego. Oczywiście tak samo wygląda sprawa w przypadku S.M.A.R.T - hp daje swoje własne narzędzie. Oczywiscie pod debianem to kolejny klopot bo daja to w RPM-ach do Redhata.

Kolejna sprawa to wydajność, domyślnie SmartArray ma wyłączoną opcję buforowania zapisu, więc działa baaardzo słabo. Ale troche magi w narzędziu zwanym hpacucli, czyli:

=> ctrl slot=4 modify drivewritecache=enable

i udało się to włączyć.

Naszczęscie kontroler ten poprawnie rozpoznał dyski INTEL-a, a tu miałem trochę wątpliwości bo nikt nie był mi w stanie tego potwierdzić. Niby wspiera SATA, ale kto wie jakie ficzery HP mógł tam dopisać...

Ciekawe jak będę zmieniał firmware w tych dyskach skoro nie mam do nich dostępu z systemu...

Podsumowując: narazie działają, ale ciągle żałuje że ich nie wyrzuciłem i nie zastąpiłem np INTELEM SASUC8I który ma tzw RAID-passthrough więc dyski sa normalnie widoczne.

wtorek, 30 czerwca 2009

rcov plugin overwrites its results

tak sie dzieje dla zadania rake test:test:rcov, testy funkcjonalne nadpisuja jednostkowe itd...
Dlatego dodałem prosty task:



for test_task in %w(test:units test:functionals test:integration)
task_name = "rcov:set_proper_output_directory_for_#{test_task.gsub(/(test:)/,'')}".to_sym
task task_name do |t, args|
t.name =~ (/set_proper_output_directory_for_(.*)/); test_type=$1
RcovTestSettings.output_dir = File.expand_path("./coverage/#{test_type}")
end
task test_task.to_sym => task_name
end


który uruchamia się przed każdym testem i ustawia poprawny katalog gdzie rcov ma zapisywać.
Inne rozwiazanie znalazłem na blogu ale nie udało mi się go uruchomić(nie bawiłem sie nad tym):