Activar el motor FEDERATED en MySQL

El motor FEDERATED de MySQL, aunque no es muy versátil, puede resultar útil, por ejemplo, para conectarnos directamente a una tabla en otro servidor MySQL sin necesidad de un intermediario, como un script PHP que copie/verifique/vea datos de otro servidor.

El motor FEDERATED no esta habilitado por defecto en instalaciones estándares sobre Linux, no hay que compilar nada, solo agregarle el parametro --federated en el archivo /etc/init/mysql.conf:

#Busquen esta linea en el archivo /etc/init/mysql.conf
exec /usr/sbin/mysqld --federated

Luego de reiniciar el servicio mysql, verán los resultados:

ivancp@ubuntu$ sudo service mysql restart

 

Para ver que motores están disponibles ejecuten SHOW ENGINES en la linea de comando MySQL:

mysql> show engines;
+------------+---------+-----------+--------------+------+------------+
| Engine     | Support | Comment   | Transactions | XA   | Savepoints |
+------------+---------+-----------+--------------+------+------------+
| InnoDB     | YES     | Supports t| YES          | YES  | YES        |
| MRG_MYISAM | YES     | Collection| NO           | NO   | NO         |
| BLACKHOLE  | YES     | /dev/null | NO           | NO   | NO         |
| CSV        | YES     | CSV storag| NO           | NO   | NO         |
| MEMORY     | YES     | Hash based| NO           | NO   | NO         |
| FEDERATED  | YES     | Federated | NO           | MO   | NO         |
| ARCHIVE    | YES     | Archive st| NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default en| NO           | NO   | NO         |
+------------+---------+-----------+--------------+------+------------+
8 rows in set (0.00 sec)

 

Para conectarnos a una tabla remota y consultar que datos contiene, tenemos que crear la tabla, debe ser muy similar a la tabla remota, pueden ayudarse con el comando SHOW CREATE TABLE para ahorrar tiempo y agregar el parámetro CONNECTION al final.

