Archive for Wrzesień, 2010

Sprawdzanie pisowni w edytorze tekstu Vim

W edytorze tekstu Vim istnieje możliwość sprawdzania pisowni w języku polskim.

Włączenie tej funkcji nie jest trudne, w trybie command należy wydać następujące polecenie:

:setlocal spell spelllang=pl

Spowoduje ono włączenie polskiego słownika i automatyczne kolorowanie błędnych znaków.

Jeżeli jest to pierwsze uruchomienie tego polecenia, to należy jeszcze odpowiedzieć na kilka pytań dotyczących pobrania odpowiedniego słownika. Poniższe przykłady pochodzą z wersji edytora okienkowego (czyli z gVima), w przypadku Vima pytania są takie same, ale podawane są odpowiednio w linii poleceń. Podczas testu używałem Vima w wersji 7.2.330.

Pierwsze pytanie dotyczy prośby o wyrażenie zgody na utworzenie katalogu ~/.vim/spell. W katalogu tym będę trzymane odpowiednie słowniki dla używanych języków.

gVim: Utworzenie katalogu dla słownika

gVim: Utworzenie katalogu dla słownika

Oczywiście, podczas pierwszego uruchomienie słownik dla języka polskiego nie jest dostępny. Vim oferuje, że pobierze odpowiedni plik słownika.

gVim: Pobranie pliku ze słownikiem

gVim: Pobranie pliku ze słownikiem

Jeżeli słownik zostanie pomyślnie pobrany, to należy umieścić go w odpowiednim katalogu:

gVim: Zapisanie pliku ze słownikiem

gVim: Zapisanie pliku ze słownikiem

Po tych krokach sprawdzanie pisowni powinno działać. Istniej jeszcze możliwość pobrania pliku o rozszerzeniu sug. Vim także oferuje, że pobierze go samodzielnie. Niestety, przynajmniej w moim przypadku to nie zadziałało (ale sprawdzenie pisowni działa)

gVim: Pobranie pliku z rozszerzeniem sug

gVim: Pobranie pliku z rozszerzeniem sug

Użycie polecenia setlocal w powyższy sposób ma wpływ tylko na aktualnie otwarty dokument. Aby sprawdzenia pisowni działało w każdym otwieranym dokumencie, należy poniższą linię do pliku konfiguracyjnego Vima ~/.vimrc:

setlocal spell spelllang=pl

ja jednak chcę, aby sprawdzanie pisowni (i to w języku polskim) dotyczyło tylko i wyłącznie pików z rozszerzeniem tex. Można to zrobić, definiując odpowiednią komendę, wykonywaną podczas otwierania pliku o odpowiednim typie. Poniższy wpis należy umieścić w pliku ~/.vimrc:

au BufReadPost *.tex setlocal spell spelllang=pl

