RSS

  • YouTube
  • LinkedIn
  • Google

Archivos de la : Desarrollo

Docker en Ubuntu. Service nginx no pudo construir: Error de ADD: stat /var/lib/docker/tmp/docker-builder(;)/startup.sh: ningún archivo o directorio de este tipo

Docker en Ubuntu

A veces, al usar Laradock, este error se produce después de intentar una reconstrucción de contenedor con no such file or directory mensaje en docker-compose up -d –build nginx Comando.

No está claro para mí cuál es el problema real, pero ejecutar el comando con sudo, podemos ejecutarlo con éxito.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

Después de construir contenedores con sudo, es posible descargarlo y recargar sin sudo.

DataTables + HTML 5 Exportación de botones + Laravel-Mix (WebPack)

En los últimos días, He experimentado un problema tratando de usar DataTables y Manos a la obra 4 con soporte para exportar los resultados Excel y PDF utilizando Laravel-Mix. Después de horas y horas tratando de poner todos los scripts para trabajar juntos, Por fin gano. Por lo tanto, Me decido a escribir este Cómo para aquellos con el mismo tipo de problemas.



Continuar leyendo >>

Utilizando jQueryMask Plugin para formato de fechas en diferentes patrones

jQuery Plugin de máscara es una gran librería de Javascript para campos del formato para la presentación de o para forzar una entrada adecuadamente por los usuarios.

Aquí, Se muestra cómo hacer frente a la entrada o un elemento HTML para mostrar las fechas cuando la fecha de la fuente tiene un formato diferente del elemento de destino.

Ejemplo:

  • Tenemos una fecha y hora con Año-mes-día hora:Minutos:Segundos y tiene que mostrar sólo el Día de mes de año parte.
  • Tenemos da fecha de Año-mes-día y necesidad de dar formato a Día/mes/año.

jQueryMask es muy fácil de usar. No necesita mucho para enmascarar todo lo que necesites. Echa un vistazo a los ejemplos en su sitio de Internet.

Si necesita dar formato a un campo de fecha simple (incluso en un elemento input no), sólo tiene que utilizar el código siguiente.

jQuery('[datos de papel ="fecha"]).máscara("TC99/M9/D9", {
        marcador de posición: "____/__/__",
        traducción: {
            "D": {patrón de: /[0-3]/, opcional: falso, recursiva: true},
            "M": {patrón de: /[01]/, opcional: falso, recursiva: true},
            "T": {patrón de: /[12]/, opcional: falso, recursiva: true},
            "(C)": {patrón de: /[09]/, opcional: falso, recursiva: true}
        }
    });

El código anterior puede enmascarar y validar previamente las fechas en DÍA DE MES DE AÑO formato.

Con una entrada como

<;tipo de entrada ="texto" datos de papel ="fecha" valor ="2018-06-11 15:47" />;

cambiar su valor a 2018/06/11.

Si intenta escribir otra fecha (después de borrar, Claro) usted no puede comenzar con un número diferente de 1 o 2. Esta razón es que nuestra máscara tiene una traducción a hacer al permitir caracteres. Si el patrón no coincide con, se borra el char.

The meaning of “;TC99/M9/D9; la máscara es:

  • Debe comenzar con 1 o 2 (Traducción de T: /[12]/ ; Formato personalizado)
  • Debe tener número de 0 o 9 (Traducción C: /[09]/ ; Formato personalizado)
  • Debe tener un número (cualquier) (Traducción 9 ; Formato de base de MaskPlugin)
  • Debe tener un número (cualquier) (Traducción 9 ; Formato de base de MaskPlugin)
  • Una barra se agregará en automático ( / )
  • Debe tener número de 0 o 1 (Traducción de M: /[01]/ ; Formato personalizado)
  • Debe tener un número (cualquier) (Traducción 9: Formato de base de MaskPlugin)
  • Una barra se agregará en automático ( / )
  • Debe tener número de 0, 1, 2 o 3 (Traducción D: /[0-3]/ ; Formato personalizado)
  • Debe tener un número (cualquier) (Traducción 9: Formato de base de MaskPlugin)

