miércoles, junio 03, 2015

Cannot read property 'aDataSort' of undefined

Acabo de perder 45 min investigando el error Cannot read property 'aDataSort' of undefined al inicializar un DataTable de jQuery.

En google conseguí varias explicaciones de porque ocurre este error:

  • El elemento table no contiene los elementos thead o tbody
  • El elemento thead esta vacío
  • Hay mas columnas definidas en thead que las indicadas en la opción columns
  • Una o mas de las columnas definidas en columns hacen referencia a una columna que no existe en el dataset aplicado.

Ninguna de estas aplicaba a mi caso.  Cual resulto ser el problema? que en lugar de tener:


<table id="mytable">
...
<table>

tenia:

<table id="mytable" />
...
</table>


Notó el "/" extra en la apertura del nodo table?  si? pues a mi me llevó 45 min verlo!! :(





martes, marzo 17, 2015

OSX: Recuperar un arreglo RAID luego que uno de los discos ha fallado

La situación es esta:

1. Un Mac Mini Server con dos discos de 1 TB, configurados en RAID
2. Un dia, uno de los discos aparece marcado como FAILED y el RAID tiene estatus DEGRADATED.

Si estas en esta situación, seguramente ya habrás descubierto que es muy pero muy difícil encontrar en internet una guia de como solucionar este problema, principalmente porque todo el mundo parte del supuesto que el disco que presenta fallas se daño físicamente y debe ser sustituido.

En mi caso, el disco parecía funcionar correctamente desde el punto de vista físico, o al menos eso indicaba su status S.M.A.R.T.

Luego de un par de meses de investigar, al final tome la decisión de arriesgarme y esto fue lo que hice:


  1. Utilizando un disco externo, hice un respaldo del disco principal usando Carbon Copy Cloner.
  2. En Preferencias del Sistema, cambie el disco de arranque a fin de iniciar desde el disco externo.  La idea de esto es que si algo salía mal, podría reiniciar mi servidor desde el disco externo, formatear ambos discos, recrear el RAID y luego usar CCC para restaurar el disco desde el disco externo.
  3. Una vez iniciado OSX desde el disco externo, cargue la Utilidad de Discos
  4. Una vez ahi, seleccione el arreglo RAID, seleccione el disco con problemas y pulsando en "-" lo desasocie del arreglo RAID.
  5. Una vez retirado del RAID, procedi a formatear el disco con problemas 
  6. Una vez formateado, volvi a seleccionar el arreglo RAID y arrastre el disco nuevo a la ventana del arreglo RAID
  7. Una vez confirmado el disco nuevo como parte del RAID, seleccione el arreglo y pulse en "Rebuild".  
  8. Luego de dos horas, el arreglo RAID estaba de nuevo ONLINE
  9. Una vez completado el proceso, volvi a configurar el disco RAID como disco de arranque y reinicie el servidor.

Espero que esta pequeña guia sea de utilidad a otras personas que tengan que pasar por la misma situación.



sábado, febrero 28, 2015

OSX: Sacar una aplicación de la "cuarentena"


Cuando descargamos una aplicación desde internet (en lugar de hacerlo desde la App Store), OSX coloca dicha aplicación en "cuarentena".

Lo que en realidad ocurre es que OSX activa el flag de "quarantine" en esa aplicación, para indicar que aun no se sabe si debe confiar en dicha aplicación o no.

Cuando intentamos abrir una aplicación que tiene esta marca activa, OSX nos advierte de la situación con un diálogo que nos pide confirmar si efectivamente deseamos ejecutar dicha aplicación.

Hay varias formas de eliminar ese flag de la aplicación:


  • Ejecutar la aplicación y confirmar que deseamos confiar en ella
  • Mover la aplicación a la carpeta Aplicaciones

Sin embargo, a veces sucede que por una u otra razón, el flag no se elimina  a pesar de haber confirmado nuestra confianza en ella o haberla movido a la carpeta Aplicaciones, lo cual nos deja con la molestia de tener que estar confirmando la aplicación cada vez que la ejecutamos.

Para solucionar esto, necesitamos ejecutar el siguiente comando desde terminal:

xattr -d com.apple.quarantine /PATH/TO/APPLICATION


(tome en cuenta que dependiendo de sus permisos, puede necesitar ejecutar la instruccion con sudo)


Una vez ejecutada la instrucción, ya podremos abrir normalmente la aplicación sin tener que confirmarla.



Fuente: MacTips

viernes, febrero 06, 2015

No cualquiera puede ser programador

Este texto lo tome de un foro de VFP en Español, cortesía del amigo Saul Piña:

No todo el mundo puede llegar a ser programador. La programación no es un asunto para cualquiera. Es una tarea muy especializada que requiere la combinación de actitudes, conocimientos y un ambiente correcto para poder desarrollarse. En este artículo se explica algunas razones. Comencemos por el principio:

Hay que tener pasión para resolver problemas
  • La programación de software es para el individuo que siente pasión por resolver problemas. 
  • La experiencia indica que no todo el mundo le agrada la idea de andar resolviendo problemas. 
  • El proceso de resolver problemas implica tener una mente proactiva, lista para el trabajo duro y constante
  • La mayoría de las personas son perezosas en este sentido.
Toma tiempo dominar este arte
  • El que piense que ser programador es cuestión de un evento, no está pensando correctamente o lo están desinformando deliberadamente.
  • Llegar a ser un programador eficiente es producto de un proceso de aprendizaje que tarda años.
  • La programación es un arte que se aprende en modo "prueba y error", consumiendo años de esfuerzo y energías.
  • En pocas palabras, requiere trabajo duro y constante para llegar al nivel de ser productivo.
Hay que tener la actitud correcta
  • El programador debe tener una actitud positiva, y al mismo tiempo, una mente tenaz.
  • El proceso de escribir un código fuente es complejo,  envuelve tener pendiente multitudes de detalles técnicos (sintaxis, variables, procesos, bucles, entradas, salidas, etc.).
  • La misma naturaleza de la tarea hace que cada paso sea un desafío. Aquí no existen atajos.
No existe un asunto más tedioso y aburrido que "debuggear" y luchar contra ese "sentimiento de impotencia" que surge cuando tenemos un código fuente que no parece compilar nunca, aun cuando el código luce estar perfectamente escrito. Sí, todos hemos pasado por esto, al final sólo faltaba un "punto y coma" o cerrar una llave para que el código compilara. Recientemente, leí en un ensayo de Paul Graham, que el verdadero programador disfruta el proceso de  "debuggear". No lo ve como una pérdida de tiempo sino que disfruta cada segundo hasta encontrar la solución. Yo creo que Graham tiene razón. Si no te gusta "debuggear" quizás no sientes pasión por este arte.

Pensar "outside the box"
  • Para aprender programación es necesario pensar de manera abstracta.
  • El pensamiento abstracto es fácticamente demostrable que no le es atractivo al "Layman" o "Average Joe"
Recuerdo perfectamente en la universidad aprendiendo POO (Programación Orientada a Objetos) cuando el profesor explicaba los términos: herencia, polimorfismo, objeto, método, clase, etc. La mayoría de los estudiantes no captaban los conceptos. Era como si se les hablara en Mandarín. La abstracción requiere dos cosas:
  • (1) el método correcto de enseñanza
  • (2) una mente fértil.
Planificación y diseño, luego ejecución
  • Codificar es una cosa, planificar y diseñar la solución de un problema es otra cosa muy diferente.
  • La mayoría de las personas que he visto fracasar en el intento de convertirse en programadores tienen una característica en común: no tienen una sólida base de conocimientos en matemáticas y algoritmos.
  • Es cierto que la programación es un arte, pero al mismo tiempo también es una ciencia.
  • Es una combinación de creatividad y estructura mental. No están separadas, al contrario, coexisten indistintamente.
  • Para resolver problemas computacionales es necesario pensar "outside of the box", pero para aplicar esa solución creativa, y llevarla a la realidad, es necesario orden y estructura. Es aquí donde muchos fracasan.
  • No es posible llegar a una solución eficiente si no contamos con un algoritmo que aproveche de la mejor forma los recursos computacionales disponibles.
Hay que ser curioso. La mayoría de los programadores competentes son personas muy curiosas. Les gusta aprender constantemente y averiguar el porqué de las cosas. De hecho, la mayoría que conozco son autodidactas y no paran de aprender. La programación no es estática. Es una profesión que viene en constante evolución (nuevos lenguajes, IDE, Frameworks, etc.). Si no eres curioso y dependes de otras personas para aprender, la programación no es para ti.