Uzyskanie roota w telefonie G1 od Ery

Małe ostrzeżenie

Wszelkie modyfikacja telefonu mogą skutkować:

  • utratą gwarancji
  • zawsze jest szansa, że telefon przestanie działać

Także cokolwiek robisz z telefonem robisz to na własną odpowiedzialność. Jak się nie uda, trudno, nic na to nie poradzę.

Proponuję przed przystąpieniem do modyfikacji telefonu dokładnie przeczytać cały artykuł, łącznie z linkami które są w nim podane.

Podczas wyjazdu urlopowego pojawił mi się poważny problem – brak dostępu do Internetu. W hotelu nie ma, po kawiarenkach (nawet jakbym jakieś znalazł) biegać nie mam zamiaru. Oczywiście, od czego jest telefon, wystarczy podpiąć do komputera, skorzystać z porad umieszczonych w tym artykule Dostęp do Internetu za pomocą HTC G1 z systemem Android (Proxoid) i powinno działać.

Niestety, coś się zepsuło. Połączenie między moim komputerem a telefonem przy użyciu kabla USB ciągle jest restartowane, adb bez przerwy przestaje nasłuchiwać na wybranych portach, jednym słowem do pracy się to nie nadaje. Wymiana kabla USB nie przyniosła żadnych pozytywnych rezultatów…

Pozostało więc wymyśleć inną metodę udostępnienia połączenia internetowego, najlepiej przy użyciu sieci bezprzewodowej. A do tego potrzeb zrootowanego telefonu (czyli dostępu do użytkownika root).

Ponieważ „włamywanie” się do telefonu i uzyskanie dostępu do użytkownika uprzywilejowanego w praktyce sprowadza się do instalacji raz starej wersji systemu operacyjnego (posiadającej odpowiednie dziury w zabezpieczeniach) a następnie instalacji wersji docelowej, więc za jednym zamachem postanowiłem zaktualizować system Androida do wersji 2.1 w wydaniu CyanogenMod w wersjo 5.0.8. Wersje nowsze niestety ciągle znajdowały się w fazie beta.

Uzyskanie konta root

Zanim zaczniesz cokolwiek robić, upewnij się że zrobiłeś kopię wszystkich danych z telefonu oraz karty SD. Jak już skończysz wszystkie kroki to zostanie Ci w rekach czysty telefon oraz czysta karta SD.

Uzyskanie dostępu konta root daje szereg dodatkowych możliwości, te istotne z mojego punktu widzenia:

  • możliwość instalacji aplikacji wymagających do swojego działania użytkownika uprzywilejowanego (czyli np. udostępnienie połączenia internetowego poprzez sieć bezprzewodową)
  • możliwość instalacji nowych wersji systemu Andorid (nawet jeżeli oficjalnie nie są dostępne na danym telefonie)
  • możliwość tworzenie pełnej kopii bezpieczeństwa systemu
  • instalacja aplikacji na karcie SD (ważne w przypadku G1, który nie dysponuje szczególnie duża ilością pamięci)

Więcej informacji można znaleźć w tym artykule: Rooting Q&A.

Proces uzyskiwania użytkownika root sprowadza się do kilku kroków:

  1. Instalacji starej wersji systemu.
  2. Wykorzystanie błędów w systemie w celu uzyskanie użytkownika roo.
  3. Aktualizacja poszczególnych komponentów systemu i instalacja nowej wersji systemu operacyjnego
  4. Ponowna konfiguracja telefonu

Wygenerowanie pliku goldcard.img

Posiadam telefon HTC G1 wydany przez Erę z wersją Andorida 1.6. Musze w związku z czym zainstalować na nim starą wersję systemu operacyjnego (bodajże 1.1), ale w przypadku telefonów od Ery wymaga to odpowiedniego przygotowania karty SD. Więcej informacji na ten temat (w szczególności dla osób nie używających Linuksa) można znaleźć w tym artykule: ROOT dla HTC G1 – goldcard.

Najpierw należy wygenerować plik golden.img:

  1. Odczytanie zawartości pliku /sys/class/mmc_host/mmc1/mmc1:*/cid.
    W pliku tym znajduje się numer karty SD. Można to zrobić w następujący sposób:

    • użyć jakiegoś zarządce plików i odczytać ten plik
    • użyć aplikację o nazwie CIDConverter, która odczyta numer i wykona na nim odpowiednie operacja (o nich za chwilę)
    • otworzyć konsolę i wykonać polecenie:
      cat /sys/class/mmc_host/mmc1/mmc1:*/cid

    Dwa pierwsze sposoby są omówione w powyższym artykule, ja natomiast skorzystałem z aplikacji ConnectBot – jest to klient SSH, ale posiada także możliwość otworzenia konsoli znajdującej się na telefonie.

  2. Odczytany numer zapisać w formie liczb szesnastkowym, czyli podzielić go na pary znaków, powinien wyglądać tak:
    11 22 33 44 55 66 77 88 99 00 aa bb cc dd ee ff
  3. Odwrócić kod:
    ff ee dd cc bb aa 00 99 88 77 66 55 44 33 22 11
  4. Zamienić diwe pierwsze cyfry na zera i usunąć spacje:
    00eeddccbbaa00998877665544332211
  5. Powyższy numer wkleić na stronie Free HTC android goldcard generator. Strona ta generuje wygeneruje potrzebny plik golden.img na podstawie powyższego numeru i wyśle go na podany adres e-mail.