Claro, no hay ninguna validación real. You can type “;2999/19/39; y esto no es una fecha válida, pero está casi listo.

Por lo tanto, formatear de otra manera, cambiar orden de parámetro de máscara.

Pero, Si la fecha de la fuente en un diverso patrón, como día/mes/año, la máscara no funcionan. The date output for “;06/11/2018 15:40; will be weird “;1018/15/0;.

Para manejar fecha diferentes formatos se necesitará más que sencilla mascarilla. Necesitamos una función.

Ver el código de abajo

        var maskBehaviorDateTime = function (Val, y, campo) { // Esta función debe devolver una máscara var msk = "TC99/M9/D9"; // Nuestro formato deseado var v = field.is('input') ? Field.Val() : Field.Text(); // es una entrada o elemento html otro??
                    v = v.replace(/\D/g, ''); // Si la raya no dígitos (v != '') { // tiene valor?
                        If ((/^[01]\d[0-3]\dd{4}$/).prueba(v)) { //comprobar si el patrón coincide con v sólo mes/día/año = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                        } if else ((/^[01]\d[0-3]\dd{4}[012]\d[0-5]\d$ /).prueba(v)) { //prueba si el patrón coincide con día/mes/año hora:Minuto v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                            // Si necesitamos Mostrar la hora y minutos, máscara devuelta debe cambiarse también
                            // v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                            // MSK = ' h9 TC99/M9/D9:M9'; // h y m deben ser existe en opciones de traducción
                        }
                        Field.is('input') ? Field.Val(v) : Field.Text(v);
                    }
                    volver msk;
                },
                optionsDateTime = {
                    marcador de posición: "____/__/__",
                    traducción: {
                        "D": {patrón de: /[0-3]/, opcional: falso, recursiva: true},
                        "M": {patrón de: /[01]/, opcional: falso, recursiva: true},
                        "T": {patrón de: /[12]/, opcional: falso, recursiva: true},
                        "(C)": {patrón de: /[09]/, opcional: falso, recursiva: true},
                        "h": {patrón de: /[0-2]/, opcional: true, recursiva: true},
                        "m": {patrón de: /[0-5]/, opcional: true, recursiva: true}
                    }
                };
        jQuery('[datos de papel ="fecha"]').máscara(maskBehaviorDateTime,  optionsDateTime);

Ahora tenemos dos más patrón de traducción (h y m). h significa que la posición de índice n debe tener números 0, 1 o 2 y m números entre 0 y 5. Tenga en cuenta que caso importa.

Con el código anterior, podemos dar formato y Mostrar fecha en varias formas. solo tienes que cambiar .prueba() y .Vuelva a colocar() patrón para llenar su patrón deseado.

