Solucionar problema con certificados en Chrome (Windows 7)

Cabe aclarar que esto no es un tutorial para hacer seguro cualquier sitio, sino más bien una solución para un problema muy particular que ocurre en windows 7 con Chrome.

Si bien cada vez son menos los usuarios que usan Windows 7, todavía hay algunos que lo siguen instalando y usando cada vez que formatean su PC.

Si eres uno de ellos y usas el navegador Google Chrome, puede que alguna vez te topes con el siguiente problema:

Muchas páginas que antes del formateo eran seguras, después dejaron de serlo (te muestra en su lugar “La conexión no es privada”). Lo curioso es que únicamente ocurre en Chrome, ya que si abres estas páginas en otro navegador (como Mozilla Firefox), se mostrarán seguras.

la conexion no es privada

¿Y por qué ocurre esto?

Este problema ocurre simplemente porque Chrome usa los certificados raíz de Windows, por lo que si no los tenemos actualizados (debido a que formateamos la máquina), nos veremos envueltos con este problema sin importar el tipo de configuración que hagamos en el navegador chrome.

¿Y cómo se resuelve?

Es bastante simple, sólo hay que instalar la actualización respectiva (dejo los links abajo) para que windows automáticamente descargue y actualice los certificados raíz.

(Actualización para Windows 7 – 32 bits)
https://www.microsoft.com/es-ES/download/details.aspx?id=45588

(Actualización para Windows 7 – 64 bits)
https://www.microsoft.com/es-ES/download/details.aspx?id=45633

Una vez hayas instalado la actualización correspondiente, verás que los sitios volverán a mostrarse como seguros en Chrome, al igual que antes del formateo.

De este modo, podremos seguir usando Chrome en nuestra máquina… por ahora.

Solucionar problema: explorador lento en windows 7

Para empezar tengo instalado Windows 7 en mi portátil y con el tiempo el explorador se ha vuelto sumamente lento. Si bien a veces no lo es tanto, en otras la barra de progreso en la parte superior de las ventanas tarda toda una eternidad en cargarse.

Esto ocurre cuando:

  • Abro una simple carpeta
  • Hago click derecho en algún lado
  • Muevo/Copio archivos, por muy livianos que sean
  • Abro algún archivo desde un programa externo

Fue así que busqué alguna solución por la web y me topé con las mismas respuestas una y otra vez:

  • Desfragmentar el disco duro
  • Buscar y reparar errores en el disco mediante chkdsk
  • Asegurarse de que no haya algún virus o malware instalado en el ordenador
  • Disminuir la cantidad de programas que se inician automáticamente con el sistema
  • Reducir los efectos visuales del sistema operativo (intentar usar el “tema clásico de windows”)
  • Usar el programa CCleaner para deshacerse de archivos basura y errores en el registro

Hice caso a todas ellas al pie de la letra y aún así continuaba con el mismo problema: el explorador de windows seguía siendo lento.

Me parecía increíble que el explorador no hubiese mejorado ABSOLUTAMENTE NADA después de tantas cosas. Ya se imaginarán mi frustración…

homero_maldito_w7_se_mas_rapido

Quizás una salida rápida hubiera sido simplemente FORMATEAR la máquina. Sin embargo esta vez me encontraba con tiempo y decidí seguir indagando en el problema hasta encontrar una solución.


Solución

Afortunadamente después de unos días finalmente di con la solución: desactivar el servicio de búsqueda de windows.

Para lograr esto simplemente se deben seguir los siguientes pasos:

  1. Ir a inicio o abrir el Explorador de windows
  2. Click derecho en Equipo y click en Administrar
  3. Click en Servicios y Aplicaciones
  4. Click en Servicios. Una larga lista de servicios debería mostrarse ahora.
  5. Buscar el servicio Windows Search
  6. Click en Propiedades
  7. En donde dice “Tipo de inicio” seleccionar la opción Deshabilitado
  8. Click en Aceptar

deshabilitando_windows_search

Y listo. Tu explorador de windows ya no debería demorar tanto cuando navegues por los directorios.


Explicación

El servicio de búsqueda de windows consume muchísimos recursos y SIEMPRE está activo, de modo que mientras más archivos tengamos en nuestra computadora, más demorará en ejecutarse dicho servicio debido a que tiene más elementos que analizar e indexar en su base de datos.