Po otrzymani pliku należy go zapisać na karcie SD. W moim przypadku karta ta została wykryta jako urządzenie /dev/sdb.

UWAGA!

Wybranie złego urządzenia i wydanie poniższej komendy może doprowadzić do zniszczenia wszystkich danych na wskazanym urządzeniu, więc należ się upewnić, że plik zostanie zapisany we właściwym miejscu.

Nalezy wydać komendę:

sudo dd if=golden.img of=/dev/sdb

Należy powyższe polecenie odpowiednio zmodyfikować podając ścieżkę do pliku golden.img oraz nazwę urządzenia będącego kartą SD. należy zwrócić uwagę na to, że należy odwołać się do urządzenia, a nie partycji.

Jeżeli wszystko poszło OK, dysponujesz odpowiednio przygotowaną kartą SD.

Downgrade systemu operacyjnego

Czas teraz na instalajce dziurawej, starej wersji systemu operacyjnego Android. Do wyboru są dwie, o nazwach RC7 oraz RC29. Wersja RC7 jest przeznaczona dla telefonów z Wielkiej Brytanii, natomiast wersja RC27 na telefonów ze USA. Ja korzystałem z wersji RC7.

Instalowana wersja pozwala na wykonywania dowolnych poleceń z uprawnieniami użytkownika root (cokolwiek będziemy pisali na klawiaturze, zostanie wykonane na konsoli z takimi uprawnieniami).

  1. Należy więc poprać odpowiedni plik archiwum i go rozkompresować.
  2. W wyniku powinniśmy otrzymać plik o nazwie DREAIMG.nbh. Proszę zwrócić uwagę na rozszerzenie, jest pisane małymi literami. W moim przypadku musiałem zmienić nazwę tego pliku (wielkość liter MA znaczenie). Następnie należy skopiować go na kartę SD, do jej głównego katalogu.
  3. Należy teraz wyłączyć telefon i włączyć go ponownie trzymając wciśnięty przycisk kamery. Powinno pojawić się szare tło i kolejne komunikaty. Teraz należy wcisnąć klawisz Action (słuchawka) i rozpocząć instalację systemu.

    Jeżeli z jakiś powodów nie nie udało się rozpocząć instalacji, może to oznaczać że blednie został odczytany numer karty SD lub też wersja systemu nie działa z naszym telefonem. Można spróbować pobrać wersję RC27 i sprawdzić czy uda się uruchomić instalację. Mi się udało ten krok przejść bez problemów.

  4. Po zakończeniu kopiowania telefon powinien się zrestartować i kontynuować instalację. Jeżeli pojawi się menu z bootloadera, to trzeba będzie nacisnąć kombinację klawiszy Home+Back w celu restartu systemu.
  5. Po uruchomieniu systemu należy skonfigurować dostęp do sieci internetowej oraz zarejestrować się.

Wczytanie nowej wersji pliku recovery.img

Teraz czas na magię, czyli na stałe uzyskanie dostępu do konta root:

  1. Najpierw należy pobrać pliku recovery-RA-dream-v1.7.0-cyan.img i następnie zapisać go na karcie SD w głównym katalogu pod nazwą recovery.img.
  2. Należy odszukać w markecie aplikację o nazwie telnet. Pozwoli ona na uruchomienie serwera telnetd i następnie podłączenie do niego
  3. Teraz należy wykonać następujące polecenia:
    • dwa razy nacisnąć klawisz Enter
    • wpisać na klawiaturze telnetd i nacisnąć klawszi Enter (telefon wejdzie do książki telefonicznej, należy to zignorować), polecenie to spowoduje uruchomienie demona protokołu telnet
  4. Teraz należy uruchomić aplikację Telnet i wybrać opcję Connect to Serwer. Spowoduje to uruchomienie klienta protokołu telnet, czyli dostaniemy dostęp do konsoli na uprawnienia użytkownika root.
  5. Teraz należy wprowadzić następujące polecenie:
    1
    2
    3
    4
    mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
    cd sdcard
    flash_image recovery recovery.img
    cat recovery.img > /system/recovery.img

    Powinno to zainstalować plik recovery.img (pod warunkiem, że nie wyskoczy żaden błąd, w takim przypadku należy sprawdzić czy nie zostały popełnione jakieś literówki).

  6. Czas na restart telefonu. Mój telefon po restarcie nie uruchomił się, zdaje się że jest to normalne działanie. Należy wyłączyć telefon i włączyć go ponownie trzymając wciśnięty klawisz Home. Pojawi się menu bootloadera w którym należy wybrać pozycję Wipe i wyczyści system. Po tym kroku telefon powinien się uruchomić.

