Mostofreddy

Parábola de los seis sabios ciegos y el elefante

Comentarios 0 Tags Categorias General

{lang: 'es-419'}

Chusmeando linkedin encontre esta excelente parabola de Muhammed Jalal al-Din Rumi, sufí persa del siglo XIII, es para refleccionar y analizar.

“Seis hindúes sabios, inclinados al estudio, quisieron saber qué era un elefante. Como eran ciegos, decidieron hacerlo mediante el sentido del tacto. El primero en llegar junto al elefante, chocó con el mismo. Lo notó ancho y duro y dijo:
- Es como una pared.
El segundo palpó el colmillo y gritó:
- ¡Es agudo, redondo y liso! El elefante es como una lanza.
El tercero tocó la trompa y agregó:
- ¡El elefante es como una serpiente!
El cuarto extendió su mano hasta la rodilla del animal:
- Está claro que el elefante es como una columna.
El quinto que casualmente tocó una oreja añadió:
- Pero si es como un abanico.
El último quien tocó la cola acotó:
- El elefante es lo más parecido a una soga.
Así los sabios discutieron por horas, cada uno manteniéndose en su opinión. Todos estaban parcialmente en lo cierto, pero cada uno estaba equivocado”.
¿Cuantas veces nos enceguecemos queriendo tener la razón y no prestando atención a los punto de vista de los demás? ¿Cuánto mas productiva sería la existencia del ser humano si aprendiera a respetar otros puntos de vista? ¿Cuán rica sería nuestra vida si en lugar de discutir con el otro, lo escucháramos y aprendiéramos de sus conocimientos? Bueno les dejo la posta, aportemos herramientas para que todos podamos crecer, respetando los puntos de vista de los demás.

Codigos QR: Que son y para que se usan

Comentarios 0 Tags Categorias Uncategorized

{lang: 'es-419'}
QR werb www.mostofreddy.com.ar

QR de www.mostofreddy.com.ar

Gracias a la cantidad de smartphones existentes en el mercado, los códigos QR poco a poco se van incorporando a nuestras vidas casi sin darnos cuenta, pero ¿que son?, según la wikipedia

“un código QR (Quick Response Barcode) es un sistema para almacenar información en una matriz de puntos o un código de barras bidimensional creado por la compañía japonesa Denso-Wave en 1994; se caracterizan por los tres cuadrados que se encuentran en las esquinas y que permiten detectar la posición del código al lector. La sigla «QR» se derivó de la frase inglesa “Quick Response” pues los creadores «Euge Damm y Joaco Retes» aspiraban a que el código permitiera que su contenido se leyera a alta velocidad.”

Básicamente es una imágen cuadrada dividida en una serie de celdas claras y oscuras y sirven para codificar diversa información, tienen la capacidad de almacenar, con un nivel de redundancia bajo y en un cuadrado de 57 X 57 celdas, hasta 395 caracteres alfanuméricos. En el caso de utilizar un nivel de redundancia alto el número baja a 174 caracteres alfanuméricos.
Aumentando el tamaño de celdas, hasta un cuadrado de 177 X 177, se puede llegar a un máximo de 4.296 caracteres alfanuméricos. El tamaño mínimo es de 21 X 21 celdas, el cual permite con un nivel de redundancia baja codificar hasta 25 caracteres alfanuméricos.

El sistema de redundancia protege el QR code, el cual puede ser restaurado inclusive perdiendo un 30% de la imagen, en caso de generar el QR code con un alto nivel de redundancia. Con un nivel bajo de redundancia se puede restaurar solo un 7%.

Puede ser leído en cualquier sentido, debido a sus puntos de detección.

Sus usos en la vida real son… ufffff practicamente ilimitados, les dejo un par de videos de ejemplo

Descuentos

YouTube Preview Image

Educación

YouTube Preview Image

Compras en supermercados

YouTube Preview Image

Google Place

YouTube Preview Image

Blackberry Messenger

YouTube Preview Image

Y miles y miles mas de usos.

Fuente: Fedaro Codigo-qr

Temple: Sistema de Templates para PHP

Comentarios 1 Tags , , , Categorias Programacion

{lang: 'es-419'}

temple sistema de templates para php

Este último tiempo estuve comenzando varios proyectitos, uno de ellos es Temple, un Sistema de Templates para PHP. Por el momento no posee mucha funcionalidad, ni esta documentado pero avanza todas las semanas :) .

La idea Temple es muy sencilla, a partir de un html con claves al estilo {{value}} generar un archivo con codigo PHP para que luego estas claves sean reemplazadas por valores.

Veamos un pequeño ejemplo de su uso:

Tenemos un archivo template: test.html

Buen dia: {{nombre}}

Luego por otro lado tenemos: index.php que es el encargado de instanciar Temple y parsear el html

<?php
include_once 'Temple.php';
include_once 'Parser.php';
include_once 'Cache.php';
$temple = new \Temple\Temple();
$params = array('nombre' => 'Mostofreddy');
$temple->loadView(__DIR__.'/test', $params);

Esto imprimira en pantalla:

Buen dia: Mostofreddy

