Przywrócenie przycisku wywołującego listę aplikacji w Androidzie

Niedawno zainstalowałem nową wersję Andorida 2.2 jak zwykle po takim kroku należy system skonfigurować. Postanowiłem dostosować pasek pozwalający m.in. na wyświetlenie listy aplikacji i dodać do niego możliwość wywołania innej aplikacji. Jest to dosyć proste, wystarczy wybrany skrót do aplikacji przytrzymać chwilę palcem a następnie przesunąć na wybraną pozycje paska. Niestety, jak to czasem bywa, palec się omsknął i aplikacji wylądował w miejscu przycisku pozwalającego na wyświetlanie listy zainstalowanych aplikacji:

Ikona Gmaila na pasku

Ikona Gmaila na pasku

I pojawił się problem: jak przywrócić odpowiedni przycisk. Na szczęście problem nie jest trudny do rozwiązania, i sprowadza się utworzenia odpowiedniego skrótu a następnie umieszczenie go ponownie na dawnym miejscu.

Instrukcja w kilku krokach:

  1. Należy przytrzymać palec na pustej części ekranu, aż wyświetli się menu pozwalająca na dodanie na pulpit nowej aplikacji i wybrać opcję Custom shortcut:
    Custom shortcut

    Custom shortcut

  2. Pojawi się okienko, które pozwoli na definicję skrótu, należy wybrać przycisk Pick your activity
  3. Z nowej listy wybrać pozycję Launcher Actions:
    Pick your activity

    Pick your activity

  4. Teraz czas na wybranie odpowiedniego przycisku: Open/close App Drawer:
    Launcher actions

    Launcher actions

  5. Zatwierdzenie i utworzenie skrótu:
    Zdefiniowany skrót

    Zdefiniowany skrót

  6. Teraz pozostaje tylko przeciągną nowo utworzony skrót na swoje miejsce na pasku:
    Odzyskane menu

    Odzyskane menu

Źródła

Tags: ,

Pakiet minted w praktyce – konfiguracja

Poniżej można znaleźć kilka informacji o sposobach użycia pakietu minted, pozwalającego na kolorowanie składni w Latexu.

Oznaczanie kodu źródłowego w dokumencie

