Cómo recuperar la clave de tu MacBook en Mac OS X

¿Compraste una Mac de uso y ahora no tienes la clave de Administrador?

Este problema es muy recurrente, y bien puede ser que nunca hayas tenido la clave o bien que la olvidaras, pero ¡que no cunda el pánico! Aquí tienes la solución:

1.- Primero tienes que arrancar tu MacBook en modo consola, o el llamado “Single user mode” ¿cómo? para hacer esto deberás reiniciar tu Mac y mantener presionadas las teclas “Comando + S” (Comando o command es la tecla que está justo antes de la tecla espacio) durante el arranque, como verás la Mac empezará arrancar mostrando en modo consola.

2.- Hay que tener mucho cuidado con lo que hacemos en modo consola, lo primero que tenemos que hacer aquí es montar la unidad a la que queremos acceder, normalmente será tu disco principal el cual se nombra como “/”. El comando que debes ejecutar es:

sudo mount -uw /

 

3.- Ahora solo necesitamos borrar un archivo que es el que hace que la Mac detecte que ya se inició por primera vez. El comando a ejecutar es el siguiente:

rm -rf /var/db/.AppleSetupDone

Hay que tener cuidado con este comando ya que tenemos permisos de administrador y no queremos borrar otra cosa salvo ese archivo en particular.

4.- Por último utilizaremos el comando para reiniciar la computadora:

reboot

Ya una vez reiniciada tu Mac comenzará el proceso de configurar tu computadora como si fuera un nuevo equipo y es entonces cuando te pedirá crear un nuevo usuario en donde podrás volver a tener acceso a todo ya que serás nuevamente administrador. Aunque si intentas crear una cuenta con el mismo nombre de la que perdiste el password no te dejará hacerlo, ya que el usuario aún no ha sido borrado del sistema, lo que puedes hacer es crear una cuenta con un nombre diferente y después quitarle el password a la que quieres recuperar y setear uno nuevo.

Espero la información les sirva para recuperar sus contraseñas y disfrutar de su Mac Wink

Solución al error 528 en Informix – Maximum output rowsize (32767) exceeded

En mi trabajo actual utilizan el gestor de Base de Datos de Informix para algunos de los sistemas en los que desarrollamos, y es aquí donde me encontré una vez con un error como el siguiente al ejecutar una consulta:

 [Error Code: -528, SQL State: IX000]  Maximum output rowsize (32767) exceeded.

El problema es que la documentación de Informix tanto oficial como de los propios usuarios suele estar en su mayoría en Inglés y a veces aunque uno entienda el idioma de Shakespeare también suele haber muchas preguntas en foros sin respuestas que lo dejan a uno más frustrado que al principio. Es por eso que escribo el post para poder brindar alguna ayuda a quien tenga el mismo problema.

Dicho error solo se me presentaba con una consulta que tenía la particularidad de hacer un SELECT con muchos campos solicitados, al final encontré una explicación en una página que listaba los errores de Informix:

528 Maximum output rowsize max-size exceeded.

The total number of bytes that this statement selects exceeds the maximum that can be passed between the database server and the program. Make sure that the columns selected are the ones that you intended. Check that you have not named some very wide character column by mistake, neglected to specify a substring, or specified too long a substring. If the selection is what you require, rewrite this SELECT statement into two or more statements, each of which selects only some of the fields. If it is a join of several tables, you might best select all desired data INTO TEMP; then select individual columns of the temporary table. If this is a fetch via a cursor in a program, you might revise the program as follows. First, change the cursor to select only the ROWID of the desired row. Second, augment the FETCH statement with a series of SELECT statements, each of which selects one or a few columns WHERE ROWID = the saved row ID.

Lo cual explica básicamente que este error aparece debido a que se excede el límite de bytes que pueden ser transferidos desde el servidor de base de datos y el programa o la aplicación que realiza la consulta, la cual está limitada a 32k (esto no lo dice ahí pero se infiere en el error), lo que se recomienda es lo lógico, lo cual es bien quitar campos en el SELECT que no vayamos a utilizar, y de no ser posible esto entonces dividir la consulta en dos o más sentencias, de esta manera cada consulta se ejecutará correctamente y luego en nuestra aplicación tendríamos que hacer una fusión de los datos devueltos en cada una de las consultas. También ofrece una opción un poco más complicada referente a pasar la información a una tabla temporal utilizando el ROWID, pero debido a la complicación que conlleva no se me hace una opción viable.

En resumen el error solo se muestra cuando una fila es demasiado pesada para poder transferirse del servidor a la aplicación, esto también puede pasar debido a que los campos solicitados son demasiado grandes, es decir si tenemos campos de texto con mucha capacidad y llamamos muchos entonces provocaremos que se exceda este límite, por lo que otra solución puede ser en la consulta sacar un substring límitado a la información necesaria de cada uno de los campos de texto que tengan capacidad para más caracteres de los que en realidad utilizamos. O bien cambiar la tabla/tablas modificando los campos con capacidades menores de ser posible.

Espero les sirva la información.

Centrar un div horizontal en Internet Explorer y navegadores actuales

Una de las tareas más comunes al momento de programar o diseñar aplicaciones web es el de centrar el contenido para que este se vea más agradable a la vista, sin embargo una tarea tan sencilla puede complicarse cuando se busca una correcta visibilidad en todos los navegadores posibles, ya sea el afamado Chrome, el siempre confiable Firefox o hasta la oveja negra de Internet Explorer.

