<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11311031</id><updated>2012-01-09T19:40:53.920-04:00</updated><category term='c#'/><category term='PHP'/><category term='Software Libre'/><category term='wikipedia'/><category term='poo'/><category term='MySQL'/><category term='net'/><category term='Filosofía'/><category term='Linux'/><category term='kiwix'/><category term='AJAX'/><category term='Inkscape'/><category term='Windows'/><category term='JavaScript'/><category term='bash'/><category term='empleo'/><category term='extjs'/><title type='text'>De serrer les dents</title><subtitle type='html'>Filosofía, tecnología y azúcar al gusto.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11311031.post-2060542212859663187</id><published>2011-07-02T16:57:00.005-04:00</published><updated>2011-07-02T22:33:33.585-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Filosofía'/><title type='text'>L'inspiration</title><content type='html'>C'est ma première entrée française dans le blog. Je ne mens pas, J'ai un dictionnaire  à me côté .&lt;br /&gt;&lt;br /&gt;C'est difficile faire les choses de forme obligatoire. Cela a également comprend&amp;nbsp;le processus d'écriture.&amp;nbsp;Quand il ya&amp;nbsp;une obligation est difficil trouver l'inspiration. L'obligation&amp;nbsp;tue&amp;nbsp;l'inspiration. Car, oui!, si&amp;nbsp;vous cherchez&amp;nbsp;le thème principal de&amp;nbsp;ce que j'écris.&lt;br /&gt;&lt;br /&gt;Plusieurs têtes&amp;nbsp;ont trouvé la mort&amp;nbsp;dans la vie&amp;nbsp;à cause de cela, D'autres ont&amp;nbsp;trouvé l'inspiration&amp;nbsp;quand ils oublient&amp;nbsp;l'argent, la célébrité&amp;nbsp;et l'ego. De bonnes egos&amp;nbsp;n'est pas&amp;nbsp;un synonyme&amp;nbsp;réelle de l'apprentissage &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;i&gt;l'école&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il ya toujours une personne qui essaie de se démarquer au-dessus de tous&amp;nbsp;.&amp;nbsp;Ce sont des gens&amp;nbsp;avec une moyenne&amp;nbsp;excellent point&amp;nbsp;de grade, mais&amp;nbsp;ils ont mis&amp;nbsp;tant d'efforts&amp;nbsp;à obtenir&amp;nbsp;de bonnes notes&amp;nbsp;qu'ils oublient l'apprentissage lui-même.&amp;nbsp;Étude&amp;nbsp;par l'ego, l'ego&amp;nbsp;de montrer&amp;nbsp;ses points&amp;nbsp;excellente,&amp;nbsp;à d'autres.&lt;br /&gt;&lt;br /&gt;Certificats, diplômes, tests&amp;nbsp;et même&amp;nbsp;les mêmes cours&amp;nbsp;que les&amp;nbsp;étudiants&amp;nbsp;d'évaluerleurs&amp;nbsp;capacités de mémoire, ces choses tuent&amp;nbsp;l'inspiration&amp;nbsp;pour apprendre. &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;i&gt;la naissance&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Le peintre&amp;nbsp;colombien de&amp;nbsp;grosses personnes, Botero,&amp;nbsp;a trouvé l'inspiration&amp;nbsp;quand sa&amp;nbsp;femme et son fils&amp;nbsp;était mort dans un&amp;nbsp;accident de la circulation.&amp;nbsp;Peu de temps après, est devenu&amp;nbsp;un exposantmondiale, aujourd'hui ses toiles et exculturas sont reconnus mondialement. Il est difficile de&amp;nbsp;trouver de l'inspiration, si&amp;nbsp;vous cherchez la paix&amp;nbsp;et la stabilité, le point de conformité empêche que vous voyez des opportunités&amp;nbsp;.&lt;br /&gt;&lt;br /&gt;Dans ce cas,&amp;nbsp;l'artiste&amp;nbsp;retourna&amp;nbsp;d'entre les morts.&amp;nbsp;Sa famille&amp;nbsp;est mort&amp;nbsp;afin qu'il puisseêtre né de nouveau. Les&amp;nbsp;moments difficiles&amp;nbsp;peuvent&amp;nbsp;inspirer,&amp;nbsp;mais peut aussi&amp;nbsp;réveiller les gens, bienvivants,&amp;nbsp;étaient déjà morts&amp;nbsp;avant la naissance.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;i&gt;Le changement&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L'inspiration peut prendre des années à arriver. Garcia Marquez, par exemple, prend 30 ans avant d'écrire la première page de son roman glorieux.&lt;br /&gt;&lt;br /&gt;Prendre une décision maintenant, porter du noir aujourd'hui, au lieu de vivre une vie dans un costume gris.&amp;nbsp;Changer vos objectifs et l'a converti en un plus haut!.&lt;br /&gt;&lt;br /&gt;N'ayez pas peur de faire une erreur de penser que c'est fou, ne pas avoir peur du rejet, le pire qui puisse arriver, c'est ne jamais essayer. L'inspiration vient de l'intérieur de vous et utilisez-le seulement à vous pour réaliser vos rêves.&lt;br /&gt;&lt;br /&gt;Peut-être que vous voulez vivre avec un esprit mort? Si oui, il vaut mieux ne jamais être né, nous n'avons pas besoin des gens avec des esprits des morts, nous avons besoin de gens prêts à vivre avec la capacité d'aimer chaque instant.&lt;br /&gt;&lt;br /&gt;Mon point n'est pas perdu dans une mer de philosophie ennuyeux, j'essaie d'écrire quelque chose qui va vous servir pour la vie.&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-2060542212859663187?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/2060542212859663187/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=2060542212859663187' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/2060542212859663187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/2060542212859663187'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2011/07/linspiration.html' title='L&apos;inspiration'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-5734140561673744382</id><published>2011-01-31T14:21:00.003-04:00</published><updated>2011-07-02T15:44:22.052-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kiwix'/><title type='text'>Wikipedia en CD</title><content type='html'>Casi todo el contenido de los proyectos de la Fundación Wikimedia son  publicados bajo licencias que permiten a cualquiera descargar el  contenido y distribuírlo en la forma que deseen. Esto ha permitido que  varios proyectos hayan publicado su contenido offline como: alemán,  polaco, portugués y Wikipedias en Inglés.&lt;br /&gt;Antes de que cualquier proyecto nuevo esté previsto para la  publicación de Wikipedia en DVD, tarjeta de memoria flash, o cualquier  otra forma de soporte digital fija, debe mantener en claro cuál es el  objetivo de la distribución. ¿Debería ser simplemente un medio para  acceder en línea Wikipedia, o debe ofrecer una enciclopedia multimedia  más rica en características, tales como el DVD Britannica o Encarta de  Microsoft? ¿Va a incorporar características interactivas?&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Una distribución de Wikipedia offline debe involucrar una serie de pasos&lt;/b&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;ol&gt;&lt;li&gt;Determinar el alcance de la liberación, a menudo dictadas por el  espacio disponible en el medio utilizado. ¿La liberación será de  carácter general, o se limita (por ejemplo) sólo artículos sobre las  aves? ¿Se incluyen todos los artículos, o sólo los más importantes y de  mejor calidad? ¿Se incluye sólo texto, o imágenes en miniatura,  fotografías seleccionadas, o imagen completa/archivos de vídeo?&lt;/li&gt;&lt;li&gt;Si se trata de algún proceso de selección, a continuación, los  criterios para la selección deben ser determinados, generalmente se basa  en una combinación de tema, importancia y calidad. Entonces el proceso  en sí mismo se debe determinar - esto debe ser escalable (la experiencia  ha demostrado que la selección manual es muy intensiva en trabajo y  factible más allá de 5000 artículos) - y fundamentar la correspondiente  infraestructura. En las Wikipedias Inglés y Francés, la selección se ha  hecho con éxito el uso de metadatos compilados de Wikiproyectos, en la  Wikipedia en Inglés, una selección de 31.000 artículos se hizo de una  piscina de 1,6 millones de artículos evaluados.&lt;/li&gt;&lt;li&gt;Después de que todo esto sea decidido, hay que decidir también sobre  la forma de este paquete (digital) dada la cantidad de espacio que se  requiere y si debe ser objeto de CD, cd-rom, etc.&lt;/li&gt;&lt;li&gt;Por último, después de que todo el trabajo de selección esté hecho,  se puede comenzar a hablar acerca de la distribución física. El método  de distribución más común es simplemente permitir que la imagen de disco  pueda ser descargado en línea para que las personas pueden crear sus  propia colección en el medio que consideren.&lt;/li&gt;&lt;/ol&gt;&lt;h2 id="section-1"&gt;&lt;span class="Apple-style-span" style="font-size: 19px;"&gt;Qué colección de artículos&lt;/span&gt;&lt;/h2&gt;Dependiendo del producto final, esto es para garantizar que los  materiales son del tamaño adecuado y pertinente para los destinatarios.  Hay muchos factores a considerar en el desarrollo de la colección más  aplicable y apropiado de los artículos:&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Público&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;General/adultos - Wikipedia reducido a los contenidos más esenciales&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt;Popularidad de una página determinada.&lt;/dd&gt;&lt;dd&gt;Número de veces que da la página está vinculada o hace referencia a otros sitios.&lt;/dd&gt;&lt;dd&gt;Categoría general de la página (quitando, por ejemplo: bandas pop, artistas, y la parafernalia sexual)&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt;Estudiantes/niños - Wikipedia reducido a un contenido apropiado más esencial para niño.&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt;Por ejemplo, &lt;a class="external text" href="http://en.wikipedia.org/wiki/Wikipedia:Version_1.0_Editorial_Team" rel="nofollow"&gt;Wikipedia 1.0&lt;/a&gt; (&lt;i&gt;en inglés&lt;/i&gt;)&lt;/dd&gt;&lt;dd&gt;O, quizás: &lt;a class="external text" href="http://simple.wikipedia.org/wiki/Main_Page" rel="nofollow"&gt;Wikipedia Simple en Inglés&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Complejidad del Artículo&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Idiomas alternativos&lt;/li&gt;&lt;li&gt;Simplificado del Español.&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;b&gt;Propósito&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;General - más o menos cualquier/todo el contenido de Wikipedia es aceptable&lt;/li&gt;&lt;li&gt;Del lugar - el deseo sólo un subconjunto específico de artículos&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt;Objeto específico de audiencia específica (por ejemplo, "&lt;a class="external text" href="http://en.wikibooks.org/wiki/Wikijunior" rel="nofollow"&gt;Wikichicos&lt;/a&gt;" - para los niños)&lt;/dd&gt;&lt;dd&gt;Artículos específicos alrededor de un tema (por ejemplo, "&lt;a class="external text" href="http://wiki.laptop.org/go/Wikiosity" rel="nofollow"&gt;Wikiosity&lt;/a&gt;" - selecciona los artículos pertinentes alrededor de un tema específico)&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;h3 id="section-3"&gt;&lt;span class="editsection" id="editsection-3" style="font-size: 8pt;"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="Qu.C3.A9_calidad_deben_tener_los_art.C3.ADculos"&gt;Qué calidad deben tener los artículos&lt;/span&gt;&lt;/h3&gt;Es la versión del artículo a descargar. Varios proyectos están  actualmente en marcha para ayudar a identificar esto, por ejemplo &lt;a class="external text" href="http://www.wikitrust.net/" rel="nofollow"&gt;WikiTrust&lt;/a&gt;&lt;br /&gt;&lt;h2 id="section-4"&gt;&lt;span class="editsection" id="editsection-4" style="font-size: 8pt;"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="Exportar_Wikipedia_a_un_archivo_y_almacenar"&gt;Exportar Wikipedia a un archivo y almacenar&lt;/span&gt;&lt;/h2&gt;Este trabajo se está haciendo por un grupo de voluntarios en un proyecto llamado &lt;a class="new" href="http://es.wikipedia.org/w/index.php?title=OpenZIM&amp;amp;action=edit&amp;amp;redlink=1" title="OpenZIM (aún no redactado)"&gt;openZIM&lt;/a&gt;,  que es apoyado por la Fundación Wikimedia. La extensión PediaPress  Collection también puede exportar archivos de ZIM, la prueba de la  primera aplicación ya ha comenzado.&lt;br /&gt;&lt;h2 id="section-5"&gt;&lt;span class="editsection" id="editsection-5" style="font-size: 8pt;"&gt;&lt;/span&gt;&lt;span class="mw-headline" id="Lector"&gt;Lector&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Descargar/CD/USB&lt;/b&gt; - &lt;a href="http://es.wikipedia.org/wiki/Kiwix" title="Kiwix"&gt;Kiwix&lt;/a&gt; (Compatible con el formato ZIM y apoyado por la Fundación Wikimedia)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Imprimir&lt;/b&gt; - Por ejemplo, PediaPress&lt;/li&gt;&lt;/ul&gt;Una cuestión clave a considerar cuando se piensa en construir la  distribución es como se usará y a quién va dirigido, con el fin de  llegar más eficazmente a las audiencias previstas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-5734140561673744382?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/5734140561673744382/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=5734140561673744382' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/5734140561673744382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/5734140561673744382'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2011/01/wikipedia-en-cd.html' title='Wikipedia en CD'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-379917401778273373</id><published>2011-01-28T11:34:00.003-04:00</published><updated>2011-01-28T13:43:15.446-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kiwix'/><title type='text'>La Fundación Wikimedia apoya a Kiwix</title><content type='html'>Esperado desde hace mucho tiempo, la &lt;a href="http://www.wikimedia.org/"&gt;Fundación Wikimedia&lt;/a&gt;, ahora soporta oficialmente a Kiwix. El blog técnico de la Fundación &lt;a href="http://techblog.wikimedia.org/2011/01/wmf-engineering-update/"&gt;había sugerido&lt;/a&gt; en varias ocasiones en las últimas semanas, pero gracias a &lt;a href="http://techblog.wikimedia.org/2011/01/update-on-offline-wikimedia-projects/"&gt;un boletín completo sobre el tema "Wikipedia offline"&lt;/a&gt; es como la noticia fue anunciada.&lt;br /&gt;&lt;br /&gt;Esta decisión es el fruto de un trabajo de varios autores por casi dos años y será tomado en cuenta en futuros trabajos de la dirección estratégica de la Fundación. Después de haber decidido que la prioridad estratégica primordial era aumentar el tamaño de los lectores, la Fundación Wikimedia, lógicamente, se ha interesado en el suministro de soluciones de contenido fuera de línea. De allí el interés por Kiwix.&lt;br /&gt;&lt;br /&gt;Es una alegría, naturalmente, tener este nuevo soporte. El primer paso de esta colaboración ya ha comenzado: un esfuerzo conjunto para analizar y mejorar la experiencia del usuario. Este trabajo se espera que dure varios meses y el resultado probablemente se correlacionan con la versión final de la versión 0.9 de Kiwix.&lt;br /&gt;&lt;br /&gt;La otra buena noticia, que sin duda es algo de nosotros mismos, es que el proyecto que pusimos en marcha openZIM también les llamó la atención y es parte de nuestra solución. Se firmó un contrato para &lt;a href="http://pediapress.com/"&gt;PediaPress&lt;/a&gt; &lt;a href="http://www.mediawiki.org/wiki/Extension:Collection"&gt;una extensión de Mediawiki llamada "Colección"&lt;/a&gt;, que también permite crear archivos ZIM.&lt;br /&gt;&lt;br /&gt;Hoy Kiwix ya funciona muy bien y ahora es fácil de hacer DVDs con contenido de Wikipedia. Con este nuevo soporte, la promesa de una distribución de contenido aún mayor, totalmente libre y desprovista de los intereses comerciales probablemente será posible realizar. &lt;br /&gt;&lt;br /&gt;Fuente. &lt;a href="http://blog.kiwix.org/post/2011/01/26/La-Wikimedia-Foundation-soutient-activement-Kiwix?pub=1#pr"&gt;Traducción del artículo original&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-379917401778273373?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/379917401778273373/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=379917401778273373' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/379917401778273373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/379917401778273373'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2011/01/la-fundacion-wikimedia-apoya-kiwix.html' title='La Fundación Wikimedia apoya a Kiwix'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-8748631678002608315</id><published>2010-12-10T15:17:00.003-04:00</published><updated>2010-12-13T09:32:04.547-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Servicio de Windows para bloquear memorias USB o USB de tipo STORAGE con C#</title><content type='html'>&lt;b&gt;El Problema&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Son bien conocidos los inconvenientes de MS Windows XP/7 para evitar los virus. En especial, los que utilizan unidades de almacenamiento secundario para propagarse. &lt;br /&gt;&lt;br /&gt;Recientemente, he iniciado una migración a Linux por motivos de seguridad (muchos motivos en realidad). Durante el proceso de migración, que suele tomar bastante tiempo (esto depende de muchos factores, claro está), es necesario mantener a las estaciones operativas. &lt;br /&gt;&lt;br /&gt;Es un trabajo sucio que alguien debe hacer, perder un tiempo menor para ganar un tiempo mayor (tiempo que será aprovechado para la migración a linux). Ese es el objetivo de este tutorial, establecer políticas efectivas de seguridad para manejar los dispositivos de almacenamiento secundario.&lt;br /&gt;&lt;br /&gt;Existen problemas de seguridad esenciales que el sistema operativo debería solucionar por si mismo (o en el peor de los casos facilitar las herramientas para que el usuario lo solucionarlo), sin embargo, cuando el sistema operativo no solo no es capaz de establecer políticas de seguridad efectivas sino que también abre puertas traseras a propósito para enviar información privada (como el spyware de WGA), ¿qué tipo de seguridad podrás esperar?, pues si, ninguna.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;La Solución&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Como solución momentánea, se me ocurrió elaborar un servicio que admita solamente los USB STORAGE (unidades de almacenamiento secundario) que se que no tendrán virus ni traerán programas de otras partes. Digamos que son dispositivos de almacenamiento de confianza.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Componentes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;*Para ello he ideado un filtro simple. Un archivo de texto que llamaremos "usb.b64" encriptado con base64, que va a contener todos los seriales (identificadores únicos) de los dispositivos, uno por cada línea del archivo.&lt;br /&gt;&lt;br /&gt;*Un servicio que lee el contenido del archivo "usb.64". Este servicio lee el contenido del archivo solamente cuando sea insertado un dispositivo USB tipo STORAGE.&lt;br /&gt;&lt;br /&gt;*Si el dispositivo no está en la lista (No es un dispositivo de confianza) será retirado su hardware inmediatamente y no será reconocido nunca de allí en adelante. Para ello usaremos una utilidad de línea de comandos llamada "Devcon" que es una aplicación llamada desde nuestro servicio. "Devcon" es algo así como el administrador de dispositivos desde la consola de MS-DOS. Un ejemplo sencillo en Devcon para desactivar todas las unidades de almacenamiento secundario sería:&lt;br /&gt;&lt;br /&gt;&amp;gt; devcon disable USBSTOR*&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Herramientas que necesitaremos&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Antes que nada necesitamos una versión del compilador de c# (preferiblemente gratis). No tires tu dinero a la basura comprando la suite completa de Visual Studio a menos que necesites obligatoriamente desarrollar aplicaciones para Windows que utilicen controles especiales propietarios. Yo recomendaría &lt;a href="http://www.microsoft.com/express/Downloads/"&gt;Microsoft Visual C# 2010 Express&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Otra cosa que vamos a necesitar es la utilidad Devcon que les comenté arriba, pueden conseguirla &lt;a href="http://support.microsoft.com/kb/311272"&gt;aquí&lt;/a&gt;. Este enlace también brinda los detalles para utilizar devcon.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Código a compilar&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;El código pudiera ser difícil de utilizar o entender leyéndolo directamente en el blog (si tienes alguna idea puedes hacermela llegar), por eso te invito a copiarlo y pegarlo en tu editor favorito.&lt;br /&gt;&lt;br /&gt;Otra cosa que debes conocer es como instalar esta aplicación como servicio. Para ello debes utilizar installutil (Una utilidad que trae el .net framework que suele estar en WINDOWS\Microsoft.NET\Framework\v2.0....). Debes crearle un instalador al servicio&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;using System;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Management;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.ServiceProcess;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Security;&lt;br /&gt;namespace USBService&lt;br /&gt;{&lt;br /&gt;public class WMIEvent : System.ServiceProcess.ServiceBase&lt;br /&gt;{&lt;br /&gt;private System.ComponentModel.Container components;&lt;br /&gt;&lt;br /&gt;public WMIEvent()&lt;br /&gt;{&lt;br /&gt;InitializeComponent();&lt;br /&gt;}&lt;br /&gt;static void Main()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;ServiceBase[] ServicesToRun;&lt;br /&gt;ServicesToRun = new ServiceBase[] { new WMIEvent() };&lt;br /&gt;ServiceBase.Run(ServicesToRun);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;private void InitializeComponent()&lt;br /&gt;{&lt;br /&gt;components = new System.ComponentModel.Container();&lt;br /&gt;this.ServiceName = "WMIEvent";&lt;br /&gt;}&lt;br /&gt;protected override void OnStart(string[] args)&lt;br /&gt;{&lt;br /&gt;WMIEvent we = new WMIEvent();&lt;br /&gt;ManagementEventWatcher w = null;&lt;br /&gt;WqlEventQuery q;&lt;br /&gt;ManagementOperationObserver observer = new&lt;br /&gt;ManagementOperationObserver();&lt;br /&gt;// Bind to local machine&lt;br /&gt;ManagementScope scope = new ManagementScope("root\\CIMV2");&lt;br /&gt;scope.Options.EnablePrivileges = true; //sets required&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;q = new WqlEventQuery();&lt;br /&gt;q.EventClassName = "__InstanceOperationEvent";&lt;br /&gt;q.WithinInterval = new TimeSpan(0, 0, 3);&lt;br /&gt;q.Condition = @"TargetInstance ISA 'Win32_DiskDrive' ";&lt;br /&gt;//EventLog es una forma de escribir lo que está pasando en&lt;br /&gt;//el visor de sucesos de windows&lt;br /&gt;EventLog.WriteEntry(q.QueryString);&lt;br /&gt;w = new ManagementEventWatcher(q);&lt;br /&gt;w.EventArrived += new&lt;br /&gt;EventArrivedEventHandler(we.UsbEventArrived);&lt;br /&gt;w.Start();&lt;br /&gt;&lt;br /&gt;}           &lt;br /&gt;catch (Exception e)&lt;br /&gt;{&lt;br /&gt;EventLog.WriteEntry(e.Message);&lt;br /&gt;}          &lt;br /&gt;}&lt;br /&gt;protected override void OnStop()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// TODO: Add code here to perform any tear-down necessary to stop your service.&lt;br /&gt;}&lt;br /&gt;public void UsbEventArrived(object sender, EventArrivedEventArgs e)&lt;br /&gt;{&lt;br /&gt;ManagementBaseObject mbo = null;&lt;br /&gt;&lt;br /&gt;mbo = (ManagementBaseObject)e.NewEvent;&lt;br /&gt;&lt;br /&gt;if ((mbo.ClassPath.ClassName == "__InstanceCreationEvent"))&lt;br /&gt;{               &lt;br /&gt;EventLog.WriteEntry("Usb insertado");&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;//Busco todos los dispositivos USB del sistema&lt;br /&gt;SelectQuery selectQuery = new SelectQuery("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");&lt;br /&gt;ManagementObjectSearcher searcher = new&lt;br /&gt;ManagementObjectSearcher(selectQuery);&lt;br /&gt;&lt;br /&gt;string archivoContenido = contenidoArchivo();&lt;br /&gt;//Verifico los que están insertados&lt;br /&gt;foreach (ManagementObject disk in searcher.Get())&lt;br /&gt;{&lt;br /&gt;//Guardo en idUSB el serial del &lt;br /&gt;string idUSB = disk["PNPDeviceID"].ToString();&lt;br /&gt;EventLog.WriteEntry("Encontrado dispositivo: " + idUSB);     &lt;br /&gt;deshabilitarUSB(!estaEnLaLista(idUSB, archivoContenido), idUSB);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;catch (Exception j)&lt;br /&gt;{&lt;br /&gt;EventLog.WriteEntry(j.Message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;EventLog.WriteEntry("Usb retirado");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;Console.WriteLine((string)mbo["Name"]);&lt;br /&gt;&lt;br /&gt;foreach (PropertyData prop in mbo.Properties)&lt;br /&gt;EventLog.WriteEntry("{0} - {1}" + prop.Name + prop.Value);&lt;br /&gt;}      &lt;br /&gt;public void deshabilitarUSB(bool deshabilitar, string idUSB)&lt;br /&gt;{            &lt;br /&gt;ProcessStartInfo startInfo = new ProcessStartInfo();&lt;br /&gt;startInfo.CreateNoWindow = false;&lt;br /&gt;startInfo.UseShellExecute = false;&lt;br /&gt;//Reenvía todo la salida de Devcon a mi aplicación c#&lt;br /&gt;startInfo.RedirectStandardOutput = true;&lt;br /&gt;&lt;br /&gt;//Devcon es la utilidad que permite desactivar hardware&lt;br /&gt;startInfo.FileName = "devcon.exe";&lt;br /&gt;&lt;br /&gt;startInfo.WindowStyle = ProcessWindowStyle.Hidden;&lt;br /&gt;//Deshabilito o habilito según sea el caso&lt;br /&gt;//Es necesario utilizar @ porque el idUSB suele contener carácteres especiales como \, &amp;amp;..&lt;br /&gt;startInfo.Arguments = ((deshabilitar) ? ("disable @") : ("enable @")) + idUSB; &lt;br /&gt;&lt;br /&gt;EventLog.WriteEntry(startInfo.FileName.ToString() + " " + startInfo.Arguments.ToString());&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;using (Process exeProcess = Process.Start(startInfo))&lt;br /&gt;{&lt;br /&gt;EventLog.WriteEntry(exeProcess.StandardOutput.ReadToEnd());&lt;br /&gt;exeProcess.WaitForExit();                    &lt;br /&gt;}                &lt;br /&gt;}&lt;br /&gt;catch (Exception x)&lt;br /&gt;{&lt;br /&gt;EventLog.WriteEntry(x.Message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;//Desemcriptar archivo&lt;br /&gt;static public string DecodeFrom64(string encodedData)&lt;br /&gt;{&lt;br /&gt;byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);&lt;br /&gt;string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);&lt;br /&gt;return returnValue;&lt;br /&gt;}&lt;br /&gt;//Buscar items duplicados&lt;br /&gt;private bool estaEnLaLista(string valuestr, string mainstr)&lt;br /&gt;{&lt;br /&gt;int index = mainstr.IndexOf(valuestr);&lt;br /&gt;bool estado= (mainstr.IndexOf(valuestr) != -1);&lt;br /&gt;EventLog.WriteEntry("El dispositivo " + ((estado) ? ("si") : ("no"))+ " está en la lista");&lt;br /&gt;return (estado) ? (true) : (false);&lt;br /&gt;}&lt;br /&gt;private string contenidoArchivo()&lt;br /&gt;{&lt;br /&gt;string s = "";&lt;br /&gt;using (StreamReader rdr = File.OpenText(Environment.GetEnvironmentVariable("windir").ToString() + "\\usb.b64"))&lt;br /&gt;s = rdr.ReadToEnd();&lt;br /&gt;return DecodeFrom64(s).Trim();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Este es el código del instalador del servicio:&lt;/b&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;namespace USBService&lt;br /&gt;{&lt;br /&gt;partial class ProjectInstaller&lt;br /&gt;{&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Variable del diseñador requerida.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;private System.ComponentModel.IContainer components = null;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt; &lt;br /&gt;/// Limpiar los recursos que se estén utilizando.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="disposing"&gt;true si los recursos administrados se deben eliminar; false en caso contrario, false.&lt;/param&gt;protected override void Dispose(bool disposing)&lt;br /&gt;{&lt;br /&gt;if (disposing &amp;&amp; (components != null))&lt;br /&gt;{&lt;br /&gt;components.Dispose();&lt;br /&gt;}&lt;br /&gt;base.Dispose(disposing);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#region Código generado por el Diseñador de componentes&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Método necesario para admitir el Diseñador. No se puede modificar&lt;br /&gt;/// el contenido del método con el editor de código.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;private void InitializeComponent()&lt;br /&gt;{&lt;br /&gt;this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();&lt;br /&gt;this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();&lt;br /&gt;// &lt;br /&gt;// serviceProcessInstaller1&lt;br /&gt;// &lt;br /&gt;this.serviceProcessInstaller1.Password = null;&lt;br /&gt;this.serviceProcessInstaller1.Username = null;&lt;br /&gt;// &lt;br /&gt;// serviceInstaller1&lt;br /&gt;// &lt;br /&gt;this.serviceInstaller1.ServiceName = "WMIEvent";&lt;br /&gt;this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;&lt;br /&gt;// &lt;br /&gt;// ProjectInstaller&lt;br /&gt;// &lt;br /&gt;this.Installers.AddRange(new System.Configuration.Install.Installer[] {&lt;br /&gt;this.serviceProcessInstaller1,&lt;br /&gt;this.serviceInstaller1});&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#endregion&lt;br /&gt;&lt;br /&gt;private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;&lt;br /&gt;private System.ServiceProcess.ServiceInstaller serviceInstaller1;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-8748631678002608315?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/8748631678002608315/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=8748631678002608315' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/8748631678002608315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/8748631678002608315'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2010/12/servicio-de-windows-para-bloquear.html' title='Servicio de Windows para bloquear memorias USB o USB de tipo STORAGE con C#'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-7326479093213184652</id><published>2010-12-10T11:17:00.001-04:00</published><updated>2010-12-10T22:02:09.066-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='kiwix'/><title type='text'>Kiwix 0.9 alpha7 lista!</title><content type='html'>Como he explicado en otros posts, Kiwix es un lector (GNU) de contenido multimedia online, especialmente para abrir wikipedia offline. Wikipedia se almacena en un archivo comprimido en formato &lt;a href="http://www.openzim.org"&gt;openZIM&lt;/a&gt;, posteriormente el lector lo abre sin necesidad de descomprimir la enciclopedia.&lt;br /&gt;&lt;br /&gt;El formato ZIM utiliza un algoritmo complejo de compresión LZMA2, sin perdida. &lt;br /&gt;&lt;br /&gt;Se ha lanzado la versión Kiwix 0.9 alpha7. Es totalmente utilizable y disponible en español, catalán y una lista completa de los principales idiomas incluyendo hasta Hebreo.&lt;br /&gt;&lt;br /&gt;Kiwix está disponible para tanto para linux como para Windows.&lt;br /&gt;&lt;br /&gt;Su página principal es: &lt;a href="http://www.kiwix.org"&gt;www.kiwix.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En esta nueva alpha se han corregido varios bugs y se han agregado nuevas funcionalidades. &lt;br /&gt;&lt;br /&gt;La lista de funcionalidades es la siguiente:&lt;br /&gt;* Se corrigió el tema de la codificación en la ayuda en parsi &lt;br /&gt;* Se corrigió una cuestión URL analizar impacto título que contiene una '/&lt;br /&gt;* Añadir botones del ratón pulgar atrás / adelante de apoyo &lt;br /&gt;* Agregar un menú contextual "Guardar imagen como ..." para las imágenes&lt;br /&gt;* No se utiliza más la depedencia bzip2&lt;br /&gt;* Localización para todos los idiomas en el instalador de MS Windows&lt;br /&gt;* Se corrigió el nombre de archivo predeterminado por "salvar la imagen" y "guardar como PDF" con el artículo que contiene un "/"&lt;br /&gt;* Se acomodó un pequeño fallo responsable de duplicar las llamadas zim&lt;br /&gt;* Por defecto, la instancia Kiwix ya no es "en vivo". Ahora se puede decidir con buildDistribution.pl&lt;br /&gt;* Proponer un diálogo de descarga si el tipo MIME se desconoce&lt;br /&gt;* Nuevos escenarios: catalán&lt;br /&gt;* Corregido un error en el proceso de "imposible" la indexación en caso de defecto library.xml&lt;br /&gt;* Restablecimiento de la herramienta de conmutación de la piel&lt;br /&gt;* Considere la posibilidad de chrome: / / url como interna, y no piden anumore para cargar la URL con una aplicación externa.&lt;br /&gt;* Pantalla completa es ahora una pantalla completa * real *&lt;br /&gt;* Se corrigió la inicialización del generador artículo url al azar&lt;br /&gt;* Se corrigió un problema al hacer después de cerrar una pestaña &lt;br /&gt;* Se corrigió el tema sin título de la ficha si el usuario hace antes de cambiar ficha de contenido&lt;br /&gt;* Se corrigió la dependencia liblzma Brocken en el paquete Debian de Maverick&lt;br /&gt;* En el programa de instalación de Windows, añade cuadros de diálogo para elevar el nivel de usuario para obtener permisos de administrador&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-7326479093213184652?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/7326479093213184652/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=7326479093213184652' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7326479093213184652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7326479093213184652'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2010/12/kiwix-09-alpha7-lista.html' title='Kiwix 0.9 alpha7 lista!'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-5873384347913162286</id><published>2010-02-25T10:32:00.006-04:00</published><updated>2010-02-25T10:49:46.082-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='kiwix'/><title type='text'>Nueva versión de kiwix, wikipedia offline</title><content type='html'>Hace algunos días ha salido la versión 0.8 de kiwix. Es una versión con algunas mejoras, aportando la misma funcionalidad de siempre. Durante los 6 meses se estubo probando sin encontrar errores en todo ese tiempo. Al mismo tiempo se está trabajando en la versión 0.9 que estará próxima a salir en el mes de abril. Por ahora kiwix solamente funciona en GNU/Linux, esto sigue siendo un obstaculo para muchos usuarios y países en donde la plataforma Windows es muy usada. Sin embargo, técnicamente hablando, la versión 0.8 es un paso importante. A continuación se mencionan algunas mejoras:&lt;br /&gt;    * Completamente reescrito, han sido quitadas funciones no usadas. La programación se ha realizado de forma más modular y el código ha sido comentado.&lt;br /&gt;    * Kiwix está basado enteramente en el contenido con formato ZIM, cuyo desarrollo es ahora independiente, con la creación del proyecto openZIM. Evidentemente, esto significa que cualquiera que lo desee puede hacer una ZIM y Kiwix puede leerlo.&lt;br /&gt;    * El motor de búsqueda es ahora xapian, un motor de búsqueda libre, que goza de un buen apoyo y ofrece muchas posibilidades. El índice Kiwix se ofrece ahora también  de manera integrada, esto significa que si usted tiene ZIM, Kiwix fácilmente puede indexar y proporcionar la funcionalidad de búsqueda en el nuevo contenido. Otro punto importante es que todas las búsquedas son case insensible igualmente para los acentos.&lt;br /&gt;    * El proceso de localización es estable y hay más idiomas y más apoyo.&lt;br /&gt;&lt;br /&gt;En resumen, con la versión 0.5, hemos demostrado la validez del concepto. Con la versión 0.8 se ponen las bases para un programa de calidad realmente abierto y profesional.&lt;br /&gt;&lt;br /&gt;Éstos son el ChangeLog casi completa:&lt;br /&gt;&lt;br /&gt;        * Small improvement by the kiwix.sh launcher (should work now under Slackware (see https://sourceforge.net/forum/message.php?msg_id=7561932)&lt;br /&gt;    * Fix sporadic segfault by indexing (ID: 2823597)&lt;br /&gt;    * Fix dynlib linking issue affecting at least Slackware and Fedora&lt;br /&gt;    * Use xapian-core-1.0.14&lt;br /&gt;    * Fix the "no icons available" issue (ID: 2830824)&lt;br /&gt;    * Fixed toolbar icons with RTL languages&lt;br /&gt;    * Improved toolbar UI (added icons &amp; tooltip)&lt;br /&gt;    * Fixed window size/position restore&lt;br /&gt;    * Fixed address-bar not displaying TOC URLs (ID: 2806208)&lt;br /&gt;    * Fixed anchored link not working (ID: 2806207)&lt;br /&gt;    * High reducing of the xapian index disk usage&lt;br /&gt;    * Improvement of the history management&lt;br /&gt;    * Ignore now, by indexing, HTML pages with the NOINDEX meta tag&lt;br /&gt;    * French/Spanish/German/Arabic/Italian translation of the software help&lt;br /&gt;    * Fixed language switch menu (ID: 2822178)&lt;br /&gt;    * New logo and artworks&lt;br /&gt;    * Bug fix by the indexing process observer (ID: 2811642)&lt;br /&gt;    * Add a gray version of the buttons&lt;br /&gt;    * Able to index a ZIM by itself&lt;br /&gt;    * First version of a software help&lt;br /&gt;    * Add a cache strategy&lt;br /&gt;    * Use now ZIM&lt;br /&gt;    * Random page feature (ID: 2799134)&lt;br /&gt;    * Fix an issue concerning URLs with local anchors (ID: 2798769)&lt;br /&gt;    * Localisation of Xulrunner builtins (ID: 2799815)&lt;br /&gt;    * Rewrite the buggy MD5 code&lt;br /&gt;    * Remember the window geometry (ID: 1671235)&lt;br /&gt;    * 32 bits support for large ZIM file (ID: 2801839)&lt;br /&gt;    * Use now Xapian&lt;br /&gt;&lt;br /&gt;Cabe recordar que estas fueron las versiones anteriores de Kiwix:&lt;br /&gt;&lt;br /&gt;    * V0.5 primavera de 2007&lt;br /&gt;    * V0.7 invierno 2008 (ya no se soportará más)&lt;br /&gt;&lt;br /&gt;Como se puede verse, el ritmo de producción no era muy alto. Esto está cambiando, ha aumentado la cantidad de desarrolladores, incluyendome. El software en sí, ya que, antes se trabajaba principalmente en la generación de secuencias de comandos de HTML. En consecuencia, la versión 0.9 está ya muy avanzada y la primera versión alpha debe salir en abril, especialmente con el regreso de soporte completo para Windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-5873384347913162286?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/5873384347913162286/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=5873384347913162286' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/5873384347913162286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/5873384347913162286'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2010/02/nueva-version-de-kiwix-wikipedia.html' title='Nueva versión de kiwix, wikipedia offline'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-4278601823555588052</id><published>2009-09-22T12:06:00.004-04:00</published><updated>2009-09-22T12:38:21.902-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='extjs'/><title type='text'>PHP Programación Orientada a Objetos Primeros Pasos para usarlo en EXTJS</title><content type='html'>Por algunos días he estado pensando en el ejemplo más sencillo para comenzar a dar clases explicando POO (Programación Orientada a Objetos) con PHP 5, y se me ha ocurrido lo siguiente:&lt;br /&gt;&lt;pre name="code" class="PHP"&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;class conector {&lt;br /&gt;    /* Parámetros de la conexión */&lt;br /&gt; private $server = "localhost";&lt;br /&gt; private $db = "Mi_BaseDeDatos";&lt;br /&gt; private $user = "root";&lt;br /&gt; private $pass = "root";&lt;br /&gt; /* Funtion construc */&lt;br /&gt; public function __construct()&lt;br /&gt; {&lt;br /&gt;  $this-&gt;link=mysql_connect($this-&gt;server,$this-&gt;user,$this-&gt;pass);&lt;br /&gt;  mysql_select_db($this-&gt;db);&lt;br /&gt; }&lt;br /&gt; /* Ejecuta consulta sql */&lt;br /&gt; public function sql($query)&lt;br /&gt; {&lt;br /&gt;  $request = (!mysql_query($query,$this-&gt;link))?("Error MySQL: ".mysql_error()." \n Query: $query"):("Se realizo la operaci&amp;oacute;n");&lt;br /&gt;  mysql_close();&lt;br /&gt;  return "{ \"success\": true, \"msg\": \"$request\"}";&lt;br /&gt; }&lt;br /&gt; /* Retorna un JSON para ser leído en el cliente por algún componente */&lt;br /&gt; public function json($query)&lt;br /&gt; {&lt;br /&gt;  $arr = array();&lt;br /&gt;  $rs = mysql_query($query,$this-&gt;link);&lt;br /&gt;  while($obj = mysql_fetch_object($rs)) {&lt;br /&gt;   $arr[] = $obj;&lt;br /&gt;  }&lt;br /&gt;  mysql_close();&lt;br /&gt;  return json_encode($arr);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Posteriormente a esto, ahora nos toca utilizar alguna de nuestras funciones, por ejemplo, queremos un json de una tabla, simplemente:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="PHP"&gt;&lt;br /&gt;$enlace = new conector();&lt;br /&gt;echo $enlace-&gt;json("Select * from personal");&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-4278601823555588052?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/4278601823555588052/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=4278601823555588052' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/4278601823555588052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/4278601823555588052'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2009/09/php-programacion-orientada-objetos.html' title='PHP Programación Orientada a Objetos Primeros Pasos para usarlo en EXTJS'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-1386210564545337</id><published>2009-09-11T11:52:00.005-04:00</published><updated>2009-09-11T12:10:44.002-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extjs'/><title type='text'>EXTJS 3.0 para aplicaciones Webs</title><content type='html'>Hace algún tiempo me quede sorprendido con unas librerías lanzadas por Yahoo llamadas &lt;a href="http://developer.yahoo.com/yui/"&gt;Yui&lt;/a&gt;, con una gran cantidad de objetos y controles disponibles que acercan más el desarrollo de aplicaciones webs como si fuesen de escritorio.&lt;br /&gt;&lt;br /&gt;En ese entonces pensé que era bueno y realice un par de aplicaciones. En la actualidad, recientemente ha salido a colación un conjunto de librerías basadas en Yui llamadas &lt;a href="http://www.extjs.com"&gt;Extjs&lt;/a&gt;. Personalmente durante el tiempo que las he estado probando, considero que es lo mejor que he visto hasta ahora escrito en JavaScript.&lt;br /&gt;&lt;br /&gt;Una vez más las aplicaciones web se acercan a aplicaciones de Escritorio. Actualmente veo que funcionando con un buen engine tipo &lt;a href="http://prism.mozilla.com"&gt;Prism&lt;/a&gt; o &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; para el procesamiento del JavaScript del lado del cliente y un servidor local podría realizar una aplicación web con las mismas características que una aplicación de escritorio.&lt;br /&gt;&lt;br /&gt;La Web comienza a formar parte de nuestro escritorio, hace poco he observado el sistema operativo de google llamado &lt;a href="http://http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Chrome&lt;/a&gt;. Considero que el futuro es ese, un sistema operativo universal, instalado en la Internet en donde ya no será importante el ordenador desde el cual accedas, tus datos siempre estarán disponibles en la red sin posibilidad de perder por fallas de Hardware.&lt;br /&gt;&lt;br /&gt;Volviendo al tema de Extjs, aunque apenas empiezo a conocer, me atrevo a vaticinar que será una de las librerías más usadas junto con JQuery.&lt;br /&gt;&lt;br /&gt;Próximamente estaré publicando códigos de ejemplo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-1386210564545337?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/1386210564545337/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=1386210564545337' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/1386210564545337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/1386210564545337'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2009/09/extjs-30-para-aplicaciones-webs.html' title='EXTJS 3.0 para aplicaciones Webs'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-2942138346295096693</id><published>2009-02-21T17:09:00.009-04:00</published><updated>2009-02-22T11:08:05.000-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Libre'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><title type='text'>Proxy transparente para dd-wrt</title><content type='html'>&lt;code&gt;El siguiente bloque de código muestra como configurar la redirección del puerto 80 hacia nuestro servidor proxy, pensando en el caso de squid que usa el puerto 3128 de forma predeterminada. Recomiendo leer antes el &lt;a href="http://www.linuca.org/body.phtml?nIdNoticia=246"&gt;manual de configuración de squid modo proxy transparente&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Si se desea que esto se cargue en la nvram debe hacerse de la siguiente manera, colocar:&lt;br /&gt;&lt;br /&gt;&gt;nvram set rc_firewall="&lt;&lt;span style="font-weight: bold;"&gt;código que coloqué abajo. Nótese que se han escapado los carácteres " y $&lt;/span&gt;&gt;" ENTER&lt;br /&gt;&gt;nvram commit&lt;br /&gt;&gt;nvram get rc_firewall //Para confirmar que se grabo bien&lt;br /&gt;&gt;reboot&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;INTERNAL_NETWORK=\"192.168.1.0/24\"&lt;br /&gt;ROUTER_IP=\"192.168.1.100\"&lt;br /&gt;PROXY_SERVER=\"192.168.1.121\"&lt;br /&gt;PROXY_PORT=\"3128\"&lt;br /&gt;if [ -z \$TRANSPARENT_PROXY ]; then&lt;br /&gt;/usr/sbin/iptables -t nat -I PREROUTING -i br0 -s \$INTERNAL_NETWORK -d \$INTERNAL_NETWORK -p tcp --dport 80 -j ACCEPT&lt;br /&gt;/usr/sbin/iptables -t nat -I PREROUTING -i br0 -s ! \$PROXY_SERVER -p tcp --dport 80 -j DNAT --to \$PROXY_SERVER:\$PROXY_PORT&lt;br /&gt;&lt;br /&gt;/usr/sbin/iptables -t nat -A POSTROUTING -o br0 -s \$INTERNAL_NETWORK -p tcp -d \$PROXY_SERVER -j SNAT --to \$ROUTER_IP&lt;br /&gt;/usr/sbin/iptables -t filter -I FORWARD -s \$INTERNAL_NETWORK -d \$PROXY_SERVER -i br0 -o br0 -p tcp --dport -j ACCEPT&lt;br /&gt;export TRANSPARENT_PROXY=\"1\"&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;echo \"Ya se está ejecutando\"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;#Políticas de excepción (maquinas que no pasan por el proxy)&lt;br /&gt;#Servidor de correos&lt;br /&gt;/usr/sbin/iptables -t nat -I PREROUTING -i br0 -m mac --mac-source 00:1D:92:A4:02:5E -p tcp --dport 80 -j ACCEPT&lt;br /&gt;&lt;br /&gt;#Servidor SAMBA&lt;br /&gt;/usr/sbin/iptables -t nat -I PREROUTING -i br0 -m mac --mac-source 00:1A:92:A4:02:5E -p tcp --dport 80 -j ACCEPT&lt;br /&gt;&lt;br /&gt;#Computador de uso frecuente :P&lt;br /&gt;/usr/sbin/iptables -t nat -I PREROUTING -i br0 -m mac --mac-source 00:9D:92:A4:02:5E -p tcp --dport 80 -j ACCEPT&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora bien, por último debes recordar modificar &lt;/code&gt;&lt;/code&gt;&lt;code&gt;&lt;code&gt;INTERNAL_NETWORK,ROUTER_IP,&lt;br /&gt;PROXY_SERVER y PROXY_PORT según tu configuración de red interna.&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-2942138346295096693?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/2942138346295096693/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=2942138346295096693' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/2942138346295096693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/2942138346295096693'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2009/02/proxy-transparente-para-dd-wrt.html' title='Proxy transparente para dd-wrt'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-7325576404215776240</id><published>2009-02-03T16:49:00.004-04:00</published><updated>2011-07-02T14:35:23.444-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Filosofía'/><category scheme='http://www.blogger.com/atom/ns#' term='empleo'/><title type='text'>¿Para qué me gradué?</title><content type='html'>Muchos de nosotros nos hemos topado con esta pregunta,  precisamente justo al terminar nuestra carrera universitaria; algunos familiares nos recomiendan seguir estudiando, otros conseguir un buen empleo; y por supuesto, nuestros padres hacen todo lo posible en ayudarnos a encontrar trabajo y vivienda lo más cerca de ellos. Ojalá puedan comprender nuestra necesidad de independencia.&lt;br /&gt;&lt;br /&gt;El otro día recordaba una película llamada El Graduado (The Graduate);  pienso que tomando solo el principio de la película, esta refleja muy bien el sentimiento que experimentamos muchos de nosotros al culminar una carrera universitaria; nos sentimos parados justo en la mitad de la vida en esa delgada franja que separa nuestra vida de adolescente y estudiante universitario y la de adulto con empleo, auto y pareja.&lt;br /&gt;&lt;br /&gt;Ciertamente la vida de pareja, si aún no se ha elegido, es un camino difícil al comienzo, pero esa es otra historia. Ahora hablo de esa decisión inequívoca que debemos tomar al momento de graduarnos, -escribiendo esto me observo a mi mismo sentado en mi trabajo pensando en buscar otro empleo, establecerme en otra ciudad o seguir estudiando un post-grado-. Todo lo anterior son caminos desérticos si no se toma la decisión de encontrar un motivo real por el cual luchar; muchos nos centramos en conseguir objetos, llámese poder adquisitivo, autos, casa o un estatus alto en la sociedad como un buen empleo; pero, créanme, nada de esto satisface el deseo de trabajar por un fin que nutra nuestra pasión de seguir investigando y creciendo sintiéndonos como niños  otra vez, al otro lado está el no tomar ningún paso cayendo en la rutina del trabajo por el vivir y el vivir por el trabajo para luego encontrarnos con 40 años mirando atrás, mirando nuestras manos desgastadas pensando –qué sucedió en todos estos años, qué hice?-.&lt;br /&gt;&lt;br /&gt;Pues bien, aún esto no ha sucedido, ahora es el momento de tomar una decisión certera, rápida y sabia. Pero, ¿cómo tomar una decisión sabia si aún no hemos vivido lo suficiente?, y en una sociedad tan compleja en la que hemos crecido, en donde perdemos solamente 15 años para medio preparados al terreno de la vida.&lt;br /&gt;&lt;br /&gt;Sea lo que sea que se decida quizás no tenga tanta importancia, la importancia real está en tomar la decisión, una decisión que debe ser de carácter moral, que llene nuestro espíritu,  que alimente esa fuente inagotable de energía, nuestra la pasión por descubrir. Se debe poner amor de eso estoy seguro, así iremos siempre delante de la otra necesidad, el dinero.&lt;br /&gt;&lt;br /&gt;Vaya! Qué difícil verdad?; pues no es tan difícil si lo intentas y no me cabe la menor duda que se comienza por arriesgar, dar un paso adelante y tomar esa decisión que tantos miedos nos ocasiona, luego te lo agradecerás a ti mismo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-7325576404215776240?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/7325576404215776240/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=7325576404215776240' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7325576404215776240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7325576404215776240'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2009/02/para-que-me-gradue.html' title='¿Para qué me gradué?'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-4494244728054034141</id><published>2008-12-02T13:49:00.003-04:00</published><updated>2010-02-25T11:06:46.470-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='kiwix'/><title type='text'>Kiwix, la wikipedia offline</title><content type='html'>Desde hace algún tiempo me he dedicado de lleno a un proyecto que me apasiona intensamente. Este proyecto es llamado &lt;a href="http://www.kiwix.org/"&gt;Kiwix&lt;/a&gt;. Bien, este es un software creado para poder leer &lt;a href="http://es.wikipedia.org/"&gt;Wikipedia&lt;/a&gt; sin conexión a Internet, en especial, para esos sitios recónditos en donde el acceso a Internet es complicado, o en comunidades en donde no existan los recursos para poseer dicho acceso.&lt;br /&gt;&lt;br /&gt;Apenas está en pañales en su versión 0.7 beta, y se están corrigiendo algunas fallas como algunos problemas en el sistema de búsqueda.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;" align="center"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_T-oXw1BHXSw/STV69e9-RgI/AAAAAAAACh8/i6vt2CXP9wg/s1600-h/kiwix.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 225px;" src="http://3.bp.blogspot.com/_T-oXw1BHXSw/STV69e9-RgI/AAAAAAAACh8/i6vt2CXP9wg/s320/kiwix.JPG" alt="" id="BLOGGER_PHOTO_ID_5275257735238010370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Cómo dato interesante es que no simplemente sirve para cargar wikipedia fuera de linea, sino también cualquier proyecto de la fundación wikimedia como lo son: wikilibros, wikidiccionario, wikiespecies, wikisource, wikinoticias...entre otros. Disponible para importar bases de datos de todos los idiomas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Acá coloco los pasos para la instalación:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Descargar el archivo zeno e indices de wikipedia en español disponible desde el enlace de "Download" del mismo programa en la base superior. O bajar en http://ftp.crihan.fr/mirrors/wikipediaondvd.com/es.wikipedia.tar manualmente&lt;br /&gt;&lt;br /&gt;2) Entrar a Manage corpus&lt;br /&gt;&lt;br /&gt;3) Dar click en ADD&lt;br /&gt;&lt;br /&gt;4) Llenar campos del formulario&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;name &lt;/span&gt;: es.wikipedia,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;format&lt;/span&gt; : zeno,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;root&lt;/span&gt; : es.wikipedia,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;home &lt;/span&gt;: A/Wikipedia:Portada,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Index root&lt;/span&gt; : path en donde descomprimiste el&lt;br /&gt;archivo es.wikipedia.tar y en donde se encuentra el archivo zeno (Formato comprimido usado para wikipedia offline)&lt;br /&gt;&lt;br /&gt;Cómo dato importante, es que es un proyecto GNU/GPL, disponible actualmente para linux, mac y windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-4494244728054034141?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/4494244728054034141/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=4494244728054034141' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/4494244728054034141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/4494244728054034141'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/12/kiwix-la-wikipedia-offline.html' title='Kiwix, la wikipedia offline'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_T-oXw1BHXSw/STV69e9-RgI/AAAAAAAACh8/i6vt2CXP9wg/s72-c/kiwix.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-178682575852349522</id><published>2008-10-03T11:04:00.003-04:00</published><updated>2008-10-04T13:19:49.349-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Filosofía'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Libre'/><title type='text'>Filosofía libre del Software</title><content type='html'>Cuando estoy a punto de comenzar el desarrollo de un sistema en cualesquiera de las empresas en donde he trabajado, todo comienza con una motivación. &lt;br /&gt;&lt;br /&gt;Si bien es cierto que el desarrollo de aplicaciones o codificación de algoritmos es una actividad meramente lógica y técnica; también es necesario el empleo de una musa o inspiración creativa que nos llegue a conseguir el punto exacto en la terminación de un proyecto impecable.&lt;br /&gt;&lt;br /&gt;Es decir, usamos ambos hemisferios cerebrales para tal actividad, tanto el derecho, dedicado a la lógica, como el izquierdo, dedicado a las actividades artísticas. &lt;br /&gt;&lt;br /&gt;Ahora centrémonos en esta musa, llámese también la razón de ser o el sentido propiamente dicho que va a tener este sistema que vamos a desarrollar, dejando a un lado el interés monetario, que es tan importante para nuestras vidas pero que a la final no puede comprar tan solo la satisfacción.&lt;br /&gt;&lt;br /&gt;El otro día, me comentaba un amigo que -mi interés en el software libre es meramente técnico-. Ahora bien, si analizamos esto, es sencillamente imposible que nos enfoquemos únicamente en la parte conceptual de proyectos de software libre, a menos que seamos robots que no necesitamos musa inspirativa para lograr la consecución de sistemas de cualquier tipo, que de por sí podemos descartar ya que precisamente lo que caracteriza a un robot es la falta de emotividad, falta de creatividad y mucho menos inspiración.&lt;br /&gt;&lt;br /&gt;Entonces, llegamos al punto en que, la filosofía libre del software podría ser la musa, el saber que nuestro trabajo será reusado por otros garantiza la inmortalidad del mismo, es en sí el valor suficiente o el impulso necesario para el empujón al comienzo de la primera línea algorítmica.&lt;br /&gt;&lt;br /&gt;Una vez que somos concientes de que al liberar nuestro código no solamente aportamos nuestro pequeño grano de arena a esta gran montaña de saberes que nos ha regalado la comunidad, sino que también nos hacemos inmortales dentro de la própia inmortalidad logica creativa del código liberado. La libertad se refiere a estar sin ataduras de licencias, ni de empresas, ni de software quienes al principio prometieron ayudarnos con una plataforma y en protección de nuestros derechos intelectuales, pero que a la final se llevan consigo hasta a la tumba nuestras ideas copiadas en dicho código encerrándolas en cajas herméticas en donde nadie puede verlas o matándolas cuando sencillamente estas empresas quiebran y ya la plataforma que estaba en nuestros zapatos desapareció, todo el conocimiento que hemos construido se desbarata como las torres gemelas, como una torre de naipes.&lt;br /&gt;&lt;br /&gt;En paises como el nuestro, hablo de Venezuela, y en general latinoamérica. En donde, el sentido tecnológico aún no logra llegar a los estratos más bajos de la sociedad. El software libre aún no termina de florecer dentro de la comunidad desarrolladora.&lt;br /&gt;&lt;br /&gt;Es muy común encontrar compañías arraigadas profundamente al desarrollo de aplicaciones con Visual Studio, que a su vez se amarra a SQL SERVER y a su vez a Windows, siendo todo lo anterior en sí un monopolio que se adhiere a las empresas y que las hace dependiente de un sistema y lenguaje sustentándose en el puro interés monetario, dejando en segundo orden temas como la seguridad, creatividad y eficacia, cosas que tampoco el dinero puede comprar.&lt;br /&gt;&lt;br /&gt;Cuando desarrollamos código con estas herramientas privadas nuestro algoritmo está destinado a morir, ya que cómo puede un organismo mortal ¿cómo lo son las empresas sustentar el conocimiento que es inmortal?. &lt;br /&gt;&lt;br /&gt;Encerrados en edificios de oficinas  en donde no existe ningún tipo de inspiración más allá que la monetaria y esto se observa incluso en compañías que intentan innovar como Google INC., que ha desarrollado uno de los mejores ambientes laborales pero que a la final cae en el mismo circulo del conocimiento --&gt;&gt; creatividad --&gt;&gt; dinero, pero es aquí, en donde viene el conocimiento cuando circulo se va desgastando, por falta de energía que la impulse a seguir, como resultado de que el valor monetario toma una importancia superior a la creativa.&lt;br /&gt;&lt;br /&gt;Cuando Google empezó a incorporar a sus propios empleados a formar parte de las acciones de la misma empresa, empezó a empeñar su nivel creativo, dándole más importancia al resultado que a la forma o la manera de lograrlo, el desarrollo meramente por un fin.&lt;br /&gt;&lt;br /&gt;Así pues, sería interesante plantearnos interrogantes personales como ¿Donde está realmente la riqueza para mí? ¿Cuanto cuesta un segundo creativo?. En el mismo momento en el que la moral paso a un segundo lugar, colocando un sistema inmoral de conocimiento tecnológico por dinero generador de pobreza científica, en ese instante dejamos de ser libres.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-178682575852349522?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/178682575852349522/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=178682575852349522' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/178682575852349522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/178682575852349522'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/10/filosofa-libre-del-software.html' title='Filosofía libre del Software'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-2315380754327357285</id><published>2008-09-21T18:40:00.004-04:00</published><updated>2008-10-04T13:21:45.104-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Libre'/><category scheme='http://www.blogger.com/atom/ns#' term='Inkscape'/><title type='text'>Diseño gráfico con vectores en Linux</title><content type='html'>Hace algún tiempo me tropecé con un programa llamado &lt;a href="http://www.inkscape.org/?lang=es"&gt;inkscape&lt;/a&gt; que no parecía en lo absoluto interesante. En ese entonces, no comprendía en qué podría ayudarme un programa para el diseño de vectores, el concepto de vectores no se me era familiar. Sin embargo, por alguna extraña razón, este programa, se me atravesaba, una y otra vez  cuando intentaba instalar algún paquete relacionado con diseño gráfico. &lt;br /&gt;&lt;br /&gt;Posteriormente, decidí comenzar a investigar al respecto, y poco a poco fui descubriendo una gran comunidad de desarrolladores y usuarios detrás de este software. Sin embargo, no me consideraba diseñador, si bien es cierto que me tope en más de una ocasión con la necesidad de maquetar formularios, esto es muy distinto a  construir el diseño de portales enteros; algo ya común para personas que trabajan en pequeñas empresas o de forma &lt;a href="http://es.wikipedia.org/wiki/Trabajador_Freelance_o_Freelancer"&gt;freelance&lt;/a&gt;, en donde es mucho mejor hacerlo uno mismo. &lt;br /&gt;&lt;br /&gt;En &lt;a href="http://es.wikipedia.org"&gt;wikipedia&lt;/a&gt; confirme la gran importancia de los vectores, en donde saltaba a la vista un formato aprobado por la &lt;a href="http://es.wikipedia.org/wiki/W3C"&gt;W3C&lt;/a&gt; y usado por inkscape de forma nativa para sus salvados, este formato, llamado &lt;a href="http://es.wikipedia.org/wiki/.svg"&gt;SVG&lt;/a&gt; al parecer permite no solamente realizar imágenes vectoriales, sino también animaciones.&lt;br /&gt;&lt;br /&gt;Pues la ventaja que comprendí que tienen los vectores frente a otros formatos de imágenes como .jpg es, principalmente, que una vez realizada una imagen de forma  vectorial, esta puede ser exportada o visualizada en cualquier resolución posible, es decir, en teoría, una imagen de resolución infinita, que puede ser mostrada en la gran gama de Navegadores Webs disponibles actualmente en el mercado.&lt;br /&gt;&lt;br /&gt;Olvidé lo más importante, es un formato abierto y libre.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-2315380754327357285?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/2315380754327357285/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=2315380754327357285' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/2315380754327357285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/2315380754327357285'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/09/diseo-grfico-con-vectores-en-linux.html' title='Diseño gráfico con vectores en Linux'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-8551723344351383427</id><published>2008-09-20T17:50:00.006-04:00</published><updated>2009-08-07T17:57:10.412-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Autocompletar y validar Fecha en Javascript</title><content type='html'>A continuación se muestra un ejemplo de una función que he realizado para el autocompletar de una fecha con formato dd/mm/yyyy, que no solo te agrega un '/', sino que también te valida que solamente puedan escribirse números:&lt;br /&gt;&lt;br /&gt;var complet = function (e)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;tecla = e.keyCode? e.keyCode : e.charCode;&lt;br /&gt;&lt;br /&gt;if (!(tecla &amp;lt; 48 || tecla &amp;gt; 57))&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if (((this.value.length+1)==3)||((this.value.length+1)==6))&lt;br /&gt;&lt;br /&gt;this.value += '/';&lt;br /&gt;&lt;br /&gt;}else&lt;br /&gt;&lt;br /&gt;window.event.keyCode=0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Por supuesto, hay que recordar incluir la función en el respectivo input en el código html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-8551723344351383427?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/8551723344351383427/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=8551723344351383427' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/8551723344351383427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/8551723344351383427'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/09/autocompletar-y-validar-fecha-en.html' title='Autocompletar y validar Fecha en Javascript'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-7672499398671965821</id><published>2008-09-20T17:49:00.001-04:00</published><updated>2008-09-28T18:58:00.052-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Convertir Segundos a Dias,Horas,Minutos y Segundos</title><content type='html'>Hace algunos días haciendo un sistemita de publicación de noticias se me ocurrió agregarle una característica interesante para que dijera algo así parecido: Esta noticia fue publicada hace 5 días 4 horas 3 minutos 4 segundos.&lt;br /&gt;&lt;br /&gt;Bueno pensando en ello nació el siguiente código, que lo consigue, pasando como parámetro únicamente el numero de segundos transcurridos entre la fecha de publicación de la noticia y la fecha actual, acá pego un ejemplo de como obtener eso en SQL:&lt;br /&gt;&lt;br /&gt;SQL:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SELECT (UNIX_TIMESTAMP( NOW( ) )&lt;br /&gt;- UNIX_TIMESTAMP( fecha )) AS input_seconds FROM noticias&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y, por supuesto, la función que lo calcula a continuación:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function human_time($input_seconds) {&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$days = "";$hours = "";$minutes = "";$seconds = "";&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$days=floor($input_seconds / 86400);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$remainder=floor($input_seconds % 86400);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$hours=floor($remainder / 3600);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$remainder=floor($remainder % 3600);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$minutes=floor($remainder / 60);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$seconds=floor($remainder % 60);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if ($days&gt;0) $days = "$days dias ";&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if ($hours&gt;0) $hours = "$hours hrs ";&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if ($minutes&gt;0) $minutes = "$minutes min ";&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if ($seconds&gt;0) $seconds = "$seconds seg ";&lt;br /&gt;&lt;br /&gt;return $days.$hours.$minutes.$seconds;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-7672499398671965821?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/7672499398671965821/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=7672499398671965821' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7672499398671965821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7672499398671965821'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/09/convertir-segundos-diashorasminutos-y.html' title='Convertir Segundos a Dias,Horas,Minutos y Segundos'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-7384984553816103736</id><published>2008-09-20T17:45:00.001-04:00</published><updated>2009-02-27T12:50:21.131-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Libre'/><title type='text'>Yahoo User Interface</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Yahoo User Interface&lt;/span&gt;(YUI), una serie de librerías escritas en JavaScript, para la construcción de aplicaciones interactivas (RIA). Liberadas bajo licencia BSD por parte de la compañía Yahoo. Dichas librerías son utilizadas para el desarrollo web específicamente para ser usadas como la programación de aplicaciones de escritorio, con componentes vistosos y personalizables y con una amplia implementación con AJAX. A continuación se muestra un ejemplo de declaración con el uso del componente DataTable:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Declaración del conector al DataTable&lt;br /&gt;var myDataSource = new YAHOO.util.DataSource(myHugeDataSet);&lt;br /&gt;//Tipo de respuesta del DataSource&lt;br /&gt;myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;&lt;br /&gt;//Definiendo la estructura del DataSource&lt;br /&gt;myDataSource.responseSchema = { fields : [ "id","nombre","edad" ] };&lt;br /&gt;//Definición de cada columna del DataTable que debe ser igual a la del DataSource&lt;br /&gt;var myColumnDefs = [ {key:"id"}, {key:"nombre"}, {key:"edad"} ];&lt;br /&gt;//Cantidad de Registros en la variable de configuración del DataTable&lt;br /&gt;var myTableConfig = { renderLoopSize : 20 };&lt;br /&gt;/*&lt;br /&gt;Creación del DataTable pasandole como parametros el nombre, la definición de las&lt;br /&gt;columnas, el datasource o recurzo de donde se optienen los datos, y por último&lt;br /&gt;la configuración general del DataTable&lt;br /&gt;*/&lt;br /&gt;var myDataTable = new YAHOO.widget.DataTable('tbl', myColumnDefs, myDataSource, myTableConfig);&lt;br /&gt;&lt;br /&gt;Entre sus características tenemos:&lt;br /&gt;&lt;br /&gt; * Capacidad de generar código ordenado para el programador&lt;br /&gt; * Posibilidad de reutilizar controladores&lt;br /&gt; * Manejo de AJAX&lt;br /&gt; * Personalización de los componentes&lt;br /&gt; * Soporte por parte de Yahoo Developers&lt;br /&gt;&lt;br /&gt;Entre sus componentes/controles se encuentran:&lt;br /&gt;&lt;br /&gt; * DataTable: Para mostrar datos de forma tabular.&lt;br /&gt; * TreeView: Una especie de menú desplegable.&lt;br /&gt; * Calendar: Control para seleccionar la fecha.&lt;br /&gt; * Slider: Para seleccionar un valor numérico.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-7384984553816103736?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/7384984553816103736/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=7384984553816103736' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7384984553816103736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/7384984553816103736'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/09/yahoo-user-interface.html' title='Yahoo User Interface'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11311031.post-3097545204720856307</id><published>2008-03-13T10:46:00.004-04:00</published><updated>2009-08-07T17:58:57.404-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>Convertir CSV a MySQL</title><content type='html'>Simplemente se ejecuta el siguiente querry:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;load data local infile '/usr/my_path/personas.csv' into table 'Mi_DB'.'personas'&lt;br /&gt;&lt;br /&gt;fields terminated by ',' lines terminated by '\n' (id,nombre,descripcion,otros);&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Recuerda que debes tener una base de datos llamada Mi_DB, en donde existe una tabla personas con los campos id,nombre,descripcion y otros. Ah y claro tu archivo CSV que en este caso está en &lt;span style="color: rgb(128, 128, 128);"&gt;/usr/my_path/&lt;/span&gt; y se llama Mi_DB.csv.Si –local-infile está deshabilitado en el servidor Web, nos mostrará un mensaje como este:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;ERROR 1148: The used command is not allowed with this MySQL version&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Así que lo más conveniente sería intentarlo con PHP, el asunto sería algo diferente, y aquí les coloco el código, que se que es lo que les interesa:&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;//Registrar la tabla full&lt;br /&gt;function csv2sql($fileName)&lt;br /&gt;{&lt;br /&gt;$file = file ($fileName);&lt;br /&gt;$import_sql = "INSERT INTO cierrediariostb VALUES";&lt;br /&gt;$coma =",";&lt;br /&gt;for($i=0; $i&lt;sizeof($file); $i++) {&lt;br /&gt;$line = trim($file[$i]);&lt;br /&gt;$array = explode(",", $line);&lt;br /&gt;&lt;br /&gt;for($counter = 0; $counter &lt;&gt;($array); $counter++)&lt;br /&gt;$array[$counter] = colum2type($array[$counter]);&lt;br /&gt;&lt;br /&gt;if ($i==(sizeof($file)-1))&lt;br /&gt;$coma ="";&lt;br /&gt;&lt;br /&gt;$import_sql .= "(".&lt;br /&gt;implode(",", $array) .")".$coma;&lt;br /&gt;}&lt;br /&gt;return $import_sql;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Averiguar el tipo de dato&lt;br /&gt;function colum2type($data)&lt;br /&gt;{&lt;br /&gt;$data = trim(str_replace("\"","",$data));&lt;br /&gt;if (is_numeric($data))&lt;br /&gt;return $data;&lt;br /&gt;else&lt;br /&gt;return "'".$data."'";&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11311031-3097545204720856307?l=wilfredor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wilfredor.blogspot.com/feeds/3097545204720856307/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11311031&amp;postID=3097545204720856307' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/3097545204720856307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11311031/posts/default/3097545204720856307'/><link rel='alternate' type='text/html' href='http://wilfredor.blogspot.com/2008/03/convertir-csv-mysql.html' title='Convertir CSV a MySQL'/><author><name>Wilfredo Rodriguez</name><uri>http://www.blogger.com/profile/13921594229055867323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://4.bp.blogspot.com/_T-oXw1BHXSw/S1cj51PPhmI/AAAAAAAADXA/RXOWFUexnLQ/S220/800px-Wikimania_2009_-_Wilfredo_234.jpg'/></author><thr:total>0</thr:total></entry></feed>
