lunes, 7 de marzo de 2016

Extravío/Robo de un Cheque recibido en Paraguay

Buenas buenas, comparto con Uds. una experiencia que tuve hace un par de semanas, la cual no se la deseo a nadie.
Por un descuido personal, extravié un cheque con el que me pagaron un servicio. El cheque estaba a mi nombre, ya endosado para evitar su cobro en efectivo en caja, en incluso ya estaba con mis datos para un depósito financiero.
Ante tal situación, consulté con un compañero de trabajo, al que le habían robado una chequera, y me recomendó que averigüe si era necesario hacer juicio para deslindar  responsabilidades, ya que existía la posibilidad de que el cheque se utilice para estafar a alguien, al estar cruzado sólo se puede depositar, pero eso no impediría que malvivientes quieran hacer pasar gato por liebre, e intenten negociar con el cheque aprovechándose de gente poco informada o desatenta. Tal trámite, no es necesario cuando a uno le pagan, si se roba o extravían cheques personales, si la historia es totalmente diferente.
Consultando con una persona cercana, que trabaja en un banco grande de plaza, me hizo unas averiguaciones y me dijo que debía, en primer lugar denunciar el cheque con el emisor, para que bloqueen el pago del mismo por 24 horas, acto seguido ir a la comisaría de la jurisdicción y denunciar el cheque como extraviado/robado (en algunos casos, da lo mismo, pero seguí leyendo hasta el final para averiguar más), y finalmente con la denuncia solicitar una reimpresión.
Hice las  recomendaciones más frescas que recibí, encontrándome con las primeras sorpresas.
  • La cantidad de horas que se suspende el pago de un cheque sin denuncia, depende de cada Banco. Algunos lo hacen 24 horas, otros sólo 1 hora.
  • Las comisarías ya no aceptan denuncias de cheques robados o extraviados a la fecha de mi denuncia (Febrero 2016).
De ahí, la comisaría, me dijeron que debía hacer la denuncia en la fiscalía de Delitos Económicos, en EEUU y Herrera. Al escuchar esa dirección, me vino rápidamente a la cabeza, el local de Investigaciones; que sabía quedaba en las inmediaciones de esa dirección, pero el oficial me respondió con tanta seguridad a mi consulta de si era cerca del Dpto. de Investigaciones; que no se me pasó por la cabeza hacer ninguna otra averiguación.
Al llegar al lugar, previo estacionamiento en el centro asunceno digno de resaltar; recorrí las 4 cuadras cercanas consultando; y todas las consultas me dirigieron al Dpto. de Investigaciones. Incluso el guardia de turno, me indicó que sí, estaba en el lugar correcto y que para denuncias, debía acercarme al mostrador.
Al llegar y notificar mis intenciones, de nuevo me dijeron en ese Dpto. que las denuncias debían hacerse en la Fiscalía de Delitos Económicos, con la mejoría que esta vez me dieron bien la dirección, queda en Chile esquina E.V. Haedo.
Luego del primer episodio, ya hice mis averiguaciones  con conocidos, para confirmar que se trataba del lugar que, presumiblemente resolvía mi necesidad, y efectivamente era ahí la oficina del Ministerio Público que me indicaron.
Al llegar al segundo lugar, segundo estacionamiento en el centro asunceno en menos de 20 minutos (valga la aclaración que eran los días de carnaval, con una temperatura digna de Febrero en Paraguay), al comunicar a la entrada cuál era mi intención, denunciar un cheque extraviado, me dice nuevamente el funcionario de recepción: "Esto señor se realiza en la Policía Nacional, Departamento contra Delitos Financieros y Económicos".  Ubicado en la calle Eduardo Víctor Haedo Nro. 725 c/ Juan E. O'leary, de ahí ya tomé la valentía de caminar, pues probablemente me hubiera llevado más tiempo ir hasta mi vehículo, y encontrar otro estacionamiento en el centro, a que caminar unas relativamente pocas cuadras.
Finalmente pude realizar la denuncia, y obtener mi copia para ir al Banco a realizar el pedido de anulación correspondiente. Me atendieron muy bien, en el Dpto.  de la Policía, con diligencia y cordialidad.
El Banco al que fui a hacer la denuncia, me solicitó la copia de la denuncia de la Policía Nacional, y los datos del cheque.
Dejo aquí el resumen para quien pueda aprovechar esto y ahorrarse un par de horas de su vida con la información:
  1. Averiguá con el emisor del cheque, el procedimiento de anulación temporal. 1 hora, es prácticamente inútil, siendo que ese es el tiempo que uno tarda estacionando; si no es de 12 o 24 horas la suspensión, no vale la pena hacer ese trámite.
  2. Tené a mano los datos del cheque:
    1. Número de Cheque
    2. Número de Cuenta Corriente
    3. Nombre exacto del Titular de la Cuenta
    4. Monto del cheque
  3. Con los datos de 2) andá a la Policía Nacional, Departamento contra Delitos Financieros y Económicos, Eduardo Víctor Haedo Nro. 725 c/ Juan E. O'leary.
  4. Con la denuncia, acudí al Banco emisor del cheque y realiza el procedimiento de denuncia de extravío/robo del cheque (En el banco que me tocó, daba igual robo o extravío). Te dejarán la copia original de la Policía Nacional, así que realizá la tuya previamente para tenerlo por cualquier eventualidad.
  5. Realizá los trámites correspondientes con el titular de la cuenta, para solicitar una reimpresión del cheque. Todo esto tiene gastos financieros, evidentemente, por lo que esperá recibir un poco menos de lo que realmente era el valor original de tu cheque extraviado/robado.
