13
stycznia
2010
Make, jak wiadomo, potrafi zautomatyzować wiele operacji związanych głównie z kompilowaniem oprogramowania. Ale nie tylko. Make (z pewnymi zgrzytami) można wykorzystać do budowania dokumentacji LaTeX.
Cały problem polega na specyfice make, które rekompiluje projekt w oparciu o daty modyfikacja jego składowych (gdy są nowsze niż końcowy plik). No i trochę na specyfice LaTeX, które generuje mnóstwo plików pomocniczych nie będących bezpośrednio zależnościami.
Bez owijania w bawełnę:
OPTS=-recorder -file-line-error -halt-on-error -interaction=errorstopmode -shell-escape
PDFLATEX=@nice -n 19 pdflatex
default: all
clean:
@rm -vf *.toc *.idx *.out *.aux *.ind *.ilg *.pdf *~ *.log *.fls *.rtf *.dvi
@echo "CLEAN"
%.pdf : %.tex
${PDFLATEX} ${OPTS} $<
${INDEX} $*
@echo "pass2"
${PDFLATEX} ${OPTS} $<
@echo "pass3"
${PDFLATEX} ${OPTS} $<
moje_testy: plik1.pdf plik2.pdf
dokumentacja: dokumentacja.pdf testy.pdf
all: dokumentacja moje_testy
Jak się tego używa? Po pierwsze musimy ustalić jak nazywa się nasz plik dokumentacji. Dajmy na to że jest to plik.tex. pdflatex zrobi z niego plik.pdf. Robimy do pliku wpis
plik : plik.pdf
i ... w sumie tyle :] Teraz wystarczy tylko
make plik
i tworzy się dokumentacja.
Resztą zajmie się regułka zapisana w liniach
%.pdf : %.tex
${PDFLATEX} ${OPTS} $<
${INDEX} $*
@echo "pass2"
${PDFLATEX} ${OPTS} $<
@echo "pass3"
${PDFLATEX} ${OPTS} $<
Która robi kolejno :
Dlaczego trzy razy pdflatex ? Jest to konieczne w sytuacji gdy używamy tabelek w dokumentacji oraz indeksu (generowanego przez makeindex z pliku utworzonego po pierwszym przebiegu pdflatex), konieczne jest kilka przebiegów pdflatex.
Aby sobie oszczędzić dodatkowe 0.5 sekundy wysiłku można zmodyfikować linijkę :
all: plik
co poskutkuje tym, że po wpisaniu samego make (bez parametrów) zrobi nam "plik.pdf" .
11
stycznia
2010
Od pewnego czasu popularnosc wsrod uzytkownikow playstation2 (i niektorych szczesliwych wlascicieli playstation3 ze wsteczna kompatybilnoscia z ps2) zyskuje narzedzie o nazwie open ps2 loader.
Program jest kontynuacja takich narzedzi jak hd loader i usb advance. Jezeli ktos nie zna - programy te sluzyly (a wlasciwie nadal sluza) do uruchamiania gier na konsoli z pamieci usb lub wewnetrznego dysku twardego (w starszych modelach). Open ps2 loader potrafi jedno i drugie oraz, co ciekawe, obsluguje tez uruchamianie gier z katalogow udostepnionych w sieci LAN (SMB aka "Udostepnianie plikow i drukarek" na windows).
Ale nie o tym chcialem pisac. I tak wszyscy wiedza do jakich celow 99% uzytkownikow uzyje tego narzedzia. Na pewno nie do grania w gry ktore trzyma sie na oryginalnych plytkach stojacych na polce.
Ciekawe jest to, ze efektem ubocznym rozwoju tego projektu jest powrot zainteresowania amatorskim programowaniem na playstation2, kilka nowych sterownikow (w tym wspomniany driver SMB) , oraz nowe narzedzie do zdalnego debugowania na ps2 (przez LAN); dostepne pod adresem <a href="http://bitbucket.org/misfire/ps2rd/wiki/Home">ps2rd). Calosc jest na otwartej licencji, dostepna pod adresem http://bitbucket.org/ifcaro/open-ps2-loader/wiki/Home .Trzeba sie tylko troche wysilic i zainstalowac sobie toolchain dla ps2 i skompilowac.
Sam program jest niewatpliwie kontrowersyjny, bo nie ma sie co ludzic - bedzie sluzyc do piracenia gier. Watpie zeby na tym etapie zaszkodzilo to playstation2, na ktore praktycznie nic nowego juz nie wychodzi. Kibicuje jednak projektowi - mialem swoje 0.5 sekund slawy w jego rozwoju i widze ze idzie w dobrym kierunku.
07
stycznia
2010
Swieżo zasłyszane, z rozmowy z klientem :
"Mam taką funkcję importową, od koleżanki którą będę wykorzystywał". Interpunkcja taka jak w oryginale.
04
stycznia
2010
Nie tak dawno miałem prosty problem : wypisanie kolumn z wybranych tabel wraz z typami i ew. dodatkowymi informacjami (czy da sie nullowac) :
Wiem ze na oracle mozna sobie w pl/sql developer puscic describe na tabelce, a w psql wpisac \d tabelka i szybko dostac wynik. Mi chodzi o rozwiazanie reczne ktore mozna
- wykonac na ~150 tabelach w krotkim czasie
- sformatowac recznie (kolejnosc kolumn itp)
- wykorzystac jako podzapytanie
postgresql:
SELECT
n.nspname||'.'|| c.relname as tabela,
a.attname as kolumna,
pg_catalog.format_type(a.atttypid, a.atttypmod) as typ,
a.attnotnull as null
FROM
pg_catalog.pg_attribute a,
pg_catalog.pg_class c
LEFT JOIN
pg_catalog.pg_namespace n
ON
n.oid = c.relnamespace
WHERE
c.relname = lower('TABELKA') AND
pg_catalog.pg_table_is_visible(c.oid) and
a.attrelid = c.oid AND
a.attnum > 0 AND
NOT a.attisdropped
ORDER BY a.attnum
oracle :
SELECT t.tablename,t.columnname,c.comments,
case
when t.datatype like '%CHAR%' then
t.datatype || '(' || t.datalength || ')'
when
t.datatype like '%DATE%' then
t.datatype
else
t.datatype || '(' || t.dataprecision || '.' || t.datascale || ')'
end as typ
from usertabcols t, usercolcomments c
where t.tablename=c.tablename
and t.columnname=c.columnname
and t.table_name ='tabela'
Wersja postgresql pokazuje poza nazwą, schematem i typem czy kolumna moze byc null, za to wersja oracle pokazuje komentarze do kolumn. Schemat inny niz public w wersji postgresql (jeszcze) nie działa :)
Pisanie pierwszego skryptu zajęło ponad godzinę. Drugiego - ~20 minut.
Postgresql jest szalenie skomplikowany w tym nieszczególnie wymyślnym przypadku, bo trzeba przebic sie przez mnostwo niskopoziomowych (i niezbyt obszernie opisanych) procedur, aby osiagnac cel. I tak dobrze, ze chociaz takie pgcatalog.formattype istnieje, inaczej już dawno bym się poddał . I tak podejrzewam że znajdzie się ktoś kto zrobi to w 3 linijkach, prościej i bardziej elegancko :]
btw. pierwszy wpis w nowym roku ;)
14 września 2011, 22:19:53 | klucz ssh na gitorious |
Od niedawna przyłapałem się na tym że na gitorious.org przestał działać mój klucz ssh. Próba ponownej instalacji klucza powodowała jego odrzucanie ( " ssh key invalid " ).
Problem polega na tym ze zamiast user@host na końcu klucza trzeba wpisać swój email jaki podaliśmy przy rejestracji w gitorious.org. Być może problem nie dotyczy wszystkich, ale u mnie było to jedyne działające rozwiązanie.
04 lipca 2011, 12:48:34 | Tunelowanie esx po ssh |
Szybka notatka na przyszłość; aby wbić się na serwer ESX za pomocą vSphere poprzez tunel SSH, trzeba przeforwardować porty 443, 902, 903 oraz dodać wpis do hosts postaci
127.0.0.1 esxhost
bez tego nie pójdzie. Posiadanie wpisu określającego 127.0.0.1 jako "localhost" też z jakiegoś powodu nie wystarcza i dostaje się tajemnicze informacje o nieprawidłowym hoście, braku łączności itp.
02 sierpnia 2010, 20:12:02 | [mini] nietypowy problem CUPS |
ERRDOS - ERRbadaccess (Invalid open mode.) opening remote spool Test Page
W takiej sytuacji należy w windows w wlaściwościach drukarki odznaczyć "drukuj bezpośrednio na drukarkę". Dziwne, ale zostawię to sobie tutaj na przyszłość.