domingo, 5 de febrero de 2017

HTTP/2

No hay comentarios.:
HTTP2 o H2 para los amigos nació en el 2012 pero los navegadores comenzaron a utilizarlo hasta el 2015, es nuestra responsabilidad en como desarrolladores de migrarnos a este nuevo protocolo, al realizar esta sencilla migración no solo vamos hacer nuestros sitios sean mas seguros si no que también vamos a mejorar el rendimiento.

Historia:


Después de 15 años de vivir con HTTP /1.1 empieza a ser insuficiente para los tiempos que corren, cada vez las mejores conexiones a internet sin embargo no podemos sacarle el provecho a dichas conexiones ya que HTTP /1.1 sufre mucho cuando se realizan demasiadas peticiones degradando el rendimiento, solo pudiendo trasmitir 6 paquetes a la vez, permíteme explicarlo con un ejemplo.

Tu página web tiene 2 CSS, 2 JS y 8 imágenes, con el protocolo HTTP / 1.1 tendría que hacer 2 viajes para cargar esa página web, durante esto años los desarrolladores han utilizado muchos trucos evitar los restricciones de HTTP / 1.1 

En esta caso en particular el desarrollador puede unificar los 2 CSS  en un solo archivo o colocar cada CSS en servidores de distribución de contenido (CDN)  los cuales son servidores especializados en compartir tus documento

Con las imágenes podemos utilizar image sprite, que por si no lo sabes es un archivo de imagen que contiene todas las imágenes que va utilizar tu sitio y se hace referencia a estas pequeñas image a través de coordenadas, con esto disminuimos de 8 llamadas a 1 sola. 







Por qué Cambiarse a HTTP / 2 ?

El principal cambio seria que con una  sola conexión podrás hacer multiple solicitudes y respuesta en paralelo, así que ya tendrás la restricción de solo 6 llamadas, por lo que tu sitio puede llegar hacer hasta un 60% más rápido.


Migrando HTTP /2


Que tengo que hacer para migrar?

Lo primero es tienes que hacer que tu sitio sea HTTPS ya que aun HTTP /2 no necesita el uso cifrado la gente de los navegadores (Chrome, Firefox, Microsoft Edge) han decidido que solo le darán soporte sobre TLS, por lo que tendrás que adquirir un certificado digital y si no tienes para comprar el certificado puedes utilizar uno gratuito por medio de Lets Encrypt.



Ahora que tienes tu sitio sobre HTTPS, tienes que hacer unos pequeños cambios en tu servidor.

Linux


NGINX
En nginx solo tiene que agregar http2  en la línea listen de tu archivo de configuración.


Aquí dejo dejo el link para una guía completa de la gente digital Ocean.

Deben asegurarse

Apache
Con apache debes de agregar unos módulos.



Dejo la guía completa.
https://www.rosehosting.com/blog/how-to-set-up-apache-with-http2-support-on-ubuntu-16-04/


ALPN
Para que HTTP 2 les funcione en Google Chrome deben de tener soporte a ALPN, no todos las distribuciones de linux, Solo Ubuntu 16.04 tiene soporte para ALPN, pero hay formas de agregarlo a Centos.


Si el sistema operativo no soporta ALPN google Chome no utilizara http 2 si no bajara a http 1.1


Windows


Internet Information Server (IIS)

Con IIS la gente de Microst si la hacer complicada ya que requiere de cambiar tu servidor a Windows Server 2016 donde ya estar disponible de manera automática.



Como saber si estoy en http2?


Puedes navegar la siguiente URL:

https://tools.keycdn.com/http2-test



Google Chrome

En la ventana de inspeccionar (clic derecho inspeccionar) de Google Chrome vas a pestaña de Network, tienes que agregar la columna de protocolo y refrescas la página (cmd + R).



Si deciden quedarse en HTTP 1.1 aquí algunos consejos de mejora de rendimiento.

Ver

viernes, 13 de mayo de 2016

Ejemplo Api con Lumen

No hay comentarios.:
Lumen es un microframework basado en Laravel, el cual ha sido desarrollado para crear micro servicios web.

Ya debes de tener instalado composer para continuar.


Puedes bajar la solucion de:
https://github.com/cjorellana/northwindAPI

Crear proyecto


1.) Crear el proyecto lumen, vamos a crear el proyecto con composer.

Proyecto sería api y utilizaremos la versión 5.1


<?php
composer create-project laravel/lumen=5.1 api
?>

2.)  Comprobar y iniciar el servidor, ingrese a la carpeta api

Comprobando los comandos de lumen

php artisan

Levantando nuestro servidor con lumen,

php artisan serve

Navegue a:

http://localhost:8000/



Configurar

3.) Vamos a configurar el acceso a la db

Cambie el nombre de :

.env.example

a

.env

Abrimos el archivo .env y configuremos las credenciales de la base de datos.

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=ejemplo
DB_USERNAME=homestead
DB_PASSWORD=secret

Abra el archivo "api/bootstrap/app.php" y descomenta

Dotenv::load(__DIR__.'/../');
$app->withFacades();
$app->withEloquent();


Migradores 

Los migradores nos sirven para crear y cambiar nuestro esquema de la base de datos, si ya tienes las tablas salta estos pasos.

Ahora vamos un migrate para crear la tabla categories.

php artisan make:migration create_categories_table --create="Categories"

Mostrará un mensaje:


Created Migration: 2016_03_30_062918_create_categories_table

