Jueves 29 de enero de 2015

¿Sabías qué? cómo liberar memoria cache en Linux

Cuando aplicaciones abren, suelen reservar memoria cache para su uso, una de las aplicaciones de escritorio que más RAM consumen (que yo conozca) es Google Chrome (y su hermanastro, Chromium):

google-chrome-vs-ram.jpg

Incluso si cierras la aplicación, el problema es que muchas aplicaciones no logran liberar memoria cache y nos vamos quedando lentamente sin RAM disponible, puedes ejecutar entonces:

echo 3 > /proc/sys/vm/drop_caches

Y borrarás toda la memoria virtual no utilizada que se encontrara en la caché, veamos:

Antes de correr el comando:

free -m
        total  used   free        shared buffers cached
Mem:     7936  3219   4716             0      84   1363

Luego de correr el comando:

free -m
        total  used   free        shared buffers cached
Mem:     7936  2106   5829             0       1    394

Se liberaron 969MB de RAM de 83 buffers inútiles que quedaron regados por allí.

The post ¿Sabías qué? cómo liberar memoria cache en Linux appeared first on Phenobarbital con Soda.

Miércoles 28 de enero de 2015

Jesus Palencia

Celebremos el Día de la privacidad

Originalmente publicado en Jeidi en WordPress

“Desde el año 2007, en Europa y Estados Unidos todos los 28 de enero se celebra el día de la privacidad o día de la protección de datos. Esto con el fin de promover el conocimiento de derechos y responsabilidades en materia de protección de datos. la iniciativa en un principio estuvo dirigida a adolescentes para explicar la importancia de la privacidad en sus perfiles digitales así como también se pretende estimular la creación de herramientas tecnológicas que capaciten a los usuarios en la gestión de su privacidad y fomentar el cumplimiento de leyes y regulaciones que conciernen a la privacidad.”

Continuar leyendo


Tagged: privacidad
Jesus Palencia

¿Qué es un hacker? definición y aclaraciones

Últimamente he visto en mis feeds varias noticias relacionadas con ataques o intentos de intrusión en diversas empresas, en todas y cada una de esas noticias se refieren al atacante como hacker y aunque ese connotación es la más utilizada hoy día no es la correcta, es por eso que decidí hacer una pequeña lista de definiciones sobre el tema.

Existe una enorme controversia sobre la definición de varios de los términos que explicare a continuación ya que muchas de las llamadas sub-culturas utilizan los mismo términos basándose en definiciones diferentes.

  • Hacker: Es una palabra derivada de la voz inglesa “hack” cuyo significado seria algo como “perder el tiempo” es por eso que a pesar de que en la mayoria de los casos se utiliza para referirse a “una persona con amplios conocimientos en un área“, también puede utilizarse para referirse a “una persona que emplea la inteligencia con un espíritu juguetón“, fuera de los campos usuales del arte y del humor. Por ejemplo, en el MIT hay una vieja tradición de poner algo incongruente sobre la gran rotonda de la universidad: han puesto una casa (imitación), un coche de policía (imitación), una vaca (imitación), un teléfono de línea fija (real y funcional) y un pezón (imitación).Es por eso que aunque su uso es mas común en el área de la informática no se puede decir que es exclusiva de este campo. Adicionalmente para los informáticos la definición de la palabra hacker tiene a su vez dos definiciones derivadas:
    1. Hacker blanco o sombrero blanco (White Hat): Se refiere a una ética hacker que se centra en asegurar y proteger los sistemas de Tecnologías de información y comunicación. Estas personas suelen trabajar para empresas de seguridad informática.
    2. Hacker negro o sombrero negro (Black Hat): Comúnmente utilizada solo como hacker, este termino es el causante de muchos de los malos entendidos debido a su mal uso. Un black Hat no es otra cosa mas que un “cracker”.
  • Cracker: Es una palabra derivada de la voz inglesa “crack” cuyo significado es “romper”, se utiliza para referirse a las personas que “rompen” algún sistema de seguridad. Los crackers pueden estar motivados por una multitud de razones, incluyendo fines de lucro, protesta, o por el desafío. El desconocimiento de este termino a llevado a la mala utilización del termino hacker causando controversia y ambigüedad a la hora de usarlo.

Además de estos términos existen otros cuyo uso se restringe solo a ciertas sub-culturas.

  • Phreaker: es un término acuñado en la sub-cultura informática para denominar la actividad de aquellos individuos que orientan sus estudios y ocio hacia el aprendizaje y comprensión del funcionamiento de teléfonos de diversa índole, tecnologías de telecomunicaciones, funcionamiento de compañías telefónicas, sistemas que componen una red telefónica y por último; electrónica aplicada a sistemas telefónicos.La meta de los phreakers es generalmente superar retos intelectuales de complejidad creciente, relacionados con incidencias de seguridad o fallas en los sistemas telefónicos, que les permitan obtener privilegios no accesibles de forma legal. Originalmente, este término se refería a los usuarios de las conocidas “blue boxes”, unos dispositivos electrónicos que permitían realizar llamadas gratuitamente.
  • Newbie: También se le conoce como “wannabe”. Se refiere a un recién iniciado en la informática. Y hace referencia a las personas realmente interesadas en aprender, y que buscan que los demás integrantes de la comunidad o foro a la que pertenecen solucionen sus problemas. También se usan abreviaciones como “Noob” o “Newb” que son bastante usadas como insulto, también seria un diminutivo de “novato” pero en la informática. No por ser novato es repudiado, al igual que tampoco hay que confundirlo con un “lammer”.
  • Lammer o script-kiddie: Es un anglicismo propio de la jerga de Internet que hace alusión a una persona falta de habilidades técnicas, sociabilidad o madurez considerada un incompetente en una materia, actividad específica o dentro de una comunidad, a pesar de llevar suficiente tiempo para aprender sobre la materia, actividad o adaptarse a la comunidad que le considera un lamer. Se trata de una persona que presume de tener unos conocimientos o habilidades que realmente no posee y que no tiene intención de aprender.

Para finalizar una curiosidad, el emblema utilizado para referirse a la cultura hacker fue propuesto primero en Octubre de 2003 por Eric Raymond, alegando la necesidad de una unificación y un símbolo reconocible para la percepción de la cultura hacker, tiene su origen en un juego desarrollado por John Conway llamado el Juego de la vida.


Tagged: cracker, definicion, hacker, phreaker
Jesus Palencia

La Era del VideoGame Cap. 2/5: Rostros

Enlace al vídeo en Youtube


Tagged: videogame

¿Sabías qué? cómo montar un dns caché local con dnsmasq

Guía rápida (copy-and-paste) para montar un rápido DNS local con dnsmasq.

¿Por qué montar un DNS caché local?

Ahorras tráfico al hacer una caché de las consultas DNS de manera local, adicionalmente, permite usar múltiples DNS para la búsqueda, evitando usar los DNS de tu ISP.

Instalando y configurando DNSmasq

  • Instalar dnsmasq
apt-get install dnsmasq
  • Crear el usuario y grupo (para evitar ejecutarlo como root):
groupadd -r dnsmasq
adduser dnsmasq dnsmasq
  • Configurar rápidamente las opciones del dnsmasq:
sed -i 's/^#port.*$/port=53/' /etc/dnsmasq.conf
sed -i 's/^#domain-needed/domain-needed/' /etc/dnsmasq.conf
sed -i 's/^#bogus-priv/bogus-priv/' /etc/dnsmasq.conf
sed -i 's/^#resolv-file=.*$/resolv-file=\/etc\/resolv.dnsmasq/' /etc/dnsmasq.conf
sed -i 's/^#no-poll.*$/no-poll/' /etc/dnsmasq.conf
sed -i 's/^#user=.*$/user=dnsmasq/' /etc/dnsmasq.conf
sed -i 's/^#group=.*$/group=dnsmasq/' /etc/dnsmasq.conf
  • Permitir cargar desde el config.dir /etc/dnsmasq.d
sed -i 's/^#conf-dir=\(.*\)/conf-dir=\1 /' /etc/dnsmasq.conf
  • Agregar la configuración del DNS cache:
cat <<EOF > /etc/dnsmasq.d/local.conf
domain=$DOMAIN
dns-forward-max=150
cache-size=1000
neg-ttl=3600
EOF
chown dnsmasq.dnsmasq /etc/dnsmasq.d -R
  • Y el resolv.conf de dnsmasq:
cat <<EOF > /etc/resolv.dnsmasq
# nameservers
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF
chown dnsmasq.dnsmasq /etc/resolv.dnsmasq

Por último, agregamos nuestro dns-cache de primero en el resolv.conf:

cat <<EOF > /etc/resolv.conf
domain $(hostname --domain)
search $(hostname --domain)
nameserver 127.0.0.1
EOF

Reinician el servidor dnsmasq y listo!.

service dnsmasq restart

Probando el dns cache

dig @localhost -t a facebook.com

Respuesta:

;; ANSWER SECTION:
facebook.com. 144 IN A 173.252.120.6
;; Query time: 345 msec
;; SERVER: ::1#53(::1)
;; WHEN: Tue Jan 27 20:31:18 2015
;; MSG SIZE rcvd: 46

Luego, la segunda consulta (va contra la cache):

;; ANSWER SECTION:
facebook.com. 141 IN A 173.252.120.6
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Tue Jan 27 20:31:21 2015
;; MSG SIZE rcvd: 46

The post ¿Sabías qué? cómo montar un dns caché local con dnsmasq appeared first on Phenobarbital con Soda.

Lunes 26 de enero de 2015

¡Mi blog cumple sus primeros 10 años!

En este mes de enero se cumplieron los primeros 10 años de haber iniciado este blog, a pesar que el sitio lo hice en el 2003, no fue sino hasta principios de 2005 que empecé a escribir artículos sobre mis opiniones sobre temas que ocurren el mundo informático. En ese momento ya habían pasado varios años del surgimiento de bloggers y no era “la moda” tener uno, pero mi motivación inicial fue de expresar mis opiniones en un sitio propio, pues en esa época las redes sociales no se usaban masivamente (o no existían) y no habían sitios como Medium o Twitter donde pudiese expresar o compartir algo.

Evolución en estos 10 años

Aunque suene poco tiempo, para un sitio web es bastante, es casi que la mitad de vida de la web y obviamente durante este tiempo muchas cosas han cambiado, por eso quiero compartirles mi experiencia a lo largo de este tiempo en diversos aspectos:

Tecnológico

La primera versión constaba de HTML puro, luego de varios artículos me dí cuenta que no era viable seguir así, por ello migré a Simple PHP Blog, para ese entonces (2005) no sabía usar las base de datos e instalé este motor que me permitía montar un blog con todas las características sin tener que usar una B.B.D.D. Luego por recomendación de Richzendy, en algún punto del 2006 migré a WordPress que es el motor que todavía sigo usando, aunque lo he estado actualizando según las necesidades tecnológicas: agregando versión para móviles, luego diseño adaptable, uso de estándares, soporte a varios navegadores, he  realizado 4 cambios de diseño a lo largo de años, mejoras en rendimiento, entre otras.

Como autor

A lo largo de estos 10 años, he cambiado bastante como escritor. Respecto al contenido, si leen mis primeros artículos, observarán mi extremismo hacia el software libre. Cuando empecé estaba en la etapa que descubres el software libre y deseas que todo aplicación en el mundo sea GPL, por eso generalmente mis primeros artículos era criticando a Microsoft o al software propietario, pero luego maduré y empecé a compartir mas sobre programación, aplicaciones que recomiendo, libros del área informática, experiencias, eventos locales, entre otros.

Un gran cambio respecto a hace una década, es la periodicidad de publicaciones, pasé de escribir cada 3-4 días a 2 o 3 veces al mes debido a menor disponibilidad de tiempo y como se popularizaron las redes sociales, puedo expresar ciertas cosas en ellas y no tengo la necesidad de extenderme escribiendo una entrada del blog. Hace unos años noté que el mayor tráfico de visitantes proviene desde los buscadores con la necesidad de leer sobre un tema en particular. Por eso, me concentro ahora en crear artículos de mejor calidad, evito repetir cosas que se pueden conseguir en otros lugares y no siento presión de estar escribiendo artículos lo mas seguido posible.

Otro cambio que se puede notar a lo largo de estos años, es mi forma de redactar. Al principio era muy informal al igual que mi forma de hablar, pero al momento de ganar visitantes de otros países tuve que ajustar algunas palabras para usar un español mas internacional y tal vez por madurez mental, ahora escribo mas formal pero manteniendo similitudes con mi forma de hablar.

Profesionalmente

Este blog es el producto de mayor importancia para mí, al hospedarlo y mantenerlo yo mismo, me permitió aprender antes que muchos todo el proceso de desarrollo web y descubrir el área a la que me quería dedicar como profesional. En cada actualización de la plataforma he logrado aprender nuevas tecnologías web y me obliga estar al día, los artículos de tecnología me ha permitido usarlo como currículo al momento de mostrar mi experiencia, algunos lectores se han convertido en clientes al observar mi experiencia en algún lado.

En el 2009, tuve la necesidad de crear algunos complementos de WordPress para solventar unos problemas que tenía este blog, los decidí liberar bajo licencia abierta y me permitió dedicarme un tiempo a desarrollo de sitios con este CMS, inclusive conseguir unos clientes muy buenos.

Mi artículos preferidos

La siguiente lista incluye los 5 artículos con mayor significado y su respectiva razón para escogerlos, me costó escogerlo pero luego por eliminación me quedé con los siguientes:

  • ¿Google dominará el mundo? (Nov. 2005): me sorprende que en el primer año del blog, hace 10 años, ya tenía en mi mente la idea de Google dominando en el mundo, mas aún al tomar en cuenta que en esa época no existía Android ni Chrome, ni Google tenía el poder que posee ahora. Eso me recuerda que he estado paranoico desde hace 10 años con el poder de Google que cada vez parece ser mayor.
  • Análisis ( Review ) de Archlinux 0.8 ‘Voodoo’ (Abril 2007): es especial porque este análisis le gustó tanto a las personas, que el artículo está enlazado en Distrowatch, la página mas famosa sobre distribuciones de Linux. Fue la primera vez que un sitio importante enlazaba a contenido de mi blog, lo cual me alegró mucho en ese tiempo. A pesar de los años, sigo recibiendo tráfico desde allí, si leen el artículo y observan los comentarios, se nota como la filosofía de Arch sigue vigente.
  • Mi opinión sobre la ley de videojuegos bélicos en Venezuela (Nov. 2009): fue un artículo escrito tarde en la noche en mi primera portátil, recuerdo que en ese momento tenía mucha rabia de que el gobierno de mi país hiciera una ley tan estúpida, el blog me sirvió como medio de expresión y me ayudó a calmarme. Al principio dudé en escribirlo porque nunca había tocado temas políticos, pero la respuesta fue muy positiva, me ayudó a conocer gente interesante en redes sociales que compartía mi opinión. Hace unos años me enteré que el artículo fue usado como cita para una tesis que estudiaron del tema, algo que me gustó bastante saber.
  • El software libre y su mezcla con la política en Venezuela (Mar. 2011): este artículo recuerdo que lo hice tras discusiones con varias personas a través de Twitter, donde para algunos colaborar/usar/apoyar el software libre te hacía partidario del chavismo (un movimiento político de izquierda en el país). Como también había vivido la experiencia fuera del teclado, escribí un artículo para tratar de hacerle a entender la gente que el software y la política de un país son movimientos e ideales aparte. Lo mas interesante fue ver la discusión que se formó en los comentarios, cada quien defendiendo su punto de vista y expresándose libremente :).
  • Disminución de la libertad de la información en la red en Venezuela (Feb. 2014): escrito en una época muy difícil en mi país, específicamente en la ciudad donde vivo. Inspirado tras un corte del servicio de Internet por varios días en el ISP del gobierno, después de varias censuras y bloqueos a sitios de Internet por parte del gobierno, como hacktivista y defensor de la libertad de la red a cargo de un blog del área informática muy visitado en la región…sentí la obligación de expresar sobre como poco a poco la calidad de la libertad en la red de redes en mi país ha bajado. Traté de explicar en un lenguaje simple el problema y como sabía que era un tema muy delicado, utilicé varias fuentes confiable para certificar que la información que transmitía no era falsa o politizada. La respuesta fue grande, muchos periodistas y personas ajenas a la informática ayudaron a transmitir el mensaje, me contactaron y logré establecer relaciones…¿Blogueras? Y confieso al día siguiente de su publicación, tuve la mayor cantidad de visitas en un día hasta el momento (aunque eso no era lo que buscaba).

Nota: Al momento de seleccionar estas 5 entradas, me llamó la atención como las 3 últimas son sobre problemas que ocurren en el país. No me había dado cuenta como para mí, es importante expresar mi punto de vista sobre problemas de índole venezolano a lectores de todas partes del mundo, a pesar que es un blog de tecnología.