-- Tabla con conexion a una base de datos remota
CREATE TABLE tabla_remota
(
    id     INT NOT NULL AUTO_INCREMENT,
    campo1  VARCHAR(32),
    campo2  INT,
    PRIMARY KEY  (id),
    INDEX campo1 (campo1)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://usuario:contraseña@1952.168.6.5/base_datos/tabla';

 

Recomendaciones:

  • El único problema es que la consulta puede demorar un poco mas de lo debido, así es que traten de no hacer consultas cuyos resultados sean realmente grandes.
  • Es una pena que aun no esté disponible la posibilidad de conectarse a otros gestores de datos como PostgreSQL o SQL Server, eso sí que sería útil.
  • Deben crear un usuario sin contraseña en la base de datos de destino, para evitar poner la contraseña en la conexión, ya que es fácil de averiguar (con SHOW CREATE TABLE).
  • Las conexiones son permitidas incluso hacia servidores MySQL mas antiguos.
  • Leer la documentación para mas detalles:
    http://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html
  • Pueden ayudarse con un Stored Procedure para crear estas tablas FEDERATED.

Espero les sirva.

WordPress ahora acepta sentencias LaTeX

Gracias a un plugin para WordPress incluido en Jetpack podemos incluir expresiones matemáticas en los posts fácilmente. Solo necesitan instalar Jeckpack en su WordPress para habilitar esta opción.

Esto es especialmente útil al momento de explicar un algoritmo, que incluya expresiones matemáticas, o para quienes tengan un blog y sean profesores/físicos/matemáticos/etc

Solamente tienen que escribir la expresión matemática en sintaxis  entre los signos de dolar:

[expresion] 

Aquí algunos ejemplos:

x = a_0 + \frac{1}{\displaystyle a_1  + \frac{1}{\displaystyle a_2  + \frac{1}{\displaystyle a_3 + a_4}}}

x = a_0 + \frac{1}{a_1 + \frac{1}{a_2 + \frac{1}{a_3 + a_4}}}

z \left( 1 \ +\ \sqrt{\omega_{i+1} + \zeta -\frac{x+1}{\Theta +1} y + 1}  \ \right)  \ \ \ =\ \ \ 1

El código fuente de los ejemplos anteriores es:

x = a_0 + \frac{1}{\displaystyle a_1  + \frac{1}{\displaystyle a_2  + \frac{1}{\displaystyle a_3 + a_4}}}

x = a_0 + \frac{1}{a_1 + \frac{1}{a_2 + \frac{1}{a_3 + a_4}}} 

z \left( 1 \ +\ \sqrt{\omega_{i+1} + \zeta -\frac{x+1}{\Theta +1} y + 1}  \ \right)  \ \ \ =\ \ \ 1 

Thunderbird: proteger nuestro perfil

Nuestro correo electrónico es, quizá, lo mas importante que tenemos en la red, por muchísimas razones es una buena idea gestionar nuestro correo desde Thunderbird, ¿pero que tan seguro está?

Siempre he revisado mi correo en un equipo mio y no he tenido problemas al respecto, pero en algunos casos existe la posibilidad de que estemos usando un equipo compartido o Thunderbird esta configurado con diferentes perfiles, ¿cómo podemos proteger nuestro correo?

Fácil!, instalando el plugin ProfilePassword, éste plugin no esta disponible desde el repositorio de Thunderbird pero es una maravilla, una vez instalado estará disponible desde el menú Herramientas -> Profile Password y podremos establecer la contraseña de Thunderbird al inicio del programa (no se trata de la contraseña maestra)

Configurar ProfilePassword para Thunderbird

Aunque no es una protección contra todo riesgo, es una piedra mas en el camino de quienes quieren husmear nuestros correos electrónicos sin autorización. Existe la opción de bloquear Thunderbird mientras estamos fuera.

Al iniciar Thunderbird veremos una ventana donde nos pedirá nuestra clave.

Ventana de inicio ThunderbirdEl complemento no depende del sistema operativo, así es que funciona perfectamente con Windows, Mac y Linux.

WordPress: agregar mas tamaños de imágenes

WordPress crea por defecto 3 copias de tamaños diferentes de los archivos de imágenes, estos pueden ser utilizados para mejorar la disposición de un post. Sin embargo esos tamaños no son siempre los que necesitamos.

Redimensionar las imágenes es un trabajo adicional, que puede tomar varios minutos, pero yano, por que existe un plugin que nos permite crear los tamaños que necesitemos, se llama: Additional image sizes (zui).

Una vez instalado tendremos más para elegir:

Si ya tenemos un blog con muchas entradas e imágenes, hay la opción de volver a crear los archivos de las imágenes adicionales.

El pluging se puede instalar fácilmente desde el repositorio, solo búsquenlo con el nombre de zui.

Simplificar el acceso a MySQL CLI

¿No les ha dado pereza escribir, en la linea de comando, todo lo necesario para conectarse a un servidor MySQL?

Puede que tome menos de un minuto, pero algunas veces un minuto es vital (sobre todo si estamos cerca del fin del mundo).

ubuntu@ubuntu$ mysql -u root -p -h mysqlhost [base_datos]

 

Cuando uno esta apurado, estos comandos suelen fallar varias veces por minuto.

La solución: podemos ayudarnos creando atajos con alias en el archivo ~/.bashrc:

#archivo ~/.bashrc

#comando "my" para conectarse a un servidor local
alias my="mysql -u root -p"

#comando "my2" para conectarse a un servidor remoto
alias my2="mysql -u root -p  -h 192.168.1.56"

 

La proxima vez que queramos acceder al servidor local solo tendremos que escribir en la linea de comando my [base_datos], solamente nos pedirá el password del servidor.

Podemos ser mas osados y dejar el password en el mismo comando alias:

#archivo ~/.bashrc

#comando "my" para conectarse a un servidor local
alias my="mysql -u root --password=tupwd"

#comando "my2" para conectarse a un servidor remoto
alias my2="mysql -u root --password=tuotropwd  -h 192.168.1.56"

 

Pueden usar los acronimos que prefieran, para mi my y my2 son cortos y útiles.

Cada vez que quiero una linea de comando MySQL sólo tengo que cargar una nueva terminal (Super + T), escribir «my mi_base» y [enter]!

Ahora se presenta otro problema, como saber en que servidor me encuentro?

El acceso puede ser super veloz con los accesos directos via alias, pero todas las terminales tienen el mismo prompt por defecto: mysql> y no hay muchas luces a primera vista para saber en que conexión estamos. Para evitar desastres (por ejemplo ejecutar DROP en el lugar equivocado) podemos cambiar el prompt de la linea de comando de MySQL con la opcion --prompt, entonces, nuestra configuración finalmente quedará así:

#archivo ~/.bashrc mejorado

#comando 'my' para conectarse a un servidor local
alias my='mysql -u root --password=tupwd --prompt="local> "'

#comando "my2" para conectarse a un servidor remoto
alias my2='mysql -u root --password=tuotropwd  -h 192.168.1.56 --prompt="server 1> "'

 

Espero les sirva!

Simulando secuencias en MySQL

Quienes hemos usado PostgresSQL solemos fastidiarnos con el código que hay que escribir para tener un campo auto-numérico, pero también hemos llegado a extrañar esa característica cuando usamos MySQL.

Como sabemos MySQL, usa la propiedad AUTO_INCREMENT para campos numéricos que usamos en claves primarias.

Pero en que situaciones podemos necesitar una secuencia? pues les doy algunas ideas:

  • Cuando queremos tener mas de un campo auto-numérico en una tabla.
  • Cuando necesitamos un contador general que podemos utilizar en mas de una tabla.
  • No se me ocurren mas, pero estoy seguro que en algún momento podemos darle un uso.

Manos a la obra:

Necesitaremos una tabla para guardar el valor actual de la secuencia:

create table _sequence
(
	seq_name varchar(50) not null primary key,
	seq_val int unsigned not null
);

Vamos a necesitar también una función para obtener el valor siguiente de la secuencia, incluyendo casos como:

  • Si no existe la secuencia, crearla (para qué complicarnos).
  • Actualizar el nuevo valor para la siguiente llamada
  •  

    He aquí la función getNextSeq que recibe como parámetro, el nombre de la secuencia:

    /*Funcion que devuelve el siguiente valor de una secuencia*/
    delimiter //
    drop function if exists getNextSeq//
     
    create function getNextSeq(sSeqName varchar(50)) returns int unsigned
    begin
        declare nLast_val int;
    
        set nLast_val =  (select seq_val 
                              from _sequence 
                              where seq_name = sSeqName);
        if nLast_val is null then
            set nLast_val = 1;
            insert into _sequence (seq_name,seq_val) 
            values (sSeqName,nLast_Val);
        else
            set nLast_val = nLast_val + 1;
            update _sequence set seq_val = nLast_val 
            where seq_name = sSeqName;
        end if;
    
        return nLast_val;
    end//
     
    delimiter ;

     

    Ahora necesitamos (a manera de mantenimiento) un procedimiento para modificar el valor de una secuencia:

    /*Procedimiento que crea/establece el valor de una secuencia*/
    delimiter //
    drop procedure if exists sp_setSeqVal//
    
    create procedure sp_setSeqVal(sSeqName varchar(50), nVal int unsigned)
    begin
        if (select count(*) from _sequence where seq_name = sSeqName) = 0 then
            insert into _sequence (seq_name,seq_val) 
            values (sSeqName,nVal);
        else
            update _sequence set seq_val = nVal 
            where seq_name = sSeqName;
        end if;
    end//
    
    delimiter ;
    

     

    Es todo!, ahora sólo necesitamos hacer algunas pruebas, para ello vamos a crear una tabla en la cual vamos a tener dos campos auto-generados con nuestra secuencia.

    create table multiple_autonums
    (
       id int not null primary key auto_increment,
       seq_1 int, -- Secuencia 1
       seq_2 int, -- Secuencia 2
       unique(seq_1),
       unique(seq_2)
    );

    Para que la magia ocurra debemos crear también un trigger antes de insertar:

    /*trigger ejecutado antes de insertar que obtiene
      los siguientes valores de las secuencias*/
    
    delimiter //
    drop trigger if exists multiple_autonums_ai//
    
    create trigger multiple_autonums_bi before insert on multiple_autonums
    for each row
    begin
       set new.seq_1 = getNextSeq("seq_1");
       set new.seq_2 = getNextSeq("seq_2");
    end//
    
    delimiter ;
    

     

    Hagamos algunas pruebas

    -- insertando valores para ver que pasa.
    insert into multiple_autonums (id) values (null),(null),(null);
    
    -- Resultado de la primera inserción
    select * from multiple_autonums;
    +----+-------+-------+
    | id | seq_1 | seq_2 |
    +----+-------+-------+
    |  1 |     1 |     1 |
    |  2 |     2 |     2 |
    |  3 |     3 |     3 |
    +----+-------+-------+
    3 rows in set (0.00 sec)
    
    -- Modificando las secuencias
    call sp_setSeqVal("seq_1",47);
    call sp_setSeqVal("seq_2",9786);
    
    -- Insertando nuevamente los valores
    insert into multiple_autonums (id) values (null),(null),(null);
    
    -- Viendo que ha pasado
    select * from multiple_autonums;
    +----+-------+-------+
    | id | seq_1 | seq_2 |
    +----+-------+-------+
    |  1 |     1 |     1 |
    |  2 |     2 |     2 |
    |  3 |     3 |     3 |
    |  4 |    48 |  9787 |
    |  5 |    49 |  9788 |
    |  6 |    50 |  9789 |
    +----+-------+-------+
    

     

    Que les pareció?

    Me acabo de dar cuenta que hay algunas condiciones que no he tomado en cuenta, pero de todas formas sirve. Incluso pueden modificar las funciones para hacer mas complejo el calculo del valor siguiente, se me ocurre por ejemplo que podemos generar numeros de facturas al estilo: [serie]-[numero] ejem: 001-00485

    Espero les sirva.

¿Cuando es necesario comprar una licencia MySQL?

Como seguramente saben, MySQL provee licenciamiento dual, puedes obtener el código fuente bajo la licencia GPL v2 o puedes comprar una licencia comercial.

Hace algunos meses he oído (y también leído) algunos comentarios fuera de lugar sobre el licenciamiento o sobre en que situación es necesario comprar una licencia comercial de MySQL. Escuché por ejemplo que puedes usar MySQL en todo lo que te sea útil excepto para ganar dinero, en nuestro entorno (latinoamericano) es natural llegar a esa conclusión pero NO ES CORRECTA!

Entonces, ¿cuando es necesario comprar una licencia comercial de MySQL? En realidad es muy simple: cuando quieres hacer algo con MySQL que la licencia GPL no lo permita.

Si bien el asunto de las licencias y demás documentos legales los debería interpretar un abogado, (y debería considerar hacer una investigación legal por su propia cuenta) la mala interpretación de la licencia GPL es generalizada y creo que debería tratar de contrarrestar la desinformación al respecto.

Tenga en cuenta que en este artículo voy a utilizar la palabra «libre» con mucho cuidado (en inglés uno de los sinónimos de «free» es gratis), como el usado por la Free Software Foundation. Si usted no sabe qué es el software libre es hora de leer un poco y aprender.

He aquí algunas cosas que están permitidas bajo la licencia GPL:

  • La licencia GPL le permite manejar un negocio con fines de lucro usando MySQL.
  • La licencia GPL permite modificar el código fuente de MySQL en la forma que desee.
  • La licencia GPL le permite vender y distribuir MySQL.
  • La licencia GPL le permite redistribuir las modificaciones de MySQL.

Y usted no tiene que pedirle permiso a nadie, ni pagarle a nadie por el derecho a hacer esto. ¿sorprendido?

Lo anterior viene con algunas restricciones, pero esas restricciones (en general) son sólo para evitar que el software siga siendo «libre». Así, por ejemplo, si usted vende o redistribuye, hay que hacerlo bajo la licencia GPL también. No se puede despojar a la parte GPL o gravar el software y luego pasar a una versión menos libre del software para los demás.

Aquí hay algunas cosas que la licencia GPL no requiere:

  • La licencia GPL no le obliga a redistribuir las modificaciones de MySQL.
  • La licencia GPL no requiere de una licencia GPL del software que simplemente se conecta a MySQL.
  • La licencia GPL no requiere que todo el software en su empresa/organización también sea GPL.

Entonces si usted requiere comprar una licencia comercial de MySQL para las cosas que la licencia GPL no le permite, ¿cuáles son esas?

  • Es necesaria una licencia comercial si desea modificar MySQL y redistribuir el resultado como software no libre.
  • Es necesaria una licencia comercial si desea incorporar MySQL dentro de un programa no-Libre. Tenga en cuenta que incorporar no es lo mismo que «hacer una conexión».

Ya que estas cosas no están permitidas por la licencia GPL, lo que necesita es comprar el derecho de usar el código fuente de MySQL bajo una licencia no-GPL. Ahí es donde las licencias duales entran en juego

MySQL es muy cuidadoso en sus materiales de marketing. Hasta el momento no recuerdo haber escuchado a alguien de MySQL decir que tienen que comprar una licencia comercial para algún propósito específico. Alguna vez leí algo como «MySQL Enterprise es para personas que quieren hacer dinero con MySQL.» Este mensaje de marketing puede ser poco claro para una persona que no conoce a las libertades garantizadas por la licencia de software libre (es decir, puede dejar la falsa impresión de que tienen que pagar por MySQL, si quieren usarlo para obtener un beneficio económico). Sin embargo, estas personas siempre pueden saber la verdad gastando pocos minutos leyendo acerca de las libertades garantizadas por la GPL.

Los casos mencionados arriba sólo es una muestra pequeña. Para ver ejemplos demostrativos y texto que le ayudará a aclarar las ideas sobre la licencia GPL, usted debe leer las preguntas frecuentes GPL.

Referencias:

  • http://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.es.html
  • http://www.gnu.org/philosophy/selling.es.html
  • http://www.mysql.com/about/legal/
  • http://www.xaprb.com/blog/

Como hacer ping desde PHP

Cuando queremos «hacer algo» con algún equipo de nuestra red y éste no responde es por que probablemente este apagado/desconectado/colgado/etc, ping es lo primero que ejecutamos para confirmar nuestras sospechas.

Pero, y si hemos preparado un script para «hacer algo» (como sacar un backup) periódicamente debemos asegurarnos que el equipo esta conectado y encendido antes de meter la pata.

Muchos de los scripts que he desarrollado usan php-cli, me parece mas amigable que bash por que además puedo leer y escribir en bases de datos y también usar ncurses, es una maravilla!

Intentando con varios métodos, finalmente tengo algo que es de utilidad para determinar si un host esta «vivo» mediante un ping desde PHP:

getMessage();
}
else
{
    $ping->setArgs(array('count' => 1)); //Envios = 1
    $result = $ping->ping($host);

    if($result->getReceived() == 1 )  //Si recibimos lo 
    {
          echo "El equipo esta encendido!";
    }
    else
    {
          echo "El equipo esta apagado!";
    }
}
?>

