viernes, 3 de noviembre de 2017

Docker Postgre persist data with volume: Error could not link file pg_xlog on windows 10 with toolbox


This is a problem that could happen if you try to mount a volume in this way:

https://stackoverflow.com/questions/45632593/postgres-docker-container-data-fails-to-mount-to-local

I solved this problem creating a volume :

docker volume créate  --name  paneek

and later only using it on my docker-compose.yml:

version: '2'
services:
 
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    links:
      - pgsql   
 
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes_from:
      - app
    ports:
      - 80:80
    links:
      - app

  pgsql:
    image: "postgres:9.5"
    #to be available to use pgadmin
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
      POSTGRES_PASSWORD: local
    volumes:
      - paneek:/var/lib/postgresql/data     
volumes:
  paneek:


Note: On Windows with toolbox there is not another way to do it.









jueves, 26 de octubre de 2017

Redirect http to https on PHP with Heroku using .htaccess


There is one thing that you need to understand with SSL and Heroku. The SSL connection is actually terminated before the request reaches your app, it is done heroku routing layer and all requests are sent to your app using plain HTTP.

To know if a request was made using HTTPS you need to check the X-Forwarded-Proto HTTP header for its value. "https" means it used SSL, "http" means it didn't. You should then perform the URL rewrite based on this. This is an example of how you can do this using the .htaccess file.

##Force SSL

#Normal way (in case you need to deploy to NON-heroku)
RewriteCond %{HTTPS} !=on

#Heroku way
RewriteCond %{HTTP:X-Forwarded-Proto} !https

#If neither above conditions are met, redirect to https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


The secret sauce is the line with HTTP:X-Forwarded-Proto.


links:
https://devcenter.heroku.com/articles/http-routing
https://stackoverflow.com/questions/26489519/how-to-redirect-to-https-with-htaccess-on-heroku-cedar-stack

jueves, 6 de julio de 2017

Javascript reduce function


var users = [{
id: 1,
name: 'saul',
age: 2,
pets: ['cat','dog']
},
{
id: 1,
name: 'andrie',
age: 6,
pets: ['cat']
},
{
id: 1,
name: 'manuel',
age: 6,
pets: []
}];

users.reduce((accumulator, currentElement, index, array) => {
return accumulator.concat(currentElement.pets);
}, []);

//result
["cat", "dog", "cat"]


Reduce toma una callback y un valor initial opcional que es el acumulador que es pasado a la callback en cada iteracion. Entonces Reduce empieza a iterear por cada elemento llamando a la callback pasando el acumulador y el element sobre el cual se esta iterando.

La primera vez acumulador es un arreglo vacio por que es el valor inicial, las siguientes veces acumulador tiene el valor retornado por  la previa interacion. Asi es como al final de la iteracion reduce devuelve el valor de "accumulator".

Aqui un ejemplo usando objectos

var myArr = [
{ rating: 5 },
{ price: 200 },
{ distance: 10 }
];

var myObj = myArr.reduce(function( memo, item ) {
memo = Object.assign(memo, item);
return memo
}, {} );

//result
{rating: 5, price: 200, distance: 10}


Espero haber despejado dudas
















lunes, 2 de enero de 2017

Entendiendo Shadow DOM V1 y custom elements V1

Shadow DOM es uno de los 4 estandares de Componentes web
 Con Shadow DOM puedes crear nuevos elementos HTML y CSS, con su propio scope. Y puede ser combinado con "Custom elements" haciendo un unico elemento con sus propio html, css, js.

DOM Aislado: Todo el html esta aislado del html principal, intentar esto: document.querySelector() , no va a devolver nada.

CSS aislado: Todo el CSS dentro del elemento no afectara al html principal. Puedes usar id, clases con el mismo nombre y no tendras problemas.

Con esto tenemos un panorama de que podemos construir nuestras aplicaciones web en pequeños pedazos y unirlos a como queramos.

Por el momento Web components no es del todo estandar en los navegadores, pero por suerte podemos usar un polyfills.

http://webcomponents.org/polyfills/


Ejemplos de como usar Shadow DOM, por ahora solo funciona en chrome (Solo tienes que examinar el codigo para ver como funciona.):
https://saulburgos.github.io/practices/2017/shadowdom/
https://saulburgos.github.io/practices/2017/customelements/

Como Shadow y custom elements no son totalemente estandar por el momento, no puedes usarlos cuando quieras, a menos que uses https://www.polymer-project.org , que es una library con todos los polyfills necesarios para que funcione en todos los navegadores

Confusion

"Web components" es el termino que encapsula 4 tipos de API hasta el momente: html templates, shadow dom, html import y custom elements.  Pero en internet mucha gente se refiere a "web components" al uso mezclado de estas APIs. Por ejemplo : shadow dom y custom elements.

Asi que no te confundas si en un tutorial ves este tipo de uso.


links:
https://developer.mozilla.org/en-US/docs/Web/Web_Components/Custom_Elements
https://developers.google.com/web/fundamentals/getting-started/primers/customelements 
https://www.smashingmagazine.com/2016/12/styling-web-components-using-a-shared-style-sheet/
https://hayato.io/2016/shadowdomv1/
https://developer.mozilla.org/en/docs/Web/HTML/Element/template
https://www.smashingmagazine.com/2014/03/introduction-to-custom-elements/