środa, 29 lutego 2012

Text 2 AsciiArt

Kazdy nowy projekt który wystawia coś po http opisujemy stroną startową z informacjami co to jest i co mozna z tym zrobic.
Aby fajnie wygladalo na takiej stronie zamieszczamy tytul projektu wygenerowany w ascii-art,
dla takich potrzeb znalazłem fajny generator ascii art z podanego tekstu: http://patorjk.com/software/taag/

wynik:

                                                                          
___ ___
,--.'|_ ,--.'|_ ,---,
| | :,' | | :,' __ ,-.,---.'|
.--.--. : : ' : : : ' : .--.--. ,' ,'/ /|| | :
/ / '.;__,' / ,--.--. .;__,' / / / ' ' | |' |: : :
| : /`./| | | / \ | | | | : /`./ | | ,': |,-.
| : ;_ :__,'| : .--. .-. |:__,'| : | : ;_ ' : / | : ' |
\ \ `. ' : |__ \__\/: . . ' : |__ \ \ `. | | ' | | / :
`----. \| | '.'| ," .--.; | | | '.'| `----. \; : | ' : |: |
/ /`--' /; : ;/ / ,. | ; : ;/ /`--' /| , ; | | '/ :
'--'. / | , /; : .' \ | , /'--'. / ---' | : |
`--'---' ---`-' | , .-./ ---`-' `--'---' / \ /
`--`---' `-'----'
(Font Name: 3D Diagonal)

poniedziałek, 23 stycznia 2012

OSX Lion, apache bench "Connection reset by peer"

Obecnie testuje różne kontenery http na jruby, oprócz uruchomienia i testu z przegladarki zależy mi na określeniu jaka będzie strata/zysk przy konwersji MRI->JRUBY. Naturalnym dla mnie narzędziem do takich testów jest ab z pakietu apache utils.

Jakie było moje zdziwienie kiedy zamiast czasu otrzymałem błąd:

$ ab.old -n100 -c40 http://localhost:3000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)...Send request failed!
Send request failed!
Send request failed!
apr_socket_recv: Connection reset by peer (54)
Total of 3 requests completed


pół dnia spędziłem, zmieniając serwery, zmieniłem również implementacje javy na openjdk, wszystko na nic, aby pod koniec dnia natrafić na odpowiedz na superuser. Czemu wcześniej na to nie trafiłem? A kto by podejrzewał ab...

Okazało się że ab dostarczany z osx ma ten błąd i należy przekompliować ab z źródeł. no comment

UPDATE: po kompilacji dostłem nowy błąd "bind: address family not supported by protocol family 47", tu znowu wkracza osx ktory za localhost podstawia adres IPv6. Rozwiązanie polegało na usunięciu wpisów ipv6 z /etc/hosts powiązanych z localhostem

poniedziałek, 19 września 2011

vimdiff on directories

Jedyną rzeczą której mi brakowało w gedit/rubymine było porównywanie katalogów, prawde mówiąc był to jedyny powód dla którego korzystałem od czasu do czasu z Eclipse/Aptana gdzie to działało rewelacyjnie.
Do teraz, bo właśnie znalazłem plugin DirDiff:

http://www.vim.org/scripts/script.php?script_id=102

wystarczy wpisać:

:DirDiff katalog1 katalog2

a oto efekt:

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.