Antes necesitamos tener instalado php-pear y Net_Ping:

ivancp@ubuntu~$ sudo apt-get install php-pear
ivancp@ubuntu~$ sudo pear install Net_Ping

Espero les sirva!

Ubuntu: Montar un directorio compartido automaticamente

Los usuarios Windows conocemos a la perfección como montar una unidad de red, pero en Linux la cosa es un tanto mas complicada, pero no difícil.

La primera opción que tenemos es abrir directamente la dirección: Presionamos Ctrl+L en Nautilus (o algún otro explorador de archivos) y escribimos:

smb://[ip_del_host]/carpeta/

Seguramente nos pedirá un usuario, contraseña y listo. Prefiero esta forma, a menos que no sepa el nombre/IP del host y esperar unos segundos mas a que descubra todos los hosts disponibles si es que llega a descubrirlos todos.

En el caso que queramos tener esa carpeta disponible cada vez que inicie Ubuntu tenemos que agregar una linea en el archivo /etc/fstab:

//192.168.1.45/ruta /media/carpeta_win  cifs  username=win_user,password=win_pass,rw,iocharset=utf8  0 0

Explico punto por punto:

  • //192.168.1.45/ruta Es la ruta de la carpeta remota, en caso de que se trate de una unidad de disco podemos poner //192.168.1.45/d$ , en general si es una carpeta oculta es necesario poner el signo de dolar al final.
  • /media/carpeta_win Es la carpeta local sonde va a montarse la carpeta remota, esta carpeta debe existir, pueden elegir otra ubicación para esta carpeta, eso queda a gusto de ustedes.
  • cifs Es el parametro que indica el sistema de archivos que vamos a montar, en este caso: Common Internet File System que tiene estos parámetros: (separados por comas)
    • username=win_user Nombre de usuario de la carpeta compartida (si lo requiere)
    • password=win_pass Password del usuario de la carpeta compartida
    • rw Indica que vamos a montar en lectura y escritura, para solo lectura es:  ro
    • iocharset=utf8 Indica que vamos a utilizar nombres con UTF8, con el que podremos ver los archivos con caracteres especiales como Imágenes, Mi Música