Curiosidades

  • Al momento de publicar esta entrada, es el artículo mas largo que he escrito en el blog.
  • De los 472 artículos escritos en estos 10 años, solo he borrado 1 de finales del 2005 sobre el uso de RedHat en la administración pública. Hace unos años lo leí, me dio pena ver mi extremismo de software libre y lo borré.
  • Desde el 2007 el blog genera ingresos superiores al costo del dominio y servidor de almacenamiento.
  • A principios de 2015 por primera vez: cambié el nombre del blog, eliminé el Tux personalizado de la página principal, cambié las páginas de errores que fueron hechas en el 2003, el sitio inicial pasó a “archivo” y no le daré mas mantenimiento.
  • El sitio ha tenido los siguientes URL: http://usuarios.lycos.com/skatox, skatox.tk, skatox.com.ve (me regalaron y luego me lo quitaron), skatox.co.ve y desde el 2007 conservo el .com. Hasta hace unos meses la versión .tk estuvo funcionando sin problemas.
  • La mayoría de visitantes vienen de España y México, no de Venezuela :(.

Agradecimientos

Principalmente quiero agradecer a los lectores (sobre todo a los que comentan) porque son la mayor inspiración para mí para seguir escribiendo, luego agradezco a quienes comparten el contenido pues ayudan a transmitir el mensaje a mas personas. A Richzendy que ha sido el asesor técnico no oficial del blog (CMS, hosting, etc.) e inicialmente junto a Xombra, Gubatron, KodeGeek (no recuerdo otro de esa época que siga activo) que indirectamente me motivaron a crear un blog propio. A Planeta Linux por todos estos años compartiendo mi contenido por ahí, a Damian porque cuando tenía blog fue el primero en enlazarme, a Ghostbar y Alex quienes me enseñaron a monetizar el blog, a todos quienes me siguen enlazando y recientemente a Gespadas pues su blog me trae muchos visitantes, Planeta VaSlibre por tomar en cuenta este blog, y cualquier persona que haya entrado a es está página, disculpen sin no nombré a alguno.

Interesante como algo era un experimento, se volvió en un hobbie que genera dinero y forma parte de mí, espero volver a escribir un artículo similar el 2025 sobre los 20 años del blog.

Jueves 22 de enero de 2015

Colectivo MediosLibres de Venezuela

MediosLibres

MediosLibres es un Colectivo tecnológico dedicado al desarrollo, migración y soporte sobre tecnologías libres para lo medios de comunicación, integrado por gente de medios con amplios conocimientos en el àrea de la tecnología.

Este Portal Web es el centro de interacción con los usuarios y usuarias de la Distribución GNU/Linux MediosLibres, desarrollada por el Colectivo MediosLibres de Venezuela con la finalidad de satisfacer totalmente las necesidades de todos los segmentos de los medios de comunicación (radio, audiovisuales, prensa escrita, medios dìgitales). Un trabajo que lleva ya mas de dos años de investigación y preparación, y que hoy junto al lanzamiento del portal sirve de puerta informativa para dar a conocer la existencia de la Beta 2 de esta Distribución GNU/Linux venezolana para Medios de Comunicación.

Los Líderes del Proyecto indicaron que el Portal http://medioslibres.org.ve, cuenta con importante información acerca de esta Distribución GNU/Linux venezolana, así como también áreas de descarga, un moderno sistema de soporte, foros, galería, podcast, wiki colaborativa, videoteca, Aula Virtual y otras interesantes utilidades al servicio del usuario.

Finalmente se informó que el venidero lunes 26 de enero será liberada públicamente de forma oficial la primera versión de MediosLibres GNU/Linux, la cual lleva como nombre código Shamatari, palabra de la lengua Yanomami que significa Guerrero y utilizarà como nomenclatura de versión la 15.01 en referencia al año y mes del lanzamiento.

Nota enviada por: Jaime Ernesto Mora

Lunes 19 de enero de 2015

Conociendo un poco a #lftp

lftp es un programa de transferencia de archivos (FTP) por medio de la linea de comandos para UNIX y sistemas basados en UNIX. Fue escrito por Alexander Lukyanov y esta diponible bajo GPL.

Leer mas en wiki/Lftp.

Uso basico

lftp ftp://ftp.my-domain.com
lftp ftp.my-domain.com:~> user myuser
Password:

Comandos de ayuda

lftp myuser@ftp.my-domain.com:/www> help
        !<shell -command>                    (commands)
        alias [<name> [<value>]]            anon
        bookmark [SUBCMD]                   cache [SUBCMD]
        cat [-b] <files>                    cd <rdir>
        chmod [OPTS] mode file...           close [-a]
        [re]cls [opts] [path/][pattern]     debug [<level>|off] [-o <file>]
        du [options] <dirs>                 exit [<code>|bg]
        get [OPTS] <rfile> [-o <lfile>]     glob [OPTS] <cmd> <args>
        help [<cmd>]                        history -w file|-r file|-c|-l [cnt]
        jobs [-v]                           kill all|<job_no>
        lcd <ldir>                          lftp [OPTS] <site>
        ls [<args>]                         mget [OPTS] <files>
        mirror [OPTS] [remote [local]]      mkdir [-p] <dirs>
        module name [args]                  more <files>
        mput [OPTS] </files><files>                 mrm </files><files>
        mv <file1> <file2>                  [re]nlist [<args>]
        open [OPTS] <site>                  pget [OPTS] <rfile> [-o <lfile>]
        put [OPTS] </lfile><lfile> [-o <rfile>]     pwd [-p]
        queue [OPTS] [<cmd>]                quote </cmd><cmd>
        repeat [delay] [command]            rm [-r] [-f] <files>
        rmdir [-f] <dirs>                   scache [<session_no>]
        set [OPT] [<var> [<val>]]           site <site_cmd>
        source <file>                       user <user |URL> [<pass>]
        version                             wait [<jobno>]
        zcat <files>  

Subir un archivo

lftp myuser@ftp.my-domain.com:/www> put file.ext
64714 bytes transferred in 8 seconds (7.9K/s)

Un pequeño tip

Si en algun momento, intentan subir algo a un servidor puede que obtengas este error:

Lftp Fatal Error: Certificate Verification: Not Trusted

La solucion es facil, solo se debe agrear en /etc/lftp.conf lo siguiente:

set ssl:verify-certificate no

Link de interes

Mailing lists

Mailing lists and archives (since July 2011):

List archives (including prior to July 2011):

Code

Browse the source code:

Bug trackers

Jueves 15 de enero de 2015

Ahora pueden leerme desde el planeta VaSlibre

Les informo que VaSlibre, un grupo de usuarios de software libre radicados en la ciudad de Valencia, Venezuela; ahora tiene planeta (una página donde se muestran las entradas de distintos blogs) y me alegra que hayan decidido colocar el mío allí.

Así, recomiendo leer a Planeta VaSlibre y disfrutar de los artículos escritos por varios miembros de la comunidad. De esta forma, pueden leer contenido disponible en varios blogs de forma centralizada y que probablemente alguno de ellos no los conozcas por no haber estado involucrado al grupo.

El sitio es http://planeta.vaslibre.org.ve/ y recuerda guardarlo en tu lector de feeds favorito.

Miércoles 14 de enero de 2015

Valencia Software Libre: Reinauguracion del Planeta VaSlibre

Domingo 11 de enero de 2015

José Luis Rivas

José Luis Rivas
ghostbar

Recordando a Aaron Swartz

Un libro que me encantó es «Homeland» de Cory Doctorow, trata sobre un grupo de hackers que se ven envueltos en situaciones que los deja expuestos a uno de los gobiernos y empresas más poderosas que existen y deben hacer algo aún así los haga correr peligros. Una historia de ficción sobre gente como Aaron Swartz.

Pero lo mejor del libro, es que precisamente cierra con dos cartas, una por Jacob Appelbaum, uno de los primeros mimbros de Wikileaks y desarrollador del proyecto Tor; y otra por Aaron Swartz. La carta de Aaron la traduje y publico a continuación, espero les sirva de inspiración para que sigan en sus luchas aún cuando a veces parezca que quién da la batalla del otro lado es muy grande e invencible:

Hola, soy Aaron. Se me ha dado este pequeño espacio aquí al final del libro porque soy un humano de carne y hueso, y cómo tal, puedo decirte algo que no creerías si viniese de la boca de cualquiera de esos carácteres ficticios:

Esto es real.

Claro, no hay alguien llamado Marcus o Ange realmente, al menos no que yo conozca, pero sí sé de gente real justo como ellos. Si quieres, puedes ir a San Francisco y conocerlos. Y mientras estás allí, puedes jugar D&D con John Gilmore o construir un cohete en Noisebridge o trabajar con algunos hippies en un proyecto de arte para Burning Man.

Y si algo de las cosas más relacionadas con conspiraciones en el libro te parecen demasiado alocadas para ser verdad, bueno, simplemente googlea Blackwater, Xe o BlueCoat. (Yo mismo tengo una solicitud FOIA pendiente para saber más de "software para manejo de persona", pero los federales dicen que les va a tomar tres años más redactar todos los documentos relevantes.)

Ahora, yo espero que te hayas divertido quedándote despierto toda la noche leyendo acerca de estas cosas, pero la parte que viene es importante así que presta atención: lo que está pasando ahora no es algún reality show de televisión donde simplemente puedes sentarte en casa y ver.

Esta es tu vida, este es tú país -- y se quieres mantenerlo seguro, debes involucrarte.

Sé que es fácil sentirse sin poder, como si no hubiese algo que puedas hacer para que baje la marcha o detener "el sistema." Como si todos los hilos son movidos por fuerzas oscuras y poderosas lejanas a tu control. Yo me siento de esa forma también, a veces. Pero simplemente no es verdad.

Hace menos de un año, un amigo me llamó para decirme sobre un proyecto de ley oscuro del cuál había escuchado llamado Acta para Combatir la Vulneración En Línea y La Falsificación o COICA (En Inglés es: Combatting Online Infringement and Counterfeitting Act, de allí la abreviación COICA). Mientras leía el proyecto empecé a preocuparme más y más: bajo estas provisiones, el gobierno podría censurar sitios web que no le gusten sin algo como un juicio. Sería la primera vez que el gobierno de los EEUU se le darían poderes para censurar el acceso a la red.

El proyecto había sido introducido hace un día o dos, pero ya tenía un par de docenas de senadores apoyándola. Y, a pesar de nunca haber un debate ya estaba siendo programada para ser votada en sólo un par de días. Nadie había reportado al respecto y ése era justamente el punto: ellos querían apurar esta cosa para que pasara antes que alguien se diese cuenta.

Afortunadamente, mi amigo se dió cuenta. Nos quedamos despiertos todo el fin de semana y lanzamos un sitio web explicando qué decía el proyecto de ley, con una petición que podías firmar en rechazo al proyecto que te daría números de teléfonos para llamar a tus representantes en el senado. Le dijimos al respecto a algunos amigos y ellos le dijeron a algunos de sus amigos y en cuestión de un par de días teníamos más de 200 mil personas en nuestra petición. Fue increíble.

Bueno, la gente promoviendo esta ley no paró. Ellos gastaron literalmente decenas de millones de dólares haciendo lobby para éste proyecto de ley. La cabeza de cada compañía de medios grandes voló a Washington, D.C. y allí se reunieron con el jefe de personal del presidente y amablemente le recordaron de los millones de dólares que le habían donado a la campaña del presidente y le explicaron cómo lo que ellos querían -- la única cosa que querían -- era que esta ley se aprobara.

Pero la presión pública siguió creciendo. Para intentar sacar a la gente del camino ellos intentaron cambiando el nombre de la ley -- llamándola PIPA y SOPA, incluso llamándola E-PARASITES Act -- pero no importó cómo la llamaron, más y más personas se siguieron diciéndole a sus amigos sobre la ley y consiguiendo más y más personas que se opusieran. Pronto, las firmas en nuestra petición iba en millones.

Logramos detenerlos por más de un año con diferentes tácticas, pero se dieron cuenta que si esperaban más quizás nunca lograrían tener un chance de pasar esta ley. Así que programaron un voto apenas volviesen de la pausa de invierno.

Pero mientras los miembros del congreso estaban fuera en la pausa de invierno, manteniendo reuniones públicas y en las salas de sus pueblos en casa, la gente empezó a visitarlos. En todo el país, miembros del congreso empezaron a ser cuestionados por sus electores acerca de su apoyo a esa sucia ley de censura del internet. Y los miembros del congreso empezaron a asustarse -- algunos llegando tan lejos como responderles atacandome.

Pero esto ya no se trataba de mi -- nunca se trató de mi. Desde el principio fue sobre ciudadanos tomando las cosas en sus propias manos: haciendo vídeos en YouTube y escribiendo canciones oponiéndose a la ley, haciendo gráficos mostrando cuánto dinero los promotores de la ley habían recibido de las industrias promoviéndola, y organizando boycotts poniéndo presión en las compañías que habían promovido la ley.

Y funcionó -- tomó la ley desde un punto político sin problema alguno que se suponía debía pasar unánimamente a una posición más parecida a tener un balón tóxico que nadie quería tocar. ¡Incluso los promotores de la ley empezaron a sacar declaraciones oponiéndose a la ley! Oh sí, esos dueños de medios estaban molestos...

Así no es como se supone que el sistema deba funcionar. ¡Un montón de chicos no detienen unas de las fuerzas más poderosas en Washington simplemente escribiendo en sus portátiles!

Pero pasó. Y tú puedes hacer que pase de nuevo.

El sistema está cambiando. Gracias a la Internet, todos los días personas pueden saber acerca de cosas y organizarse incluso si el sistema está determinado a ignorarlo. Ahora, quizás no ganes todo el tiempo -- esto es la vida real, después de todo -- pero finalmente tenemos una oportunidad.

Pero sólo funciona si tú tomas parte en ello. Y ahora que has leído este libro y aprendido cómo hacerlo, estas perfectamente informado sobre cómo hacerlo de nuevo. Es correcto: ahora depende de ti cambiar el sistema.

Aaron Swartz.

Viernes 09 de enero de 2015

Eliminar caracteres ocultos de archivos de texto plano con vim

Download PDF

No todos usan el mismo editor de texto. No todos usan el mismo sistema operativo. No es un secreto para nadie. Cuando se trabaja en grupos bastante heterogéneos puede ocurrir que el editor de texto introduce estos caracteres ocultos que si se encuentran dentro de un script bash por ejemplo, generan esos famosos: command not found. Uno de los caracteres ocultos más comunes que he encontrado es ^M, pero imagino que se puede encontrar cualquier otro tipo de aberración. Estos son artefactos agregados por editores generalmente gráficos. Sin más preámbulo, la solución más rápida que he encontrado hasta el momento es cambiar el format file (ff) y guardar el archivo:

 

:set ff=unix

:w

De esta manera los !@#$%* caracteres ocultos son eliminados.

 

Domingo 04 de enero de 2015

César Mata Moya

César Mata Moya
PingüiniTux

Convertir vídeos con subtítulos para el decodificador TDA Novatech T207 en Debian

El sintonizador TDA Novatech T207 permite la reproducción de archivos con codificación H.264 para el video y AAC para el sonido, pero no es capaz de leer los subtítulos en formato SubRip (.srt), por lo cual se debe incrustar en el archivo final.

Para hacer la codificación se va a utilizar la herramienta mencoder en Debian Wheezy, sin embargo se debe instalar la versión de deb-multimedia ya que esta es la que nos permite utilizar la librería libfaac.

Procedemos a agregar el siguiente repositorio:

deb http://mirror.optus.net/deb-multimedia/ wheezy main

Luego realizamos:

apt-get update
apt-get  install mkvtoolnix mencoder x264 libfaac0

Nos situamos en el directorio donde se encuentra el vídeo origen con el subtitulo .srt y ejecutamos:

mencoder videoOrigen.mp4  -ovc x264 -x264encopts threads=auto:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b -oac faac -vf scale=720:404 -sub videoOrigen.srt -subcp latin1 -subfont-text-scale 3 -o video.avi


mencoder: es el programa que permite hacer la conversión del vídeo.

videoOrigen.mp4: Es el archivo que contiene el vídeo Original. Puede estar en otro formato que no sea .mp4 (avi, etc).

-ovc x264: Le indica a mencoder que el vídeo va a ser codificado usando la utilidad x264.

-x264encopts: Son las opciones utilizadas para x264. Coloque las recomendadas para una mayor calidad en la pagina.

-oac faac: Le indica a mencoder que el audio va a ser codificado usando la librería libfaac0.

-vf scale=720:404: este parámetro es opcional y lo utilizo para escalar el vídeo a la resolución 720x404 (Aspecto 16:9)
 ya que el codificador los reproduce con mayor holgura. Si el vídeo es de menor resolución, se debe omitir para no afectar la calidad.

-sub: Se indica el archivo .srt

-subcp: Se coloca la codificación (latin1, UTF8, etc)

-subfont-text-scale: Se indica el tamaño de escala de la fuente.

-o video.avi: Archivo .avi que luego se debe convertir a .mkv para que lo reconozca el decodificador.

Y para finalizar se convierte el archivo resultante en un .mkv de la siguiente manera:

mkvmerge video.avi -o videoFin.mkv

El videoFin.mkv se copia en una memoria USB y se podrá reproducir en el decodificador.




Silvio Perez: Kexec/Kdump configuration Centos/RedHat
Silvio Perez: Dynamic MOTD Centos/RedHat

Viernes 26 de diciembre de 2014

CrudGen 1.0 un generador de CRUD para Postgresql

CrudGen fue mi proyecto de tesis de mis estudios de pregrado, consiste en un generador de páginas Create, Report, Update y Delete para base de datos PostgreSQL utilizando el gestor phpPgAdmin. Es uno de los plugines “oficiales” del proyecto y al encontrar un poco de tiempo libre decidí actualizarlo para añadir ligeras mejoras, compatibilidad y mantener vivo el proyecto.

Hoy he lanzado la versión 1.0, pues considero que el plugin cumple con la tarea inicial para la que fue desarrollada y es compatible con las últimas versiones de Postgres y phpPgAdmin, el administrador web de la base de datos. Si te interesa el proyecto, ver como funciona y aprender a crear páginas web rápidamente usando esta herramienta, puedes ver mi entrada sobre este generador de páginas web para PostgreSQL usando phppgadmin que incluye vídeos, información, entre otros.

Página de REPORT de Crudgen

Ejemplo de una página de visualización usando CrudGen

Finalmente, te invito a chequear el código en el sitio de CrudGen en Github, para utilizarlo o colaborar con cualquier aporte. Deseo que lo prueben y reporten errores, y si son desarrolladores frontend, me gustaría que colaboraran con plantillas para las páginas generadas.

Martes 16 de diciembre de 2014

Turla, un potente troyano para Linux

Está Escrito:
Reconócelo en todos tus caminos,Y él enderezará tus veredas.(Proverbios 3:6)
Tomado de: BarraPunto
«Investigadores de Kapersky y Symantec han descubierto un troyano extremadamente discreto, imposible de detectar mediante el comando netstat y que puede ser ejecutado por un usuario sin privilegios denominado Turla. Al parecer se ha estado usando durante, al menos, cuatro años para espiar a gobiernos, embajadas, instituciones militares y compañías farmacéuticas por igual en cerca de medio centenar de países. El troyano tiene capacidad de comunicarse con los servidores bajo el control de los atacantes, interceptar datos locales y ejecutar funciones sin necesidad de privilegios de administrador. No se descarta que puedan surgir descubrimientos de malware semejantes a medida que avance la investigación. ¿Y tú, ya has instalado un antivirus en tu Linux para buscar troyanos ocultos?»
Referencia es: http://arstechnica.com
Los investigadores han descubierto un troyano extremadamente sigiloso para sistemas Linux que los atacantes han estado usando para desviar los datos sensibles de los gobiernos y las empresas farmacéuticas de todo el mundo.
El malware no habían sido descubiertos representa una pieza del rompecabezas que falta vinculada a "Turla," una llamada amenaza persistente avanzada (APT) da a conocer en agosto por Kaspersky Lab y Symantec . Por lo menos cuatro años, la campaña estaba dirigida a las instituciones gubernamentales, embajadas, militar, educación, investigación y compañías farmacéuticas en más de 45 países. Los atacantes desconocidos -que probablemente están respaldados por un Estado-nación, de acuerdo con Symantec, eran conocidos por haber infectado a varios cientos de equipos basados ​​en Windows mediante la explotación de una variedad de vulnerabilidades, al menos, dos de los cuales eran errores de día cero. El malware fue notable por su uso de un rootkit que hacía extremadamente difícil de detectar.
Ahora los investigadores de Kaspersky Lab con sede en Moscú han detectado malware basado en Linux se utiliza en la misma campaña . Turla ya estaba clasificado como uno de los apartamentos de alto nivel, en la misma liga que la divulgada recientemente Regin por ejemplo. El descubrimiento del componente Linux sugiere que es más grande de lo que se pensaba y puede presagiar el descubrimiento de sistemas aún más infectados.
"Los [] Turla operaciones se llevan a cabo en entornos más amplios de lo que previamente conocíamos", dijo a expertos de Kaspersky Lab Kurt Baumgartner Ars. "Todas las otras cosas que hemos visto de Turla se ha basado en Windows. Esta pieza del rompecabezas nos muestra que no se limitan a sí mismos."

Magic Numbers

Al igual que sus homólogos de Windows, el troyano Linux es extremadamente cauteloso. No se puede detectar usando el común comando netstat . Para ocultarse, la puerta trasera se encuentra en estado latente hasta que los atacantes envían paquetes inusualmente diseñados que contienen "números mágicos" en sus números de secuencia. El malware puede haber permanecido inadvertida en al menos un ordenador de la víctima durante años, aunque los investigadores de Kaspersky Lab aún no han confirmado esa sospecha. El troyano es capaz de ejecutar comandos arbitrarios a pesar de que no requiere privilegios de sistema elevados.
"Es una pieza muy interesante de código", dijo Baumgartner. "No sólo se ejecuta en Linux, pero no se puede detectar en la forma habitual."
Incluso un usuario normal con privilegios limitados puede lanzarlo, lo que le permite interceptar los comandos de tráfico y de ejecución en las máquinas infectadas. Las capacidades incluyen la habilidad de comunicarse con los servidores bajo el control de los atacantes y funciones que permiten a los atacantes ejecutar comandos de su elección y llevar a cabo la administración remota.
Incluso después de su descubrimiento, el componente de Linux sigue siendo un misterio. El archivo ejecutable subyacente está escrito en los lenguajes C++ y C y contiene código de bibliotecas previamente por escrito, una propiedad que da el archivo autosuficiencia malicioso. El código también es despojado de información de símbolos, lo que hace difícil para los investigadores realizar ingeniería inversa o analizar. Como resultado, Baumgartner dijo el troyano puede tener capacidades que aún no han sido descubiertas.
Los administradores que deseen comprobar si los sistemas Linux infectados por Turla pueden comprobar el tráfico de salida para las conexiones con news-bbc.podzone[.]org o 80.248.65.183, que son las direcciones de los canales de mando y de control conocidos codificado en el troyano Linux. Los administradores también pueden crear una firma usando una herramienta llamada YARA que detecta las cadenas  "TREX_PID=%u" y "Remote VS is empty !"
Dado el poder y el sigilo de la puerta de atrás, sin mencionar su conexión con una de las campañas de espionaje más sofisticados descubiertos hasta la fecha, no sería sorprendente que el descubrimiento para abrir la puerta a los descubrimientos de más infecciones o componentes de malware.
"La investigación está en curso", dijo Baumgartner. "Quiero suponer en algún momento esto va a tender un puente a otro hallazgo debido a la forma en que se utiliza esta puerta trasera."

Miércoles 26 de noviembre de 2014

Xavier Araque

Xavier Araque
Rendergraf

Nuevo sitio web – XavierAraque.com

xavieraraque.com

Saludos a todos ya hace un tiempo vengo trabajando en mi nuevo sitio web.

Pueden visitarlo ahora mismo desde: xavieraraque.com

También un blog/tumblr en el que publico algunos comentarios personales e imágenes blog.xavieraraque.com

Para quienes desean contactar conmigo en ambos sitios encontrarán los enlaces actualizados a mis redes sociales.

 

Este sitio quedará fuera de mantenimiento.

-Xavier-


Archivado en: Personal, Work

Miércoles 19 de noviembre de 2014

Fedora en el CGSOL 2014 Guatemala

Lunes 17 de noviembre de 2014

Migrando Debian a un disco SSD – Optimización básica

Usando un SSD

Mi portátil, una Thinkpad X220, venía con un disco de estado sólido (SSD) además de un disco SATA, por cosas de experimentos el disco SSD lo removí, pero encontré otro y lo agregué a mi equipo, ahora bien, ¿cómo migrar satisfactoriamente mi root system ya instalado a este nuevo SSD?.

SSD

He aquí mi breve experiencia compartida.

Instalación física del SSD

La Thinkpad viene con 2 bahías mini-PCIe, en una ya viene la tarjeta inalámbrica y trae otra vacía (lista para un modem 3G) dónde he colocado mi disco SSD, ahora bien, como es una Thinkpad tuve que “flashear” un BIOS mod (basado en 8duj25us_8DET69WW) para “eliminar” esa mala costumbre de Lenovo te poner una “lista blanca” de dispositivos que puedes meter a tu portátil (y que para colmo son más caros).

Al retirar los tornillos, se desprende la tapa que contiene el touchpad y el teclado y debajo encontrarán las bahías.

original.jpg

Para Thinkpad un disco SSD en esa bahía es tomado como secundario (sdb) y no como primario, no es ningún problema ya que en mi disco SATA /boot está separado de raíz y no pensaba migrar el arranque de allí.

 Particionando el disco

Hay 2 trucos básicos para particionar un disco de estado sólido y aprovechar al máximo su potencial:

Alineación de Particiones

Alinear las particiones es una de las actividades más importantes y menos tomada en cuenta cuando se diseña el layout de particiones, yo destiné 10GB (y realmente no necesito más para root) y para diseñarla usé parted:

parted /dev/sdb
mklabel gpt
unit s
mkpart primary 2048s 10G
align-check optimal 1

Dejamos 2048 sectores (1MB) al principio del disco, esto permite una mejor alineación del disco con el tamaño de los sectores (512Bytes):

Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number     Start   End      Size    Filesystem    Name     Flags
           17,4kB  1049kB   1031kB  Free Space
 1         1049kB  10,0GB   9999MB  ext4          primary

Dejar Holgura

Deja al menos un 10% libre al final del disco, este margen de holgura le permite al disco un “respiro” en su operación.

Además, orientadas a Linux hay otras consideraciones

NO usar SWAP

con 8GB de RAM es casi imposible que mi equipo se vaya a SWAP con la más alta demanda (viendo videos con un par de máquinas virtuales KVM en el fondo, navegando con el gran consumidor de RAM Chromium mientras chateo por Telegram), sin embargo, la ventaja de la X220 es que viene con un disco SATA, así que la SWAP se quedará en dicho disco (sólo de ser necesario).

Usar GPT

No usaré Windows ni ningún otro sistema operativo no-UNIX en este equipo, por lo que usar una geometría de particiones basada en GPT (GUID Partition Table), no solamente me permite múltiples particiones primarias, GPT almacena su tabla de particiones al principio y al final (una copia) lo que da una protección adicional para recuperación de particiones con herramientas como Testdisk.

 

Luego de particionado, procedemos a formatear.

Formato ext4

Aunque “mkfs.ext4 /dev/sdb1″ serviría para la mayoría de las opciones, en nuestro caso necesitamos activar una serie de opciones como el TRIM, con TRIM (discard: según ext4) los bloques de datos borrados o que dejan de estar en uso por el sistema operativo, el sistema puede notificarle al disco SSD que “limpie” dichos bloques inmediatamente para evitar la ralentización del mismo en operaciones de escritura futuras; además de TRIM, EXT4 no inicializa al ejecutar el comando mkfs ni la tabla de inodos ni el journal del mismo (característica conocida como “lazy initialization”) haciendo más lentas las operaciones iniciales de montaje y primera copia; por último, deseamos activar el modo WRITEBACK, con “data=writeback” los datos son escritos “después” que se ha escrito la metadata de la misma en el journal, esto tiene grandes ventajas en el performance (la operación de escritura de datos se hace en segundo plano) pero conlleva que un fallo eléctrico luego de ejecutado el commit de la metadata pero antes de finalizar la escritura de datos creará un sistema inconsistente; como me encuentro en un sistema protegido por batería (portátil), esto para mí no es un problema serio.

Sin embargo, recordemos las sabias palabras de Linus al respecto de data=writeback:

If your data gets written out long after the metadata hit the disk, you are going to hit all kinds of bad issues if the machine ever goes down. Linus

Insisto, habilitar “data=writeback” solo si tienes una garantía ABSOLUTA de que no habrán fallos del equipo durante un proceso de escritura en disco.

Para determinar si mi disco SSD soporta TRIM ejecuto:

hdparm -I /dev/sdb | grep 'TRIM'
 * Data Set Management TRIM supported (limit 2 blocks)

Luego, ejecuto entonces el formato de la partición sdb1:

mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -b 4096 -m 0 -O extents,dir_index /dev/sdb1

Y tune2fs:

tune2fs -o journal_data_writeback,discard -c 5 -i 5 /dev/sdb1

Adicionalmente, bajo a 5 (del por defecto 2o) la cantidad de veces que el sistema de archivos debe ser chequeado al arranque, esto porque es un equipo que constantemente se suspende|hiberna, necesito que cada vez que arranque sea chequeado, para evitar largas esperas y que espere mucho tiempo antes que un chequeo se haga demasiado tarde y el sistema simplemente no arranque (arranque en initramfs).

Al finalizar, chequeamos:

e2fsck /dev/sdb1

Y verificamos características:

tune2fs -l /dev/sdb1 | grep discard
Default mount options: journal_data_writeback user_xattr acl discard

Ahora procedemos al montaje.

Montaje de la partición

Creamos un directorio temporal y realizamos el montaje:

mkdir /ssd
Y
mount -t ext4 /dev/sdb1 /ssd -o discard,noatime,nodiratime,nodelalloc,data=writeback,i_version,barrier=0,user_xattr,inode_readahead_blks=64,commit=100

Entre las caraterísticas del montaje están:

  • discard: habilita el TRIM de la partición
  • i_version: habilita el uso de una versión “extendida” de 64-bit de los inodos de ext4
  • barrier: deshabilita los write barriers.
  • noatime,nodiratime: no escribir las fechas de acceso en archivos y directorios, información poco útil en /
  • commit: permite definir la cantidad de segundos que la metadata en disco es escrita y sincronizada, 100 segundos es mucho tiempo para garantizar confiabilidad en los datos, pero aumenta drásticamente el performance.
  • inode_readahead_blks: ext4 cuenta con un algoritmo de pre-lectura (read-ahead), dicho algoritmo “pre-lee” los inodos a los lados de un inodo leído, para “optimizar” la extracción de datos, el valor por defecto es de 32 bloques, se incrementa a 64.
  • nodelalloc: ext4 ejecuta una “delayed allocation” de los bloques y solo los reserva cuando ya va a escribir a disco, esto es potencialmente peligroso combinado con data=writeback, la totalidad de los bloques que ocupan un archivo son reservados apenas la data es copiada desde userspace a la caché del dispositivo, así, cuando la metadata se esté escribiendo en el disco, ya los bloques para almacenar dicha data estarán reservados.

Sincronizando mi raíz

Para sincronizar mi partición raíz utilizo el siguiente comando rsync:

rsync -aAvPSXx --numeric-ids --exclude="/dev/*" --exclude="/proc/*" --exclude="/sys/*" --exclude="/tmp/*" --exclude="/home/*" / /ssd/

En general excluyo todo archivo que no pertenezca a la partición raíz y los puntos de montaje de sistema (/dev, /sys).

Al finalizar la sincronización, fuerzo un trim “manual” a la partición:

fstrim -v /ssd
/ssd: 3395391488 bytes were trimmed

Cambios al FSTAB

Los cambios más importantes al FSTAB (archivo: /ssd/etc/fstab) tienen que ver con el montaje “especial” de raíz, y con el montaje en RAMFS de las particiones temporales básicas del sistema:

# tmp
tmpfs /tmp        tmpfs        noatime,nosuid         0 0
tmpfs /var/run    tmpfs        nosuid,mode=0755       0 0
tmpfs /var/lock   tmpfs        noexec,nosuid,nodev    0 0

Y raíz:

UUID=970518df-7db4-44af-979c-7c9fd86a7488 / ext4 discard,noatime,nodelalloc,data=writeback,barrier=0,i_version,commit=100,inode_readahead_blks=64,errors=remount-ro 0 1

el UUID de la partición /dev/sdb1 lo obtienen fácilmente con el comando “blkid”

Actualizando GRUB

En el archivo /ssd/etc/default/grub  cambiamos el elevador a “deadline“:

GRUB_CMDLINE_LINUX=”acpi_osi=Linux acpi=ht elevator=deadline”

Un I/O scheduler, implica la forma como Linux envía los bloques de datos a los discos, en general mi equipo es una estación de trabajo, tengo bases de datos, directorios, máquinas virtuales y “deadline” es la opción más idónea, manteniendo las colas con tiempos “deadline”, para que algunas muy retrasadas “expiren”, evitando que nos quedemos sin recursos, además, en deadline, las lecturas se priorizan por sobre las escrituras, mejorando el performance de largas operaciones de lectura sobre los discos.

CFQ (el elevador por defecto en Debian), es incluso más lento que “deadline” en operaciones con bases de datos o cargas multihilos.

Este siempre es mi elevador por defecto, sin embargo, para los discos SSD hay un elevador mucho más simple, NOOP.

Con NOOP, las operaciones van sin orden (y unidas) en una única cola de escritura que es entregada al dispositivo, su ordenamiento, escritura dependerán del dispositivo.

Hay que asumir el riesgo de usar uno u otro scheduler, en mi caso uso “deadline” por lo importante de priorizar las lecturas sobre las escrituras (útil en bases de datos y directorios LDAP), sin embargo, usar CFQ permitirá a un usuario garantizar un ancho de banda más consistente para ciertas aplicaciones (ejemplo: desktops).

También el scheduler puede ser cambiado por disco, algo que veremos en el próximo apartado.

Hacemos una “jaula” para poder actualizar el GRUB desde el nuevo disco SSD (montado en /ssd):

  • Monto el actual /boot dentro de /ssd
mount /dev/sda1 /ssd/boot
  • Monto los sistemas especiales con la opción “-o bind”:
mount /dev /ssd/dev -o bind
mount /sys -o bind  /ssd/sys
mount /proc -o bind /ssd/proc

Y creo la jaula con:

chroot /ssd

Ya dentro de la jaula, la ejecución de “update-grub” causará que se use /dev/sdb1 como nuevo “root”.

update-grub

actualicen además el initramfs:

update-initramfs -t -u

Y nos salimos de la jaula.

exit

Reiniciamos el equipo.

Optimización del disco

Ahora vamos a crear un archivo especial de optimización del disco (comentado anteriormente).

archivo: /sbin/optimicedisk.sh

#!/bin/bash
# script para optimizar el acceso a disco de sistemas con noop o deadline
# autor: Jesus Lara <jesuslarag@gmail.com>
disks=( sdb )
# parameters
SCHEDULER="deadline"
QUEUEDEPTH=256
BLOCKDEV=16384
NCQ=32
for DISK in "${disks[@]}"
do
      echo "Change I/O elevator to $SCHEDULER"
      echo $SCHEDULER > /sys/block/$DISK/queue/scheduler
      echo "Optimice server disk block size to $BLOCKDEV"
      /sbin/blockdev --setra $BLOCKDEV /dev/$DISK
      echo "Set queue depth to $QUEUEDEPTH"
      /bin/echo $QUEUEDEPTH > /sys/block/$DISK/queue/nr_requests
      echo "Enabling NCQ on $DISK"
      echo $NCQ > /sys/block/$DISK/device/queue_depth
      # read ahead and sectors read by disk
      /bin/echo "8192" > /sys/block/$DISK/queue/read_ahead_kb
      /bin/echo "4096" > /sys/block/$DISK/queue/max_sectors_kb
      if [ "$SCHEDULER" == 'deadline' ]; then
          # fifo batch reduce seeks
         /bin/echo 32 > /sys/block/$DISK/queue/iosched/fifo_batch
      fi
     # enable write-caching, readahead and disable noise-reduction (performance boost)
    /sbin/hdparm -a512 -A1 -W1 /dev/$DISK
done

En este archivo hacemos varias cosas pero 3 son muy importantes:

  • definimos la cantidad de bloques que son pre-leídos en las lecturas secuenciales (read-ahead) a 16384 (blockdev –setra)
  • Hemos indicado al sistema que este disco no es rotacional (es un SSD, sin parte móviles como platos o discos que causen latencia)
  • Habilitamos NCQ (Native Command Queuing), con NCQ se garantiza una paralelización hasta el máximo permitido (31 según LIBATA) de posibles operaciones paralelas de lectura/escritura (NOTA: debe estar habilitado AHCI en el BIOS).

original

Con esta serie de características garantizamos un equilibrio entre performance y uso.

Luego, colocamos este archivo en el rc.local:

/bin/bash /sbin/optimicedisk.sh

Y lo hacemos ejecutable:

chmod +x /sbin/optimicedisk.sh

 

Es importante además, definir si el disco es o no un dispositivo rotacional, esto afectará mucho el comportamiento de NCQ:

archivo: /etc/udev/rules.d/66-ssd.rules

# system default : set deadline scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
# SSD specific : set noop scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

# set a larger readahead size
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/read_ahead_kb}="2048"

