duminică, 9 septembrie 2012

LaTeX: miscelaneu

Instalarea pachetelor LaTeX în contextul distribuției MiKTeX

Sînt multe modalităti de a instala un pachet LaTeX în MikTeX. Una din ele este prin intermediul aplicației care vine împreună cu MikTeX - Package Manager (Start/All Programs/MiKTeX/Maintance (Admin)/Package Manager (Admin)).

Tehnoredactare în Unicode (MikTeX)

În primul este nevoie de un mediu de tehnoredactare care poate "înțelege" (deschide) corect fișierele în Unicode. De exemplu Texmaker (din păcate TeXnicCenter 1.0 RC nu este capabil de așa ceva).
  1. Instalați pachetul "ucs".
  2. În antetul fișierului LaTeX adăugați rîndul "\usepackage[utf8x]{inputenc}"
În caz că apare eroarea următoare.

! LaTeX Error: File `uni-global.def' not found.Type X to quit or to proceed,or enter new name. (Default extension: def)Enter file name:! Emergency stop. ...ni-global.def \else\input{uni-global.def}

Descarcati varianta arhiv a pachetul-ui ucs.. Copiați directoriul "data" din acest arhiv în "C:\Program Files\MiKTeX 2.9\tex\latex\ucs".  Actualizați baza de date cu nume de fișiere în MiKTeX cu ajutorul aplicației MiKTeX Options (Start/All Programs/MiKTeX/Maintance (Admin)/Settings (Admin)).

PGF/TikZ și GNUPLOT (Kile)

În linii generale pentru a putea utiliza TikZ împreună cu GNUPLOT este nevoie de următoarele
două condiții:

  1. GNUPLOT să fie instalat pe calculator
  2. TeX-ului trebuie să i se dea permisiunea de a executa programe externe.

Condiția 1 poate fi trecută cu vederea ... pînă cînd ))).
Dacă nu este 2 vă veți confrunta cu mesaje de eroare de tipul

Package pgf Warning: Plot data file `XX.table' not found. on input line YY.

Pentru cazul Linux/Kile (Sistem de operare/Mediu de TeXnoredactare) se procedează după cum urmează. Parcurgeți următorul lanț de itemi de meniu: Settings/Configure Kile.../Tools/Build;
și adăugați în zona "Options:"  opțiunea pentru linia de comandă "-shell-escape".

Instalarea pachetelor LaTeX (Ubuntu)

Cel mai des pachetele LaTeX sînt distribuite sub formă de colecție de fișiere, adică reprezintă un directoriu care conține un anumit număr de fișiere. În acestă colecție obligatori veți găsi două fișiere: unul cu extensia ".dtx", iar altul cu extensia ".ins".   
Eu obișnuesc să instalez pachetele LaTeX în directoriul "~/texmf/tex/latex", iar procedura de instalare poate fi descrisă în linii generale prin următoarea consecutivitate de comenzi.

cp foo/ ~/texmf/tex/latex/
cd ~/texmf/tex/latex/foo/
latex foo.ins
texhash ~/texmf

Pachete LaTeX pentru documente PDF interactive

Nu m-aș fi gîndid că există astfel de pachete dacă nu citeam articolul Interactive PDFs with LaTeX. A fost o surpriză plăcută care demonstrează încă odată cît de multe se poate de făcut folosind LaTeX.

  • attachfile - oferă posibilitatea de incorpora fișiere în documentul PDF, de exemplu imaginile în original sau cod sursă de program etc;
  • movie15 - adăugarea de fișiere video, audio și 3D obiecte în documentul PDF;
  • pdfpages - inserarea fișierelor .pdf în documentul final.

Link-uri utile: tutoriale

Online tutorials on LaTeX (Mi-a plăcut mult materialul privitor la Box-uri: Several Kinds of Boxes)

Traducerea contextelor Definition, Theorem etc. in română

\usepackage[romanian]{babel}
\deftranslation[to=romanian]{Definition}{Definiție}

duminică, 22 aprilie 2012

http://86.106.213.22:8080/home?CPURL=

