Cuando el otro día escribí sobre PHPDocumentor, en los comentarios se mencionó que podría crear un post sobre las distintas notaciones que se utilizan comúnmente.

Lo primero que debo mencionar es que existen pocas notaciones, la verdad es que yo sólo conocía dos, y grande fue mi sorpresa cuando me di cuenta que sólo existían cuatro. Sin embargo, no deja de llamarme la atención la gran cantidad de convenciones que existen alrededor de las notaciones, que por lo general es una convención en cada empresa, adaptado específicamente a sus necesidades y requerimientos.

Hacía ya algún tiempo atrás, necesitaba un listado (actualizado) de las regiones y ciudades (o mejor dicho comunas, ya que no existen ciudades en Chile) en SQL y a pesar de que podría ser bastante común, me costó encontrar alguna. Así que les presento una página que de casualidad corresponde a un amigo mío que se dio el trabajo de agregar y corregir el SQL para distintos motores y en distintos formatos de acuerdo al decreto 817 del 20 de mayo del 2010.

Revisen el siguiente post: Lacosox
Y por supuesto, también queda una copia local aquí por si se cae el primer sitio: Archivo .zip

Update 2016-02-16

Como nos indica knxroot en los comentarios de esta entrada, ahora existe un repositorio público en GitHub donde podrán encontrar información más actualizada que la que está en este post. Vayan, revisen, comenten y corrigan por allá para hacer de esta base de datos la mejor disponible!

Es increíble cómo hoy se celebran 6 años desde que fue ingresado un feature request a MySQL Bugs pidiendo que se implemente una función que de seguro es importante para muchos: los microsegundos en TIMESTAMP y otros relacionados.

Si bien es cierto que por lo general no se necesita tanta precisión, de repente es necesario, ya sea para propósitos de debug o actividad en el sistema, considerando que es un sistema que ocupan muchas personas. Imaginemos por un momento que administramos Facebook y ocurre lo peor que te puede pasar: uno de los balanceadores de carga entiende mal un request y arma un castillo de naipes sobrecargando paulatinamente cada uno de los servidores.

Como siempre, navego en busca de información interesante, y aquí les traigo algunos links de interés (que además me servirán para desocupar un par de pestañas del navegador). Están ordenadas por temática, y hay de todo un poco, desde generadores de passwords hasta guías sobre cómo hacer extensiones de classes para Magento.

Trabajando en la empresa privada, uno se da cuenta de cuán importante resulta llegar a ser optimizar bien una tabla, ya sea organizándola al estilo “sábana” (mucha repetición de registros, pero super rápido al tener un par de índices livianos bien ubicados), o bien crearla con un estilo EAV (permite crear infinitas propiedades de un objeto sin crear tablas gigantes que guarden ese atributo). Ninguna de las dos es ideal ya que en la primera si bien es cierto se puede hacer una sola consulta que se genere rápidamente se repiten demasiados datos y la segunda es, por lo general, un parto hacer consultas optimizadas ya que el modelo en sí no lo permite fácilmente.

Sin embargo, este post no se tratará de modelos de datos, sino más bien un tipo de consulta en particular frente a una problemática particular y que permitirá, en una sola consulta, insertar un registro nuevo a partir de un select.

No fue sino hasta el otro día que le encontré un propósito y una utilidad a la documentación bien hecha.

Todo surgió debido a que andaba buscando un método determinado que había escrito una vez hace 5 meses atrás y que podría haber estado dentro de un par de classes o bien dentro de un par de archivos de distintas funciones: en resumen, no tenía idea de cómo se llamaba ni menos cómo se ocupaba. Incluso ni siquiera estaba seguro de si efectivamente podría hacer lo que tenía pensado ya que la función que había escrito hacía algo muy parecido, pero podría ser que no hiciera lo mismo. Traté de ubicarla mediante diversos términos con este script pero no hubo caso. Ya casi dándome por vencido se me ocurrió la idea de que en realidad la documentación del programa estaba mal hecha y con múltiples formatos distintos: había que unificar todo.