Con esta regla UDEV, nos garantizamos que para todo disco detectado como no-rotacional, entonces se seleccione el scheduler noop.

NOTA: se usa el índice 66 ya que las reglas UDEV para almacenamientos persistentes se ejecutan en la regla 60 (persistent-storage.rules).

Al finalizar el archivo de reglas lo probamos con:

udevadm test --action=add /sys/block/sdb

Y veremos entre la larga lista de acciones de udevadme algo como esto:

udev_rules_apply_to_event: ATTR '/sys/devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/block/sdb/queue/scheduler' writing 'noop' /etc/udev/rules.d/66-ssd.rules:5

demostrando que la regla se ha aplicado correctamente a nuestro disco SSD.

Otras consideraciones

  • Re-organizar mi disco duro para que /var (y por sobre todo /var/cache y /var/log, además de /var/spool) queden sobre el disco SATA
  • Actualizar el firmware del disco, OCZ trae un comando para hacerlo desde Linux.
  • Realizar algunos cambios adicionales en sysctl como por ejemplo:
# VM
vm.dirty_ratio = 20
vm.dirty_background_ratio = 20
vm.dirty_bytes = 67108864
vm.dirty_background_bytes = 134217728
vm.mmap_min_addr = 4096
# swapping
vm.swappiness = 0
vm.vfs_cache_pressure = 20

Que podría explicar luego.

Conclusiones

Un disco SSD es un excelente recurso para incrementar el performance, pero por sus características, su tiempo de vida es limitado (con estas características acá aplicadas, el tiempo de vida de una portátil con SSD podría llegar a los 8 años, y yo jamás he tenido más de 8 años con la misma portátil y el mismo disco!), como todo, hay que aprender a optimizarlo y sacarle el mejor provecho posible.

Happy Hacking!

 

The post Migrando Debian a un disco SSD – Optimización básica appeared first on Phenobarbital con Soda.

Domingo 16 de noviembre de 2014

Valencia Software Libre: I Jornada de Ingenieria y Arquitectura UJAP - Carabobo

Miércoles 12 de noviembre de 2014

Carlos Colmenarez

Carlos Colmenarez
El Blog de Zero » LINUX

