Consejos de un padre a un hijo (por Jackson Brown)

Jackson Brown es un padre preocupado por la felicidad de su hijo y por ello le escribió estos “consejos” cuando este se fue a estudiar a la Universidad, lejos de su casa.
Su hijo decidió fotocopiarlos y los distribuyó entre sus compañeros. Los mensajes tuvieron tanto éxito, que una editorial le pidió autorización a Brown para editar un libro con ellos, Life’s Little Instruction Book, una publicación que rápidamente se convirtió en un best seller traducido a varios idiomas. He aquí los consejos.

Hijo:
• Cásate con la persona correcta. De ésta decisión dependerá el 90% de tu felicidad o tu miseria.
• Observa el amanecer por lo menos una vez al año.
• Estrecha la mano con firmeza, y mira a la gente de frente a los ojos.
• Ten un buen equipo de música.
• Elige a un socio de la misma manera que elegirías a un compañero de tenis: busca que sea fuerte donde tú eres débil y viceversa.
• Desconfía de los fanfarrones: nadie alardea de lo que le sobra.
• Recuerda los cumpleaños de la gente que te importa.
• Evita a las personas negativas; siempre tienen un problema para cada solución.
• Maneja coches que no sean muy caros, pero date el gusto de tener una buena casa.
• Nunca existe una segunda oportunidad para causar una buena primera impresión.
• No hagas comentarios sobre el peso de una persona, ni le digas a alguien que está perdiendo el pelo. Ya lo sabe.
• Recuerda que se logra más de las personas por medio del estímulo que del reproche (dile al débil que es fuerte y lo verás hacer fuerza).
• Nunca amenaces si no estás dispuesto a cumplir.
• Muestra respeto extra por las personas que hacen el trabajo más pesado.
• Haz lo que creas que sea correcto, sin importar lo que otros piensen.
• Dale una mano a tu hijo cada vez que tengas la oportunidad. Llegará el momento en que ya no te dejará hacerlo.
• Aprende a mirar a la gente desde sus sandalias y no desde las tuyas.
• Ubica tus pretensiones en el marco de tus posibilidades.
• Recuerda el viejo proverbio: sin deudas, no hay peligros ni problemas.
• No hay nada más difícil que responder a las preguntas de los necios.
• Aprende a compartir con los demás y descubre la alegría de ser útil a tu prójimo. El que no vive para servir, no sirve para vivir.
• Acude a tus compromisos a tiempo. La puntualidad es el respeto por el tiempo ajeno.
• Confía en la gente, pero cierra tu coche con llave.
• Recuerda que el gran amor y el gran desafío incluyen también ‘el gran riesgo’.
• Nunca confundas riqueza con éxito.
• No pierdas nunca el sentido del humor y aprende a reírte de tus propios defectos.
• No esperes que otro sepa lo que quieres si no lo dices.
• Aunque tengas una posición holgada, haz que tus hijos paguen parte de sus estudios.
• Haz dos copias de las fotos que saques y envíalas a las personas que aparezcan en las fotos.
• Trata a tus empleados con el mismo respeto con que tratas a tus clientes.
• No olvides que el silencio es a veces la mejor respuesta.
• No deseches una buena idea porque no te gusta de quien viene.
• Nunca compres un colchón barato: nos pasamos la tercera parte nuestra vida encima de él.
• No confundas confort con felicidad.
• Nunca compres nada eléctrico en una feria artesanal.
• Escucha el doble de lo que hablas (por eso tenemos dos oídos y una sola boca).
• Cuando necesites un consejo profesional, pídelo a profesionales y no a amigos.
• Aprende a distinguir quiénes son tus amigos y quiénes son tus enemigos.
• Nunca envidies: la envidia es el homenaje que la mediocridad le rinde al talento.
• Recuerda que la felicidad no es una meta sino un camino: disfruta mientras lo recorres.
• Si no quieres sentirte frustrado, no te pongas metas imposibles.
• La gente más feliz no necesariamente tiene lo mejor de todo.

How To Set Up SSH Keys

