Pages

miércoles, diciembre 28, 2016

PHP FLUSH(), anda?

Despues de pasear por toda una serie de inutiles escribiendo soluciones mágicas devuelvo la única que realmente sirve.

header("Cache-Control: no-cache, must-revalidate");
header('X-Accel-Buffering: no');

Setear ambos headers provoca que la sentencia flush() del php funcione correctamente. Cualquier otra solucion que encuentren son solo pérdidas de tiempo.

Nobleza obliga, la solución la encontré aqui: http://www.jeffgeerling.com/blog/2016/streaming-php-disabling-output-buffering-php-apache-nginx-and-varnish

viernes, julio 22, 2016

FIREBIRD - Ejemplo: Como insertar registros entre gdb diferentes a traves de PSQL

No encontré un ejemplo completo, así que ahí va el mío. Lo generé en transacciones autónomas con COMMIT cada 5000 registros. Cualquier duda pregunten.

*Actualizado 22/07/2016 la inserción de los 5000 registros queda en una transacción separada, lo que permite por un lado, generar un commit pequeño y por otro ver el progreso del script, ya que podemos ir chequeando como se va llenando la tabla destino. He modificado el numero de registros de 5000 a 10000, 15000, 20000, 25000 y 30000. Tuve resultados significativos entre los 5000 y los 20000. Luego los commits comenzaron a demorarse un poco con lo cual no ganaba nada mas allá de los 20000. No encontré demasiada documentación a este respecto, si alguien me puede aportar algo le estaré agradecido. Las pruebas se hicieron copiando tablas entre bases de 30 millones de registros y mas. Si bien el proceso es lento, no repercutió en la performance general del servidor. Se trata de bases de producción con muchos usuarios trabajando sobre la base de origen. 

EXECUTE BLOCK
AS
DECLARE VARIABLE QUERY VARCHAR(5000);
DECLARE VARIABLE REGISTROS INTEGER;
DECLARE VARIABLE FLAG SMALLINT;
DECLARE VARIABLE FCAMPO1 VARCHAR(15);
DECLARE VARIABLE FCAMPO2 VARCHAR(15);
DECLARE VARIABLE FCAMPON VARCHAR(50);
BEGIN
  REGISTROS=1;
  FLAG=1;

  IN AUTONOMOUS TRANSACTION DO DELETE FROM TABLALOCAL;

  WHILE (FLAG=1) DO BEGIN
    FLAG=0;
    QUERY ='SELECT CAMPO1, CAMPO2, CAMPON
            FROM TABLAORIGEN
            ROWS '||:REGISTROS||' TO '||(:REGISTROS + 4999);
    IN AUTONOMOUS TRANSACTION DO BEGIN
      FOR
        EXECUTE STATEMENT QUERY
        ON EXTERNAL DATA SOURCE 'server:/ruta/base.gdb'
        AS USER 'SYSDBA'
        PASSWORD 'masterkey'
        INTO :FCAMPO1, :FCAMPO2, :FCAMPON
        DO BEGIN
          FLAG=1;
          INSERT INTO TABLALOCAL (CAMPO1, CAMPO2, CAMPON)
          VALUES (:FCAMPO1, :FCAMPO2, :FCAMPON);
        END
    END
    REGISTROS = REGISTROS + 5000;
  END
END

jueves, mayo 19, 2016

bash history

Gran ayuda es el "history" prácticamente eterno de comandos de consola. Dentro de un terminal basta con subir o bajar con el cursor para ver cuales fueron los comandos ingresados con anterioridad. Esta información queda almacenada en el archivo .bash_history que está en la carpeta home de cada usuario. Sin embargo, para buscar un comando en particular desde la consola misma podemos recurrir al viejo y querido grep. el comando history devuelve el contenido del archivo bash_history enumerado. Basta con hacer un pipe de la salida hacia el grep y entrecomillar lo que estamos buscando. Ej:

history | grep "WINEDEBUG"