Po tych krokach powinniśmy dysponować już dostępem do konta uprzywilejowanego użytkownika i można przystąpić do instalacji docelowej wersji Androida.

Instalacja nowej wersji radia

Kolejnym elementem będzie instalacja nowej wersji radia. Tym razem na szczęście proces będzie już w miarę prosty:

  1. Należy pobrać najnowszą dostępną wersję radia, w moim przypadku jest to wersja 2.22.23.02
  2. Skopiować ją na kartę SD zmieniając nazwę na update.zip.
  3. Uruchomić telefon w trybie Recovery (czyli nacinać klawisz Home w momencie uruchamiania telefonu).
  4. Z menu wybrać pozycję Flash zip from sdcard a następnie plik update.zip. Potwierdzić chęć instalacji nowego pakietu.
  5. Zrestartować telefon.

Po tych krokach na telefonie powinna znajdować się nowa wersja radia i telefon gotowy jest już do instalacji nowej wersji systemu operacyjnego Android.

Źródła

Tags: , , ,

Tworzenie prezentacji przy użyciu LaTeX cz. 3: budowa prezentacji

We wcześniejszych wpisach przedstawiłem w jaki sposób utworzyć szkielet prezentacji w LaTeXu. Teraz czas na utworzenie właściwych slajdów. Od razu uprzedzę, znajdą się tu tylko same podstawowe informacje, akurat to co było mi potrzebne do utworzenia prezentacji o Subversion.

Konstrukcja slajdu

Slajdy w klasie Beamer są zawarte między dwoma tagami: \begin{frame} oraz \end{frame}. Tylko to co zostanie umieszczone pomiędzy nimi zostanie wzięte pod uwagę i na tej podstawie zostaną wygenerowane slajdy.

Generalnie wynikiem pojedynczej ramki (frame) jest utworzenie pojedynczego slajdu w pliku PDF. Nie zawsze jednak tak będzie, istnieją polecenia, których użycie spowoduje wygenerowanie większej ilości slajdów.

I tak wygląda podstawowy slajd:

Przykładowy slajd w LaTeXu

Jego definicja:

237
238
239
240
241
242
243
244
245
246
247
248
249
250
\begin{frame}[c]{Kiedy blokowanie jest potrzebne}
  Model kopiuj -- modyfikuj -- scal sprawdza się bardzo
  dobrze przy założeniu, że mamy do czynienia z plikami
  tekstowymi, które są łatwe w zarządzaniu i sprawdzaniu
  co się zmieniło.

  \pause

  W przypadku pracy z plikami binarnymi, których nie da się
  łatwy czy też nawet automatyczny sposób scalić, przydatne
  może być blokowanie plików przed rozpoczęciem ich
  modyfikacji.

\end{frame
}

Slajd ten jest zbudowany w nastepujący sposób:

  • \begin{frame} – rozpoczęcie slajdu
  • [c] – mówi, że zawartość slajdu ma zostać wycentrowana na środku, można też użyć [t] mówiącego, że zawartość slajdu ma zostać wyrównana do góry
  • {Kiedy blokowanie jest potrzebne} – tytuł slajdu, można także umieścić podtytuł w kolejnym nawiasie klamrowym, do dyspozycji są także dwa polecenie: \frametitle oraz \framesubtitle, które pozwalają na ich ustawienie wewnątrz slajdu
  • zawartość slajdu, w tym przypadku po prostu akapit tekstu, poszczególne akapity muszą być rozdzielone przynajmniej dwoma znakami końca linii (jeden znak końca linii pozwala na dzielenie długiej linii w pliku źródłowym, ale przez LaTeX będzie on zastąpiony znakiem spacji)
  • \pause – powoduje, że zostanie zatrzymane wyświetlenie slajdu w momencie napotkania znaczka, w praktyce w tym przypadku spowoduje wygenerowanie dwóch stron w pliku PDF: pierwsza będzie zawierała tylko pierwszy akapit, druga oba
  • \end{frame} – koniec slajdu

Wypunktowania na slajdach

Jednym z najczęściej używanych elementów prezentacji są różnego rodzaju wypunktowania. W przypadku tworzenia prezentacji mamy można zdefiniować ich trzy rodzaje:

  • lista
  • numerowane
  • użycie definicji do numerowania

Lista wartości

Przykładowy wygląd listy wartości:

LaTeX - lista wartości

LaTeX - lista wartości

I kod który odpowiada za wygenerowanie tej strony:

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
\begin{frame}{Czym jest repozytorium}
    \begin{itemize}
        \item scentralizowany system współdzielenia danych
        \item operacje jakie można wykonać na repozytorium:
        \begin{itemize}
            \item dodawanie plików
            \item usuwanie plików
            \item zmiany nazwy pliku
            \item przeniesienie pliku do innego katalogu
            \item zmiana właściwości
        \end{itemize}
        \item historia zmian
        \item odczyt danych przez klienta
    \end{itemize}
