jueves, 29 de diciembre de 2011

Como comentar código con VI



Para comentar varias lineas de código fuente en VI, se usa la siguiente orden (ejemplificada):


:4,18 s/^/# /

De acuerdo al ejemplo. Se inserta el símbolo # desde la fila 4 hasta la 18. Dependiendo del lenguaje en que estés programando el carácter # lo puedes reemplazar por el que corresponda a comentarios.

Para mostrar los números de lineas se usa:
:set nu


No such file or directory



No such file or directory . Es un error que parece evidente, pero al mismo tiempo desconcierta. Sobre todo si vez el código y este esta bien escrito.

Me ocurrió con una shell, la cual tiene que acceder a un directorio y ejecutar desde ese lugar otras shell. Y al momento de ejecutar: cd directorio , aparecía este error.

Lo que no les he comentado es que la shell la escribí en Windows y luego la pase al entorno de trabajo Linux. De ahí que la solución pase por cambiar el formato del archivo, con las instrucciones que detallo a continuación:

Abrir el archivo con vi o vim.
vi archivo

Aplicar formato unix.
:set fileformat=unix

:wq!

o bien, desde la consola
dos2unix archivo

Si te encuentras con este error, verifica que sea el formato.

miércoles, 28 de diciembre de 2011

ORA-01858 - se ha encontrado un carácter no numérico (Solucionado)


Me encontré con este error: ORA-01858. Al hacer una comparación de fechas.

ORA-01858: se ha encontrado un carácter no numérico donde se esperaba uno numérico
01858. 00000 -  "a non-numeric character was found where a numeric was expected"
*Cause:    The input data to be converted using a date format model was
           incorrect.  The input data did not contain a number where a number was
           required by the format model.
*Action:   Fix the input data or the date format model to make sure the
           elements match in number and type.  Then retry the operation.


 En la consulta uso lo siguiente:
..
WHERE TO_DATE(DEACTIVATION_DATE,'DDMMYY')=TO_DATE(SYSDATE,'DDMMYY')-1;

La causa de este error, es que dado el formato,  no se encuentran los valores numéricos en el lugar que son requeridos.

Y la solución es formatear correctamente las fechas:
..
WHERE TO_DATE(DEACTIVATION_DATE,'dd-mm-yy')=TO_DATE(SYSDATE,'dd-mm-yy')-1;    



martes, 20 de diciembre de 2011

ISNULL EN ORACLE - Reemplazar valores nulos



Tengo mas experiencia trabajando en MS SQL y en MYSQL que en Oracle (soy novato) por lo mismo al momento de necesitar hacer algo se me viene a la mente como es en MS SQL / MYSQL y pienso que puede haber varios en una situación similar.

En MS SQL existe la función ISNULL para reemplazar valores nulos, ejemplo:
SELECT Campo1, ISNULL(Campo2, '0') FROM Tabla 


En MySQL la función es:
SELECT Campo1,  COALESCE (Campo2, '0') FROM Tabla 


En Oracle, la función es NVL, ejemplo:
SELECT Campo1, NVL(Campo2, '0') FROM Tabla 


Lo que hacen estas funciones es reemplazar el valor nulo si existe por el que se le indica.













domingo, 18 de diciembre de 2011

Conectarse a Internet desde Fluxbox

Uso Fluxbox cuando ejecuto maquinas virtuales en Ubuntu. Básicamente por que es un escritorio ligero, que no ocupa muchas recursos. El problema es que cuando lo uso me quedo sin Internet, cosa que sin duda le ocurre a todos los que usan Fluxbox. Para ejecutar  network manager se debe ejecutar el siguiente comando en una consola:

sudo nm-applet &

Sitio de Fluxbox
http://j.gs/Tya

domingo, 11 de diciembre de 2011

Dividir la pantalla en VI






Dividir la pantalla
:split   (horizontalmente)
:vsplit  (verticalmente)

:split 
:vsplit 

Nueva división vacía
:new       (crea ventana horizontal vacía)
:vnew     (crea ventana vertical vacía)

Para cambiar el foco a otra ventana
CTRL + W

Para dejar el espacio actual y cerrar todas los demás
:only



sábado, 10 de diciembre de 2011

Buscar Texto en un Archivo con VI


Para buscar texto en VI se usan las siguientes instrucciones:

:/texto_a_buscar
:?texto_a_buscar