Como podemos ver su uso es realmente sencillo y facil de integrar en otros sistemas ya realizados.

Existe una serie de configuraciones:

- cache: indica en que carpeta se almacenaran los files procesados
- useCache [true|false]: Indica si se usa el archivo anteriomente procesado o en cada peticion se debe procesar nuevamente
- force: obligatoriamente se procesa el archivo

Lo pueden descargar desde Github

lightDI – Light Injection Dependency Framework

Comentarios 0 Tags , Categorias Programacion

{lang: 'es-419'}

Muuuucho tiempo sin postear, hoy vuelvo con un proyectito que estoy realizando y que ya forma parte de FlyPHP

LightDI es un pequeño framework de Inyección de Dependencias realizado en PHP 5.3+ que permite ser integrado en cualquier proyecto (o framework como por ejemplo Zend) de forma rápida y sencilla.

¿Injection Dependency?

En forma resumida (porque en google encontramos miles de artículos que explican muy bien) la Inyección de Dependencia (en inglés Dependency Injection, DI) es un patrón de diseño orientado a objetos, en el que se inyectan objetos a una clase en lugar de ser la propia clase quien cree el objeto.
Existen 3 tipos de inyeccion de dependencias

  • por constructor
  • por setter
  • por interfaz

lightDI al rescate =)

LightDI permite realizar inyección de clases por constructor y por setter mediante los metodos “any” o “factory”. El primero funciona al estilo Singleton, o sea, la primera invocación a un objecto lo instancia y guarda su referencia para las posteriores invocaciones no tener que instanciarlo nuevamente. El segundo devuelve siempre una instancia nueva del objeto pedido.

El metodo “any” es de mucha utilidad para controlar el ciclo de vida de los objetos y la cantidad de instancias de objetos de base de datos, de web service, de sessiones, etc.

Ahora bien, para que estos metodos sepan como construir cada objeto y sus dependencias hay que crear una serie de metodos “factories” con la lógica necesaria para su instanciación. Veamos un ejemplo:

$inj = \LightDI\Injector::getInstance();
/**
 * Factory para la clase ClaseDemo2
 */
$inj->claseDemo2 = function () {
    $obj = new ClaseDemo2();
    $obj->dato = 'm2';
    return $obj;
};
/**
 * Factory para la clase ClaseDemo1
 */
$inj->claseDemo1Factory = function ($inj) {
    //primero creamos la dependencia y se la pasamos al constructor
    $objDemo2 = $inj->any('ClaseDemo2');
    $obj = new ClaseDemo1($objDemo2);
    return $obj;
};

Como vemos en el ejemplo, la logica para la instanciación de cada clase se define mediante funciones lambdas. Luego para invocarlas

$objTest = $inj->any('claseDemo1Factory');
var_dump($objTest);

En posteriores post ire profundizando un poco mas sobre este framework. Espero que les sea útil.

Tutorial Erlang III: Integers, floats, booleans, atoms

Comentarios 0 Tags Categorias Programacion

{lang: 'es-419'}

Retomando el tutorial de Erlang hoy trataré de explicar algunos tipos de datos de este lenguaje, veremos como Erlang maneja los enteros, floats y booleanos. Manos a la obra!

Integers

Este tipo de dato se utiliza para todo el conjunto de numeros enteros sin importar su tamaño. Pueden ser negativos o positivos y estar expresados en distintas bases.

No posee una cantida de bits fija ni un rango específico de valores como en otros lenguajes, por lo tanto, podemos escribir números con la cantidad de cifras que querramos y operar entre ellas sin provocar overflow.

Esto se debe a que Erlang internamente, cuando un entero no se puede representar en una palabra, utiliza lo que se conoce como bignums, representando al entero en un número  arbitrario de palabras haciendo su representación un poco menos eficiente. El único límite para el largo de los integers depende de la maquina.

Ejemplos

-4560
0
666
999999999999999

Ejemplos 2 con números en otra base

> 2#1011.
> 11
> 16#A
>10

Floats

Los tipos de datos Floats son usados para representar números Reales.

Ejemplos

> 1.02.
1.02
> 5698.12.
5698.12

Atoms

Los datos del tipo atoms son usados para representar valores constantes no-numéricos. En Erlang todos los Atoms son globales, comienzan con letra en minúsculas seguidos por una secuenca de carácteres alfanumericos, caracter underscore (_) o arrobas (@). Por ejemplo: junio, true, taza, mimail@dominio.com, etc.

Los Atoms también pueden estar delimitados por comillas simples cuando contienen caracteres no validos como espacios o que comiencen con mayúsculas. Por ejemplo ‘Diciembre’, ‘hoy es un lindo dia’, etc.

Algo a tener en cuenta es que las únicas operaciones que se pueden realizar con los Atoms en Erlang son las comparaciones.

Booleans

En Erlang no existen en si los tipos de datos booleanos, sino que son representados mediente los Atoms true y false. Estos son los valores que devuelven por ejemplo las comparaciones

1> 2 == 1 .
false
2> a > z .
false
3> less > more .
false
4> is_boolean(true) .
true

Existen otros tipos de datos como las tuplas, listas o strings pero lo veremos en más detalle en otro post.