\end{frame
}

Nowe elementy, które się pojawiły:

  • \begin{itemize} – rozpoczęcie listy numerowanej
  • \item – nowy element listy
  • \end{itemize} – koniec listy numerowanej

Jak widać, listy można także zagnieżdżać poprzez ponowne rozpoczęcie definicji listy numerowanej. Jeżeli z jakiś powodów chcemy wyświetlić część elementów listy, lub wyświetlać je po kolei, to zawsze można w odpowiednim miejscu dodać polecenie \pause.

Lista numerowana

Tworzenie list numerowanych wygląda praktycznie tak samo jak tworzenie zwykłej listy (zmienia się tylko jej typ). Tak wygląda slajd w wybranym temacie:

LaTeX - lista numerowana

LaTeX - lista numerowana

I kod odpowiedzialny za jego wygenrowanie:

129
130
131
132
133
134
135
136
137
138
\begin{frame}{Zablokuj -- zmodyfikuj -- odblokuj}{Schemat działania}
    \begin{itemize}
        \item sposób działania:
        \begin{enumerate}
            \item zablokuj plik
            \item zmodyfikuj plik
            \item odblokuj plik
        \end{enumerate}
    \end{itemize}
\end{frame
}

Elementy nowe:

  • \begin{enumerate} – rozpoczęcie listy numerowanej
  • \item – kolejny element listy
  • \end{enumerate} – zakończenie listy numerowanej

Listy z wartościami definiowanymi

Można także stworzyć listę, w której będzie się podawało definicję, która jest opisywana:

LaTeX - lista definiowanych wartości

LaTeX - lista definiowanych wartości

Kod, który definiuje tę stronę:

340
341
342
343
344
345
346
347
\begin{frame}{Budowa repozytorium}
    Zalecany podział repozytorium na katalogi:
    \begin{description}[\texttt{branches}]
        \item[\texttt{trunk}] aktualna wersja danych (np. bieżący rozwój projektu)
        \item[\texttt{branches}] poszczególne odgałęzienia projektu
        \item[\texttt{tags}] oznakowane wersje
    \end{description}
\end{frame
}
  • \begin{description}[\texttt{branches}] – rozpoczęcie listy opisowej, w nawiasach [] można podać wartość najszerszego elementu, dzięki temu będzie możliwe odpowiednie ustawienie szerokości kolumny na wartości opisowe
  • \item[\texttt{trunk}] – kolejny element listy, w nawiasach [] podaje się wartość etykiety
  • \texttt{trunk} – wyświetlenie podanego tekstu (w nawiasach {}) przy użyciu czcionki o stałej szerokości znaków
  • \end{description} – koniec listy opisowej

Wstawienie grafiki

Kolejnym elementem często umieszczanym w prezentacjach są rożnego rodzaju obrazki. W prezentacji wyglądają one tak:

LaTeX - grafika na slajdzie

LaTeX - grafika na slajdzie

Kod, który generuje ten slajd:

98
99
100
101
102
103
\begin{frame}{Współdzielenie plików}{Pobranie plików z repozytorium}
    \begin{figure}[t]
        \includegraphics[height=0.62\textheight,keepaspectratio=true,clip=true,trim=0 0 0 100]{img/wsp_plik_1.png}
        \caption{Użytkownicy pobierają plik z repozytorium}
    \end{figure}
\end{frame
}

