Komputery, oprogramowanie, internet i okolice
Kategorie: Wszystkie | Aplikacje | Blog | Dev | Hacks | Linux | Subversion | Varia | gry | khoomei | książki | mjuzik
RSS
wtorek, 20 kwietnia 2010

A teraz, proszę Państwa, coś naprawdę niesamowitego. Wręcz epickiego. Chyba nie skłamię mówiąc, że jest to jedna z najlepszych rzeczy jakie ostatnio widziałem. W dodatku z godziny na godzinę, z dnia na dzień staje się coraz lepsza. Coraz zabawniejsza, coraz ciekawsza i coraz bardziej wciągająca. Oto przed Państwem...

PlayPen

PlayPen

Czym jest PlayPen? Dobre pytanie! To zdecydowanie coś więcej niż tylko hipertekstowa opowieść, przedstawiona za pomocą rozpikselowanych obrazków, przypominających grafikę z komputerów 8-bitowych. PlayPen to cały świat powstający na naszych oczach. Świat pełen specyficznego humoru i dziwnych skojarzeń. Miejscami trochę psychodeliczny, dziecinny i wulgarny zarazem.

Powyższa animacja to tylko przedsmak tego co znajdziemy w tym przedziwnym świecie. W dodatku w każdym momencie możemy włączyć się w jego tworzenie dorysowując nowe plansze, postacie, kolejne elementy historii. Jedyne co nas i innych odwiedzających ogranicza to wyobraźnia. Dzięki temu za każdym razem gdy wejdziemy na PlayPen będą na nas czekać nowe miejsca do zwiedzenia.

Kto by pomyślał, że można wykorzystać silnik MediaWiki do tak niesamowitych rzeczy. Mam tylko nadzieję, że PlayPen nadal będzie się rozwijał w dobrym kierunku i nie zostanie zniszczony przez internetowych wandali.

EDIT: A tutaj tumblog Best of PlayPen, na którym zbierane są najlepsze prace powstałe w serwisie.

09:16, kosciak1 , Varia
Link Komentarze (2) »
niedziela, 18 kwietnia 2010

W zeszłym tygodniu w Laboratorium Gmail pojawiła się nowa funkcja Zagnieżdżone etykiety (Nested Labels). Pozwala ona wyświetlać etykiety w formie drzewka, upodobniając je do drzewa folderów (wcześniej podobną funkcjonalność oferował skrypt Greasemonkey Folders4Gmail). Niestety domyślnie wszystkie etykiety są zwinięte. Jeśli ktoś jak ja ma zdefiniowanych kilkadziesiąt etykiet w formie rozbudowanego drzewa to może być problemem. Dlatego mając chwilę wolnego czasu napisałem skrypt rozwijający wybrane etykiety.

Zagnieżdżone etykiety

By uruchomić tą funkcję należy wejść do Ustawień Gmaila, przejść do Laboratorium (Labs) i włączyć Zagnieżdżone etykiety (Nested Labels). Następnym krokiem jest stworzenie odpowiedniej struktury etykiet. Poszczególne poziomy drzewa rozdzielamy za pomocą /. Musimy też pamiętać o utworzeniu etykiet dla wszystkich poziomów drzewa. I tak po utworzeniu etykiet Praca, Praca/Pilne, Praca/Klienci, Praca/Klienci/Nowak, Praca/Klienci/Kowalski otrzymamy takie oto drzewko:

Gmail - zagnieżdżone etykiety

W dodatku przy dostępie za pomocą protokołu IMAP również będziemy widzieć strukturę folderow.

Gmail - auto expand Nested Labels

Skrypt Gmail - auto expand Nested Labels automatycznie rozwija wybrane elementy drzewka zakładek po uruchomieniu Gmaila. Jeśli ktoś ma kilkanaście, kilkadziesiąt etykiet tworzących rzbudowaną strukturę ten wie, że ręczne rozwijanie drzewka jest bardzo denerwujące.

Instalacja

Dla posiadaczy Firefoxa:

  1. Instalujemy Greasemonkey
  2. Wchodzimy na stronę skryptu Gmail - auto expand Nested Labels
  3. Klikamy w wielki przycisk "Install"
  4. Uruchamiamy menu NarzędziaGreasemonkeyZarządzaj skryptami, wyszukujemy na liście "Gmail - auto expand Nested Labs" i klikamy edytuj
  5. Przypisujemy zmiennej autoExpand listę etykiet, które mają być automatycznie rozwijane. Należy pamiętać o odpowiedniej wielkości liter ('praca' i 'PRACA' to nie jest to samo), etykiety nadrzędne zostaną rozwinięte automatycznie. Przykład:
    var autoExpand = ['Praca/Klienci', 'powiadomienia'];