Pentru cei care au internet de la Moldtelecom.
Eu deseori mă confrunt cu o situație foarte incomodă: atunci cînd lansez navigatorului web (după un timp lung de inactivitate cu internetul) descoper toate paginile din ultima sesiune de lucru înlocuite cu pagina de start a router-ului de la Moldtelecom (Cisco Subscriber Edge Service Manager), iar în bara de adrese a navigatorului ceva de genu http://86.106.213.22:8080/home?CPURL=http%3A%2F%2Fwww.example.com%2Fetc.
Într-o lume perfectă după ce pagina de start a router-ului acceptă codul și parola pentru internet acesta ar trebuie să treacă automat la pagina deschisă anterior însă nu este așa.
Pentru a decodifica adrese de genul http%3A%2F%2Fwww.example.com%2Fetc recomand următorul instrument online URL Encoding (or: 'What are those "%20" codes in URLs?').

miercuri, 15 februarie 2012

Java: from finite to infinite

In Mathematics there are properties/relations that holds in finite cases, but stops to work in infinite cases.
In common life one can buy a printer made in China and print 5-10 copies per day and the printer will wok to the end of his/her life, but if he/she wil try to print more than 100 copies every day the printer will broke soon.
Mathematics, ordinary life ...? Let's talk about Java!

Case 1. Reading files.
for(File file : fileList) {
  LineIterator it = FileUtils.lineIterator(file);
  while (it.hasNext()) {
     String line = it.nextLine();
     // do something with line
  }
}

For a small number of files the above code will work like a charm, but for a very large fileList, after some time and in some circumstances (depending on CPU, RAM, version of Java etc) we will get IOException: Too many open files.

Case 2. Executing commands.

for(String command : commandList) {
  Process p = Runtime.getRuntime().exec(command, null);
  p.waitFor();
}

The result will be the same as in Case 1 with the same IOException: Too many open files.

Case 3. Requesting URLs

... coming soon...

Solutions.

The exceptions from Case 1  and Case 2 may be avoided with a simple finally block where we must dispose/close some of the used objects.
Here we have the solution for the Case 1

for(File file : fileList) {
  LineIterator it = FileUtils.lineIterator(file, "UTF-8");
  try {
    while (it.hasNext()) {
      String line = it.nextLine();
      // do something with line
    }
  } finally {
    it.close();
  }
}
And in Remember to Close Your Streams When Using Java's Runtime.getRuntime().exec() we have the solution for the Case 2.
for(String command : commandList) {
  Process p = null;
  try {
    p = Runtime.getRuntime().exec(command, null);
    p.waitFor();
  } finally {
    if(p != null) {
      IOUtils.closeQuietly(p.getOutputStream());
      IOUtils.closeQuietly(p.getErrorStream());
      IOUtils.closeQuietly(p.getInputStream());
  }
}

marți, 14 februarie 2012

LaTeX și blogger.com (sau curriculum blogger)

În căutarea unei soluții simple pentru afișarea fomulelor în articole am trecut prin mai multe insuccese, de exemplu http://watchmath.com/vlog/?p=438.
Pînă cînd nu am dat de acest articol MathJax in Blogger (II)
Extraordinar!

$\sqrt{x^2} = |x|$

\[\int_a^b f(x)dx = F(b)-F(a)\]

\[\frac{1}{1-\frac{1}{1-\frac{1}{1-\frac{1}{...}}}}\]

marți, 10 ianuarie 2012

Adevărul omorului de pe Nistru

Cunoaștem cu toții ca la 1 ianuarie 2012, in jurul orelor 7, a fost împușcat un cetățean al RM de un militar din detașamentul de pacificare a FR.

S-a discutat mult asupra acestui subiect. Dar semnele de întrebare încă mai ramîn.
A fost un act săvîrșit din imprudență, un act în care putem da vina pe Bacchus sau a fost un act bine gîndit și pus la cale cu un anumit scop?

Aici îmi vine in minte povestea cu orbii și elefantul (http://deladinu.wordpress.com/2012/01/10/orbii-si-elefantul-cum-crezi-va-fi-ales-presedintele-rm-eu-vreau-deja-anticipate/, http://www.delaomlaom.ro/2011/08/orbii-si-elefantul-poveste-hindusa-2/) pentru că vor exista unii care numai din cauza că soldatul care a împușcat este cetățean al FR vor da vina pe pacificatori. Alții luînd in considerație apartenența politică a victimei, ca fiind membru al echipei PLDM (http://unimedia.md/?mod=news&id=42920) vor da vina pe alianță etc. Adică, despre obiectivitate va fi greu de vorbit.

Dar să facem abstracție de dată, loc, cărei țări aparține cel ce a impușcat, cîte obstacole a trecut în viteză tînărul etc.

Ce ne rămîne?

Ne rămîne să conștientizăm faptul ca sîntem iarăși martori ai unui eveniment adevărul despre care nu-l vom afla, posibil că niciodată...