Znaczenie nowych elementów:

  • \begin{frame}{Współdzielenie plików}{Pobranie plików z repozytorium} – podanie tytułu i jednocześnie podtytułu slajdu
  • \begin{figure}[t] – oznaczenie, że będzie wstawiany obrazek, który zostanie wyrównany do góry (znacznik [t]
  • \includegraphics – wstawienie grafiki
    • height=0.62\textheight – ustawienie nowej wysokości obrazka, w tym przypadku to będzie 0,62 pomnożone przez wielkość miejsca na wprowadzenie tekstu
    • keepaspectratio=true – przy skalowania obrazka zachowaj proporcje
    • clip=true – obcięcie marginesów, należy ustawić aby działał parametr trim
    • trim=0 0 0 100 – zdefiniowanie marginesów do obcięcia
    • {img/wsp_plik_1.png} – ścieżka dostępu do grafiki
  • \caption – definicja podpisu pod obrazkiem
  • \end{figure} – koniec wstawianie obrazka

Tworzenie ramek

Można na prezentacji także umieszczać rożnego rodzaju ramki pozwalające na grupowanie informacji znajdujących się na slajdzie.

LaTeX - tworzenie ramek

LaTeX - tworzenie ramek

I kod pozwalający na wygenerowanie tego slajdu:

329
330
331
332
333
334
335
336
337
338
\begin{frame}{Utworzenie repozytorium}
    \begin{block}{Linia poleceń}
        \texttt{svnadmin create NoweRepozytorium}
    \end{block}
    \begin{block}{TortoiseSVN}
        \begin{figure}
            \includegraphics[scale=0.45,keepaspectratio=true]{img/20_tortoise_create_new_repository.png}
        \end{figure}
    \end{block}
\end{frame
}

Jak widać, za utworzenie ramki odpowiada konstrukcja \begin{block}{Linia poleceń}. Pozwala ona na zdefiniowanie ramki oraz jej tytułu.

Pojawia się także dodatkowa opcja w polecenie \includegraphics: scale=0.45. Pozwala ona na skalowanie obrazka o zadaną wielkość.

Wstawienie fragmentów kodu

Przy normalnym używaniu LaTeXa musimy uważać na obecność znaków specjalnych, które są w odpowiedni sposób przez niego interpretowane. Czasem istnieje potrzeba wstawienia fragmentu np. kodu źródłowego, który zawiera pokaźna ilość tych znaków specjalnych (np. przykład użycia jakiejś metody w LaTeXu). Przydatna wtedy jest możliwość wyłączenia interpretacji tekstu jako poleceń Tex.

LaTeX - wyłączenie interpretacji poleceń TeX

LaTeX - wyłączenie interpretacji poleceń TeX

I kod źródłowy, który pozwala na wygenerowanie powyższego slajdu:

445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
\begin{frame}[fragile]{Konflikty związane z plikami}{Zmiany w wewnątrz pliku}
    W przypadku wystąpienia tego rodzaju konfliktu w pliku
    źródłowym można znaleźć następujące linie:
   
    \begin{verbatim}
        < <<<<<< nazwa pliku
        twoje zmiany       
        =======
        kod pobrany z repozytorium
        >>>>>>> nr rewizji
    \end{verbatim}
   
    Można teraz tak zmodyfikować plik, aby najlepiej
    odzwierciedlał stan faktyczny.
\end{frame
}

Na co zwrócić uwagę:

  • \begin{frame}[fragile] – podczas definiowania slajdu należy ustawić parametr [fragile], włącza ona odpowiedni sposób interpretacji slajdu i pozwala na użycie poniższego polecenia
  • \begin{verbatim} – rozpoczęcie bloku, które ma zawierać wrażliwy tekst
  • \end{verbatim} – koniec bloku
  •  

Przykładowy projekt – prezentacja Subversion

Powyższe informacje wystarczyły mi do utworzenia prezentacji o Subversion. Poniżej link zarówno do pliku PDF z prezentacją, jak i do jej źródeł w LaTeXu:

Źródła

Tags: , , ,

Kodowanie polskich znaków w LaTeXu

Po ustawieniu kodowania pliku pisanego w LaTeXu na UTF8 genralnie nie ma problemów z polskimi znakami występującymi w treści prezentacji. Jednak zdarzało mi się, że występowały kłopoty jeżeli polskie znaki występowały np. w tytułach nagłówku, we właściwościach pliku PDF. Aby się one wyświetlił poprawnie, trzeba było je zapisać w formie zakodowanej.

Poniżej znajduje się tabela, w której znajdują się informacje jak zapisać poprawnie polskie znaki w formie zakodowanej:

Polska litera Kod TeX Polska litera Kod TeX
ą \k{a} Ą \k{A}
ć \'c Ć \'C
ę \k{e} Ę \k{E}
ł \l{} Ł \L{}
ń \'n Ń \'N
ó \'o Ó \'O
ś \'s Ś \'S
ż \.z Ż \.Z
ź \'z Ź \'Z

Źródła

Tags: , , ,

Automatyczna kompilacja pliku LaTeX, czyli o monitorowaniu zmian w plikach

Spotkałem się z następującym problemem: w momencie wykonania modyfikacji pewnych plików lub katalogów chciałem wykonać określoną akcję. W moim przypadku chodzi o automatyczne utworzenie pliku PDF na podstawie plików źródłowych stworzonych w LaTeXu.

W przypadku Linuksa mamy do dyspozycji podsystem jądra o nazwie inotify, który pozwala na powiadamianie aplikacji o różnych zmianach mających miejsce w ramach systemu plików. Ponieważ jest to moduł pracujący w przestrzeni jądra systemu, nie ma potrzeby skanowania systemu plików w celu poszukiwania zmian. Wystarczy jedynie zarejestrować aplikację, podać jakie zdarzenia i pliki (czy też katalogi) mają być monitorowane i o resztę będzie się troszczyć sam systemu operacyjny.

Oczywiście, to że jądro udostępnia jakąś usługę i istnieją odpowiednie biblioteki systemowe nie rozwiązuje problemu (chyba że piszemy własną aplikację). Znalazłem dwie aplikacje, które działają w przestrzeni użytkownika i pozwalają na wykorzystanie inotify:

  • incron – narzędzie to przypomina trochę crona, do działania wymaga zainstalowanego serwera oraz klienta w którym będzie można definiować reguły monitorowania i postępowania z plikami, pozwala ono na zdefiniowanie zarówno co ma być monitorowane o raz jakie akcje (np. jakie skrypty uruchomić) w momencie wykrycia zmian w systemie plików
  • inotify-tools – dwa polecenie, z których jedno pozwoli wyświetlić informacje statystyczne o modyfikacjach w systemie plików (inotifywatch), a drugie wyświetli informacje o zmodyfikowanych plikach (inotifywait)

W moim przypadku incron jest za dużym rozwiązaniem, nie potrzebują także ciągłego monitorowania wybranych katalogów, jedynie na czas pracy z LaTeXem. Idealnym rozwiązaniem okazało się użycie polecenia inotifywait. Nasłuchuje ono na zamiany w wybranych plikach czy katalogach i w momencie ich wystąpienia kończy swoje działanie jednocześnie wyświetlając informacje o tym, co zostało zmienione. Posiada także możliwość pracy w trybie ciągłego nasłuchiwania, czyli informuje nas o zmianach bez kończenia działania, ale tutaj funkcja ta nie będzie potrzebna.

Więc czas na konkrety: instalacja pakietu w Ubuntu:

# aptitude install inotify-tools

Teraz czas na mały skrypt, który będzie odpowiedzialny za uruchomienie nasłuchiwania oraz wykonywanie odpowiednich poleceń:

1
2
3
4
5
6
7
8
9
#!/bin/bash

MONITOR_COMMAND="inotifywait -q -e modify  --format '%w%f' --excludei '.*temp.*' ."

while true
do
        OUTPUT=`$MONITOR_COMMAND` && \
                pdflatex -output-directory=out main.tex
done;

Skrypt robi:

  • linia 3 – definicja wywoływania polecenia inotifywait:
    • -q – tryb cichy, nie wyświetla zbędnych informacji
    • -e modify – lista monitorowanych zdarzeń na plikach, tutaj tylko modyfikacja plików, ale można monitorować np. dostęp do nich, tworzenie, usuwanie, przenoszenie, zmiany metadanych
    • --format '%w%f' – format, w jakim ma być wyświetlona informacje o tym co się zmieniło, w tym przypadku nazwa pliku wraz z katalogiem, w którym się on znajduje
    • --excludei '.*temp.*' – jakich plików nie brać pod uwagę
  • linia 5 – rozpoczęcie pętli, nieskończonej
  • linia 7 – wywołanie polecenia inotifywait, polecenie to skończy działanie dopiero jak wykryje jakieś zmiany w monitorowanych plikach
  • linia 8 – wywołanie akcji, w moim przypadku kompilacja raportu

W zmiennej $OUTPUT znajdzie się lista zmodyfikowanych plików, więc w razie potrzeb można na niej wykonać określone akcje.

Skrypt ten będzie działał w nieskończoność, do momentu przerwania jego wykonywania. Dzięki niemu można mieć podgląd wygenerowanych dokumentów LaTeX prawie w czasie rzeczywistym.

Źródła

Tags: , , , , , ,

Tworzenie prezentacji przy użyciu LaTeX cz. 2: tworzenie struktury prezentacji

Po konfiguracji podstawowych narzędzi przyszedł czas na stworzenie prezentacji.

Proces tworzenia prezentacji można podzielić na kilka kroków:

  1. Utworzenie odpowiednich plików tekstowych i zdefiniowanie podstawowych parametrów prezentacji.
  2. Utworzenie struktury prezentacji.
  3. Utworzenie dokumentu PDF.
  4. Utworzenie poszczególnych slajdów.
  5. Dodanie dodatkowych informacji do slajdów.
  6. Utworzenie podręcznika, składającego się ze slajdów i notatek.

Wszystkie te punkty postaram się omówić w kolejnych wpisach, teraz zajmę się punktami 1, 2 i 3.

Utworzenie pliku z prezentacją

Pierwszym krokiem będzie utworzenie pliku tekstowego, w którym będziemy tworzyć prezentację. I tutaj mała uwaga. Najlepiej dla każdej prezentacji (artykułu) utworzyć osobny katalogu i w nim dopiero utworzyć plik. TeX podczas tworzenia pliku wynikowego tworzy sporo plików tymczasowych, co powoduje dosyć duży bałagan podczas pracy. Plik może mieć dowolną nazwę z rozszerzeniem tex.

W moim przypadku utworzyłem katalog o nazwie Subversion-jak-dziala oraz główny plik o nazwie main.tex.

Czas na zdefiniowanie podstawowych informacji w pliku TeX:

  • Definicja rodzaju dokumentu i klasy, która będzie odpowiedzialna za jego przetwarzanie. Tutaj definiujemy klasę Beamer, która zostanie użyta do przetwarzania dokumentu.

    Znacznik [t] zmienia domyślne ustawienie slajdu. W domyślnym ustawienie zawartość jest centrowana na środku ekranu, przy użyciu tego przełącznika wymuszamy przesunięcie slajdu do góry. Ustawienie to można zmienić potem w ramach pojedynczych slajdów (używając przełącznika [c]).

    1
    2
    % Rodzaj dokumentu
    \documentclass[t]{beamer}
  • Konfiguracja kodowania pliku i wprowadzanych znaków, włączenie UTF8.
    4
    5
    6
    % Wsparcie dla kodowania UTF
    \usepackage{ucs}
    \usepackage[utf8x]{inputenc
    }
  • Włączenie języka polskiego (czyli m.in. tłumaczenie stałych części prezentacji)
    8
    9
    10
    % Konfiguracja języka polskiego
    \usepackage[polish]{babel}
    \usepackage{polski
    }
  • Sposób kodowania czcionek
    13
    14
    % Konfiguracja kodowania czcionki
    \usepackage[T1]{fontenc}
  • Konfiguracja wyświetlania zarówno linków jak właściwości w dokumencie PDF. Jeżeli opcja unicode nie zostanie włączona, we właściwościach pliku PDF zamiast polskich znaków będą występować kwadraty. Nie ma to wpływu na samą prezentację.

    Domyślnie linki wyświetlana są przy użyciu czcionki o stałej szerokości znaków, zachowanie to można zmienić przy użyciu komendy urlstyle.

    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    % Konfiguracja sposobu wyświetlania linków w dokumencie
    \usepackage{hyperref}

    \hypersetup{
      % Włączenie tej opcji spowodowało poprawne wyświetlanie polskich literek we
      % właściwościach dokumentu PDF
      unicode=true,          % non-Latin characters in Acrobat’s bookmarks
      colorlinks=true,       % false: boxed links; true: colored links
    }
    % Wyświetlanie linków zwykłą czcionką
    \urlstyle{same}
  • Wybranie tematu, jaki ma zostać wykorzystany do tworzenia prezentacji. Nazwy tematów pochodzą od nazw rożnych miast. Lista dostępnych tematów jest dostępna na stronie Beamer Theme Matrix.
    28
    29
    % Domyślny temat używany do tworzenia prezentacji
    \usetheme{Warsaw}
  • Konfiguracja metryki dokumentu. Będzie ona później wykorzystana do tworzenia strony tytułowej.

    Definicja autora. Wartość w nawiasach kwadratowych to krótka nazwa autora (wykorzystywana w niektórych miejscach w szablonie), nazwa w nawiasach klamrowych to długa nazwa, tutaj podana łącznie z adresem mailowych. Adres mailowy jest zapisany przy użyciu czcionki o stałej szerokości znaków. We właściwościach należy zakodować odpowiednie polskie literki, jeżeli nie zrobimy tego, to w dokumencie PDF mogą pojawić się dziwne wartości (niezależnie od konfiguracji polskich liter). W tym wpisie Kodowanie polskich znaków w LaTeXu można znaleźć informacje o sposobach zapisywania polskich znaków.

    31
    32
    % Informacje o dokumencie
    \author[\L{}ukasz Stelmach]{\L{}ukasz Stelmach \\ \texttt{lstelmach@gmail.com}}

    Definicja tytułu prezentacji, również nazwy krótkiej i długiej, można także zdefiniować podtytuł:

    33
    34
    \title[Subversion]{Subversion - jak dzia\l{}a}
    \subtitle{Kr\'otka instrukcja obs\l{}ugi
    }

    Nazwa firmy (instytutu) twórcy prezentacji:

    35
    \institute{Stelmisoft}

    Data i miejsce powstania prezentacji:

    36
    \date{12/07/2010}

Tak wygląda budowa nagłówku dokumentu, definiująca zarówno podstawowe informacje o nim jak i jego wygląd.

Struktura prezentacji

Mamy już zdefiniowane podstawowe informacje o dokumencie, czas na rozpoczęcie pracy nad zawartością prezentacji. Zanim przystąpimy do tworzenia poszczególnych slajdów, należy zastanowić się nad konstrukcją samej prezentacji. Czyli po prostu trzeba zapisać to, co się chce powiedzieć.

Pierwszym elementem będzie rozpoczęcie tworzenia dokumentu za pomocą konstrukcji:

38
\begin{document}

Dokument kończymy taką komendą:

111
\end{document}

Wszystko co znajdzie się pomiędzy tymi tagami będzie traktowane jako część prezentacji (w pewnym uproszczeniu przynajmniej).

Pierwszym slajdem jaki utworzymy będzie strona tytułowa:

40
41
42
\begin{frame}
  \titlepage
\end{frame
}

Jak widać, dużo nie trzeba, a wygenerowana zostanie taka strona:

Subversion - Strona tytułowa prezentacji

Subversion - Strona tytułowa prezentacji

Jak można zauważyć, nowy slajd rozpoczynamy przy użyciu polecenia \begin{frame}. To co nastąpi po nim, mówi o wyglądzie slajdu. Polecenie \titlepage spowodowało wygenerowanie strony tytułowej opartej o podane wcześniej informacje, czyli autor, tytuł prezentacji i tak dalej.

Kolejnym elementem będzie zdefiniowanie struktury prezentacji, czyli podzielenie jej na szereg punktów i podpunktów. Pozwoli to na zaplanowanie prawidłowego przepływu informacji w prezentacji oraz umożliwi potem automatyczne generowanie spisu treści.

Do definicji podziału prezentacji na części dysponujemy trzema poleceniami: \section, \subsection oraz subsubsection. Korzystanie z ostatniego nie jest zalecenie, więc więcej się nim zajmować nie będziemy. Definicja pierwszej sekcji:

44
\section*{Spis treści}

W nawiasach klamrowych umieszczamy nazwę sekcji, która jednocześnie później pojawi się w generowanym spisie treści. Mała uwaga, umieszczenie znaku * powoduje, że ta konkretnie definicja sekcji akurat nie będzie brana pod uwagę podczas tworzenia spisu treści.

A oto jak można zdefiniować odpowiedni slajd ze automatycznym spisem treści:

46
47
48
49
\begin{frame}
    \frametitle{Spis treści}
    \tableofcontents[pausesections,hideallsubsections]
\end{frame
}

W definicji tej pojawiło się kilka nowych elementów. Polecenie \frametitle umożliwia zdefiniowanie tytułu slajdu. Istnieje także dodatkowe polecenie pozwalające na podanie podtytułu: \framesubtitle. Drugim poleceniem jest utworzenie spisu treści: \tableofcontents. Polecenie to dysponuje szeregiem opcji konfiguracyjnych, tutaj zostały wykorzystane dwie:

  • pausesections – powoduje, że każdy punkt będzie wyświetlany oddzielnie i w praktyce powoduje wygenerowanie dodatkowych stron w dokumencie PDF
  • hideallsubsections – w spisie treści nie zostaną uwzględnione podsekcje, czyli będzie zawierał tylko główne punkty prezentacji

Teraz jeszcze jeden przykład: definicja sekcji łącznie z podsekcjami oraz wyświetlenie spisu treści tylko dla danej sekcji:

61
62
63
64
65
66
67
68
\section{Modele współdzielenia plików}
\begin{frame}
    \frametitle{Spis treści}
    \tableofcontents[currentsection,hideothersubsections,sections={&lt;2-4| handout:0>}]
\end{frame}
\subsection{Proste współdzielenie plików}
\subsection{Zablokuj - zmodyfikuj - odblokuj}
\subsection{Kopiuj - modyfikuj - scal
}

Jak widać mamy tutaj definicję sekcji, następnie slajdu ze spisem treści i kolejne podsekcje. Pojawiają się także nowe parametry polecenia cci_latex]\tableofcontents[/cci_latex]:

  • currentsection – powoduje, że wszystkie sekcje poza aktualną będę wyświetlone bardziej wyblakłym kolorem, czyli aktualna sekcja zostanie zaakcentowana
  • hideothersubsections – zostaną wyświetlone wszystkie podsekcje tylko aktualnej sekcji
  • sections={<2-4| handout:0>} – wyświetli tylko wybrane sekcje w spisie treści, pomocne gdy punktów jest dużo i nie mieszczą sie na ekranie