Skrypt działa zarówno dla zwykłego Gmaila, jak i dla poczty Gmail we własnej domenie.

Posiadacze innych przeglądarek muszą poradzić sobie sami. Pod Google Chrome nie chce działać symulowania kliknięcia. Nie wiem czy to problem z nieprawidłowym eventem, czy jakiś błąd wykonywania element.dispatchEvent(evt), jeśli ktoś zna rozwiązanie niech da znać.

Changelog:

  • 0.1.1 - poprawka po dzisiejszej zmianie w Gmailu
  • 0.1 - pierwsza wersja
15:32, kosciak1 , Dev
Link Komentarze (2) »
czwartek, 15 kwietnia 2010

Przygotowując poprzedni wpis o kolorowaniu konsolowych narzędzi jakoś umknął mi jeszcze jeden bardzo pożyteczny srypt, który ułatwi pracę z Subversion.

ColorSVN

colorsvn

Narzędzie colorsvn koloruje informacje o zmianach w plikach (svn status, svn add, svn checkoout, etc), dzięki niemu od razu widać które pliki zostały dodane, które zmienione, a które usunięte.

Niestety w przeciwieństwie do wspomnianego poprzednio colordiff w repozytorium Ubuntu nie znajdziemy gotowej paczki dla ColorSVN. Na szczęście instalacja jest banalnie prosta.

  1. Ściągamy źródła z działu Downloads projektu:
    $ wget http://www.console-colors.de/downloads/colorsvn/colorsvn-0.3.2.tar.gz
  2. Rozpakowujemy paczkę:
    $ tar xvfz colorsvn-0.3.2.tar.gz
  3. Przechodzimy do katalogu ze źródłem i instalujemy:
    $ cd colorsvn-0.3.2/
    $ .configure
    $ make
    $ sudo make install
  4. Jeśli, jak radziłem w poprzednim wpisie mamy ustawioną zmienną $TERM o wartości xterm-256color musimy jeszcze dopisać ten typ terminala do pliku konfiguracyjnego (gdzie przy okazji możemy zmienić też definicje kolorów). W linii 15 pliku /etc/colorsvnrcdopisujemy xterm-256color
  5. Teraz już tylko pozostało dopisać do ~/.bashrc odpowiedni alias:
    alias svn='colorsvn'

Jeśli wszystko wykonaliśmy poprawnie możemy już się cieszyć jeszcze wygodniejszą pracą z Subversion.

Na marginesie dodam, że na stronie projektu znaleźć można jeszcze między innymi ColorCVS, ColorMake i ColorGCC

wtorek, 13 kwietnia 2010

Dzisiaj Google wprowadziło gadżet, na który wielu bloggerów czekało od dawna - przyciski Google Buzz, dzięki którym czytelnicy mogą napisać na Buzzie o czytanej właśnie notce. Wcześniejsze rozwiązania, jak na przykład przyciski Buzrr.com wykorzystywały mechanizm polecania wpisów w Google Readerze. Teraz można już wysyłać bezpośrednio na Buzza.

Wygląd przycisku

Narzędzie służące do wygenerowania kodu HTML przycisków można znaleźć pod adresem google.com/buzz/stuff Obecnie mamy do wyboru jedynie przyciski do publikacji wpisów oraz przycisk śledzenia użytkownika, jednak adres sugeruje, że to dopiero początek dodatków dla Buzza.

Po wybraniu przycisku do publikacji w Buzz dostępnych jest kilka różnych wersji do wyboru:

Przycisk Google Buzz

Odpowiedni kod HTML zostanie wygenerowany w polu tekstowym poniżej.

Instalacja przycisku na Blox

Instalacja jest banalnie prosta. Wystarczy przejść do panelu administracyjnego Blox, wejść w Ustawienia, wybrać Wpisy, a następnie wkleić wygenerowany kod w pole Dodaj pod każdym wpisem. By ułatwić właściwe ostylowanie dobrze jest dodać unikalny atrybut, na przykład id="przycisk_buzz"

<a id="przycisk_buzz" title="...

