Archivo

Archive for the ‘Desarrollo’ Category

Apuntes de GIT

git config –global user.[name|email] “<nombre|correo@>”

WorkDir -> Staging Area -> Local Repo [ -> RemoteRepo]
\                                                    /
Rama -> rama v1 -> ramav2

  • git init Crea la carpeta .git en la carpeta donde se este (directorio de trabajo)
  • git add [-A|”file”]
    • Añade todos los archivos del proyecto (A) o file al staging area (area intermedia donde se analizan los
      cambios) salvo los archivos contenidos en .gitignore
  • git commit -m “<mensaje>”
    Añade los archivos que están marcados en el staging area como modificados al repositorio local
    git rm [“file”]
    Elimina file de la zona de staging
    git checkout [id]
    Regresa a la versión identificada por id o cambia a la rama id
    git status Lee el estado de los cambios de archivos
    git log Lee los commits hechos hasta el momento.
    git reset [soft|mixed|hard]
    Regresa a la versión anterior
    soft: solo cambia el commit
    mixed: cambia el commit y staging area
    hard: cambia el directorio de trabajo, el staging area y el commit.
    git branch [-d][rama]
    crea una nueva rama. Usar con git checkout rama
    -d borra la rama

git merge [rama]
fusiona la rama con master. Hacer esto desde master.

git remote [add alias [url|ssh]]
vincula repositorio local con el remoto

git fetch
bajar cambios del repositorio remoto

git push [alias][rama]
subimos cambios del repositorio local

git clone
clona un repositorio

Expresiones Regulares en PHP

Funciones PHP

preg_match
Nos permite evaluar si un string hace match con una expresión regular. Por ejemplo, para validar un email haríamos lo siguiente

function verificar_email($email)
{
   if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$email))
   {
      return true;
   }
   return false;
}

Otros ejemplos interesantes pueden ser:
1. verificar si un password es seguro

function verificar_password_strenght($password)
{
   if (preg_match("/^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $password))
      echo "Su password es seguro.";
   else
      echo "Su password no es seguro.";
}

2. Verificar el fomato de una IPv4

function verificar_ip($ip)
{
   return preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" .
"(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $ip );
}

3. Verificar formato de número telefónico en EU

function verificar_telefono_eu($telefono)
{
   $regex = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})'
.'(?:(?$0', $text);
}

preg_replace

Busca un patrón y si hace match se sustituye éste por un remplazo definido como una cadena o simplemente la re ordenación de datos dentro del patrón mediante retroreferencias. Éstas son simplemente una sintaxis para hacer referencia a los matches que ocurrirán al ejecutar una expresión regular. Por ejemplo, para convertir una fecha en formato YYYY/MM/DD a formato DD/MM/YYYY podemos utilizar retroreferencias:

function cambiar_formato_fecha($fecha)
{
   return preg_replace("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/i","$3/$2/$1",$fecha);
}

Refiriéndose $1 al primer match ([0-9]{4}) y así sucesivamente. Entonces esta función busca un patrón de fecha YYYY/MM/DD y lo cambia a DD/MM/YYYY.

Categorías:Desarrollo, PHP Etiquetas: ,

Composer

Es una librería y ejecutable que gestiona otras librerías para PHP. Resuelve las dependencias de las librerías que vayamos a instalar (se descarga todas las librerías necesarias para que funcione la nuestra) y gestiona el autoload de las librería en nuestro proyecto. Además es el sistema elegido para instalar la mayoría de los grandes frameworks actuales, además de un sinfín de librerías que podemos utilizar en cualquiera de nuestros proyectos. Composer debe implementarse en nuestro sistema (por el ejecutable) y nuestro proyecto para poder hacer uso de él.

Para instalar composer en nuestro sistema, primero necesitaremos tener instalar algún paquete con Apache, PHP….pero el procedimiento es muy parecido. Lo primero es acceder a la página de Composer y descargar el ejecutable (Windows – siguiente, siguiente…y listo!) o copiar la URL para la descarga. Ésta descarga se puede realizar mediante curl (utilidad de transferencia de archivos muy potente), o también mediante la el comando de php. En el caso de no tener curl:

sudo apt-get install curl

Luego desde una línea de comando ejecutar el siguiente comando:

curl -sS https://getcomposer.org/installer | php

Sin curl

php -r &quot;readfile('https://getcomposer.org/installer');&quot; | php

Composer se habrá descargado en la carpeta donde estemos actualmente pero deberemos moverlo a una carpeta del sistema, para que ese ejecutable sea global y no tener que estar escribiendo la ruta del mismo todo el tiempo. Este proceso en Windows no es necesario (el instalador lo añade solo al Path).

mv composer.phar /usr/local/bin/composer

Para instalar Composer en nuestro proyecto debemos de crear en el raíz del proyecto un archivo llamado composer.json (ver sintaxis) que como su extensión indica será en formato json (todo son cadenas “” dentro de objetos JS {}) . No todos los parámetros del enlace son necesarios, los más importantes son:

  • name: nombre del proyecto
  • description: descripcion del proyecto
  • type: project, library…
  • authors: nombre de autor o autores y datos de los mismos [array]
  • require: dependencias del proyecto P.E (“php”: “>=5.3.0”)
    • para buscar librerías para nuestro proyecto (Packagist)
  • autoload: reglas para la carga automática de librerías
    • classmap: array con las carpeta/s  de includes
    • psr-4: especificación de un estándar para el autloading de clases y otras cosas.

Una vez creado el composer.json ejecutamos desde la raiz del proyecto:

composer install

Y se instalarán todas las librerías necesarias, además de crearse las carpetas necesarias de composer en el proyecto (/vendors) y actualizarse solo el autoload del proyecto!

Una última cosa, para que Composer funcione en nuestro proyecto deberemos incluir la siguiente línea en el index o bootstrap de nuestro proyecto:

require 'vendors/autoload.php';
Categorías:Desarrollo, PHP

Apuntes de PHP

La serie “Apuntes de…” sirve para documentar información que se utiliza, ya sea por recomendación o por imitación pero sin saber  demasiado bien porque, así como plasmar algunos trucos  muy interesantes, dado que la memoria es finita. (Aunque éste es el objetivo del blog..)

Algo de POO…

(extraído de Cristalab)

