viernes, 20 de noviembre de 2015

Eliminar una base de datos PostgreSQL de manera Forzada


En esta ocasión me tocó resolver algo sencillo pero un poco difícil de notar.

El percance fué que creé una base de datos en postgres "mi_base", la cual pesaba unos 3.4 gigas, cuando se terminó de usar me disponía a eliminarla y ¡Oh sorpresa!, no permitía eliminar, ya que habían "conexiones activas", cosa que no era cierto, ya que el único usuario se había desconectado hacía unos minutos.

Para no dar mas vueltas, la solución está en revisar las conexiones existentes a esa base de datos y matarlas (¡qué sádico!, ¿No?).

Lo primero es loguearse como super usuario en postgres, psql -Upostgres. Posteriormente, hay que consultar la tabla pg_stat_activity se la manera siguiente

SELECT procpid, current_query FROM pg_stat_activity where datname = 'mi_base';

De donde "mi_base" es la base de datos que no se puede eliminar, y revisamos el campo "procpid", ese es el id del proceso que está causando problemas.

Teniendo ese PID identificado, nos disponemos a matarlo (¡qué sádico!, ¿No?).

kill -TERM procpid

De donde procpid es el número entero del proceso a terminar. Hecho esto, lo siguiente ya es normal: ejecutar el drop database.

drop database mi_base;

Con esto ya debería ser posible eliminar la base de datos sin problema. Debo mencionar que la versión del servidor que estoy trabajando es postgres 8.2.



Espero te sea de utilidad :)

domingo, 25 de octubre de 2015

Construyendo una mini aplicación insertar datos con PHP y MySQL




Seguramente sabrás que PHP es uno de los lenguajes de programación mas populares del mundo en cuanto a programación web se refiere.
El dia de hoy, efectué un video en donde, mediante PHP, jQuery, HTML y ajax (si quieres ver la explicación detallada de AJAX puedes hacer click aquí) inserté datos a una base de datos de MySQL.
Sin mas rodeos, dejo el enlace al video donde efectué el proceso.



Espero te sea de utilidad :)

domingo, 18 de octubre de 2015

AJAX: Hacer una llamada al servidor




Hola!
Hace poco tuve que trabajar con JSP y mi servidor java, al principio pensé en que podía hacer, ya que anteriormente web lo trabajé con PHP y también con .Net, luego recordé que AJAX se encarga de la comunicación hacia el servidor con un estándar bastante bien definido y en adelante fue todo miel sobre hojuelas.

Pero no se diga mas, a continuación voy mostrarles una llamada al servidor y trataré de explicar cómo es la función y que debería ponerse en cada lugar.

También les comento que es mediante una función dentro de javascript, para que quede todo bastante claro.


En este segmento de 8 lineas, yo hice una llamada al servidor JSP y recibí datos del proceso. Voy a explicar lo que hace linea unida con una fleca en la imagen.
  1. El parámetro "type" indica de que modo se hará la llamada, en este caso será via POST (también es posible hacerlo via GET.
  2. url: indica la dirección donde se tiene la página del servidor, pudiendo ser por ejemplo "/procesos/llamada.php".
  3. async: indica si será asincrono o síncrono, esta propiedad pronto dejará de usarse, ya que afecta el rendimiento de la página cuando se hace de manera síncrona (contradiciendo el paradigma de ajax).  Mas información sobre async aquí.
  4. data: indica los datos que se van a enviar en el servidor, se hace de la forma "variable : valor", de esta forma le indicamos que "variable" es la variable que va a ser asignada del lado del servidor, y "valor" es la variable que tenemos del lado del cliente en javascript.
  5. success: la variable "xResultado" es una variable que recibe la respuesta del servidor, es decir, todo lo que querramos enviar se almacenará en esa variable, adaptándose al tipo de dato enviado, pudiendo ser un objeto por ejemplo.
  6. La línea del console.log() la ocupo para revisar si se está recibiendo correctamente la información, esto es posible verlo con la herramienta del navegador, en chrome por ejemplo, se puede ver cuando se activa la función "inspeccionar elemento --> console".

Con lo anteriormente explicado, es posible iniciarse a hacer llamadas.

Espero te sea de utilidad :)

 







lunes, 7 de septiembre de 2015

Instalando Apache-Tomcat en MAC Parte 2

En la entrada anterior, se trató acerca del cómo se puede configurar Apache-Tomcat en MAC, lo que veremos ahora es como configurar el servicio para que arranque junto con el sistema operativo.

  1. El primer paso es llamar al autómator (cmd + espacio -> automator)
  2. Seleccionamos nuevo documento
  3. Elegimos la opción "Flujo de Trabajo"
  4. Cuando se nos diga que tipo de flujo, escogeremos la opción "Ejecutar el script shell"
  5. Inmediatamente, teclearemos la instrucción "sh /Library/apache-tomcat/bin/startup.sh", lo que esto quiere decir, es que estoy ejecutando el script de arranque de tomcat  "/startup.sh" ubicado en la carpeta "/Library/apache-tomcat/bin/", en el artículo anterior expliqué como ubicar y nombrar la carpeta de Tomcat, por lo que si vienes de ahí, no es necesario dar mayor explicación.
  6. Guarda el archivo generado como tipo "Aplicación", en la misma ubicación en que se encuentra "/startup.sh", para que no exista algún conflicto.
  7. Ahora, será necesario ir a Preferencias del Sistema -> Usuarios y Grupos -> Arranque, agregar la app que acabamos de crear, y hacer check en ella para que se habilite. Con esto, el servicio de Tomcat ha quedado configurado para que nuestro Sistema operativo arranque en automático a Tomcat, y nuestra aplicación inicie junto a lo demás.