Es todo, para poder comprobarlo solo tienen que reiniciar el sistema y ver que pasa.

Si quieren montar la carpeta remota manualmente pueden ejecutar:

ivancp@ubuntu$ sudo mount -t cifs\ 
     -o username=win_user,password=win_pass,rw,iocharset=utf8 \
     //192.168.1.45/ruta /media/carpeta_win

Si hay algún problema deben ver los últimos mensajes de error con:

dmesg | tail

Nota: anteriormente se utilizaba smbfs como sistema de archivos, ese sistema de archivos se ha dejado de utilizar.

Espero les sirva!

El Bizcochuelo de todos los santos – Puno

Cada 1ro de noviembre en esta parte del mundo celebramos el día de todos los santos, en el altiplano peruano y boliviano aprovechamos en visitar las tumbas de nuestros difuntos para limpiarla, adornarla y sobre todo recordar «a quien en vida fue».

El origen de esta celebración es católica, pero gracias a la santa inquisición, y otras atrocidades, es que los nativos enmascaraban sus celebraciones ancestrales en ritos católicos, en muchas partes del mundo también recuerdan a sus muertos en esa fecha, pero aquí es particularmente especial.

Al visitar el cementerio los deudos suelen preparar comida (pan, bizcochuelo, empanadas, galletas y otros) por tres años seguidos después del fallecimiento y ofrecerla como agradecimiento a cambio de un rezo en el altar del difunto, la preparación de estos alimentos puede seguir incluso muchos años después, pero sin la necesidad de ofrecerlos en el cementerio. El cementerio es abarrotado de gente y todos participan visitando altares de amigos, familiares y también desconocidos.