Cuando empecé en el mundo del PHP no entendí demasiado bien el uso de las interfaces en la POO, pero encontré una página (Cristalab) donde hacen una comparativa con un juego de rol bastante buena. En resumen podría decir que:

  • Es una clase vacía y genérica, dado que sólo se definen los nombres y parámetros de los métodos, que luego tendrán que desarrollarse obligatoriamente en las clases que la implementen (conocidos como métodos abstractos). Al desarrollar el contenido de estos métodos en la clase pueden cambiar su funcionalidad según ésta. Estos métodos han de ser públicos.
  • Las interfaces admiten la herencia múltiple entre ellas y además una clase puede implementar más de una interfaz. Esto puede ser útil cuando necesitemos que una clase extienda varios métodos (metiendo esos métodos en interfaces y extendiendo de las interfaces
interface a
{
    public function one();
    public function two();
}

interface b
{
    public function one()
    public function three();
}

interface c extends a, b
{
    public function four();
}

interface d
{
    publif function five();
}

class newClass extends c, d
{
    public function one(){
       //
    }
    public function two(){
       //
    }
    public function three(){
       //
    }
    public function four(){
       //
    }
    public function five(){
       //
    }
}
  • También pueden contener constantes, pero no propiedades. Se puede acceder a éstas, pero obviamente no sobreescribirlas.
interface a
{
    const b = 'Constante';
}
echo a::b;

Todo esto está bien, pero entonces ¿qué son las clases abstractas?

  • Lo primero, recordar que una clase con un método abstracto es abstracta!
  • Pues son clases padre que para usarlas hay que heredarlas, no se pueden instanciar.
  • Pueden contener métodos abstractos y no abstractos (desarrollados)
  • Solo se puede heredar de una clase abstracta (Herencia simple).

En general podemos decir que si una clase abstracta tiene todos sus métodos abstractos la estaremos tratando como una interfaz.

Capturar el flujo de salida en una variable

ob_start();
-Operaciones para el flujo de salida (include, echo...)
$var = ob_get_clean();

Funciones Utiles

  • extract($array_asoc): extrae del array asociativo tantas variables como keys tenga el array  y con el mismo nombre y con el valor contenido en el elemento etiquetado con esa key.
  • array_splice($array, $offset, [$length],[$replace = array()]): devuelve un array con los elementos seleccionados por la posición inicial $offset (posición real 1,2…) y la cantidad de elementos a escoger $length (admite número negativos) estos elementos se pueden sustituir por otro array de valores $replace.
    • Ej: array_splice ($array, 0 , -1) elimina el ultimo elemento de un array
  • array_shift ($array): Elimina el primer elemento del $array
  • array_push ($array, $value): añade $value al final de $array
  • array_unshift ($array, $value): añade $value al principio de $array
Categorías:Desarrollo, PHP

Expresiones Regulares

Las expresiones regulares son una potente herramienta de programación que utilizan muchos lenguajes y que permiten hacer búsquedas complejas de cadenas y/o muy concretas para luego operar con ellas. El problema es que consumen muchos recursos por lo que es recomendable usarlas en casos donde no quepa otra solución más simple.

Hay dos tipo de expresiones regulares las compatibles con POSIX y las compatibles con PERL (PCRE), nos centraremos en éstas últimas por ser más extendidas.

Se construyen mediante una cadena de caracteres especialmente formado, para crear un “patrón”. Este patrón es un acrónimo de la cadena con la que queremos operar dentro de un texto, cuando el patrón coincide con alguna parte del texto (match), puede devolver TRUE,  parte del texto coincidente o incluso sustituirla por otra dependiendo de la función que usemos.

Las expresiones regulares utilizan para su construcción un lenguaje específico que usa metacaracteres, cuantificadores y agrupadores para construir la expresión en si. La expresión debe ir entre 2 caracteres iguales “/”, “{}” o “#”  Por ejemplo:

/ab?c/ - hace match con ac y abc.
/ab{1,3}c/ - hace match con abc, abbcy abbbc.

Metacaracteres:

  • a-zA-Z0-9 – Coincide con caracteres alfanuméricos (suele usarse dentro de [])
  • . (punto) coincide con cualquier carácter pero una sola vez, para más de un carácter hay que usar cuantificadores
  • ^ Coincide con el principio de una cadena
  • $ Coincide con el final de la cadena.

Cuantificadores:

  • *  coincide con cualquier carácter que aparece 0 ó mas veces.
  • +  coincide con cualquier carácter que aparece 1 ó mas veces.
  • {n} coincide con cualquier carácter que aparece exactamente n veces.
  • {n,} coincide con cualquier carácter que aparece n o más veces.
  • {n,m} coincide con cualquier carácter que aparece entre n y m veces.
  • ?  coincide con cualquier carácter que aparece 0 ó 1 una vez. También es un carácter especial
    • *? , +? , ?? minimiza la coincidencia a 1 resultado, puesto que tanto * como + pueden dar más de 1.
    • (?…) extensión de la notación

Agrupadores:

  • [] – Permiten agrupar creando rangos, por ejemplo /ab[0-5]+c/ hará match con cualquier string que contenga ab, una o más veces un número entre 0 y 5, y finalmente una c. Por ejemplo: ab12c.
    • x|y (OR) selecciona dentro del grupo a Ó b.
  • () – Nos permiten crear sub-expresiones, expresiones regulares contenidas dentro de otras: /a(bc.)+e/. Tiene un uso especial en formas como (…), que permite capturar todo lo que encierren los paréntesis, y (a|b) que hace match con a o b

Otros Caracteres especiales

  • \t — Representa un tabulador.
  • \r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.
  • \n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio. Es necesario recordar que en Windows es necesaria una combinación de \r\n para comenzar una nueva línea, mientras que en Unix solamente se usa \n y en Mac_OS clásico se usa solamente \r.
  • \a — Representa una “campana” o “beep” que se produce al imprimir este carácter.
  • \e — Representa la tecla “Esc” o “Escape”
  • \f — Representa un salto de página
  • \v — Representa un tabulador vertical
  • \x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “\xA9”.
  • \u — Se utiliza para representar caracteres Unicode si se conoce su código. “\u00A2” representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
  • \d — Representa un dígito del 0 al 9.
  • \w — Representa cualquier carácter alfanumérico.
  • \s — Representa un espacio en blanco.
  • \D — Representa cualquier carácter que no sea un dígito del 0 al 9.
  • \W — Representa cualquier carácter no alfanumérico.
  • \S — Representa cualquier carácter que no sea un espacio en blanco.
  • \A — Representa el inicio de la cadena. No un carácter sino una posición.
  • \Z — Representa el final de la cadena. No un carácter sino una posición.
  • \b — Marca la posición de una palabra limitada por espacios en blanco, puntuación o el inicio/final de una cadena.
  • \B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.

Después de estos caracteres de apertura y cierre se pueden añadir modificadores que cambian la forma de interpretar la excepción:

Modificadores:
Permiten cambiar el modo en que se ejecute la expresión regular. Se agregan después del delimitador de cierre.

  • a – solo caracteres ascii
  • i – Coincidir indistintamente entre mayúsculas y minúsculas.
  • m – Match multilínea.
  • s – El metacarácter (punto) hará match también con el carácter de cambio de línea.
  • u – Hacer los matches en modo UTF8
  • x – Ignorar espacios.

 

Extraído de :

Categorías:Desarrollo

Apuntes de HTML & CSS

La serie “Apuntes de…” sirve para documentar información que se utiliza, ya sea por recomendación o por imitación pero sin saber  demasiado bien porque, así como plasmar algunos trucos  muy interesantes, dado que la memoria es finita. (Aunque éste es el objetivo del blog..)

Extraído de la charla sobre HTTP 5 & CSS de Manz (emezeta blog) expuso en la TLP 2014
Presentación CSS3 & HTML5 en HTML!

  • Herramienta de prueba de código HTML, CSS y JS: Codepen
  • Usar Google fonts para mantener las fuentes en todos los sistemas:
  • Editores:
    • Brackets (http://brackets.io)
      Solo html y css, en php no completa.
    • Sublime Text 2/3 como editor versatil. Pulsa crtl-shift-p para opciones. Si se combina con el pluginbemmet o zen code es…espectacularrr
  • Animaciones en CSS3:

@keyframes nombre {
0%{}
100%{}
}

Cheatsheats

css3-cheatsheet-emezeta

 

Categorías:CSS, Desarrollo Etiquetas: ,

Apuntes de SQL

La serie “Apuntes de…” sirve para documentar información que se utiliza, ya sea por recomendación o por imitación pero sin saber  demasiado bien porque, así como plasmar algunos trucos  muy interesantes, dado que la memoria es finita. (Aunque éste es el objetivo del blog..)

Uso de los JOINS

(http://www.sitepoint.com/understanding-sql-joins-mysql-database/)

Sintaxis:
SELECT tabla1.campo1,tabla2.campo1 FROM <tabla1> *JOIN* <tabla2> ON tabla1.fk = tabla2.pk [resto de cláusulas WHERE….etc]

INNER JOIN, devuelve un conjunto de registros con datos comunes a las dos tablas, es decir que ambas tablas tengas datos para relacionar, sino se omite el registro.

LEFT JOIN, devuelve un conjunto de registros de la tabla1, haya o no datos de relación

RIGHT JOIN, devuelve un conjunto de registros de la tabla2, haya o no datos de relación

OUTER JOIN, devuelve un conjunto de registros de ambas tablas, haya o no relación. No está implementado en MYSQL pero se puede implementar mediante:

<consulta_left_join> UNION <consulta_right_join>

Categorías:Desarrollo, SQL Etiquetas: , ,