:/texto_a_buscar 
busca hacia abajo del documento texto_a_buscar

:?texto_a_buscar 
busca hacia arriba del documento  texto_a_buscar

Para avanzar en los resultados de la búsqueda se debe presionar la tecla n


domingo, 4 de diciembre de 2011

Crear tabla desde un select en Oracle


Crear una tabla a partir de una consulta es muy sencillo en Oracle.
En el ejemplo, que agrego a continuación se ve claramente que primero se debe indicar que se crea una tabla:
CREATE TABLE AS y a continuación el SELECT entre paréntesis.


CREATE TABLE subtelefono AS
(SELECT TELEFONO, IMEI FROM TELEFONOS);



sp_helptext en Oracle o Ver código de un procedimiento



Para quienes están mas familiarizados con MS SQL, cuando trabajen en Oracle estarán buscando un función para obtener el código de algún procedimiento como es sp_helptext. Encontré esta sentencia que cumple con esta función:

SELECT TEXT FROM ALL_SOURCE WHERE NAME='MOSTRAR_DATOS' ORDER BY LINE;

donde MOSTRAR_DATOS , es el nombre del procedimiento que se quiere obtener el código.

En la imagen que adjunto, primero creo el procedimiento y luego obtengo el mismo código con la sentencia antes mencionada.


sábado, 3 de diciembre de 2011

Vi - Mostrar números de linea


Para mostrar los números de linea en el editor VI (VIM), se puede usar:

:set number 


:set nu

Para des habilitar la numeración:

:set nu!







jueves, 1 de diciembre de 2011

Oracle - Too many values ORA-00913




Estaba tratando de hacer una inserción a partir de un SELECT y me apareció este error: 

Error SQL: ORA-00913: demasiados valores 00913. 00000 - "too many values"
El error en mi caso consistía en la siguiente trivialidad:

INSERT INTO CopiaTELEFONOS (campo1, campo2, campo3)
SELECT campo1, campo2 FROM TELEFONOS;

Tenia mas campos en la primera sentencia que en la segunda donde seleccionaba los campos.
El select es de ejemplo, no es que use esos nombres para las tablas. El caso real se trataba de una tabla con decenas de campos.

sábado, 26 de noviembre de 2011

Explorador de archivos en VI


Vi tiene unos comandos que permiten explorar archivos que son: :Vex y :Sex. Pero al momento de editar un archivo la pantalla queda divida, cortando las lineas que son mas largas osea , haciendo un salto de linea. Lo cual complica la lectura de código fuente algunas veces.

Leyendo la documentación de VI encontré este otro comando o plugin que no tiene ese efecto desagradable que es :

:edit .  (ojo con el punto, tiene que ir sino no funciona)

Ejecutas vi o vim, una vez en el editor ejecutas :edit . , y se mostrará un explorador de archivos.



Otra forma de navegar un directorio es:

:e directorio

y

:Explore

Te aseguro que nunca esta demás saber VI. Debido a que en los servidores Linux, no siempre esta disponible un entorno gráfico con sus estandarizados editores. ¿Y que pasará cuando te toque uno de esos?  Me puse catastrofista :)

Documentación de VI
http://j.gs/RGp


domingo, 13 de noviembre de 2011

Not unique table/alias:




Not unique table/alias:, probablemente sea uno de esos errores demasiado sencillo de saber porque se produce y corregir. Me ocurrió  este error y lo vi posteado en algunos foros, y me parece que a no todo el mundo le puede parecer tan obvio. 


¿Que indica el error Not unique table/alias: 'Nombre_Tabla'?


Indica que el nombre de la tabla se esta llamando mas de una vez en la consulta, tal cual aparece en el código que copio a continuación.


SELECT ArchivoTematico.ArchivoTematico_art as id_art,ArchivoTematico.ArchivoTematico_art,ArchivoTematico.Archivo_art,ArchivoTematico.Descripcion_art FROM ArchivoTematico
INNER JOIN ArchivoTematico
ON ArchivoTematico.id_art=ArchivoTematico.id_art

La solución entonces es quitar la redundancia del nombre de la tabla en la consulta.



SELECT id_art,ArchivoTematico_art,Descripcion_art FROM ArchivoTematico



miércoles, 9 de noviembre de 2011

Attribute rel not allowed on element link at this point.

Al revisar una página, con la herramienta del W3C para validar documentos Web http://j.gs/PJS.  Encontré el siguiente error:

