tag:blogger.com,1999:blog-50226677660516868132008-08-20T16:51:19.281+01:00MonoCaffeUbersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-5022667766051686813.post-18601964092786672402008-08-20T16:46:00.000+01:002008-08-20T16:51:19.300+01:00Error de SSHHoy he tenido la suerte de resolver un problema con un servidor al que no podíamos conectar con un usuario específico. Viendo las trazas en el fichero <i>/vat/log/secure</i> aparece el siguiente error:<br /><br /><code>fatal: buffer_get: trying to get more bytes than in buffer</code><br /><br />No busquéis, no hace falta, hay una linea en el fichero <i>.ssh/authorized_keys</i> que está mala. Probad a borrar todas las lineas o la linea perteneciente al cliente desde el que os conectáis y debería funcionar.Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-13832780645418746312008-08-14T10:34:00.001+01:002008-08-14T12:32:05.681+01:00Estádisticas en VideojuegosDesde hace ya unos meses tengo un vicio absoluto con Call of Duty 4, quizás por eso tengo tan retrasado el Monocaffe, mea culpa. Lo importante es que ya he llegado al nivel 10 y ahora voy a por la Dragunov Dorada.<br />Una de las cosas que más me gustan del CoD4 es la cantidad de estadísticas que maneja:<br />muertes infligidas<br />muertes recibidas<br />precisión<br />tiros a la cabeza<br />etc.<br />Lo normal en los FPS vamos. Pero por qué no ir más lejos y definir un nivel de estadísticas aún mayor acerca del comportamiento del jugador. Incluso definir niveles o tipos basados en estas estadísticas.<br />Algunos ejemplos que se me ocurren serían, por ejemplo, la eterna lucha entre los jugadores agresivos y los pasivos (campers). Un nivel de camping podría ser medido utilizando el tiempo que el jugador mantiene un misma posición, definiendo waypoints en todo el mapa (lo que ya se hace para la IA) y calcular un promedio de visitas de los distintos waypoints, los cuales a su vez definen un valor según las posibilidades que tienen estos waypoints de convertirse en puntos de campeo (camping-point). Claro que no todos los jugadores que mantienen una serie de posiciones constantes son campers, ya que en muchos casos se utilizan las clases de francotirador, pero esto se puede controlar también, midiendo la posición, arma utilizada -es estúpido campear con un rifle, por lo general lo hacen con una escopeta :( - y punto de vista.<br />Utilizando estas mismas mediciones en base a los waypoints, se podrían tipificar a otros tipos de jugadores, como los agresivos, tácticos y n00bs.<br />Un jugador agresivo (o tonto) se pasará el rato recorriendo los waypoints en, por lo general, una línea recta bastante bien definida.<br />Los jugadores tácticos son una mezcla entre los agresivos y los campers, ya que van recorriendo los waypoints, deteniéndose cierto tiempo, para luego buscar otro punto de ventaja o de conveniencia.<br />Otra medida interesante, es la rapidez con que los jugadores mejoran sus estadísticas. Sería como una mezcla entre BrainTraining y FPS. Cuan rápido el jugador es capaz de recorrer, de manera optima, los distintos waypoints, alcanzando la mayor cantidad de frags. Cual es el nivel de pensamiento abstracto del jugador, midiendo su capacidad de encontrar, rápidamente, waypoints de alta efectividad y bajo riesgo sin importar su posición inicial y en estricta relación con la posición de los enemigos.<br />Hay miles de cosas que se pueden medir en un videojuego y que no se ven reflejadas en las estadísticas estándar.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mystery-man.com/wordpress/wp-content/uploads/2007/12/call-of-duty-4-ps3-4.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 312px; height: 202px;" src="http://mystery-man.com/wordpress/wp-content/uploads/2007/12/call-of-duty-4-ps3-4.png" alt="" border="0" /></a><br />En fin, me gustaría que los FPS del futuro te dijeran: "soldado, su edad mental es de 75 años. Menos mal que no estas en combate real", "Eres un puto camper, juega bien otia!"Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-32784235643283407092008-08-08T13:46:00.000+01:002008-08-08T13:56:23.584+01:00Una consola para controlarlas todas (II)<span style="font-size:85%;"><span style="font-family: verdana;">En la entrada anterior comentaba la aplicación "pconsole" que nos permite controlar varias xterms a la vez. Esto es bastante útil, pero la verdad es que el comportamiento no era optimo. Básicamente mi problema estaba en tener varias ventanas de xterm colmando la lista de ventanas y otros problemas que esto acarrea.</span><br /><span style="font-family: verdana;">Por consiguiente instale "Terminator" una consola que podemos dividir en varias consolas, todas contenidas dentro de una misma ventana.</span><br /><span style="font-family: verdana;">Con esta nueva configuración tengo dentro de una misma ventana ocho consolas, una ejecutando "pconsole" y las otras siete bajo control de pconsole.</span></span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GKVx1yC7np0/SJxCWGhKXfI/AAAAAAAAAZw/IFHtrM9eWGI/s1600-h/Pantallazo-Terminator.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_GKVx1yC7np0/SJxCWGhKXfI/AAAAAAAAAZw/IFHtrM9eWGI/s400/Pantallazo-Terminator.png" alt="" id="BLOGGER_PHOTO_ID_5232129814571933170" border="0" /></a>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-25152284717738900132008-07-30T14:21:00.001+01:002008-07-30T14:43:25.725+01:00Una consola para controlarlas todas<span style="font-size:85%;"><span style="font-family:verdana;">Hoy he descubierto "<span style="font-style: italic;">pconsole</span>" una aplicación muy útil a la hora de realizar labores repetitivas en distintos servidores.</span><br /><span style="font-family:verdana;">Ejemplo, hay que realizar unas tareas <span style="font-weight: bold;">X</span> en una cantidad de servidores <span style="font-weight: bold;">Y</span> que son iguales (un cluster quizás).</span><br /><span style="font-family:verdana;">En lugar de ir uno a uno, realizando <span style="font-weight: bold;">X</span>, ejecutamos unas cuantas <span style="font-style: italic;">xterm</span>'s y se las damos a <span style="font-style: italic;">pconsole</span>.</span><br /><span style="font-family:verdana;">Es muy sencillo de utilizar. En Ubuntu Hardy Heron, sólo hace falta ejecutar</span><br /></span><code style="font-family:verdana;"><span style="font-size:85%;"><br />sudo aptitude install pconsole</span></code><span style="font-size:85%;"><span style="font-family:verdana;"><br /><br />A continuación abrimos <span style="font-weight: bold;">Y+1</span> cantidad de <span style="font-style: italic;">xterm</span>'s y en cada una ejecutamos:</span><br /></span><code style="font-family:verdana;"><span style="font-size:85%;"><br />tty</span></code><span style="font-size:85%;"><span style="font-family:verdana;"><br /><br />Lo cual nos devuelve (como todo en Linux) la ruta del fichero de la terminal. Por ejemplo /dev/pts/5</span><br /><br /><span style="font-family:verdana;">Lo siguiente será ejecutar "<span style="font-style: italic;">pconsole</span>" en la <span style="font-style: italic;">xterm</span> <span style="font-weight: bold;">Y+1</span>. Esto abrirá "<span style="font-style: italic;">pconsole</span>" y nos mostrará una especia de CLI distinta. Aquí ejecutamos:</span><br /></span><code style="font-family:verdana;"><span style="font-size:85%;"><br />attach /dev/pts/5 /dev/pts/3 /dev/pts/4 ...</span></code><span style="font-size:85%;"><span style="font-family:verdana;"><br /><br />Ahora pasamos al "Modo de Envio" con Ctrl+D y todo lo que escribimos en "pconsole" se escribe en las consolas que estan adjuntas.<br /><br /></span><br /><a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GKVx1yC7np0/SJBtx025HrI/AAAAAAAAAZo/rQ7LDHrpo7U/s1600-h/Pantallazo.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GKVx1yC7np0/SJBtx025HrI/AAAAAAAAAZo/rQ7LDHrpo7U/s400/Pantallazo.png" alt="" id="BLOGGER_PHOTO_ID_5228799870147042994" border="0" /></a><br /><br /><span style="font-family:verdana;">Existen otras aplicaciones como cssh que permiten abrir varias conexiones de SSH paralelas, pero lo encuentro un poco lento y no funciona muy bien (en mi caso) pero también es una herramienta a considerar si no podemos ejecutar pconsole.<br /></span></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-76099236131337739662008-07-26T13:10:00.001+01:002008-07-26T14:06:42.289+01:00Iniciando el proyecto (MonoCaffe 1)<span style="font-size:85%;"><span style="font-family:verdana;">La idea original de este blog (la cual no he desarrollado aun) es la de describir y documentar el ciclo de vida que sigue MonoCaffe. Como todo proyecto de software, espero que sea constante y vaya evolucionando entre versiones.</span><br /><span style="font-family:verdana;">Antes de nada, me he documentado e incluso estoy colaborando en la </span><a style="font-family: verdana;" href="http://producingoss.com/es/">traducción</a><span style="font-family:verdana;"> de un libro titulado </span><a style="font-family: verdana;" href="http://producingoss.com/">Producing Open Source Software</a><span style="font-family:verdana;"> de Karl Fogel donde se explican muy bien las herramientas, implicaciones, responsabilidad y muchos temas más sobre el desarrollo de un proyecto de software libre.</span><br /><span style="font-family:verdana;">Lo siguiente ha sido elegir las herramientas para la labor. En el caso de MonoCaffe, he elegido:</span><br /></span><ul style="font-family:verdana;"><li><span style="font-size:85%;">Java (libre, conocido, fácil y multiplataforma).</span></li><li><span style="font-size:85%;">Swing.<br /></span></li><li><span style="font-size:85%;">HSQLDB.</span></li><li><span style="font-size:85%;"><a href="http://sourceforge.net/projects/monocaffe/">Sourceforge</a> para el hosting del proyecto (CVS, foros, sitio web, etc.)</span></li></ul><span style="font-size:85%;"><span style="font-family:verdana;">Lo siguiente ha sido crear el <a href="http://monocaffe.sourceforge.net/">sitio web</a>. Utilizando herramientas como Inkscape fui capaz de crear todas las imágenes del sitio (e iconos para la aplicación). Luego con vim crear todo el contenido HTML/CSS ha sido un paseo de dos dias.</span><br /><br /><span style="font-family:verdana;">Con el CVS listo y funcionando, la página montada y las herramientas calientes, me he lanzado a realizar el analisis funcional de la aplicación utilizando UML (Dia Diagram Editor) para ilustrar gráficamente todo esto. Así que ahora mismo tenemos UML's describiendo la aplicación con algunos requerimientos, sus especificaciones funcionales y dos diagramas de flujo para los clientes y para el usuario del administrador.</span><br /><br /><a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GKVx1yC7np0/SIsc7E5r4cI/AAAAAAAAAZQ/o2OytnftB1Y/s1600-h/MonoCaffe_2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GKVx1yC7np0/SIsc7E5r4cI/AAAAAAAAAZQ/o2OytnftB1Y/s400/MonoCaffe_2.png" alt="" id="BLOGGER_PHOTO_ID_5227303593747145154" border="0" /></a><a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GKVx1yC7np0/SIsc7dzm_II/AAAAAAAAAZY/-gn2qNBjFXs/s1600-h/MonoCaffe_HighLevel_Design.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GKVx1yC7np0/SIsc7dzm_II/AAAAAAAAAZY/-gn2qNBjFXs/s400/MonoCaffe_HighLevel_Design.png" alt="" id="BLOGGER_PHOTO_ID_5227303600432544898" border="0" /></a><span style="font-family:verdana;">Dado que vamos a almacenar todos los datos relativos a la aplicación para poder generar distintos reportes de uso, usuarios, etc. Va a ser necesario un medio de almacenamiento persistente, es decir, una BBDD. No he elegido productos como MySQL para facilitar la instalación sin la intervención del usuario. Así que lo siguiente ha sido el modelado de los datos para la BBDD. Siguendo el modelo de objetos que he definido he llegado a un modelo bastante sencillo de qué debería tener la BBDD de MonoCaffe:</span><br /><br /><a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GKVx1yC7np0/SIsewcM_5UI/AAAAAAAAAZg/zlh0P1PFru4/s1600-h/Database_Design.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GKVx1yC7np0/SIsewcM_5UI/AAAAAAAAAZg/zlh0P1PFru4/s400/Database_Design.png" alt="" id="BLOGGER_PHOTO_ID_5227305610046858562" border="0" /></a><br /><span style="font-family:verdana;">Algo bastante sencillo y obviando temas importantes como las dependencias funcionales y metadatos y saltando directamente a la normalización.</span><br /><br /><span style="font-family:verdana;">Con lo mínimo ya preparado (tengo ganas de picar código) se abre NetBeans, checkout del proyecto desde el CVS y a ver qué sale.</span><br /><br /><span style="font-family:verdana;">Continuara...</span><br /></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-29801338001436784272008-07-26T12:04:00.000+01:002008-07-26T13:04:14.646+01:00Cuando lo gratis cuesta<span style="font-family: verdana;font-size:85%;" >El principal problema al hablar de software libre es aclarar su gratuidad. Sí, por definición si es libre es gratis, pero no es así. Es gratis descargarlo y utilizarlo, pero es mucho más. Un Freeware sólo es gratuito, pero sigue imponiendo restricciones sobre el usuario. El libre no impone nada más que su libertad. <a href="http://en.wikipedia.org/wiki/Gratis_versus_Libre">Gratis vs. Libre</a>.<br />Es irresponsable por parte de un departamento de informática o de los usuarios, vivir en esta burbuja de gratuidad y reducción de costes en la que puede sumergirnos el software libre.<br />Una de las primeras cosas que aprendí de niño es que nada en la vida es gratis, todo acarrea un precio, una responsabilidad, unas consecuencias.<br />En el caso del software libre, el precio es cero. Al principio. El modelo de negocio de las empresas que permiten la libre distribución del código fuente de sus aplicaciones es el de ofrecer servicios de soporte, resolución de incidencias, etcétera, sobre sus productos.<br />Es responsabilidad del usuario, darse cuenta de esto y actuar en concordancia a sus efectos. No por utilizar una producto como MySQL, vamos a dar por sentado que siempre vamos a encontrar respuestas a nuestras clemencias en los foros y chats de Internet (aunque es bastante probable). Tampoco es necesario mantener un equipo de programadores que nos permitan resolver nuestros problemas con una aplicación, sólo hay que contactar con el licensatario del software y pagar. Libre no significa grátis.<br />La libertad para el usuario llega aquí: ¿Qué hago? Nos permite hacernos esta pregunta y resolverla adecuandonos a la situación en la que nos encontramos. Para muchas empresas, crear un equipo de desarrollo, pruebas, QA y demás, es innecesario y altamente costoso, pero para otras, esto puede aportarles beneficios. El ejemplo más claro, sería en la redistribución de una aplicación propia que utilice estas tecnologias.<br />El software libre puede ser estructurado en diferentes niveles de usabilidad empresarial, dependiendo en sobremanera del nivel de soporte que se pueden encontrar. Aplicaciones como OpenOffice, MySQL, Ubuntu, RedHat y muchos, muchos más, son producidas por empresas, no por comunidades. Es importante ver claramente esto y diferenciarlas.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GKVx1yC7np0/SIsSVCq1KnI/AAAAAAAAAZI/AlMMCfM4ALA/s1600-h/proyectos.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GKVx1yC7np0/SIsSVCq1KnI/AAAAAAAAAZI/AlMMCfM4ALA/s400/proyectos.png" alt="" id="BLOGGER_PHOTO_ID_5227291945196661362" border="0" /></a><br />Un proyecto de software libre no es siempre desarrollado por quinceañeros encerrados en su habitación. Por lo tanto no podemos esperar el mismo nivel de confianza, soporte y resolución de incidencias entre distintos proyectos, pero podemos seguir eligiendo.<br />Como ejemplo claro, tomemos Monocaffe, un proyecto propio que poco a poco voy sacando adelante. Es un proyecto en el cual, por ahora, soy el únido desarrollador pero que gracias a muchos productos de software libre (NetBeans, Java, MySQL, SVN, Swing, Hibernate, Apache, Linux y Rhythmbox :) permiten que un individuo pueda crear. ¿Volvemos a los tiempos en los que para desarrollar una aplicación era necesario pagar por todo esto?¿Realmente queremos limitar tanto la creación individual para que sean sólo los beneficios economicos los que muevan los hilos del desarrollo tecnologico? Creo que no.<br />Si en un futuro, miles de negocios empiezan a utilizar MonoCaffe, no pueden esperar un nível de soporte más allá del tiempo que tenga para resolverlas, a menos que me empiecen a pagar e inicie una empresa para ofrecerles estos servicios... sería perfecto :)<br />Esta es la cruda realidad de algunos proyectos, pero no de todos. Nada más lejos de la realidad. Algunos proyectos nacen con un enfoque totalmente empresarial, diferenciandose de otros por la libertad de su código, lo que los hace tremendamente competitivos tal como ha sucedido con MySQL el cual ha logrado ser el motor de BBDD por defecto de la web. Si nuestra empresa, por alguna razón, no puede resolver algún problema aún incluso despues de investigar por la web, simpre se tiene la opción, la elección, de pagar. Y si queremos cambiar, cambiamos.<br />Cualquier crítica hacia este modelo tiene cabida, somos libres de criticar. Pero que este modelo falla es una gran falacia cuando<a href="http://apache.slashdot.org/article.pl?sid=08/07/25/2135202"> el más grande del sector lo tantea</a>.<br /></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-41724544902357525582008-07-10T11:39:00.005+01:002008-07-10T16:54:30.135+01:00Cuando Microsoft me hace sufrir<span style="font-size:85%;"><span style="font-family:verdana;">Como os podéis imaginar por el titulo del blog y las entradas que llevo escritas, soy un fanboy del movimiento Open Source. Tanto que en cuanto pueda echarle las manos encima al OpenMoko, lo haré. Tanto, que el día que el OpenSDK de Java fue certificado, casí llore.</span><br /><span style="font-family:verdana;">Estos dias he estado inmerso en un curso para aprender Microsoft Navision. Me he visto forzado a ejecutar la jodida maquina virtual de Windows XP e instalar este engrendo endemoniado tambien llamado NAV.</span><br /><br /><span style="font-family:verdana;">Es realmente doloroso, en serio. Son todo ventanas, hay que utilizar el ratón para todo y esto hace que cualquier tarea se vuelva una tortura de repeticiones.</span><br /><br /><span style="font-family:verdana;">La siguiente desviación de la realidad es el lenguaje C/AL y el editor incorporado: en mi vida había encontrado semejante esperpento de editor. En serio, el Notepad es 100 veces mejor. El lenguaje no está mal, tiene unos cuantos WTF! pero es el editor el que te hace pensar cómo alguien en su sano juicio podría alguna vez barajar la posibilidad de pagar por esto.</span><br /><br /><br /></span><div style="text-align: center;"><object width="320" height="266" class="BLOG_video_class" id="BLOG_video-376fe9a08c0f0517" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="movie" value="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DqgAAAKXn9zyzXTyW6NoE_4ojujpAorb7HL-LOuqxjz8fASuC94mlgExpfxSjM9Zopy-OO5F07Wnft5dTIGvFLJPe0Fl25YNYlii-CqGLQURQNMJaNkmWn58tp9hlVeuyC3Pd_CwZu9egDUVhY-18-_Rv0JPqOgfdvJLYbA4AORxDpEY3yjEDNKECHTjSxBhnrKwafjn_LsT02PEohbQHD3cPXuSRjQgN8CG1zCtQZEjVBKoR%26sigh%3DzGJ82o_SBkO5FcgX2IEmEpa78p4%26begin%3D0%26len%3D86400000%26docid%3D0&nogvlm=1&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3D376fe9a08c0f0517%26offsetms%3D5000%26itag%3Dw320%26sigh%3DIff1TgzuOI3mJ9BHTojPCRPGjkQ&messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den">
<param name="bgcolor" value="#FFFFFF">
<embed width="320" height="266" src="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DqgAAAKXn9zyzXTyW6NoE_4ojujpAorb7HL-LOuqxjz8fASuC94mlgExpfxSjM9Zopy-OO5F07Wnft5dTIGvFLJPe0Fl25YNYlii-CqGLQURQNMJaNkmWn58tp9hlVeuyC3Pd_CwZu9egDUVhY-18-_Rv0JPqOgfdvJLYbA4AORxDpEY3yjEDNKECHTjSxBhnrKwafjn_LsT02PEohbQHD3cPXuSRjQgN8CG1zCtQZEjVBKoR%26sigh%3DzGJ82o_SBkO5FcgX2IEmEpa78p4%26begin%3D0%26len%3D86400000%26docid%3D0&nogvlm=1&thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3D376fe9a08c0f0517%26offsetms%3D5000%26itag%3Dw320%26sigh%3DIff1TgzuOI3mJ9BHTojPCRPGjkQ&messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den" type="application/x-shockwave-flash"></embed></object>
</div><br /><span style="font-size:85%;"><span style="font-family:verdana;">No tengo claro si es algo de la aplicación, del lenguaje o del editor, pero al &·$%&·&% que se le ocurrio la genial y grandiosa idea de forzarme a declarar variables y funciones utilizando otra maldita ventana le digo: MUERE! No tienes manera de saber las variables declaradas desde el código, tienes que abrir OTRA VENTANA. Al menos las funciones si aparecen declaradas con su parámetros. Si alguien que lea esto entiende el por qué de un razonamiento tan aislado de la realidad, que me lo explique.</span><br /></span><br /><span style="font-size:85%;"><span style="font-family:verdana;">¿Qué es NAV? Pues es un ERP. A mi me parece más un Access97 que utiliza un lenguaje raro y SQLServer (otra pesadilla por su parte) pero estamos en el año 2008!!!</span><br /><br /><span style="font-family:verdana;">¿Qué es un ERP? Pues no lo sé, en la Wikipedia habla de un montón de tonterias. Para mi, es una aplicación desarrollada por algún genio de la tortura. </span><br /><br /><span style="font-family:verdana;">Por otra parte, tienen sus ventajas. No hablo de NAV, hablo de otros ERP's (OpenBravo, SAP, PeopleSoft). Te permiten ahorrar en costes de desarrollo y tener aplicaciones empresariales verdaderas (no MS Excel) ya que las Hojas de Calculo (Excel para los lusers) no son BBDD, no son aplicaciones. Estas aplicaciones vienen con cierta estrúctur</span></span><span style="font-size:85%;"><span style="font-family:verdana;">a básica que en unos meses permitira a cualquier empresa continuar y mejorar el negocio. Sin estos ERP's cada empresa seria, tendría que contratar a un equipo de desarrollo para producir sus propias herramientas y todos los problemas que esto acarrea. Aunque el ERP sea más sencillo de aprender y poner en marcha, igualmente será necesario un equipo dedicado a este tema, ya sea para generar nuevos informes, nuevos formularios o cualquier otra cosa que se le puedo ocurrir al departamento de turno. Sin contar con el soporte a los mismos:</span><br /><span style="font-family:verdana;">Luser: "He metido mal una factura"</span><br /><span style="font-family:verdana;">Yo: "Pues anulala"</span><br /><span style="font-family:verdana;">Luser: "¿Cómo?" [a ver si pensamos un poquito]</span><br /><span style="font-family:verdana;">Yo: "Soy informático, no contable"</span><br /><span style="font-family:verdana;">Luser: "Pero es un problema del programa"</span><br /><span style="font-family:verdana;">Yo: "Si, se llama meatware"</span></span><span style="font-size:85%;"><br /><span style="font-family:verdana;">Luser: "Qué?"</span><br /><span style="font-family:verdana;">Yo: "Nada... y si pruebas hacer las misma factura con valores negativos?"</span><br /><span style="font-family:verdana;">Luser: "Para qué?"</span><br /><span style="font-family:verdana;">Yo: "Callate y dejame terminar. Luego metes bien la factura"</span><br /><span style="font-family:verdana;">Luser: "Así tengo tres facturas"</span><br /><span style="font-family:verdana;">Yo: [Mirala, si sabe sumar] "¿y? Así cuadras todo y me dejas en paz"</span><br /><span style="font-family:verdana;">Luser: "No puedes eliminar la factura?"</span><br /><span style="font-family:verdana;">Yo: "No, descuadras el tema... no sé el qué, pero lo descuadras... vas a seguir malgastando mi tiempo?"</span></span><span style="font-size:85%;"><br /></span><br /><span style="font-size:85%;"><span style="font-family:verdana;">En fin, al menos es más chatarra que meter en el curriculum. Sólo espero terminar pronto con esto y volver a mi submundo de Java, Linux y Eclipse.</span><br /><br /><span style="font-family:verdana;">Nota: hasta ahora no he encontrado nada en estas aplicaciones que un equipo de desarrollo de tres personas, a tiempo completo, no puedan tener listo (funcional Beta 1) en 6 meses. Es todo cuestión de barajar costes.</span></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-48962061667038941172008-05-03T15:44:00.002+01:002008-05-03T16:47:00.442+01:00Ubuntu Zenburn<span style="font-size:85%;"><span style="font-family:verdana;">Zenburn es un esquema de colores para el editor de textos gVim y ha sido portado de distintas formas para distintas aplicaciones. Son colores de bajo contraste que realmente ayudan en reducir la fatiga visual que sufrimos al estar tantas horas frente a la pantalla del PC.<br />Para conocer Zenburn podemos empezar con la <a href="http://slinky.imukuppi.org/zenburnpage/">página de Zenburn</a> y descargando el fichero .vim el cual debemos mover a la carpeta <span style="font-weight: bold;">$HOME/.vim/colors/zenburn.vim</span><br />A continuación en vim ejecutamos los comandos <span style="font-weight: bold;">:syntax on</span> y <span style="font-weight: bold;">:colorscheme zenburn</span>... pero nada sucede!<br />El problema es que antes debemos configurar algunas cosas en nuestro sistema, sin entrar en detalles, los colores de la consola. En general, las consolas o terminales soportan los 256 colores necesarios para Zenburn y especificamente <span style="font-weight: bold;">gnome-terminal</span> la soporta, solo debemos decirle que la utilice. Para esto debemos instalar el paquete ncurses-term: <span style="font-weight: bold;">sudo aptitude install ncurses-term</span><br />A continuación debemos declarar la variable de entorno TERM para que los utilice: <span style="font-weight: bold;">export TERM="xterm-256color"</span><br />Ahora volvermos a ejecutar vim y tendremos algo como esto:<br /><br /></span></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://slinky.imukuppi.org/zenburn/zenburn.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://slinky.imukuppi.org/zenburn/zenburn.png" alt="" border="0" /></a><br /><span style="font-size:85%;"><span style="font-family:verdana;">Pero no nos vamos a detener aquí, continuemos con los colores de gnome-terminal. Si abrimos el fichero zenburn.vim encontraremos los códigos RGB de los colores utilizados y podremos utilizarlos para modificarlos. Creamos un nuevo perfíl llamado "Zenburn" y cambiamos los colores siguiendo al máximo los especificados en el fichero.<br /><br /></span></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GKVx1yC7np0/SByEcLg6taI/AAAAAAAAAGQ/xwYlaFOMehM/s1600-h/pantallazo1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GKVx1yC7np0/SByEcLg6taI/AAAAAAAAAGQ/xwYlaFOMehM/s400/pantallazo1.png" alt="" id="BLOGGER_PHOTO_ID_5196173689740768674" border="0" /></a><span style="font-size:85%;"><span style="font-family:verdana;"><br />Ahora pensemos en grande! Vamos a cambiar el tema de todo GNOME para que incluso Eclipse (el cual es un coñazo de configurar ya que no utiliza temas) los use por defecto. Incluso el Firefox cambiara los colores, excepto de las areas de texto como en la que estoy escribiendo ahora mismo.<br />Exite un tema que viene por defecto en Ubuntu 8.04 llamado Human Murrine que ha sido modificado por karmaflux para conseguir los colores de Zenburn y lo podeis encontrar en <a href="http://www.ubuntu-art.org/content/show.php/Zenburn-Murrine?content=77577">Zenburn-Murrine</a> en www.ubuntu-art.org<br />Finalmente podeis utilizar este fondo de escritorio que le viene al dedo al tema: <a href="http://www.gnome-look.org/content/show.php/Stone+Gnome?content=78351">Stone-Gnome </a><br /><br /></span></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GKVx1yC7np0/SByHdbg6tcI/AAAAAAAAAGg/W_UELedVNlE/s1600-h/Pantallazo.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GKVx1yC7np0/SByHdbg6tcI/AAAAAAAAAGg/W_UELedVNlE/s400/Pantallazo.png" alt="" id="BLOGGER_PHOTO_ID_5196177009750488514" border="0" /></a><span style="font-size:85%;"><span style="font-family:verdana;"><br />Para automatizar todo esto debemos modificar el fichero .vimrc y añadir los comandos anteriores. De igual manera, si añadimos al fichero .bashrc lo siguiente:</span></span><br /><code><br />if [ "$COLORTERM" == "gnome-terminal" ] ; then<br />export TERM="xterm-256color"<br />fi<br /></code><span style="font-size:85%;"><span style="font-family:verdana;"><br />No tendremos problemas con las sesiones SSH que iniciemos a nuestro PC.<br /></span></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-28490512276784520032008-04-22T01:06:00.001+01:002008-04-22T01:36:54.216+01:00Editores Full Screen<span style="font-size:85%;"><span style="font-family:verdana;">Quizás si algún fan de Apple lee esto no le guste, espero no herir sentimientos, pero estoy sintiendo cierta tendencia a dar popularidad a una idea estúpida, vieja y que siendo por lo visto algo "nuevo" de Tiger (o de donde puñetas a Steve Jobs le haya dado la gana meterlo) llamado "WriteRoom". Voy a resumir qué es: un vim/emacs/nano/ed para gilipollas. Pero es que además, la interfaz es "verde fósforo". ¿Crean un sistema operativo con cualquier cantidad de polladas y gráficos y animaciones como el Tiger para luego utilizar "eso"?</span><br /><span style="font-family:verdana;">Por otra parte, puede que sea yo, pero me da a mi que la estupidez se contagia, porque vienen unos y dicen: "Hmmmm... buena idea, vamos a llevarlo a la web" y toma, un sitio en AJAX que ni siquiera voy a enlazar. Ah! Pero tenemos .Net y una gran cantidad de herramientas, librerias, un IDE super mega chupi y cantidades ingentes de estupidez: toma DarkRoom y toma Q10. Que además son de código cerrado. ¿Será que les da miedo que alguien vea como hacer semejante "programa"?</span><br /><span style="font-family:verdana;">Especialmente me molesto la página de Q10 donde explicitamente pone: "No version for Linux or Mac is planned." No lo necesitamos! Esa gilipolles de software existe desde la prehistoria de la computación!</span><br /><span style="font-family:verdana;">Eso me molesto, pero lo que realmente me pone los pelos de punta es que luego "usuarios" de Linux van y se bajan el programa para luego ejecutarlo con Wine!!!</span><br /><span style="font-family:verdana;">¿Quieres un editor pantalla completa? ¿Qué tal si te pulsas Ctrl+Alt+F1 y ejecutas el puto vi que viene por defecto en cualquier distribución... Joder, es que en cualquier instalación de Unix y derivados viene por defecto, allí, esperando. Cambia los colores a la consola y listo!</span><br /><span style="font-family:verdana;">Para rematar el tema, estos editores de ultima generación integran correctores ortográficos, temas de colores y quien sabe, quizás en un futuro alguna brillante mente piense mientras está escribiendo en estas aplicaciones de ultima generación: "y si añado marcas a mi texto para..."</span><br /><span style="font-family:verdana;">Nada, mejor será que en la próxima versión del MacOSX HelloKitty los gurus de Apple se re inventen el TeX. O mejor aun, saquen una nueva versión HKP (HelloKittyPages) que "increíblemente" te permitirá añadir cosas tan guays como referencias y enlaces.</span><br /><span style="font-family:verdana;">A ver si al menos así terminan de matar al jodido MSWord y dejan de enviarme "pantallazos" en un fichero .doc</span><br /><span style="font-family:verdana;">Esto me pasa por leer blogs a estas horas... ainsh...</span></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-73305313770826893602008-04-18T13:23:00.000+01:002008-04-18T13:31:33.424+01:00Tarjeta Personal (Java)Siguiendo la idea de Luis en su blog <a href="http://malcodigo.blogspot.com/2008/04/tarjeta-de-programador_15.html">Mal Código</a> me he currado una tarjeta personal con InkScape para valorar y contrastar los resultados. En la entrada original Luis utiliza Haskell para su tarjeta, en este caso he utilizado Java.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GKVx1yC7np0/SAiTuFI_UYI/AAAAAAAAAGI/AUw_S-VuZPE/s1600-h/tarjeta.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GKVx1yC7np0/SAiTuFI_UYI/AAAAAAAAAGI/AUw_S-VuZPE/s400/tarjeta.png" alt="" id="BLOGGER_PHOTO_ID_5190560990407643522" border="0" /></a>El código, en caso de que no sea legible dice algo así:<br /><code><br />package the.world.spain.madrid;<br />public class BusinessCard{<br /> public static void main(String[] args){<br /> IngInformatico aayuso = new IngInformatico();<br /> aayuso.setFullName("Alejandro Ayuso");<br /> aayuso.setProfile("Programador");<br /> aayuso.setContactNumber("**********");<br /> aayuso.setEmailAddress("*************** at yahoo.com");<br /> }<br /> class IngInformatico extends HumanBeing{<br /> private String fullname, profile, contact, email;<br /> public void setFullName(String s){<br /> fullname = s;<br /> }<br /> ...<br /> }<br />}<br /></code><br />Ideas?Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-23092342233086709112008-04-02T16:43:00.001+01:002008-04-02T17:41:47.417+01:00stderr, stdout y más<span style="font-size:85%;"><span style="font-family:verdana;">En uno de los posts anteriores explique un poco el tema del stdin y stdout. Sabemos que podemos encauzar la salida (stdout) de un programa como entrada para otro (stdin) y de esta manera realizar tareas complejas utilizando herramientas sencillas.</span><br /><span style="font-family:verdana;">A parte de estos dos descriptores, tenemos el stderr o salida de errores. Básicamente, stderr es lo mismo que stdout pero contiene posibles errores que el programa quiera reportar por pantalla al usuario.</span><br /><span style="font-family:verdana;">Por ejemplo, vamos a utilizar un error producido por "cat" y lo vamos a almacenar en un fichero utilizando ">"</span><br /><span style="font-family:verdana;"><blockquote>$cat foo.txt > foo.log</blockquote></span><br /><span style="font-family:verdana;">En este caso, foo.txt <span style="font-weight: bold;">no</span> existe. Dado que ">" es utilizado sólo para stdout, el fichero foo.log será creado, pero está <span style="font-weight: bold;">vacío</span>. En cambio, podremos ver en la consola el error devuelto por stderr:</span><br /><span style="font-style: italic;font-family:verdana;" >cat: foo.txt: No such file or directory</span><br /><span style="font-family:verdana;">Si queremos capturar este mensaje de error en un fichero foo.err tendremos que añadir el número "2" a ">":</span><br /><span style="font-family:verdana;"><blockquote>cat foo.txt 2> foo.log</blockquote></span><br /><span style="font-family:verdana;">Aquí le estamos indicando a Bash que capture el descriptor número 2 (stderr) y lo envié al fichero. Recordemos que stdin es 0 y stdout es 1.</span><br /><span style="font-family:verdana;">De igual manera podemos mezclar stdout y stderr. La utilidad de esto la encontramos cuando queremos ejecutar algún programa de forma automática (utilizando cron, por ejemplo) o desde un script y deseamos capturar toda la información posible en algún fichero al que podamos acceder posteriormente.</span><br /><span style="font-family:verdana;">Entonces, el tema es bastante sencillo. Vamos a hacer un "tail" de dos ficheros y todas las salidas vamos a enviarlas a dos ficheros foo.out y foo.err.</span><br /><span style="font-family:verdana;"><blockquote>$tail /var/log/dmesg foo.txt >foo.out 2>foo.err</blockquote></span><br /><span style="font-family:verdana;">dmesg sabemos que existe, por lo tanto las ultimas lineas devueltas por "tail" serán capturadas por el stdout al fichero foo.out. En cambio el error devuelto al no encontrar el fichero foo.txt será enviado por stderr a foo.err:</span><br /><span style="font-style: italic;font-family:verdana;" >tail: cannot open foo.txt for reading: No such file or directory</span><br /><span style="font-family:verdana;">También podemos enviar las dos salidas a un único fichero e incluso encauzarlas como stdin para otro programa. En el primer caso vamos a utilizar "2>&1" lo cual vamos a ver en muchos scripts.</span><br /><span style="font-family:verdana;"><blockquote>$tail /var/log/dmesg foo.txt >foo.out 2>&1</blockquote></span><br /><span style="font-family:verdana;">La mejor manera de silenciar a un programa para que no perturbe la ejecución de nuestro script es enviar todas las salidas a /dev/null.</span><br /><span style="font-family:verdana;"><blockquote>$tail /var/log/dmesg foo.txt >/dev/null 2>&1</blockquote></span><br /><span style="font-family:verdana;">Si nuestro script necesita ejecutar otro programa y necesita sólo de su "exit status" el usuario que ejecuta el script no verá cuales programas estamos utilizando y no recibirá los posibles errores que de otra manera aparecerían en pantalla.<br />En segundo lugar, podemos realizar otro tipo de comprobaciones dirigiendo stderr y stdout como stdin de otro programa. Supongamos que creamos un script que sólo funciona con OpenSSH. Para comprobar que la versión que está instalada en el sistema es OpenSSH podemos utilizar lo siguiente:<br /><blockquote>$/usr/bin/ssh -v 2>&1 | grep -q OpenSSH ; echo $?<br />0</blockquote><br />Si nuestro cliente de SSH no fuera el OpenSSH obtendriamos lo siguiente:<br /></span></span><span style="font-size:85%;"><span style="font-family:verdana;"><blockquote>$/usr/bin/ssh -v 2>&1 | grep -q OpenSSH ; echo $?<br />1</blockquote>En el caso de que nuestra versión de "grep" no tenga la opción "q quiet" volvemos a utilizar /dev/null<br /><blockquote>ssh -v 2>&1 | grep OpenSSH >/dev/null 2>&1 ; echo $?<br />0<br /></blockquote><br />Donde <span style="font-weight: bold;">$?</span> es una variable que contiene el "exit status" del último comando ejecutado, en este ejemplo es grep.<br /></span></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-16256806465651870822008-03-26T16:05:00.000Z2008-03-26T16:06:51.507ZSustitución de parámetros<small><span style="font-family:verdana;">Los sistemas Linux y otros Unix traen las típicas herramientas como cut, awk y sed para reemplazar o recortar partes de una variable, pero los verdaderos "gurus" utilizan la sustitución de parámetros. Vamos a explicar esto en varios pasos:<br /><br />1-) Las variables pueden ser referenciadas con $var o con ${var}<br /></span></small><blockquote><small><span style="font-family:verdana;">VAR='lorem ipsum';<br />echo $VAR;<br />echo ${VAR};<br /></span></small></blockquote><small><span style="font-family:verdana;">2-) La longitud de una variable la obtenemos con ${#VAR}<br /></span></small><blockquote><small><span style="font-family:verdana;">echo ${#VAR} -> 1<br /></span></small></blockquote><small><span style="font-family:verdana;">3-) Obtenemos un substring de la variable con ${VAR:POS}<br /></span></small><blockquote><small><span style="font-family:verdana;">echo ${VAR:6} -> ipsum<br /></span></small></blockquote><small><span style="font-family:verdana;">4-) También podemos obtener un substring del tamaño que deseamos con ${VAR:POS:LON}<br /></span></small><blockquote><small><span style="font-family:verdana;">echo ${VAR:0:6} -> lorem<br /></span></small></blockquote><small><span style="font-family:verdana;">5-) Si deseamos dividir según un patrón de izquierda a derecha utilizamos ${var#pat} o ${var##pat}<br /></span></small><blockquote><small><span style="font-family:verdana;">VAR2='lorem,ipsum.,datum.sanctum'<br />echo ${var2#*,} -> ipsum.,datum.sanctum<br />echo ${var2##*,} -> datum.sanctum<br /></span></small></blockquote><small><span style="font-family:verdana;">6-) De derecha a izquierda es ${var%pat} o ${var%%pat}<br /></span></small><blockquote><small><span style="font-family:verdana;">echo ${var2%,*} -> lorem,ipsum.<br />echo ${var2%%,*} -> lorem<br /></span></small></blockquote><small><span style="font-family:verdana;">7-) La sustitución es igual de sencilla ${var/pat/ree} o ${var//pat/ree}<br /></span></small><blockquote><small><span style="font-family:verdana;">echo ${var2/m/M} -> loreM,ipsum.,datum.sanctum<br />echo ${var2//m/M} -> loreM,ipsuM.,datuM.sanctuM<br /></span></small></blockquote><small><span style="font-family:verdana;">OK? Un uso muy interesante de todo esto? Por ejemplo, para renombrar muchos ficheros de IMAGEN a imagen:<br /></span></small><blockquote><small><span style="font-family:verdana;">for i in *<br />do<br />mv ${i} ${i/IMAGEN/imagen}<br />done<br /></span></small></blockquote><small><span style="font-family:verdana;"> Magia!</span></small>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-16334561816052460082008-03-25T14:11:00.001Z2008-03-25T14:44:47.695ZScript!<span style="font-family:verdana;">Script es una aplicación muy, pero que muy útil para todos aquellos quienes como yo somos un tanto olvidadizos. Además, configurando correctamente nuestro PS1 podemos generar reportes de uso.</span><br /><span style="font-family:verdana;">Script sencillamente almacena todo que aparece en pantalla después de que se ejecuta. Por ejemplo:</span><br /><br /><span style="font-family:verdana;">$script -a /tmp/log.txt</span><br /><br /><span style="font-family:verdana;">De ahora en adelante, toda la sesión será almacenada en el fichero indicado. Para terminar pulsamos Ctrl+D</span><br /><br /><span style="font-family:verdana;">Pero la opción realmente chula de script es -f. Supongamos que tenemos a un usuario nuevo y queremos "monitorizar" lo que hace. Hacemos que éste ejecute:</span><br /><br /><span style="font-family:verdana;">$script -f -a /tmp/luser.log</span><br /><br /><span style="font-family:verdana;">Luego para ver lo que está haciendo en tiempo real utilizamos tail:</span><br /><br /><span style="font-family:verdana;">#tail -f /tmp/luser.log</span><br /><br /><span style="font-family:verdana;">Muchos juegos se le pueden dar a esta aplicación tan útil. Por cierto, no intenten ejecutarla desde el .bashrc que por alguna razón crea varios procesos repitiendo la salida de los comandos</span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-60124020054524579862008-03-19T16:58:00.000Z2008-03-19T17:35:17.865ZEntradas y salidas estandar de BashLa base de la programación de scripts en Bash son los descriptores de ficheros, es decir, stdin y stdout. Estos son básicamente los dos medios que utilizamos para comunicarnos con una aplicación en Bash: stdin escucha y stdout habla, así de sencillo.<br />Por lo tanto, cuando un programa está siendo ejecutado y utiliza una función del tipo echo, print o println, lo que sea que vaya a escribir, lo hará a stdout.<br />El uso más común y quizás el más útil de estos descriptores, es el llamado "piping": enviar la salida (stdout) de un programa como entrada (stdin) para otro.<br />El ejemplo más sencillo es utilizar "ls" para mostrar el contenido de un directorio, el cual, dada la gran cantidad de ficheros, nos es imposible de contener dentro de una pantalla de consola. Utilizando otra utilidad como "less" o "more" podemos realizar una pausa entre cada salto de pantalla para verificar los ficheros. Algo así como el dir /p de DOS:<br /><br />$ ls -l<br /><br />Devuelve una lista demasiado larga para que podamos verla. Por esto vamos a utilizar el "piping" para dirigir la salida (stdout) de ls -l hacia la entrada (stdin) de more:<br /><br />$ ls -l | more<br /><br />Nada complicado hasta ahora. El símbolo "|" (AltGr+1) es el que hace toda la magia. Existen otros dos símbolos mágicos: > y <. Vamos a dar un ejemplo de cada uno y su uso más común. El más sencillo de comprender es > el cual envía la stdout a alguna parte, en este caso, a un fichero.<br /><br />$ls -la > foo.txt<br /><br />Si el fichero no existe, es creado y rellenado con la salida (stdout) de "ls -la". Si el fichero existe (muy importante!) todos los datos son reemplazados, así que cuidadin. Además de > podemos utilizar >> lo cual escribe la salida al final del fichero. Por ejemplo, supongamos que foo.txt no existe:<br /><br />$dmesg >> foo.txt<br />$cat /var/log/syslog >> foo.txt<br /><br />Entonces, foo.txt contiene la información de dmesg y el último syslog.<br /><br />El más complicado puede que sea <. Básicamente lo utilizamos para inyectar algo en el programa que vamos a ejecutar. Supongamos que tenemos una serie de comandos para MySQL en un fichero foo.mysql y queremos ejecutarlos desde la línea de comandos:<br /><br />$mysql -u root -p < foo.mysql<br /><br />Hará el truco.<br />Finalmente, los "File Descriptors" son sólo un nombre chulo que darles a stdin (File descriptor 0) y stdout (File descriptor 1).Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-43479271782030389392008-03-12T18:49:00.001Z2008-03-12T19:05:40.296ZCorreos de actualizaciones<span style="font-size:85%;"><span style="font-family:verdana;">Si se tienen varios servidores funcionando, es un poco complicado mantenerse al día de las actualizaciones disponibles a través de aptitude. Leyendo entre los paquetes disponibles para instalar encontré dos que me llamaron la atención: apticron y cron-apt.</span><br /><span style="font-family:verdana;">Decidí instalar cron-apt en un equipo y probarlo. Es muy sencillo de utilizar y me vino como anillo al dedo. Ahora recibo correos con las actualizaciones de mis servidores.</span><br /><span style="font-family:verdana;">El proceso es el siguiente:</span><br /><span style="font-family:verdana;">Instalar el paquete (no pide dependencias)</span><br /><span style="font-family:verdana;">#aptitude install cron-apt</span><br /><br /><span style="font-family:verdana;">Por defecto, introduce una línea en el fichero /etc/cron.d/cron-apt para que busque las actualizaciones a las 4am todas las noches.</span><br /><br /><span style="font-family:verdana;">Ahora a editar el fichero de configuración:</span><br /><span style="font-family:verdana;">#vi /etc/cron-apt/config</span><br /><br /><span style="font-family:verdana;">Básicamente hay que modificar las siguientes lineas:</span><br /><span style="font-family:verdana;">MAILTO="micorreo@miservidor.com"</span><br /><span style="font-family:verdana;">MAILON="upgrade"</span><br /><br /><span style="font-family:verdana;">También podemos modificar la siguiente línea:</span><br /><span style="font-family:verdana;">APTCOMMAND=/usr/bin/aptitude</span><br /><br /><span style="font-family:verdana;">Para que utilice aptitude en lugar de apt-get.</span></span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-54911134482632104412007-12-26T11:44:00.000Z2007-12-26T11:56:10.477ZUbuntu & Lightscribe<span style="font-size:85%;"><span style="font-family: verdana;">Desde que utilizo Ubuntu he estado esperando algún tipo de soporte para mi grabadora Lightscribe. Estas grabadoras permiten, utilizando unos CD's especiales, grabar en la capa superior cualquier diseño que deseemos. Utilizando la misma unidad regrabadora, grabamos el CD/DVD que deseamos y luego lo introducimos con la parte superior hacia abajo, de tal manera que el láser pueda hacer su trabajo.</span><br /><br /><span style="font-family: verdana;">Hasta diciembre el soporte brindado por Lightscribe (Empresa perteneciente a HP) para Linux no era optimo, pero a día de hoy, ya existen drivers (cerrados) para Lightscribe. Lo único que hace falta es: tener la grabadora con el icono de Lightscribe, descargar los drivers para Linux, y descargar el programa que LaCie proporciona también para Linux.</span><br /><br /><span style="font-family: verdana;">El programa (4L-gui) debe ser ejecutado como 'root' y es bastante sencillo. Lo único que nos permite (hasta ahora) es añadir una imagen en JPEG, PNG, GIF, etc... pero lo mejor para estos casos son los PNG.</span><br /><br /><span style="font-family: verdana;">Con Inkscape o The Gimp tenemos que crear una imagen de 1200x1200 y crear dos círculos concentricos para delinear los limites físicos del disco.</span><br /><br /><span style="font-family: verdana;">Este es un ejemplo que he creado para mis CD's de Ubuntu.</span></span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GKVx1yC7np0/R3JBBTw5b3I/AAAAAAAAAFA/_YSQ2eoDjEE/s1600-h/ubuntu_lightscribe_2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GKVx1yC7np0/R3JBBTw5b3I/AAAAAAAAAFA/_YSQ2eoDjEE/s400/ubuntu_lightscribe_2.png" alt="" id="BLOGGER_PHOTO_ID_5148248814778937202" border="0" /></a>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-3418034988873887652007-11-21T16:55:00.000Z2007-11-22T13:33:19.245ZAmazon... la has pifiado<p class="normal">Desde que he sido padre, no poder leer con una lampara de mesa en la cama ha sido una de las consecuencias de la recién llegada. He buscado soluciones para este problema, ya que si no leo antes de dormir, no duermo. Mi primer intento fue con pdf+ para Symbian, es decir, leer un libro con el móvil. Aunque "Angeles y Demonios" pasó la prueba, The TeX Book no. Gráficos y esquemas son los principales problemas. Mi siguiente intento fue con mi PDA HP con Windows Mobile, la cual no había utilizado nunca, por lo cual decidí instalar el Acrobat Reader pero fue más de lo mismo. Por ello mi interés en éste tema de los eReaders. Buscaba algo que me permitiera llevar la gran cantidad de eBooks que tengo en el PC y leerlos en la oscuridad cómodamente y sin hacer demasiado ruido.</p><br /><p class="normal">En caso de que aún no os hayais dado cuenta, Amazon ha lanzado al mercado su lector de eBooks con tecnología E-ink por US$400. Aparte de ser claramente horroroso, como si de una película de los 80' se tratase, viene con conectividad EV-DO (algo así como el 3G) para, teóricamente, poder comprar los libros desde cualquier zona con cobertura. Como si de un móvil y de los politonos se tratase.</p><br /><img src="http://www.pocketnow.com/html/portal/news/0000004740/NewsImage/kindle.jpg" align="center"><br /><p class="normal">Ahora la pregunta es: ¿va realmente alguien a comprar el esperpento este por ese precio?¿Por cualquier precio? A mi me da que hay que estar<br />tonto para primero, gastarse US$400 en un lector de PDF's ya que con ese dinero, muchos son los libros que podemos comprar. Segundo, el precio de los libros<br />es, como mínimo US$9,99. Ya me gustaria que justificasen este precio con datos concretos: Costes para el escritor 10%, Editor 5%, Amazon 85%! Chollazo!</p><br /><p class="normal">Tercero, es increíblemente feo. ¿En qué diablos estaban pensando?¿Para qué ese teclado tan inútil? La competencia se los va a comer vivos, ya que probablemente lo que hayan<br />hecho sea abrir el camino para otros competidores con menos recursos publicitarios como iRex, los cuales proponen productos realmente buenos. Veamos algunos<br />ejemplos:</p><br /><img src="http://linuxdevices.com/files/misc/irex_iliad-thm.jpg"><br /><p class="normal"><a href="http://www.leer-e.es/irex-iliad/irex-iliad-prestaciones-2.html">iRex Iliad</a>. Sólo con mirarlo sabemos por cual de los dos nos íbamos a decidir, aunque su precio es aun más exorbitante: 650EUR!!! Pero es que su pantalla es táctil y no necesita de un estúpido teclado!</p><br /><img src="http://www.ebookwise.com/eBookwise/graphics/ewReader123px_64MB.png"><br /><p class="normal"><a href="http://www.ebookwise.com/ebookwise/ebookwise1150.htm">eBookwise-1150</a>. A la venta sólo en EE.UU. y Canada por US$140. ¿Por qué<br />tan barato? Porque utiliza una pantalla LCD en lugar de una E-ink. Esto es importante, ya que la resolución de una pantalla LCD no tiene comparación con una<br />E-ink, lo cual nos permitirá leer con mayor comodidad.</p><br /><img src="http://www.bookeen.com/Pics/productImages/HiRes/Cybook-in-hand.jpg"><br /><p class="normal"><a href="http://www.bookeen.com/shop/ebook-shop.aspx">Cybook</a>. Este es el verdadero ganador en todo este tema. Pantalla E-ink, US$350 y realizan envios a todo el mundo.</p><br /><img src="http://www.mobilegazette.com/handsets/nokia/nokia-n800/nokia-n800-1.jpg"><br /><p class="normal">Para mi la solución definitiva ha sido el Nokia N800. Vale, no es propiamente un eReader, pero cumple esa función y muchas otras más por el<br />modico precio de 250EUR. Entonces veamos: Linux? Sí. PDF's? Sí. Música? Sí. Web? Sí. Teléfono? Sí. SDK? Sí. Abierto? Sí.</p><br /><p class="normal">Lo que me entristece es que han tenido la oportunidad de hacer algo realmente bueno, con grandes posibilidades de transformar el mundo como lo ha hecho el iPod, pero por alguna razón, no lo han hecho, quien sabe por qué. Realmente me habría gustado comprar un eReader vendido por una empresa como Amazon detrás.</p><br /><p class="normal">Claro que todo esto es sólo mi opinión y dudo que alguien de Amazon alguna vez lea este artículo, pero si lo hacen: Joder, que feo es!</p><h3>Update:</h3><br /><p class="normal">Amazon ha vendido la totalidad de kindles en 5 horas. En <a href="http://blog.wired.com/gadgets/2007/11/e-book-readers.html">Wired</a> tienen una tabla para comparar los diferentes eReaders y algo que me ha llamado la atención, el kindle no soporta formatos como PDF o DOC... vaya chasco se van a llevar los que lo han comprado, lo que me gustaria es saber luego las cifras de devoluciones: "hmmmm... voy a meter mi PDF que bajado de Internet... Mierda, no va! DEVOLUCIÓN!". El NUUT tiene buena pinta pero ¿sólo en Korea?Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-75746654600210848302007-11-19T20:36:00.000Z2007-11-20T14:15:05.863ZPorque vi y no volví<p class="normal">Este artículo no es para iniciar un flame war acerca de editores ni para ejercer presión en la gente para que utilice un editor en especial, sólo quiero compartir con el mundo mis experiencias utilizando diferentes editores y mi preferencia por Vi.<br /></p><br /><p class="normal">Incluso aunque no pueda creerlo, existen muchos usuarios del viejo editor. No son dinosaurios amantes del verde y negro que no desean adaptarse a los tiempos modernos, ya que cada día, la base de usuarios crece. Incluso compañeros del trabajo han empezado a utilizarlo y muchos de nosotros ni siquiera habíamos nacido cuando vi fue escrito.<br /></p><br /><p class="normal">Esto es porque el modelo de edición de vi es superior al de todos los demás. Hoy en día no hace falta ser un genio de Unix para utilizarlo ya que existen versiones libres y gratuitas para cualquier plataforma imaginable y plug-ins para obtener la misma funcionalidad en muchos de los IDE's más populares. Así que voy a intentar de dar un poco de luz con algunos ejemplos, sobre algunas de las ideas equivocadas que se tienen acerca de vi/vim y porque éste es el mejor.<br /></p><br /><h2>1. Edición modal</h2><br /><p class="normal">Al iniciar vi/vim la primera idea chocante, es tener que presionar la tecla 'i' para poder empezar a escribir o molestarnos ante la idea de tener que utilizar 'hjkl' para desplazar el cursor sin recordar qué es lo que hace cada tecla. También puede resultar molesto tener que presionar 'a' para insertar texto después del último carácter de la línea. Por lo cual, iniciaremos en modo de edición (insert mode) y utilizaremos las flechas del teclado para mover el cursor sin volver al modo de comandos a menos de que sea absolutamente necesario. Probablemente estará unos 20 minutos en el modo de edición y nunca vuelva a utilizar vi quejándose de que no tiene manera de recordar en cual de los modos se encuentra.<br /></p><br /><p class="normal">Resulta que nos equivocamos si deseamos utilizar vi de ésta manera. Al utilizar vi apropiadamente, utilizamos el modo de comandos y sólo entramos en el modo de edición cuando sea absolutamente necesario modificar o añadir texto y saliendo inmediatamente pulsando 'Esc'. Por lo que, el problema de recordar el modo en el que nos encontramos no existe. Si estamos escribiendo y suena el teléfono, pulsamos 'Esc' y respondemos a la llamada. Nunca pensamos en el modo de edición como uno en el que pasar la mayor parte del tiempo.<br /></p><br /><p class="normal">Voy a explicar un poco la filosofía detrás de esto.<br /></p><br /><p class="normal">Los comandos en vi/vim están diseñados con la idea de ser combinados de diferentes formas - el comando 'd' significa "borrar" y el comando 'e' "mover al final de la palabra" por lo que 'de' elimina todo desde la posición del cursor hasta el final de la palabra (algo como Ctrl-Shift-Derecha, Izquierda, Supr). Un claro beneficio de esto lo podemos observar si añadimos la tecla '.' a la ecuación ya que '.' repite el último comando combinado de edición que hayamos realizado y no los comandos de navegación. Después de ejecutar 'dw' el comando '.' funcionara para eliminar el texto hasta el principio de la próxima palabra. Podemos navegar por todo el texto y cuando volvamos a presionar '.' seguirá haciendo lo mismo, lo cual resulta extremadamente poderoso.<br /></p><br /><p class="code">Nota: 'de' elimina toda la palabra hasta el último carácter, y 'dw' borra toda la palabra hasta el primer carácter de la próxima, por lo cual se incluye el espacio que hay entre ambas.<br /></p><br /><p class="normal">Vamos ahora a los comando del modo de edición. Estos son todos los comandos incluidos desde que entramos en modo de edición, hasta que salimos presionando 'Esc'. En el caso más sencillo tenemos el comando 'i' Hola 'Esc', el cual introduce la palabra "Hola" donde estaba posicionado el cursor. Así que ahora el comando '.' añadirá la palabra "Hola" en la posición del cursor. Como podéis ver, esto es bastante útil, pero mucho más aun es la posibilidad de pulsar 'A' añadir un texto 'Esc' y ahora cada vez que pulsemos '.' la misma palabra se añadirá al final de la línea sin tener que posicionar el cursos allí (ya que 'A' lo que hace es iniciar la edición después del último carácter de la línea). Intentadlo, os gustará.<br /></p><br /><p class="normal">Otro ejemplo que muestra el poder de vi es el comando 'ce' compuesto por el comando 'c'ambiar que elimina todo lo indicado por el rango que especifiquemos y entra en modo de edición. Es igual a 'd' pero con la diferencia de que entra en modo de edición en lugar de mantenerse en el modo de comandos. Lo genial de esto es que el texto que introducimos a continuación es parte del comando. Así que si ejecutamos 'ce' Hola 'Esc' lo que se hace es sustituir "Hola" por todo el texto desde la posición del cursor hasta el último carácter de la palabra y si pulsamos '.' la próxima palabra también será reemplazada por "Hola". Este tipo de movimientos pueden llegar a ser muy complejos y existe una amplia variedad de comandos para entrar en el modo de edición ( 'o' inicia una línea debajo, 'O' un línea por encima, 'S' sustituye toda una línea, etc.).<br /></p><br /><h3>Ejemplo #1: El poder del punto</h3><br /><br /><p class="normal">Veamos un ejemplo en concreto. Supongamos que tenemos declaradas tres funciones y deseamos implementarlas, así que copiamos lo siguiente en el fichero de implantación:<br /></p><br /><p class="code">bool ProcesarParams( int ncosas, bool nbool );<br />bool ObtenerObjeto( bool nbool );<br />bool EliminarTodosObjetos( int ncosas );<br /></p><br /><p class="normal">Por lo que a continuación tenemos que eliminar los ';' del final y añadir un cuerpo vació. Desde cualquier posición en la línea pulsamos 'A' y eliminamos el ';' pulsando la tecla de retroceso, añadimos '{' 'Intro' '}' y finalmente 'Esc' para volver al modo normal.<br /></p><br /><p class="code">bool ProcesarParams( int ncosas, bool nbool ){<br />}<br />bool ObtenerObjeto( bool nbool );<br />bool EliminarTodosObjetos( int ncosas );<br /></p><br /><p class="normal">Luego nos situamos en la próxima línea pulsando 'j' y pulsamos '.' repitiendo con todas las demás hasta obtener esto.<br /></p><br /><p class="code">bool ProcesarParams( int ncosas, bool nbool ){<br />}<br />bool ObtenerObjeto( bool nbool ){<br />}<br />bool EliminarTodosObjetos( int ncosas ){<br />}<br /></p><br /><p class="normal">Es decir, sólo con pulsar 'j.j.' realizamos todo esto. La arquitectura de vim ha sido clave, con el hecho de que la tecla de retroceso forma parte del proceso de edición como si de cualquier otra tecla se tratase. Así que piense ¿cuánto de vuestras labores de edición son tareas repetitivas? Me lo imaginaba.<br /></p><br /><h2>2. No todo es sobre Expresiones Regulares</h2><br /><p class="normal">Las expresiones regulares en vi/vim son muy útiles y todos los editores medio serios, soportan expresiones regulares para buscar, sustituir, etc. Pero sólo vi (que yo sepa) permite utilizarlas de maneras tan complejas como para realizar cierta búsqueda y reemplazar la segunda ocurrencia de "Hola" después de las lineas que contengan "Adios" y cosas por el estilo. Pero no todo en vi/vim necesita de expresiones regulares ya que tenemos la principal fortaleza de vi en su modo básico de edición, algo con lo que no querrá vivir después de haber experimentado:<br /></p><br /><p class="normal">Movimientos con una o dos teclas para moverse hasta cualquier lugar de una línea, párrafo o de la pantalla.<br /></p><br /><p class="normal">Los comandos 'd' o 'c' pueden ser combinados con cualquier movimiento para editar directamente o iniciar el modo de edición, pudiendo repetir toda la operación pulsando '.'<br /></p><br /><p class="normal">Todo puede hacerse sin mover las manos del teclado. No hay que seguir sufriendo con interfaces molestas como el "clítoris" o el "mousepad" y ni siquiera será necesario buscar una mesa para utilizar nuestro portátil. Tampoco tendremos que estar a la caza de las teclas 'Supr' y de navegación.<br /></p><br /><h3>Ejemplo #2: Rangos inteligentes</h3><br /><p class="normal">A continuación veamos un ejemplo típico: una llamada a una función en una expresión algo compleja:<br /></p><br /><p class="code">if (!entrada.usada && equivalente( entrada.clave(), qk.clave ) && (contexto & entrada.contexto ));<br /></p><br /><p class="normal">Lo que hacemos es posicionar el cursor al principio de la llamada 'equivalente' y lo que queremos hacer es extraer todo eso e incluirlo en una variable. Lo primero es seleccionar, luego copiar y borrarlo para moverlo a la línea superior, escribir el nombre de la variable, etc. Con un editor cualquiera, tendriamos que ir tanteando con el ratón hasta obtener el resultado que queremos o quizas con 'Ctrl+Shift' + 'Izq' o 'Der'.<br /></p><br /><p class="normal">En vi/vim tenemos '%' el cual se mueve desde un paréntesis hasta el paréntesis apropiado que lo cierra u objetos similares ([], {}, <>, etc.). Incluso si no estamos posicionados sobre el paréntesis, el comando buscará hacia la derecha al primero que encuentra y lo utilizará como origen. Así que en el ejemplo, si pulsamos '%' el cursor se moverá hasta el siguiente paréntesis y nos marcará el paréntesis que lo cierra. Si volvemos a pulsar '%' el cursos ira a éste último paréntesis.<br /></p><br /><p class="normal">Sabiendo que 'c' corta el rango que le indiquemos (copiandolo a memoria) y entra en el modo de edición podemos pulsar 'c%' para obtener lo siguiente:<br /></p><br /><p class="code">if (!entrada.usada && && (contexto & entrada.contexto ));<br /></p><br /><p class="normal">¡Nada mal para dos teclas! Ahora escribimos el nombre de la variable, pulsamos 'Esc' para salir al modo normal.<br /></p><br /><p class="code">if (!entrada.usada && equiv && (contexto & entrada.contexto ));<br /></p><br /><p class="normal">Seguimos pulsando 'O' para añadir una línea por encima de esta y añadimos la declaración de la variable.<br /></p><br /><p class="code">bool equiv =<br />if (!entrada.usada && equiv && (contexto & entrada.contexto ));<br /></p><br /><p class="normal">Dado que lo que cortamos se encuentra aun en memoria, pulsamos 'Esc' y a continuación 'p'egar, añadimos el ';' y ya terminamos.<br /></p><br /><p class="code">bool equiv = equivalent( entrada.clave(), qk.clave );<br />if (!entrada.usada && equiv && (contexto & entrada.contexto ));<br /></p><br /><p class="normal">Todo esto lo hemos hecho con pulsar cuatro comandos ('c'ortar, '%' rango, 'O' y 'p'egar) y sin mover las manos del teclado.<br /></p><br /><p class="normal">Pronto continuare con más ideas equivocadas sobre vi/vim.<br /></p>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-15866852710637055452007-11-12T17:46:00.000Z2007-11-12T17:54:46.382ZGoogle Docs + BloggerEsto es una prueba de lo que puede hacer Google Docs y Blogger.<br /><div> <br /> Veamos los estilos:<br /> <h1> Titulo 1 </h1> Nos permite resaltar y luego aplicar los cambios<br /> <br /> <h3> Titulo 2 </h3> Ahora vamos a comprobar los diferentes estilos de párrafos:<br /> <br /> In the first part of this <a href="http://www.clustermonkey.net//content/view/139/33/">article</a> I showed you how to get the basic settings for our virtual cluster: we started with a fresh install of Xen; then we created five virtual machines (one master and four slaves), and then we configured the network and NFS, so that the users could share their home directories across the cluster. This is the basis for this second part of the article, in which we see how to install a number of packages that will allow us to run parallel programs on it and manage the cluster more efficiently. Concretely you will learn how to install the C3 command suite, the Modules package for easily switching environments, a version of MPICH for running parallel programs, and the Torque/Maui combination for job queue management. These packages (specially Torque/Maui) can be configured extensively according to your needs. For this virtual cluster we will use a minimal configuration, but this should be enough to get you started. If you are interested in just trying out the virtual cluster but don't want to perform all the steps yourself, you can grab a ready-made cluster image from the <a href="http://jailtime.org/download:contrib:cluster">download:contrib:cluster</a> page at <a href="http://jailtime.org/">Jailtime.org</a>.<br /> Incluso tenemos Triple Espacios.<br /> <br /> Ahora vamos a resaltar partes de un texto y cambiar su color:<br /> In the first part of this <a href="http://www.clustermonkey.net//content/view/139/33/">article</a> I showed you how to get the basic settings for our virtual cluster: we started with a fresh install of Xen; then we created five virtual machines (one master and four slaves), and then we configured the network and NFS, so that the users could share their home directories across the cluster. This is the basis for this second part of the article, in which we see how to install a number of packages that will allow us to run parallel programs on it and manage the cluster more efficiently. Concretely you will learn how to install the C3 command suite, the Modules package for easily switching environments, a version of MPICH for running parallel programs, and the Torque/Maui combination for job queue management. These packages (<span style="background-color: rgb(255, 255, 102);">specially Torque/Maui</span>) can be configured extensively according to <span style="color: rgb(255, 0, 0);">your needs</span>. For this virtual cluster we will use a minimal configuration, but this should be enough to get you started. If you are interested in just trying out the virtual cluster but don't want to perform all the steps yourself, you can grab a ready-made cluster image from the <a href="http://jailtime.org/download:contrib:cluster">download:contrib:cluster</a> page at <a href="http://jailtime.org/">Jailtime.org</a>.<br /> <br /> Genial!<br /> <br /> Tenemos un montón de estilos. Los básicos supongo, no creo que se puedan instalar más.<br /> <br /> Ahora vamos a ver el insertar imagenes:<br /> <img src="http://docs.google.com/File?id=dm46fsn_1ftmz7t" title="Firefox User" align="middle" border="1" /><br /> <br /> Bien, aunque le había dicho que centrado:<br /> <div style="text-align: center;"> <img src="http://docs.google.com/File?id=dm46fsn_1ftmz7t" title="Firefox User" align="middle" border="1" /><br /> <div style="text-align: left;"> <br /> Ahora sí.<br /> <br /> <br /> Bueno<br /> <blockquote>Las citas de ésta manera quedan muy bien<br /> </blockquote><br /> Vamos a ver si podemos revisar la ortográfia en español... va a ser que no.<br /> <br /> Ahora a imprimir... muy bien... ahora publicar<br /> <br /> Podemos publicar a una URL propia de Google a la que cualquiera puede acceder, tambien podemos utilizar esto para modificar nuestro Blog... ¿cuál blog?<br /> <br /> Finalmente guardemos nuestro documento en .DOC y en .ODF a ver que tal... vale, lo guarda internamente en alguna parte, veamos si puedo exportarlo:<br /> <br /> En PDF las imagenes no salen nada bien, y los comentarios sí que aparecen.<br /> En OpenOffice lo mismo<br />En MSWord... ehm... páso, pero supongo que será lo mismo.<br /><br /><blogger>Esto ha quedado genial, la verdad es que es mucho más sencillo utilizar Google Docs que la interfaz de Blogger para crear las entradas, y además, puedo guardarlas :)<br /> <br /> </div> </div> </div>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-43221580205029200712007-11-09T15:52:00.000Z2007-11-20T14:19:35.594ZVIA gOS dev kit<p class="normal">VIA a decidido sacar al mercado su placa base VIA CN700 con sistema operativo gOS (Google OS?) por 60$ (unos 50€). Es una placa base utilizada por el Everex Impact un pc de bajo coste distribuido por Walmart con la ídea de acercar a las masas el uso de ordenadores como puerta de entrada a las aplicaciones web ofrecidas principalmente por Google.</p><br /><br /><p class="normal">Según los estandares actuales, el es sistema algo lento. Lo que la diferencia es que viene con una versión de Ubuntu Linux y varias aplicaciones basadas en web de Google. Esto es el futuro de los PC's ya que muchos usuarios podrán comprar estos PC's y tener una buena experiencia utilizando Linux, Firefox y aplicaciones web sin los tipicos problemas de virus, spyware y Windows Genuine Advantage.</p><br /><br /><p class="normal">Otra de las ventajas es su reducido consumo, ya que este equipo con un disco duro puede llegar a consumir 30 vatios durante un uso normal (un pc de escritorio normal puede llegar a consumir 110 vatios), lo cual la convierte en una maquina ideal. Para quienes utilizan XFCE y todo nuestro trabajo se hace a traves de 8 consolas con Vi saben de qué estoy hablando. Para el resto de geeks, un servidor de backup o web de bajo consumo y ruido en una pequeña caja puede ser un cambio amigable con el medio ambiente.</p><br /><br /><p class="normal">La ídea básica es que un usuario inicie gOS y al presentarse el escritorio, sólo tenga que iniciar Firefox y realizar todas sus tareas utilizando las variadas aplicaciones de Google, las cuales abarcan la gran mayoria de aplicaciones de escritorio básicas de cualquier usuario:</p><br /><br /><p class="normal"><br /></p><ul><li>Google Calendar</li><li>Google Maps</li><li>Google Docs (Procesador de Texto, Hoja de Calculo y presentaciones)</li><li>Gmail (Correo)</li><li>Google talk (mensajeria)</li><li>Google Reader (RSS Feeds)</li><li>Google Photos (Picasa Web)</li></ul><br /><br /><p class="normal">Esto sin contar muchas otras aplicaciones web ofrecidas por otras empresas, como por ejemplo, una que me es de gran ayuda llamada <a href="http://www.bubbl.us/">www.bubbl.us</a> que permite crear diagramas de pensamiento o brainstorming.</p><br /><br /><p class="normal">En mi opinión, esto es el futuro y claro, siempre que lo que deseemos sea compilar KDE o jugar Enemy Territory, ésta no es la mejor solución.</p>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-24561444526725268922007-10-22T15:20:00.000+01:002007-10-22T16:06:36.113+01:00Particiones en Ubuntu<span style="font-size:85%;"><p style="font-family:verdana;">Uno de los principales problemas con los que se encuentra un nuevo usuario de Linux, es que la gran mayoría de las distribuciones le piden al usuario una configuración de la tabla de particiones de sus discos duros.<br /></p></span><p face="verdana"><span style="font-size:85%;">Podemos imaginar que un disco duro es como un tallo de bambú, donde cada segmento del tallo es una partición.</span></p><span style="font-size:85%;">Las particiones son de dos tipos: primarias (o logicas) y extendidas. Un disco duro puede tener hasta 4 particiones primarias dentro de las cuales se pueden crear otras extendidas.<br /></span><span style="font-size:85%;"><br />Por ahora olvidemonos de las particiones extendidas y centremonos en las primarias y su importancia.<br /></span><span style="font-size:85%;"><br />Al crear nuestro propio esquema de particiones, debemos primero crearlas. El LiveCD de Ubuntu trae una aplicación para esto llamada Gparted la cual nos facilita mucho este proceso. Este puede ser dividido de la siguiente manera:<br /></span><span style="font-size:85%;"><br />1- Asignar un tamaño a la partición.<br /></span><span style="font-size:85%;">2- Indicar el tipo de partición que será. Para Linux existe la opcion Linux y Linux SWAP<br /></span><span style="font-size:85%;">3- Seleccionar el sistema de ficheros que se va a utilizar. En el caso de las particiones SWAP esto no es necesario.<br /></span><span style="font-size:85%;">4- Formatear<br /></span><span style="font-size:85%;"><br />Un esquema de particiones que me ha dado buenos resultados durante los ultimos 5 años ha sido dividiendo en cuatro (4) el disco duro.<br /><br /></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GKVx1yC7np0/Rxy8Vr2m_UI/AAAAAAAAAEg/HSEomTrsn2Q/s1600-h/partition_table.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GKVx1yC7np0/Rxy8Vr2m_UI/AAAAAAAAAEg/HSEomTrsn2Q/s400/partition_table.png" alt="" id="BLOGGER_PHOTO_ID_5124177556775828802" border="0" /></a><br /><span style="font-size:85%;"><strong>Primera particion (hda1, sda1) 1G</strong>: SWAP. SWAP es un espacio de memoria en el disco duro, invisible para las aplicaciones y permite almacenar información que no es apta para la memoria RAM. La ventaja de utilizar la primera partición para SWAP es que los primeros sectores del disco duro son a donde se accede con mayor velocidad.<br /><br /></span><span style="font-size:85%;"><strong>Segunda partición / (raíz) 5G</strong>: Raíz es de donde cuelgan todas los demás directorios del sistema. Comparandolo con los sistemas Windows se podría decir que es C:<br /><br /></span><span style="font-size:85%;">Las dos anteriores son las particiones obligatorias para sistemas Linux y son las que crean las instalaciones por defecto (cuando utilizamos la opción de particionado automático).<br /><br /></span><span style="font-size:85%;"><strong>Tercera Partición /var (logs) 2G</strong>: En la carpeta /var se almacenan gran cantidad de ficheros de registro o logs. La ventaja de separar /var de los demás es que este directorio se puede llenar sin la participación del usuario, por lo cual podria detener todo el sistema.<br /><br /></span><span style="font-size:85%;"><strong>Cuarta Partición /home (datos usuarios)</strong>: En /home se almacena toda la información concerniente a los usuarios, como por ejemplo, sus preferencias del escritorio (iconos, fondo de pantalla), las preferencias de sus programas (Cuentas de Pidgin, Servidores de Xchat, Favoritos de Firefox) y sus documentos personales. La ventaja de separar /home es que a la hora de instalar un nuevo sistema, solo se deben formatear las dos particiones anteriores sin perder nada de lo contenido aquí.<br /><br /></span><span style="font-size:85%;">En el caso de Ubuntu, he estado cambiando versiones desde la 5.10 hasta la 7.10 siempre he mantenido separado /home por lo que despues de cada instalación, es como si nada hubiera cambiado.<br /><br /></span><span style="font-size:85%;">Espero que haya quedado bastante claro el tema, cualquier duda preguntadme en los comentarios o en #ubuntu-es en irc.freenode.org<br /></span><span style="font-size:85%;"><br />Feliz instalación</span>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-67354927382068501012007-10-21T21:30:00.000+01:002007-10-22T16:11:35.719+01:00Gutsy!<span style="font-size:85%;">El sabado despues de toda la conmoción inicial tome la decisión de actualizar el PC de casa (uberlinux-0) a la última versión de Ubuntu: Gutsy Gibon 7.10.</span><p><span style="font-size:85%;"><br />Este era el único donde todavia utilizaba 6.10 ya que en los otros (2 portatiles y el del curro) utilizo 7.04.</span></p><p><span style="font-size:85%;"><br />La actualización habría pasado por 7.04, para luego llegar a 7.10 pero despues de haber actualizado mis anteriores portatiles reinstalando desde cero, descarge el LiveCD via torrent y a instalar.</span></p><p><span style="font-size:85%;"><br />Mientras descargaba la ISO sentía cierta penuria dada la cierta complejidad que entraña este ordenador. Servicios como SSH y Apache son escenciales, además de las carpetas compartidas y la impresora. Tambien mi configuración de Xorg había logrado ser perfecta.</span></p><p><span style="font-size:85%;"><br />Desde mis primeras incursiones en Linux hace ya tanto tiempo ¿9 años ya? aprendí que cada directorio especial debe tener su partición propia, por lo tanto, la tabla de particiones del disco principal dividia a / de /home, /var y por supuesto swap. La ídea de tener /home separado es obvia, dado que todos los ficheros de los usuarios se encuentran aquí y ciertamente, despues de instalar Gutsy y reiniciar, la única diferencia fue el icono del Bluetooth... el escritorio de mi usuario (y del de mi mujer) eran los mismos, incluso Pidgin encontró la configuración en la antigua carpeta .gaim.</span></p><p><span style="font-size:85%;"><br />Instalar el sistema fue, como todos quienes hemos instalado Ubuntu, sencillo y rápido. Como mucho habrá tomado unos 30 minutos, incluyendo los respectivos backups que tome desde el LiveCD. La única pega que creo recordar tuve tambien con 6.10 fue que al llegar al 100% de la instalación, el proceso se detuvo. Como supuse que todo estaba listo, pulse en reiniciar y el LiveCD apago el PC.</span></p><p><span style="font-size:85%;"><br />Al iniciar en mi nuevo sistema, el escritorio era el mismo, mis elementos del panel que vienen por defecto aparecierón sin ningún problema, asi que lo siguiente fue instalar las aplicaciones básicas: aMule, Xchat, Deluge, SSH, Apache, Samba, codecs, etc... Mientras tanto me fije en que la resolución era algo mayor, pero claro, aun faltaba instalar el soporte para nVidia.</span></p><p><span style="font-size:85%;"><br />Esto fue increiblemente sencillo, antes la frustración con el entorno gráfico podía llevarme a la desesperación, pero despues de reiniciar el sistema con los cambios aplicados, todo era perfecto: resolución, aceleración y colores.</span></p><p><span style="font-size:85%;"><br />Lo siguiente, comprobar la utilidad de Beryl y los efectos gráficos. Sin comentarios, es algo que hay que realmente utilizar para poder descubrir el gran camino que ha habido entre 7.04 y 7.10.</span></p><p><span style="font-size:85%;"><br />Aunque ahora tengo varios efectos activados y probablemente sea la envidia de cualquier usuario de otros sistemas operativos, el efecto que he encontra realmente útil y sin el cual no sé cómo he sobrevivido todo este tiempo, es la traslucides de las ventanas cuando el ratón abandona su enfoque. Supongamos que como ahora, estoy escribiendo esta entrada utilizando el widget del panel de GNOME y necesito leer algo que se encuentra debajo en Firefox. Simplemente muevo el ratón hacia la ventana del navegador, y sin necesidad de hacer click, la ventana del blog se vuelve traslucida, lo que me permite trabajar en las dos al mismo tiempo. Realmente increible.</span></p><p><span style="font-size:85%;"><br />El multifunción fue de risa de configurar, bueno, en realidad no tuve que hacer nada, sencillamente encenderlo y ya estaba listo para funcionar. ¿Drivers?¿Qué es eso?</span></p><p><span style="font-size:85%;"><br />En fin, que en menos de 2 horas tenía el sistema nuevo, pero con todo lo viejo. Lo recomiendo.</span></p><p><span style="font-size:85%;"><br />¿Por qué /var en una partición aparte? Habiendo trabajado con muchos servidores Linux desde hace algún tiempo ya, sabes que en /var se escriben todos los ficheros de registro (o logs) y si por alguna razón estos ficheros llegan a ser tan grandes que llenen la partición, si esta se encuentra aparte de / el sistema no dejará de funcionar. Una partición para /var de un 10% de la capacidad total es más que suficiente.</span></p>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-56055942362753368712007-10-16T19:33:00.000+01:002007-10-16T19:34:55.482+01:00Test GNU/Linux 2007<span style="font-family: verdana;font-size:85%;" >Hoy he creado un pequeño test (45 preguntas) que espero vaya creciendo poco a poco para que la gente pueda poner a prueba sus conocimientos de Linux.</span><p style="font-family: verdana;"><span style="font-size:85%;"><br />He intentado hacerlo lo más independiente de las distribuciones posible, y mezclando distintos niveles de conocimiento. Quizas algunas preguntas parezcan sencillas, pero algunas otras me han costado mucho aprenderlas.</span></p><p style="font-family: verdana;"><span style="font-size:85%;"><br />Espero poder publicar otro que sea un poco más sencillo y orientado a conocimiento general para quienes esten iniciandose.</span></p><p style="font-family: verdana;"><span style="font-size:85%;"><br /><a href="http://www.daypo.com/test-gnu-linux-2007.html">GNU/Linux Test 2007</a></span></p><p style="font-family: verdana;"><span style="font-size:85%;"><br />Disfrutad</span></p>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-91505058400230572242007-10-03T14:17:00.000+01:002007-10-03T14:30:56.553+01:00Heroe de CNN que recicla PC's<span style="font-family: verdana;font-size:85%;" >James Burgett es un entusiasta de la informática y convertido en heroe por CNN gracias a su iniciativa de reciclar toneladas de ordenadores de la basura, instalarles Linux (Ubuntu en particular) y luego donarlos a escuelas, personas sin recursos u otras organizaciones. Podeis ver el video <a href="http://www.cnn.com/video/#/video/living/2007/08/14/cnn.heroes.james.burgett.cnn">aquí</a>.</span><p style="font-family: verdana;font-family:verdana;" ><span style="font-size:85%;"><br />En Slashdot se discute acerca de la verdadera repercusión para la humanidad de alguien como Burguett y si realmente su labor es de mayor importancia que la de otras personas como Eugene Rutagarama quien se dedica a salvar a los gorilas de la extinción.</span></p><p style="font-family: verdana;font-family:verdana;" ><span style="font-size:85%;"><br />En ésta encuesta no se busca a un ganador, sino simplemente dar a conocer la capacidad que tiene un individuo de colaborar en cualquier frente para detener el desgaste que está siendo a nuestro planeta y ecosistemas. Claro que es una manera un tanto amarillista, pero que funciona.</span></p><p style="font-family: verdana;font-family:verdana;" ><span style="font-size:85%;"><br />A veces no se piensa que el coste medio ambiental para la construcción de un ordenador es inmenso. Según un <a href="http://update.unu.edu/archive/issue31_5.htm">reporte</a> de la UNU (Universidad de las Naciones Unidas) el PC promedio de 24Kg con monitor CRT incluido, requiere de 10 veces su peso en químicos y combustibles fósiles, lo que se traduce en: 240Kg de combustible, 22Kg material químico y 1.500Kg de agua (tonelada y media!) lo que da un total de aproximadamente 1,8 Toneladas de materiales.</span></p><p style="font-family: verdana;font-family:verdana;" ><span style="font-size:85%;"><br />En esta página titulada <a href="http://www.corpwatch.org/article.php?id=3432">The Environmental Cost of Computer Chips</a> desglosan el coste de producir un microprocesador en los años noventa. Supongo que los métodos de producción empleados hoy en día habrán mejorado un poco, aunque tampoco me cortaría una mano por afirmarlo.</span></p><p style="font-family: verdana;font-family:verdana;" ><span style="font-size:85%;"><br />Además de los costes de producir un equipo informático, nos encontramos con la cruda realidad de que muchos de los materiales utilizados no son reciclables y la única opción para realizar un reciclaje efectivo es el reutilizar estos... utilizando <strong>Software Libre</strong>.</span></p><p style="font-family: verdana;font-family:verdana;" ><span style="font-size:85%;">Podeis encontrar más información en la página web del Alameda County Computer Resource Center en su <a href="http://www.accrc.org/">página web</a> o visitar el Blog de </span><span style="font-size:85%;">James Burgett llamado <a href="http://aftermath-technologies.blogspot.com/">aftermath technologies</a>.</span></p>Ubersoldathttp://www.blogger.com/profile/05083113362664157456noreply@blogger.comtag:blogger.com,1999:blog-5022667766051686813.post-33523489604403362562007-09-21T16:48:00.000+01:002007-09-21T18:01:34.948+01:00Servidor Virtual de FTP Seguro con MySQL<span style="font-size:85%;"><span style="font-family:verdana;">Hoy vamos a instalar un servidor Ubuntu para un FTP virtual (VSFTP).</span><br /><span style="font-family:verdana;">Los usuarios van a estar almacenados en una base de datos MySQL (cualquier otra sirve, como por ejemplo, PostgreSQL) por lo cual nuestro nuevo servidor debe tener instaladas todas las aplicaciones necesarias:</span><br /><br /></span><ul><li><span style="font-size:85%;"><span style="font-family:verdana;"><span style="font-weight: bold;">vsftpd</span>: Servidor FTP</span></span></li><li><span style="font-size:85%;"><span style="font-family:verdana;"><span style="font-weight: bold;">pam</span>: Modulos de autenticación</span></span></li><li><span style="font-size:85%;"><span style="font-family:verdana;"><span style="font-weight: bold;">MySQL</span>: Base de datos</span></span></li></ul><span style="font-size:85%;"><br /><span style="font-family:verdana;">Despues de tener instalado el servidor Ubuntu le indicamos el siguiente comando:</span><br /><span style="font-family: verdana; color: rgb(51, 255, 51);font-size:85%;" ><br /></span><span style="font-family: verdana; color: rgb(204, 204, 204);font-family:verdana;font-size:85%;" >$sudo apt-get install libpam-mysql vsftpd mysql-server</span><br /><br /><span style="font-family:verdana;">Lo cual instalará todo lo necesario siguiendo sus dependencias. Así que lo siguiente será configurar todo esto para que trabajen juntos.</span><br /><br /><span style="font-weight: bold;font-family:verdana;font-size:100%;" >Configuración MySQL</span><br /><span style="font-family:verdana;">Nos vamos a centrar en la configuración que nos interesa en este momentos, por lo tanto, esto no es lo único que se debe hacer despues de instalar MySQL.</span><br /><span style="font-weight: bold;font-family:verdana;" >1. Nos conectamos a MySQL</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >$mysql -u root -p</span><br /><br /><span style="font-weight: bold;font-family:verdana;" >2. Creamos la base de datos para los usuarios del vsftpd</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql>CREATE DATABASE vsftpd;</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql>USE vsftpd</span><br /><br /><span style="font-weight: bold;font-family:verdana;" >3. Creamos la tabla</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql>CREATE TABLE accounts (</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >id int AUTO_INCREMENT NOT NULL,</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >username varchar(30) binary NOT NULL,</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >pass varchar(50) binary NOT NULL,</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >primary key(id)</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >);</span><br /><br /><span style="font-weight: bold;font-family:verdana;" >4. Si lo deseamos, podemos crear una tabla donde se almacene un registro</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql> CREATE TABLE logs (msg varchar(255),</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >user varchar(20),</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >pid int,</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >host char(32),</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >rhost char(32),</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >logtime timestamp</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >);</span><br /><br /><span style="font-weight: bold;font-family:verdana;" >5. Finalmente, creamos un usuario específico para el vsftpd (no queremos usar 'root')</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >GRANT SELECT, INSERT, UPDATE ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'contraseña_segura');</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql>FLUSH PRIVELEGES;</span><br /><br /><span style="font-family:verdana;">Si deseamos algo más de seguridad:</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql> GRANT SELECT ON vsftpd.accounts TO 'vsftpd'@'localhost' IDENTIFIED BY 'contraseña_segura');</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql> GRANT INSERT ON vsftpd.logs TO 'vsftpd'@'localhost' IDENTIFIED BY 'contraseña_segura');</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >mysql> FLUSH PRIVELEGES;</span><br /><br /><span style="font-family:verdana;">Esto no nos permitira realizar ningún cambio en los usuarios a menos que seamos 'root' de MySQL.</span><br /><br /><span style="font-weight: bold;font-family:verdana;font-size:100%;" >Configuración Ubuntu</span><br /><span style="font-weight: bold;font-family:verdana;" >1. Crear el usuario 'vsftpd'</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >$sudo adduser --ingroup nogroup -d /home/vsftpd -s /bin/false vsftpd</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >$sudo chown vsftpd.nogroup /home/vsftpd</span><br /><br /><span style="font-weight: bold;font-family:verdana;" >2.Modificar el fichero de configuración de PAM para el vsftpd</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >$sudo vi /etc/pam.d/vsftpd</span><br /><br /><span style="font-family:verdana;">Añadimos lo siguiente:</span><br /><span style="color: rgb(255, 153, 0);font-family:verdana;" >auth required pam_mysql.so config_file=/etc/security/pam_mysql try_first_pass=false</span><br /><span style="color: rgb(255, 153, 0);font-family:verdana;" >account required pam_mysql.so config_file=/etc/security/pam_mysql try_first_pass=false</span><br /><br /><span style="font-family:verdana;">Lo siguiente es crear ese fichero pam_mysql.conf</span><br /><span style="color: rgb(204, 204, 204);font-family:verdana;" >$sudo vi /etc/security/pam_mysql</span><br /><span style="color: rgb(255, 153, 0);font-family:verdana;" >users.host=localhost</span><br /><span style="color: rgb(255, 153, 0);font-family:verdana;" >users.database=vsftpd</span><br /><span style="color: rgb(255, 153, 0);font-family:verdana;" >users.db_user=vsftpd</span><br