Cuántas veces no les ha pasado que saben que una cierta cadena empieza con “hola_mun” pero no se acuerdan en qué termina ni menos en qué archivo? También: han tenido alguna vez que hacer cambios en varios archivos del tipo “$hola” a “$chao[‘hola’]” y que sucede que esa variable está repartida en 200 archivos por distintos directorios?

Bueno, si eso les ha pasado y ocupan Linux, ha llegado su día de suerte: creé un script (para la terminal) que busca en diversos lados por una cadena determinada e imprime la salida. Pero qué sucede en aquellos casos donde tenemos que omitir ciertas carpetas temporales como por ejemplo las que crea subversion? Bueno, este script también considera eso. Haz click en leer más para conocer el script.

Estos meses he estado bastante ocupado trabajando, y es por lo mismo que no he escrito nada. Sin embargo, he estado atento a sus comentarios y aprobándolos cuando hay.

La solución propuesta hoy me surgió en un momento de extrema ociosidad y flojera, buscando una forma de hacerme la vida más fácil: alguien más tendría que haber tenido la duda de que era posible; en MySQL; insertar un registro, pero si éste registro ya estaba, actualizarlo sin tener que:

  • Hacer la consulta inicial

  • Verificar que exista

  • Actualizar el registro en vez de insertarlo

  • Revisar que se actualizó correctamente

Bueno, esto es posible, y es bastante fácil de implementar. Para saber cómo, siga leyendo :)

Sé que este post lo más probable es que no le interesa a nadie, pero de todas formas siempre es bueno celebrar un límite mental, el cual es, en este caso, el tráfico de 1.000 visitas únicas mensuales. Aunque el 80% de las visitas abandonan la página, hay un puñado de 25% que se queda frecuentemente dando vueltas en el sitio y les agradezco :)

Sin más ni menos, les presento el SS que demuestra lo que estoy diciendo: [singlepic id=12 w=320 h=240 float=center]

Estaba anoche trabajando en varias cosas, entre ellas ver la forma de actualizar mi instalación de Wordpress. Como siempre se aconseja respaldar todo, respaldé todo lo que eran datos del disco y por supuesto ejecuté lo que yo creía que era un mysqldump (para respaldar) pero me equivoqué en esto último, restaurando el último respaldo que saqué cuando me cambié de hosting, es decir, hubo un rollback de cerca de 3 meses. Sucede que siempre he tenido la costumbre de respaldar periódicamente la base de datos: para esto, ejecuto un simple “mysqldump -p db_wp > respaldo.sql” mediante la cual rescato la base de datos “db_wp” a respaldo.sql. En un Linux cualquiera, para no ingresar el comando a cada rato, es simplemente flecha hacia arriba durante un rato para encontrar el comando y darle enter. Hasta ahí no hay ningún problema, sólo que hace poco me cambié de hosting y nunca había hecho un respaldo: sí había importado la base de datos cuando me cambié por lo que el comando guardado era “mysql -p db_wp < respaldo.sql”. Muy poca diferencia para las dos tremendas diferencias que hay entre ambas.

u
n
r
e
a
l
4
u
.
c
o
m

Camilo Sperberg es Ingeniero Informático especializado en Linux y PHP. Éste es su blog oficial y aquí podrá leer mucha más información acerca de temáticas variadas en el bajo mundillo de la informática relacionada con esos tópicos

Because my reality... is just your virtuality

Camilo Sperberg

Debido a la gran cantidad de guiños y referencias relacionadas con el mundo informático, esta sección permanecerá siempre incompleta, al menos hasta que se complete

Futurama fan page

Oh, i'm very confortable with my sexuality, i just don't want to be slapped in the face with THEIR sexuality

Roy Trenneman en The IT Crowd S02E01