Las migraciones se ingresan dentro de la carpeta Database/migration aquí encontrará  el archivo llamado Created Migration: 2016_03_30_062918_create_categories_table abrimos este archivo.


<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Categories', function (Blueprint $table) {
            $table->increments('CategoryID');
            $table->string('CategoryName');
            $table->mediumText('Description');
            $table->binary('Picture');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('Categories');
    }
}

Ahora vamos a crear la la tabla categories.


php artisan migrate

Migration table created successfully.

Migrated: 2016_03_30_062918_create_categories_table


Podemos revisar si creo las tablas de manera correcta.



Modelos

Vamos a crear un modelo, cree el archivo Categories.php bajo la carpeta App

"app/Categories.php"

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Categories extends Model{

 protected $table = 'Categories';
 protected $primaryKey = 'CategoryID';
 protected $fillable = ['CategoryID','CategoryName','Description'];
 protected $hidden = ['created_at','updated_at','Picture'];
 
}

Filltable = Propiedades disponibles
hidden= Propiedades que vamos a ocultar

Controladores

Vamos a crear un controlador, crear un archivo llamado CategoriesController.php en la carpeta "app/Http/Controllers"

<?php namespace App\Http\Controllers;

use App\Categories;
use Illuminate\Http\Request;

class CategoriesController extends Controller
{
 public function index()
 {
  $categories = Categories::all();
  return response()->json($categories, 200);
 }

 public function getCategories($id)
 {
  $categoria = Categories::find($id);
  if($categoria)
  {
   return response()->json($categoria, 200);
  }

  return response()->json(["Categoria no encontrado"], 404);

 }

 public function createCategories(Request $request)
  {
        $categoria = Categories::create($request->all());  
        return response()->json($categoria,201);  
    }
}

Router

Vamos a crear un controlador, crear un archivo llamado router.php en la carpeta "app/Http"

<?php
$app->get('/categories', 'CategoriesController@index');
$app->get('/categories/{categories}', 'CategoriesController@getCategories');
$app->post('/categories', 'CategoriesController@createCategories');
?>

Probando

Es hora de probar nuestra api, lo ideal es usar una extensión de chrome llamada POSTMAN.

Get 




Post


Ver

jueves, 10 de marzo de 2016

Instalar OCI en Windows

No hay comentarios.:

Para poder acceder a una base de datos oracle desde php, python en windows necesitas instalar OCI  aquí los pasos para instalar en windows server con IIS.

Debe de tener instalado IIS y php para ver instalar revisar este vinculo.

Instalar PHP en windows IIS

Instalado OCI 12C


1.) Primer paso debe ser instalar el cliente básico de oracle 12C, el cual pueden descargar de Instant Client debe asegurase que debe ser 32 bits, ya que php es 32 bits.

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

Descargue y des comprima el cliente de oracle 12C 21 bit en :

C:\instantclient_12_1

2.) Agregue esta ruta el path del sistema operativo.

2.1) Panel de control, seleccione System,






2.2) En system ingrese a Advanced System settings

2.3 ) Ingrese a variables de Entorno.



2.4) En la ventana de Variables de ambiente seleccione Path y luego Edit....




2.5) Agregue a la variable path la ruta del cliente de oracle en este caso: C:\instantclient_12_1



Install OCI8


Para acceder a Oracle es necesario OCI8, por lo regular ya esta en las extensiones de php, si no debe de bajarlo de en PECL solo asegúrate que coincida con la versión que estas utilizando y que sea "Non Thread Safe (NTS) x86"

En este caso en la version que descargamos de php ya tenemos la dll de OCI en nuestras extensiones, como el cliente es 12c la dll debería ser: php_oci8_12c.dll



Configurando PHP

 Copiar el archivo php.ini-production a php.ini

1.) Vamos a la carpeta donde esta instalado php en nuestro caso la ruta es:
 C:\Program Files (x86)\PHP\v5.6 

Si fuera otra la puedes consultar en el PHP Manager.

2.) Ahora borra php.ini

3.) Copia el archivo php.ini-production

4.) Cambia de nombre a la copia de php.ini-production a php.ini

Habilitando php_Oci8 en php.ini

5.) Abre php.ini y des comenta las siguientes líneas (quitar el punto y coma):

extension_dir = "ext".

extension=php_oci8_12c.dll


También debe des comentar la línea de date.timezone y configurar para su región, aquí hay un listado para que busque su país. http://php.net/manual/es/timezones.php

date.timezone = America/Los_Angeles

Microsoft Visual C++ 

Debes asegurarte que el Microsoft Visual C++ este instalado tanto el 2010 como el 2012, seguramente ya tienes instalado el 2012 ya que es para que php funcione.

Install Microsoft Visual C++ 2010 Runtime (x86). Necesario para OCI8

Install Microsoft Visual C++ 2012 Runtime (x86). Necesario para php 

Verificando la Instalación

Hay 2 maneras de verificar que la instalación de OCI sea correcta, consola y la pagina php info.

1.) En el command Prompt de windows: 

C:\>php --ri oci8

Si todo esta correcto debe dar un respuesta como esta:




En la pagina de prueba de php donde se incluyo phpinfo también debería mostrar que esta habilitado el oci8




Pagina de prueba.
Crear un pagina con el nombre testoci.php


<?php

$conn = oci_connect('hr', 'welcome', 'mymachine.mydomain/orcl');
$stid = oci_parse($conn, 'select table_name from cat');
oci_execute($stid);

echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "  <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
Ver