Kod źródłowy można w przypadku tego pakietu włączyć na kilka sposobów, każdy może się przydać w określonych sytuacjach:

  • \mint – osadzenie pojedynczej linii kodu.
    Kod Latex Efekt działania
    1
    Osadzenie kodu \mint{java}|public class HelloWorld|
    Użycie mint

    Do oznaczenia kodu źródłowego można użyć praktycznie dowolnych znaków, które w nim nie występują. Można także dodać dodatkowe opcje konfiguracyjne.

  • minted – osadzanie większej ilości kodu

    Oznaczenie obszaru kodu źródłowego można zrealizować w następujący sposób:

    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    \begin{minted}{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    Użycie minted
  • listing – pozwala na otoczenia kodu źródłowego i dodanie jeszcze dodatkowego opisu i referencji do kodu
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Bardzo interesująca funkcję można
    znaleźć w przykładzie \ref{java:hello}

    \begin{listing}
      \begin{minted}[gobble=4]{java}
        private boolean hello() {
          return true;
        }
      \end{minted}
      \caption{Funkcja hello}
      \label{java:hello}
    \end{listing
    }
    Użycie listing

    Z takim sposobem wyświetlania kodu łączą się jeszcze dodatkowe polecenia:

    • \listoflistings – wyświetlenie listy wszystkich listingów
    • \renewcommand\listingscaption{Kod źródłowy} – przedefiniowanie standardowego podpisu pod kodem źródłowym
    • \renewcommand\listoflistingscaption{Lista kodów źródłowych} – przedefiniowawszy standardowego opisu do listy kodów źródłowych

Definicja własnych skrótów

Istnieje możliwość zdefiniowania własnych sposobów na oznaczanie kodu źródłowego. W połączeniu wyborem języka oraz zestawem domyślnie używanych opcji może to bardzo ułatwić wprowadzanie kodu źródłowego w ramach dokumentu i zapewni jego spójny wygląd.

  • \newminted – pozwala na definicję skrótu dla środowiska minted:
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    \newminted{java}{gobble=2,linenos}

    \begin{javacode}
      private boolean hello() {
        return true;
      }
    \end{javacode
    }

    % definicja dodatkowych opcji

    \begin{javacode*}{linenos=false}
      private boolean hello() {
        return true;
      }
    \end{javacode*
    }
    Użycie newminted

    Istnieje także możliwość definicji własnej nazwy dla środowiska:

    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \newminted[ja]{java}{frame=single}
    \begin{ja}
      private boolean hello() {
        return true;
      }
    \end{ja
    }
    Własna nazwa środowiska

Niektóry opcje konfiguracyjne

minted pozwala na użycie szeregu opcji konfiguracyjnych, które mają wpływ na sposób formatowania kodu źródłowego. Poniżej lista tych parametrów dla mnie najważniejszych.

  • baselinestretch (auto|dimension) – ustalenie odstępu pomiędzy wierszami:
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          baselinestretch=1.5
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    baselinestretch
  • firstline (integer) – pierwsza linia kodu źródłowego do pokazania, domyślnie wartość 1
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          firstline=2
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    firstline
  • lastline (integer) – ostatnia linia kodu źródłowego do wyświetlania, pozostałe będą ignorowane, domyślnie ostatnia linia
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          lastline=2
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    lastline
  • firstnumber (auto|integer) – numer pierwszej linii, jeżeli włączone jest ich numerowanie
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    7
    \begin{minted}[gobble=2,
          linenos,
          firstnumber=43
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    firstnumber
  • frame (none|leftline|topline|bottomline|lines|single) – format ramki wokół kodu xródłowego
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          frame=lines
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    frame
  • gobble (integer) – wycięcie określonej ilości znaków na początku kodu, przydatne aby niwelować wcięcia z kodu Latex
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    \begin{minted}[gobble=2]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    gobble
  • linenos (boolean) – dodanie numeracji do poszczególnych linii
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          linenos
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
  • samepage (boolean) – nie dzieleniu kodu między różne strony
  • showspaces (boolean) – zaznaczenie spacji (i u mnie nie zadziałało…)

Źródła

Tags: , , ,

Kolorowanie kodu źródłowego w Latex przy użyciu pygments

Do kolorowania (czy też może formatowania) kodu źródłowego można w przypadku Latexa używać pakietu listings. Zapewnia on całkiem spore możliwości formatowania kodu źródłowego, ale ma kilka wad:

  • pakiet ten nie rozumie składni kodu źródłowego, po prostu koloruje tekst wg wprowadzonych słów kluczowych
  • istnieją problemy z obsługą standardu UTF8 (do przeskoczenia, ale zawsze)

Ratunkiem na to może być użycie pakietu pygments napisanego w Pythonie i zintegrowanie go z Latexem przy użyciu pakietu minted.

Instalacja aplikacji pygments

Pierwszym krokiem będzie zainstalowanie pakietu pygments, który będzie odpowiedzialny za generowanie odpowiednio kolorowanej składni. W przypadku systemu Debian oraz Ubuntu wystarczy zainstalować pakiet python-pygments:

$ sudo aptitude install python-pygments

Instalacja pakietu minted

Teraz czas integrację pygments z Latexem. Będzie tutaj pomocny pakiet o nazwie minted. Niestety nie jest on dostępny w ramach pakietów dostarczany z Ubuntu, więc należy go zainstalować w ramach Latexa ręcznie. Poniżej krótka instrukcja jak można to zrobić:

  1. Pobranie plików.

    Pliki można pobrać w formie archiwum (ze strony projektu). Ja jednak wybrałem pobranie aktualnej wersji bezpośrednio z repozytorium (w wersji pakietowej znajduje się błąd, uniemożliwiający kompilacje dokumentacji na Linuksie: Issue 5):

    $ wget "http://minted.googlecode.com/hg/minted.ins" \
            "http://minted.googlecode.com/hg/Makefile" \
            "http://minted.googlecode.com/hg/README" \
            "http://minted.googlecode.com/hg/minted.dtx" \
            "http://minted.googlecode.com/hg/minted.sty"
  2. Kompilacja dokumentacji.
    $ make minted.pdf
    $ make clean
  3. Instalacja pakietu.
    $ sudo mkdir -p /usr/local/share/texmf/tex/latex/minted
    $ sudo cp minted.sty /usr/local/share/texmf/tex/latex/minted
  4. Instalacja dokumentacji
    $ sudo mkdir -p /usr/local/share/texmf/doc/latex/minted
    $ sudo cp minted.pdf /usr/local/share/texmf/doc/latex/minted

    Po instalacji pakietu i dokumentacji należy jesze upewnić się, że uprawnienia nadane plikom będą odpowiednie.

  5. Rejestracja nowych pakietów.
    $ sudo mktexlsr

Dzięki takiej instalacji pakiet będzie dostępny dla wszystkich użytkowników, także jego dokumentacja będzie dostępna poprzez polecenie:

$ texdoc minted

Kolorowanie składni

Aplikacja zainstalowana, moduł do Latexa także więc czas uruchomić i sprawdzić jak działa kolorowanie składni, przykładowy kod:

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

\begin{document}

  Fragment kodu Javy:

  \begin{minted
}[linenos,% numeracja linii
                 numbersep=5pt,% separator numeracji od tekstu
                 gobble=2,% domyślne wcięcie kodu
                 frame=lines,% linie ograniczające
                 framesep=2mm
                 ]{java}
  public class HelloWorld extends Hello {
    private final String STALA = "Tekst"

    public HelloWorld() {
      int zmienna = 5;
    }
  }
  \end{minted}
\end{document
}

Czas teraz na kompilację. Tutaj spotkała mnie niespodzianka, bo okazało się że polecenie pdflatex nie zadziałało:

$ pdflatex  -shell-escape kolorowo.tex

...
 ********************************************
 * XeTeX is required to compile this document.
 * Sorry!
 ********************************************.
...

Komunikat błędu całkiem jasny, ale jakoś nie słyszałem wcześniej o czymś co się nazwy XeTeX (a wielka szkoda, z tego co widzę oszczędziłoby mi to kilku problemów z polskimi znakami). Więc mała modyfikacja polecenia i wszystko powinno już działać:

$ xelatex -shell-escape kolorowo.tex

W wyniku działania tego polecenia powinno być wygenerowanie pliku kolorowo.pdf z ładnym kodem źródłowym. Należy pamiętać o użyciu przełącznika -shell-escape, dzięki czemu jest możliwe wywoływanie zewnętrznych aplikacji (w tym przypadku pygments).

Źródła

Tags: , , , , ,

Rozdzielenie logów z aplikacji do plików w serwerze JBoss 5

Standardowy sposób logowanie w ramach serwera JBoss 5 sprowadza się do zapisywania informacji o zdarzeniach do pliku server.log. Trafiają tam wszystkie zdarzenia, jakie mają zostać zalogowane.

Niekiedy jednak istnieje potrzeba separacji logowania danych z rożnych aplikacji do oddzielnych plików. W przypadku serwera JBoss do logowania używana jest biblioteka log4j a jej konfiguracja znajduje się w pliku jboss-log4j.xml. Bibliotekę tę można skonfigurować do logowania danych z danej aplikacji w jeden z dwóch sposobów:

  • logować informacje pochodzące z odpowiednich pakietów (rozwiązanie uniwersalne, wymaga tylko odpowiedniej konfiguracji biblioteki log4j)
  • logować informacje pochodzące z danej aplikacji – rozwiązanie korzystające z bibliotek JBossa, będzie działać tylko w ramach serwera aplikacji

Przedstawię obie metody na przykładzie logowania informacji pochodzących z aplikacji Admin Console.

Podział logowania ze względu na pakiety

Konfiguracja logowanie informacji o wybranych pakietach sprowadza się do kilku kroków:

  • konfiguracja pliku, do którego będą zapisywane logi oraz konfiguracja odpowiedniego formatu ich zapisu:
    361
    362
    363
    364
    365
    366
    <appender name="AdminConsoleLog" class="org.apache.log4j.FileAppender">
      <param name="File" value="${jboss.server.home.dir}/log/admin_console.log"/>
      <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
      </layout>
    </appender>
  • identyfikacja pakietów, z których informacje powinny być logowane – czyli najlepiej przejrzeć plik JAR z aplikacją i wypisać odpowiednie pakiety, w przypadku aplikacji Admin Console będzie to pakiet org.jboss.on.embedded
  • konfigurację logowania wybranych pakietów do odpowiednio wcześniej zdefiniowanego pliku:
    368
    369
    370
    371
    372
    373
    374
    375
    376
    <category name="org.jboss.on.embedded">
      <priority value="DEBUG" />
      <appender-ref ref="AdminConsoleLog">
    </category>

    <category name="org.rhq.core">
      <priority value="DEBUG" />
      <appender-ref ref="AdminConsoleLog">
    </category>

Co zrobić jednak z takimi sytuacjami:

  • aplikacja składa się z różnych bibliotek i chcemy także uzyskać z nich uzyskać logi – najprościej, dodać kolejny wpis w pliku jboss-log4j.xml z odpowiednią kategorią (w przykładzie powyżej logowanie z pakietu org.rhq.core)
  • ta sama biblioteka jest wykorzystywana w wielu aplikacjach, ale logować informacje chcemy tylko z jednej aplikacji – i tutaj jest kłopot, powyższy sposób spowoduje logowanie danych z każdej instancji biblioteki, nawet jeżeli nie jest ona związana z daną aplikacją. Być może dałoby się skonfigurować logowanie w ramach danej aplikacji, ale nie widzę możliwości konfiguracji tego na poziomie serwera JBoss (w ramach takiej konfiguracji logowania)

Podział logowania ze względu na aplikację

W ramach serwera JBoss istnieje jednak możliwość konfiguracji logowania na podstawie samej aplikacji, ale wymaga do kilku dodatkowych kroków:

  1. Aktualizacja bibliotek odpowiedzialnych w JBossie za logowanie to nowsze wersji.

    Do konfiguracji logowania na poziomie aplikacji w przypadku JBossa 5.1 będzie trzeba użyć klasy filtrującej logi o nazwie org.jboss.logging.filter.TCLMCFilter, która jest dostępna w wersji 2.2.1 biblioteki jboss-logging (w ramach serwera dostępna jest wersja 2.2.0). Aktualizacja sprowadza się do:

  2. Konfiguracja logowania na poziomie aplikacji.
    • Najpierw należy zdefiniować w pliku jboss-log4j.xml nową pozycję, w której podamy do z jakiej aplikacji logi nas interesują oraz gdzie mają zostać zapisane:
      378
      379
      380
      381
      382
      383
      384
      385
      386
      387
      388
      389
      390
      391
      <appender name="AdminConsole2Log" class="org.apache.log4j.FileAppender">
        <param name="File" value="${jboss.server.home.dir}/log/admin_console2.log"/>
        <param name="Threshold" value="DEBUG"/>
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
        </layout>
        <filter class="org.jboss.logging.filter.TCLMCFilter">
          <param name="AcceptOnMatch" value="true"/>
          <param name="DeployURL" value="admin-console.war"/>
        </filter>    

        <!-- end the filter chain here -->
        <filter class="org.apache.log4j.varia.DenyAllFilter"></filter>
      </appender>

      Definicja odpowiedniego filtru, który ma za zadanie wybranie tylko logów pochodzących z wybranej aplikacji znajduje się w linii 384, sama nazwa aplikacji znajduje się w linii 386.

    • Teraz należy dodać zdefiniowany obiekt appender do kategorii root:
      402
           <appender -ref ref="AdminConsole2Log"/>

Teraz pozostaje jeszcze start (lub restart) serwera JBoss i w plikach powinny znaleźć się odpowiednie logi z poszczególnych aplikacji.

Źródła

Tags: , , ,

Instalacja bazy danych PostgreSQL 8.4 w systemie RHEL 5.4

Prosty problem: jak zainstalować wersję 8.4 bazy danych PostgreSQL w RHEL 5.4. W tej wersji jest dostarczona wersja 8.1 całkiem już stara. Na szczęście z wersja RHEL 5.5. zawiera już nowszą wersję tej bazy danych (pakiet postgresql84-server), ale ja tej wersji używać nie mogłem.

  1. Instalacja repozytorium z PostgreSQL w systemie:
    # rpm -Uvh http://yum.pgsqlrpms.org/reporpms/8.4/pgdg-redhat-8.4-2.noarch.rpm
  2. Instalacja bazy danych w systemie:
    # yum install postgresql postgresql-server postgresql-contrib
  3. Inicjalizacja bazy danych:
    # service postgresql initdb
  4. Start bazy danych:
    # service postgresql start
  5. Automatyczny start podczas włączania systemu:
    # chkconfig postgresql on

Źródła

Tags: , ,