Teraz pozostaje jeszcze do opanowania odpowiednia klawiszologia (polecenia powinny być wydawane w trybie normalnym):

  • ]s – przeniesienie kursora na następne błędne słowo
  • [s – przeniesienie kursora na poprzednie błędne słowo
  • zg – zdefiniowanie słowa pod kursorem jako poprawne, zostanie ono zapisane w specjalnym pliku
  • zG – zdefiniowanie słowa pod kursorem jako poprawne, ale informacja o tym będzie przechowywana tylko w pamięci RAM
  • zw – zdefiniowanie słowa jako błędnego, zapisanie go w odpowiednim pliku słownika
  • zW – jak wyżej, ale informacje o tym będzie przechowywana tylko w pamięci RAM komputera
  • z= – wyświetlenie ponumerowaną listy podpowiedzi, jeżeli jakieś słowo pasuje, to należy podać jego numer

Więcej informacji można uzyskać w pomocy dołączonej do Vima:

:help spell.txt

Źródła

Tags: , ,

Wyświetlanie komunikatów w języku angielskim

W systemie używam na co dzień języka polskiego, ale bywają sytuację, gdy język angielski jest wg mnie dużo lepszym rozwiązaniem. Przynajmniej w dwóch przypadkach jest bardziej użyteczny:

  • wyświetlenie komunikatów o błędach – ułatwia to wyszukiwanie informacji na dany temat;
  • wyświetlanie stron MAN – mam wrażenie, że wersje angielskie są obszerniejsze i bardziej aktualne.

Za konfigurację języka wyświetlanych komunikatów odpowiada zmienna systemowa LC_MESSAGES. Pozostaje teraz tylko ustawienie tej zmiennej. Można to zrobić przynajmniej na dwa sposoby:

  • w pliku ~/.bashrc – jeżeli chcemy parametr ustawić tylko dla jednego użytkownika;
  • utworzyć plik o nazwie /etc/profile.d/angielskie_komunikaty.sh – jeżeli parametr ma zostać ustawiony każdemu użytkownikowi logującemu się do systemu.

Ja wybrałem drugą wersję, ale w każdym przypadku należy dodać do pliku następującą linię:

export LC_MESSAGES=C

Po ponownym zalogowaniu się do systemu zarówno komunikaty jak i strony MAN powinny być wyświetlane po angielski.


Ustawienie zmiennej LC_MESSAGES na język angielski w bashu spowoduje także zmianę języka używanego przez środowisko graficzne (w moim przypadku KDE automatycznie przeszło na język angielski). Jeżeli nam to przeszkadza, to należy poprzestać tylko na następnym punkcie.

Jeżeli jednak chcemy aby były po angielsku wyświetlane tylko strony MAN, to należy utworzyć odpowiedni alias, który zmodyfikuje ustawienia językowe dla polecenia man:

alias man='man -L C'

Druga możliwość zmiany języka, może być użyte w praktyce z każdą aplikacją (przedefiniowanie wartości zmiennej środowiskowej przed wywołaniem wybranego polecenia):

alias man='LC_MESSAGES=C man'

Powyższą linię można umieścić np. w pliku ~/.bashrc.

Tags: , ,

Problemy z siecią wifi po aktualizacji systemu do Ubuntu 10.10

Podkusiło mnie i zaktualizowałem Ubuntu do wersji 10.10 dobry miesiąc przed wydaniem. Generalnie poszło bez jakiś wielkich problemów, ale po restarcie systemu okazało się, że przestała mi poprawnie funkcjonować łączenie z siecią wifi.

Podczas próby nawiązywania połączenie otrzymywałem z aplikacji Wicd komunikat mówiący o podaniu błędnego hasła. Oczywiście, hasło jak najbardziej było poprawne. Po jakiś kombinacjach, restartach połączenie wróciło — ale po kilku sekundach następowało ponowne rozłączenie i próba inicjalizacji sieci, i tak bez przerwy.

Przejrzałem masę różnych forów, błędów i różnych rozwiązań, ale nic nie pomagało. Nawet próba ręcznej konfiguracji sieci czy też reinstalacji Wicd.

Przy kolejnej próbie przypomniałem sobie o pewnym wynalazku o nazwie network-manager, z którym rozstałem się już dawno temu. Sprawdziłem co się z nim dzieje i okazało się to strzałem w dziesiątkę. Usługa ta została podczas aktualizacji zainstalowana, uruchomiona i w najlepsze przeszkadzająca.

Teraz to wszystko graniczyło się do dwóch kroków:

  1. Zatrzymanie usługi:
    $ sudo stop network-manager
  2. Wyłączenie uruchamiania tej usługi podczas startu komputera, czyli należy zmienić plik /etc/init/network-manager.conf. Poniższy skrypt dokona odpowiedniej modyfikacji (zakomentuje linijki odpowiedzialne za start usługi), a oryginalny plik zapisze pod nazwą /etc/init/network-manager.conf.old (plik ten może potem zostać skasowany):
    $ sudo sed -i.old -e '/start/,+1s/^/#/' /etc/init/network-manager.conf

Nauczka dla mnie: jak nie używasz jakiegoś domyślnego rozwiązania, bądź przygotowany na problemy po aktualizacjach.

Tags: , ,

Włączenie interfejsu GWT w RHQ

Od wersji 3.0 platformy RHQ jest możliwość włączenia interfejsu zarządzającego przez przeglądarkę opartego o bibliotekę GWT. Nie jest on domyślnie włączony, i ciągle raczej można go traktować jako ciekawostkę, ale warto się z nim zapoznać.

Włączenie go nie jest wielce skomplikowane, sprowadza się do włączenie odpowiedniej opcji w konfiguracji oraz uruchomieniu odpowiedniego serwletu.

  1. Pierwszym krokiem będzie uruchomenie konfiiguracji RHQ, czyli Administration->System Configuration->Settings.

    Konfiguracja platformy RHQ

    Konfiguracja platformy RHQ

  2. W konfiguracji należy odszukać pole o nazwie RHQ General Configuration Properties i włączyć opcję o nazwie Enable Debug Mode oraz zapisać zmiany:

    Włączenie trybu debug

    Włączenie trybu debug

  3. Po zapisaniu nowej konfiguracji powinna pojawić się nowe w menu o nazwie Debug. Pozostaje wybrać z niej pozycje GWT GUI:

    Uruchomienie interfejsu GWT

    Uruchomienie interfejsu GWT

  4. Uruchomi się interfejs dostępowy napisany w GWT. A wygląda on mniej więcej tak:

    Przykładowy ekran z listą usług

    Przykładowy ekran z listą usług

Jest dostępna prezentacji opisująca możliwości nowego interfejsu: Customizable Dashboards.


Uwaga!

Interfejs GWT nie działał mi przy użyciu przeglądarki Chrome, nie wyświetlał się w oknie przeglądarki.

Źródła

Tags: ,

Kolorowanie składni Oracle SQL w Latex

Ostatnimi czasy musiałem umieścić w dokumencie utworzonym przy użyciu Latex przykłady zapytań dla bazy danych Oracle. W związku z czym sięgnąłem do pakietu listings, który pozwala na odpowiednie wyróżnienie słów kluczowych SQL.

Dokładny sposób włączenia tego pakietu i jego podstawowe parametry można znaleźć we tym wpisie: Kolorowanie składni Javy w systemie LaTeX przygotowanym przez Marcina Stachniuka. Dla Oracle deklaracja może wyglądać tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\documentclass[a4paper,12pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8x]{inputenc}

\lstset{language=SQL,
    basicstyle=\small,
    showstringspaces=false,
    tabsize=4,
    inputencoding=utf8x,
    extendedchars=\true,
}

\begin{document}

\begin{lstlisting}
    SELECT MIN(DISTINCT kolumna2)
    FROM table
    WHERE NVL(kolumna, 0) = 0
\end{lstlisting}

\end{document
}

Taki zapis spowoduje wygenerowanie zapytania SQL, gdzie słowa kluczowe oraz niektóre funkcje zostaną wypisane czcionką pogrubioną, pozostałem elementy natomiast zwykłą. Także nie wszystkie elementy Oracle SQL zostają poprawnie zakwalifikowane i część z nich wyświetla się w „zwykły” sposób.

Drugim problem są nazwy funkcji, ja chciałbym aby zostały one wyświetlone pochyłą czcionką a nie pogrubioną.

Najprostszym rozwiązaniem oczywiście byłoby dodanie odpowiednich słów kluczowych zarówno z deklaracji języka, oraz utworzenie odpowiedniej klasy dla funkcji, które byłby wypisywane kursywą. Nie można jednak zmienić przyporządkowania już przypisanych funkcji, także mogę np. wypisać funkcję NVL kursywą, ale już z funkcją MIN mi się to nie uda.

Pozostaje więc zdefiniowanie nowego języka, który będzie zachowywał się tak, jak tego oczekuję. Nie jest to trudne, tym bardziej, że dysonujemy już przecież definicją dla języka SQL, wystarczy tylko odpowiednio ją zmodyfikować.

Najpierw należy odszukujemy definicję języka SQL, w moim przypadku znajduje się ona w tym pliku /usr/share/texmf-texlive/tex/latex/listings/lstlang1.sty:

1393
1394
1395
1396
1397
1398
1399
1400
1401
%%
%% SQL definition (c) 1998 Christian Haul
%%                (c) 2002 Neil Conway
%%                (c) 2002 Robert Frank
%%                (c) 2003 Dirk Jesko
%%
\lst@definelanguage{SQL}%
    {morekeywords={ABSOLUTE,ACTION,ADD,ALLOCATE,ALTER,ARE,AS,ASSERTION,%
       AT,BETWEEN,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,%

Pozostaje teraz zdefiniować własny dialekt, skopiować definicję dialektu SQL oraz ją zmodyfikować. Poniżej moja propozycja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
\lstdefinelanguage[Oracle]{SQL}%
  {morekeywords={ABSOLUTE,ACTION,ADD,ALLOCATE,ALTER,ARE,AS,ASSERTION,%
      AT,BETWEEN,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,%
      CATALOG,CHAR_LENGTH,CHARACTER_LENGTH,CLUSTER,%
      COLLATION,COLUMN,CONNECT,CONNECTION,CONSTRAINT,%
      CONSTRAINTS,CONVERT,CORRESPONDING,CREATE,CROSS,CURRENT_DATE,%
      CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,DAY,DEALLOCATE,%
      DEC,DEFERRABLE,DEFERED,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,%
      DISCONNECT,DOMAIN,DROP,ELSE,END,EXEC,EXCEPT,EXCEPTION,EXECUTE,%
      EXTERNAL,EXTRACT,FALSE,FIRST,FOREIGN,FROM,FULL,GET,GLOBAL,%
      GRAPHIC,HAVING,HOUR,IDENTITY,IMMEDIATE,INDEX,INITIALLY,INNER,%
      INPUT,INSENSITIVE,INSERT,INTO,INTERSECT,INTERVAL,%
      ISOLATION,JOIN,KEY,LAST,LEADING,LEFT,LEVEL,LIMIT,LOCAL,%
      MATCH,MINUTE,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NOT,NULL,%
      OCTET_LENGTH,ON,ONLY,ORDER,ORDERED,OUTER,OUTPUT,OVERLAPS,%
      PAD,PARTIAL,POSITION,PREPARE,PRESERVE,PRIMARY,PRIOR,READ,%
      RELATIVE,RESTRICT,REVOKE,RIGHT,ROWS,SCROLL,SECOND,SELECT,SESSION,%
      SESSION_USER,SIZE,SPACE,SQLSTATE,SUBSTRING,SYSTEM_USER,%
      TABLE,TEMPORARY,THEN,TIMEZONE_HOUR,%
      TIMEZONE_MINUTE,TRAILING,TRANSACTION,TRANSLATION,%
      TRUE,UNIQUE,UNKNOWN,USAGE,USING,VALUE,VALUES,%
      VARGRAPHIC,VARYING,WHEN,WHERE,WRITE,YEAR,ZONE,%
      AND,ASC,CHECK,COMMIT,DESC,DISTINCT,GROUP,IN,% FF
      LIKE,NUMBER,ROLLBACK,VARCHAR2,% FF
      UNION,UPDATE,% RF
      ALL,ANY,CUBE,CUBE,DEFAULT,DELETE,EXISTS,GRANT,OR,RECURSIVE,% DJ
      ROLE,ROLLUP,SET,SOME,TRIGGER,VIEW},% DJ
   morendkeywords={BIT,BLOB,CHAR,CHARACTER,CLOB,DATE,DECIMAL,FLOAT,% DJ
      INT,INTEGER,NUMERIC,SMALLINT,TIME,TIMESTAMP,VARCHAR},% moved here
   sensitive=false,% DJ
   morecomment=[l]--,%
   morecomment=[s]{/*}{*/},%
   morestring=[d]',%
   morestring=[d]",%

  %% dodatkowe słowa kluczowe dla Oracla oraz definicja funkcji

    morekeywords={SAMPLE,SEED,ROWNUM,SYSDATE,IS,MINUS,WITH,START,%
      PARTITION,OVER,UNBOUNDED,PRECEDING,CURRENT,ROW,FOLLOWING,%
      MODIFY,RENAME,TO,REFERENCES,DISABLE,ENABLE,NOVALIDATE,EXCEPTIONS,%
      TRUNCATE,MERGE,MATCHED,SAVEPOINT,FORCE,OPTION,SEQUENCE,CYCLE,%
      INCREMENT,MINVALUE,MAXVALUE},
    classoffset=1,
    morekeywords={dbms_random,LOWER,UPPER,INITCAP,LPAD,RPAD,LTRIM,%
      RTRIM,TRIM,SUBSTR,SUM,MIN,MAX,INSTR,LENGTH,ROUND,TRUNC,POWER,%
      SQRT,SIGN,ABS,MOD,NULLIF,SIN,COS,TAN,SINH,COSH,TANH,REPLACE,%
      TRANSLATE,TO_CHAR,TO_NUMBER,DECODE,NVL,NVL2,COALESCE,AVG,%
      COLLATE,COUNT,STDDEV,VARIANCE,MEDIAN,MONTHS_BETWEEN,ADD_MONTHS,%
      LAST_DAY,NLSSORT,TO_DATE,GROUPING,RANK,DENSE_RANK,ROW_NUMBER,%
      FIRST_VALUE,LAST_VALUE,LEAD,LAG},
    keywordstyle=\textit,
  }[keywords,comments,strings]%

Oczywiście, każdy będzie musiał dostosować ten zapis pod siebie w zależności od funkcji które są używane, być może o niektórych słowach kluczowych SQL także zapomniałem. Należy pamiętać, że jeżeli jakieś słowo jest wypisywane pogrubionymi literami (a np. powinno być funkcją i chcemy aby zostało zapisane kursywą), to należy sprawdzić czy jest ono zdefiniowane w jakieś wcześniejszej linii. W takim przypadku należy je stamtąd usunąć.

Użycie takiego dialektu wygląda tak:

6
7
8
9
10
11
12
\lstset{language=[Oracle]SQL,
    basicstyle=\small,
    showstringspaces=false,
    tabsize=4,
    inputencoding=utf8x,
    extendedchars=\true,
}

Źródła

Tags: , ,