Step One—Create the RSA Key Pair

ssh-keygen -t rsa

Step Two—Store the Keys and Passphrase

Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):

Step Three—Copy the Public Key

ssh-copy-id user@123.45.56.78

Alternatively, you can paste in the keys using SSH:

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

Optional Step Four—Disable the Password for Root Login

sudo nano /etc/ssh/sshd_config

Within that file, find the line that includes PermitRootLogin and modify it to ensure that users can only connect with their SSH key:

PermitRootLogin without-password

Put the changes into effect:

reload ssh

Source: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys–2

Osx: Set Brew behind proxy server

First, set up http and https proxy server for Brew:

http_proxy=https://user:password@proxy:port https_proxy=https://user:password@proxy:port brew install PACKAGE

Then, set up proxy for Git, used by Brew.

git config --global http.proxy https://user:password@proxy:port

To reset configuration to its initial values:

git config --global --unset http.proxy

Meet Easton LaChappelle, The 19-Year-Old Luminary Building A Cheaper, Better Prosthetic Limb

You probably haven’t heard much about 19-year-old Easton LaChappelle, though he’s already done enough to land a job at NASA. Simply put, LaChappelle is changing the world for the better.

There’s been a fundamental shift in how we see technology. Science and engineering are no longer just industries. Technology is something we’re passionate about, whether we’re arguing over the iPhone or eagerly anticipating the next technology that will change everything. Just like every song has a story, the technology we most care about has a deeply personal journey behind it, from Steve Jobs’ decades-long obsession with changing how we use computers to Sergey Brin and Larry Page turning a fascination with the mathematics that underlie how we use the Internet into Google. Just like we care as much about the singer as we do the song, we care about the engineer behind the world-changing idea.

In Luminaries, the first original series from Uproxx, we find some of the most fascinating people in science and technology, and tell you not just what they’re making and how it’s revolutionary, but the creative process and the inspiration behind it. For example, Easton’s prosthetic arm came about because he met a little girl using a limb that cost $80,000. That struck him as far too much.

So Easton taught himself robotics and combined open source designs with 3D printing to create a completely functional prosthetic arm. Even as Easton refines his designs, he’s using new and more powerful tools such as the HP Sprout to post his designs online for anyone to refine, repurpose, and use. He’s not just creating one thing, he’s giving everyone the ability to be their own engineer, to take what was once an involved, arcane process and make it one anyone can do. As tools such as the HP Sprout continue to proliferate, making 3D modeling and object scanning as simple as placing the object under a camera, we’ll continue to find new luminaries, and seeing how they redefine the world.

Source: http://uproxx.com/technology/2015/01/easton-lachappelle-luminary

Crunchbase API PHP Library

Por alguna razón se me ocurrió hacer una librería PHP para el API de Crunchbase. La misma se puede descargar de GitHub.

Uso:

require_once('crunchbase.php');

$crunchbase 	= new CrunchBase($user_key = 'XXX', $format = 'array');
$organizations 	= $crunchbase->organizations(array('query' => 'wharton school', 'organization_types'=> array('company', 'investor')));

foreach ($organizations['data']['items'] as $organization)
{
	echo "<p><a href=\"".$organizations['metadata']['www_path_prefix'].$organization['path']."\">".$organization['name']."</a></p>";
}

Edit (07/12/2014): La gente de CrunchBase ya ha agregado la librería dentro de su documentación :)

Screen Shot 2014-12-09 at 1.04.22 AM

Callback para validar CUIT con CodeIgniter PHP

Comparto cómo validar un número de CUIT/CUIL usando un callback de form_validation en un controlador de CodeIgniter:

// Cargo la libreria de validacion de formularios
$this->load->library('form_validation'); 

// Defino las reglas de validacion del formulario
$this->form_validation->set_rules('cuit', 'CUIT', 'xss_clean|required|numeric|callback_valid_cuit');

// ...

if ($this->form_validation->run() != FALSE)
{
    // Todo OK.
}
else
{
    // Error /:
}