Este es el código que estoy utilizando para dar formato a campos de datetime de la base de datos año-mes-día hora:MINUTOS:En segundo lugar en los elementos html con hora del día, año y mes:MINUTOS

    var maskBehaviorDateTime = function (Val, y, campo) {
            // Si ya existe un valor, los formatos en el dd/mm/aaaa estándar con el hh opcional:mm:SS var msk = "H9 de TC99/M9/D9:M9:S9";
            If (campo de atributos.("valor de la fecha original") == undefined) {
                var o = field.is('input') ? Field.Val() : Field.Text();
            } otra cosa {
                var atributos = campo.("valor de la fecha original");
            }
            v = el. reemplazar(/\D/g, '');
            If (v != '') {
                campo de atributos.("valor de la fecha original") == undefined &;&; campo de atributos.("valor de la fecha original", el);
                If ((/^[12][09]\d{2}[01]\d[0123]\d$ /).prueba(v)) { // día de mes de año v = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                    MSK = "D9/M9/TC99";
                } if else ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d$ /).prueba(v)) { // año/mes/día hora:minuto v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                    MSK = "D9/M9/TC99 h9:M9";
                } if else ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d[0-5]\d$ /).prueba(v)) { // año/mes/día hora:minutos:v segundo = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5:$6');
                    MSK = "D9/M9/TC99 h9:M9:S9";
                }
                Field.is('input') ? Field.Val(v) : Field.Text(v);
            }

            volver msk;
        },
        optionsDateTime = {
            marcador de posición: "__/__/____",
            traducción: {
                "D": {patrón de: /[0-3]/, opcional: falso, recursiva: true},
                "M": {patrón de: /[01]/, opcional: falso, recursiva: true},
                "T": {patrón de: /[12]/, opcional: falso, recursiva: true},
                "(C)": {patrón de: /[09]/, opcional: falso, recursiva: true},
                "h": {patrón de: /[0-2]/, opcional: true, recursiva: true},
                "m": {patrón de: /[0-5]/, opcional: true, recursiva: true},
                "s": {patrón de: /[0-5]/, opcional: true, recursiva: true}
            },
        };
    jQuery('[datos de papel ="fecha"]').máscara(maskBehaviorDateTime,  optionsDateTime);

Con una entrada como

<;tipo de entrada ="texto" datos de papel ="fecha" valor ="2018-06-11 15:40">;

La salida será

11/06/2018 15:40

Esto ayudará a esperanza!

Enlace varios valores en la instrucción SQL de PDO (PDOStatement)

A veces necesitamos buscar un valor único a través de varias columnas al crear instrucciones SQL.

Supongamos la siguiente tabla

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Si necesitamos buscar un valor en columnas B,D y E necesario utilizaremos la siguiente instrucción

SELECCIONAR ID, COLUMN_A,(...Columnas..), COLUMN_E 
FROM ENTITY_ONE WHERE COLUMN_B LIKE '%search_value%' OR COLUMN_D LIKE '%search_value%' OR COLUMN_E LIKE '%search_value%';

Código PHP que podemos hacer

