2010-01-17

Linux dla chemika, cz. 4 - SketchEl

Kiedyś pisałem o programie Chemtool; dzisiaj chciałbym napisać dwa zdania o podobnym programie do rysowania struktury 2D związków chemicznych, tj. o SketchEl.

SketchEl jest programem napisanym w Javie. Po ściągnięciu archiwum jar ze strony domowej programu, uruchamiamy go poleceniem:

java -jar SketchEl-1.47.jar


Program wygląda jak na obrazku poniżej.


2010-01-13

Ściąganie wykładów z sieci za pomocą programu wget

Niektóre instytucje naukowe umieszczają w sieci różnej treści wykłady z różnych, ciekawszych lub mniej ciekawych, dziedzin. A skoro umieszczają to publicznie, to można je sobie na własny użytek ściągnąć. Pół biedy kiedy to jest jeden czy dwa pliki, to je można "ręcznie" pobrać. Gorzej jest jeśli natrafimy na prawdziwą kopalnię wiedzy i chcemy ściągnąć dwadzieścia lub więcej plików. Wtedy z pomocą przychodzi nam dobrze znany wszystkim program wget.

Przykład 1. Załóżmy, że chcemy ściągnąć wykłady zapisane w plikach PDF i PPT rozmieszczone w odpowiednich katalogach (np. z podziałem na lata). Uruchamiamy wtedy ściąganie poleceniem:


wget -r -H -l 2 -A pdf,ppt -np http://jakiśtamserwer/


gdzie opcja -r oznacza oczywiście ściąganie rekurencyjne, -H zabranie przechodzenia między hostami w trakcie podążania przez wget między odnośnikami, -l 2 określa 2 poziom podążania przez wget między odnośnikami (należy go dobrać odpowiednio do struktury ułożenia danych które chcemy ściągać, aby nie ściągnęło się nam pół strony uczelni), -A pdf,ppt określa tylko jakie pliki chcemy ściągnąć, zaś opcja -np zabrania przechodzenia do wyższych poziomów hierarchii plików niż ta startowa w trakcie podążania przez wget między odnośnikami.

Przykład 2. Wykład istnieje w postaci pliku HTML z obrazkami i ewentualnymi odnośnikami.


wget -r -H -l 1 -k -np http://jakiśtamserwer/plik.html


Opcje w większości są takie same - opcja -k odpowiada za konwersję odnośników tak by wskazywały na dopiero co ściagnięte pliki lokalne. Parametr -l należy oczywiście dobrać odpowiednio ostrożnie.

Inne programy które mogą być pomocne to: aria2 (nie oferuje pobierania rekurencyjnego ale umożliwia pobieranie wielu plików na raz) i pavuk (oferuje ściąganie rekurencyjne, ale go za dużo nie testowałem).

2010-01-03

Usuwanie komentarzy z plików TeX za pomocą programu sed

Ostatnio miałem dość duży plik LaTeX-a z mnóstwem komentarzy które musiałem usunąć. Usunięcie komentarzy ręcznie wprawdzie jeszcze wchodziło w grę (w końcu plik miał tylko ponad 2000 linii, z czego - jak się później okazało - połowa to były komentarze), ale poszperałem tu i ówdzie i postanowiłem zaprząść do pracy program sed. Problem nie był wcale taki prosty jak mi się na początku wydawało (biorąc pod uwagę różne możliwe ułożenia znaku % w kodzie i różne jego znaczenia), ale w końcu chyba udało mi się go kompletnie rozwiązać.

Dla potrzebujących prezentuję kod (zapisany w skrypcie o nazwie delcom.sed):

/^%/d
s/\\\\\\%/\\\\\\@#per#@/g
s/\\\\%.*/\\\\/g
s/\\\\%*/\\\\/g
s/\\%/\\@#per#@/g
s/%.*$//g
s/%*$//g
s/\\@#per#@/\\%/g


Skrypt taki uruchamiamy poleceniem
sed -f delcom.sed plik1.tex > plik2.tex

Dla ciekawskich omówię poszczególne linie skryptu. Linia pierwsza usuwa komentarze zaczynające się na początku wiersza (to była najprostsza część konstruowania skryptu). Linia druga zabezpiecza sekwencje znaków \\\% (czyli przejście do nowej linii i znak procenta) zamieniając w kodzie LaTeX-a znak % na trudną do uzyskania w normalnym tekście sekwencję znaków @#per#@. Linia trzecia i czwarta usuwają komentarze które zaczynają się tuż za znakiem \\ (tzn. sekwencja znaków \\%), komentarze odpowiednio z co najmniej jednym znakiem oraz komentarze puste. Linia piąta, podobnie jak linia druga, zabezpiecza znak procenta który ma się ukazać w tekście (zamienia \% na \@#per#@). Linie szósta i siódma usuwają komentarze zaczynające się od znaku % i idące do końca linii (j.w. - komentarze z co najmniej jednym znakiem i komentarze puste). Linia ósma odbezpiecza znaki procenta które nie były komentarzami i miały ukazać się w tekście.

Jak na razie skrypt sprawdza się. I oby było tak zawsze.