Método de callback:

/*
 * Form Validation Callback: Valida un Nro. de CUIT
 */
public function valid_cuit($cuit)
{
    $cuit_array = str_split(str_replace(array(' ', '-'), array(), $cuit));

    if ((count($cuit_array) < 11) OR (count($cuit_array) > 11))
    {
        // Usando lang
        // $this->form_validation->set_message('valid_cuit', $this->lang->line('form_cuit_error'));
        $this->form_validation->set_message('valid_cuit', 'Error al validar el CUIT');

        return FALSE;
    }

    $result  = $cuit_array[0] * 5;
    $result += $cuit_array[1] * 4;
    $result += $cuit_array[2] * 3;
    $result += $cuit_array[3] * 2;
    $result += $cuit_array[4] * 7;
    $result += $cuit_array[5] * 6;
    $result += $cuit_array[6] * 5;
    $result += $cuit_array[7] * 4;
    $result += $cuit_array[8] * 3;
    $result += $cuit_array[9] * 2;

    $div    = intval($result / 11);
    $resto  = $result - ($div * 11);

    if ($resto == 0)
    {
        return ($resto == $cuit_array[10]) ? TRUE : FALSE;
    }
    elseif ($resto == 1)
    {
        if (($cuit_array[10] == 9) AND ($cuit_array[0] == 2) AND ($cuit_array[1] == 3))
        {
            return TRUE;
        }
        elseif (($cuit_array[10] == 4) AND ($cuit_array[0] == 2) AND ($cuit_array[1] == 3))
        {
            return TRUE;
        }
    }
    elseif ($cuit_array[10] == (11 - $resto))
    {
        return TRUE;
    }
    else
    {
        // Usando lang
        // $this->form_validation->set_message('valid_cuit', $this->lang->line('form_cuit_error'));
        $this->form_validation->set_message('valid_cuit', 'Error al validar el CUIT');

        return FALSE;
    }
}

Cómo seguir una oferta en Internet

cyber-logo

Esta semana del 11 de Noviembre tuvimos en Argentina el famoso CyberMonday (evito usar el nombre separado para no tener problemas como los descriptos en éste post de Mariano Amartino). No hay que ser un genio para imaginarse que muchas de las rebajas no son tan cuantiosas, por no decir un engaño, y hemos visto muchos posts en Facebook dando vueltas que muestran cómo suben los precios algunos días antes del mítico Lunes y sobre ese precio aplican la rebaja. Por esta razón, se me ocurrió poder seguir estas ofertas generando screenshots de las páginas con un poquito de código.

Lo primero que hay que hacer es instalar el webkit2png, una herramienta que nos permite generar estos screenshots.

Para OSX:
brew install webkit2png

Para Linux:
Existe una versión en Python que inclusive puede hacer screenshots de sitios en Flash https://github.com/AdamN/python-webkit2png.

Una vez instalado creamos el bash script y lo guardamos, por ejemplo: cybermonday_screenshot.sh

#!/bin/bash

## URLS a trackear
urls=(	"http://www.falabella.com.ar/falabella-ar/product/2122445/Aire-acondicionado-US-126TNW1-Jet-Cool-2840-FC"
	"http://www.garbarino.com/m/tv-led-samsung-40--full-hd-un40f6100-3d-df/ce1dae1a7c" 
	"http://www.garbarino.com/m/lavarropas-automatico-samsung-7-kg-wf1702weuu-inoxidable/732e0d0eb4")

for url in "${urls[@]}"
do
    webkit2png --ignore-ssl-check --width=1280 --height=800 --md5 --datestamp --fullsize --scale=1 $url
done

Luego creamos un cron con el bash para que corra cada 6 horas:

* */6 * * * sh /pathToBashFile/cybermonday_screenshot.sh  >/dev/null 2>&1

Listo, de esta manera tendremos un screenshot de las distintas ofertas y podremos luego comparar si las ofertas son reales.
¡Ah!, también se puede especificar un directorio para que webkit2png guarde las imagenes con –dir=DIR