Category Archives: Programación

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

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;
    }
}

CSS: font-face Import problem in Firefox [solved]

If your trying to import a non standard font you might get into trouble when debugging with Firefox:

​[15:13:35.383] downloadable font: download failed (font-family: “chunkfiveroman” style:normal weight:normal stretch:normal src index:2): bad URI or cross-site access not allowed source: http://mysite.com/fonts/chunkfive-webfont.ttf​

Everything seems fine, but FF isn’t displaying fonts as it should.

@font-face {
	font-family: chunkfiveroman;
	src: url('http://mysite.com/fonts/chunkfive-webfont.eot');
	src: url('http://mysite.com/fonts/chunkfive-webfont.eot?#iefix') format('embedded-opentype'),
	url('http://mysite.com/fonts/chunkfive-webfont.woff') format('woff'),
	url('http://mysite.com/fonts/chunkfive-webfont.ttf') format('truetype'),
	url('http://mysite.com/fonts/chunkfive-webfont.svg#chunkfiveroman') format('svg');
	font-weight: normal;
	font-style: normal;
}

Same Origin Restriction

Firefox also has strict requirements for where the font resides in relation to the website. It requires that all font assets be served from the exact same domain as the calling website.

If you are serving from Apache, you can add this to you .htaccess file to allow your site access to the fonts:

<filesmatch ".(ttf|otf|woff)$">
	<ifmodule mod_headers.c>
	        Header set Access-Control-Allow-Origin "*"
	</ifmodule>
</filesmatch>

Header set Access-Control-Allow-Origin “*”
That will fix the issue. One thing to note is that you can specify exactly which domains should be allowed to access your font. In the above htaccess I have specified that everyone can access my font with “*” however you can limit it to:

A single URL:

Access-Control-Allow-Origin: http://www.yoursite.com

Or a comma-delimited list of URLs

Access-Control-Allow-Origin: http://www.yoursite.com, http://www.anothersite.com

+ info: Mozilla Developer Network: HTTP access control (CORS)

Shortcuts para Sublime Text 3

Además de todos los shortcuts de Sublime, encontré estos bastaaante interesantes:
Ctrl + D: Selecciona palabra donde tengo parado el cursor. Si repito selecciona la próxima ocurrencia. Si alguna de esas ocurrencias la quiero envitar, hago Ctrl + K (escape), y sigo con Ctrl + D. Con Ctrl + U (undo) deshago una selección.
Ctrl + L: Selecciona línea donde tengo parado el cursor
Ctrl + Shift + A: Selecciona contenido del tag. Si repito vuelve a seleccionar dentro del parent tag, y así sucesivamente…
Ctrl + Shift + M: Selecciona todo el contenido dentro de un parentésis.
Ctrl + Shift + J: Selecciona todo el contenido que se encuentre dentro del mismo nivel de identación. Si repito vuelve a seleccionar un nivel más de identación, y así sucesivamente…
Selección del texto + Ctrl + Shift + L: Habilita la edición multilínea sin tener que hacer Alt+Shift+Flecha Abajo/Arriba
Alt + F3: Selecciona todas las palabras ocurrencias bajo el cursor para modificarlas todas juntas. Si hago Alt + Flecha Der/Izq puedo seguir modificando esas líneas.
Autocomplete: Escribiendo el primer caracter y tab hace autocomplete de la primera sugerencia. Si seguimos presionando Tab cambiará por la próxima sugerencia.
– Usar tab para ir completando los campos de los snippets (“field 1/X”)

Paquetes recomendados:

– Sidebarenhancements.
– Line endings.
Emmet: Este es increíble, deshabilita la selección multilínea pero escribiendo

 #parent>.child>ul.class-ul>li*5>a{Anchor text} 


y TAB escupe esto:

<div id="parent">
	<div class="child">
		<ul class="class-ul">
			<li><a>Anchor text</a></li>
			<li><a>Anchor text</a></li>
			<li><a>Anchor text</a></li>
			<li><a>Anchor text</a></li>
			<li><a>Anchor text</a></li>
		</ul>
	</div>
</div>

Esas cosas de nerd, para nerds


SMP-N100a

Hace un tiempo tengo un Sony Media Player (SMP-N100) sin usar, algo así como un Apple TV pero más viejo. No le doy mucho uso pues tengo Netflix en la PC, iPad… pero hoy se me ocurrió sacarle un poco el jugo, más que todo para jugar.

Resulta que tiene un par de canales predefinidos como YouTube, Billabong TV, Canal A… todos aburridos o con poco contenido. Gracias a esas limitaciones propias de la época del DVD, está preparado para Netflix y Pandora, pero no funciona a menos que use una IP de USA. Así que intenté ver la forma de poder ver películas que tenga en mi PC en la tele. En algunos minutos lo logré:

Cambié la configuración de conexión a Internet del Media Player y lo conecté al servidor de proxy que tengo instalado en la notebook (el todopoderoso tinyproxy), puse un canal cualquiera y un vídeo al azar. De esta forma pude ver cuál era el request que estaba haciendo el Sony Media Player al proxy: “http://billabong.bivl.kitd.com/2013_ATTACK_HIGHLIGHT2.mov”.

Modifiqué el archivo hosts (vim /etc/hosts) apuntando “billabong.bivl.kitd.com” al localhost. Después puse un archivo cualquiera en el root de mi servidor Apache y lo renombré a “2013_ATTACK_HIGHLIGHT2.mov”. Me hice un media center en 5′ :)

¿Era más fácil conectar la PC por cable a la tele?

20130923-083234.jpg

¡Psss! Otra forma de poder usar el SMP-N100 con Netflix en latam es con una VPN. Recomiendo los routers Mikrotik, que, entre la enormidad de cosas configurables que tiene, se le puede definir una VPN por rangos de IP. De esa manera podría tener el aparato pasando por la VPN (con IP de USA) mientras que el resto de los equipos de la red con otra IP.

Finalists 2nd Hackathon MercadoLibre Argentina

After long debate, we’re proud to have selected the 5 finalists from our 2nd Hackathon in Argentina. And the finalists are…

  • MercadoLibre Oportunidades (Maribel Maisano, Facundo Rodriguez Arceri)
  • NearBuy (Pablo Carranza, Matias Anaya)
  • Chequeá (Alejandro Cáserez, Guillermo Romeo, Juan Rossi)
  • Regalo Perfecto (Ramiro Rinaldi, Federico Rinaldi)
  • HackML (Daniel Grippo, Sebastian Kaplum, Pablo Canonico, Mauro Fogo)

We thank all contestants for participating and hope to see you all again in future hackathons. The winner will be announced this week at Red Innova’s event in Buenos Aires. Good luck to the finalists!

Fuente: http://developers.mercadolibre.com/Finalists-2nd-Hackathon-MercadoLibre-Argentina/

jCrop: Bind select action to button workaround

Here’s how to “bind” the jCrop script to a button. This might be useful if you don’t want to post the new dimensions and resize everytime the original image is selected.

<script type="text/javascript">

$(document).ready(function() {

	var jcrop_api;
	$('#banner-preview-img').Jcrop({
		setSelect: [ 0, 0, 780, 100],
		aspectRatio: 78/10,
		minSize: [780, 100]

	}, function() { jcrop_api = this });

	$('#apply-banner-crop').live('click', function(){
		$.post('/crop-script', { coords: jcrop_api.tellScaled() },
			function (response) {
			if (response.status = 'OK') 
			{
				// ok! (:
			}
			else
			{
				// Something went wrong
			}
		});

		return false;
	});
});
</script>

<div id="banner-preview">
	<h2>Crop your banner</h2>
	<img id="banner-preview-img" src="my_banner.jpg" />

	<a class="button first" href="#" id="apply-banner-crop">Apply</a>
	<a class="button">Cancel</a>
</div>

DOSBox: Emulador para juegos viejitos (Windows)

Odio los jueguitos de PC, siempre lo hice, y creo que siempre lo haré. Hoy un amigo me pidió un “vos que entendés…”, digamos en español: un favor. Quería jugar al Crusader, un juego de 1995 que obviamente no se puede correr en Windows XP fácilmente. Entonces tuve que meterme a ver de qué se trataba todo esto, y como no encontré ningún artículo claro en la web me meto a escribirlo:

Lo primero que tenemos que hacer es instalar la versión de DOSBox para nuestro OS (http://www.dosbox.com/download.php?main=1). El DOSBox es, según Wikipedia, “un emulador que recrea un entorno similar al sistema DOS con el objetivo de poder ejecutar programas y videojuegos originalmente escritos para el sistema operativo MS-DOS de Microsoft en ordenadores más modernos o en diferentes arquitecturas (como Power PC). También permite que estos juegos funcionen en otros sistemas operativos como GNU/Linux”.

Continue reading

GoDaddy, WordPress y Permalinks

Lo que tardé en poder hacer los permalinks de WordPress, es decir, hacer URL “lindas” como ésta: http://www.juanchorossi.com/bloggodaddy-wordpress-y-permalinks.

Leí en todos los foros habidos y por haber, hablaban del .htaccess, del mod_rewrite, que GoDaddy… de todo un poco, hasta que se me ocurrió borrar el .htaccess del root, y anduvo perfectamente.

Mejor no vuelvo a tocar. :S