Cabe mencionar que es gracias a este servicio que al realizar búsquedas en windows 7 los elementos aparecen mucho más rápido que en las anteriores versiones de windows (como el XP). Sin embargo como contraparte ésto vuelve más lento el explorador de windows con el tiempo, así que no es aconsejable tenerlo activado (cosa que viene por defecto).

Y si eres como yo, alguien que frecuentemente necesita realizar búsquedas rápidas en el ordenador, pues mi consejo es que te instales un software gratuito como “Everything” (lo puedes descargar aquí), el cual realiza fácilmente búsquedas en windows de forma mucho más rápida, completa y eficiente que la que viene con el sistema operativo.

En fin, espero que el artículo te haya sido útil y hayas podido mejorar el rendimiento de tu equipo, así sea un poco.

Como optimizar una base de datos Mysql

Hace unas semanas tuve la tarea de optimizar una base de datos mysql, así que hoy voy a compartir mi experiencia y describir lo que hice para lograrlo.

Cosas de las que NO voy a hablar y que debes revisar antes de seguir:

  • Problemas de espacio con la base de datos: se supone que si tu página web está en continuo crecimiento, debes tener un buen plan en tu hosting para no tener que preocuparte por problemas de espacio en disco. En mi caso, el sitio en el que trabajé contaba con un buen plan de VPS (Servidor Virtual Privado), así que el espacio no era el problema (la base de datos podría pesar tantos GB como quisiera).
  • Normalización de DB: si has aplicado algo de ingeniería en tu base de datos desde el principio, no tendrías que estar viendo este detalle ahora, salvo por supuesto que se haya realizado grandes cambios en el sitio y se tenga que “reestructurar” la base de datos. En cualquier caso, no se hablará de esto aquí porque hay mucha información en internet al respecto.
  • Problemas de servidor: si eres el administrador del sitio, debes asegurarte que el problema no tiene nada que ver con tu servidor o servicio de hosting. Por ejemplo, hostings como Godaddy son conocidos por ser de los peores del mercado (aun con la enorme publicidad con la que cuenta), así que antes de realizar cualquier acción brusca en tu sitio web, cerciórate primero que el problema no sea ése.
  • Crear un backup de tu base de datos: Esto debería estar de forma implícita desde el comienzo de cualquier artículo o tutorial. Sin importar qué “optimización” vayas a realizar, o qué tan confiable sea el artículo que te indique cambios a realizar en una base de datos, por al amor de Dios SIEMPRE haz una copia de respaldo (backup) de toda tu base de datos.

Entonces, ¿cuál fue exactamente el problema que tuve?

El sitio web en el que trabajé era enorme y las tablas donde se guardaban los detalles de las órdenes de compra, simplemente no dejaban de crecer. La cantidad de tuplas que almacenaba cada tabla iba desde 70k hasta 300k, las cuales continuaban aumentando cada día.

Esto ocasionaba que el sitio web se colgara o se pusiera muy lento cuando comenzaban a ejecutarse consultas relacionadas a las compras, como por ejemplo: historial de compras del cliente, estadísticas de la tienda, reportes diversos, etc.

En algunos casos lo recomendable sería simplemente subir a un plan superior de VPS, pero después de analizar su base de datos me di cuenta que aquello no serviría de nada y el sitio seguiría lento.

Quizás alguno de ustedes se haya hecho la pregunta:

Hey, si tu problema solamente radica en las órdenes de compra, ¿entonces por qué simplemente no eliminaste las órdenes de compras viejas? 

Lastimosamente eso no se puede realizar en la mayoría de los casos, ya que como dije antes toda esa información es de bastante utilidad para el sitio al sacar historiales y estadísticas diversas, ya sea para los clientes como también para los administradores del sitio. Además, las bases de datos están hechas precisamente para eso: ALMACENAR DATOS, de modo que no se debería ELIMINAR nada, salvo por supuesto “información basura” que realmente no tenga utilidad alguna en el sitio.

Bueno, ya le di demasiadas vueltas al asunto. AHORA VAYAMOS AL GRANO!


Solución

