martes, 25 de diciembre de 2012

Instalar wget en MAC

Wget es una herramienta que uso muy seguido en Linux (Es un gestor de descargas desde linea de comandos). Por lo que en MAC se hecha de menos, lo bueno es que es posible instalarla en el SO de la manzana. Acá muestro los pasos para instalarla:
Si las carpetas de destino no existen se deben crear (que es lo que me ocurrió). El proceso de instalación lo pueden ver en esta captura.




viernes, 21 de diciembre de 2012

Insertar salto de linea en VI

Una consulta SQL que este solo en una linea y que sea medianamente grande, puede ser difícil de leer. En ese caso surge la necesidad de separar lógicamente las lineas de tal forma que la consulta quede legible.

Eso es justamente lo que me paso hoy. Tenia una consulta de mas de 70 lineas pero que estaba en una sola. ¿Y como separar el texto en lineas legibles?. Solo necesitaba insertar después de las comas un salto de linea y de esa forma la consulta quedaba mas entendible. Esto es muy sencillo de hacer con VI.
El ejemplo que sigue fue hecho en Windows.


:s/, /,\r /g

El ejemplo de arriba, reemplaza las comas por comas mas un salto de linea. El texto original y el resultado en las siguientes imágenes.



Fuente:


jueves, 20 de diciembre de 2012