$q ' '%search_value%';
$sql ? "Seleccione * DESDE ENTITY_ONE DONDE COLUMN_B COMO '$q' O COLUMN_D COMO '$q' O COLUMN_E COMO '$q'; 
$pdo - nueva DOP($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Consulta($Sql);

Bien, this can work but we know that isn’;t el mejor enfoque. Necesitamos utilizamos valores vinculantes para evitar SQL injection y otras golosinas que.

Por lo tanto, el código puede ser modificado a

$q ' '%search_value%'; 
$sql ? "Seleccione * DE ENTITY_ONE DONDE COLUMN_B COMO ? O COLUMN_D COMO ? O COLUMN_E COMO ?; 
$args ? [$Q, $Q, $Q]; // Necesitamos una entrada para cada "?" on instruction
$pdo = new PDO($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Preparar($Sql);
$stmt->;Ejecutar($Args);

Mucho mejor, pero, al generar instrucciones SQL complejas, things can be confusing with lots of arguments and don’;no se olvide: ASUNTOS DE ORDEN.

Felizmente PDO puede enlazar valores en orden diferente cuando usando el nombre enlaces.

$q ' '%search_value%'; 
$sql ? "Seleccione * DE ENTITY_ONE DONDE COLUMN_B COMO :first_arg o COLUMN_D COMO :second_arg o COLUMN_E COMO :third_arg; 

$pdo - nueva DOP($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Preparar($Sql); 
// One way
$args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Necesitamos una entrada para cada ":Nombre" on instruction 
$stmt->;Ejecutar($Args); 
// Another way
$stmt->;bindValue(':third_arg'. $Q);
$stmt->;bindValue(':first_arg', $Q); 
$stmt->;bindValue(':second_arg', $Q);

$stmt->;Ejecutar(); 

Hmm, seems that this isn’;t bueno. Sólo cambiamos el uso de 1-marcador de posición indexada a un :marcador de posición nombre. There’;s ningún beneficio más allá del código legible y la posibilidad de enlazar en cualquier orden.

Sí, pero ahora podemos hacer la mejor aproximación cuando se utiliza un término de búsqueda única en varias columnas. Podemos utilizar solamente un lazo a uno o más :named placeholders ’;causa PDO es inteligente y listo. Mira aquí nuestro código final.

$q ' '%search_value%'; 
$sql ? "Seleccione * DE ENTITY_ONE DONDE COLUMN_B COMO :unique_arg o COLUMN_D COMO :unique_arg o COLUMN_E COMO :unique_arg; 
$pdo - nueva DOP($Dsn, $Usuario, $Pasar); 
$stmt = $pdo->;Preparar($Sql); 
// One way 
$args = [':unique_arg' =>; $Q]; // Podemos atar a todos :name with only one term 
$stmt->;Ejecutar($Args); 
// Another way 
$stmt->;bindValue(':unique_arg', $Q); 
$stmt->;Ejecutar(); 

Puede ahorrar un montón de escribir al escribir muchas instrucciones SQL utilizando el mismo argumento.

Nombres de archivos con lista de 0 a la Z

Hoy fue la codificación algunos scripts y encontró un pequeño problema con un patrón definido.

El patrón es crear archivos donde la secuencia se inicia en 0 (cero) y no puede repetirse hasta Z.

Ejemplo:

myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt

Bien, Esto no es un gran problema por lo utilizar este código.

// Filename
$seq = $last_used_seq = '';
$seqs = array_merge(range('0','9'), range('A', 'Z'));]
$l = 1;
while (!in_array($seq, $seqs)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Pero

$Seq

no dio el valor esperado de 0 (cero) en la primera carrera. En su lugar, fue en blanco.

Depuración de las variables, He visto que la while nunca se evalúa a true. Intentar reproducir en la línea de comandos vi

in_array($Seq, $seqs);

siempre volver true. Intenté utilizar “”, “R” y no importa qué valor, volviendo todavía true.

Por lo tanto cambiar para utilizar STRICT argumento para in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0; through ‘;9;.

while (!in_array($seq, $seqs, true)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Damn…; PHP es correcto, ;0; no es estrictamente igual a 0. El Chr función de retorno string y

rango('0', '9')

crea un array con integer valores.

Por lo tanto, Cambié el enfoque para evaluar todos los valores con STRICT, porque me gustaría crear un código limpio y sin ninguna otras funciones para utilizar.

This is the final code that I’;uso de m:

// Inicial de valores $seq = '';
$seqs = array_merge(rango(Ord('0'),Ord('9')), rango(Ord('A'), Ord('Z')));
$seqs = array_map('chr', $seqs);
$l = 1;
al mismo tiempo (!in_array($Seq, $seqs, true)) {
    $SEQ = chr(Ord($Infos['last_seq']) + $l ++);
}

// Nombres de archivos foreach ($itens_for_files as $key =>; $itens) {
    // ... Y otro para llenar el archivo $seq = chr(Ord($Seq) + 1);
    al mismo tiempo (!in_array($Seq, $seqs, true)) {
    $SEQ = chr(Ord($Seq) + 1);
    $FILENAME = 'miarchivo' . $Seq . ".ext";
    // ...
}

Cómo se puede ver, He cambiado el $seqs initial values from ‘;0; a su ASCII el código y volver a su valor que me dio un array con todos los valores de string tipo.

Nos vemos!

Error de comparación PHP

Hoy, Estaba escribiendo un script en PHP para ser utilizado en la línea de comandos cuando me topé con un comportamiento inesperado (por lo menos de mi parte).
El script debe recibir tres argumentos, la última de ellas una lista que contiene uno o más códigos numéricos.
Tratando de validar este último argumento fue conseguir un resultado diferente lo imaginado.
Ver el fragmento de código que estaba usando:

// Test.php si (php_sapi_name() == 'cli') {
    $di = isset($argv[1]) ? $argv[1] : fecha('Y-m-d'); // Inicial de fecha $df = isset($argv[2]) ? $argv[2] : fecha('Y-m-d'); // Fecha límite $prods = isset($argv[3]) ? explotar(',', $argv[3]) : arreglo de discos(); // Lista de códigos

    ##### Validación de
    // Inicial de fecha si ($di != fecha('Y-m-d', strtotime($di))) {
        Eco "\n";
        Eco "ERROR! FECHA de inicio no válido!\n";
        salida;
    }
    // Final fecha si ($DF != fecha('Y-m-d', strtotime($DF))) {
        Eco "\n";
        Eco "ERRO! FECHA FINAL no válido!\n";
        salida;    
    }

    // Si los códigos (Conde($puntas de prueba) >; 0) {
        foreach ($sondas como $prod) {
            If ($Prod != (int)$Prod) {
                Eco "\n";
                Eco "ERROR! El código de " . $Prod . " no es válido!\n" ;
                salida;
            }
        }
    }
    Eco "HECHO!";
}