El bizcochuelo que se prepara en esta fecha es el mas preciado por que es muy sabroso y escaso. Al preparar todos esos alimentos debe participar toda la familia, generalmente contratamos un horno rustico y el panadero nos guía con la compra de ingredientes y la preparación. Es toda una fiesta!

Para hacer el bizcochuelo deben batirse 40 huevos con azúcar suficiente, todos los miembros de la familia participan del batido por que es muy duro y debe ser constante hasta que llegue a un punto razonable para mezclar el resto de ingredientes (harina de maíz, polvo de hornear, alcohol, leche,  y otros que no recuerdo muy bien).

Una vez listo se vierte el batido en cajas de papel armadas previamente, de una buena batida pueden salir 24-28 bizcochuelos, nosotros obtuvimos 21 solamente, para una familia numerosa 24 bizcochuelos no es nada, y deben prepararse mas batidos para cubrir la demanda, el trabajo es duro pero vale la pena por que no hay mejor bizcochuelo (o pan) que el preparado por uno mismo.

El horno no debe estar muy caliente, como ven es un horno rústico, aquí algunas tomas adicionales:

 

 

 

El próximo año documentaré mejor esta fiesta por que hay muchos detalles mas, quienes saben de este acontecimiento en el altiplano verán a este post muy pobre.