Attribute rel not allowed on element link at this point.


La página es adaptada a HTML5, por lo que eso me daba una pista.


Al quitar el atributo rel, ocurrió el siguiente error:
Element link is missing one or more of the following attributes: itemprop, rel.




Al final usé un generador HTML5 (link mas abajo), el cual dejo la linea con problemas de la siguiente forma:

<link rel="stylesheet" href="css/styles.css" />

Recomiendo usar este generador de HTML5 para obtener código válido:
http://j.gs/PJQ


martes, 27 de septiembre de 2011

Ejecutar como root una aplicación grafica en Linux

En Linux hay ciertas tareas que solo se pueden realizar con el usuario root. Es facil, si vamos a ejecutar un programa desde consola. ¿Pero si queremos ejecutar un programa gráfico sin pasar por la consola?. 

Para eso existe el programa gksu.

Se puede crear un lanzador (es la forma en que lo uso), en donde le damos la siguiente orden:

 gksu aplicacion

 Al pinchar el lanzador, el sistema solicitará el password de root para ejecutar la orden que le hayamos indicado.

jueves, 19 de mayo de 2011

Diferencias entre archivos con VIM




Para tener una vista de dos archivos y que vim nos muestre las diferencias que existen entre ambos se debe usar el siguiente comando:

vim -d archivo1 archivo2

o bien

vimdiff archivo1 archivo2


Mas información:
http://j.gs/RGm

Documentación de VI
http://j.gs/RGp

domingo, 8 de mayo de 2011

Buscar archivos adjuntos en Gmail

¿Como ubicar un archivo adjunto entre tanto correo en tu cuenta gmail?
Este correo tiene características bien interesantes como poder buscar archivos adjuntos en la barra de búsqueda.
Por ejemplo, si quieres encontrar un adjunto enviado que contenga cierto patrón, colocas en barra de búsqueda:

factura has:attachment

domingo, 3 de abril de 2011

Ver la estructura de una vista en MySQL




Para conocer la estructura de una vista en MySQL se usa la sentencia:

DESCRIBE <NombreVista>;

En el ejemplo de la imagen la vista se llama vwProyecto

sábado, 5 de marzo de 2011

Salir de un Bucle en Javascript

break y continue son dos sentencias que permiten interrumpir un bucle en javascript. Sea esta un for, while, etc.

break
Interrumpe la ejecución y sigue con la instrucción despues del bucle.

continue
Interrumpe la ejecución, pero vuelve a validar la condición en el bucle.

martes, 1 de marzo de 2011

Ejecutar una función dentro de un IFrame


Algunas veces de acuerdo a la definición de la navegación de una aplicación. Nos vemos en la necesidad de usar Iframes. Agregando esta decisión una dificultad al momento de programar.

Una de ellas, es como ejecutar una función que esta dentro de un iframe desde la pagina donde se define el iframe. Lo mejor de todo es que hay solución para esto. Se trata de la propiedad contentWindow:

<script>
function ejecutarFuncion(){
document.getElementById('icontenido').contentWindow.nuevoCotizacion();
}
</script>

Explicación:
Se debe asumir que hay una pagina (index.htm) la cual contiene un iframe (icontenido) y una funcion (ejecutarFuncion), dentro del cual esta otra página (otrapag.htm) que tiene una función llamada nuevoCotizacion().

Ver Tambien:
Ajustar Ancho Iframe con Javascript

cursor:hand en Firefox



Si llegaste a este post de seguro ya sabes que para cambiar el puntero del mouse desde CSS se debe usar cursor:<tipo de cursor>. Pero en el caso, que quieras colocar el puntero como mano, esta funciona en todos los navegadores excepto en Firefox.

Para solucionar eso se debe usar pointer, tal como se indica a continuación y en la imagen que adjunto:
cursor:pointer;

jueves, 24 de febrero de 2011

Tamaño de una Base de Datos MS SQL


Para conocer el tamaño de una base de datos en MS SQL se puede usar el comando sp_spaceused.

Se puede usar:

use BaseDeDatos
sp_spaceused
(Muestra el tamaño de la base de datos actual)

sp_spaceused Tabla
(En este caso muestra el tamaño de una tabla)

Mas Información:
http://msdn.microsoft.com/es-es/library/ms188776(v=sql.90).aspx

domingo, 20 de febrero de 2011

Desintalar programas sin dejar rastro en Win 7