El Moto G (2014) es el primero en recibir Lollipop, y algo está cambiando en Android

Como ocurrió el año pasado, Motorola ha sido la primera. Algunos usuarios americanos del Moto G (2014) ya están recibiendo Android 5.0 Lollipop y la tendencia en actualizaciones parece estar cambiando en casi todas las marcas de la plataforma.

Como ya pasó con Android 4.4 Kit Kat, no han sido los Nexus los primeros dispositivos en actualizar a Android 5.0 Lollipop. El honor recae sobre Motorola y el Moto G de segunda generación, mientras que la actualización para el Moto X estaría casi lista. Según informan algunos usuarios usuarios del Moto G (2014) libre americano, ya han comenzado a recibir la actualización vía OTA, con un peso de unos 386 MB.

La actualización llega tras la noticia que conocimos hace tiempo por la cual Motorola confirmaba que toda la gama 2013 y 2014 probaría el sabor de Android 5.0 Lollipop. La velocidad en la entrega no sorprende dada la poca personalización que Motorola hace sobre el Android que Google entrega a las compañías. Sin embargo, tiene mérito que un dispositivo como el Moto E llegue a conocer Lollipop, pues en otra marca la actualización no es que se retrasara, es que directamente la empresa no se planteara su actualización, algo que ha pasado incluso en modelos de gama alta.

Los fabricantes se están tomando más en serio los plazos

En este sentido, parece que algo está cambiando. Todas las marcas han ido confirmando ya los terminales que actualizarán a Android 5.0 Lollipop, y además se están dando más prisa de lo que nos tienen acostumbradas. Por una parte tenemos una LG que esta semana ya comenzará a actualizar su G3 (manualmente ya está disponible la actualización), una Samsung cuyo TouchWiz basado en Lollipop ya hemos podido ver en vídeo en el Galaxy S4 y en Galaxy S5, por lo que tampoco debería tardar mucho en llegar a éstos y a los Note 3 y Note 4.

Quien sale peor parada de este movimiento es, sin duda, Google. Desde el día 3 de noviembre esperamos la llegada de Android 5.0 Lollipop a los Nexus 7 de 2012 y 2013, Nexus 4 y Nexus 5, y la OTA no acaba de llegar a los usuarios. Al parecer se trata de corrección de bugs, pero siendo tú quien desarrolla el software, no da muy buena imagen a la plataforma retrasarse en los que deben ser, como la propia Google afirma, los terminales ejemplares.

fuente: celularis


Lunes 10 de noviembre de 2014

Jesús Matamoros

Jesús Matamoros
Jesus Matamoros Web blog

¿Por qué es tan importante tener un sitio web?


dirección en Internet, puede dar una imagen poco seria y profesional. Cada vez más el tener un sitio Web será definitivo para seguir en carrera.  

En la actualidad  TODA  empresa, organización, no importa el tamaño,  necesita y debe tener un sitio Web.  En EEUU y en los países más avanzados de la UE está demostrado que la intensidad en la aplicación de nuevas tecnologías y la incorporación de un Sitio Web, está correlacionado de manera positiva con el incremento de las ventas, la productividad y el valor de mercado de las empresas. Además, estudiosos del E-Business consideran que las empresas que no entren en el campo de Internet en los próximos 10 años, desaparecerán!. Conozca a continuación las ventajas de tener un sitio web...

 Ventajas de tener un sitio web:
1. Alcance mundial de sus productos y servicios: a través del sitio Web Usted podrá llegar a clientes potenciales del mundo entero. Las limitaciones geográficas ya no existen, un sitio Web es como una oficina de ventas en cada lugar del planeta.

2. Competir al lado de los más grandes:
Su imagen en Internet podrá ser comparable a cualquier gran compañía de su mismo sector. Es un terreno imparcial donde el sitio web de una empresa pequeña puede ser tanto o más atractivo que el de una empresa muy grande. Por eso podrá competir justo al lado de las empresas más grandes, de igual a igual.

3. Disponible las 24horas, todos los días año: La presencia universal también se complementa con la presencia las 24 horas, los 7 días de la semana, los 365 días del año, lo que permite que aún fuera del horario de trabajo, la empresa siga produciendo y creciendo. Además de atender otras partes del planeta que por diferencias horarias sería imposible realizarlo al instante.

4. Menos Costos Operativos:
Ahorro en gastos de publicidad, reducción de teléfono y personal, de modo que cualquier información que pudiera necesitar el cliente la podrá consultar en su página Web, esto le ahorra tiempo, dinero y reduce el número de llamadas telefónicas de su negocio, locales y de larga distancia.

5. Imagen Profesional de su empresa: Actualmente las empresas respetadas en el medio tienen presencia en la Web. El no contar con una
Logo empresa desarrollo web

En iT Labs nos dedicamos a ofrecer soluciones digitales 360º, empleando las últimas tecnologías disponibles en el mercado, poniendo especial énfasis en la funcionalidad y el posicionamiento y estrategia de marketing, permitiéndole lograr presencia en Internet. De esta manera Usted y su empresa podrán competir estratégicamente, utilizando nuestros productos como una herramienta de marketing, publicidad y hasta gestión empresarial.


Miguel Ángel Useche

Miguel Ángel Useche
El blog de Skatox » Planetas

Cómo empecé a usar Firefox hace una década

Ayer 9 de noviembre, se cumplieron 10 años del lanzamiento de la versión 1.0 de Firefox, el navegador que sigo usando actualmente por diversas razones que les comentaré en esta entrada. Aunque recuerdo utilizar Netscape cuando iba a los populares cybercafes (pues en los 90s no era común tener Internet en el hogar) mi salida de Internet Explorer (que por venir instalado con Windows era mi predeterminado) fue como a finales del 2002 cuando empecé a jugar con páginas de seguridad informática y en uno de los retos me pedía falsificar el navegador, averiguando instalé K-meleon que se convirtió en mi navegador por defecto por incluir pestañas. Luego me enteré que el navegador estaba basado en otro llamado Mozilla Suite y ahí empezó todo.
Cuando me enteré del desarrollo de Firefox, recuerdo que no me gustó por ser un navegador con pocas funcionalidades respecto a Mozilla Suite (me encataba la idea de tener un cliente IRC y de correo en el navegador) y lo ignoré por completo hasta que instalé la primera versión de Ubuntu que venía con Firefox 0.93. En ese entonces, al ser una numeración menor a 1.0, pensé que el navegador era una beta y no lo probé hasta su lanzamiento; ese día recuerdo bajar un versión binaria, pues no había paquete oficial para Ubuntu 4.10 y al probarlo me gustó por su rapidez. De ahí seguí utilizando versión por versión, creo que la 1.5 no la usé por gran tiempo debido a problemas de video en mi equipo y utilicé, pero luego volví con la versión 2.0.

Haciendo una retrospectiva de las versiones del navegador, es impresionante como ha cambiado la web en 10 años. Cuando salió Firefox, Internet Explorer controlaba el mercado y casi todas las páginas se hicieron para funcionar en ella, además apenas estaba surgiendo la primeras aplicaciones web, Javascript no era tan importante, era necesario utilizar plugins de terceros para ver animaciones y videos en la web, pocos sitios usaban llamadas AJAX, entre otros. Ya hoy en día gracias a Firefox, tenemos la posibilidad de escoger otros navegadores como Chrome (Firefox permitió abrir el paso a otros navegadores), brindar mayor sentido a las estadarizaciones en la web, implementar futuras tecnologías, ejecutar código JS a velocidades cercanas a código nativo, por nombrar algunas cosas. Ademas, Firefox se ha convertido en el navegador mas rápido (a la fecha de publicación de esta entrada), sirve de base para Firefox OS, tiene una versión para Android, se enfoca en los intereses de los usuarios y no de una organización, te protege tu información y respeta tu privacidad, puedes sincronizar de forma privada y segura la información de tu navegador entre dispositivos, está desarrollado por gente de distintas partes del mundo y de forma totalmente abierta, entre otros. Por estas razones y más, les recomiendo utilizar este navegador, no solo por su gran calidad desde el punto de vista técnico, sino también porque al usarlo apoyas a la web abierta.

P.d: Puede estar un poco extraña la redacción del post pero lo redacté con mucho sueño luego de organizar y realizar el evento.

Jueves 06 de noviembre de 2014

Silvio Perez: Bridging two routers through wifi

Domingo 02 de noviembre de 2014

Ramon Marquez

Ramon Marquez
Libuntu » Linux

El 14 de noviembre estará disponible “This War Of Mine”, el juego de guerra que necesitábamos.

El próximo 14 de noviembre, la desarrolladora de videojuegos polaca 11 bit Studios lanza al mercado su juego “This War Of Mine”, el juego de guerra que necesitábamos. La guerra es un tema constante en los videojuegos, no importa si te toca ser el dirigente de una nación en un juego de “Grand Strategy”, comandante… Read More »
Jorge Ortega

Jorge Ortega
Joenco

Como hacer que Espeak reconozca las voces de mbrola

Revisando en internet como agregar las voces de mbrola en “Gespeaker“, me encontré con este articulo: “Gespeaker. Texto a voz” donde explica que hacer para que espeak reconozca las voces de mbrola y es lo que les voy a comentar para que ustedes también las utilicen!!

 

Lo que vamos hacer es instalar mbrola y las voces en español, esto por si aun no lo han hecho:

1. Abrimos un terminal/consola.

2. Entramos como superusuario (root, escribiendo:

# su

3. Escribimos la contraseña de administrador:

# la -contraseña-de-root

4. Instalamos mbrola y las voces:

# aptitude install mbrola mbrola-es1 mbrola-es2 mbrola-mx2 mbrola-vz1

5 Creamos una carpeta llamada “ves” en /usr/lib/i386-linux-gnu/espeak-data/voices/:

# mkdir /usr/lib/i386-linux-gnu/espeak-data/voices/ves

6. Copiamos los archivos mb-es1, mb-es2, mb-mx2 y mb-vz1 que se encuentra en /usr/lib/i386-linux-gnu/espeak-data/voices/mb/ en la carpeta creada:

# cp /usr/lib/i386-linux-gnu/espeak-data/voices/mb/mb-es* /usr/lib/i386-linux-gnu/espeak-data/voices/vz1/

# cp /usr/lib/i386-linux-gnu/espeak-data/voices/mb/mb-mx2 /usr/lib/i386-linux-gnu/espeak-data/voices/vz1/

# cp /usr/lib/i386-linux-gnu/espeak-data/voices/mb/mb-vz1 /usr/lib/i386-linux-gnu/espeak-data/voices/vz1/

Listo, eso es todo ya podremos utilizar las voces de mbrola con espeak.!

 

Lo mejor es que podremos usar las nuevas voces con Gespeaker y el lector de pantalla orca, lo malo (no todo es perfecto), cuando se usa con el lector de pantalla no reproduce algunas cosas.

 

Es de destacar que se puede utilizar la voz venezolana sin ningún problema para reproducir cualquier texto utilizando “Gespeaker”.!!

 

Nota: En el articulo “Instalando otras voces para el lector de pantalla orca” se explica como hacer que se reconozca mbrola en las opciones.

 

Saludos a todos y para cualquier pregunta, comentario o sugerencia lo pueden hacer en los comentarios.


Viernes 31 de octubre de 2014

Ramon Marquez

Ramon Marquez
Libuntu » Linux

La rama 3.16 del kernel Linux tendrá soporte extendido

A través de la lista de correo de Linux se ha anunciado el soporte extendido para la rama 3.16 por parte del equipo de desarrollo de Ubuntu y de Debian. El soporte extendido de Linux 3.16 ha entrado en vigencia, la particularidad de todo esto es que el soporte estará a cargo de terceras personas… Read More »

Jueves 30 de octubre de 2014

Ramon Marquez

Ramon Marquez
Libuntu » Linux

Se lanzan nuevas versiones de actualización del kernel Linux

Greg Kroah-Hartman ha anunciado a través de la lista de correo de Linux, el lanzamiento de varias versiones de actualización para algunas ramas del kernel Linux trayendo consigo varias mejoras, actualizaciones de drivers y numerosos arreglos de errores. Las versiones 3.17.2, 3.16.7, 3.14.23 y 3.10.59 del kernel Linux han sido lanzadas el día de hoy,… Read More »

Domingo 26 de octubre de 2014

Jorge Ortega

Jorge Ortega
Joenco

Hostinger: un sitio de hosting web accesible, gratuito y sin publicidad

Hostinger: un sitio de hosting web accesible, gratuito y sin publicidad.


Sábado 18 de octubre de 2014

Instalar Drivers Privados de AMD Radeon (fglrx) Debian Wheezy

Recientemente adquirí una humilde AMD Radeon R9 270, y quise instalar los drivers propietarios (fglrx) para poder jugar UrT como dios manda.

Añadir los repositorios backports para Debian Wheezy, en el archivo /etc/apt/sources.lst
# Backports Debian Wheezy
deb http://http.debian.net/debian/ wheezy-backports main contrib non-free

Actualizar la lista de paquetes
$ aptitude update && aptitude update

Instalar el driver fglrx
$ aptitude -r -t wheezy-backports install fglrx-driver fglrx-control

Esto creará el archivo xorg.conf usando el módulo fglrx
$ aticonfig –initial

Agregar el driver libre “radeon” a la lista negra, modificar el archivo: /etc/modprobe.d/radeon-kms.conf; si tienes el archivo, de no tenerlo lo creas y agregas:
blacklist radeon
options radeon modeset=1

Reiniciar el equipo y listo!

Para probar si efectivamente el driver esta funcionando, utilizar las siguientes utilidades:

$ fglrxinfo

La salida debe ser algo como esto:
display: :0.0 screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon R9 200 Series
OpenGL version string: 4.3.12618 Compatibility Profile Context 8.982.13

$ glxinfo | grep render
La salida debe ser: direct rendering: Yes

$ glxgears
La salida debe ser una ventana con 3 engranajes (colores azul, rojo, verde) y un average FPS cada 5 segundos

$ fgl_glxgears
La salida debe ser una ventana con un cubo, en cada cara hay 3 engranajes (colores azul, rojo, verde; como en la salida anterior) y un average FPS cada 5 segundos

Los drivers disponibles en wheezy-backports son los AMD Catalyst 13.12, que tienen un buen rendimiento en linux incluso mejor que la serie 14.xx, sobre todo si se desea probar la minería Litecoin.

Saludos !

Viernes 17 de octubre de 2014

Vulnerabilidad crítica “Shellshock” afecta a Linux y OS X

Está Escrito:
No lo que entra en la boca contamina al hombre; mas lo que sale de la boca, esto contamina al hombre. (Mateo 15:11)
Tomado de: DiarioTI
Descuido en el diseño de la herramienta 'bash' - intérprete de la línea de comandos de Unix - permite en teoría ejecutar código a distancia y así tomar el control de sistemas. Shellshock ha impactado aproximadamente a medio millón de servidores web y dispositivos.

Una vulnerabilidad crítica recién descubierta llamada Shellshock, ha impactado aproximadamente a medio millón de servidores web, así como dispositivos conectados a Internet, incluyendo teléfonos móviles, routers y dispositivos médicos; de acuerdo con los expertos de defensas amenazas de Trend Micro. La empresa destaca que Shellshock, al estar relacionado con Linux, puede también afectar a las plataformas PC y Apple.
Shellshock es una vulnerabilidad crítica, que Trend Micro describe como “una plaga”. Dicha amenaza, al ser explotada, permite el acceso a los sistemas basados ​​en Linux a través de sus líneas de comando.
Considerando que estos sistemas constituyen aproximadamente el 51% de los servidores web en el mundo, la capacidad de penetración es elevada y los ataques podrían aumentar a un ritmo muy rápido.
“La reciente vulnerabilidad Heartbleed es de naturaleza similar a Shellshock, pero Heartbleed solo queda eclipsada por la extensión y alcance de esta nueva vulnerabilidad”, escribe Trend Micro.
Debido a la naturaleza y alcance de Shellshock, la empresa sugiere considerar lo siguiente:
- Usuario final: Estar atento a los nuevos parches de seguridad e implementarlos inmediatamente.
- Administrador de TI: Si cuentan con el sistema Linux, se recomienda deshabilitar los scripts o las secuencias de comandos BASH inmediatamente.
- Operador de sitio Web: Si el BASH está en sus scripts, parche lo antes posible, o modifique sus scripts para no utilizar BASH.
· Clientes que cuentan con servicios de hosting o de terceros: Pregunte a su proveedor que están haciendo para remediar y aplicar parches.
Trend Micro ofrece información actualizada sobre Shellshock” en su blog de seguridad.

Jueves 16 de octubre de 2014

Jorge Ortega

Jorge Ortega
Joenco

Script para agregar atajos de teclado en Gnome-shell

Una de las cosas que me gusta hacer cuando instalo por primera vez un equipo, es poder tener atajos de teclado o combinaciones de teclas para abrir mis aplicaciones preferidas como por ejemplo el Terminal/Consola, el editor de texto Gedit, el editor de documentos, el Pidgin, entre otras.

Gracias a que estoy suscrito en la lista de “tiflo-linux“, preguntando que archivos debía modificar para crear un script que me permitiera agregar los atajos sin necesidad de hacer eso gráficamente, el compañero “Manuel Cortéz” me comentó que en la pagina “http://community.linuxmint.com/tutorial/view/1171&#8243; explicaban como hacerlo, que me ayudo bastante para entender como se agrega los atajos por consola.

Haciendo algunas pruebas y ensayos, logre tener un script que me permite agregar atajos de teclado de mis aplicaciones favoritas y el cual puedes descargar sin problema: “script para agregar atajos en Gnome-shell“, para ejecutar debes:

1. Abrir un Terminal/Consola

2. Escribir:

$ python agregaratajos.py

      1. Listo!!, ya tienes los atajos.

Estas son las aplicaciones y sus atajos:

Gedit ctrl+alt+e

Terminal ctrl+alt+t

Writer ctrl+alt+w

Calc ctrl+alt+c

Pidgin ctrl+alt+p

Orca ctrl+alt+o

Carpeta personal ctrl+alt+h

Skype ctrl+alt+s

Gespeaker ctrl+alt+g

Navegador web ctrl+alt+n

Este script lo probé en Debian y Canaima4.0 pero debería funcionar también en Ubuntu y derivados, es de destacar que solo estoy identificando los navegadores “Iceweasel”, “Firefox” y “Cunaguaro”.

Si tienen alguna pregunta, duda o sugerencia sobre que falta en el script, me lo hacen saber en los comentarios.

Saludos a todos y ya sabes, si te ha gustado compártelo!!


Martes 14 de octubre de 2014

Respaldo y recuperación completo de GitLab con Postgresql

GitLab and Posgresql

GitLab tiene como la posibilidad de usar Postgresql como su motor de base de datos (a parte de MySQL) y todo viene ya listo para incluso hacer respaldos de su base de datos y sus repositorios Git haciendo uso de un script Ruby (un rake).  Esta es la forma recomendada ya que permite recuperar todo garantizando que no hay transacciones pendientes a nivel de base de datos ni de repositorios Git.

El  problema

En la documentación explican el detalle de cómo hacer un respaldo y restauración  manual, pero al momento de hacer la restauración esta falla porque al intentar insertar registros existentes estos generan conflictos como este:

ALTER SEQUENCE
psql:/home/git/gitlab/tmp/backups/db/database.sql:812: ERROR: relation "users" already exists

La solución

Se debe forzar el respaldo de pogresql para que primero borre las tablas para luego crearlas e insertar los registros en la restauración. Esto se consigue con la opción –clean o -c  de la orden pg_dump. Esta opción se debe editar en script ruby que realiza el respaldo, que por omisión es /home/git/gitlab/lib/backup/database.rb. En este archivo se debe ubicar esta porción del código y sustituir la línea en negrilla mostrada a continuación:

require 'yaml'
module Backup
 class Database
 attr_reader :config, :db_dir
def initialize
 @config = YAML.load_file(File.join(Rails.root,'config','database.yml'))[Rails.env]
 @db_dir = File.join(Gitlab.config.backup.path, 'db')
 FileUtils.mkdir_p(@db_dir) unless Dir.exists?(@db_dir)
 end
def dump
 success = case config["adapter"]
 when /^mysql/ then
 print "Dumping MySQL database #{config['database']} ... "
 system('mysqldump', *mysql_args, config['database'], out: db_file_name)
 when "postgresql" then
 print "Dumping PostgreSQL database #{config['database']} ... "
 pg_env
 system('pg_dump', config['database'], out: db_file_name)
 end
 report_success(success)
 end

Esta línea debe sustituirse por esta otra:

system('pg_dump', config['database'], '-c', out: db_file_name)

Aquí puede verse que la opción -c es pasada como argumento a la orden pg_dump. Esto hará que se incluyan todos los DROPS necesarios en el archivo .sql generado para el respaldo de GitLab

Actualización

En GitLab 7.4 este problema fue resullto con esto https://gitlab.com/gitlab-org/gitlab-ce/commit/77b57c114be6b1fa02538c35066ccc363bfe68e6 [Gracias Sytse Sijbrandij]

.

Sábado 11 de octubre de 2014

Valencia Software Libre: LXDE el escritorio liviano por excelencia

Viernes 10 de octubre de 2014

Probando una Epson multifuncional L210

Probando una Epson multifuncional

La impresora epson multifuncional L210 llega con tecnología innovadora de tanques de tinta, para imprimir miles, ahorrando miles. Con la tinta incluida, imprime* hasta 4,000 páginas en negro y 6,500 páginas a color, a un bajo costo de pocos centavos por página. Imprime, copia y escanea con gran calidad y facilidad. La L210 revoluciona la impresión en pequeñas oficinas y hogares -ideal para documentos, copias, reportes y fotos. Configure la impresora multifuncional en minutos y comience a producir impresiones de alta calidad. Obtendrá fotos y documentos nítidos y llenos de vida de manera rápida. Además, no es necesario esperar para manipular sus impresiones gracias a la tinta de secado instantáneo. También puede realizar copias a color. O bien, escanee y guarde recetas, informes escolares y documentos importantes; todo con el software que se incluye.

¿Qué hay en la caja?

  • La impresora.
  • 1 botella de tinta negra y 3 botellas de tinta a color (cian, magenta y amarilla) de 70ml cada una.
  • Cable de Alimentación.
  • Cable USB.
  • Guía rápida de instalación.
  • CD con drivers, manuales, software OCR y para edición de fotos.

Compatibilidad

  • Windows® 7
  • Windows Vista®
  • Windows XP
  • Windows XP Professional x64
  • Mac OS® X, 10.5.8, 10.6.x, 10.7.x, 10.8.x

Para saber mas de las caracteristicas, clic aqui.

Como instalarla en linux

La instalacion es totalmente sencilla, solo debemos ir a esta pagina http://download.ebz.epson.net/dsc/search/01/search/searchModule

Donde nos pregunta: “Enter product name” debemos colocar: “L210” que corresponde el nombre del nuestra impresora.

Selecionamos nuestro sistema operativo, en este caso, Linux

El resultado de la busqueda nos va a dar dos opciones de descarga:

  • Printer Driver
  • Scanner Driver

Bajamos esos paquetes, y listo, ya tenemos funcionando nuestra impresora epson sin problemas en nuestro equipo.

Nota

Recuerden seguir las instrucciones de recarga de los cartuchos. Es importante seguirlas al pie de la letra ;)