Update, aquí dejo la receta:
Gracias a Fany del Pilar Choque (*)

BIZCOCHUELOS
18 A 20 CAJITAS (como las de la foto)

INGREDIENTES:
1 Kilo de mandioca
30 huevos (de campo)
1 Kilo de azúcar blanca
1 copa de pisco Bogoña de Limón
2 sobres pequeños de polvo de hornear.
Jugo de 6 limones
Anís

PREPARACIÓN:

  1. En un recipiente grande batir las claras de los 30 huevos hasta que estén a punto de nieve.
  2. Ir agregando poco a poco las yemas sin dejar de batir, ni perder la consistencia de la mezcla.
  3. Agregar el azúcar poco a poco, sin dejar de batir hasta que la mezcla esté homogénea.
  4. Utilizamos un cernidor o colador para añadir a la mezcla la mandioca y el polvo de hornear, a la vez se le añade el jugo de limón más la copita de pisco, sin dejar de mezclar.
  5. Colocamos la mezcla en los moldes enharinados, esparcimos un poco de anís en la superficie para que le dé un sabor más agradable.
  6. Los metemos a un horno rústico con una temperatura regular, no muy caliente, por lo menos por 15 minutos.

 

(*) Fany comenta: Resaltan los que hacen los bizcochuelo «con énfasis» que los huevos deben ser de preferencia de gallinas de campo o criadas por uno mismo, porque «dicen» que sus yemas tienen mejor color (más anaranjados), esto para que los bizcochuelos salgan con un aspecto más apetecible.