DataTable ya pertenece a otro DataSet (C#)

DataTable ya pertenece a otro DataSet. Este mensaje me apareció cuando intentaba cargar dos DataTable de distinto origen en un  DataSet. ¿Y como es que estaba haciendo esto?:

DataSet ds = new DataSet();
DataTable dt0 = new DataTable();
DataTable dt1 = new DataTable();
dt0 = funcion1(par1, par2);
dt1 = funcion2(par1, par2);
ds.Tables.Add(dt0);
ds.Tables.Add(dt1);


En el código, dos funciones me devuelven DataTables que necesito cargar en el DataSet.

La forma correcta de hacerlo es usando el método copy:

DataSet ds = new DataSet();
DataTable dt0 = new DataTable();
DataTable dt1 = new DataTable();
dt0 = funcion1(par1, par2).Copy();
dt1 = funcion2(par1, par2).Copy();
ds.Tables.Add(dt0);
ds.Tables.Add(dt1);


El método copy copia la estructura y los datos de un DataTable en otro.

Fuente
http://msdn.microsoft.com/en-us/library/system.data.datatable.copy.aspx

Concatenar en DB2

Para concatenar texto en DB2 se usa CONCAT. Esta sentencia también se encuentra en Oracle y Mysql, pero su uso en DB2 es distinto y no es restrictiva como lo es en Oracle. Se puede decir que CONCAT en DB2 se usa como el símbolo mas , o las barras paralelas de los otros motores.

Ejemplo de uso:

select substr('20120102',1,4) concat '-' concat substr('20120102',5,2)
from sysibm.sysdummy1



En el ejemplo, se puede ver que se extrae de una cadena que contiene una fecha (yyyymmdd), el año y el mes y luego se concatena estos valores para darle a el siguiente formato al resultado yyyy-mm. También se usa la tabla sysdummy1 que es la versión DB2 de la tabla dummie de Oracle.




lunes, 17 de diciembre de 2012

Como saber la versión de DB2 instalada

Últimamente me he topado con este motor de datos DB2 de IBM. Y para familiarizarme con el, he instalado en un PC de mi casa la versión express que se provee por parte del gigante azul como es llamada esta CIA. También he empezado a leer el libro (Conociendo DB2 Express v9.5) que es fruto del trabajo de  la comunidad alrededor de este software.

Una de las primeras dudas que me surgió al tratar de seguir las instrucciones del libro, fue: ¿Estoy usando la versión 9.5? Y la forma de saberlo (si no te fijaste como yo al descargarlo) es abrir una ventana de comandos (estoy usando Windows 7, cmd) y ejecutar el comando:

db2level

Después de eso supe que la versión que instale es la 10.1. Por lo que me hace sentido que haya cosas que ya no existan o estén de otra forma en esta versión como el Centro de Control. Cosa que aun estoy buscando, pero primero actualizare mi documentación.



Este es el link de descarga de DB2 Express
http://www-01.ibm.com/software/data/db2/express/

Dejo de todas maneras el link para descargar el E-book
Conociendo DB2 Express v9.5


jueves, 13 de diciembre de 2012

Generar un jar desde Netbeans

En este post voy a mostrar algunos tips que pueden resultar útiles para quienes recién parten con Java.
  • Como generar un jar
  • Como ejecutar el jar
  • Como tomar valores desde una aplicación de consola (el jar generado)
Para este caso estoy usando Netbeans 7.2.1, sobre un Windows 7.

Primero voy a mostrar el código que nos va a permitir tomar dos parámetros desde la linea de comandos, y mostrar esos valores, de lo contrario la aplicación dirá que faltan parámetros. 

public class Getparam {

public static void main(String[] args) {
// Controlo si trae parametros
if (args.length == 2){
   System.out.println("Numero de parámetros esperados \n");
   System.out.println("Valor 1 "+args[0]+"\n");
   System.out.println("Valor 2 "+args[1]+"\n");
}else{
   System.out.println("El programa espera dos parámetros");
  }
 }
}


Para generar un jar desde Netbeans se debe ir a Run y luego a Clean and Build Project (Mayús+F11). El archivo jar queda en la carpeta dist en la siguiente ubicación (esto depende de tu instalación de Netbeans) NetBeansProjects\proyecto\dist.




Luego abrimos una ventana de comando (Inicio - Ejecutar - cmd ), te ubicas en la carpeta y ejecutas el programa del siguiente modo:

java jar  getparam.jar par1 par2


Donde:
getparam es el nombre que le di a mi proyecto





miércoles, 12 de diciembre de 2012

Captura de Pantallas en Windows 7

Estoy haciendo el levantamiento de un sistema. Para lo cual estoy tomando hartas capturas de pantalla. Y el método de presionar Impr Pant y CTRL+V le va a quitar claridad al documento que estoy haciendo.

No quería instalar un software para eso. Y encontré en el mismo Windows 7 la herramienta precisa: "Recortes".

Este programa sencillo, permite los siguientes tipos de captura:
  • Recorte de forma libre
  • Recorte Rectangular
  • Recorte de Ventana
  • Recorte de Pantalla Completa

Ademas se pueden escribir notas y destacar partes de la imagen.

Recomendado para cualquier despistado como yo que aun no haya dado con el, y que también no tenga requerimientos muy avanzados.

Para acceder al programa se puede presionar botón Inicio y en la barra de Buscar programas y archivos, escribir Recortes.



Cerrar libro sin guardar desde VBA

Hice una macro en Excel que tomaba unos datos desde DB2 y los guardaba en otro libro Excel. Y la idea es que el usuario pudiera trabajar solo en el Excel nuevo. Para lo cual era necesario cerrar el libro con la macro una vez que ya no era necesario.

Para esto agregue una función con una sencilla linea que permite justamente cerrar el libro sin guardarlo, sin pedir confirmación al usuario.

Sub CerrarSinGuardar()
'Cerrar el libro sin guardarlo
ThisWorkbook.Close savechanges:=False
End Sub


domingo, 25 de noviembre de 2012

Buscar comandos en el historial del terminal

Uso bastante el terminal o linea de comandos tanto en MAC OS como en Linux. Para navegar entre las carpetas uso la tecla TAB que auto completa rutas y comandos y es como el unico tip que usaba para agilizar el ingreso de instrucciones.

El sistema mantiene un registro de los comandos ingresados el cual se puede ver escribiendo el comando history. 

Hasta que pense que seria bueno poder buscar en el historial y no tipear tanto. Y claro, existe un atajo para realizar eso CTRL+R.


Tipeas CTRL+R y aparece el siguiente prompt (reverse-i-search)`': tras lo cual todo lo que escribas se auto completara de acuerdo a las entradas del historial.


Fuente
http://lifehacker.com

Elemento seleccionado de un select con Jquery Uniform

Estoy haciendo mejoras en el framework por defecto que uso en mi proyecto Helfer. Si ven el video se van a dar cuenta que los select o prompt están como el DOM los trajo al navegador. Por lo mismo y para que se vean atractivos, los agregue a la librería Jquery Uniform. Pero hay un problema,  esta librería agrega una etiqueta span al momento que seleccionamos un elemento. Por lo que para efectos de validación nuestro control select / combo / prompt sigue estando sin seleccionar o conservando su valor por defecto.

 
Como siempre hago, busque la solución googleando. Llegue hasta stackoverflow pero la solución que encontré ahí no me ayudo. De modo que lo  que cae de cajon es actualizar el estado del select vía programación una vez que se produce el evento change del mismo.

$("#id_emp").change(function () {
  var vid_emp = document.getElementById("id_emp").value;
  if (vid_emp!='0'){
   /*
    codigo
    */
   $("#id_emp option[value="+vid_emp+"]").attr("selected","true");
  }
});

sábado, 24 de noviembre de 2012

Menu Desarrollo en Safari

Empecé a revisar una aplicación Web en Safari y tres letras mayúsculas, no veo ninguna  opción para desarrolladores.

No es que no la tenga, es que no la muestra por defecto. Y eso es comprensible dado que no todo el mundo que navega en Internet quiere ver los errores de programación de un sitio.

Para activar el menú Desarrollo en Safari se debe hacer lo siguiente:

  • Safari
  • Preferencias
  • Avanzado
  • Habilitar la opción Mostrar el menú Desarrollo en la barra de menús


Desabilitar envios de correo en Mantis BT

Cuando se crea un usuario en Mantis BT, el sistema envía un correo al nuevo usuario para que el mismo active su cuenta.  Y es justo lo que yo no necesitaba, debido a:

  • No tengo configurado un servidor de correo en la maquina
  • No es necesario enviar notificaciones por correo
Como no encontré la opción de deshabilitar el correo en la interfaz Web, fui al archivo de configuración:

En mi caso (instale Mantis BT desde Synaptic), por lo que la ubicación puede no ser igual a la de todos:

/usr/share/mantis/www/config_defaults_inc.php

y busque la siguientes lineas:

# allow email notification
# note that if this is disabled, sign-up and password reset messages will
# not be sent.
$g_enable_email_notification = ON;


Y cambie a OFF el valor del parámetro $g_enable_email_notification  de esta forma el usuario que se esta creando lo hará con un password en blanco.


Link Mantis
http://www.mantisbt.org

Notas sobre Mantis BT

Mantis BT es una herramienta open source de Bug Trucking (en español, para registrar errores de software) . La acabo de instalar en Linux (Crunchbang) desde Synaptic. Y como no es mi primer acercamiento a esta herramienta voy a registrar las cosas que vaya aprendiendo y las dudas. Por que de los demás acercamientos no me acuerdo de nada.

La primera duda que tuve después de instalar fue, ¿Cual es la clave del usuario administrator? La clave del usuario administrator es root, y es aconsejable cambiar esta clave en el link  My Account, la primera vez que entras.

Después de crear un proyecto (Manage - Manage Projects). E intentar reportar una incidencia a mi mismo (Report Issue), no encuentro como crear el primer elemento que se me pide en el formulario Category.

¿Como crear categorías en Mantis BT?

Algo que no vi, cuando cree el proyecto es que el formulario es mucho mas amplio y la creación de categorias esta mas abajo, ósea en Manage - Manage Projects.

Agregaré mas tips en la medida que use este software...

Link Mantis
http://www.mantisbt.org

lunes, 19 de noviembre de 2012

Clonar repositorio GIT localmente

En otro post mostré como clonar un repositorio vía SSH, ahora es el turno de el mas básico de los protocolos usados por GIT, Local.

Esto se puede hacer de las siguientes dos formas:

git clone /home/usuario/proyecto.git
o
git clone file:////home/usuario/proyecto.git

La diferencia entre estos dos métodos es que al usar el prefijo file://, este es mas lento1 pero obtiene una copia limpia en caso de que este repositorio haya estado bajo otro sistema de control de versiones.


Fuentes
Git on the Server - The Protocols

1 Al usar el prefijo file, GIT utiliza un proceso para transferir datos sobre una red. Lo cual lo hace mas lento.

domingo, 18 de noviembre de 2012

Clonar repositorio remoto GIT por SSH

Git puede usar cuatro protocolos para transferir datos: Local, Secure Shell (SSH), Git y HTTP. En este post mostraré la sintaxis para clonar un repositorio desde SSH.

git clone ssh://marcos@192.168.1.115/var/www/radiotaxi.git

Donde:
  • marcos Usuario de la maquina donde esta el repositorio
  • 192.168.1.115 Maquina donde esta el repositorio
  • /var/www/radiotaxi.git Path completo del repositorio


Descarga el Libro Pro GIT en varios formatos (PDF, EPUB, mobi) y en varios idiomas:
http://j.gs/1ZXD

Convertir repositorio GIT "non-bare" a "bare"

La mejor traducción para la palabra "bare" en el contexto de repositorios GIT, creo que es descubierto. Dado que un repositorio "non-bare" es un repositorio no compartido o no descubierto. Siendo "bare" lo opuesto, compartido o descubierto.

La utilidad de un repositorio "non-bare" es cuando el control de fuentes es personal. Y la necesidad de cambiar este tipo de repositorio, surge en el momento que necesitas compartir ese código con mas desarrolladores.

Para crear un repositorio para ti mismo "non-bare", se usa el siguiente comando:

git init project

Para crear un repositorio compartido "bare", es como sigue:

git init --bare project.git

Y convertir un repositorio GIT "non-bare" a "bare"

mv project/.git project.git
git --git-dir=project.git config core.bare true
rm -rf project


Fuentes
What is a bare git repository?
How do I make existing non-bare repository bare?

viernes, 16 de noviembre de 2012

Error ExamDiff is binary, and is different from the file


ExamDiff es una utilidad freeware para Windows que permite comparaciones de archivos. Lo uso cuando estoy en el trabajo que es el
unico lugar donde uso Windows.

Considerando que es una herramienta sencilla, me sorprendió verme contrariado con un mensaje como este:

File :\carpeta\archivoa.txt is binary, and is different from the file
c:\carpeta\archivob.txt




No me voy a desperfilar colocando tres letras mayúsculas, pero eso es lo que se me vino a la cabeza. Ya que ambos archivos eran de texto. De modo que me puse a buscar si algún usuario había pasado por lo mismo, y efectivamente. La solución que daban era editar el archivo con el Notepad y guardarlo en formato Unicode. Pero mi archivo estaba en ese formato, de modo que lo guarde como UFT-8 y el programa lo acepto y pude hacer la comparación.


No es un tema como para profundizar las razones pero esa fue la solución.



Link de la aplicación
http://j.gs/1bC8

martes, 13 de noviembre de 2012

Por si no lo sabes sobre FileZilla

FileZilla es un cliente FTP bastante usado por lo que he visto. Yo lo uso normalmente.

En cierta oportunidad que necesitaba exportar mis cuentas a otro equipo (cosa que hace FileZilla), me di cuenta que el archivo de exportación que es un XML mostraba claramente el usuario y password e Ip de las cuentas FTP. Por lo que si un usuario de este cliente desconoce esa llamemosla vulnerabilidad, puede estar poniendo en riesgo información valiosa al compartir su equipo, a alguien que este al tanto y tenga malas intenciones.



FileZilla es un proyecto Open Source, de modo que cualquiera puede tomar el código fuente, mejorar esa parte (agregando algún método de encriptado) y de esa forma contribuir a este proyecto que es útil para muchas personas. Por mi parte veré si me da el tiempo para hacerlo, pero si no, dejo la botella lanzada.

Link del proyecto
http://j.gs/1aSs

lunes, 12 de noviembre de 2012

Cuando SUBSTR no sirve buenas son las expresiones regulares

[Oracle / SQL] SUBSTR es una función muy útil para recortar cadenas de datos. Pero hay ciertos casos en que se queda corta. Por ejemplo, si necesitas solamente obtener el usuario de un correo electrónico dejando fuera el dominio y la arroba.

El largo de los nombres de usuario varia entonces se debe pensar en algo mas elaborado o ir al grano con las expresiones regulares.

REGEXP_SUBSTR permite extraer una cadena que cumple con una expresión regular.

Ejemplo de uso:
select REGEXP_SUBSTR('m-donoso_2007@dominio.cl','[_a-z0-9-]*') from dual;

Donde
  • m-donoso_2007@dominio.cl es el correo (fake por cierto).
  • [_a-z0-9-]* Es la expresión regular que toma solo los caracteres indicados símbolos -, _, letras minúsculas y números tantas veces como aparezcan en la cadena. Por lo que deja fuera todo lo que esta después de la arroba.
El resultado de arriba da:
m-donoso_2007



Mas información
http://j.gs/1aEh

domingo, 11 de noviembre de 2012

PHP Fatal error: Class 'XSLTProcessor' not found in

Estoy moviendo mis aplicaciones Web PHP a una maquina virtual Linux (Crunchbang) que cree en un MAC. Por lo que al momento de tratar de hacerlas funcionar van apareciendo errores que tienen que ver con herramientas que no están instaladas.

Ejemplo este error del parser XSLT:
PHP Fatal error: Class 'XSLTProcessor' not found in 


La solución (instalar el paquete)
sudo apt-get install php5-xsl

Este paquete (php5-xsl) proporciona un módulo para XSL, el cual uso para hacer transformaciones de archivos XML en PHP. Si quieres mas información pueden consultar este buen articulo:

Using PHP 5's XSL extension to perform XSL Transformations

Creando un repositorio con GIT

Como comente en otro articulo, instale una maquina virtual con Crunchbang. Esta distribución instala GIT  después de consultarlo en el dialogo de configuración (en la instalación). Por esto mismo no voy a hacer un articulo como instalar GIT. Pero si, como necesito crear un repositorio y mantener el control de mi código escribiré acerca de los demás pormenores.

Crear un repositorio desde fuentes que ya existen es super sencillo. Tengo una aplicación Web que se llama radiotaxi y esta en este directorio:
/var/www/radiotaxi 
 
Voy a ese directorio
cd /var/www/radiotaxi

Y comienzo el seguimiento de este proyecto
git init 

Se crea una carpeta oculta con el nombre .git
Initialized empty Git repository in /var/www/radiotaxi/.git/

Los repositorios creados con git init, no son visibles para otros equipos. Para que el repositorio sea visible o este descubierto se debe usar el comando:

git init --bare radiotaxi.git

Agrego los archivos
git add *.php

Agrego las carpetas
git add js/
git add css/
etc...


Subo los fuentes lo cual es parecido a SVN
git commit -m 'Initial Project' 

 
Un comando a tener en cuenta es git status permite saber si te queda algo por subir
git status

Descarga el Libro Pro GIT en varios formatos (PDF, EPUB, mobi) y en varios idiomas:
http://j.gs/1ZXD

sábado, 10 de noviembre de 2012

Maquina virtual visible en la red ( VirtualBox )

Hice una maquina virtual con una distro muy liviana llamada Crunchbang en donde tengo funcionando un servidor Web Apache.
Quiero que las aplicaciones Web publicadas en este servidor puedan ser consultadas desde otros dispositivos mi red (Ipad, iphone, notebooks, etc). Pero eso no es posible ya que no tengo una ip de red dentro de esa maquina.

La configuración por defecto  de parte de VirtualBox es la siguiente en lo que se refiere a la red:
Al revisar la ip con el comando ifconfig en la maquina virtual solo tengo una ip local. (tercera linea en la imagen inet addr:10.0.2.15).


Para disponibilizar la maquina virtual en la red se necesita cambiar de NAT (Network Address Translation) a Adaptador Puente (o Bridged networking).

NAT es un adaptador de red básico útil si solamente se requiere navegar, enviar correos y ese tipo de cosas. Para necesidades mas avanzadas esta el Adaptador Puente.

Ahora al revisar nuevamente la ip de la maquina virtual, esta tiene una que la hace visible en toda mi red (inet addr: 192.168.1.123).


De modo que ahora puedo consultar todas las aplicaciones que publique en esa maquina accediendo por la ip. Para este caso:
http://192.168.1.123/nombreaplicacion


Recursos
Sitio VirtualBox
Info sobre adaptadores de red en VirtualBox

file size exceeded the maximum (PHP / PHPMyAdmin)


Tengo un script sql que pesa 4 MB el cual quiero cargar en phpmyadmin. Pero por defecto el upload de archivos es de 2MB. Por ese motivo la aplicación muestra el siguiente mensaje cuando porfiadamente intento cargar el archivo.



No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. 

¿Como aumentar el tamaño de archivo soportado?

Para eso necesitamos editar el archivo php.ini.

sudo vi /etc/php5/apache2/php.ini
o sudo gedit /etc/php5/apache2/php.ini

Ubicamos la siguiente linea dentro del archivo
upload_max_filesize = 2M

Y la dejamos de la siguiente forma
upload_max_filesize = 5M

Tambien es necesario darle un vistazo a esta linea que en mi caso esta bien.
post_max_size = 8M

Luego de realizar los cambios, reiniciar Apache
sudo /etc/init.d/apache2 restart

El resultado es el siguiente:

Esto fue hecho en una maquina virtual con la distro Crunchbang


Relacionado
Donde esta php.ini en Linux

viernes, 9 de noviembre de 2012

error: key does not contain a section: GIT

Me estoy pasando de hacer control de versiones con Subversion a GIT. Básicamente por moda, y en proyectos personales.

Y como la primera cosa que se hace después de instalar GIT  es indicarle el nombre de usuario y el correo electrónico, esto debido a que cada commit que hagamos necesita esta información. No tarde en generar un error:

error: key does not contain a section:

Estoy leyendo el libro Pro GIT (descarga gratis mas abajo) y las instrucciones son claras:

git config --global user.name "John Doe" 
git config --global user.email "johndoe@example.com"

Pero lo que hice fue entre difícil de explicar e ilógico, véalo con sus propios ojos:


Pero como he dicho anteriormente, si has llegado hasta acá es que también te paso lo mismo o algo similar, y lo que debes hacer es ingresar los datos tal cual la instrucción y lo que cambia lógicamente son los datos entre comillas que son los que necesitas configurar.

Si deseas revisar tu configuración, usa el siguiente comando:
git config --list



Al ver la captura me percato que cree una clave user.marcos la cual supongo no sirve de nada.

Entonces para eliminar la clave indeseada uso el siguiente comando:
git config --global --unset user.marcos 

El resultado al ejecutar nuevamente git config --list




Descarga el Libro Pro GIT en varios formatos (PDF, EPUB, mobi) y en varios idiomas:
http://j.gs/1ZXD