Miguel Ángel Useche

Miguel Ángel Useche
El weblog de Skatox » Planetas

La evolución de la web

Llevo muchos años haciendo desarrollo web, aproximadamente en 1999 hice mi primera página web en el extinto Geocities y de allí hice páginas por entretenimiento hasta que en el 2003, con esta página (antes de ser un blog) y otra de skate he estado involucrando en el mundo web.

Desde entonces ha habido muchos cambios en la web, por una parte, antes solo existía un navegador como tal pues Internet Explorer ocupaba como el 95% de la cuota y pocas personas usaban Netscape, limitando a los desarrolladores a solo crear cosas disponibles en esta aplicación que Microsoft había abandonado. Esto ocasionó el despliegue de complementos de terceros como Flash y Java, que traían a la web mayor interacción, animaciones a cambio de menor seguridad y lentitud. Pero al hacer un sitio con esas tecnologías, estabas seguro que funcionaba en cualquier computadora y que eventualmente tus lectores iban a sufrir vulnerabilidades de seguridad.

Por otra parte, en el año 2004 salió el navegador Mozilla Firefox que logró brindar una alternativa a los usuarios de la web y abrir la posibilidad de nuevos navegadores como Google Chrome que salió en 2008, para así destronar a Internet Explorer y fomentar una sana competencia por ganar usuarios a través de calidad, permitiendo el avance de tecnologías abiertas y el impulso de HTML5/CSS3. Con estas alternativas, los programadores y diseñadores tuvieron que adaptarse a los nuevos tiempos y actualizar o crear sus páginas para funcionar en cada navegador del mercado, pues dar soporte a uno solo no es opción, porque olvidas a sector importante de usuarios de Internet.

Con el lanzamiento de dispositivos móviles ahora la web estaba disponible en todas partes, desde cualquier lado puedes acceder a ella y fuera de tu computadora personal. Creando un nuevo reto pues una página no solo debía funcionar bien en todos los navegadores sino también en múltiples tamaños de pantalla y resoluciones, aumentando un poco el trabajo de los desarrolladores pero creando sitios dinámicos que funcionan en cualquier tamaño de pantalla.

Podría decirse que la evolución de la web siempre pone retos a los desarrolles y a quienes ejercen el diseño de sitios web, pero a su vez, permite a los usuarios disfrutar de una mejor plataforma, cada vez con mas posibilidades audiovisuales de forma nativa, tener videojuegos 2D y 3D en el navegador, contar con sistemas operativos como Chrome OS y Firefox OS que ejecutan aplicaciones web y muchas cosas mas por venir. Demostrando que tenemos a la web por mucho tiempo y seguirá siendo el principal medio de comunicación en el mundo.

Domingo 05 de octubre de 2014

Script php para chequear y notificar disponibilidad de servidores en SoYouStart

Miércoles 01 de octubre de 2014

Cómo activar la interfaz Web de qBittorrent

Si deseas controlar to servidor qBittorrent usando la interfaz web, sigue los siguientes pasos:

  1. En la barra de menú, ve a Tools > Options qBittorrent WEB UI
  2. En la próxima ventana, selecciona la opción Web UI
  3. Marca la opción Enable the Web User Interface (Remote control)
  4. Selecciona un puerto (Por omisión 8080)
  5. Configura el nombre de usuario y contraseña (Por omisión username: admin / password: adminadmin) WEB UI
  6. Haz clic en Ok para guardar las configuraciones.

Ahora podrás acceder a tu servidor desde un navegador si colocas la dirección IP y puerto de tu servidor qBittorrent, ejemplo: 192.168.1.100:8080 como se muestra a continuación: qBittorrent Web UI También puedes acceder desde tu dispositivo Android si instalas qBittorrent Client o qBittorrent Client ProqBitttoren Client Pro

Inkscape: Donde cada elemento es una capa

¿Te has preguntado en que se diferencia Inkscape de GIMP? Una de las principales razones por las cuales Inkscape es más utilizada para elaborar publicidad, es porque trata a cada elemento como una capa individual, esto permite que al elaborar un arte central, puedas simplemente reorganizar los elementos que lo componen para realizar un nuevo diseño, por lo tienes que olvídate de borrar y parchar nada.

En Gimp, si dibujamos varias figuras y no colocamos cada una en una capa, cuando queramos separarlas, no podremos, ya que todos los componentes que hicimos forman parte de una misma capa, en cambio, si realizamos las mismas figuras en inkscape, la diferencia es que podremos separarlas y trabajar con ellas como elementos individuales ya que cada una de ellas se comporta como una capa.

Por ejemplo, el diseño de esta web fue hecho con inkscape, así que dale un vistazo, deja tu comentario y no olvides suscribirte a mi canal de youtube y a este portal para seguir aprendiendo de forma fácil y rápida!

Y si te gusta mi contenido, no te olvides de votar por este blog como Mejor Blog de Software Libre, solo dale click al botón amarillo que dice “Votar” y confirma tu email! :D

flattr this!

Lunes 29 de septiembre de 2014

Miguel Ángel Useche

Miguel Ángel Useche
El weblog de Skatox » Planetas

Crea tu propia nube como Dropbox en tu servidor con Owncloud

Hace unos días Dropbox (un servicio para almacenar archivos y fotos en Internet) anunció su plan de $9.99 mensuales por 1TB, algo muy atractivo para la mayoría, pero si no posees el dinero para adquirirlo, es insuficiente la cantidad de espacio disponible en el plan gratuito o te molesta saber que la NSA (la agencia de seguridad nacional de EE.UU.) tiene la posibilidad de acceder a tus archivos, entonces te recomiendo instalar tu propio servicio con ownCloud, donde tienes control de tus datos.

Owncloud es un proyecto de código abierto que permite almacenar archivos, imágenes, contactos y actividades de un calendario en un servidor central, para sincronizarlos automáticamente en varios dispositivos tal como lo hace Dropbox.

¿Por que usar ownCloud?

Esta aplicación me parece excelente cuando quieres tener privacidad total en la nube o tener un servicio de sincronización de archivos/información en una red local. Porque puedes instalarlo en tu propio servidor web y a través de los clientes sincronizarlo automáticamente, de esta forma, siempre podrás acceder a tus archivos en cualquier parte donde exista conexión a Internet. El espacio disponible será el espacio libre en tu servidor, lo que es probablemente mayor al espacio ofrecido por los planes pagos de otros servicios.

El protocolo WebDAV

Una de las ventajas de ownCloud, es el acceso a los archivos a través del protocolo WebDAV. Esto permite que utilices aplicaciones de terceros para acceder a los archivos, puedes utilizar el explorador de archivos de Gnome/KDE/Mac para navegar en las carpetas y descargar solo el archivo que vas a usar (para el caso de Windows, toca instalar una aplicación para tener esta funcionalidad).

Esto es útil cuando tienes por ejemplo 40GB de archivos en la nube y en uno de los dispositivos donde deseas tener tus archivos sincronizados no tiene ese espacio disponible. Pues solo descargas el contenido que vas a utilizar.

Clientes

A pesar que existen clientes para diversos sistemas operativos, solo tuve oportunidad de probar la versión para teléfonos Android y la de Linux.

Web

Esta es el cliente que viene obviamente por defecto, la interfaz es agradable y tiene todas las funcionalidades básicas: navegación de archivos, consulta de contactos, calendario,  generar enlaces para compartir archivos a otras personas, configuración, etc. Algo que me gustó es la posibilidad de ver tus fotos en una galería como en servicios de terceros, permitiéndote ver tus fotos en cualquier parte, también tiene soporte para cuentas múltiples, el único detalle negativo fue la subida de archivos, que si me parece un poco arcaica pero funciona bien (aunque en algunos servidores da problemas con el límite de subida de archivos en PHP). Hace falta un editor de archivos, pero existen plugins con Libreoffice (no los he probado) para poder implementar esta funcionalidad que por los momentos está de pruebas.

Interfaz Web de Owncloud

Interfaz Web de Owncloud

Android

Cliente de Owncloud en Android

Cliente de ownCloud en Android

La aplicación oficial de Owncloud para Android es paga aunque su costo es pequeño, el dinero recaudado sirve para financiar el desarrollo proyecto por lo que deberías adquirir esta versión. Otra alternativa, es utilizar la tienda de Android llamada F-Droid, la cual está llena de aplicaciones de código abierto y allí descargar ownCloud gratuitamente.

Funciona muy parecida a la de Dropbox, te permite recorrer tus archivos, descargarlos o compartir un enlace para enviar a terceros, cargar automáticamente las fotos que tomes en el teléfono, por mencionar algunas. Una característica que me gustó fue un indicador de que el archivo ya se había descargado, permitiendo conocer que archivos se encuentran en el teléfono y cuáles en la nube, muy útil para ahorrar consumo de datos, respecto a este tema, te permite seleccionar que solo sincronice archivos en WiFi o que no suba vídeos con plan de datos, brindando mayor control sobre el tráfico de datos.

GNU/Linux

Owncloud en Linux

Owncloud en Linux

La versión de Linux está hecha en QT (parece estar integrada con KDE) y se ejecuta en segundo plano para chequear cambios en las carpetas, para posteriormente subir los archivos. Esta aplicación permite seleccionar sincronizar varias carpetas del servidor en distintas carpetas locales, dando mayor flexibilidad al momento de organizar los archivos. La única limitación observada fue la ausencia de soporte para enlaces simbólicos (Dropbox si los soporta) pero se pueden utilizar nombres de carpetas distintos en la nube o sincronizar múltiples carpetas para solventar este problema.

El único problema que vi en este cliente, fue la imposibilidad de sincronizar a través de la red local (LAN) con otras computadoras conectadas a la misma nube y la poca inteligencia para detectar cambios en archivos, pues algunos archivos que había subido los volvía a descargar pensando que era otro mas nuevo por la fecha de modificación. Pero aparte de ello, no encontré otro problema.

Integración con Dropbox y Google Drive

Migrar a ownCloud no significa que te aísles del resto de servicios, pues tiene opciones para agregar carpetas con archivos alojados en: Amazon S3, Dropbox, FTP, Google Drive, OpenStack Object Storage, otro servidor de ownCloud, SFTP, WebDAV, entro otros. Con tan solo agregar una carpeta remota en las opciones e iniciar sesión, tendrás una carpeta sincronizada con estos servicios, permitiendo acceder de forma centralizada a cada uno de estos servicios.

Conclusiones

Te recomiendo utilizar ownCloud si deseas administrar tu propia nube personal, tienes un servidor con mayor espacio que el ofrecido por Dropbox, deseas administrar tu calendario y contactos sin depender de terceros. El hecho de tener muchos GB de espacio, acceso a mis archivos desde cualquier lado y con gran privacidad, fue suficiente para mí la migración a este servicio, además ¡Es de código abierto!

Sábado 27 de septiembre de 2014

Realizar un RMA (Return Merchandise Authorization) desde Venezuela

Hola, de nuevo por acá.

Por allá por el 2012 compré un kit de memoria RAM DDR3 de 2x4Gb PC12800 en amazon. Por razones obvias, no fue hasta 2013 en que terminé de armar mi máquina (la descripción aca).

Desde el primer momento todo bien, hasta que por necesidad, tuve que instalar win server 2012 (lo necesitaba para realizar unas pruebas con NAT64). Se me presentaron muchos problemas a la hora de instalarlo, incluso sobre vmware. En linux nunca se me reinició la máquina, incluso haciendo pruebas con Xen, mientras que en win sí, al primer reinicio (pantallazo azul) el problema era obvio; solo restaba iniciar memtest y listo, memorias malas. NOTA: Para probar memorias con memtest, es recomendable probar un solo módulo a la vez.

Para realizar el proceso de devolución o RMA, ingresé al sitio de soporte y garantía de Corsair aca (), luego me registré en el sitio https://corsair.secure.force.com y seguí las instrucciones para iniciar el proceso.

El proceso fue muy rápido y sencillo, solo aperturas el ticket seleccionando el producto (Memoria RAM), seleccionas el modelo (CMZ8GX3M2A1600C9B en mi caso), número de lote de las memorias, describir el problema presentado (en mi caso ya hay uno predefinido, I have tested the memory with memtest, and it shows errors) y datos como marca y modelo de la Motherboard, modelo de CPU y sistema operativo.

Al día siguiente de haber abierto el ticket, me responden solicitando fotos de las memorias y su caja; donde se pueda observar el lot number; archivo pdf de la factura (en este caso, busque en mi historial de amazon e imprimí en pdf la orden de compra) y por último, una foto del memtest donde se aprecien los errores. Una vez suministrada esta información, en un día me fue aprobado el RMA, me enviaron a mi cuenta de correo un link donde se descarga la etiqueta que contiene el número de RMA, la dirección de envío del producto defectuoso (también aparece la dirección donde enviarán el producto de reemplazo) y las instrucciones de embalaje del producto.

Para el envío de las memorias, fuí a un mail boxes etc y me ofrecieron el envío por Fedex (el envío me costo poco menos de 700Bs). Para realizar el envío, suministré las memorias malas, la factura de la compra y la etiqueta enviada por Corsair (allí estan los datos del departamento de RMA Corsair para el continente Americano, Hayway CA, USA), ellos embalan el producto en una caja estandar (cajas utilizadas por Fedex para realizar envíos internacionales) y se realiza el papeleo para el envío. Es importante que en la caja se pueda observar lo siguiente: RMA # xxxxxx (se puede escribir con marcados); de esta manera una vez llegado el paquete, corsair lo identifica rápidamente.

El envío por Fedex se tardó unos 3 días en llegar, y 24 horas despues de haber llegado, me enviaron unas memorias nuevas desde Taiwan. En el caso de Corsair, los productos de reemplazo, los envían por UPS y Fedex, dependiendo del tamaño.

En total, el proceso duró 19 días, desde que abrí el ticket para iniciar el proceso de devolución hasta que me llegaron las memorias nuevas.

Hasta la proxima !

Jueves 25 de septiembre de 2014

Donde encontrar increibles Fotos Gratuitas

Uno de los retos mas grandes cuando nos toca realizar un website o una publicidad en general es encontrar fotografías geniales a un buen costo (o gratis dependiendo del cliente), y no es que sea malo pagar por fotografías, pero a veces el cliente es pequeño y pues el presupuesto no alcanza. En la red hay miles de servicios que proveen fotografías de alta calidad por un costo de suscripción mensual, por paquete o por fotografía, pero hay un mundo de sitios que ofrecen fotografías de forma gratuita bajo una licencia amigable para esas necesidades que tanto tenemos como diseñadores. Veamos algunos de mis favoritos:

dttsf

Death to Stock Photo es un servicio al cual te suscribes dejando tu email en su website, y mensualmente envía sets de 10 fotografías ambientadas usualmente en el tema del mes, con una calidad increíble y una variedad super útil. Cada vez que recibes un correo de ellos te emocionas solo al ver el titulo porque sabes que una explosión de creatividad ha llegado a tu correo.

pixabay

Pixabay es un excelente sitio donde el orden de sus etiquetas y categorías son la clave para encontrar lo que quieras, cuando quieras. No requiere registrarse y su interfaz es muy parecida a la de 500px, por lo que encontrar y descargar contenido es pan comido.

nos

New Old Stock es una colección de fotografías públicas antiguas que están libres de todo tipo de restricción de derechos de autor. Es muy a lo tumblr y es algo difícil ubicar fotos por categorías o etiquetas, sin embargo, la cantidad de fotografías referenciales a artículos y momentos históricos que tiene es simplemente hermosa.

littlevisuals

Little Visuals sigue el estilo de Death to StockPhoto pero cada 7 días. Tiene fotos hermosas bajo dominio público pero lo bueno es que en su web, tienen a disposición todo el histórico de packs, por lo que si te perdiste uno o apenas te estás uniendo, puedes revisar los packs anteriores y bajar lo que necesites.

picjumbo

PicJumbo es un sitio que disfruta de una variedad abismal de contenido, además de tener un excelente plugin para tu browser que te avisa cuando hay contenido nuevo. Se agregan fotos nuevas diariamente, así que nunca te quedarás sin contenido fresco para tus necesidades.

Y recuerda que las votaciones para Mejor Blog de SoftwareLibre aún están abiertas, vota si aún no lo has hecho!!!

flattr this!

Miércoles 24 de septiembre de 2014

Como hacer videos para Instagram usando Kdenlive + Instashot

Te has preguntado como hago mis videos de Instagram? Trabajar con Kdenlive es muy fácil y una de las cosas que mas me gusta es que puedes arrastrar cualquier video, imagen o audio y automáticamente se cargará en la aplicación. Hacer un video en Kdenlive es como armar un rompecabezas, solo debes arrastrar las piezas que ya cargaste y ordenarlas. Puedes separar las pistas, cortarlas, agregarles efectos y mucho más. Poco a poco iré explicando como trabajar mas detalladamente con Kdenlive, pero primero, quiero que vean la potencialidad de esta aplicación y se enamoren de ella como yo lo he hecho.

Una vez exportado nuestro video mp4 lo copiaremos a nuestro teléfono, abriremos instashot y selecionaremos video. Navegaremos hasta encontrar nuestro video y lo cargaremos a la aplicación. En este punto verás una serie de opciones en la parte inferior, seleccionaremos Fit de ajustar, y si queremos que el video sea cuadrado como instagram, seleccionaremos Full. Puedes probar las otras opciones si te da curiosidad. Cuando estés feliz con el encuadre, pulsa el visto bueno a la derecha y en la parte superior encontrarás el enlace directo para cargarlo a instagram. Tarda un poco ya que le baja la calidad, al menos ese fue mi caso y eso te dará la opción de publicar de una vez.

Y así es como realizo los videos que me gusta compartir con ustedes en instagram y que ultimamente “creo” que los han hecho reir un monton. Recuerden que sus dudas se convierten en podcast, así que no sean timidos y dejen un comentario… ahh…. y si les gusta mi contenido, no olviden ir a portal programas y votar por tatica.org como mejor Blog de SoftwareLibre, su voto significa mucho para mi!

flattr this!

Miércoles 17 de septiembre de 2014

Usando SSH para actualizar WordPress

En estos días me ha tocado atender un nuevo cliente, la gente de 4lochas.com, un portal de música y variedades que tiene rato hosteado con nosotros, pero que cambió recientemente de administración. Luego de una buena cantidad de setbacks (menores y mayores), pusimos a andar el sitio. Y, si bien es cierto que hay un par de caídas de vez en cuando, el sitio está operativo la mayor parte del tiempo. Esas cosas se van a ir corrigiendo a medida que se van afinando los detalles.

Entre las cosas que me solicitaba, estaban las de actualizar plugins y temas y esas cosas. Obviamente, lo primero que se hace con un cliente nuevo es darle sus credenciales de usuario. Pero, en el caso de mis servidores, hay una configuración estándar de ssh, en la que PasswordAuthentication está desactivado, y sólo puedes loguearte si tu llave pública está añadida en el authorized_keys correspondiente. Por lo que el cliente debe generar llaves ssh para poder añadirlas a su archivos de llaves autorizadas. Desafortunadamente, putty no es particularmente sencillo en su uso de llaves. Al menos, no para mí que sólo lo he usado un par de ocasiones, y nunca desde mis equipos.

En fin, revisando por el internés alguna forma de automatizar el proceso de autenticación vía llaves ssh en wordpress, conseguí este artículo en el que explican paso a paso lo que debe hacerse. La cosa es que está hecho para distribuciones basadas en RedHat.

No voy a ahondar mucho en cómo se instala ssh, cómo creas llaves públicas, cómo accedes a ellas y cómo las llevas al servidor. De esos hay muchísimos artículos por toda la internet que está a un googleo de distancia. Lo que sí voy a decirles es qué necesitan desde ese punto en adelante para tener el wordpress andando en [una distro basada en] debian.

Lo primero, instalar libssh2-php

apt-get install libssh2-php

Luego, añadir esto en su wp-config.php. Les sugiero que las añadan luego de los salt strings.


define('FTP_PUBKEY','/home/tu_usuario/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/tu_usuario/.ssh/id_rsa');
define('FTP_USER','tu_usuario');
define('FTP_PASS','hackme');
define('FTP_HOST','127.0.0.1:22');

Donde:
FTP_PUBKEY: Es la llave pública. Usualmente se aloja en ~/.ssh
FTP_PRIVKEY: Es la llave privada. Usualmente se aloja en ~/.ssh
FTP_USER: Obviamente, tu usuario
FTP_PASS: El password.
FTP_HOST: En este caso, 127.0.0.1, porque se supone que estás descargando local en tu servidor. Puedes usar un TLD o incluso un subdominio.

Ya con eso no deberías requerir configurar nada más para actualizar o instalar cualquier cosa en WordPress. De hecho, lo probé actualizando a WP4, añadiendo un nuevo tema e instalando plugins y actualizaciones requeridas sin ningún inconveniente.

Viernes 12 de septiembre de 2014

Héctor Colina

Optimizando recursos en tu computador

En aras de optimizar el uso de un minicomputador que estoy utilizando, he venido realizando una serie de instalaciones controladas obviando muchos de  los paquetes predefinidos que ofrece el instalador de Debian, en este caso.

Al momento de la instalación de Debian, utilicé la versión testing:

hector@helga:/tmp$ cat /etc/debian_version 
jessie/sid
hector@helga:/tmp$

Y como manejador de ventanas e17 junto con lightdm como gestor de inicio de sesión gráfica.

Esta combinación me ha permitido ahorrar recursos en el equipo VIT M1100, computador de procesador  Intel Atom CPU N270 a 1.60GHz con 2 Gb de RAM; por ejemplo, no es infrecuente que en ese equipo tenga funcionando, como ahora, LibreOffice, un navegador web con 10 ventanas abiertas, una consola (utilizo lxterminal) con 3 pestañas abiertas y el rendimiento del mismo sea bastante aceptable

 hector@helga:/tmp$ free
 total used free shared buffers cached
Mem: 2062084 1331972 730112 112288 48432 671848
-/+ buffers/cache: 611692 1450392
Swap: 3906556 0 3906556
hector@helga:/tmp$

Sin embargo, una de las cosas que extrañé fue una herramienta que me permitiese utilizar la webcam, para ello, utilicé la herramienta fswebcam, disponible en los repositorios de Debian y que se utiliza de la siguiente forma:

hector@helga:/tmp$ fswebcam -r 1024x768 --jpeg 200 -D 1 captura.jpg

Donde:

r es la resolución

–jpeg es la resolución de salida del formato a utilizar

-D es el retardo que se utilizará para que luego de activada la cámara se tome la fotografía, en algunos casos, este valor debe ser mayor para permitir que el sensor de la cámara calibre la luz exterior

Acá un ejemplo de la captura realizada.
captura

Espero les sea útil esta entrada.

Viernes 29 de agosto de 2014

Oliver Rivas

Oliver Rivas
orvtech.com

Eliminando todos los mensajes directos de Twitter con Python

Sigo en mi travesía por aprender Python y que mejor forma que solucionar problemas en funciona a la privacidad.

Varias personas me comentaron lo tedioso que es eliminar mensajes privados en Twitter así que decidi hacer una herramienta que me permita automatizar todo esto.

Lo primero es crear una app en twitter visitando apps.twitter.com y otorgarle permisos de lectura, escritura y DMs. Allí mismo pueden generar el consumer_key, consumer_secret, access_token_key y el access_token_secret.

El script no es nada complejo y de hecho hay oportunidades para mejorarlo, aqui se los dejo:

# https://github.com/orvtech/Python-tools-for-twitter
import json
import requests
from requests_oauthlib import OAuth1


consumer_key='<YOUR CONSUMER KEY HERE>'
consumer_secret='<YOUR CONSUMER SECRET HERE>'
access_token_key='<YOUR ACCESS TOKEN HERE>'
access_token_secret='<YOUR ACCESS TOKEN SECRET HERE>'


def get_messages_ids():
  api_url='https://api.twitter.com/1.1/direct_messages.json'
  payload = {'count':'200', 'cursor':'-1', 'skip_status':'1'}
  auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
  r = requests.get(api_url, stream=False, auth=auth, params=payload)
  if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
    print("We reached rate limit for ", api_url)
    print("Try again at", r.headers["x-rate-limit-reset"])
    quit()
  DMs = json.loads(r.content)
  message_ids=[]
  for x in range(len(DMs)):
    current_ids=DMs[x]['id']
    message_ids.append(current_ids)
  api_url='https://api.twitter.com/1.1/direct_messages/sent.json'
  payload = {'count':'200'}
  r = requests.get(api_url, stream=False, auth=auth, params=payload)
  if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
    print("We reached rate limit for ", api_url)
    print("Try again at", r.headers["x-rate-limit-reset"])
    quit()
  DMs = json.loads(r.content)
  for x in range(len(DMs)):
    current_ids=DMs[x]['id']
    message_ids.append(current_ids)
  return message_ids


def nuke_messages(DMs):
  for x in DMs:
    api_url='https://api.twitter.com/1.1/direct_messages/destroy.json'
    payload = {'id':x}
    auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
    r = requests.post(api_url, stream=False, auth=auth, params=payload)


while True:
  DMs = get_messages_ids()
  if DMs and len(DMs) > 0:
    print('Deleting:', DMs)
    nuke_messages(DMs)
  else:
    print('There appears that there are no more DMs', DMs)
    break

Usa solo 2 funciones, una en la que invoca primero los primeros 200 mensajes recibidos y luego los primeros 200 mensajes enviados. Tras evaluar si en realidad existen mensajes, se le pasan los IDs de los mensajes a eliminar a la segunda función y se repite este proceso hasta que no existan mas IDs a eliminar.

Tanto las llamadas de al API para saber los IDs de los mensajes enviados como las de los mensajes enviados tiene un limite así que implemente mecanismos para monitorear si se llego al limite leyendo las cabeceras de las peticiones HTTP.

Por lo pronto pueden hacer un fork de este repositorio de github En un futuro me gustaría convertirlo en una aplicación web usando flask o algo por ese estilo.


Miércoles 27 de agosto de 2014

Milton Mazzarri

Milton Mazzarri
milmazz

How to document your Javascript code