Moraleja, NUNCA saques a pasear a un cheque. :(

lunes, 4 de agosto de 2014

Ley 5189/14 - La Ley que puede cambiar el futuro del Paraguay

“QUE ESTABLECE LA OBLIGATORIEDAD DE LA PROVISIÓN DE INFORMACIONES EN EL USO DE LOS RECURSOS PÚBLICOS SOBRE REMUNERACIONES Y OTRAS RETRIBUCIONES ASIGNADAS AL SERVIDOR PÚBLICO DE LA REPÚBLICA DEL PARAGUAY”.

Marcelo Elizeche @melizeche hizo un trabajo muy útil e interesante de pasar a CSV los archivos que las bi-nacionales (y  otras instituciones del gobierno) colocan en pdf, flash, jpg, ere erea, todo lo que lleve más tiempo procesar y dificulte el acceso.
Yo colaboré un poco, empezando una BD utilizando la base de datos h2, motivo principal por el que quería compartir con Uds. esto:

Estos son los CSV originales

http://melizeche.com/eby/permanentesycontratados.csv
http://melizeche.com/itaipu/itaipu.csv

Aquí están ya en formato backup de H2

https://github.com/alefq/ley_5189_2014

Lo interesantísimo del H2, es que ahora viene con una aplicación web para DBA, que así como está ya le hace un 6-0 al pgadmin (cosa que no es muy difícil de lograr :D ).
En fin, H2 está hecho en Java y puede ser interesante de seguir para quiénes necesiten un GUI WEB básico para operaciones SQL.
http://www.h2database.com/html/main.html

Otra cosa interesante de esta BD, es que tienen "Compatibility Modes" para los motores más famosos, lo cual facilita el uso del SQL para gente que viene de otras marcas.
Colaboraciones, son bienvenidas.

Ale

viernes, 14 de junio de 2013

To cloud or not to cloud

Hace unos meses, un cliente nos pidió que realicemos un estudio de factibilidad  para pasar algunos de sus servicios a hosting en la nube (cloud services: SaaS. PaaS, IaaS), de ese análisis y una sugerencia de @danicricco (Gracias Dani), surge este post.
Es notorio el auge que tienen estos servicios en el primer mundo, y uno de los principales motivos argumentados es el ahorro de costos de mantenimiento, tanto de hardware, como operativos y de servicio técnico, lo cual es relativo, sobre todo cuando lo trasladamos a la realidad de Paraguay, y países con economías, calidad/precio de internet y avances en infraestructura del país en general similares.
Al calcular el costo para tus cloud services, debes hacerlo a 4 o 5 años, la cual es la vida promedio de un servidor físico con garantía del fabricante o proveedor. Además debes tener en cuenta también que hoy en día con la virtualización, la "obsolescencia" o fin de la garantía de tu equipo hardware no significa que tus aplicaciones se vayan con el servidor; a los 5 años puedes adquirir un nuevo equipo, con una nueva garantía y mover tus máquinas virtuales al nuevo host.
Como leí en una discusión de Slashdot al respecto, para el tercer mundo y un servidor de correo hosteado por ejemplo en Google Apps, esto se traduciría en:
"Si estás en la nube y te quedas sin internet no perderás correo y el mundo podrá enviarte comunicaciones, pero no podrás acceder a ellas mientras estés sin conexión. Si tienes un servidor propio, tendrás acceso a los correos que ya llegaron a tu servidor, podrás escribir nuevos; pero el mundo no los recibirá ni podrá enviarte nuevos hasta que vuelvas a estar en línea".
Es obvio que para un sistema de gestión de una empresa, esto es aún más crítico, imagina que el único ingreso de dinero para el negocio, sea la venta por caja y esto lo tengan hosteado en cloud services y a una hora pico se queden sin internet, el panic button estará conectado a un piso falso que te hundirá cuando el dueño del negocio lo presione después de que tu recomendación para hosting in the cloud le haga perder un montón de dinero, ya que probablemente  le importará poco  su "ahorro" en cosas que él poco o nada entiende, si eso le cuesta clientes insatisfechos y le resta ingresos.
O si concretar un negocio, a nivel local donde no necesitás más que conexiones dentro del backbone nacional, dependa de un informe que te envíen por correo. Si tu correo está en la nube, sin salida a internet, pierdes el negocio o tomarías una mala decisión que te haría perder un vagón de dinero.
O el caso en el que el dueño de un cine decida que ya no adquirirá copias de películas para exhibirlas en su sala, sino que usará Netflix y hará streaming HD o 4K UHD (videos de 4K). Sin internet o con un internet de mala calidad, se queda sin negocio al mes de malos episodios con su clientela.
Si introducimos el factor de "calidad asegurada" (Quality Assured/QA) de los proveedores de Internet en Paraguay, la respuesta al título de este post queda aún más obvia.
Copaco uno de los principales proveedores de internet del país, con la tecnología de Fibra Óptica (F.O.) en uno de los mejores paquetes comercial y popularmente disponibles para la mayoría, garantiza apenas un 17% del ancho de banda real.  !DIECISIETE PORCIENTO! Leíste bien, aquí la info del sitio:
MIR: Máximo ancho de banda disponible [Esto sería lo que te venden]
Ancho de banda comprometido CIR:17% del MIR [Esto es lo que te pueden asegurar]


Es decir que 1 Mbps de su salida internacional, se comparte aprox. entre 6 clientes. Eso significa que si todos los clientes de copaco con quienes compartes tu ancho de banda, están usando todo lo que pueden disponer para descargar, obtendrás aproximadamente ese 17% de 1Mbps de rendimiento.
Esto no es exclusividad de Copaco, es parte del negocio, si averiguás cuanto cuesta 1Mbps de salida a algún backbone internacional, te puedo asegurar que costará mucho más que los 20 a 30 USD que sale en promedio en Paraguay. De hecho, tendrías que comprar miles de MBps. porque esos proveedores no son minoristas, así que estamos estancados con lo que Copaco, Tigo, Personal y los demás retail ISPs pueden ofrecernos.
Tigo Cable Hogar, es como su nombre lo dice "para el hogar", a pesar de que los vendedores te dicen que es "internet por fibra y de mejor calidad que el ADSL", la realidad es que es más por cable que por fibra y funciona peor que el ADSL. El estándar que utilizan son de tipo DOCSIS http://en.wikipedia.org/wiki/DOCSIS (algunos modelos de los cable modems Motorola que vi, usan este protocolo, si bien hay versiones propietaras también que hacen transporte de datos a altas velocidades por el cable coaxial); sus velocidades son mejores que wimax pero inferiores a fibra pura. El DOCSIS es de por sí, un híbrido, parte en fibra y la mayor parte por cable.
En particular, tuve malas experiencias con el rendimiento de Tigo Internet Hogar, he aquí algunos resultados de http://speedtest.net alternando servidores para las pruebas: http://goo.gl/l9aam
Para finalizar, les comparto una planilla, con los tiempos reales que tendrían si quieren garantizar algún servicio (comprometer calidad con contratos), en base a lo que Copaco o un proveedor similar que les dé 17% de ancho de banda asegurado, les permita.
Para que tengas una idea:

Con una calidad asegurada de 17%, si tienes contratado 20 MBbps, para descargar un video de 1080p (Full HD), que aproximadamente tendría 2GB, necesitás 1.40 horas, es decir 1h 24 min.



Los canales de Tigo HD a la fecha (2013/06) son de 720p.


Anális de tiempos de descarga por ancho de banda: http://goo.gl/pVQ7n  


Necesitarías 4Mbps en el caso de que algún proveedor pueda ofrecerte una garantía de ancho de banda cercano al 100% (100% es en la teoría, en la realidad el rendimiento óptimo que obtendrás será cercano a eso).  2GB es una "regla de pulgar", es aproximadamente el tamaño en streaming de 1 hora. La dimensión real depende del algoritmo de codificación utilizado para la compresión.

Para poder ver tranquilo un video a 1080p (es decir poder descargar 2GB en 1 hora o menos), necesitas una conexión de 20Mbps con una garantía de calidad de al menos 25%.



Ningún proveedor de internet podrá mantener sus precios y su calidad percibida a la actualidad, si todos los usuarios están descargando a todo lo que dé su ancho de banda todo el tiempo.
En 17 años de internet en el país, con más o menos 12 años de conexiones "banda ancha", hasta hoy no he visto que se pueda mantener la descarga a full ancho de banda, 24 x 7.
Si bien los análisis fueron orientados a video para este artículo, en el archivo encontrarás también lo que tenga que ver con datos en términos de Bytes simplemente.
Un sistema de gestión tradicional Cliente/Servidor, dependiendo de cómo esté construido puede generar mucho tráfico de y hacia el servidor. Una VPN de 1Mbps. suele ser suficiente para unas pocas terminales clientes, pero ¿qué pasaría si las lleváramos a un cloud server? Con un servicio que nos garantiza 17%, necesitaríamos contratar 6Mbps. en lugar de 1Mbps. para que nuestro sistema funcione "igual de bien" .  
Utilizar cloud services, debe ser una decisión tomada por expertos, que conozcan al detalle el tráfico de red generado por el funcionamiento de tu empresa y que puedan medir efectivamente la calidad real de tus proveedores de internet, de lo contrario la medicina puede ser peor que la enfermedad.

miércoles, 9 de mayo de 2012

Como tener control de versiones a cambios en el Jboss en GNU/Linux



Como tener control de versiones a cambios en el Jboss en GNU/Linux

Mediante el GIT, uno puede tener repositorios de versiones de archivos en forma local, sin necesidad de tener un servidor. Esta funcionalidad es una utilidad extraordinaria para los desarrolladores.
En el caso del proyecto en el que estoy trabajando, estoy investigando sobre funcionalidades de auditoría para el Jboss, lo que implica varios cambios y pruebas que hacer, a las configuraciones.
En lugar de la tradicional copia de seguridad del directorio completo, decidí usar el GIT, con eso gano muchas nuevas funcionalidades, propias de la mayoría de los sistemas de manejo de versiones, como el CVS, SVN, GIT, etc.
Un archivo clave para iniciar el versionamiento, es el .gitignore
Comparto un archivo que utilizamos para proyectos JEE, y que lo modifiqué para que sirva también para versionado del JBOSS


# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.lo
*.Plo
*.Po
*.la
*.pc
*Makefile

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sqlite

# OS generated files #
######################
.DS_Store*
ehthumbs.db
Icon?
Thumbs.db

# Cuestiones de projectos Java, Eclipse y Maven
######################
target/
.externalToolBuilders
.metadata
.factorypath
Servers/
RemoteSystemsTempFiles/
build/
.project
.classpath
.settings
.externalToolBuilders
#
# recursos no versionados del JBOSS
#
server/default/data
#El directorio del proyecto principal en el que se esta trabajando
server/default/deploy/mbohape.war
server/default/log
server/default/tmp
server/default/work
Ese archivo tienes que colocarlo en el directorio principal de tu jboss, en nuestro caso es:

guest-9207Ug@kate /tmp/jboss-6.0 $ ls -l .gitignore
-rw-rw-r-- guest-9207Ug guest-9207Ug 877 2012-05-09 10:47 .gitignore

En el siguiente video, puedes ver los pasos para inicializar el repositorio, realizar el primer commit, hacer un cambio y su respectivo commit y como ver el historial de cambios realizados.



jueves, 5 de abril de 2012

Contar líneas de código de un proyecto (SLOC) JEE

 Una forma de medir el tamaño o la complejidad de un proyecto es por la cantidad de líneas de código. (SLOC - Wikipedia)
Existen muchos debates sobre la utilidad real de esta medida, por ej: Cuánta cantidad de esas líneas fueron autogeneradas por wizzards, o cuánto se refactoreó (¿Qué pasa con la cantidad de líneas de código escritas pero reemplazadas?), o cuántas se trajo de otro proyecto, en el caso de proyectos de Software Libre, etc. Como verán, existen varios factores que considerar, por lo que no voy a entrar en demasiados detalles al respecto.
Como tantas cosas en la informática, es una herramienta más, cada proyecto le encontrará su utilidad, según su ambiente.
Comparto un script muy sencillo, que hace uso de herramientas clásicas de un shell Unix, lo desarrollé en Ubuntu 11.04, pero debería funcionar sin muchos cambios en cualquier ambiente tipo Unix.
Como me dedico casi exclusivamente a proyectos de tipo JEE, está orientado a contar los principales tipos de archivos utilizados en dicho desarrollo.
Este script cuenta el total de líneas de código por tipo de archivo, muestra los 10 más extensos y un total general por cada tipo.

-- inicio de  lineas-de-codigo.sh --
#!/bin/bash
#
# Cuenta lineas de codigo de un proyecto JEE
#
# consultas o sugerencias: alefeltes [ en ] gmail [punto] com
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#

#Mostrar como maximo este numero de lineas
MAX_RANKING_TO_SHOW=10
#el primer parametro recibido ó el directorio de los codigos fuentes harcoded
DIR_SOURCE_CODE=${1:-"/home/usuario/svn"}
echo "Directorio: $DIR_SOURCE_CODE"
echo "Mostrando la cantidad de lineas de codigo por archivo y los  \
    $MAX_RANKING_TO_SHOW mas extensos"
echo  "Contamos la cantidad de lineas JAVA"
find $DIR_SOURCE_CODE -name "*.java" | xargs wc -l | sort -n | \
    tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_JAVA"
echo ""
echo  "Contamos la cantidad de lineas XHTML"
find $DIR_SOURCE_CODE -name "*.xhtml" | grep -v .metadata | xargs wc -l | \
    sort -n | tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_XHTML"
echo ""
echo  "Contamos la cantidad de lineas CSS, excluimos los javascript de otros \
    proyectos como el birt, y cia. y también los del Eclipse"
find $DIR_SOURCE_CODE -name "*.css" | grep -v birt | grep -v scriptacu | \
    grep -v bigdecimal | grep -v proto | grep -v .metadata | grep -v platform | \
    xargs wc -l | sort -n | tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_CSS"
echo ""
echo  "Contamos la cantidad de lineas JAVASCRIPT, excluimos los javascript de \
    otros proyectos como el birt, y cia. y también los del Eclipse"
find $DIR_SOURCE_CODE -name "*.js" | grep -v birt | grep -v scriptacu |
    grep -v bigdecimal | grep -v proto | grep -v .metadata | xargs wc -l |
    sort -n | tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_JS"
echo ""

 -- fin de  lineas-de-codigo.sh --

Un ejemplo de la ejecución
afeltes@kate ~ $ ./lineas-de-codigo.sh /opt/desarrollo/sources/mbohape/ 
Directorio: /opt/desarrollo/sources/mbohape/
Mostrando la cantidad de lineas de codigo por archivo y los   10 mas extensos
Contamos la cantidad de lineas JAVA
   694 /opt/desarrollo/sources/mbohape/generador-entities/src/org/ticpy/intercambio/Defunciones.java
  1077 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/util/BeanUtil.java
  1095 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/util/GenericUtil.java
  1139 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/ws/Nacimientos.java
  1308 /opt/desarrollo/sources/mbohape/RemoteWSTestClient/src/org/ticpy/ws/Nacimientos.java
  1364 /opt/desarrollo/sources/mbohape/RemoteWSTestClient/src/org/ticpy/ws/Personas.java
  1371 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/ws/Personas.java
  1848 /opt/desarrollo/sources/mbohape/RemoteWSTestClient/src/org/ticpy/ws/Defunciones.java
  1854 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/ws/Defunciones.java
 19590 total
FIN TOTAL_JAVA

Contamos la cantidad de lineas XHTML
  20 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/WEB-INF/templates/default.xhtml
  46 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/index.xhtml
  60 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/persona.xhtml
 126 total
FIN TOTAL_XHTML

Contamos la cantidad de lineas CSS, excluimos los javascript de otros  proyectos como el birt, y cia. y...
40 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/resources/css/screen.css
FIN TOTAL_CSS

Contamos la cantidad de lineas JAVASCRIPT, excluimos los javascript de  otros proyectos como el birt, y cia. y...
0
FIN TOTAL_JS

domingo, 25 de marzo de 2012

Historial de historiales de líneas de comando en el Bash

En Unix (Linux,*BSD, etc), sobre todo si eres un administrador de sistemas, y estas constantemente ejecutando líneas de comando en una terminal, ya sea localmente o con una conexión ssh, recordar todas las líneas de comando que ejecutaste alguna vez en tu vida, puede ahorrarte mucho tiempo y muchas leídas del man.
El BASH es uno de los shell más comunes hoy en día, y tiene su funcionalidad propia para recordar una cantidad de líneas ejecutadas, o una cantidad de KB de tamaño, para el archivo de historial.
Este por lo general se encuentra en

$HOME/.bash_history

Lo primero que había hecho, un tiempo atrás, fue aumentar la capacidad del historial, pero esto a la larga hacía que mi sesión de shell tardara más en ejecutarse, ya que el bash carga el historial en memoria, con lo cual es rápidamente accesible mediante el shorcut para el buscador: CLTR-R.
Esto me permitía buscar entre los comando recientemente ejecutados, todos aquellos que estaban en el history actual.
El problema se presentaba cuando este archivo llegaba a su máxima capacidad y se empezaba a peder el historial de los comandos más antiguos.
Fue entonces cuando decidí crear esta pareja de scripts, que guardan un historial de historiales.
Te recomiendo colocarlos en una ruta bajo tu path de ejecución. Yo lo tengo en  /usr/local/bin

-- inicio de  /usr/local/bin/backup-historial.sh --

#!/bin/bash
#
# Copia el historial y luego crea un archivo sin duplicados
# desde donde luego se puede consultar con el comando Buscar.sh
#
# Se recomienda colocar la ejecucion de este script al final del\
# $HOME/.bashrc y al final  del $HOME/.bash_logout de esa forma,
# se persisten la mayor cantidad de comandos
#
# Este es un shell script gratuito distribuido bajo la licencia
# GNU GPL version 3.0
# Copyright (C) 2012 Ale Feltes
#
# alefeltes \en\ gmail \punto\ com
#

#la fecha en formato AAAA-mm-dd
STAMP="`date +%F`"

#el directorio bajo el $HOME donde se guardan los historicos
DIR="$HOME/sysadmin/historicos-bash"
if [ ! -d $DIR ]; then
    mkdir -pv $DIR
fi

#copiamos el historial actual, con la fecha actual
cp -vf $HOME/.bash_history $DIR/history-${STAMP}
cd $DIR

#concatenamos todos los historiales, ordenamos y eliminamos
#duplicados
cat history-* | sort | uniq   > /tmp/history-global-$UID

#finalmente movemos al archivo unico con el $UID
mv -vf /tmp/history-global-$UID .

-- fin de  /usr/local/bin/backup-historial.sh --

Para el script que consulta los historiales, utilizo la primera letra en mayúscula, para facilitarme el autocompletado con el TAB

-- inicio de  /usr/local/bin/Buscar.sh --

#!/bin/bash
#
# Busca en el history del bash una cadena
#
# Este es un shell script gratuito distribuido bajo la licencia
# GNU GPL version 3.0
# Copyright (C) 2012 Ale Feltes
#
# alefeltes \en\ gmail \punto\ com
#

#buscamos en el historial actual y en el historial general guardado
#con el script /usr/local/bin/backup-historial.sh
cat $HOME/.bash_history $HOME/sysadmin/historicos-bash/history-global-$UID \
    | grep $1 | sort | uniq
-- fin de  /usr/local/bin/Buscar.sh --

Como se puede leer en el primer script, es recomendado que lo coloques en los archivos  

$HOME/.bashrc : para que se ejecute cada vez que abras un shell, y en el $HOME/.bash_logout : para que se ejecute y haga la copia del historial, cada cierre de sesión de un shell.


sábado, 3 de marzo de 2012

Velocidad real de un Pen Drive USB 3.0

Hace poco perdí la paciencia con un pen drive que ya tiene sus años. Los tamaños de las cosas que copiamos, han crecido. Es normal copiar varios cientos de megas, a diario, o si tenés que mover un disco duro de una máquina virtual, estamos hablando incluso de gigas que copiar o mover.
La velocidad de la que hablan los fabricantes, en términos de ancho de banda, tiene algo que ver con la velocidad real, la que a la mayoría nos interesa. Como cualquier velocidad de transferencia, hay varios factores que considerar, algunos relacionados con la calidad de los materiales del dispositivo y de la calidad del equipo que lo va a leer.
Si los equipos son de mala calidad, pueden tener el sello de USB 3.0, pero si su tasa de error es alta o el tiempo de respuesta de las operaciones de E/S es muy lento, la velocidad que publicita el fabricante sirve sólo "para la foto". Me viene a la memoria, esos teléfonos inalámbricos de principios de los 90, que decían tener un alcance de 100m., pero en ningún lado decía que eso era sólo en caso de que estés usando el teléfono en una sabana.  
En el ancho de banda también hay algo "escondido", ningún fabricante aclara que dentro de ese ancho de banda, hay un porcentaje que se destina a la comprobación de lo que se transfiere. No te están mintiendo, pero tampoco te están diciendo toda la verdad.
¿Alguna vez calculaste en una planilla electrónica la velocidad teórica de tu conexión de internet, y te preguntaste por qué nunca obtienes lo que dice la teoría?
Uno de los motivos, es por la comprobación/correción de errores, una funcionalidad básica de cualquier protocolo de transferencia de datos.
Si sólo estás descargando algo, y tienes 1Mbit. la teoría dice que deberías obtener aprox. 122KBytes/s, pero la realidad dice otra cosa. Ese porcentaje "perdido", se utiliza en realidad para la comprobación/detección/corrección de errores. Por eso es que aunque sólo estés descargando algo, siempre hay un tráfico de subida, de todos los acknowledgement de recepción que tienen que enviarse, durante la transferencia  (aún en el siguiente escenario teórico, en el que no tengas errores de transferencia o estos sean insignificantes).
El USB 2.0 estándar, puede tardar hasta 5 minutos para llenar un pen drive de 1GB.
Eso es aprox. 30Mbit/s, si le sumamos un porcentaje aprox. de 5% utilizado para la comprobación de errores.
Eso es más que el USB Full Speed (12Mbit/s) y bastante menos que el USB 2.0 Hi-Speed (480 Mbit/s), cuyo ancho de banda se supone de 60MB/s. Más información en : http://en.wikipedia.org/wiki/List_of_device_bit_rates#Peripheral 
La última notebook que compré, ya viene equipada con un puerto USB 3.0, que lo puedo experimentar a diario porque tengo un disco duro externo USB 3.0. En la búsqueda por un pen drive USB 3.0, que me dé una relación interesante de costo/beneficio, investigué las opciones.
De las marcas que encontré, con buenos reviews las opciones eran: Patriot, LaCie, Corsair, Kingston y Transcend.
La característica principal, que me hizo decidir por uno u otro, fue el tamaño. Al ver las fotos en los reviews, los únicos que tenían las dimensiones para no obstaculizar los puertos aledaños que quedaron de la lista fueron dos: Patriot y Trascend. Los demás eran o muy anchos, o muy gordos para que pueda ser ocupado el puerto usb, en la posición que fuera este ubicado horizontales o verticales, lo cuál me hubiera obligado a tener que usar con un cable de extensión.
Finalmente me decidí por un Transcend TS16GJF760 JetFlash 760 16GB USB 3.0 Flash Drive.
La otra opción era un Patriot Supersonic 32 GB USB 3.0 High Performance Shock Resistant Flash Drive PEF32GSUSB , de aluminio, bastante más costoso, pero no tenían en stock para la venta en Amazon, y el tiempo de espera era de 1 a 4 semanas.
Aquí están los resultados de los benchmarks en el puerto USB 3.0:


Aprox. 54MBytes/s para lectura; y para escritura 22.7MBytes/s como máximo y  un promedio de 7.4 MBytes/s.
Este es el gráfico de rendimiento del mismo pen drive, en un puerto USB 2.0

Pero lo más interesante, fue una prueba de la vida real.
Lo que te muestra el programa que copia, es una cosa, pero el tiempo en que tarda realmente en hacer toda la copia al dispositivo, es otra.
Para eso, en linux se puede hacer la copia, y luego desmontar el dispositivo, y recién cuándo el comando de "umount" termina, es que la copia fue terminada.
Para eso hice este pequeño script:

--inicio script--

cp -v disk1.vdi /media/pen-16G
umount /media/pen-16G

--fin script--

Tamaño del archivo: 2185252864 bytes (2084 MB)

user@host ~/prueba $ sudo time sh -x test
+ cp -v disk1.vdi /media/pen-16G
`disk1.vdi' -> `/media/pen-16G/disk1.vdi'
+ umount /media/pen-16G
0.01user 6.85system 2:11.39elapsed 5%CPU (0avgtext+0avgdata 4272maxresident)k
1234608inputs+4272288outputs (0major+923minor)pagefaults 0swaps

Velocidad real. 2min. 11 seg. para copiar 1 Archivo de 2G:  15.86 MB/s