Normalmente al desintalar un programa en Windows. Este deja algunas carpetas, entradas en el registro, archivos varios, de tal forma que queda huella de su existencia en algún minuto en nuestro equipo.

Como para casi todo hay solución. Esta no es la exepcion tampoco. Para estos menesteres podemos usar software tal como: ZSoft Uninstaller el cual se puede descargar gratis desde la siguiente url:

http://zsoft.dk/download.php?appid=4

Plugings para Gimp

Buscaba un plugin para Gimp que me permita exportar capas y encontre el siguiente plugin:

Export Layer to PNG
http://registry.gimp.org/node/18440

No lo habia instalado aun, cuando di con este otro tip bastante interesante. Un paquete para instalar en Linux Debian por consiguiente Ubuntu, lleno de filtros que no contiene la instalación estandar de Gimp. Entre estos uno para guardar para Web.

Este paquete es: gimp-plugin-registry y puede ser instalado desde Synaptic.



De acuerdo a la prueba que realize, guardar para Web solo exporta una imagen que puede ser jpg, png. No me sirve.

jueves, 3 de febrero de 2011

Tips PHP

Iré agregando mas Tips en este espacio:

Ip del Visitante
$Ip = $_SERVER['REMOTE_ADDR'];

Ip del Visitante si esta detras de un Proxy
$Ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

Isp del Visitante
$Isp = gethostbyaddr($_SERVER['REMOTE_ADDR']);


Fuentes:
http://ingeniuz.blogspot.com/2005/05/conocer-la-ip-del-visitante-usando-php.html

http://cl.php.net/gethostbyaddr




Libro, Aprende a Programar en PHP YA!

Tips Javascript

Como desabilitar un control
document.getElementById("id_per").disabled=true;

Fecha Actual

function getFechaYMD(){
var fecha = new Date();
var dia = fecha.getDate();
var mes = fecha.getMonth()+1;
var anyo = fecha.getFullYear();
return anyo+"/"+mes+"/"+dia;
}

Hora Actual

function getHoraActual(){
var fecha = new Date()
var Hora = fecha.getHours()
var Minuto = fecha.getMinutes()
var Segundo = fecha.getSeconds()

return Hora + " : " + Minuto + " : " + Segundo
}

Navegador del Visitante
var navegador = navigator.appName;

Sistema Operativo del Visitante
uso:
var sisop = getSO();

function getSO(){
var webdata = window.navigator.appVersion.toLowerCase();
var so = '';
if(webdata.indexOf('win') != -1)
{
so = 'Windows';
}
else if(webdata.indexOf('linux') != -1)
{
so = 'Linux';
}
else if(webdata.indexOf('mac') != -1)
{
so = 'Macintosh';
}
return so
}

Fuentes:
http://craftyman.net/detectar-sistema-operativo-con-javascript/

http://www.desarrolloweb.com/articulos/549.php

jueves, 27 de enero de 2011

Ofuscadores de Código PHP

Un Ofuscador de Código es una herramienta software que dificulta la lectura de tu código fuente por terceros no autorizados. Esto se aplica a lenguajes en los cuales el código esta a la vista como Javascript, PHP, Perl, entre otros.

Aca pondré una lista de los Ofuscadores que he encontrado o que a traves de Twitter o Facebook algunos de mis contactos me han recomendado.

Herramienta Online
http://www.hackingballz.com/herramientas/ofuscar-codigos.html

PHP Ofuscator
Ejecutable Windows
Ver resultado pruebas
http://www.raizlabs.com/downloads/PHPObfuscator_Setup.msi

Herramienta Online
http://jcarlosrendon.morelosplaza.com/herramientas/ofuscador.php

Ire actualizando esta lista en la medida que encuentre mas herramientas.



Libro, Aprende a Programar en PHP YA!

Probando PHP Ofuscator



En este post voy a probar una herramienta que se llama PHP Ofuscator (Ver Ofuscador de Código), la cual se puede descargar desde el siguiente link:

http://www.raizlabs.com/downloads/PHPObfuscator_Setup.msi

Tengo la siguiente clase PHP:


Al aplicar el ofuscador mostraré como queda y probaré si funciona ejecutando mi aplicación.
Este es el resultado:


Pero al momento de entrar nuevamente al sistema. Me aparece un error que era previsible. Al cambiar el nombre de los metodos un archivo externo como un Javascript no tiene como saber que el nombre del metodo ha cambiado.