Después de buscar bastante por la red y preguntar en foros, finalmente logré optimizar la base de datos realizando únicamente dos acciones:

1) Cambiar el motor de almacenamiento a InnoDB

La base de datos del sitio estaba usando el motor de almacenamiento MyISAM, el cual tenía entendido proporcionaba una alta velocidad de acceso, sobre todo cuando solamente se necesita “leer datos” y no así en la “escritura”. Así que como el sitio se lenteaba al leer datos para los reportes y estadísticas, pues pensé que el problema no tenía que ver con MyISAM.

Sin embargo llegué a descubrir que lo más recomendable era siempre manejar InnoDB, aunque lo más experimentados en el tema saben en qué casos conviene mejor usar MyISAM. En todo caso, si no sabes qué motor de almacenamiento usar en mysql, ve siempre por InnoDB.

Personalmente al principio creí que iba a ser mucho más lento el sitio con InnoDB, pero todas mis dudas y temores fueron disueltos cuando apliqué la última acción que describo abajo.

2) Agregar una gran cantidad de índices

He aquí el factor más importante para optimizar una base de datos… la creación de índices.

Si bien ya sabía que los índices agilizan bastante las consultas, me di cuenta de mi error al percatarme de que no tenía una buena cantidad de índices en mi base de datos.

Sin entrar en muchos detalles, les diré que existen varios tipos de índices, pero de momento solo nos interesarán los siguientes dos:

  • Índices de claves primarias: es decir el primary key con el que estoy seguro que cuentan todas sus bases de datos. No pueden tener valores duplicados.
  • Índices ordinarios: aquellos que son creados de forma “manual” y que no tienen nada que ver con la llave primaria de la tabla. Estos índices pueden tener valores duplicados siempre y cuando su campo no tenga el atributo UNIQUE.

Para optimizar nuestra base de datos, tendremos que crear una buena cantidad de índices “ordinarios” para agilizar nuestras consultas.


¿Y cómo creo índices para mi tabla?

Lo primero que debes hacer es IDENTIFICAR qué campos deberían tener índices. Esto debe ser analizado para cada tabla. Por lo general deberías crear un índice a todo campo o columna que trabaje como llave foráneaforeign key. Es decir, aquellos campos que sirven para conectar tus tablas en consultas matriciales.

Por ejemplo, si tengo la tabla “order_detail” y uno de sus campos es “customer_id”, entonces obviamente que a través del campo “customer_id” puedo obtener información de una tabla “customer_information” realizando una consulta matricial.

indices_tabla_ejemplo

Por lo tanto, yo debería agregar un índice para este campo realizando la siguiente consulta:


ALTER TABLE `order_detail` ADD INDEX ( `customer_id` ) ;

Y listo! El índice se creará correctamente en la base de datos. Esta consulta sólo debe realizarse una sola vez, similar a la creación de llaves primarias.

Esto nos servirá de mucho cuando se ejecute una consulta que involucren las tablas “order_detail” y “customer_information”, ya que gracias al índice creado ahora se ejecutará mucho más rápido sin importar la cantidad de tuplas que tengan dichas tablas (lean acerca de índices si quieren saber el por qué).

Ahora sólo toca crear los índices que vean convenientes para cada tabla, ya que uno solo no basta.

Por ejemplo, en la misma tabla “order_detail” yo podría tener campos como “address_id”, “shipping_id”, “coupon_id”, etc. de modo que me correspondería crear un índice para cada campo mencionado. Luego debería ponerme a examinar cada tabla de la base de datos y crear los índices respectivos.

Y eso es todo. Una vez hayan agregado una buena cantidad de índices (si su DB es grande), verán los GRANDES RESULTADOS al volver a navegar en su sitio web o sistema: historiales, reportes, estadísticas y toda información extensa será ejecutada en un abrir y cerrar de ojos.

mission-complete-stamp-small