Someone that knows something about Java probably knows about JavaDoc. If you know something about Python you probably document your code following the rules defined for Sphinx (Sphinx uses reStructuredText as its markup language). Or in C, you follow the rules defined for Doxygen (Doxygen also supports other programming languages such as Objective-C, Java, C#, PHP, etc.). But, what happens when we are coding in JavaScript? How can we document our source code?

As a developer that interacts with other members of a team, the need to document all your intentions must become a habit. If you follow some basic rules and stick to them you can gain benefits like the automatic generation of documentation in formats like HTML, PDF, and so on.

I must confess that I’m relatively new to JavaScript, but one of the first things that I implement is the source code documentation. I’ve been using JSDoc for documenting all my JavaScript code, it’s easy, and you only need to follow a short set of rules.

/**
 * @file Working with Tags
 * @author Milton Mazzarri <me@milmazz.uno>
 * @version 0.1
 */

var Tag = $(function(){
  /**
   * The Tag definition.
   *
   * @param {String} id - The ID of the Tag.
   * @param {String} description - Concise description of the tag.
   * @param {Number} min - Minimum value accepted for trends.
   * @param {Number} max - Maximum value accepted for trends.
   * @param {Object} plc - The ID of the {@link PLC} object where this tag belongs.
   */
  var Tag = function(id, description, min, max, plc) {
    id = id;
    description = description;
    trend_min = min;
    trend_max = max;
    plc = plc;
  };

  return {
    /**
     * Get the current value of the tag.
     *
     * @see [Example]{@link http://example.com}
     * @returns {Number} The current value of the tag.
     */
    getValue: function() {
      return Math.random;
    }
  };
 }());

In the previous example, I have documented the index of the file, showing the author and version, you can also include other things such as a copyright and license note. I have also documented the class definition including parameters and methods specifying the name, and type with a concise description.

After you process your source code with JSDoc the result looks like the following:

usejsdoc

In the previous image you see the documentation in HTML format, also you see a table that displays the parameters with appropriate links to your source code, and finally, JSDoc implements a very nice style to your document.

If you need further details I recommend you check out the JSDoc documentation.

How to document your Javascript code was originally published by Milton Mazzarri at milmazz on August 27, 2014.

Cómo extender un volumen en LVM

A veces es necesario extender un volumen lógico, expandiendo el volumen físico donde está alojado. Si este es el caso, puedes seguir este ejemplo que extiende un volumen de 450 GB a 500 GB: Primero consultamos a geometry del disco

:~# fdisk -l /dev/sdb
Disk /dev/sdb: 483.2 GB, 483183820800 bytes
 255 heads, 63 sectors/track, 58743 cylinders, total 943718400 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x0001178e

Luego de expandir el volumen, se fuerza a que se rescanee el volumen

:~# echo 1 > /sys/block/sdb/device/rescan

Consultamos nuevamente la geometría del disco

:~# fdisk -l /dev/sdb
Disk /dev/sdb: 536.9 GB, 536870912000 bytes
 255 heads, 63 sectors/track, 65270 cylinders, total 1048576000 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x0001178e

Como puede verse el tamaño del disco aumentó pero solo lo sabe del sistema operativo, ya que a nivel de LVM sigue teniendo la misma información porque no se ha expandido el volumen físico:

:~# pvs
 PV VG Fmt Attr PSize PFree
 /dev/sda5 debian lvm2 a-- 3.76g 0
 /dev/sda6 debian lvm2 a-- 13.00g 0
 /dev/sdb svn_vg lvm2 a-- 450.00g 0

Si expandimos el volumen físico con la siguente orden:

# pvresize /dev/sdb
 Physical volume "/dev/sdb" changed
 1 physical volume(s) resized / 0 physical volume(s) not resized

Y ahora consultamos los el espacio de los volúmenes físicos veremos el espacio agregado:

:~# pvs
 PV VG Fmt Attr PSize PFree
 /dev/sda5 debian lvm2 a-- 3.76g 0
 /dev/sda6 debian lvm2 a-- 13.00g 0
 /dev/sdb svn_vg lvm2 a-- 500.00g 50.00g

Ahora se debe expandir el volumen lógico y la dimensión de sistema de archivos en caliente. Ambas cosas se pueden hacer con una sola orden:

:~# lvresize -r -L +50G /dev/mapper/svn_vg-svn
 Extending logical volume svn to 500.00 GiB
 Logical volume svn successfully resized
 resize2fs 1.42.5 (29-Jul-2012)
 Filesystem at /dev/mapper/svn_vg-svn is mounted on /var/data/svn; on-line resizing required
 old_desc_blocks = 29, new_desc_blocks = 32
 Performing an on-line resize of /dev/mapper/svn_vg-svn to 131070976 (4k) blocks.
 The filesystem on /dev/mapper/svn_vg-svn is now 131070976 blocks long.

Finalmente si consultamos el espacio disponible tendremos los 50 GB adicionales en el sistema de archivos:

:~# df -h
 Filesystem Size Used Avail Use% Mounted on
 rootfs 993M 287M 655M 31% /
 udev 10M 0 10M 0% /dev
 tmpfs 397M 228K 397M 1% /run
 /dev/mapper/debian-root 993M 287M 655M 31% /
 tmpfs 5.0M 0 5.0M 0% /run/lock
 tmpfs 794M 0 794M 0% /run/shm
 /dev/sda1 228M 34M 183M 16% /boot
 /dev/mapper/debian-home 2.0G 39M 1.9G 3% /home
 /dev/mapper/debian-tmp 3.9G 7.1M 3.7G 1% /tmp
 /dev/mapper/debian-usr 2.0G 869M 1.1G 46% /usr
 /dev/mapper/debian-var 6.7G 2.1G 4.3G 33% /var
 /dev/mapper/svn_vg-svn 493G 432G 62G 88% /var/data/svn

Jueves 21 de agosto de 2014

Adios Linux

Está Escrito:
Pero el hombre natural no percibe las cosas que son del Espíritu de Dios, porque para él son locura, y no las puede entender, porque se han de discernir espiritualmente. (1 Corintios 2:14)

OJO esto es lo que Piensan Los que no Conocen Linux,

Deja tu Comentario..

 Adios Linux

Hace unas semanas alguien me dijo "Mira, un tablet con arranque dual Linux/Android" y como entonces pensé, a estas alturas... ¿A quien le importa Linux?

Esta claro que la oportunidad que tuvo Linux en los sistemas de escritorio con los netbooks ha sido la única que ha tenido de inundar el mercado de escritorio, ocasión que fue desaprovechada  y no volverá a suceder. Ahora a nadie le importa Linux ni sus escritorios fuera del ámbito estrictamente profesional. Y mientras vive su época dorada en Android, a nivel de escritorio esta acabado. Si linux no fue capaz de quitarle un misero 2% de cuota a Windows cuando la gente usaba Windows 98, XP y Vista, menos lo sera ahora que todo usuario poco avanzado esta migrando a iPads o tablets android y el usuario avanzado esta con Windows 7.

Como he dicho, Linux con los netbooks tuvo la mejor oportunidad posible para copar un mercado. Equipos pequeños, baratos, sin potencia donde windows 7 iba muy mal, no estaba adaptado y tenían un uso tan limitado a la navegación web que Linux podía hacer todo sin problema alguno, o eso decían. Pero no consiguió nada, la lentitud y conservadurismo con la que se desarrollan los sistemas de escritorio de Linux lo volvieron a dejar fuera del mercado. Yo mismo mostré en un articulo de 2010 como con un poco de ingenio y un solo programa se podía dejar el escritorio GNOME en una autentica maravilla adaptada a netbooks con esfuerzo prácticamente nulo ¿Y que hacían las grandes distribuciones y escritorios? La mayoría obvio el mercado de los netbooks y no le presto la suficiente atención. Otras como canonical se adentraron en un desarrollo faraonico de un nuevo sistema de escritorio que se ha ganado muchísimas criticas, empezando porque salio a la luz en pañales.

Las señales del final
Un ejemplo de esta decrepitud es la comunidad Linux que visitaba regularmente desde 2008. Casi todos los usuarios que no eran unos fanaticos lo habían abandonado para irse a Windows o Mac. La comunidad se ha convertido básicamente en un SAT donde diariamente se arreglan problemas de un SO, con cientos de citas de la terminal, que casi nunca encontraban solución.

Desde que abandone Linux, hace un año y pico, no he visto motivo alguno para volver, he ganado una despreocupación por el ordenador absoluta, que no tenía con Linux. Pues para usarlo uno tiene que estar eternamente luchando contra los elementos. Hace no mucho tuve una charla con un IT que derivo a la situación de linux en su casa.

 "Mira, en la oficina tengo algún servidor Linux y es un todoterreno, lleva en pie desde hace dos años sin ningún problema. Pero en casa algo tan sencillo como ver un video flash a pantalla completa es imposible, cuelgues, cuelgues y más cuelgues, y basicamente es para lo único que uso windows en casa. He probado ya tropecientas distros, versiones,... y siempre con problemas. Al final me he comprado una licencia de Windows 8."

Creo que aqui esta una de las claves del fracaso de Linux en el escritorio. Que ya he comentado tantas veces.

¿Alguien tiene la culpa?
¿En algún momento piensa alguien en hacer algo de autocritica? ¿O van a seguir echando balones fuera como llevan haciendo una década? Hace no mucho Miguel de Icaza escribió un articulo en el que daba por muerto a Linux en los sistemas de escritorio y exponía lo que el veía como los problemas que llevaron a Linux a tal fracaso ¿Cual fue la respuesta de la gente? ¿Aceptarlo? ¿Intentar buscar otra explicación a este fracaso? Porque el fracaso es innegable salvo para cuatro gatos a los que es mejor directamente ignorar. No recuerdo una corriente de opinión que desmontara sus argumentos, obviando a Torvalds que va por libre. La mayoría de comentarios que escuche en su día son dignos de patio de colegio, atacando a Icaza por tener un Mac, por desarrollar Mono, por su papel en Novell y Microsoft,... Todos esos pecados que en la comunidad linux uno no puede permitirse, como tener opinión propia. Vamos, que mientras alguien hacia por fin una autocritica sacando los trapos sucios, incluso los suyos, el resto se dedicaron a demostrar la mentalidad de crió que ha rodeado siempre a Linux y que han sido en parte su tumba porque no permitían un debate serio y adulto.

Adios
Como usuario de escritorio este articulo es mi despedida completa de Linux y de su comunidad. Mientras que hace un tiempo abandone el sistema operativo mientras seguía un poco al tanto de las novedades, esta vez ya es despedida completa del sistema. Si vuelvo sera en una estación de trabajo, un servidor, un movil android,... o quien sabe, quizás una futura consola de Valve.

Y si, podéis cabrearos, podéis hacer lo de siempre que es llamarme de todo (especialmente los insultos latinos que solo hacen partirme el culo de la risa), podéis negar todo, podéis mentir sobre mi, podéis sacar de contexto lo que he dicho, podéis hablar del Top500 y de Android, podéis decir que me equivoco y que todo es falso, decir que odio el software libre aunque lo use todos los días,... Podéis hacer mil cosas,... Lo que no podéis hacer es tener un 2% de cuota de mercado.


Lo siento, linux, YOU LOSE!

Domingo 03 de agosto de 2014

David Moreno

David Moreno
dm's blog

New hosting for Planeta Linux

Just a very quick shout out.

A few weeks/months ago, Planeta Linux lost its hosting. As I'm less and less involved on third party projects, it was a bit hard for me to just put it somewhere else. Víctor, however, approached me and offered to pay for it. A few days later, we hosted Planeta Linux on one of his hosting instances. A big round of applause goes to him! He is the one making that community possible.

Over and out.

Domingo 27 de julio de 2014

Tarea de Django-Celery desde un URL.

En el artículo anterior (Restful API con Django-tastypie y Django-Celery ) se mostró como pasarle datos a django desde su interprete de comandos, en este arículo se explicará como pasarlo desde el navegador o un script en python que lo haga por nosotros.

Recapitulando la parte del código que captura el url se maneja en el archivo urls.py que tiene lo siguiente:
url(r'^enviar/', celery_views.task_view(tasks.RecNums)),

Al abrir el url http://127.0.0.1:8080/ se tiene la siguiente imagen de una captura de pantalla:



Como django está en modo debug nos muestra esa página, la cual dice los urls tienen que manejar el orden que se muestra (admin,api, enviar y los otros dos con identificación de procesos).

Django devuelve mensaje 404, como se muestra a continuación:


En el artículo anterior se uso el interprete de comandos de Django con el siguiente código:
>>>import json
>>>from pasarela.apps.sms.tasks import RecNums
>>>datos = '{"numeros": ["34225673531", "34265673531", "34365673531", "34245673531", "34345673531"], "mensaje": "xyzw", "cantnumeros": 5,"evento":6}'
>>>resultado = RecNums.delay(datos)
>>>resultado.get()
'Se enviaron: 5'

Como se ve, datos es un string que contiene entre llaves un conjunto de datos, lo que está entre las comillas es un diccionario de python, por esa razón cuando la función RecNums recibe datos convierte el string que en sí es un json, el cual pasa de ser un tipo str a un tipo dict:
>>>type(datos)
str
>>>diccionario = json.loads(datos)
>>>type(diccionario)
dict

Ahora bien, se tiene que el url a usar debería ser algo como:
http://127.0.0.1/enviar/?datos=
Donde lo que va luego del igual debería ser el jason que se está pasando a la función ( '{"numeros": ["34225673531", "34265673531", "34365673531", "34245673531", "34345673531"], "mensaje": "xyzw", "cantnumeros": 5,"evento":6}' ). Este es el json, el problema que se tiene es que el url no está bien construído, para ello se mostrará en un script python como se abre el url pasandole el json (se muestra en la siguiente figura):


A continuación se muestra el log de celery donde se ve que procesa las tareas del envío de cada mensaje a su número celular respectivo:

Y para terminar se muestra el log de Django al recibir el URL que se paso en el script donde devuelve el código 200:

Así que para poder pasar por medio de un url sus parámetros se tiene que realizar una conversión a formato url de los datos que se tienen en el json.

Puntero del mouse no visible en gnome

Download PDF

Si por alguna razón utilizando alguno de los componentes de gnome (como gnome-settings-daemon en mi caso porque gnome-terminal todavía me gusta) el puntero del mouse no es visible pero aún funcional, entonces lo más probable es que tengas que ejecutar:

dconf write /org/gnome/settings-daemon/plugins/cursor/active false

Este problema se da puesto que Gnome esconde el puntero cuando se detecta algún dispositivo touch¹ (vaya estupidez cuando lo touch no es la pantalla, pero el trackpad). Así pues, es necesario hacer entender al !@#$%&*@# Gnome que no se trata de una !@#$%^ pantalla touch pero de un !@##$%%^ multi-touch trackpad.

1. https://bugs.archlinux.org/task/34901

Lunes 21 de julio de 2014

Convertir archivo de audio WMA a formato MP3

Vamos a convertir archivos VMA a MP3, de una manera bastante simple y directa. Los pasos descritos acá son de utilidad para esas ocasiones donde te bajas un audio WMA pero tu reproductor, celular, etc no lee ese formato, así que lo único que quieres es transformarlo a MP3 para que pueda reconocerlo. El procedimiento […]

De .NEF a .JPG en Linux sin perder calidad

El día de ayer mi amiga Gabriela me comentó que estaba tratando de transformar archivos .NEF (formato electrónico de archivos RAW de Nikon) a .JPG y que estaba perdiendo calidad en la imagen final, y que además tenía un lote de unas 2000 fotografías que deseaba procesarlas a JPG sin pasar por un proceso manual (ella usa Darktable ó UFRaw para ello). Durante un rato estuve jugando con las herramientas de imagemagick y notaba la alta perdida de calidad, por ejemplo:

Imagen Original .NEF

 

Imagen JPG procesada con Darktable/UFRaw

 

Para ello escribí un pequeño y sucio script en bash que:

  • Convierte los archivos .NEF a .PNG y luego con imagemagick transforma el PNG a JPG (método sucio que funciona usando netpbm, dcraw y imagemagick).
  • Procesa un lote de .NEF que estén ubicados en el directorio donde se corra el script.
#/bin/bash
# Instrucciones:
# 
# 1. Para que este script funcione, necesita tener instalado: netpbm, dcraw, imagemagick
#
# sudo aptitude install netpbm dcraw imagemagick
#
# 2. Setear permisos de ejecucion al script
# chmod +x nef_a_jpg.sh 
#
# Enjoy :D
#
# Por: Juan Angulo Moreno <apostols@gmail.com> 2014-07-20
 
echo "Preparando el ambiente..."
 
total_archivos=`ls *.NEF| wc -l` 
echo "Iniciando conversion... Total de archivos a convertir: $total_archivos"
 
# Que comience la fiesta
for ARCHIVOS in *.NEF ; 
do 
	nombre_base=`basename "$ARCHIVOS" .NEF`;
	echo "Conviertiendo $nombre_base.NEF a JPG...";
	dcraw -c -w $ARCHIVOS | pnmtopng > $nombre_base.png;
	convert $nombre_base.png $nombre_base.jpg
	echo "Listo."
done

Sábado 19 de julio de 2014

Restful API con Django-tastypie y Django-Celery

Continuando con los artículos sobre django, en este caso se usará django-celery para envío de mensajes a un servidor kannel (servidor sms) y django-tastypie para mostrar el resultado por medio de API rest full con json.
En los dos artículos anteriores Manejo de colas de RabbitMQ en django con django-celery y Restfult API con django tastypie se tiene la base de este artículo. Este artículo se basa en el ejemplo de la mensajería sms del artículo de Restfult API con django tastypie (todo el proceso de creación del proyecto y de la aplicación sms fue explicada en ese artículo).

La idea ahora es poder mostrar los sms listados por evento, no es necesario estar creando una tabla que herede de las otras dos, esto será posible gracias a tastypie en una consulta del json.

Se usará como base de datos sqlite3. A continuación se muestra el archivo settings.py:
#Archivo settings.py:
#Configuración de la base de datos sqlite3
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'sms.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}





#Zona horaria y localización


TIME_ZONE = 'America/Caracas'




LANGUAGE_CODE = 'es-ve'


#Aplicaciones instaladas (djcelery,pasarela.apps.sms,tastypie y south)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    'djcelery',
    'pasarela.apps.sms',
    'tastypie',
    'south',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)


#Conexión al servidor kannel 
direccion = "127.0.0.1"
portsms = "13013"
portadmin  = "13000"
usuario = "kannel"
clave = "kannel"
----------------------

El archivo pasarela/apps/sms/models.py:
#Archivo pasarela/apps/sms/models.py
from django.db import models

#Se crea la tabla Evento que contiene los campos evento (número del evento), el estatus del mismo (si se #termino el evento o no y si no termino fue por falla o no.
class Evento(models.Model):
    evento = models.IntegerField(primary_key=True)
    estatus = models.BooleanField(default=False)

    def unicode(self):
       evento = "Evento: %s, Estatus: %s , Falla: %s" %(self.evento,self.estatus,self.falla)
       return evento

#Se crea la tabla HistoricoSMS donde se tiene un campo
#foreignkey de la tablla evento, el mensaje, el número de celular, el estatus si se envío o no o si fallo.
class HistoricoSMS(models.Model):
    evento = models.ForeignKey(Evento)
    mensaje = models.CharField(max_length=150)
    numcel = models.CharField(max_length=11)
    estatus = models.BooleanField(default=False)

    def unicode(self):
        mensaje = "%s, %s, %s, %s, %s"  %(self.evento.evento,self.numcel,self.estatus, self.mensaje,self.falla)
        return mensaje
--------------------


Archivo pasarela/apps/sms/admin.py:
#Archivo pasarela/apps/sms/admin.py
#En este archivo se define que las tablas Evento e HistoricoSMS se puedan visualizar desde la #administración de django.
from django.contrib  import admin
from pasarela.apps.sms.models import HistoricoSMS,Evento


admin.site.register(HistoricoSMS)
admin.site.register(Evento)


Archivo pasarela/apps/sms/api.py (archivo para crear el api restful de django-tastypie), en este caso tiene varias modificaciones con respecto al artículo anterior sobre tastypie, ahora se agrega la variable filtering(más información sobre filtering en el siguiente enlace) que es un diccionario en cada recurso:

#Se importa de tastypie.resources ModelResource, ALL y ALL_WITH_RELATIONS
from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
#Se importa del modelo HistoricoSMS y Evento
from .models import HistoricoSMS,Evento
#Se importa fields de tastypie
from tastypie import fields


class EventoResource(ModelResource):
    class Meta:
        queryset =Evento.objects.all()
        resource_name = 'evento'
#Se muestra todos los eventos
        filtering = {
            'evento': ALL,
        }


class SMSResource(ModelResource):
    evento = fields.ForeignKey(EventoResource, 'evento')
    class Meta:
        queryset = HistoricoSMS.objects.all()
        resource_name = 'sms'
#De evento se muestra todo con relación a el. de estatus se muestra exactamente lo que se necesita,
#acá también se puede usar para las consultas: ['exact', 'range', 'gt', 'gte', 'lt', 'lte'].
        filtering = {
            'evento': ALL_WITH_RELATIONS,
            'estatus':['exact'],
        }
------------------------


El archivo que permite manejar las tareas de celery pasarela/apps/sms/tasks.py :
#Archivo pasarela/apps/sms/tasks.py
from celery import Celery
app = Celery('tasks', broker='amqp://',backend='amqp')
from urllib2 import urlopen
from urllib import urlencode
import urllib2
import json
from time import sleep
from django.conf import settings
from pasarela.apps.sms.models import HistoricoSMS,Evento



#Conexión al servidor kannel (está configuración se puede pasar al archivo settings.py y usarla desde allí
direccion = settings.direccion
portsms = settings.portsms
portadmin  = settings.portadmin
usuario = settings.usuario
clave = settings.clave

#Se define una tarea para celery por medio del decorador @task, se recibe un json para luego sea
# procesado.
@app.task
def RecNums(datos):
    #Se toma el json y se convierte en un diccionario
    diccionario = json.loads(datos)
    #Se instancia la clave Evento(tabla Evento).
    evento = Evento()
    #Se asigna cada variable del diccionario para trabajarlos directamente
    for clave in diccionario.keys():
        if clave == 'mensaje':
            mensaje = diccionario[clave]
        elif clave == 'numeros':
            numeros = diccionario[clave]
        elif clave == 'cantnumeros':
            cantnum = int(diccionario[clave])
        elif clave == 'evento':
            eventoid = int(diccionario[clave])
    #Se crea una lista para agregar todos los números de celular a dicha lista
    lista = []
    for num in numeros: lista.append(str(num))
    #A evento.evento se le asigna el id del evento.
    evento.evento = eventoid
    #Si la lista es distinta a la variable cantnum se envía un mensaje de error, si no se procesa la lista
    if len(lista) == cantnum:
        #Se envía al proceso Enviar (de celery) cada mensaje con su número celular, esperando un segundo 
        #para procesar el siguiente.
        for i in range(len(lista)):
            #Se Envía el mensaje pasando el evento, el número celular de la lista y el mensaje
            resultado = Enviar.delay(evento,lista[i],mensaje)
            sleep(1)
        #Se asigna True al estatus del evento al terminar de procesar los mensajes.
        evento.estatus = True
        #Se salva los valores en la tabla Evento.
        evento.save()
        return "Se enviaron: %s" %cantnum
    else:
        evento.estatus = False
        evento.save()
        return "Error en la recepcion de los datos"


#Se crea la tarea de celery Enviar donde recibe el número del evento, el número de celular y la cantidad de 
#intentos para enviar el sms el valor por defecto es 5.
@app.task
def Enviar(evento,numcel,mensaje,intentos=5):
    #Se instancia la clase HistoricoSMS que maneja dicha table de models.py
    historico = HistoricoSMS()
    #Se le da forma de códificación url al mensaje para eliminar los espacios en blanco del mismo.
    form = urlencode({'text': mensaje})
    #se define la variable Url donde se tiene el url del servidor kannel donde se le pasa al texto
    #el usuario, la clave, el número celular y el mensaje a enviar.
    Url = "http://%s:%s/cgi-bin/sendsms?username=%s&password=%s&to=%s&text=%s" % (direccion,portsms,usuario,clave,numcel,form)
    #Se maneja una excepción si hay un error de comunicación http.
    try
        #Se abre el Url
        f = urlopen(Url,timeout=10)
        #Se asigna los valores numcel, mensaje y evento al objeto historico.
        historico.numcel = numcel
        historico.mensaje = mensaje
        historico.evento = evento
        #Se lee el resultado de abrir el url, si se tiene el mensaje  de encolado para enviar más tarde
        #se asigna el estatus False y se salva devolviendo el mensaje de no enviado 
        if f.read() '3: Queued for later delivery':
            historico.estatus = False
            historico.save()
            return 'Mensaje no enviado a: %s' %numcel
        else:
            #Se envío el mensaje se coloca el estatus en True y se salva en la tabla
            historico.estatus = True
            historico.save()
            #Se devuelve el mensaje de mensaje enviado.
            return 'Mensaje enviado a: %s' %numcel
    except (urllib2.URLError,urllib2.HTTPError),exc:
    #Si hay una excepción de error http se reintenta el envío llamando de forma 
    #concurrente a esta misma función reduciendo el valor de los intentos, 
    #cuando llegue a cero el número de intentos se devuelve un mensaje de no enviado 
        if intentos 0:
            Enviar(evento,numcel,mensaje,intentos-1)
        else:
            #Se salva los valores en la tabla y devuelve el mensaje de sms no enviado
            historico.numcel = numcel
            historico.mensaje = mensaje
            historico.evento = evento
            historico.estatus = False
            historico.save()
            return'No hay conexion al kannel por puerto o IP, el numero que no se procesaron es: %s' %numcel
----------------------------

A continuación se muestra el contenido del archivo pasarela/urls.py el cual contiene el acceso al API como se explico en el artículo anterior y ahora tiene el acceso a la función que permite recibir los datos para enviar (estos datos se pasan por un json):
#Archivo pasarela/urls.py
from django.conf.urls import patterns, include, url