A tak to się będzie prezentować:

Subversion - spis treści sekcji

Subversion - spis treści sekcji

Oto pełna postać pliku: main.tex

Utworzenie pliku PDF

Ostatnim elementem w tej części będzie utworzenie pliku PDF z prezentacją, tak abyśmy mogli sprawdzić jak wygląda szkielet szablonu. Jeżeli korzystasz z jakiegoś środowiska pracy z plikami TeX, to możesz użyć jego poleceń w celu kompilacji pliku a następnie wyświetlenia go w czytniku plików.

Drugim sposobem jest wydanie polecenia:

$ pdflatex main.tex

Wygeneruje ono szereg plików tymczasowych oraz wynikowy plik PDF.

Jeszcze mała uwaga: aby poprawnie stworzyć strukturę prezentacji w pliku PDF, będzie trzeba przynajmniej dwukrotnie wykonać kompilację plików źródłowych.

Po tych krokach powinniśmy dysponować pikiem main.pdf. Można w pliku sprawdzić, jak wygląda struktura prezentacji.

Istnieje także możliwość utworzenia wszystkich plików tymczasowych w wybranym katalogu, dzięki czemu będziemy mieli trochę większy porządek w katalogu z prezentacją. Poniższe polecenie wszystkie pliki tymczasowe (łącznie z plikiem PDF utworzy w katalogu out):

$ pdflatex -output-directory=out/ main.tex

Źródła

Tags: , , , , , , ,