Notas finales

  • En mi caso tuve que agregar alrededor de 300 índices para optimizar mi base de datos.
  • Si el nombre de todos los campos de tu base de datos siguen algún estándar o nomenclatura, te darás cuenta que puedes agilizar el proceso de creación de índices mediante un simple script PHP (tarea para la casa). Todo depende del patrón que veas en los nombres, por ejemplo: tu script podría crear un índice en todos los campos cuyo nombre termine en “_id”.
  • Si tu base de datos pesa demasiado y te toma mucho tiempo crear un backup, una buena alternativa seria usar SSH para conectarte de manera remota al servidor de tu sitio y de esta forma crear un backup a través de mysqldump. Obviamente, todo esto tiene que ser hecho desde la consola/terminal (como Putty) y a través de comandos. Quizás uno de estos días cree un artículo más detallado sobre este tema.

Migrar/Copiar archivos de un servidor a otro

Continuando con el tema de migraciones (la semana pasada mostré en un artículo cómo importar una base de datos de gran tamaño), esta vez quiero mostrarles un método simple para migrar contenido de un servidor a otro.

copy_files

Hago esto porque he visto que para migrar un sitio algunos “programadores” descargan todo el sitio en su computadora y luego lo suben al servidor destino, ya sea por FTP o a través del Cpanel.

Como en Bolivia el internet es un asco (y encima caro) a diferencia de nuestros países vecinos, pues no hace falta decir que el proceso mencionado es muy ineficiente.

Es por ello que un simple script en PHP va a simplificarnos este proceso y hará en segundos (o minutos dependiendo del tamaño del sitio) algo que nos tomaría mucho más tiempo en hacerlo de la forma anteriormente descrita.

¿Qué necesitamos?

Lo único que vamos a necesitar es:

–  La URL donde podamos descargar el archivo comprimido de lo que queremos transferir o copiar.

Script PHP que realizará el proceso de copiado a través de la función copy

Instrucciones

1) Lo primero es comprimir todo el contenido del sitio desde el cpanel.

2) Una vez tengamos el archivo zip del contenido a migrar, verificamos si este archivo es accesible desde la URL respectiva del servidor origen.

Por ejemplo, ingresando a:

www.tu-sitio-web-origen.com/contenido-comprimido.zip

debería aparecerte la opción de descargar el archivo. Si es así, esto quiere decir que la ruta es accesible de modo que podemos proceder con el siguiente paso.

Recuerda, no descargues el archivo puesto que eso es lo que queremos evitar. La idea es que el script haga el copiado del archivo directamente desde el servidor destino, sin necesidad de pasar por tu computadora en el proceso.

3) Lo siguiente es crear nuestro script PHP para realizar el proceso de copiado:

 

<?php
$remote_file_url = 'http://tu-sitio-web-origen.com/contenido-comprimido.zip';
$local_file = 'archivo-destino.zip';
$copy = copy($remote_file_url, $local_file);

if ($copy) {
    echo "Archivo copiado exitosamente!";
} else {
    echo "Operacion fallida: El archivo no se copio...";
}
?>

 

4) Una vez tengamos nuestro archivo PHP creado (por ejemplo: mi-script.php), lo subimos al servidor destino (por cpanel o FTP) y lo ejecutamos ingresando a la URL correspondiente.

Por ejemplo:

www.tu-sitio-web-destino.com/mi-script.php

Y eso es todo. Ahora sólo nos tocará esperar. Este tiempo dependerá mucho del tamaño del archivo comprimido a copiar y de la velocidad de tu servidor.

No te preocupes si tu velocidad de internet es lenta ya que el script, al estar en el servidor, utilizará la velocidad del hosting y no la tuya. Es decir que incluso si tienes una velocidad de 128 Kbps no debería sorprenderte el hecho de que el script copie varios Gigabytes en tan solo un par de segundos o minutos.

Una vez el script haya terminado su tarea y el mensaje que te aparezca sea de éxito, lo único que quedará por hacer es revisar en tu servidor destino la ubicación donde tienes el script para ver ahí mismo a tu nuevo archivo zip perfectamente copiado. A partir de ese momento, lo que resta quedará está en tus manos.

Espero que esto te haya sido útil. No te olvides de dejar tu comentario.

Como importar bases de datos pesadas con BigDump

Si estás tratando de importar una base de datos de gran tamaño (digamos unos 300 MB), incluso comprimida es posible que tengas problemas en importarla desde PhpMyAdmin.

Una solución podría ser simplemente crear un ticket en tu servicio de hosting para que ellos hagan la importación por tí. Esto puede ser útil para aquellas bases de datos que pesen varios Gigabytes.

