tag:blogger.com,1999:blog-80671382655653123952008-06-14T10:37:01.339+01:00informàticCrònicintratablenoreply@blogger.comBlogger16125tag:blogger.com,1999:blog-8067138265565312395.post-73926764884924082952007-11-28T10:44:00.001+01:002007-11-28T10:44:22.491+01:00EOFintratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-9969918156789211532007-10-28T10:46:00.000+01:002007-10-28T10:46:59.607+01:00FrankfurtDe quin tipus de llibres es va parlar a la Fira de Frankfurt? Es va parlar de llibres d'informàtica, potser? Doncs veient el Polònia de l'11 d'octubre sembla que podria ser que sí, tot i que realment sigui que no.<br /><br />A la següent imatge veiem a Carlos Latre fent de Pellicer, mentre parlava de la Fira de Frankfurt. Si ens fixem en els llibres que apareixen a dalt a la dreta veurem que alguns dels títols són: Java, J2EE, XML, Javascript, Ajax...<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Gjg7MdJXbs4/RyRaDIgoGdI/AAAAAAAAAOs/M73wAV3Gus8/s1600-h/polonia1.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_Gjg7MdJXbs4/RyRaDIgoGdI/AAAAAAAAAOs/M73wAV3Gus8/s320/polonia1.jpg" alt="" id="BLOGGER_PHOTO_ID_5126321285724903890" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Gjg7MdJXbs4/RyRaSIgoGeI/AAAAAAAAAO0/KiOwilOuC6M/s1600-h/polonia2.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_Gjg7MdJXbs4/RyRaSIgoGeI/AAAAAAAAAO0/KiOwilOuC6M/s320/polonia2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5126321543422941666" /></a><br />Evidentment, el Polònia és un programa d'humor.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-46691645990863668452007-10-18T13:02:00.000+01:002007-10-18T12:04:09.226+01:00Netbeans MatisseQuan es tracta de fer aplicacions d'escriptori amb swing qualsevol programador teòricament expert, en la seva incommensurable saviesa, et dirà que no utilitzis cap entorn gràfic. Que ho facis a mà. Malauradament no tothom té temps (ni ganes) de programar una interfície complexa d'aquesta manera. Per tant, sovint es fan servir eines gràfiques.<br /><br />Un dels arguments per a no fer-les servir és que el codi que generen no és òptim. De fet, això podria ser l'únic factor que em faria dubtar del seu ús. Però, la velocitat a la que pots obtenir bons resultats (i l'augment de velocitat dels processadors i de la capacitat de memòria) fa que utilitzi Netbeans per a crear GUI's en swing. <br /><br />Netbeans utilitza Matisse per a crear interfícies gràfiques. Realment, Netbeans ha millorat molt en aquest sentit gràcies a la incorporació de Matisse en la versió 5. Això sí, de vegades no és tan fàcil d'utilitzar com sembla a priori. Per a mostrar-vos-ho he fet un video, inspirat en Street Fighter II.<br /><br /><object codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab" height="368" width="512" classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616"><param name="autoplay" value="false"><param name="src" value="http://video.stage6.com/1752869/.divx" /><param name="custommode" value="Stage6" /><param name="showpostplaybackad" value="false" /><embed type="video/divx" src="http://video.stage6.com/1752869/.divx" pluginspage="http://go.divx.com/plugin/download/" showpostplaybackad="false" custommode="Stage6" autoplay="false" height="368" width="512" /></object><br /><br />He de provar altres eines...intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-7908098515343540852007-09-25T13:38:00.000+01:002007-09-25T12:39:38.166+01:00CommodoreLlegint <a href="http://barrapunto.com/articles/07/09/25/0817252.shtml">Barrapunto </a>m'assabento que algú s'ha entretingut a fer una recopilació dels <a href="http://crave.cnet.co.uk/0,39029477,49292857-1,00.htm">deu anuncis relacionats amb la tecnologia més ridículs de la història</a>. També hagués pogut sobreviure sense assabentar-me'n.<br /><br />Però d'entre aquests 10 anuncis n'hi ha un que m'ha arribat al cor. El de Commodore. Fixeu-vos que natural hi apareix la gent, sobretot la noia de després del tobogan d'aigua, per exemple.<br /><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/D_f3uIzEIxo"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/D_f3uIzEIxo" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br />I m'ha fet recordar els temps amb el meu <a href="http://intratable.blogspot.com/2006/03/museo-de-los-horrores-i-commodore-64k.html">Commodore 64</a>.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-58247979248725456222007-09-17T09:13:00.000+01:002007-09-17T08:13:34.612+01:00Canviar el password de l'usuari system d'OracleÉs molt simple.<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"><code><br />C:\Documents and Settings\intratable>sqlplus "/ as sysdba"<br /> <br />SQL*Plus: Release 10.2.0.1.0 - Production on Mar Jul 24 11:12:52 2007<br /> <br />Copyright (c) 1982, 2005, Oracle. All rights reserved.<br /> <br /> <br />Conectado a:<br />Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production<br />With the Partitioning, OLAP and Data Mining options<br /> <br />SQL> alter user system identified by noupassword ;<br /> <br />Usuario modificado.<br /> <br />SQL><br /></code></pre><br /><br />Tot i que aquí ho mostro per a Windows ha de funcionar igualment per a Linux. Això sí, des de Linux s'haurà de fer amb l'usuari oracle per a que les variables d'entorn siguin les correctes i per tenir permisos per a executar <code>sqlplus</code>.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-77377693650389120942007-07-18T09:55:00.000+01:002007-07-24T10:36:22.521+01:00Vacances immerescudesAquest blog és, pràcticament, l'ovella negra de tots els blogs que intento mantenir. Per tant, potser no es mereix vacances. De totes maneres, intentaré treballar en nous temes (alguns els tinc a mitges) de cara a ressuscitar-lo a partir del 17 de setembre.<br /><br />Salut!intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-17850649488580006662007-06-22T18:36:00.000+01:002007-07-24T10:36:29.669+01:00Nullsoft Scriptable Install SystemTenim una aplicació i la volem distribuir. Per fer-ho, ens agradaria poder proporcionar un únic fitxer que s'encarregués de la instal·lació. Existeixen varies utilitats per realitzar això, però poques gratuïtes. Una d'elles és <a href="http://nsis.sourceforge.net/Main_Page">NSIS</a> (Nullsoft Scriptable Install System), desenvolupat per la companyia del Winamp.<br /><br />Per a generar l'instal·lador amb NSIS haurem de generar un script en el seu propi llenguatge. És un llenguatge bastant potent que es pot complementar amb llibreries realitzades per altre gent per a realitzar tasques complexes. També permet utilitzar una gran quantitat d'idiomes, el català entre ells.<br /><br />Però si no voleu escriure un script des de zero (perquè us fa pal o perquè teniu pressa) poder podeu utilitzar un editor que es diu <a href="http://hmne.sourceforge.net/">HM NIS Edit</a> i que, a part de ser un editor específic per a aquest tipus d'scripts, té un assistent molt útil.<br /><br />El problema és que només funciona per a Windows. Per a linux he de provar altres programes que ja comentaré en el seu moment.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-57317460461771404292007-06-15T17:48:00.000+01:002007-07-21T08:30:24.978+01:00Problemes actualitzant Thunderbird a la 2.0.0.4Aquesta tarda m'ha aparegut un missatge al Thunderbird de Windows preguntant-me si volia actualitzar a la versió 2.0.0.4 (jo tenia la 2.0.0.0). Li he dit que sí. Ha començat a fer l'actualització però ha fallat dient alguna cosa semblant a que "no s'ha pogut actualitzar un o més fitxers" i també que ho tanqués tot.<br /><br />Ho fet però ha estat inútil. Llavors he decidir instal·lar manualment el Thunderbird, he anat a la pàgina i me l'he descarregat. En instal·lar-lo m'ha dit que no podia actualitzar el fitxer <span style="font-family:courier;"><span style="font-weight: bold;">mozMapi32.dll</span></span>. Així que he anat a <span style="font-family:courier;">c:\Archivos de programa\Mozilla Thunderbird</span> i l'he esborrat manualment.<br /><br />Llavors ha pogut continuar la instal·lació. Quan ha acabat, s'ha obert el Thunderbird 2.0.0.4 però em deia que tenia una instal·lació a mitges (l'anterior probablement). Li he dit que la tornés a executar (encara que, en principi, no calgués). I aquest cop ha funcionat correctament.<br /><br />Així que és possible que si us passa això, es pugui anar més ràpid eliminant directament el fitxer <span style="font-family:courier;"><span style="font-weight: bold;">mozApi32.dll</span></span>, en comptes de reinstal·lar com he fet jo.<br /><br /><span style="font-style: italic;">Nota (21/07/2007): Actualitzant de la versió 2.0.0.4 a la 2.0.0.5 m'ha succeït alguna cosa semblant. El missatge no era el mateix, però la solució sí: eliminar <span style="font-family: courier new;">mozApi32.dll</span></span>intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-70030564140546718192007-04-29T12:55:00.000+01:002007-04-29T11:55:28.759+01:00On cercar programes gratuïts (I)Molt sovint no volem pagar per fer servir un programa d'ordinador. Normalment mai ho volem fer, si es pot evitar. Per això us presento 2 llocs on podeu trobar programes gratuïts ja classificats per altra gent i així potser eviteu la temptació del pirateig.<br /><ol><li><a href="http://paraisoft.com">Paraisoft.com</a>: En aquest lloc web (disponible en català, castellà i anglès) s'hi pot trobar una bona selecció de programes gratuïts, classificats per categories. Era, fins avui, el lloc on jo cercava alternatives als programes comercials.</li><li><a href="http://www.osalt.com/">Open Source As Alternative</a>: és una pàgina en anglès molt més completa que l'anterior. A més, podeu cercar per programes comercials i us presentarà les alternatives Open Source. També té classificació per categories.</li></ol><br />Ambdós llocs web us ajudaran a trobar programes per a diferents sistemes operatius.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-60105062910822404502007-04-16T20:53:00.000+01:002007-04-16T19:53:47.448+01:00Frase (II)Llegit a la firma d'un missatge d'un fòrum:<br /><blockquote>In an open universe, who needs windows and gates ?</blockquote>intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-83363485894115395632007-03-29T20:10:00.000+01:002007-03-29T19:10:21.443+01:00Frase (I)Un Administrador de Sistemes de Windows és aquell que pensa que el "Desfragmentador de disco" no hauria d'estar a "Herramientas del sistema" sinó a "Entretenimiento".intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-91283770085183455552007-03-07T15:08:00.000+01:002007-03-17T22:13:14.843+01:00Proguard (II): Aplicacions web<a href="http://inforcron.blogspot.com/2007/02/proguard-i.html">Proguard</a> ens permet agafar com a entrada (i sortida) un fitxer .war, que és una forma habitual de distribuir una aplicació web escrita en java. El problema és que no té en compte els .jsp. Per això canvia noms de classes i variables a les que es fa referència des dels .jsp sense que aquests n'estiguin informats i, conseqüentment, l'aplicació no funciona ni per casualitat. No es troben les classes.<br /><br />De totes maneres podem aprofitar el Proguard d'una manera alternativa tenint en compte que perdrem, sobretot, ofuscació.<br /><br />0. Sigui P0 el projecte original, i suposem que les classes es troben al subdirectori WEB-INF/classes.<br /><br />1. Copiem el projecte P0 a un nou projecte (directori) PF.<br /><br />2. Exportem les classes del directori WEB-INF/classes de P0 a un projecte.jar<br /><br />3. Ara toca passar el projecte.jar pel ProGuard. Per fer-ho, però, hem d'afegir les següents línies al fitxer de configuració que utilitzarà el ProGuard:<br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>-keep class * {<br /> !private &lt;fields&gt;;<br /> !private &lt;methods&gt;;<br />}<br /><br />-keep interface * {<br /> !private &lt;methods&gt;;<br />}<br /></code></pre><br />El que estem dient amb les opcions anteriors és que volem que es mantingui el nom de tot allò que no sigui privat. Els mètodes privats, per exemple, només es poden utilitzar dins de la mateixa classe i, per tant, no hi ha cap problema en que ho canviï. La resta, en canvi, els ha de mantenir per a que s'hi pugui accedir des dels JSP, que ProGuard no modifica.<br /><br />4. Després passem projecte.jar pel proguard amb aquest últim canvi a la configuració i n'obtenim un projecte-proguard.jar<br /><br />5. Col·loquem el projecte-proguard.jar al WEB-INF/lib de PF, i l'afegim al Classpath de PF. Per evitar confusions eliminem el directori WEB-INF/classes de PF. <br /><br />I ja podem fer el .war.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-33171389010528464962007-02-27T10:23:00.000+01:002007-02-27T10:18:26.105+01:00Com evitar que obrin un mateix programa Java 2 copsPer evitar que obrin un programa dos cops el primer que em vaig plantejar era crear un fitxer en el directori de treball del programa, de tal manera que si es tornava a engegar i ja existia aquest fitxer el programa considerava que ja hi havia una instància engegada. El fitxer s'eliminava en tancar el programa. Per desgràcia, si l'usuari apagava l'ordinador "a sac" el fitxer no s'esborrava. També si es tancava correctament el sistema operatiu però no s'havia tancat l'aplicació, a vegades tampoc s'esborrava el fitxer (perquè el sistema operatiu no tancava correctament l'aplicació).<br /><br />El següent mètode que vaig utilitzar, per a evitar la problemàtica anterior, va ser obrir un port com a servidor (mitjançant un <span style="font-weight:bold;">ServerSocket</span>). Així, el que comprovava era si el port estava obert o no. Si estava obert considerava que el programa estava engegat. Però això tenia altres problemes. Un és que el port, per molt rar que fos podia estar agafat per un altre programa. Un altre és que hi ha firewalls que es queixen (i molesten a l'usuari). I, per últim, a vegades el port es tancava sol (encara no sé si era per culpa meva o per culpa d'algun timeout).<br /><br />Finalment vam trobar una forma molt semblant a la primera, és a dir, mitjançant un fitxer. Consisteix en bloquejar-lo (després de crear-lo). Si es pot bloquejar, vol dir que no hi ha cap instància engegada. Si no es pot bloquejar, vol dir que sí. Perquè un cop s'ha tancat el programa (bé o malament) el fitxer es desbloqueja. Dit d'altra manera, si tanquem el programa correctament el fitxer es desbloqueja; si s'apaga l'ordinador (de la manera que sigui), en tornar-lo a engegar el fitxer estarà desbloquejat.<br /><br />Aquí teniu el codi:<br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code><font color="navy"><b>import</b></font> java.io.File;<br /><font color="navy"><b>import</b></font> java.io.RandomAccessFile;<br /><font color="navy"><b>import</b></font> java.nio.channels.FileChannel;<br /><font color="navy"><b>import</b></font> java.nio.channels.FileLock;<br /><font color="navy"><b>import</b></font> java.io.FileNotFoundException;<br /><font color="navy"><b>import</b></font> java.io.IOException;<br />&nbsp;<br />...<br /><br />&nbsp;<br />File f=<font color="navy"><b>new</b></font> File(<font color="red">"prova"</font>);<br />RandomAccessFile raf=<font color="navy"><b>null</b></font>;<br />FileLock fl=<font color="navy"><b>null</b></font>;<br /><font color="navy"><b>try</b></font><br /><font color="navy">{</font><br /> f.createNewFile();<br /><br />&nbsp;<br /> raf = <font color="navy"><b>new</b></font> RandomAccessFile(<font color="red">"prova"</font>, <font color="red">"rw"</font>);<br /> <br /> FileChannel fc=raf.getChannel();<br /> fl=fc.tryLock();<br /><font color="navy">}</font> <font color="navy"><b>catch</b></font> (FileNotFoundException ex)<br /><font color="navy">{</font><br /><br /> ex.printStackTrace();<br /><font color="navy">}</font> <font color="navy"><b>catch</b></font> (IOException ex)<br /><font color="navy">{</font><br /> ex.printStackTrace();<br /><font color="navy">}</font><br />&nbsp;<br /><font color="navy"><b>if</b></font>(fl==<font color="navy"><b>null</b></font>)<br /><font color="navy">{</font><br /> System.out.println(<font color="red">"Està bloquejat"</font>);<br /> System.exit(0);<br /><font color="navy">}</font><font color="navy"><b>else</b></font><br /><font color="navy">{</font><br /> System.out.println(<font color="red">"Continuar"</font>);<br /><font color="navy">}</font><br /></code><br /></pre><br /><br /><br />La part que ens interessa, sobretot, és la linia <span style="font-weight:bold;">fc.tryLock()</span>. El mètode <span style="font-weight:bold;">tryLock()</span> de la classe <span style="font-weight:bold;">FileChannel</span> intenta bloquejar el fitxer. Si ho aconsegueix ens retorna una instància de la classe <span style="font-weight:bold;">FileLock</span>; en cas contrari ens retorna <span style="font-weight:bold;">null</span> i, per tant, sabem que el fitxer està bloquejat.intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-75281758780236983622007-02-23T12:20:00.000+01:002007-02-23T12:18:39.561+01:00Proguard (I)Quan crees un programa en llenguatge Java has de saber que és molt fàcil descompilar-lo(1) i, per tant, que qualsevol persona podria obtenir un codi molt semblant a l'original. Fent proves, es pot veure que pràcticament es recupera el mateix codi que s'ha utilitzat per compilar. Per això mateix és interessant posar les coses difícils.<br /><br />Una bona manera d'aconseguir-ho és utilitzant un ofuscador de codi. N'he provat varis i el que millor m'ha funcionat i m'ha semblat més complet i útil és el <a href="http://proguard.sourceforge.net/">ProGuard</a>. ProGuard és un programa gratuït, realitzat per Eric Lafortune, escrit en Java (i per tant multiplataforma) que a més d'ofuscador (<span style="font-style: italic;">obfuscator</span>) també és eliminador de codi inútil (<span style="font-style: italic;">shrinker</span>) i optimitzador (<span style="font-style: italic;">optimizer</span>) de codi.<br /><br />Totes aquestes funcionalitats fan que un programa que s'ha "passat" pel ProGuard sigui més difícil de llegir un cop descompilat, més compacte (ocupa menys espai al disc) i més ràpid.<br /><br />ProGuard, a part de poder-se utilitzar des de línia de comandes, també té una GUI. En tots dos casos es poden utilitzar fitxers de configuració.<br /><br />A mode d'exemple, un programa que he fet jo i que ocupa (comprimit dins del jar) 144.480 bytes, després de passar-lo pel ProGuard s'ha quedat en 82.086 bytes. Un cop descompilat em costa molt de saber quina classe correspon a cada fitxer .class (ha canviat els noms), i si ho descobreixo em trobo que el codi està molt canviat, entre d'altres coses perquè hi ha inserit instruccions <span style="font-weight: bold;">goto</span>!<br /><br />El resultat de l'optimització és el següent:<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"><code>Number of inlined interfaces: 0<br />Number of finalized classes: 69<br />Number of removed write-only fields: 17<br />Number of finalized methods: 226<br />Number of privatized methods: 13<br />Number of staticized methods: 5<br />Number of simplified method declarations: 38<br />Number of inlined getters/setter calls: 9<br />Number of merged code blocks: 81<br />Number of simplified push instructions: 4<br />Number of simplified branches: 0<br />Number of removed instructions: 454<br />Number of removed push/pop pairs: 0<br />Number of removed load/store pairs: 0<br />Number of simplified store/load pairs: 154<br />Number of simplified goto/goto pairs: 16<br />Number of simplified goto/return pairs: 37<br /></code></pre><br />I de 85 classes ha passat a 70.<br /><br />Cal tenir en compte que, a vegades, l'ús del ProGuard pot donar errors inesperats un cop s'executi el programa ofuscat/optimitzat. A la documentació del programa s'hi explica amb detall en quins casos pot passar això i diverses maneres de solucionar-ho.<br /><br />I també s'ha de tenir en compte que per a aplicacions web (JSP i demés) s'ha de fer d'una certa manera no documentada que us mostraré més endavant.<br /><br /><br /><span style="font-size:85%;">-----<br />(1) Trobar descompiladors per java és tan senzill com cercar-ho al google.</span>intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-31071818875936047512007-02-20T11:19:00.000+01:002007-03-07T15:09:43.423+01:00Comptar el nombre de fitxers oberts per un programa en LinuxNo és gaire comú, però a vegades és necessari veure si estem obrint massa cops un únic fitxer. Per exemple, un cas que ens va passar en una aplicació: ens vam despistar i obríem fitxers de log massa sovint, com ens van dir la gent encarregada de sistemes. Però no ens van dir com comprovar-ho. Així que em vaig haver de crear un script per poder comprovar si ho estàvem arreglant o no.<br /><br />L'script es basa la comanda <span style="font-weight: bold;">lsof </span>que mostra els fitxers oberts (veure el for al codi). La línia més important del codi és, precisament, la del <span style="font-weight: bold;">for</span>, en concret la comanda que s'executa `lsof -c $program -F pn\n | cut -c 2- | tail -n+2 | sort`, la resposta de la qual la fa servir el <span style="font-weight: bold;">for </span>per iterar. Aquí van alguns comentaris:<br /><ul><li>El paràmetre <span style="font-weight: bold;">-c proces</span> fa que mostri noms els fitxers oberts per un cert procés (per exemple podria ser 'java').</li><li>La part <span style="font-weight: bold;">-f pn\n</span> fa que apareguin pid del procés (amb una 'p' davant) seguit dels noms dels fitxers (amb una 'f' davant)</li><li>El <span style="font-weight: bold;">cut -c 2-</span> elimina la primera columna de carcters (la p i les n)</li><li>El <span style="font-weight: bold;">tail -n+2</span> elimina la primera fila (el pid)</li><li>El <span style="font-weight: bold;">sort </span>ordena el que queda, i així podem anar comptant. </li></ul><br /><br /><pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"><code>#!/bin/bash<br />#######################<br /># Mostra els cops que un fitxer est obert per un cert programa<br /># -per filtrar els .log, per exemple afegir: &#124; grep &quot;\.log&quot;<br />#######################<br /><br />function mostraHelp<br />{<br /> echo Mostra els cops que un fitxer est obert per un cert programa<br /> echo &quot;&quot;<br /> echo &quot;Us: $0 [--help&#124;programa] &quot;;<br />}<br /><br />if [ &quot;$1&quot; == &quot;--help&quot; ]; then<br /> mostraHelp;<br /> exit;<br />else<br /> program=$1;<br />fi<br /><br />fitxer_anterior=&quot;&quot;<br />count=1<br />primer=1<br />total=0<br /><br /><br />if [ &quot;$1&quot; != &quot;&quot; ]; then<br /> for f in `lsof -c $program -F pn\n &#124; cut -c 2- &#124; tail -n+2 &#124; sort`<br /> do<br /> let total=$total+1;<br /> if [ &quot;$fitxer_anterior&quot; == &quot;$f&quot; ]; then<br /> let count=$count+1;<br /> else<br /> if [ &quot;$primer&quot; == &quot;0&quot; ]; then<br /> echo -e $count $&quot;\t&quot; $fitxer_anterior<br /> let count=1<br /> fitxer_anterior=$f;<br /> else<br /> primer=0;<br /> fitxer_anterior=$f;<br /> fi<br /> fi<br /> done<br /> echo -e $count $&quot;\t&quot; $fitxer_anterior<br /> echo -e $&quot;\n&quot; Total: $total;<br />else<br /> mostraHelp;<br /> exit;<br />fi<br /><br /></code></pre>intratablenoreply@blogger.comtag:blogger.com,1999:blog-8067138265565312395.post-63327760412604864232007-02-16T10:30:00.000+01:002007-02-16T12:40:13.794+01:00Mozilla Firefox 2 a Fedora Core 6El Firefox que porta instal·lat directament la distribució de linux Fedora Core 6 és la versió 1.5.0.9 i per molt que facis<br /><code><br />yum update<br /></code><br />així continuarà perquè és l'última versió que tenen als repositoris oficials, fins que la canviïn. Sigui com sigui, sempre aniran amb retard.<br /><br />Si en comptes de començar a cercar repositoris no oficials que tinguin l'última versió (actualment la 2.0.0.1) preferim descarregar-nos-la, és possible que ens trobem amb el següent error quan l'intentem executar:<br /><code><br />/opt/firefox/firefox-bin: error while loading shared libraries:<br />/libstdc++.so.5: cannot open shared object file: No such file or directory<br /></code><br />El problema és que la llibreria que duu Fedora Core 6 per defecte és la libstdc++.so.6, que és més nova. La solució passa, doncs, per instal·lar la versió antiga que probablement no tinguem instal·lada, és a dir, sent usuari root hem de fer:<br /><code><br />yum install compat-libstdc++-33<br /></code><br />Amb això ja hauria de funcionar.<br /><br />Ara, un cop insta·lada la llibreria, podem fer que quan cridem al Firefox (sigui des d'algun menú o des d'una consola) es cridi aquesta última versió, i que això valgui per a tots els usuaris. Suposant que hem descomprimit el fitxer que hem descarregat de la pàgina de Mozilla al directori /opt (i, per tant, l'executable de Firefox es troba a /opt/firefox ) podem fer (com a root) el següent:<br /><code><br />mv /usr/bin/firefox /usr/bin/firefox.old<br />ln -s /opt/firefox/firefox /usr/bin/firefox<br /></code><br />Així podrem executar també, cas que hi hagués algun problema, la versió de firefox de Fedora cridant a firefox.old.intratablenoreply@blogger.com