Espero te sea de utilidad :)

Si lo que necesitas es configurar el servidor tomcat, puedes ir a la primera parte de este tutorial haciendo click aquí.

Instalando Apache-Tomcat en MAC Parte 1

Es común encontrar en internet información "a medias", la cual funciona hasta cierto punto y encontramos errores a media secuencia.
Bueno, lo que traigo para ustedes es una serie de pasos que yo empleo cuando debo instalar un servidor Tomcat sobre Mac.


  1. El primer paso es ir a descargar la versión ZIP del software en la página oficial http://tomcat.apache.org/download-70.cgi 
  2. Teniendo ya esta versión, descomprimir la carpeta y renombrarla a algo mas sencillo, como "apache-tomcat". En este momento descargué la versión "apache-tomcat-7.0.64.zip", pero funciona igual de bien con la 8.
  3. Es necesario copiar esta carpeta hacia /Library
  4. Una vez copiada, otorgamos los permisos sobre ella (cmd + i, Figura 1). La manera mas fácil es darle permisos de Lectura-Escritura a todos los usuarios, luego de que la configuración esté terminada, se podrá jugar con ello.
    Figura 1. Permisos para la carpeta
  5. Dado los permisos, lo que sigue es arranchar el servicio, esto es posible accediendo a "/Library/apache-tomcat/bin/" y ejecutando el archivo "startup.sh", con esto el servicio arrancará, y podrás acceder vía navegador a la página principal con la ruta: 127.0.0.1:8080 (Figura 2).
    Figura 2. Acceso a la página principal.
  6. Ahora es necesario configurar usuario y contraseña del usuario administrador, para lo cual es necesario es ir a "/Library/apache-tomcat/conf/" y editar el archivo "tomcat-users.xml", ahora se debe agregar usuario y contraseña, necesarias para desplegar nuestras aplicaciones. Ingresar al final del archivo:
    <tomcat-users xmlns="http://tomcat.apache.org/xml"

                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
                  version="1.0">

    <role rolename="manager-gui"></role>
    <user username="admin" password="admin" roles="manager-gui"></user>
    </tomcat-users>
    El archivo debería quedar como en la imagen 3.
    Figura 3. Archivo tomcat-users.xml

  7. Hecho esto, es posible entrar a la página de administrador (figura 4), donde basta elegir nuestra aplicación y desplegarla
    Figura 4. Administrador de aplicaciones de Tomcat
  8. Teniendo en cuenta lo anterior, se debe mencionar que nuestro servidor permanecerá corriendo en tanto no se reinicie la máquina. Pero esto no representa mayor problema, ya que es perfectamente configurable arrancarlo junto con el sistema operativo, lo cual se verá en la segunda parte de este artículo, y que puedes consultar aquí
Espero esto te sea de utilidad :)

sábado, 5 de septiembre de 2015

Error en Xampp: Apache shutdown unexpectedly

Estoy seguro que si has llegado hasta aquí es porque te has topado con un error como el siguiente:

Error: Apache shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.
Check the "/xampp/apache/logs/error.log" file
and the Windows Event Viewer for more clues

Pues como no me gusta ir mucho por las ramas, explicaré brevemente que es lo que pasa:
"Los puertos que utiliza por defecto el servidor Apache y MySql (80 y 443) están siendo utilizados por otras aplicaciones instaladas en nuestro equipo."

Para solucionarlo, basta con modificar esa información en los archivos de configuración de ambos como sigue:
  1. Editar el archivo httpd.conf ubicado en "C:\Xammp\Apache\Conf" y sustituir
    1. ServerName localhost:80 por ServerName localhost:8080.
    2. Listen 80 por Listen 8080.
    3. En lo personal, solo hago una búsqueda y sustituyo con cuidado 80, por 8080.
  2. Editar el archivo httpd-ssl.conf ubicado en "C:\Xammp\Apache\Conf\Extra" y reemplazar:
    1. <VirtualHost _default_:443> por <VirtualHost _default_:4439>
    2. ServerName localhost:443 por ServerName localhost:4439
    3. Listen 443 por Listen 4439
    4. De nueva cuenta, solo hago una búsqueda y sustituyo con cuidado 443 por 4439

O si lo prefieren, XAMPP cuenta con un acceso directo a estos archivos, bastará solo con hacer click en el botón "Config", como se muestra en la imagen.




Lo siguiente a realizar es cerrar por completo el XAMPP, desde la barra de herramientas


Bastará abrir nuevamente e iniciar el servicio de Apache, con el botón Start.

Ahora solo necesitas ir en tu navegador a http://127.0.0.1:8080/, y debería mostrarte correctamente la página de inicio, como se ve en la imagen siguiente


Eso sería todo en este mini-instructivo, lo elegí porque es muy fastidioso y común toparse con este problema, y porque es bastante sencillo resolverlo. Espero haya sido de su agrado.

Saludos!