Ahora bien, si tu base de datos no pesa tanto, una solución más simple podría ser usar el maravilloso script llamado BigDump. Para ello primero asegúrate de contar con el archivo sql o sql.gz de tu base de datos a importar.

bigdump-header-web

Pasos para usar BigDump

1) Subir tu archivo sql o sql.gz a tu servidor desde el gestor de archivos de tu Cpanel o por FTP (por ej: yo subiré mi archivo basededatos.sql.gz a una carpeta “tmp”).

2) Descargar el archivo bigdump. Puedes hacerlo desde AQUI o desde el sitio web del creador.

3) Descomprime el archivo bigdump.zip y abre el archivo bigdump.php con el editor de tu preferencia (Notepad++, Sublime Text, etc).

4) Modificar los valores de configuración del bigdump.php ubicados al inicio, los cuales corresponden al nombre de la base de datos, el usuario y contraseña de la misma.

db_config
Ejemplo de configuración

5) Modificar la variable $upload_dir para incluir la carpeta donde hemos subido nuestro archivo sql.gz (si lo subiste a la raíz entonces sáltate al siguiente paso). En mi caso, la carpeta donde subí mi archivo basededatos.sql.gz se llama “tmp”

upload_dir

6) Ejecutar el script en tu servidor (por ejemplo: misitio.com/bigdump.php)

Si toda la información que configuraste es correcta, debería aparecerte algo así:

index
(click en la imagen para ampliar)

Como se puede apreciar, mi archivo basededatos.sql.gz aparece listado, de modo que lo único que falta por hacer es simplemente hacer click en Start Import y esperar a que la importación termine.

Dependiendo del tamaño del archivo, es posible que este proceso tome desde algunos minutos hasta horas enteras. En mi caso, tomó alrededor de 40 minutos procesar un archivo de unos 250 MB (comprimido pesa 30 MB)

completado
(click en la imagen para ampliar)

Como ven, este simple y poderoso script puede sacarnos de un apuro como lo es la importación de base de datos de gran tamaño.

Solucionar pantallazo azul de la muerte en Windows 7

A todos los usuarios de windows alguna vez nos ha aparecido el famoso “pantallazo azul de la muerte” seguido de un reinicio automático. A veces el error no es tan grave y después del reinicio podremos seguir usando nuestra computadora normalmente. Sin embargo, otras veces el error es tal que no nos dejará llegar ni a la pantalla de bienvenida.

El fin de semana pasado me ocurrió este problema con mi laptop, a pesar de la noche antes de apagarla no instalé ningún programa de ningún tipo, ni tampoco agregué ningún hardware nuevo ni tampoco estuve conectado a internet. Aún así, la mañana siguiente me topé con la siguiente pantalla cuando encendí mi laptop:

blue-screen-of-death

Después de putear por un buen rato (tenía mucho trabajo por hacer) comencé a proceder con las típicas acciones para intentar acceder al sistema operativo de windows y ver qué estaba fallando.

– Intenté ingresar al modo a prueba de errores (FALLÓ)

– Intenté utilizar la opción de reparación de mi portátil HP (FALLÓ)

– Intenté acceder a mi disco duro de windows (C:) desde un sistema operativo Linux que ya tenía instalado en otra partición (FALLÓ: desde linux me saltó un error informándome que no se podía acceder a la partición de windows)

Finalmente tomé la decisión de FORMATEAR mi computadora para reinstalar windows (otra vez) desde un DVD… ¿y qué creen?… sorpresa, sorpresa… también FALLÓ (cuando daba click en “Instalar ahora” la pantalla se quedaba azul por más de una hora).

Bueno, ya se imaginarán como me sentí ese momento y todo era por culpa de un pequeño error llamado: UNMOUNTABLE BOOT VOLUME


SOLUCIÓN

Sin entrar en muchos rodeos, lo que hice para solucionar el problema fue:

1) Insertar el CD/DVD de Windows 7 y bootear desde allí.

2) Cuando aparezca la siguiente pantalla:

instalacion-windows-7

Presionar Shift + F10 para abrir la terminal de comandos.

3) En la terminal escribir los siguientes comandos (en este orden):

Comando #1:   chkdsk d: /f

Comando #2:   d:

Comando #3:   bootrec /fixmbr

Comando #4:   bootrec /fixboot

Comando #5:   exit

4) Reiniciar la computadora y bootearla normalmente (extraer el CD/DVD de windows 7)

Ahora tu computadora debería poder iniciarse normalmente sin el maldito pantallazo azul de la muerte.


Observaciones y notas finales

– En los comandos hice uso de la letra d: para hacer referencia a la unidad c: que es donde normalmente tenemos instalado windows. En otras palabras, como estamos booteando desde el DVD, las letras de las particiones cambian, de modo que d: es para c:.  Si aun tienes dudas, puedes aplicar el comando chkdsk d: /f  para tus demás particiones sin temor a arruinarlas (por el contrario, “reparará” los sectores defectuosos).

– Si tienes instalada una distribución Linux (por ejemplo “Ubuntu”) notarás que en el inicio ya no te aparecerá la opción de bootear desde Linux. Para arreglar esto deberás usar la herramienta llamada “Boot Repair Disk”, la cual deberás quemar en un CD/DVD y bootear desde allí. Lo que sigue después es simplemente escoger la primera opción (Recommended repair) y se reparará automáticamente cualquier problema de booteo.

– Si la pantalla azul persiste aun después de seguir los pasos mencionados, todavía quedan dos o tres posibles soluciones que puedes probar.  Las mismas se detallan en la siguiente página (en inglés):

http://www.deskdecode.com/how-to-fix-bsod-unmountable-boot-volume-stop-0x000000ed/

Problema común al subir archivos con Filezilla

Antes de hablar de este tema, primero lee las siguientes preguntas para saber si este artículo tiene la respuesta que estás buscando:

¿Tienes Windows y usas Filezilla para subir tus archivos por FTP?


¿No entiendes cómo es posible que un sitio que te funciona bien en tu localhost te está lanzando errores en el sitio en vivo?

Me refiero a errores como:

Parse error: syntax error, unexpected ‘function’ (T_FUNCTION) in /home/mweb/public_html/mi_web/wp-content/themes/th-default/inc/custom.php on line 1


¿Te diste cuenta que a veces algunos archivos se suben “mal” al servidor?

Con “mal” me refiero a que el contenido de los archivos a veces se comprimen en una sola línea.

Por ejemplo:

Archivo en tu computadora (original) con 29 líneas:

archivo_original

Archivo en el servidor (subido con Filezilla) con 1 sola línea:

archivo_mal_subido


¿Te cansaste de buscar el problema y estás a punto de enviar todo al demonio?


Si todo lo anteriormente dicho te describe perfectamente, entonces creo saber lo que ocurre y esta es la solución:

1. Ve a Filezilla y dirígete al menú Transferencia -> Tipo de transferencia.

2. Cambia la configuración a Binario (por defecto está seleccionado en Automático).

3. Prueba nuevamente subir tus archivos al servidor.

  filezilla_configuracion_transferencia

Con esto tus archivos deberían subirse correctamente a partir de ahora.


Explicación:

A veces al subir un archivo por FTP con Filezilla suele haber un problema con los saltos de línea, aunque para ser más exacto el problema es con los retorno de carro (CR), trayendo como resultado que el archivo se suba al servidor sin los retorno de carro (CR) ni los saltos de linea (LF).

Naturalmente si abres cualquier archivo que tenga saltos de línea en tu editor preferido no verás nada fuera de lo usual puesto que estos caracteres están ocultos. Sin embargo, si los abres con algún editor como el Notepad++ y habilitas la opción de Mostrar todos los caracteres podrás ver los caracteres usados para realizar los saltos de línea: CR y LF

cr_lf

El problema de Filezilla es con los archivos que no utilizan LF para realizar los saltos de línea, como por ejemplo el archivo que mostré al principio:

archivo_original_CR

Como ven, el archivo utiliza únicamente CR y si lo subimos a nuestro servidor con Filezilla, con el Tipo de transferencia ASCII, entonces todos los CR serán eliminados y como resultado todo el contenido del archivo estará ajustado en una sola línea.

Por defecto Filezilla tiene configuradas estas transferencias en Automático, así que para evitar estos problemas es recomendable siempre escoger la transferencia Binaria.