from djcelery import views as celery_views
from pasarela.apps.sms import tasks

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

#Se importa Api de tastypie.api
from tastypie.api import Api
from apps.sms.api import SMSResource,EventoResource

v1_api = Api(api_name='v1')
#Se registra los recursos en la instancia del api.
v1_api.register(SMSResource())
v1_api.register(EventoResource())

urlpatterns = patterns('',
    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    #Acceso al API
    url(r'^api/', include(v1_api.urls)),
    #se define enviar que usa la vista de tareas de celery para ejecutar tasks.RecNums
    url(r'^enviar/', celery_views.task_view(tasks.RecNums)),
    #Consulta a celery si la tarea se ejecuto sin problemas
    url(r'^(?P[\w\d-]+)/done/?$', celery_views.is_task_successful,
        name="celery-is_task_successful"),
    #Consulta de celery para ver el estatus de la tarea
    url(r'^(?P[\w\d-]+)/status/?$', celery_views.task_status,
        name="celery-task_status"),
)
-----------------------


La base de datos se sincroniza como se explico en los artículos anteriores, ahora toca ejecutar en modo pruba django-celery, django como tal y abrir un interprete de comandos para django.

Ejecución de django-celery con dos colas de rabbitMQ y en modo info:
python manage.py celeryd -E -l info -c 2
A continuación captura de pantalla de la ejecución:

Note que se tienen 2 tareas en el celery:
  • pasarela.apps.sms.tasks.Enviar
  • pasarela.apps.sms.tasks.RecNums
Ahora se ejecuta django en el 127.0.0.1 y puerto 8080:
python manage.py runserver 127.0.0.1:8080
A continuación una captura de pantalla de la ejecución del comando:

Y por último se ejecuta el comando para tener un shell interfactivo de django:
python manage.py shell
A continuación la captura de pantalla: 

Ahora se ejecutará en el shell una prueba que simula la recepción por parte de la tarea del json que recibe de una aplicación externa para enviar los sms:
Hay que acotar que los números de celular de la prueba no corresponden a números  reales o de proveedores de teléfonía celular.
Ahora para complementar la idea de consulta API restful por json del artículo anterior la idea es listar los números celulares que se enviaron del evento 6, en este caso se usará el programa curl:
curl http://127.0.0.1:8080/api/v1/sms/?evento=6
El resultado es:
{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_count": 5}, "objects": [{"estatus":true, "evento": "/api/v1/evento/6/", "id": "21", "mensaje": "Esta es una prueba de sms", "numcel": "14225673531", "resource_uri": "/api/v1/sms/21/"}, {"estatus":true, "evento": "/api/v1/evento/6/","id": "22", "mensaje": "Esta es una prueba de sms", "numcel": "142165673531", "resource_uri": "/api/v1/sms/22/"}, {"estatus": true, "evento": "/api/v1/evento/6/","id": "23", "mensaje": "Esta es una prueba de sms", "numcel": "14265673531", "resource_uri": "/api/v1/sms/23/"}, {"estatus": true, "evento": "/api/v1/evento/6/", "id": "24", "mensaje": "Esta es una prueba de sms", "numcel": "14145673531", "resource_uri": "/api/v1/sms/24/"}, {"estatus": true, "evento": "/api/v1/evento/6/","id": "25", "mensaje": "Esta es una prueba de sms", "numcel": "14245673531", "resource_uri": "/api/v1/sms/25/"}]}

Por último se muestra la captura de pantalla de lo que se genera en el djcelery:

En el próximo artículo se mostrará el acceso a las tareas de celery desde el URL definido en urls.py.

Viernes 18 de julio de 2014

Carlos Colmenarez

Carlos Colmenarez
El Blog de Zero » LINUX

4 grandes mitos sobre Linux que la gente necesita dejar de creer

Linux lleva consigo la carga de los estigmas que ha acumulado con los años, y aunque ha hecho todo lo posible por borrar la mala imagen que tienen muchos de las distribuciones, aún la gente sigue creyendo cosas que dejaron de ser ciertas hace rato. Si quieres saber por qué Linux ya no es lo que era, no es lo que era, no es lo que era, sigue leyendo y entérate de por qué ahora es incluso mejor.

65242980_6a359a1a57_oMuchas veces cuando se habla de sistema operativos pareciese que se está discutiendo una religión, en la que el rebaño de cada uno ve con ojos de hereje a todos los demás. Mi dios es el verdadero y único camino. Puede que suene a exageración, pero si alguna vez te has visto envuelto en un debate sobre si es mejor un iPhone que un Android, o una Mac en lugar de una PC, o el Software Libre en lugar del privativo, de seguro notas las similitudes de inmediato.

“Expande tus horizontes y mira un poquito más allá de tu propia nariz.”

Es normal que muchos sintamos cierta pasión por las cosas que nos gustan, y que estemos dispuestos a defenderlas como lo mejor, pero la delgada linea que nos separa del fanatismo y le fe ciega es muy delgada, y a mucha gente le cuesta ver las cosas desde otro punto de vista, o siquiera darle una oportunidad a algo diferente. No se trata de traicionar tus creencias, se trata de expandir tus horizontes y ver un poquito más allá de tu propia nariz. Además, en la variedad está el gusto.

He usado Linux por muchos años, quizás una década, eso es más o menos el 40% de mi vida, y aunque pasé por una etapa muy estúpida en la que recurría a hablar mal de Windows para intentar tristemente promover el Software Libre con mis conocidos, ya he madurado lo suficiente como para entender lo falaz y lamentable que es esa actitud. Y, de hecho, sigo usando Windows felizmente. No necesitas echar tierra a los demás cuando lo que promueve tiene bondades, eso es muy de políticos, y solo deja una mala impresión. Es más fácil exponer tu punto si no estás intentando desesperadamente ganar una pelea.

Linux es difícil de usar

Esto es cierto, sumamente cierto, Linux es difícil de usar, pero solo porque para empezar a usar Linux por primera vez tienes que dejar el miedo al cambio de lado, y dejar el miedo a un lado es muy, muy difícil. De resto, instalar una distribución y comenzar a usarla es pan comido, ya no estamos en 1998. Hay tantas versiones amigables por ahí que cualquier niño, tu mama, o tu abuelo podrían aprender a usarlas en unos minutos. No tienen ni que abrir una terminal nunca en su vida, la tan temida y malentendida terminal.

“En Linux todo es muy parecido a lo que estás acostumbrado, la brecha se ha acortado mucho.”

Esto es un hecho, lo he probado con mucha gente, usuarios que entienden de informática lo que yo de física cuántica, personas mayores que sabemos tienen más dificultad para llevárselas con la tecnología, niños, cualquiera que haya usado un ordenador antes. En Linux todo es muy parecido a lo que están acostumbrados, la brecha se ha acortado mucho, y de hecho más de uno lo siente más fácil y divertido de lo que esperaban. El que más dificultades presenta es aquel usuario malcriado y caprichoso que todos conocemos, ese que hace berrinche porque le cambiaron un botón de sitio, esos que crean un grupo de Facebook para quejarse del nuevo diseño todos los años.

Linux no va a funcionar en mi PC

mitos-sobre-linux-portada

Esto es súper cierto, Linux funciona mal en muchos ordenadores. Pero, ¿saben ustedes cuantos modelos de ordenadores hay en el mundo?. Linux tiene un problema, los fabricantes de hardware, esos que construyen y venden las piezas de las PCs, no ofrecen soporte para Linux la enorme mayoría del tiempo, por lo que Linux depende totalmente de la comunidad para desarrollar controladores para los millones de componentes y las diferentes marcas de todo el planeta tierra. Y a pesar de esa limitación, en la mayoría de las PCs puedes ejecutar una distro Linux. ¿No es eso sorprendente y digno de una ovación?.

Saben que es más sorprendente aún, que cuando sistemas operativos como Windows y OS X dejan a un lado el hardware viejo, eliminando el soporte porque ya no les produce ninguna ganancia a sus respectivas empresas; en Linux la historia es todo lo contrario. Mientras más vieja es una máquina, más probabilidades hay de que funcione bien con una distro Linux, de hecho hay muchas que están orientadas a ordenadores de pocos recursos, PCs viejas que están listas para el basurero, pueden conseguir una segunda oportunidad gracias a Linux.

En cuanto al hardware moderno, el soporte cada vez es mejor, y de hecho fabricantes como NVIDIA y AMD han empezado a mejorar su compatibilidad principalmente por la revolución de Steam y sus juegos. Lo que me lleva al siguiente punto.

En Linux no puedes jugar nada

Hey, esto era 99% cierto hace 2 o 3 años. Jugar en Linux siempre fue una experiencia terrible, y la razón de que muchos entusiastas del SL y de los videojuegos aun usaran Windows para poder jugar. Pero, hace un par de años dios volvió a la tierra en la figura de Gabe Newell, y Steam llegó a Linux. Steam es la plataforma de videojuegos para PC más grande del mundo, cuenta con miles de miles de juegos y millones de usuarios, y unas ofertas que dan gastritis.

Valve planea su propio sistema operativo basado en Linux para dar vida a las Steam Machines, su propio híbrido entre PC y consola de sobremesa para jugones. Una iniciativa que promete revolucionar el mercado, y sí, de la mano de Linux. ¿Quien lo diría?. Aunque el panorama aún luce a años luz de lo que representa la experiencia de juego en Windows, ya Linux cuenta con más de 500 títulos disponibles, muchos son triple A, como The Witcher, la saga de Metro, Left 4 Dead, etc. Y estamos seguros de que solo vendrán más y más.

Cómo es gratis, Linux no tiene soporte

mitos-sobre-linux1

Esto es cierto, yo nunca he pagado por una distribución Linux, y en mi vida he llamado a soporte técnico… ya va, un momento. El Software Libre no es sinónimo de “software gratis”, de hecho hay empresas enormes como Red Hat que utilizan Linux para ofrecer soluciones empresariales, sí, esta gente cobra por su trabajo, son sumamente respetados y ofrecen calidad.

Android es software libre, y adivinen que empresa hace dinero con Android, no es solo Google, sino vean a Samsumg. Canonical, los responsables de Ubuntu, si bien no cobran por Ubuntu, tienen muchos otros servicios basados en el open source. Y así muchas más. Muchos de estos proyectos ofrecen soporte especial para los usuarios a través de portales especiales, wikis, foros, comunidades llenas de gente que busca ayuda y gente que busca ofrecerla.

Linux tiene una comunidad enorme que te ayuda a conseguir la solución a tu problema solo por amor al arte. Es de hecho una de las maneras en las que he terminado conociendo gente genial por muchos años, y haciendo amigos.

vito en: bitelia


Lunes 07 de julio de 2014

I’am Back

De vuelta a mi espacio, no lleva mejor nombre que ese El  Espacio que Necesitaba!!

Domingo 06 de julio de 2014

José Miguel Parrella Romero

José Miguel Parrella Romero
null pointer dereference

Understanding records in Koha

Throughout the years, I’ve found several open source ILS and most of them try to water down the way librarians have catalogued resources for years. Yes, we all agree ISO 2709 is obsolete, but MARC has proven to be very complete, and most of the efforts out there (Dublin Core, etc.) try to reduce the expression level a librarian can have. If your beef is with ISO 2709, there’s MARC-XML if you want something that is easier to debug in terms of encoding, etc.

That said, Koha faces a challenge: it needs to balance the expressiveness of MARC with the rigidness of SQL. It also needs to balance the convenience of SQL with the potential shortcomings of their database of choice (MySQL) with large collections (over a couple thousand records) and particularly with searching and indexing.

Koha’s approach to solve this problem is to incorporate Zebra to the mix. Zebra is a very elegant, but very difficult to understand piece of Danish open source software that is very good at indexing and searching resources that can come from, say, MARC. It runs as a separate process (not part of the Web stack) and it can also be enabled as a Z39.50 server (Koha itself is a Z39.50 consumer, courtesy of Perl)

The purpose of this post is to help readers navigate how records are managed in Koha and avoid frustrations when deploying Koha instances and migrating existing records.

Koha has a very simple workflow for cataloguing new resources, either from Z39.50, from a MARC (ISO 2709 or XML) file or from scratch. It has templates for cataloguing, it has the Z39.50 and MARC capabilities, and it has authorities. The use case of starting a library from scratch in Koha is actually a very solid one.

But all of the libraries I’ve worked with in the last 7 years already have a collection. This collection might be ISIS, Documanager, another SQL database or even a spreadsheet. Few of them have MARC files, and even if they had (i.e., vendors provide them), they still want ETLs to be applied (normalization, Z39.50 validations, etc.) that require processing.

So, how do we incorporate records massively into Koha? There are two methods, MARC import or fiddling with SQL directly, but only one answer: MARC import.

See, MARC can potentially have hundreds of fields and subfields, and we don’t necessarily know beforehand which ones are catalogued by the librarians, by other libraries’ librarians or even by the publisher. Trying to water it down by removing the fields we don’t “want” is simply denying a full fidelity experience for patrons.

But, in the other hand, MySQL is not designed to accommodate a random, variable number of columns. So Koha takes the most used attributes (like title or author) and “burns” them into SQL. For multivalued attributes, like subjects or items, it uses additional tables. And then it takes the MARC-XML and shoves it on a entire field.

Whoa. So what happens if a conservatorium is making heavy use of 383b (Opus number) and then want to search massively for this field/subfield combination? Well, you can’t just tell Koha to wait until MySQL loads all the XMLs in memory, blows them up and traverse them – it’s just not gonna happen within timeout.

At this point you must have figured out that the obvious solution is to drop the SQL database and go with a document-oriented database. If someone just wants to catalog 14 field/subfields and eventually a super detailed librarian comes in and starts doing 150, you would be fine.

Because right now, without that, it’s Zebra that kicks in. It behaves more like an object storage and it’s very good at searching and indexing (and it serves as Z39.50 server, which is nice) but it’s a process running separately and management can sometimes be harsh.

Earlier we discussed the use case where Koha excels: creating records from scratch. Does this mean that Koha won’t work for an existing collection? No. It just means the workflows are a tad more complicated.

I write my own Perl code to migrate records (some scripts available here, on the move to GitHub), and the output is always MARC. In the past I’ve done ISO 2709, yes, but I only do MARC-XML now. Although it can potentially use up more disk space, and it could be a bit more slow to load, it has a quick benefit for us non-English speakers: it allows to solve encoding issues faster (with the binary, I had to do hexadecimal sed’s and other weird things and it messed up with headers, etc.)

Sometimes I do one record per file (depending on the I/O reality I have to face) but you can do several at a time: a “collection” in just one file, that tends to use up more RAM but also makes it more difficult to pinpoint and solve problems with specific records. I use the bulkmarcimport tool. I make sure the holdings (field 942 in Koha unless you change it) are there before loading, otherwise I really mess up the DB. And my trial/error process usually involves using mysql’s dump and restore facilities and removing the content of the /var/lib/koha/zebradb directory, effectively starting from scratch.

Koha requires indexing, and it can be very frustrating to learn that after you import all your records, you still can’t find anything on the OPAC. Most distro packages for Koha have a helper script called koha-rebuild-zebra which helps you in the process. Actually, in my experience deploying large Koha installations, most of the management and operational issues have something to do with indexing. APT packages for Koha will install a cron task to rebuild Zebra, pointing at the extreme importance (dependency) on this process.

Since Koha now works with instance names (a combination of Zebra installations, MySQL databases and template files) you can rebuild using something like:

koha-rebuild-zebra -b -v -f mybiblio

Feel free to review how that script works and what other (Perl) scripts it calls. It’s fun and useful to understand how old pieces of Koha fit a generally new paradigm. That said, it’s time to embrace cloud patterns and practices for open source ILS – imagine using a bus topic for selective information dissemination or circulation, and an abstract document-oriented cloud storage for the catalogue, with extensive object caching for searches. And to do it all without VMs, which are usually a management nightmare for understaffed libraries.


Jueves 03 de julio de 2014

Carlos Colmenarez

Carlos Colmenarez
El Blog de Zero » LINUX

Diferencias entre Software Libre y Open Source

No deben ser pocas las veces en has utilizado estos términos sin conocer bien que son. A pesar de que están estrechamente relacionados, los movimientos de Software Libre y Open Source tienen sutiles diferencias y es importante conocerlas.

Diferencias entre Software Libre y Open Source

A pesar de que son términos relacionados y solemos usarlos indistintamente, Software Libre y Open Source no son exactamente lo mismo, al menos no según la FSF, de las iniciales de Free Software Foundation, organización creada por Richard Stallman en el año 1985 con el propósito de difundir este movimiento.

A pesar de que están intrínsecamente relacionados, hay algunas diferencias puntuales. Veamos cuales son.

¿Qué es Software Libre?

El Software Libre o Free Software en inglés, es un software que respeta las cuatro libertades que la FSF establece:

  • La libertad de usar el programa, con cualquier propósito.
  • La libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a tus necesidades.
  • La libertad de distribuir copias del programa, con lo cual puedes ayudar a tu prójimo.
  • La libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que toda la comunidad se beneficie.

En otras palabras, es aquel que respeta la libertad de todos los usuarios que adquirieron el producto para ser usado, copiado, estudiado, modificado, y redistribuido libremente de varias formas. Es muy importante aclarar que el Software Libre establece muchas libertades pero no es necesariamente gratuito. Con esto quiero decir que conservando su carácter libre (respetando las libertades), puede ser distribuido de manera comercial. Esto garantizando sus derechos de modificación y redistribución.
Software Libre y Open Source
¿Qué es Open Source?

Open Source o código abierto, es la expresión con la que se conoce al software distribuido y desarrollado libremente. Es un movimiento más pragmático, se enfoca más en los beneficios prácticos como acceso al código fuente que en aspectos éticos o de libertad que son tan relevantes en el Software Libre.

Su premisa es que al compartir el código, el programa resultante tiende a ser de calidad superior al software propietario, es una visión técnica. Obviamente para lograr calidad técnica lo ideal es compartir el código, pero no estás obligado a hacerlo.

Diferencias

Como podemos ver, el movimiento del Software Libre hace hincapié en cuestiones éticas y morales relacionadas con el software, viendo el aspecto técnico como secundario, a diferencia
del movimiento Open Source que lo establece como prioritario, siendo esta su diferencia más grande.

Otra de sus diferencias, quizá la más importante para lo que al ámbito comercial concierne, es que con una aplicación desarrollada bajo los estándares del Software Libre puedes obtener remuneración por conceptos de desarrollo, soporte y puesta a punto siempre y cuando entregues los fuentes, a diferencia del movimiento Open Source que no te obliga a hacerlo. Todos los productos desarrollados en Software Libre así como sus derivados siempre deben ser libres, a diferencia de Open Source.

Como podemos ver, básicamente el movimiento de Software Libre tiene diferencias de índole filosóficas con el Open Source, sin embargo, ambos han permitido el desarrollo de software de gran calidad y con muchísimas mas libertades de las que el software privativo otorgaría jamás.

Fuente: bitelia