Continuar leyendo >>

jQuery.html() no funciona en Internet Explorer

Recientemente tuve problemas con un código javascript que utiliza jQuery y trabajó en varios navegadores como Cromo, el Firefox y algunas versiones de Internet Explorer, pero que obstinadamente se negaron a trabajar Internet Explorer 7 y 8.
Siga el código:

$.Exponer(URL,{ Opciones }, 
  función (respuesta) {
     $('#myElement').HTML(respuesta);
  },
'texto');

Después de algunas pruebas me di cuenta que había un problema de método, como en otros códigos se comportó como se esperaba.
Así depurar código de fondo y las respuestas del método Ajax se dio cuenta de un error de sintaxis pequeño en el HTML y es solo el fix IE 7 muestra correctamente la respuesta.
A continuación, la punta, Si tienes problemas con el método jQuery.html(), en primer lugar verificar si el contenido en el elemento es un código html sin errores, porque la validación IE 7/8 escribir HTML sin error, No importa lo pequeño.

Instalación de Redmine en Nginx en Centos 6. X

En este artículo te mostraré cómo configurar el Redmine Versión 2.5.2 (2014-07-06) en un servidor Web Nginx.

Redmine es una aplicación web para gestión de proyectos. Lo conocí hace tiempo en una de las empresas donde pasó y es una excelente alternativa gratuita para aquellos que necesitan para gestionar proyectos, Si o no desarrollo.

Nginx es un servidor Web que está ganando mucho espacio en los últimos años debido a su rendimiento para grandes cantidades de solicitud.

Continuar leyendo >>

Conversión de xor, SHR y shl de Delphi para PHP

Yo estoy migrando un software hecho en Delphi para PHP y me encontré con un problema en un jodido Función de cifrado bendito.

Sufrí un poco tratar de reescribir la función hace a la complejidad del código y con las diferencias en los resultados.

La función hace uso de operadores XOR y SHR en la versión de Delphi. El SHR fue relativamente fácil gracias a la experiencia con operadores bit a bit y como documentación de Delfos dice que el operador tira de bits a la derecha

Continuar leyendo >>

Cómo reducir el tamaño de discos virtuales VMDK-parte 3

Si desea leer el parte 1 Este tutorial, Haga clic aquí.
Si desea leer el parte 2 Este tutorial, Haga clic aquí.

En el artículo anterior hecho una clonación de un disco con una sola partición. En las siguientes líneas te voy a mostrar cómo clonado un disco con una sola partición primaria y lógica para dos particiones primarias y una lógica con un punto de montaje para el swap que estaba originalmente en un archivo.

NOTA: Como una fuente que sitio, para resolver problemas con el nuevo disco de arranque. Hacer como yo, siempre citar sus fuentes.

Utilizando como base la información de parte 1 Este tutorial, Vamos a añadir un nuevo disco a la máquina virtual.

Continuar leyendo >>