Teraz podczas edycji CSS możemy odwoływać się do przycisku Google Buzz za pomocą #przycisk_buzz, by ustalić jego dokładne położenie.

Efekt można zobaczyć pod poniżej (na stronie wpisu). A tutaj możecie przeczytać jak zainstalować przycisk RE.BLIPI, który znajduje się tuż obok.

Skryptozakładka "Publikuj w Google Buzz"

Przy okazji przygotowałem skryptozakładkę (czyli fragment kodu Javascript uruchamianego jako zakładka). Wystarczy przeciągnąć poniższy odnośnik do paska zakładek (lub po prostu dodać wskazany adreso-skrypt jako zakładkę):

Publikuj w Google Buzz

Teraz po kliknięciu w zakładkę powinno otworzyć się okienko dodawania nowego buzznięcia. Działa w Firefoxie, Chrome i Operze.

Zauważyłem, że ostatnio coraz więcej czasu spędzam pracując w konsoli. Niewątpliwie jest to jeden ze skutków ubocznych poznawania Vima, który z każdym dniem coraz bardziej mi się podoba. Podczas prac nad jego konfiguracją natknąłem się na problem ilości dostępnych kolorów dostępnych. Polecenie tput colors zwracało 8, mimo że zarówno gnome-terminal jak i xterm potrafią wyświetlić 256 kolorów (co można sprawdzić uruchamiając skrypt colortest.pl). Przy okazji rozwiązywania tego problemu zająłem się "kolorowaniem" kilku narzędzi.

bash

bash - 256 kolorów

Pierwszą rzeczą jaką musimy zrobić to pobranie paczki ncurses-term - zawiera ona między innymi definicję terminalu xterm-256colors, którą zamierzamy ustawić. Teraz pora na edycję ~/.bashrc i ustawienie zmiennej $TERM, wystarczy dopisać następujący fragment:

if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
else
    export TERM='xterm-color'
fi

Przy kolejnym uruchomieniu konsoli powita nas kolorowy znak zachęty. Jeśli nie podobają nam się jego domyślne ustawienia możemy je zmienić ustawiając zmienną $PS1

ls, grep

Tu sprawa jest dosyć prosta, wystarczy uruchomić ls lub grep z --color=auto (auto, by nie było problemu z zapisaniem wyniku ls do pliku). Najprościej ustawić w ~/.bashrc odpowiednie aliasy:

alias ls='ls --color=auto'
alias grep='grep --color=auto'

Jednak problem pojawia się, gdy chcemy użyć jakiegoś pagera (more, less, czy też most). Podobnie jak w przypadku zapisu wyniku polecenia do pliku, tak i przy użyciu potoku (z ang. pipeline) znaki sterujące kolorami nie są wysyłane. Musimy użyć --colors a w przypadku użycia less dodatkowo wywołać go z -r, na przykład:

ls -al | less -r

Pagery more i most w domyślnych ustawieniach nie mają problemu z kolorami.

diff

colordiff

Kolejnym narzędziem proszącym się o kolory jest diff. Z pomocą przychodzi colordiff - skrypt koloryzujący wynik pracy diff. Jest on dostępny w repozytorium Ubuntu. Teraz wystarczy w ~/.bashrc ustawić alias diff='colordiff' i od razu robi się o wiele czytelniej.

W przypadku Subversion konieczna będzie jeszcze zmiana w ~/.subversion/config i ustawienie właściwego narzędzia do wyświetalania różnic między wersjami.

man

Kolorowy man

Na koniec jak pokolorować pliki pomocy. Jednym z rozwiązań jest użycie most do wyświetlania dokumentacji. Wystarczy ustawić zmienną $MANPAGER='/usr/bin/most' lub uruchamiać man w następujący sposób:

man --pager=most [temat] 

Niestety most nie wykorzystuje skrótów klawiaturowych Vima. Dlatego zdecydowałem się na drugie rozwiązanie, polegające na dodaniu do ~/.bashrc następujących linii:

export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
export LESS_TERMCAP_me=$'\E[0m'           # end mode
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
export LESS_TERMCAP_so=$'\E[33;01;44m'    # begin standout-mode - info box
export LESS_TERMCAP_ue=$'\E[0m'           # end underline
export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline

Kolory oczywiście można sobie dowolnie pozmieniać. By zrozumieć o co chodzi z tym całym \E[...m można zerknąć na przykład tutaj.

czwartek, 08 kwietnia 2010

Czytając o planowanej na dzisiaj przerwie technicznej Bloxa zdałem sobie sprawę, że nie mam na dysku kopii zapasowej bloga. Postanowiłem jakoś temu zaradzić. Dostępny jest ciekawie wyglądający program DeBergeraca pod tytułem Blex, jednak ze względu na użycie platformy .NET na Linuksie nie dane mi z niego skorzystać. Nie pozostało nic innego jak zerknąć do API Bloxa i napisać własne narzędzie.

Blox-exporter

Skrypt blox-exporter napisany jest w Pythonie i służy do pobierania i archiwizowania treści wpisów na blogach umieszczonych na platformie Blox.pl. Skrypt można pobrać z działu Downloads projektu (znaleźć tam można również skrypt dropbox-index), lub z repozytorium Subversion. Po ściągnięciu wystarczy skrypt uruchomić, zapytani zostaniemy o login i hasło do Bloxa, następnie musimy potwierdzić chęć pobrania naszych blogów. Pełna instrukcja obsługi wyświetli się po wywołaniu skryptu z --help

Po uruchomieniu w bieżącym katalogu utworzona zostanie struktura plików podobna do poniższej:

/nazwa_bloga
/2010
    /01
      /tytul_notki.html
  /index.html
  /resources.html

Plik index.html zawiera spis wszystkich wpisów (wraz ze szkicami) w kolejności chronologicznej. Plik resources.txt zawiera spis zasobów (wszystkie użyte obrazy i pliki z zasobów Blox linkowane we wpisach). By je pobrać polecam użycie programu wget. Wykonanie polecenia:

wget -i resources.txt -P resource

Spowoduje pobranie wszystkich wyszczególnionych w resources.txt plików do folderu /resource

Skrypt testowałem na Ubuntu z Pythonem 2.5 oraz na Windows z Pythonem 2.6. Niestety pod Windowsem są problemy z wyświetlaniem polskich znaków w konsoli i szczerze powiedziawszy na razie nie chce mi się szukać rozwiązania, te kilka "krzaczków" jakoś specjalnie nie powinno przeszkadzać.

Jeśli mi się będzie chciało (lub dostatecznie dużo osób wyrazi takie zapotrzebowanie) i znajdę trochę czasu to może w przyszłości dodam pobieranie tagów do notek, generowanie stron dla poszczególnych kategorii, eksport do BlogML i poprawię wygląd generowanych stron.

17:27, kosciak1 , Dev
Link Komentarze (6) »
środa, 07 kwietnia 2010

Do Vima podchodziłem już wiele razy. Po raz pierwszy zakończyło się jak w starym kawale1, zupełnie spanikowałem gdy żaden ze znanych mi skrótów klawiaturowych nie działał jak należy. Potem próba zrobienia tutoriala, dobrnąłem może do połowy. Jakiś czas później kolejna i kolejna. Z jednej strony przerażała mnie wizja nauki tych wszystkich dziwnych komend, z drugiej coś niesamowicie mnie w Vimie fascynowało i przyciągało. Wiedziałem, że w końcu uda mi się go zrozumieć, a może nawet pokochać.

Dawno, dawno temu...

ASR33
Zdjęcie autorstwa DanCentury na licencji CC-BY-SA

Dawno temu, gdy komputer zajmował spory pokój, a dinozaury chodziły po ziemi, do obsługi komputera używano dalekopisów (TeleTYpe). Użytkownik wpisywał na klawiaturze odpowiednie komendy, a komputer za pomocą drukarki wypluwał odpowiedź. Właśnie z myślą o takim sposobie komunikacji z komputerem powstawały wierszowe edytory tekstu. Wierszowe, gdyż pracowało się z nimi na pojedynczych liniach tekstu.Takim właśnie edytorem był napisany na przełomie 1965 i 1966 roku QED.

Na jego podstawie Ken Thompson napisał edytor ed, standardowy edytor tekstowy systemu UNIX. To właśnie sposób implementacji wyrażeń regularnych w edytorze ed wpłynął na powstanie takich narzędzi jak sed (stream editor) czy grep (global/regular expression/print). Ale wróćmy do edytorów tekstu. Rozwinięciem ed'a był napisany przez Billa Joy'a ex (EXtended), zawierał on wiele zmian ułatwiających edycję plików. Najważniejszą z nich było wprowadzenie trybu wizualnego, który wkrótce przerodził się w samodzielny edytor. Tak właśnie, w 1976 roku, powstał vi.

Vi powstawał już dla terminali z monitorami (Bill Joy używał terminala Lear-Siegler ADM-3A), wyświetlanie więcej niż jednej linii tekstu było już więc możliwe. Nadal jednak ograniczeniem była prędkość ówczesnych modemów.

Filozofia ZenVi(m)

Dlaczego tyle miejsca poświęciłem (pre)historii? Bo wydaje mi się, że poznanie kontekstu w jakim powstawał edytor vi pozwala lepiej zrozumieć i docenić dlaczego wygląda on i zachowuje się akurat tak a nie inaczej. Dlaczego jest tak różny od edytorów jakie używane są obecnie.

Tym co najbardziej na początku dziwi to modalność. Po pierwsze trzeba sobie uzmysłowić, że wpisywanie tekstu zajmuje tylko część czasu poświęcanego na edycję tekstu, czy kodu. O wiele więcej czasu spędzamy na poruszaniu się po tekście szukając miejsc, które wymagają poprawek. Dzięki wydzieleniu osobnych trybów do poruszania się po tekście, wykonywania poleceń i wpisywania tekstu, każdy z nich może może posiadać własny zestaw skrótów klawiaturowych i komend. Można więc do poruszania się po tekście wykorzystać klawisze leżące tuż pod palcami (korzystając z vi palce cały czas leżą na rzędzie podstawowym), bez potrzeby tworzenia niewygodnych skrótów z użyciem Ctrl, Shift, Alt.

Drugi problem to mnogość komend. Gdy jednak rozpoczniemy naukę vi przekonamy się, że wszystkie te komendy są do bólu logiczne i bardzo łatwe do zapamiętania. Przyjrzyjmy się przykładom edycji tekstu. Przejście do trybu wpisywania do tekstu to i (jak insert), lub a (jak append), kasowanie słowa to dw (jak delete word), zmiana 3 słów to c3w (jak change 3 words). Poruszanie się po tekście jest równie proste. Przejście do kolejnego słowa to w (jak word), na koniec słowa e (jak end), poprzednie słowo to b (jak back). I tak jest praktycznie ze wszystkimi komendami. Prościej chyba się nie da.

Obsługa vi to tak na prawdę rozmowa. Jak w powyższym przykładzie zmiany słów po prostu mówimy (i to praktycznie pełnym zdaniem!) co chcemy zrobić. Zmień znak, zmień tekst do końca linii, kasuj 2 słowa, kopiuj zdanie, kopiuj linię, idź do następnego zdania, idź do poprzedniego akapitu, ustaw wcięcie dla bloku tekstu objętego nawiasami klamrowymi, przejdź do kolejnego wystąpienia znaku. Wykonujemy polecenie na zakresie tekstu wskazanym przez ruch, lub na obiekcie tekstowym. Zamiast skakać strzałkami pomiędzy znakami możemy operować logicznymi fragmentami edytowanego tekstu. Jednym słowem maksymalna efektywność minimalnym kosztem.

Do tego możliwość zapamiętywania miejsc w tekście, wiele schowków, obsługa wyrażeń regularnych, rozbudowane komendy edytora ex, możliwość tworzenia makr, wielkie możliwości konfiguracyjne i gigantyczna baza pluginów. To wszystko sprawia, że vi jest bardzo uniwersalnym edytorem, który można dostosować do praktycznie każdego zadania. Do tego Vim dodaje szereg nowych możliwości, jak choćby możliwość pracy na wielu plikach jednocześnie (dzielenie okna, praca z kartami).

Jak się nauczyć?

Przede wszystkim nie można się bać vim'a. Owszem, wymaga on trochę czasu na zrozumienie sposobu działania, lecz nie jest taki straszny jak mogłoby się wydawać. Wystarczy kilka razy przerobić vimtutor, by nauczyć się podstaw pozwalających na swobodne poruszanie się po pliku i podstawową edycję. Potem zerknąć na ściągawkę oraz to wprowadzenie do vima. W wolnych chwilach dobrze jest też przeczytać sobie :help (świetnie napisany!). Choć i tak najważniejszy by po prostu zacząć używać vim'a na codzień.

________________
1 Jak wygenerować losowy ciąg znaków? Posadzić laika przed Vim'em i kazać mu wyjść z programu. (powrót)

czwartek, 01 kwietnia 2010

W komentarzach do wpisu o Vimperatorze jeden z czytelników zwrócił uwagę na poważny problem na jaki napotyka się każdy, kto lubi obsługiwać Firefoxa za pomocą skrótów klawiaturowych. Umieszczone na stronach obiekty flash "wykradają" obsługę klawiatury i skróty klawiaturowe przeglądarki przestają działać. By odzyskać kontrolę trzeba chwycić myszkę i kliknąć gdzieś poza flashem. Można też zasymulować taką czynność.

Skrypt Escape Flash

Jak się okazuje na Linuksie można znaleźć narzędzia rozwiązujące wszelkie problemy. Pisząc skrypt Escape Flash wykorzystałem xdotool, narzędzie pozwalające na automatyzację obsługi Xów. Za jego pomocą możemy poruszać wskaźnikiem myszy, wykonywać kliknięcia, symulować obsługę klawiatury, oraz wykonywać różne operacje na oknach i pulpitach. W użyciu jest jeszcze xwininfo z pakietu x11-utils do pobrania informacji o położeniu okna.

Najnowsza wersja skryptu dostępna jest w repozytorium, by pobrać na dysk należy kliknąć View raw file po prawej i zapisać. Teraz wystarczy nadać skryptowi prawo do uruchamiania i przypisać mu skrót klawiaturowy w systemie. Jeśli ktoś korzysta z Compiza może w Compiz Config Settings Manager wybrać General settings, następnie przejść do karty Commands i tam w sekcji Commands ustawić ścieżkę do skryptu, a w sekcji Key bindings ustawić właściwy skrót klawiaturowy.

Skrypt po wywołaniu wykonuje kliknięcie w lewym górnym rogu bieżącego okna i przywraca początkową pozycję kursora myszy.

A co z Windowsem?

W systemie Windows też nie powinno być problemu z napisaniem podobnie działającego skryptu symulującego kliknięcie w okno przeglądarki. Podejrzewam, że najprościej będzie do tego użyć AutoHotKey lub AutoIt, które dają duże możliwości automatyzowaia obsługi systemu.

15:32, kosciak1 , Hacks
Link Komentarze (1) »
środa, 31 marca 2010

Stało się, po kilku dniach używania Vimperatora nie wyobrażam już sobie Firefoxa bez niego. To naprawdę potężne narzędzie potrafiące zastąpić wiele dotychczas używanych rozszerzeń. Dziś parę słów o konfiguracji i kilku sztuczkach, jeszcze bardziej ułatwiających surfowanie.

.vimperatorrc

Plik .vimperatorrc służy do konfigurowania Vimperatora. Moje ustawienia Vimperatora można znaleźć w repozytorium w /configs/.vimparatorrc (jeśli ktoś chciałby ściągnąć na dysk może kliknąć "View raw file" po prawej). Najważniejsze elementy mojej konfiguracji:

set nextpattern=\\bnastępn,\\bdalej,\\bnext,^>$,^(>>|»)$,^(>|»),(>|»)$,\\bmore\\b
set previouspattern=\\bpoprzedni,\\bwstecz,\\bprev|previous\\b,^<$,^(<<|«)$,^(<|«),(<|«)$

Dzięki temu skróty ]] oraz [[ powinny prawidłowo przenośić do następnej lub poprzedniej strony również na stronach w języku polskim.

set "hinttags=//*[@onclick or @onmouseover or @onmousedown or @onmouseup or @oncommand or @class='lk' or @role='link' or @role='button' or @role='option'] | //input[not(@type='hidden')] | //a | //area | //iframe | //textarea | //button | //select | //xhtml:input[not(@type='hidden')] | //xhtml:a | //xhtml:area | //xhtml:iframe | //xhtml:textarea | //xhtml:button | //xhtml:select | //div[contains(@class,'J-K-I J-J5-Ji')]"

Oraz takie samo ustawienie zmiennej extendedhintatgs - rozszerzenie elementów, dla których dostępne są podpowiedzi. Głównie chodzi tu o strony silnie AJAXowe.

autocmd LocationChange .* js modes.passAllKeys = /(www\.google\.com\/reader|mail\.google\.com)/.test(buffer.URL)

Pozwala na automatycznie przejście w tryb PASS THROUGH dla Gmaila i Google Readera.

javascript <<EOF
(function(){
var feedPanel = document.createElement("statusbarpanel");
feedPanel.setAttribute("id", "feed-panel-clone");
feedPanel.appendChild(document.getElementById("feed-button"));
feedPanel.firstChild.setAttribute("style", "padding: 0; max-height: 16px;");
document.getElementById("status-bar")
.insertBefore(feedPanel, document.getElementById("security-button"));
})();
EOF

Ikona kanału RSS będzie się pojawiać obok adresu w pasku stanu (nie trzeba już sprawdzać za pomocą :pageinfo czy strona posiada zdefiniowane kanały).

Oraz oczywiście kilka dodatkowych mapowań klawiszy by było jeszcze wygodniej.

Pluginy

Pluginy do Vimperatora można znaleźć tutaj oraz tutaj. Po ściągnięciu należy umieścić je w katalogu .vimperator/plugin i zresetować Firefoxa (jeśli ktoś wie jak przeładować pluginy Vimperatora bez resetu niech da mi znać). Pluginy to po prostu kod JavaScript, nic więc nie stoi na przeszkodzie by napisać własne rozszerzenia.

Sam przygotowałem prosty plugin dodający komendy pozwalające na otwarcie paska narzędziowego Web Developer, okienka HttpFox, oraz faivconizowania otwartych kart. Dzięki temu mogę spokojnie wyłączyć pasek menu oraz usunąć niepotrzebne elementy na pasku statusu za pomocą Organize Statusbar.

Zestaw kolorów i ostylowanie paska kart

W folderze .vimperator/colors możemy umieścić pliki z definicjami kolorów dla samego Vimperatora (obecnie używany możemy zobaczyć wpisując komendę :hi), jak i zmieniające wygląda samego Firefoxa. Ja przygotowałem sobie styl kosciak-human. Zmiany to rozjaśnienie zbyt jaskrawych kolorów, ustawienie by pasek stanu był widoczny również w trybie Full Screen, przeniesienie paska kart na dół i ostylowanie go by przypominał Vimperatorowy pasek stanu (część kodu pożyczyłem ze stylu evening), przy zachowaniu kolorów motywu Human. Efekt można zobaczyć poniżej.

Vimperator ze stylem kosciak-human

W katalogu /configs/.vimperator/colors zamieściłem znalezione w sieci style. Większość z nich jest przeznaczona dla ciemnych motywów systemu.

Kilka tricków

Jeśli chcemy otworzyć kilka stron za jednym razem wystarczy, że ich adresy (lub słowa kluczowe) przedzielimy przecinkiem i spacją (lub innymi znakami określonymi w zmiennej 'urlseparator').

By otworzyć stronę z zakładek należy użyć komendy :bmarks [filter], filtrem może być fragment adresu, tytuł strony, tagi lub słowa kluczowe. Gdy już spis zakładek jest wyświetlony możemy użyć ;o, ;t lub ;b by otworzyć wybraną stronę w bieżącym oknie lub w nowej karcie.

Jeśli chcemy by polecenie zostało wykonane w nowej karcie (na przykład otwarcie pomocy z użyciem :help) wystarczy użyć komendy :tab

Do kopiowania i wklejania zawsze można użyć Ctrl-Insert i Shift-Insert, co przydaje się również gdy chcemy kopiować i wklejać tekst działając w linuksowej konsoli.

poniedziałek, 29 marca 2010

Dotychczas wydawało się, że rozwiązaniem wszystkich problemów tego świata jest Cloud Computing. Niestety, gdy już przeniesiono do chmury wszystko co tylko się dało (oraz kilka rzeczy, których się nie dało) okazało się, że część problemów pozostała nierozwiązana. Tak oto nastała moda na NoSQL. Chyba każda rozsądnie myśląca osoba przyzna, że relacyjne bazy danych są takie wczorajsze, a nowe czasy wymagają nowych rozwiązań. Czy aby jednak na pewno? Bawiąc się trochę BigTable na Google AppEngine mam pewne wątpliwości.

Szybkość i skalowalność

Jeśli wierzyć zapewnieniom ewangelistów NoSQL użycie nierelacyjnej bazy danych sprawi, że nasza aplikacja znacząco przyśpieszy, problem skalowalności zostanie na zawsze rozwiązany i nie straszne nam będą miliony użytkowników. Niestety w rzeczywistości przeciętny startup o milionach, czy nawet tysiącach użytkowników może tylko sobie pomarzyć. Nie czarujmy się, problem skalowalności jest na początku problemem całkowicie abstrakcyjnym. Na pewno jest o wiele więcej poważniejszych spraw, którymi należy się zająć zamiast zastanawiać się, czy nasza aplikacja podoła obciążeniu rzędu tysiąca żądań na sekundę.

Warto też dodać, że nie każda aplikacja skorzysta na bazie nierelacyjnej. Z moich doświadczeń z BigTable wynika, że o ile odczyty z bazy są dosyć szybkie, tak zapis już niekoniecznie. Jeśli aplikacja wykonuje bardzo dużo zapisów do bazy danych zysk może być niewielki. W dodatku mogą się pojawić problemy ze spójnością danych, jeśli wystąpią problemy z replikacją danych pomiędzy serwerami (uroki działania w chmurze). A nawet w przypadku aplikacji głównie odczytujących dane z bazy często lepszy efekt daje intensywne cache'owanie wyników zapytań. Rodzaj bazy danych schodzi więc wtedy na drugi plan.

Baza wiedzy

Kolejna sprawa, o której wiele osób zapomina to fakt, że właściwy schemat bazy danych i optymalne zapytania same się nie napiszą. Pracując z SQLem wystarczy otworzyć dowolną książkę, pogadać ze znajomym fachowcem od baz danych i już wszystko wiemy. Cała, wypracowana przez lata wiedza jest w zasięgu ręki. W przypadku NoSQL musimy wyrzucić do kosza sporą część dotychczasowej wiedzy. Zmuszeni jesteśmy do poruszania się trochę po omacku, eksperymentując na każdym kroku. Nagle okazuje się, że to co działało znakomicie w świecie relacyjnym tu nie ma zastosowania lub jest bardzo niewydajne. Wiele z nowych rozwiązań dla osoby myślącej SQLem nie będzie wcale takie oczywiste, a część wyda się wręcz odrobinę szalona. Na przykład denormalizacja danych - w świecie baz nierelacyjnych nie jest niczym niezwykłym.

Ograniczenia, ograniczenia

No dobra, korzystając z baz NoSQL zyskujemy lepszą skalowalność, brak sztywnego schematu bazy danych, sporą elastyczność, mniej problemów z mapowaniem danych w bazie do obiektów zdefiniowanych w kodzie i pewnie jeszcze kilka rzeczy, o których nie mam pojęcia. Ale pojawiają się ograniczenia. Czasem bardzo istotne. Po pierwsze bazy NoSQL nie są relacyjne. Może i jest to oczywiste, ale chyba nie wszyscy tak do końca zdają sobie sprawę, co to tak na prawdę oznacza. Całą obsługę relacyjności pomiędzy danymi (jeśli jest nam potrzebna) trzeba emulować w kodzie aplikacji, na wbudowane w bazę danych rozwiązania nie ma co liczyć. Po drugie często brak JOINów. Oczywiście, można się obejść bez JOINów w zapytaniach ale wymaga to odpowiedniego przygotowania modeli danych. Po trzecie ograniczenia w składni zapytań. W przypadku BigTable na Google AppEngine mamy dosyć ograniczoną możliwość sortowania i filtrowania danych. Potrafi to bardzo utrudnić pisanie wydajnych zapytań, a przecież rozliczany jestem z każdej milisekundy pracy procesora.

Dojrzałość rozwiązania

Na koniec warto wspomnieć, że bazy NoSQL są najczęściej rozwiązaniami stosunkowo młodymi. Co za tym idzie daleko im do dojrzałości, a więc i niezawodności, rozwijanych od lat baz relacyjnych. Trzeba być gotowym na odkrywania nowych błędów, napotykanie się na problemy, z którymi nikt wcześniej się nie zetknął.

NoSQL - czy warto?

Wszystko zależy od tego co tak na prawdę nasza aplikacja ma robić. Nie wszystko nadaje się do działania w chmurze z nierelacyjną bazą danych. Trzeba też zadać sobie pytanie czy koszt nauki nowych nierelacyjnych rozwiązań, oraz sposobów na obejście ograniczeń, nie przewyższy zysków jakie bazy NoSQL mogą nam dać.

16:08, kosciak1 , Dev
Link Komentarze (3) »
1 , 2 , 3 , 4 , 5 ... 39
Spis Treści
Kanały RSS
Add to Google
Add to Netvibes