viernes, agosto 14, 2015

href="sftp://... ¿Como abrirlo desde el explorador?

Esto es para linux. No tengo idea de como, ni de si se puede hacer en Windows. De ser asi, lamento no poder ayudarlos.
Dentro de la carpeta
/home/[su-usuario]/.local/share/applications

creen un archivo con extensión .desktop con el nombre que mas les guste. en mi caso creé el sftp.desktop con el siguiente contenido.

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=sFTP Nemo
Comment=Abrir Nemo para conexiones sFTP desde el explorardor
Exec=nemo %U
X-MultipleArgs=True
Encoding=UTF-8
MimeType=x-scheme-handler/sftp
NoDisplay=true
Presten atención, si utilizan el gedit, automáticamente les agregará la extensión .desktop, con lo cual pueden terminar con un archivo del estilo sftp.desktop.desktop, tomen sus recaudos. Si utilizan Nautilus, cambien nemo por nautilus. Grábenlo y dentro de la terminal escriban el siguiente comando:
xdg-mime default sftp.desktop x-scheme-handler/sftp

ATENCION: Recuerden que yo cree sftp.desktop, si crearon otro archivo invoquen ese nombre. para verificar que funcione correctamente ejecuten:

xdg-open sftp://[su-usuario]@[urldelservidor]:[puertodeescucha]

si abre su explorador de archivos con la dirección del server, esta ok!.
Eso es todo, a partir de ahora su explorador invocará el programa xdg-open cada vez que tenga una llamada a un url-scheme desconocido

Cito las fuentes de donde obtuve la información:

martes, diciembre 09, 2014

FIND + SED, reemplazo masivo de texto dentro de archivos

Mi ejemplo: Necesito encontrar el texto:
{-$FOLDER-}

y reemplazarlo por el texto :
{-$SWFOLDERROOT-}/

en todos los archivos de extensión .tpl

que se encuentren a partir del directorio en el que estoy posicionado en todas las carpetas contenidas. El comando es el siguiente:
find -type f -name "*.tpl" -exec sed -i 's~{-$FOLDER-}~{-$SWFOLDERROOT-}/~g' '{}' \;

Las aclaraciones del caso:

find -type f -name "*.tpl"  buscar los archivos cuyo nombre sea o contenga *.tpl

- exec por cada resultado anterior ejecutar el comando que sigue.

sed -i (stream editor, editor de flujo seria la traduccion literal, la opción -i (in place) indica que la edición se realice sobre el mismo archivo. Es decir lo reemplaza. si quisieran backupear el original podrían hacer -i.tmp o la versión larga --in-place=.tmp

's~{-$FOLDER-}~{-$SWFOLDERROOT-}/~g'

la expresión va encerrada entre comillas simples.
s (comando sustituir), ~ es un tipo de separador, sed acepta ~ ó / ó | como separadores válidos. a continuación del separador va la expresión a buscar. En este caso {-$FOLDER-}, luego otro separador ~ luego la expresion de reemplazo. En este caso {-$SWFOLDERROOT-}/, luego otro separador ~ y finalmente el comando g (global), que indica que reemplace todas las ocurrencias.

{} El par de corchetes vacios es reemplazado por el nombre de archivo que va a pasar find como parametro de la funcion -exec. El uso correcto de la función debería encerrar las llaves entre comillas simples para evitar que el shell lo interprete como otra cosa.

\; todo lo que sigue a continuacion del primer comando del exec se considera argumentos del comando a excepcion de '{}', hasta que se encuentre un ; para mayor seguridad de que el shell no lo interprete como otra cosa se lo escapa con \, aunque tambien podría encerrarse entre comillas.

Los sitios de los que saqué información:
http://www.brunolinux.com/02-The_Terminal/Find_and%20Replace_with_Sed.html 
http://www.grymoire.com/Unix/Sed.html#uh-62h 
http://www.comoinstalarlinux.com/comandos-linux-find-con-ejemplos-3/