Quizá muchos de ustedes aún utilicen tablas para la maquetación de sus diseños, sin embargo esta practica es cada vez menos utilizada por la complejidad de mantenimiento y por el uso de nuevas tecnologías web como es el caso de CSS (Hojas de estilo en cascada).

Pues bien, vamos a suponer que tenemos algo como esto:

<html>
<head>
      <title>Pagina centrada </title>
</head>
<body>
     <div>Esto es lo que vamos a centrar </div>
</body>
</html>

Es una estructura simple de una página web, lo que vamos a centrar se encuentra en el “div”, para centrarlo en la mayoría de los navegadores modernos lo podemos hacer con estilos CSS, para ello agregamos el estilo a nuestra página web entre las etiquetas <head> y </head>

<link rel="stylesheet" type="text/css" href="estilo.css" />

 

Donde “estilo.css” será nuestra hoja de estilos donde definiremos lo siguiente:

#contenido{
    width: 800px; // Aquí puedes definir el ancho que quieras
    margin-left:auto;
    margin-right:auto;
}

Con esto solo faltaría agregar el estilo a nuestro div, cambiando esto:

<div>Esto es lo que vamos a centrar </div>

Por esto:

<div id="contenido">Esto es lo que vamos a centrar </div>

Guardando nuestros archivos y abriendo nuestro archivo HTML en cualquier navegador actual debe quedar nuestro contenido centrado, y todo lo que pongamos dentro del div que creamos se centrará también horizontalmente a la página, desde texto hasta imágenes.

El problema radica cuando queremos que esto funcione también para Internet Explorer en sus versiones más antiguas (6 , 7 , 8… ) y esto es porque es un navegador que no respeta los estándares correctamente. por lo tanto tendremos que hacer un pequeño “hack” para hacer que funcione también con este navegador.

Tendremos que cambiar nuestro archivo de “estilos.css” por algo como esto:

body{
  text-align:center; // Este es el hack para hacer que Internet Explorer centre el contenido del div
}
#contenido{
  text-align:left; // Regresamos el texto a la izquierda para que el contenido quede centrado pero el texto alineado a la izquierda. 
  width: 800px; // Aquí puedes definir el ancho que quieras
  margin-left:auto;
  margin-right:auto;
}

Es un pequeño paso más para que nuestra página sea compatible con los navegadores actuales y con IE, pero con esto tendremos centrado nuestro contenido sin necesidad de utilizar las obsoletas tablas para maquetar.

Espero les haya sido útil y entendible la explicación.

Eliminar todos los registros de una tabla en MySQL / Vaciar una tabla

Si queremos eliminar todos los registros de una tabla en MySql tenemos dos opciones, la primera es tan solo utilizar nuestra sentencia “DELETE” de siempre solo que sin ningún “WHERE”, haciendo que se borren todos los datos de la tabla:

 DELETE FROM mi_tabla

Pero también podemos optar por la alternativa que es mediante la declaración “TRUNCATE TABLE” de la siguiente forma:

TRUNCATE TABLE mi_tabla 

Al final básicamente funcionan igual, ya que cumplen su cometido que es eliminar todos los registros de determinada tabla, pero tienen ligeras diferencias:

Para empezar la opción con DELETE devuelve el número de registros que fueron borrados, mientras que TRUNCATE TABLE no devuelve nada.

Por otro lado TRUNCATE TABLE lo que hace en realidad es destruir la tabla y volverla a crear y no eliminar cada uno de los registros y puesto que eliminar y crear la tabla es mucho más rápido que eliminar todos los registros TRUNCATE TABLE puede ser una buena opción cuando se desea más velocidad en este proceso.

Otra diferencia importante tiene que ver con la misma característica de TRUNCATE TABLE de destruir y volver a crear la tabla, y es que reinicia todos los valores AUTO_INCREMENT de la tabla, es decir que si ibamos en el registro 5000, y usamos TRUNCATE TABLE al insertar un nuevo registro este volvería a ser el 1, mientras que en caso de usar DELETE FROM el AUTO_INCREMENT se conservaría intacto por lo que nuestro nuevo registro sería el número 5001 a pesar de ser el primero.

Así que depende de tus necesidades el cual utilizar.

Ejecutar una función JavaScript desde PHP o desde HTML

Muchas veces necesitamos ejecutar una determinada función definida en JavaScript en cualquier parte de nuestro código PHP o HTML sin necesidad de ningún enlace o componente, esto podemos hacerlo en HTML de la siguiente forma:

<script type="text/javascript">
miFuncion();
</script>

Cómo vemos tan solo tenemos que escribir la función (o funciones) dentro de esas etiquetas y se ejecutaran cuando se llegue a esa parte del código, pero recuerda que para utilizarla la función debe de estar definida en el mismo documento HTML o haber importado el archivo que la contiene de la forma que ya conocemos:

<script src="funciones.js" type="text/javascript"></script>

Ahora si queremos hacer lo mismo en PHP no hay más ciencia, ya que como sabemos PHP lo que hace al final es generar código HTML, por lo que podríamos hacer algo como esto:

for ($i=0;$i<10;$i++){
echo '<script type="text/javascript">';
echo 'miFuncion()';
echo '</script>';

El código anterior no hace más que imprimir las mismas etiquetas de arriba solo que esta vez utilizando PHP y la instrucción “echo” para imprimir las etiquetas,  en este ejemplo utilizamos un ciclo “for” para llamar a la función 10 veces.

Espero les sea de utilidad.