Lo cual me muestra que estas herramientas son utiles para archivos solos. Pero no para sistemas que estan programados en capas. Aunque esta herramienta permite excluir variables, lo cual solucionaria el problema que acabo de mostrar. Pero si el sistema es extenso, colocar todas las variables, nombres de clase, de metodos, etc. Agregaría al desarrollo sus buenos días de esfuerzo.





Libro, Aprende a Programar en PHP YA!

Comments starting with '#' are deprecated



Este post tiene relación con un breve artículo: PHP desde la linea de comandos. Debido a que justamente intentando ejecutar un script php desde consola me aparecio el error:

PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0

El error basicamente me dice que comentar el archivo mcrypt.ini con # esta obsoleto. ¿Entonces cual es la forma correcta de comentar?

This's the one:

;configuration for php MCrypt module
extension=mcrypt.so






Libro, Aprende a Programar en PHP YA!

miércoles, 26 de enero de 2011

PHP desde la linea de comandos

PHP no solamente es un lenguaje de programación del lado del servidor utilizado para desarrollo Web. Si no que tambien, puede ser ejecutado como se ejecuta algún script Bash o Bat. Para esto es necesario instalar PHP CLI. Esto funciona tanto en Windows como en Linux, pero el ejemplo esta basado en este ultimo.

Si usas Linux, y quieres saber si esta instalado en tu maquina. En una ventana de comandos ejecuta:
php

Si no esta instalado la respuesta del sistema será:
El programa «php» no está instalado actualmente. Puede instalarlo escribiendo:
sudo apt-get install php5-cli


Super sencillo, por lo que ejecutas e instalas:
sudo apt-get install php5-cli

Crear un archivo para probar (En mi caso lo guarde como prueba.php)
<?php
echo "probando";
?>

Ejecutar archivo de prueba. En res.txt se guardará el resultado.
php prueba.php > res.txt



Artículo relacionado:
Comments starting with '#' are deprecated



Libro, Aprende a Programar en PHP YA!

martes, 25 de enero de 2011

Comandos Linux


Es cierto que existen hartos listados de comandos usados en Linux y excelentes. Pero heche de menos mi propio listado. Por lo que ire mejorando este post en la medida que requiera el uso de comandos en la consola.

Los comandos básicos en la mayoría de distribuciones linux se pueden encontrar en la carpeta bin (ver imagen)

Apagar el PC
sudo shutdown now

Borrar Directorio
rm -r directorio

Descargar un archivo de internet
wget http://www.sitio.net/archivo.xls

guardar el archivo con otro nombre al bajar
wget http://www.sitio.net/archivo.xls -O otronombre.xls


Descargar un sitio completo desde internet
wget -r http://www.sitio.net

Documentación de algún comando
man comando

Espacio en Disco o Carpeta
df -h

Navegar directorios
Entrar
cd directorio

Salir
cd ..

Saber la ubicación de una aplicación
which php
Resultado
/usr/bin/php

Saber tipo de archivo
file archivo

Saber codificación de un archivo
file --mime archivo

Ejecutar Aplicaciones

Ejecutar Firefox
firefox

domingo, 23 de enero de 2011

Como cambiar de lugar un campo de una tabla MySQL



El siguiente Tip muestra como a travez de SQL se puede cambiar el lugar de un campo en una tabla MySQL.

Si tomamos como ejemplo una tabla de usuarios cuyo campo id_per (Perfil), se quiere dejar como el primero se deje ejecutar el siguiente script.

ALTER table Usuario
MODIFY COLUMN id_per int
AFTER Usuario_usu

y luego:

ALTER table Usuario
MODIFY COLUMN Usuario_usu varchar(20)
AFTER id_per


Tambien sirve eliminar el campo y crearlo nuevamente en el orden deseado. Pero nunca esta demas saber hacerlo via programación.


El resultado es el siguiente:

domingo, 9 de enero de 2011

Como restaurar el Panel de Ubuntu


Uso Ubuntu 10.04 LTS Lucid Lynx. No tengo mayores problemas con su uso, pero en determinadas ocaciones se desaparecen algunos controles de la barra. Ya sea el indicador de Red o el controlador de volumen. Lo cual es un poco molesto.

La solución para cuando eso ocurre es correr estos comandos en consola.

gconftool-2 --shutdown
rm -rf ~/.gconf/apps/panel
pkill gnome-panel