<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Basilio Briceño</title>
	<atom:link href="http://briceno.mx/feed/" rel="self" type="application/rss+xml" />
	<link>http://briceno.mx</link>
	<description>About Freedom, UNIX, Web Programming, among other stuff</description>
	<lastBuildDate>Fri, 01 Feb 2013 01:10:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.2</generator>
		<item>
		<title>Curso de Desarrollo para Alta Disponibilidad con PHP en Guadalajara</title>
		<link>http://briceno.mx/2013/01/dev-ha-php-gdl/</link>
		<comments>http://briceno.mx/2013/01/dev-ha-php-gdl/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 01:04:33 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=305</guid>
		<description><![CDATA["Como desarrollar aplicaciones web que nunca se caigan".

Dirigido para todos los desarrolladores web que ya utilizan PHP y requieren incrementar sus skills para mejorar la disponibilidad de sus aplicaciones. Mejorar sus capacidades para crear y mantener sitios con altó tráfico, aprender a realizar pruebas de stress, así como adquirir mejores prácticas.

El curso abarca desde métricas para conocer la disponibilidad de tu aplicación, creación y emulación de ambientes de desarrollo y producción, hasta estategias y mejores prácticas para aprovechar los recursos disponibles y optmización de código.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-104" title="PHP" src="http://briceno.mx/wp-content/uploads/2008/09/PHPWikibookCover.jpg" alt="PHP" width="150" height="113" />&#8220;Como desarrollar aplicaciones web que nunca se caigan&#8221;.</p>
<p>Dirigido  para todos los desarrolladores web que ya utilizan PHP y  requieren  incrementar sus skills para mejorar la disponibilidad de sus   aplicaciones. Mejorar sus capacidades para crear y mantener sitios con   altó tráfico, aprender a realizar pruebas de stress, así como adquirir   mejores prácticas.</p>
<p>El curso abarca desde métricas para conocer la  disponibilidad de tu  aplicación, creación y emulación de ambientes de  desarrollo y  producción, hasta estategias y mejores prácticas para  aprovechar los  recursos disponibles y optmización de código.</p>
<p><a href="http://briceno.mx/wp-content/uploads/2013/01/flyer_dev-ha-php.jpg"><img class="alignnone size-full wp-image-306" title="Curso de Desarrollo para Alta Disponibilidad con PHP en Guadalajara" src="http://briceno.mx/wp-content/uploads/2013/01/flyer_dev-ha-php.jpg" alt="" width="540" height="759" /></a></p>
<p>Curso intensivo de fin de semana<br />
Sábados 9 y 16 de Febrero de 2013<br />
Duración 8 horas por día. (16 horas en total)<br />
Costo total: $2,500 M.N.<br />
Registrate en: <a title="Evento en Boletia" href="https://dev-ha-php.boletia.com" target="_blank">https://dev-ha-php.boletia.com</a></p>
<p>Es  importante traer un equipo de cómputo (laptop). Se proporcionarán  imágenes virtualizadas para los ejercicios, por lo que es importante que  el equipo cuente con al menos 1GB de RAM disponible (aparte de la  reservada al sistema operativo). Se recomienda tener alguna distribución  de Linux instalada y funcional en el equipo.</p>
<p>TEMARIO.</p>
<ul>
<li>Introduction<br />
Reliability vs Testability vs Maintainability.<br />
Measurements.</li>
<li>Environments.<br />
<em>&#8220;Runs OK in your computer, runs OK in production&#8221;</em></p>
<ul>
<li>Repositories.<br />
Subversion.<br />
Git.</li>
<li>Virtualization<br />
Vagrant (Virtualbox)<br />
Puppet</li>
</ul>
</li>
<li>Quality of code.<br />
<em>&#8220;How to fix and avoid errors.&#8221;</em></p>
<ul>
<li>Debugging.<br />
Built-in PHP debugging.<br />
Xdebug.</li>
<li>Test Driven Development.<br />
Concept.<br />
PHPUnit.<br />
CI &amp; Artifacts</li>
<li>Style and Readbility.</li>
</ul>
</li>
<li>Databases.<br />
<em>&#8220;How to work with clustered databases&#8221;<br />
</em>MySQL master-slave model<br />
MySQL Cluster<br />
MongoDB</li>
<li>Caching.<br />
<em>&#8220;How to save resources and do not fail at the attempt&#8221;<br />
</em>Memcache.<br />
Varnish.<br />
APC.<br />
MySQL.<br />
CDN.</li>
<li>High Availability (HA) Code Strategies.<br />
<em>&#8220;How to code with HA in mind&#8221;</em></p>
<ul>
<li>Scalability &amp; Redundancy.<br />
Web servers.<br />
Databases.</li>
<li>Availability.<br />
Custom connection pools.<br />
Request &amp; Response.<br />
Fail-over.</li>
<li>Performance.<br />
The closest, the fastest.<br />
Wise processing.<br />
Design Patterns heaven &amp; hell.</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2013/01/dev-ha-php-gdl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Easy and simple guide to create your own Vagrant box (Ubuntu-12.02-64 server bridged) from VirtualBox</title>
		<link>http://briceno.mx/2012/10/easy-guide-to-create-a-vagrant-box-from-virtualbox/</link>
		<comments>http://briceno.mx/2012/10/easy-guide-to-create-a-vagrant-box-from-virtualbox/#comments</comments>
		<pubDate>Tue, 02 Oct 2012 04:08:14 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=276</guid>
		<description><![CDATA[An easy and simple guide to create your own Vagrant box (Ubuntu 12.02 64 Server) from VirtualBox. This can be usefull if you have specific needs not provided by the "official" Vagrant boxes.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-249" title="Vagrant" src="http://briceno.mx/wp-content/uploads/2012/10/hippie.png" alt="Git" width="103" height="113" />This guide assumes that you already installed VirtualBox and Vagrant.</p>
<p>Set up a VirtualBox VM and assign the resources you need (I used precise64 as name), also configure it without the Audio and USB support. In the Network option enable the adapter to “Bridged Adapter” mode and assign the interface you want to use. In the Storage option select the image (iso) of your Ubuntu 12.02 64 Server to the “IDE Controller” and begin the installation according to your needs. If possible name your host as “vagrant”.</p>
<p>Once you installed, you will require to make some changes:</p>
<p><strong>Set your hostname as vagrant</strong></p>
<p>As a generic recommendation use the name vagrant as hostname.</p>
<pre class="brush: bash; title: ; notranslate">
sudo vi /etc/hostname
sudo vi /etc/hosts
</pre>
<p><strong>Add vagrant user and admin group</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo groupadd admin
sudo useradd -G admin -h /home/vagrant -s /bin/bash vagrant
sudo passwd vagrant
</pre>
<p><strong>Edit the sudoers file and add this lines to the file</strong></p>
<pre class="brush: bash; title: ; notranslate">
Defaults env_keep=&quot;SSH_AUTH_SOCK&quot;
%admin ALL=NOPASSWD: ALL
</pre>
<p><strong>If you need to use puppet install it now</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install puppet puppetmaster
</pre>
<p><strong>Install vagrant&#8217;s insecure key in the vagrant’s account</strong></p>
<pre class="brush: bash; title: ; notranslate">
mkdir ~/.ssh
cd ~/.ssh
wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant
wget http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub
mv vagrant.pub authorized_keys
chmod 0700 ~/.ssh
chmod 0640 ~/.ssh/authorized_keys
chmod 0640 ~/.ssh/vagrant
</pre>
<p><strong>Install VirtualBox guest additions</strong><br />
Mount the VirtualBox guest additions and</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install linux-headers-$(uname -r) build-essential
mount /dev/cdrom /mnt
sudo sh /mnt/VBoxLinuxAdditions.run
</pre>
<p><strong>Clean your apt’s cache</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get clean
</pre>
<p><strong>Modify the interfaces file</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo vi /etc/network/interfaces
</pre>
<p>and add this line to the end of the eth0 configuration interface</p>
<pre class="brush: bash; title: ; notranslate">
pre-up sleep 2
</pre>
<p><strong>Add the Vagrant’s SSH port</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo vi /etc/ssh/sshd_config
</pre>
<p><strong>Add this line after Port 22 declaration</strong></p>
<pre class="brush: bash; title: ; notranslate">
Port 2222
</pre>
<p><strong>Create your box</strong><br />
Change your position to the path the VirtualBox image is located and create your box.</p>
<pre class="brush: bash; title: ; notranslate">
cd ~/VirtualBox\ VMs/precise64/
vagrant package --base precise64
</pre>
<p><strong>Add your new box to Vagrant list</strong></p>
<pre class="brush: bash; title: ; notranslate">
vagrant box add precise64 ~/VirtualBox\ VMs/precise64/package.box
</pre>
<p><strong>Initialize your box</strong></p>
<pre class="brush: bash; title: ; notranslate">
vagrant init precise64
</pre>
<p><strong>Modify the vagrant configuration file of your box</strong></p>
<pre class="brush: bash; title: ; notranslate">
vi ~/.vagrant.d/boxes/p64test/Vagrantfile
</pre>
<p>and add this lines in to Vagrant::Config.run</p>
<pre class="brush: bash; title: ; notranslate">
config.vm.network :bridged
config.ssh.host = &quot;vagrant&quot;
config.ssh.port = 2222
</pre>
<p><strong>Start your box</strong></p>
<pre class="brush: bash; title: ; notranslate">
vagrant up
</pre>
<p>And that&#8217;s it, enjoy!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2012/10/easy-guide-to-create-a-vagrant-box-from-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Execute a Git hook by branch</title>
		<link>http://briceno.mx/2011/12/excute-a-git-hook-by-branch/</link>
		<comments>http://briceno.mx/2011/12/excute-a-git-hook-by-branch/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 22:45:38 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=246</guid>
		<description><![CDATA[Many times I've been working in several projects when deployment of different webs according to a branch are necessary. Finally I just wrote a tiny <a href="http://book.git-scm.com/5_git_hooks.html" target="_blank">Git hook</a> script that helps me out with this matter, I hope it could help you as it does to me.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-249" title="git" src="http://briceno.mx/wp-content/uploads/2011/12/git.jpg" alt="Git" width="150" height="113" />Many times I&#8217;ve been working in several projects when deployment of different webs according to a branch are necessary. Finally I just wrote a tiny <a href="http://book.git-scm.com/5_git_hooks.html" target="_blank">Git hook</a> script that helps me out with this matter, I hope it could help you as it does to me.</p>
<p>By example, for <strong>branch</strong> master I need that every time someone pushes commits to it, changes deploys in /path/to/my/deployment/<em>unstable</em>, and if branch <strong>stable</strong> is pushed, then changes are deployed in /path/to/my/deployment/<em>stable</em>.</p>
<p>The script I wrote uses the <strong>post-update</strong> <a href="http://book.git-scm.com/5_git_hooks.html" target="_blank">hook</a>, and <strong><a href="http://en.wikipedia.org/wiki/Cut_(Unix)" target="_blank">cut</a></strong> to &#8220;parse&#8221; the revision name and provide the branch name, then I can use that name to set the path of the repo. After that I check if that directory exists, and then change the <strong>GIT_DIR</strong> to that path. Finally I change the position to that path and execute a simple <em>git pull</em> specifying the name of the branch.</p>
<p>Feel yourself free to use it. <img src='http://briceno.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to &quot;post-update&quot;.

BRANCH=`echo $1 | cut -d '/' -f 3`

if [ $BRANCH == 'master' ]; then

  STAGE='unstable'

else

  STAGE=$BRANCH

fi  

STAGE_PATH=/my/stage/path/$STAGE/

if [ -d $STAGE_PATH ]; then

 GIT_DIR=$STAGE_PATH/.git
 cd $STAGE_PATH
 git pull origin $BRANCH

else

 echo 'Stage path for '$STAGE' not found'

fi

exec git update-server-info
</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2011/12/excute-a-git-hook-by-branch/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Entrevista con Maestros del Web</title>
		<link>http://briceno.mx/2011/10/entrevista-con-maestros-del-web/</link>
		<comments>http://briceno.mx/2011/10/entrevista-con-maestros-del-web/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 19:58:02 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=235</guid>
		<description><![CDATA[Eugenia Tobar ha publicado una entrevista sobre algunos de los que promovemos el desarrollo de aplicaciones web con PHP en México, en el portal Maestros del Web. Recomiendo leerla en ella se menciona a Claudio Morales gran entusiasta del lenguaje y coordinador de la comunidad ProgramadoresPHP, así como a Carlos Santana de Milksoft. Otro buen [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://briceno.mx/wp-content/uploads/2008/09/PHPWikibookCover.jpg" alt="" title="PHPWikibookCover" width="150" height="113" class="alignright size-full wp-image-104" /><a href="https://twitter.com/eutobar" target="_blank">Eugenia Tobar</a> ha publicado una entrevista sobre algunos de los que promovemos el desarrollo de aplicaciones web con PHP en México, en el portal <a title="Maestros del Web" href="http://www.maestrosdelweb.com" target="_blank">Maestros del Web</a>. Recomiendo <a href="http://www.maestrosdelweb.com/editorial/grandes-impulsadores-php-mexico/" target="_blank">leerla</a> en ella se menciona a <a href="https://twitter.com/pronuer" target="_blank">Claudio Morales</a> gran entusiasta del lenguaje y coordinador de la comunidad <a href="http://www.comunidadphp.org/" target="_blank">ProgramadoresPHP</a>, así como a <a href="https://twitter.com/czantany" target="_blank">Carlos Santana</a> de <a href="http://www.milkzoft.com/" target="_blank">Milksoft</a>. Otro buen promotor del lenguaje es <a href="http://levhita.net/" target="_blank">Argel Arias</a> tambien conocido como <a href="https://twitter.com/levhita" target="_blank">levhita</a>, principal impulsor de la comunidad <a href="http://phpmexico.mx/" target="_blank">PHPmx</a>.</p>
<p><a href="http://www.maestrosdelweb.com/editorial/grandes-impulsadores-php-mexico/" target="_blank">http://www.maestrosdelweb.com/editorial/grandes-impulsadores-php-mexico/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2011/10/entrevista-con-maestros-del-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Software Patents are Evil</title>
		<link>http://briceno.mx/2011/10/software-patents-are-evil/</link>
		<comments>http://briceno.mx/2011/10/software-patents-are-evil/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 15:30:10 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Freedom]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=226</guid>
		<description><![CDATA[Patents were invented to protect innovation, but they are being used as weapons, by the evil tech companies and dreaded patent trolls, to stifle it. Whether buying up patents to protect against lawsuits or amassing it in order to suit others, this villains has ever prioritised profit over creation. This is a crisis. But we must prevail.]]></description>
			<content:encoded><![CDATA[<p>Patents were invented to protect innovation, but they are being used as weapons, by the evil tech companies and dreaded patent trolls, to stifle it. Whether buying up patents to protect against lawsuits or amassing it in order to suit others, this villains has ever prioritised <strong>profit over creation</strong>. This is a crisis. But we must prevail.</p>
<p>This <strong>infographic</strong> from <strong><a href="http://www.mbaonline.com/patents/">MBA Online</a></strong> explains the depth of the situation pretty well.</p>
<p><a href="http://briceno.mx/wp-content/uploads/2011/10/patents.jpg"><img class="aligncenter size-full wp-image-227" title="Patents are Evil" src="http://briceno.mx/wp-content/uploads/2011/10/patents.jpg" alt="Patents are Evil" width="550" height="4585" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2011/10/software-patents-are-evil/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP y los salarios en México</title>
		<link>http://briceno.mx/2011/05/php-y-los-salarios-en-mexico/</link>
		<comments>http://briceno.mx/2011/05/php-y-los-salarios-en-mexico/#comments</comments>
		<pubDate>Sun, 08 May 2011 09:38:58 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Mexico]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Salaries]]></category>
		<category><![CDATA[Salarios]]></category>
		<category><![CDATA[Tabulador]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=196</guid>
		<description><![CDATA[¿Por qué los empleadores pagan más a programadores especializados en ciertos lenguajes que en otros? ¿qué es más importante a ser tomado en cuenta a la hora de establecer tabuladores salariales, la lógica del programador, lo complejo de la tarea a realizar, o el lenguaje de programación? Si se contrata a un carpintero, no se le contrata debido a que corta troncos con sierras de tal marca o por que usa martillos de aquella otra marca, se le contrata por que es un carpintero, sabe hacer su trabajo y da resultados, lo mismo aplica para los programadores, entonces ¿por qué tantas empresas insisten en pagar tarifas basadas en el lenguaje y no en el programador?]]></description>
			<content:encoded><![CDATA[<p>Como programador uno se pregunta ¿en qué lenguaje debo invertir mi tiempo? es cierto que no existe un lenguaje perfecto y que la elección generalmente está basada en preferencias personales o bien, en el tipo de tareas a realizar, sin embargo, existe otro punto a tomar en cuenta: el salario, o en términos simples, ¿en qué lenguaje debo especializarme para ser mejor pagado?</p>
<p>Y es aqui donde nos preguntamos ¿por qué los empleadores pagan más a programadores especializados en ciertos lenguajes que en otros? ¿qué es más importante a ser tomado en cuenta a la hora de establecer tabuladores salariales, la lógica del programador, lo complejo de la tarea a realizar o el lenguaje de programación? Si se contrata a un carpintero, no se le contrata debido a que corta troncos con sierras marca <em>Honda</em>* o por que usa martillos marca <em>Craftman</em>*, se le contrata porque es un carpintero, sabe hacer su trabajo y da resultados, lo mismo aplica para los programadores, entonces ¿por qué tantas empresas insisten en pagar tarifas basadas en el lenguaje y no en el programador?</p>
<p>Y ¿qué tiene que ver PHP en lo anterior?, pues resulta que es un de los lenguajes donde los programadores salen más afectados por el tema mencionado. PHP es un lenguaje fácil de aprender, flexible y se puede desarrollar con él en tiempos muy cortos, además es genial para usarse como pegamento entre aplicaciones. Siendo así, ¿por qué es considerado inferior en términos salariales?</p>
<p>El motivo está principalmente basado en un círculo vicioso generado por los programadores novatos, ¿cómo es esto?, cuando un programador novato trabaja generalmente no presta atención en la calidad, se enfoca únicamente en terminar lo que le piden sin añadir ningún valor agregado a su trabajo, ¿el resultado? programas en estilo código spaghetti, estructuras mal aplicadas, carencia de optimizado, entradas de datos inseguras, y un sin fin de “features” mas. Lo anterior repercutirá en el desempeño del programa, y el empleador curiosamente comienza, no por dudar de la eficacia del programador, sino en el lenguaje.</p>
<p>Así entonces mientras mas novato el programador peor calidad de código, ante tal calidad más desconfianza se genera en el lenguaje, a mayor desconfianza en el lenguaje menores salarios, a menores salarios los programadores de calidad se interesan menos en el lenguaje, a menor cantidad de programadores de calidad mayor contratación de programadores novatos, a mayor cantidad de programadores novatos peor calidad de código y de ese modo el ciclo va degradando el valor salarial.</p>
<p>El programador novato generalmente llega a creer que lo que hace es todo lo que hay en PHP, incluso coloca en su currículo el adjetivo “experto en PHP” o “nivel avanzado en PHP”, y como ya se considera a si mismo “experto” no se esfuerza en aprender más, ni mejorar la calidad de su trabajo. Y este, es un verdadero problema, sin embargo más que solo exponerlo y preocuparnos ¿cómo podemos invertir el círculo vicioso en uno virtuoso?</p>
<p>No es tan complicado, mientras mayor calidad en el código y valor agregado ofrezca el programador, mejores resultados verá el empleador, a mejores resultados el empleador deberá ofrecer mejor salario, a mayor salario más programadores de calidad interesados en el lenguaje, a mayor cantidad de programadores de calidad mayor calidad en el código y valor agregado, y de ese modo el ciclo va enriqueciendo el valor salarial.</p>
<p>Un buen punto de arranque para comenzar a invertir el ciclo es reconocer en donde se encuentra el programador y ponerse metas para aprender y mejorar. A mediados de febrero 2011, surgió en el grupo de programadores de “PHP México” una iniciativa para definir un tabulador sencillo basado en los conocimientos y capacidades de los programadores, lo presento a continuación.</p>
<ul>
<li><strong>Newbie</strong> &#8211; Generalmente escribe PHP, SQL y HTML/JS/CSS en el mismo archivo y acostumbra a copiar y pegar cualquier cosa que se encuentra en internet y según dicen los foros es la solución.</li>
<li><strong>Apprentice</strong> &#8211; Programador que ha aceptado que necesita mejorar y decide aprender mejores prácticas y aplicarlas. Consulta en foros no para buscar código para copiar y pegar, sino para analizarlo y pregunta después de haber investigado por cuenta propia.</li>
<li><strong>Junior</strong> &#8211; Generalmente separa su código, sabe qué son los patrones de diseño y los usa, entiende qué es REST, CRUD, ORM, SQL Injection, XSS, I/O Sanitization, etc. y usa estas técnicas, es excelente aprendiendo y usando APIs de terceros.</li>
<li><strong>Senior</strong> &#8211; Programador capaz de desarrollar sus propias herramientas, consciente de como funciona PHP internamente, sumamente interesado en el performance de las aplicaciones mas allá de su facilidad de desarrollo, no está satisfecho con el funcionamiento de todas las herramientas y APIs de terceros tal cual vienen y siempre busca innovar y crear cosas que mejoren y faciliten el desempeño de su trabajo y aplicaciones. Contribuye con código en diferentes proyectos y comunidades. Entiende que “PHP es el frontend de su backend”.</li>
<li><strong>Master</strong> &#8211; Capaz de desarrollar sus propias extensiones para PHP en C, contribuye a PECL y lo contratan para mejorar el performance de aplicaciones de alto rendimiento.</li>
<li><strong>Core</strong> &#8211; Contribuye al desarrollo del core de PHP o el motor de Zend, contribuye en algunas extensiones usadas por muchas personas, generalmente se le ve en conferencias internacionales y es usual ver su nombre en PECL y en los créditos en cambios de versión de PHP.</li>
</ul>
<p>Respecto de los salarios, estos pueden variar dependiendo la zona, los siguientes son sugeridos en base a los costos de vida de las principales ciudades de México en febrero de 2011**.</p>
<ul>
<li><strong>Newbie</strong> &#8211; hasta 8 mil pesos</li>
<li><strong>Apprentice</strong> &#8211; de 8 a 15 mil pesos</li>
<li><strong>Junior</strong> &#8211; de 15 a 25 mil pesos</li>
<li><strong>Senior</strong> &#8211; de 25 a 40 mil pesos</li>
<li><strong>Master</strong> &#8211; de 40 al límite que establezca con el empleador.</li>
</ul>
<p>Considero que lo anterior ayudará a dar una pauta sobre cómo mejorar el salario de los programadores que usan PHP. Ahora bien, no todo recae en el programador, el empleador deberá estar consciente de este tabulador y mejorarlo en base a los resultados de los programadores. De hacerse así es muy probable que se logren mejorar no solo los salarios, sino la calidad del software y se incrementen los beneficios mutuos.</p>
<p><span style="font-size: 10px;">* Las marcas mencionadas son propiedad de sus respectivas compañías, se mencionan únicamente con motivos ilustrativos.</span><br />
<span style="font-size: 10px;">** Las cantidades expresadas son mensuales.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2011/05/php-y-los-salarios-en-mexico/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Interview with LoadStorm</title>
		<link>http://briceno.mx/2011/04/interview-with-loadstorm/</link>
		<comments>http://briceno.mx/2011/04/interview-with-loadstorm/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 03:49:36 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Load]]></category>
		<category><![CDATA[Performace]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=182</guid>
		<description><![CDATA[This week <a href="http://loadstorm.com" target="_blank">LoadStorm</a>, a nice website about Load Testing and Performance, <a href="http://loadstorm.com/2011/interview-basilio-briceno-about-performance-testing" target="_blank">interviewed me</a>. I want to use this post to thank <a href="http://www.linkedin.com/in/scottpricedenver">Scott Price</a> for the interview, and recommend their <a href="http://loadstorm.com/blog" target="_blank">blog</a> and to know about the <a href="http://loadstorm.com/software-testing-tools">great tools</a> they have.]]></description>
			<content:encoded><![CDATA[<p><img src="http://briceno.mx/wp-content/uploads/2011/04/LoadStorm.jpg" alt="" title="LoadStorm" width="150" height="113" class="alignright size-full" /> This week <a href="http://loadstorm.com" target="_blank">LoadStorm</a>, a nice website about Load Testing and Performance, <a href="http://loadstorm.com/2011/interview-basilio-briceno-about-performance-testing" target="_blank">interviewed me</a>. I want to use this post to thank <a href="http://www.linkedin.com/in/scottpricedenver" target="_blank">Scott Price</a> for the interview, and recommend their <a href="http://loadstorm.com/blog" target="_blank">blog</a> and to know about the <a href="http://loadstorm.com/software-testing-tools" target="_blank">great tools</a> they have.</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2011/04/interview-with-loadstorm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL vs MySQL</title>
		<link>http://briceno.mx/2011/03/postgresql-vs-mysql/</link>
		<comments>http://briceno.mx/2011/03/postgresql-vs-mysql/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 19:03:13 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=171</guid>
		<description><![CDATA[Uno de los errores más comunes al momento de seleccionar un RDBMS libre es basarse en la popularidad, lo que “todos usan” o que “todos sugieren” por las razones que “todos comentan”, en vez de realizar un análisis personal. Pues bien, como han sido tantos los casos que he visto, me he dado a la tarea de escribir este post que deseo ayude en la selección del RBMS que realmente necesitas.]]></description>
			<content:encoded><![CDATA[<p><a href="http://briceno.mx/wp-content/uploads/2011/03/posgresmysql.jpg"><img class="alignright size-full wp-image-160" title="posgresmysql" src="http://briceno.mx/wp-content/uploads/2011/03/posgresmysql.jpg" alt="" width="150" height="113" /></a>Uno de los errores más comunes al momento de seleccionar un RDBMS libre es basarse en la popularidad, lo que “todos usan” o que “todos sugieren” por las razones que “todos comentan”, en vez de realizar un análisis personal. Pues bien, como han sido tantos los casos que he visto, me he dado a la tarea de escribir este breve post que deseo ayude en la selección del RBMS que realmente necesitas.</p>
<p><strong>Percepción</strong>.</p>
<p>Por años, se ha tenido la percepción de que MySQL es más rápido y fácil de usar que PostgreSQL. A PostgreSQL se le percibe como un RDBMS más poderoso, más enfocado en integridad de datos, y más estricto en cumplir con las especificaciones SQL y que por lo tanto más lento y difícil de usar. Sin embargo, ambos han tenido un crecimiento diferente, por ejemplo, MySQL (hasta su versión 5.1) había sido fragmentado en proyectos como Drizzle, Percona, MariaDB y OurDelta, mientras que PostgreSQL (hasta su versión 8.3) se ha mantenido en un único esfuerzo, enfocándose en mejorar su desempeño y escalabilidad.</p>
<p><strong>PostgreSQL</strong>.</p>
<p>PostgreSQL se desempeña mejor especialmente en ambientes con altas cargas de usuario y consultas complejas y donde la integridad de los datos es muy importante. Además de proveer mecanismos de autenticado como LDAP y Kerberos, y una vez autenticado, toda la comunicación puede realizarse utilizando SSL para ambientes donde que requiere ese nivel de seguridad.</p>
<p>Al agregar y modificar datos, PostgreSQL hace cumplir un número de reglas definidas por el usuario para asegurar la calidad de los datos en base a las reglas de negocio. Estas van de simples comprobaciones de reglas (check constraints) a comprobaciones de llaves foráneas (foreing key checks). Una vez almacenados los datos, proporciona un sistema de respaldos en linea que trabaja en conjunto con un mecanismo PITR (Point-In-Time Recovery) donde se puede ver una tabla en el estado en el que se encontraba en cierta fecha, proporcionando así un método flexible para la rápida recuperación de datos.</p>
<p>Otra ventaja importante de PostgreSQL es la capacidad de su arquitectura para soportar módulos agregados (add-on), por ejemplo PostGIS, un módulo que provee funcionalidad para el manejo de información geoespacial. Además de su capacidad de interpretar diferentes lenguajes de procedimiento almacenado (stored procedures languages), lo que permite a los desarrolladores escribir código usando el lenguaje de programación que se adapta a sus necesidades y requerimientos, por ejemplo, un trigger que necesita ejecutar procesos complejos de texto puede ser escrito en Perl, aprovechando así, su avanzado manejo de expresiones regulares.</p>
<p><strong>MySQL.</strong></p>
<p>MySQL tiene la reputación de ser la base de datos libre, más rápida y fácil de usar. Fue diseñada para proveer un veloz Método de Acceso Secuencial Indexado, conocido como ISAM (Indexed Sequential Access Method). Este tipo de carga de datos, caracterizado por la ejecución de consultas cortas, combinado con técnicas como el cacheo de consultas, ayudan a mejorar el desempeño de MySQL. Este enfoque en desempeño, ha dado como resultado características como el MySQL Cluster, que le permite a la base de datos escalar en recursos más allá de un solo servidor físico.</p>
<p>Al igual que PostgreSQL permite extensiones o módulos externos para añadir funcionalidad, específicamente motores de almacenamiento. MyISAM es el motor por defecto, provee buen desempeño en ambientes de lectura de datos. Así mismo cuenta con el motor de almacenamiento InnoDB, que provee la robustez requerida en transacciones en ambientes de intensa escritura.</p>
<p>Adicionalmente existen motores de almacenamiento de terceros como Brighthouse y DB2 que agregan más funcionalidades a MySQL. Esta flexibilidad permite a los administradores seleccionar el motor de almacenamiento de acuerdo a las necesidades individuales en cada tabla. Por ejemplo en una tabla de países donde se realizan más consultas se puede utilizar MyISAM y en una tabla de ventas que requiere intensa escritura y aseguramiento de datos se puede utilizar InnoDB.</p>
<p>MyISAM, como ya vimos es excelente para consultas simples. Sin embargo, es más vulnerable a corrupción de datos que otros motores, y después de una fatalidad puede tomar mucho tiempo reparar las tablas, proceso que se debe realizar con la base de datos “apagada”, lo que en un ambiente productivo en línea puede resultar fatal. Lo que es más, no soporta llaves foráneas ni transacciones, que le darían la Atomicidad, Consistencia, Aislamiento y Durabilidad, también conocidas como propiedades ACID (Atomicity, Consistency, Isolation and Durability), que todo RDBMS procura tener. Adicionalmente, debido a que MyISAM utiliza archivos de texto para el almacenado de datos, realiza un bloqueo (locking) de las las tablas al escribir, por lo que tiene problemas con las consultas y actualizaciones (updates) concurrentes.</p>
<p>La integración de InnoDB como motor de almacenamiento, trajo mejoras a MySQL proveyendo un mejor mecanismo de recuperación de datos y habilitando transacciones compatibles con las propiedades ACID. Sin embargo, este motor no es tán rápido como MyISAM ni tan poderoso como PostgreSQL.</p>
<p><strong>Conclusión</strong>.</p>
<p>Selecciona el RDBMS de acuerdo a los requerimiento del proyecto, si tu operación requiere velocidad, MySQL con MyISAM es lo mejor, solo no olvides los riegos que usarlo conlleva. Si tus operaciones son críticas y no puedes darte el lujo de arriesgar ni un byte, requieres precisión, y la robustez de un RDBMS transaccional, no lo pienses y usa PostgreSQL. En conclusión, como en todo, utiliza aquello que se adapta a tus necesidades y no aquello que está de moda.</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2011/03/postgresql-vs-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Facturación Electrónica en México</title>
		<link>http://briceno.mx/2010/12/facturacion-electronica-en-mexico/</link>
		<comments>http://briceno.mx/2010/12/facturacion-electronica-en-mexico/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 05:33:56 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Facturación Electrónica]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=149</guid>
		<description><![CDATA[El Sistema de Administración Tributaria (SAT) en México, ha dispuesto que en 2010 se inicie el proceso de adopción del uso de Comprobantes Fiscales Digitales (CFD), también conocidos como Facturas Electrónicas. Pues bien, personalmente es un asunto del que no me había ocupado hasta hace pocas semanas, dada la necesidad que tuve de emitir comprobantes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://briceno.mx/wp-content/uploads/2010/12/factura_electronica.jpg"><img class="alignright size-full wp-image-160" title="factura_electronica" src="http://briceno.mx/wp-content/uploads/2010/12/factura_electronica.jpg" alt="" width="150" height="113" /></a>El Sistema de Administración Tributaria (SAT) en México, ha dispuesto que en 2010 se inicie el proceso de adopción del uso de Comprobantes Fiscales Digitales (CFD), también conocidos como Facturas Electrónicas. Pues bien, personalmente es un asunto del que no me había ocupado hasta hace pocas semanas, dada la necesidad que tuve de emitir comprobantes fiscales. Pues bien, esta entrada será respecto de mis “aventuras” al tratar de emitir Facturas Electrónicas.</p>
<h4>El Prinicipio.</h4>
<p>Como toda historia habrá que comenzar por el principio, y en este caso se trata de contar con todos los requisitos para emitir Facturas Electrónicas, no haré una lista tal cual ya que para eso pueden ir al <a title="El sitio del SAT" href="http://www.sat.gob.mx" target="_blank">sitio del SAT</a> y perderse, digo, orientarse en su laberintico y nada amigable contenido -sí, ya se que el contenido del SAT es solo reglas y políticas, pero vamos que incluso ese tipo de contenido bien presentado puede hacer más fácil el proceso- mas bien utilizaré el simple método de contarles tal como fué mi experiencia.</p>
<p>El primer paso fué conseguir la FIEL o como ellos (SAT) la llaman Firma Electrónica Avanzada, que en realidad no es más que una llave pública. Pero como sabemos, una llave pública sirve de muy poco sin una llave privada. Por lo que el primer paso es obtener ambas.</p>
<h4>El SOLCEDI.</h4>
<p>¿Como lo hice? El SAT provee una aplicación para windows (no me pregunten por qué en el SAT piensan que todo el mundo usa únicamente ese sistema operativo, ya hablaremos de eso en su momento) llamada SOLCEDI, aún desconozco el significado del nombre, aunque conociendo las nomenclaturas tan creativas del SAT, sospecho que tiene que ver con Solicitud de Certificados Digitales o algo así. Por cierto lo pueden descargar de <a title="Descargar el SOLCEDI desde el FTP del SAT" href="ftp://ftp2.sat.gob.mx/asistencia_servicio_ftp/programas/solcedi/DSIC10312SOL.zip" target="_blank">aquí</a>. Con el SOLCEDI, mi RFC, CURP y dirección de correo eletrónico, generé mi Llave Privada y del mismo modo la “Solicitud de la FIEL” que es un Certificado de Requerimiento firmado con mi nueva y flamante Llave Privada. Ese certificado debía se llevado físicamente al SAT, en mi caso utilicé una memoria USB para dicha tárea, por cierto el certificado de requerimiento es un archivo de extensión REQ. Para ir al SAT sugiero hacer cita, pueden solicitarla en <a title="Citas del SAT" href="://www.sat.gob.mx/sitio_internet/asistencia_contribuyente/63_19752.html" target="_blank">este enlace</a>.</p>
<h4>La visita al SAT.</h4>
<p>Una vez que tuve en mi USB mi llave privada y mi certificado de requrimiento de la FIEL, hice acto de presencia en las oficinas del SAT. Así, armado con mi USB, mi acta de nacimiento e identificación oficial (IFE), llegué y dije: “Vengo a sacar la FIEL”, vaya que en otro contexto se habría escuchado algo extraño, sin embargo la persona que atendía me pidió revisar mi acta de nacimiento, identificación oficial y me entrego una solicitud de FIEL o &#8220;Formato FE&#8221;. Completé el formulario, se lo mostré, lo revisó y finalmente me dió un papelito con un número mientras decía: “Sientese, cuando vea el número en la pantalla pase al módulo que se le indica”. Pues ahi estuve sentado esperando.</p>
<p>Después de varios minutos, finalmente apareció mi número en la pantalla, módulo doce. Pasé y me atendió un joven como de mi edad, y sí, me siento joven aún. Revisó los documentos, me pidió mi USB, descargó el archivo REQ y ya no supe que hizo con el pues no pude ver su pantalla. Me pidió que pasara a sentarme en otra sección que daba a un cuartito y esperara a que me llamaran.</p>
<h4>El Cuartito.</h4>
<p>Una vez que me llamaron, me pidieron que me sentara para tomarme una foto, por cierto tenían una cámara Canon EOS Rebel Xsi, me tomaron la foto, y luego me entregaron una especie de visor, la misión era acercarlo a mis ojos y no moverme cuando me lo indicaran, así que, estimados lectores, para aquellos que se lo sospechaban, se trata de un scanner retinal, ¡el futuro ha llegado!, en realidad lo que este dispositivo hace es “fotografiar” el iris y almacenar dicha imágen. Luego pasé las huellas dactilares, dedo por dedo en un scanner. Lo siguiente fué algo más común, con la ayuda de un lapiz óptico, firmar.</p>
<h4>La FIEL.</h4>
<p>Una vez realizada la digitalización de mi cara, manos, ojos y firma. Me enviaron de nuevo con el joven que me atendió originalmente, revisó algo en su pantalla, clickeo allá y acullá y finalmente me entregó mi USB. Me explicó que ahí estaba mi FIEL y que podía marchar felizmente talareando alguna cancioncilla alegre. La verdad es que solo me explicó que con la FIEL ya podría solicitar las Series y los Folios para mis Facturas Electronicas.</p>
<h4>Las Series y Folios.</h4>
<p>En el plano de las facturas impresas requeríamos de números de serie y folios, las series sirven, en escencia, para llevar control de los folios, por decir, si su negocio tiene dos sucursales entonces podrían utilizar una serie para la sucursal A y una para la B, y asi podrían tener folios para cada serie, ejemplo: A1 y B1, así sabrán que B1 es la primera factura emitida en la sucursal B. Ahora bien, en el plano digital, dichas series de folios requieren de una validación, de lo contrario cualquiera podría emitirlas y sería una gran fiesta saber si una factura es valida o falsa. En la factura impresa, una firma o el sello de la empresa podría servirnos, en el plano digital asociaremos dichas series de folios a un Certficado de Sello Digital, el cual estará firmado por nosotros con la Llave Privada y por el SAT para garantizar su validez.</p>
<h4>El Certificado de Sello Digital.</h4>
<p>¿Cómo obtuve el Certificado de Sello Digital? Ya en la comodidad de mi casa, generé un archivo de requerimiento con el SOLCEDI, similar al que usé para solicitar la FIEL. Pueden encontrar las confusiones, digo, instrucciones del SAT que se encuentran en <a title="Instrucciones para solicitar el Certificado de Sello Digital en el sitio del SAT" href="http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_6547.html" target="_blank">este enlace</a>. El procedimiento fué sencillo, con el SOLCEDI generé la llave privada del Sello (KEY) y también el Requerimiento(REQ). Una vez que tuve el archivo REQ lo ensobreté con el mismo SOLCEDI y me generó un archivo SDG. Ese archivo es el que le envié al SAT. ¿Donde? Al <strong><a title="Enlace al CertiSAT, el sitio del SAT donde enviar el requerimiento ensobretado de Certificado de Sello Digital" href="https://www.acceso.sat.gob.mx/_mem_bin/FormsLogin.asp?/Acceso/CertiSAT.asp" target="_blank">CertiSAT</a></strong>. Para entrar al CertiSAT solo tuve que proporcionar mi RFC y <a title="Definición y características de la CIEC" href="http://www.sat.gob.mx/sitio_internet/e_sat/oficina_virtual/108_3462.html" target="_blank">CIEC</a> o contraseña del SAT como prefiero llamarla. Dentro hay un enlace que dice &#8220;Envío de solicitud de certificados de Sello Digital&#8221; y ahí viene un formulario para seleccionar el archivo SDG y enviarlo.</p>
<p>Una vez enviado se generó un Comprobante de Solicitud de Certificados de Sello Digital, con un número de Operación y firmado digitalmente por el SAT. Copié ese número de operación y dentro del mismo CertiSAT, en el enlace &#8220;Seguimiento a certificados&#8221; pegué el número de operación en el campo correspondiente e hice clic en &#8220;Seguimiento&#8221;, y me apareció una pantalla donde se muestra la situación actual de la operación de Certificados de Sello Digital. Dentro de esa pantalla, donde aparece el Número de Operación es en realidad un enlace que nos lleva al archivo que contiene el Certificado de Sello Digital, el archivo tiene por nombre el Número de Operación con extensión ZIP, lo descomprimí y obtuve el archivo con extensión CER, ese es el Certificado de Sello Digital.</p>
<p>Ya con mi Llave Privada, mi Llave Pública (FIEL), la Llave Privada del Certificado de Sello, y el Certificado de Sello, aún me hacían faltan, las Series de Folios. Aunque en mi caso no ocupo series, asi que solo solicité folios.</p>
<h4>SICOFI.</h4>
<p>Para solicitar las series hay que accesar al <a title="Enlace al SICOFI" href="https://www.consulta.sat.gob.mx/SICOFI_WEB/moduloECFD_Plus/acceso.asp" target="_blank">SICOFI</a>, no me pregunten que significa la palabra, porque al igual que la <a title="Un post acerca de la Trinidad que hice algunos año atrás" href="http://briceno.mx/2006/02/acerca-de-la-trinidad/" target="_self">Trinidad</a> es también un &#8220;misterio&#8221;. Esta parte me resultó molesta, pues a pesar de que este sistema esta hecho en Java, solo funciona en un browser, a saber, Internet Explorer, en fin -después de hacer corajes e invocar a los &#8220;antiguos espiritus del mal&#8221;, como haría <a title="Descripción en Wikipedia de Mumm-Ra el villano de los Thundercats" href="http://es.wikipedia.org/wiki/Thundercats#Villanos" target="_blank">Mumm-Ra</a> para que se encargaran de los individuos que programaron en Java algo que funciona en un solo navegador- logré accesar al SICOFI, y después de proporcionarle mi RFC, la Contraseña de mi Llave Privada, mi Llave Privada y mi Llave Pública (FIEL), hice clic en el enlace &#8220;Solicitud de Folios&#8221; y nuevamente proporcioné la Contraseña de mi Llave Privada, mi Llave Privada y mi Llave Pública (FIEL) y en el campo &#8220;Folios&#8221; escribí el número de folios que requería e hice clic en &#8220;Generar Archivo&#8221; y listo.</p>
<p>Ahora ya tenía mi Llave Privada, mi Llave Pública (FIEL), la Llave Privada del Certificado de Sello, el Certificado de Sello y los Folios (en mi caso no requerí Series), solo me hacía falta el Número y Año de Aprobación.</p>
<h4>Número y Año de Aprobación.</h4>
<p>En mi caso fué todo un problema, pues no encontré la documentación respecto de donde se encontraban tales datos, el año de aprobación me supuse era el año en curso, pero ¿y el número?. Y así un buen día ya &#8220;<a title="fragmento de una canción ochentera de Oscar Athie llamada Fotografía">flaco, cansado, ojeroso y sin ilusiones</a>&#8220;, mientras navegaba por el FTP del SAT encontré la respuesta, resulta que tienen un archivo de nombre <strong>FoliosCFD.txt</strong>, que pueden encontrar en <a title="Servidor FTP del SAT" href="ftp://ftp2.sat.gob.mx/agti_servicio_ftp/verifica_comprobante_ftp/FoliosCFD.txt" target="_blank">este enlace</a>, donde guardan los RFC, Números y Años de Aprobación, Series, así como Folios Inicial y Final. Así que ya fué solo cuestión de bajar el archivo, buscar mi RFC y listo, ahí estaba mi Número y Año de Aprobación.</p>
<p>Ahora ya tenía lo que necesitaba, mi <strong>Llave Privada</strong>, mi <strong>Llave Pública</strong> (FIEL), la <strong>Llave Privada del Certificado de Sello</strong>, el <strong>Certificado de Sello</strong>, los <strong>Folios</strong> (en mi caso no requerí  series), así como el <strong>Número</strong> y el <strong>Año de Aprobación</strong>. ¿Que me faltaba? Pues la aplicación o sistema para facturar, de acuerdo al SAT pueden contratar alguno de los <a title="Lista de Proveedores Autorizados por el SAT" href="http://www.sat.gob.mx/sitio_internet/e_sat/comprobantes_fiscales/15_8951.html" target="_blank">Proveedores Autorizados</a> o bien utilizar lo que llaman Medios Propios.</p>
<p>Al inicio tenía la idea de contratar un Proveedor Autorizado y ahorrarme el trabajo de hacer un sistema. Sin embargo, mi paranoía me lo impidió, mi personal pregunta es ¿por qué un tercero tiene que tener almacenado en su servidor la información más delicada de mi empresa?, y pues bueno, me dí a la tárea de hacer un sistema de facturación electrónica, por lo pronto les comparto el enlace del <a title="Repositorio del API que estoy haciendo para Facturación Electrónica en PHP" href="https://github.com/bbh/FacturaElectronica" target="_blank">repositorio en GitHub</a> donde encontrarán el código fuente en PHP del sistema que estoy haciendo, ya que esté completamente terminado publicaré una entrada anunciandolo, así que estén pendientes.</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2010/12/facturacion-electronica-en-mexico/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Wikileaks and the right to know.</title>
		<link>http://briceno.mx/2010/12/wikileaks-and-the-right-to-know/</link>
		<comments>http://briceno.mx/2010/12/wikileaks-and-the-right-to-know/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 05:14:34 +0000</pubDate>
		<dc:creator>bbh</dc:creator>
				<category><![CDATA[Freedom]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[freedom of speech]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[sex]]></category>
		<category><![CDATA[war]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://briceno.mx/?p=142</guid>
		<description><![CDATA[I&#8217;ve been asked about my opinion on Wikileaks so many times that I decided to write about it. I mean by this way I just refer them to this post and avoid the entire discussion and go to the point. Please do not misunderstand when I say avoid the entire discussion, of course I love [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://briceno.mx/wp-content/uploads/2010/12/wikileaks-us-blocks-feder.jpg"><img class="alignright size-full wp-image-144" title="wikileaks-us-blocks-feder" src="http://briceno.mx/wp-content/uploads/2010/12/wikileaks-us-blocks-feder.jpg" alt="" width="250" height="150" /></a>I&#8217;ve been asked about my opinion on Wikileaks so many times that I decided to write about it. I mean by this way I just refer them to this post and avoid the entire discussion and go to the point. Please do not misunderstand when I say avoid the entire discussion, of course I love to discuss any topic any time, but some times you have talked that much about the same topic, that is a good thing to write and just refer.</p>
<p>Well then, I will not write the entire history of the Wikileaks project, I think you can find more info even in places like Wikipedia. However, we can&#8217;t have an objective point of view without the right context, and in this case, the history of Wikileaks is important, even more because they are leaking “hidden” history. I will try to resume and set only the most valuable data about them. Here we go:</p>
<ul>
<li>They began operations in 2006 and officially release 1.2 million of leak documents in 2007.</li>
<li>Their objective is to receive and expose any unethical behaviors from governments, religions, and corporations.</li>
<li>They use a modified version of Mediawiki, the same software of Wikipedia (PHP by the way).</li>
<li>Some people said the original team was formed by Chinese dissidents, writers, mathematicians, and 	entrepreneurs from US, Australia, Taiwan, Europe and South Africa.</li>
<li>One of their advisors and chief editor is the Australian Julian Assange.</li>
<li>The process of receiving information is not that simple as a normal Wiki site, they have some 	rules and process to assure the security of the leaker and the Wikileaks itself. They use free/libre tools like OpenSSL, Freenet, Tor and PGP.</li>
<li>Because of the kind of information 	they handle, the amount of traffic is huge, so is not an easy thing 	to move the entire site, but based on the recent experiences, they 	have learned very quickly to do it. Actually, as part of their strategy almost anyone can set a Wikileaks mirror to guarantee the availability of the information.</li>
</ul>
<p>Now let&#8217;s mention at least the top five and most commented leaks.</p>
<ul>
<li>On 24 March 2008, WikiLeaks published what they referred to as &#8220;the collected secret 	&#8216;bibles&#8217; of Scientology&#8221;.</li>
<li>On 28 January 2009, WikiLeaks released 86 telephone intercept recordings of Peruvian politicians 	and businessmen involved in the &#8220;Petrogate&#8221; oil scandal.</li>
<li>On 16 July 2009, Iranian news agencies reported that the head of Iran&#8217;s atomic energy organization Gholam Reza Aghazadeh had abruptly resigned for unknown reasons after twelve years in office. Shortly afterwards WikiLeaks released 	a report disclosing a &#8220;serious nuclear accident&#8221; at the Iranian Natanz nuclear facility in 2009.</li>
<li>On 5 April 2010, Wikileaks 	released a classified US military video depicting the indiscriminate slaying of over a dozen people in the Iraqi suburb of New Baghdad &#8212; including two Reuters news staff.</li>
<li>On 25 July 2010, The Afghanistan 	and Iraq War Logs. Wikileaks released 391,000 reports from the Pentagon which cover the war in Iraq from 2004 to 2009 and 	Afghanistan from 2004 to 2009.</li>
<li>On 22 November 2010, Wikileaks 	began publishing 251,287 leaked United States embassy cables, the largest set of confidential documents ever to be released into the public domain.</li>
</ul>
<p>OK, it was six not five, give me a break. So, here we are just at the edge of pronouncing a personal judgment about that thing Wikileaks is doing. But come on, really? I mean this guys are risking their life without payment, just because they want you to know what&#8217;s really going in the world, not just the “official” and filtered data common media usually releases, and we are going to judge them because of that, is not that Freedom? Is not that the backbone of democracy?</p>
<p>Yeah, yeah call me idealist, I have a lot of friends saying Wikileaks are just going to give us troubles to all of us, troubles? Really? Is not a trouble when governments have to hide information from their people because they are doing nasty things?</p>
<p>By example, if you neighbor has been kidnapping, torturing and killing people are you OK with that? If you know the right tools to expose him without risking your life (thanks to free/libre technology), by doing it, are you causing troubles to your neighborhood? Or are you just doing, not just the right thing, but a great service to your community?</p>
<p>Yes, I know we are talking about economies, and risking the believe of masses in the current &#8220;democracy&#8221;, but is not that why masses fought and died at civil wars and revolutions?, to avoid the bad governments and tirany? And just think a moment about it, is not a person who fight against bad governments and dictators what we usually called a hero?</p>
<p>At the moment I write this Julian Assange has been captured and arrested, for questioning on accusations of sexual offenses at Sweden. The warrant is believed to involve allegations that two women in Stockholm made to police and &#8220;friends&#8221;.  One woman said that Julian Assange had ignored her appeals to stop after a condom broke. The other woman said that she and Assange had begun a sexual encounter using a condom, but that Assange did not comply with her appeals to stop when it was no longer in use.</p>
<p>Really? Are they kidding? Is that a reason to be arrested? But OK, let&#8217;s think this is minor issue, obliviously you can go paying a bail. But wait he was refused bail by a UK court. Is not that a little bizarre?</p>
<p>As the Wikileaks spokesman Kristinn Hrafnsson said:  “Wikileaks is still on-line. The full site is duplicated in more than 500 locations. Every day, the cables are downloaded more than 50 million times. Senator Joe Lieberman today attacked the New York Times for its decision to publish the cables, just days after calling for companies to boycott Wikileaks.  And just minutes later, the State Department announced the US will host next year’s UNESCO Press Freedom day. The irony is not lost on us. We hope in future, UNESCO celebrates press freedom somewhere where it exists.”</p>
<p>This matter has no conclusion, the story is been writing every single day.  My opinion? Wikileaks is a civilian tool, built on liberty to make truth this believe about freedom of speech and democracy. Is that problematic for someone? Is just like governments and corporations say: &#8220;if you have nothing to hide, you have nothing to fear&#8221;. It applies to them too, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://briceno.mx/2010/12/wikileaks-and-the-right-to-know/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
