życie zabija powoli :)

 

13

stycznia

2010

Prosty makefile dla LaTeX

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

open ps2 loader - ps2 homebrew wraca do łask?

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

prosty problem z sql, a jakie schody

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.data
type || '(' || t.datalength || ')'
when
t.data
type like '%DATE%' then
t.datatype
else
t.data
type || '(' || 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 ;)

 
 

Miniblog

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ść.