tag:blogger.com,1999:blog-315198042024-03-14T03:53:09.628-05:00Sergio's BlogNormalmente escribo sobre cualquier cosa. Muchas veces escribo sobre las cosas que aprendo para no olvidarme de ellas, otras simplemente escribo sobre experiencias personales o pensamientos que se me pasan por la cabeza.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comBlogger61125tag:blogger.com,1999:blog-31519804.post-76656217579509714092012-12-28T21:22:00.000-05:002012-12-28T21:22:15.420-05:00Mupen64+ con GUI en Ubuntu 12.04 y 12.10Menuda sorpresa me he llevado cuando intenté instalar Mupen64+ en Ubuntu 12.04 y resulta que ya no tiene interfaz gráfica. Correrlo desde la consola no me preocupa lo que en realidad si me molesta es el hecho de no poder configurar el Joypad y no poder abrir ROMs que están comprimidas en archivos .zip.<br />
<br />
Estaba seguro de que antes había visto la interfaz gráfica de Mupen64 en Ubuntu y al principio no supe si era que me faltaba un paquete o alguna otra cosa. Buscando en los foros de Ubuntu descubrí que efectivamente la interfaz gráfica había desaparecido de la versión de Mupen64+ en los repositorios de Ubuntu.<br />
<br />
En algunas entradas del foro sugieren usar interfaces gráficas de terceros como <a href="http://sourceforge.net/projects/cutemupen/">CuteMupen</a> (una interfaz gráfica hecha para Mupen64+ hecha en Qt). La probé pero es un lío configurarla y además tampoco me permitió configurar el "Joypad".<br />
<br />
Al final estaba a punto de darme por vencido cuando se me ocurrió que tal vez podría instalar el mismo paquete que usaba en Natty Narwhal y dio resultado, nuevamente tengo la misma amigable interfaz gráfica de antes y puedo configurar el "Joypad" y por supuesto puedo cargar ROMs que están comprimidas en archivos .zip.<br />
<br />
Para hacerlo fui a los repositorios de Ubuntu y busqué el paquete de Mupen64+ en la distribución Oneric, el resultado fue un solo paquete:<br />
<br />
<a href="http://packages.ubuntu.com/oneiric/mupen64plus">mupen64plus (1.5+dfsg1-16)</a><br />
<br />
Lo descargué y lo instalé usando el comando:<br />
<br />
<pre>sudo dpkg -i mupen64plus_1.5+dfsg1-16_i386.deb</pre><br />
Al hacerlo Ubuntu me notificó que faltaban algunas dependencias, en mi caso los paquetes `libsdl-ttf2.0-0', `libxdg-basedir1' y `liblzma2'. Los primeros dos los instalé sin problema usando apt-get install:<br />
<br />
<pre>sudo apt-get install libsdl-ttf2.0-0
sudo apt-get install libxdg-basedir1</pre><br />
Sin embargo liblzma2 parece que fue removido de los repositorios de Ubuntu 12.04.<br />
<br />
Por suerte aún está disponible en los repositorios de Oneric: <a href="http://packages.ubuntu.com/oneiric/liblzma2">liblzma2 (5.0.0-2)</a>, así que lo descargué y lo instale:<br />
<br />
<pre>sudo dpkg -i liblzma2_5.0.0-2_i386.deb</pre><br />
Y ¡ya está! Mupen64+ con interfaz gráfica:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjovHct47wJGCS2OS6Z5L2NCEPtvJfnfkUhGEcNCH1Tnqa-VGbtrWmOrcVZ3iDAKD-LNRbWowElW3kezF1B1982lwxTD4rS34vbXIpHWUJsmL3GLQkyhFo6x5sEpo5wr-qCt-K_2Q/s1600/Mupen64%252B+GUI.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="228" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjovHct47wJGCS2OS6Z5L2NCEPtvJfnfkUhGEcNCH1Tnqa-VGbtrWmOrcVZ3iDAKD-LNRbWowElW3kezF1B1982lwxTD4rS34vbXIpHWUJsmL3GLQkyhFo6x5sEpo5wr-qCt-K_2Q/s320/Mupen64%252B+GUI.png" /></a></div>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-74371305590646367252012-08-28T23:14:00.000-05:002013-01-24T12:35:16.741-05:00PHP - File Synchronization Script<h3>Edit</h3>2013-01-24<br />
<br />
The code was moved to GitHub: <a href="https://github.com/sergio-bobillier/php-file-sync">sergio-bobillier/php-file-sync</a><br />
<br />
Also I added a new feature:<br />
<br />
<dl><dt>USE_CHECKSUM</dt>
<dd>It will cause the script to use a checksum to compare files. This way the script won't copy files that haven't changed even if their modification dates differ. (Can be slow in some cases).</dd>
</dl><br />
Fron now on all changes will be posted to GitHub so check the repository there to stay up to date.<br />
<br />
<hr /><br />
<h3>Edit</h3>2012-11-05<br />
<br />
Some bug fixes.<br />
<br />
<ul><li>When deleting a whole directory each file being deleted is listed</li>
<li>Fixed a bug that caused that when removing a whole directory only the last file in the directory was listed instead of the directory itself.</li>
</ul><br />
<hr /><br />
<h3>In brief:</h3><br />
Synchronizing files between two or more computers have never been easier, now you can synchronize files between various locations using a cloud service like Dropbox as hub. However this services although useful have their limits, for me the biggest one is size, 5 GBs are not enough for my music so I decided to write a little script to keep my music in sync between my Desktop and my Laptop computer.<br />
<br />
The script is very simple and is well documented so for those of you that just want to watch the code here it is:<br />
<br />
<a href="https://github.com/sergio-bobillier/php-file-sync">PHP - File Synchronization Script on GitHub</a><br />
<br />
<h3>How to use:</h3><br />
To use the script:<br />
<br />
<b>Note:</b><br />
Please do not put the script in one of the folders you are going to sync, this will cause unexpected results. Put it somewhere else like in the parent folder or your home directory.<br />
<br />
<ol><li>Copy settings-sample.php as settings.php and edit it to fit your needs. The options you can tweak are:</li>
<li><b>debug mode</b>: This mode will cause the script to print all the actions it takes to the console so you can know what it is doing or check what it is going to do before it actually does it.</li>
<li><b>simulate</b>: This will cause the script not to take any real actions, the script wont copy, delete or overwrite any file.</li>
<li>After you have adjusted all the settings you can run the script by typing this command in your terminal:<br />
<br />
<span style="font-family: courier;">$ php -f sync-files.php</span></li>
</ol><br />
<b>Tip:</b><br />
You can set the script to debug mode and simulate at the same time and send all its output to a file to check what the script is going to do before running it for real. I know is hard to trust an script written by someone else specially if you are entrusting it with your precious tunes. ;)<br />
<br />
To do it use this command:<br />
<br />
<span style="font-family:courier">$ php -f sync-files.php > sync-result.txt</span><br />
<br />
Then check the contents of sync-reuslt.txt<br />
<br />
When running the script for the first time the script guarantees you that after sync is done both locations will have the exact same files and folders. After the first synchronization the script will save a file called .last-sync with the timestamp of the last synchronization in the path it was run.<br />
<br />
After the script ran for the first time and the .last-sync file is saved the script will keep the two paths synchronized in subsequent runs, this means that the script will copy any new files you create in any of the two paths to the other, if you delete a file in one of the locations it will be deleted from the other, also if you modify a file in one location the most recent version of the file will be copied to the other path and off course if you rename or move files the script will carry on this changes to the other path.<br />
<br />
<h3>About the script</h3><br />
Here are some details about the script if you are interested:<br />
<br />
<h4>What it does:</h4><br />
The script is very simple, what it does is basically this:<br />
<br />
<ol><li>It scans all files and folders in the first location, for each file it checks if the same file exists in the other path, if the file does not exists then:</li>
<ul><li>If the file was modified after than the last synchronization it copies the file to the other location (Assuming it is a new file)</li>
<li>If it was not modified after the last synchronization the script deletes it from the current path. (Assuming it was deleted from the other path)</li>
</ul><li>If the same file exists in both paths then:</li>
<ul><li>If the file is a directory then the script recursively synchronizes the directories in both paths</li>
<li>If the file is a regular file then it is copied to the other path (overwriting the other file) if it is newer than the file in the other path</li>
</ul><li>Then it does all this the other way around</li>
</ol><br />
Off course the script performs some checks to avoid going wildly overwriting and deleting files all the way but yes, this basic algorithm let the script keep the two paths in sync. Note for example that if you rename a file the script will think that the file with the old name was deleted and will delete it from the other path and will think that the file with the new name is a new file and will copy it to the other path, so that is the way it handles renaming and moving.<br />
<br />
You can tell of course that the script is very simple and in some particular cases it wont be able to handle all the modifications well and will cause data loss, for example if the same file is changed in both locations the one that was last modified will be kept and the other will be overwritten.<br />
<br />
<h4>How the script came to be:</h4><br />
As I explained above I have my music in both my Desktop and Laptop computers, at first I just copied the music from my Desktop to my Laptop, using a simple linux command it is easy to only copy files that were new or have been modified since the last time the copy was made.<br />
<br />
The problem arises when you start adding, modifying or removing files in both locations, the cp command cannot handle that and thus you need a more elaborated tool.<br />
<br />
So I wrote the script and started using it to keep my music in sync between my two computers. Then I realized that the script might be useful for someone else or maybe for a different purpose like keeping files in sync between two servers running a web application or something like that.<br />
<br />
<h3>Finally</h3><br />
The script is very primitive, currently it is performing just fine to keep my music in sync but I know that it can be improved to better handle more complex modification to files, like merging files that were modified in both locations or warning about conflicts between files.<br />
<br />
Also I haven't fully tested it in all particular cases so I can't guarantee that you wont lose a file or two or some modifications you made to a file in one of the locations, that is why I added the simulate and debug modes.<br />
<br />
Any comments and suggestions are welcome, feel free to leave yours in the comment section below. Also if you want to use the script in your own application please feel free to do it, don't worry about licenses or giving credit or anything like that, sharing the knowledge is the way of the future.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-65352074476601875642011-10-09T01:43:00.002-05:002011-10-09T01:43:53.698-05:00[English] PHP: gd library > 2.0 (2.0.1 / 2.0.34) en Ubuntu<h3>Foreword</h3><p>I noticed that some English speaking people were reading and even making comments on the <a href="http://sergiobobillier.blogspot.com/2011/05/php-gd-library-20-201-2034-en-ubuntu.html">original (spanish) post</a>. My first guess is: google translator but as good as it may be it is still an automatic translated document and I think I can do better than a blunt headed computer (at least when it comes to translating), also I though it might bring more people into reading the article. So here it is the English version of it:</p><h3>Introduction</h3><p>Ubuntu is a very popular operating system, in the last year its popularity has grown a lot because it is a stable and reliable operating system with regular updates. Its popularity has grown not only in desktops and laptops but also in web servers, however, one must admit that from time to time Canonical has some flaws, sometimes they leave very useful software packages out of their official repositories, sometimes they make mistakes when creating packages, create them in a weird way or leave out the latest updates for some software.</p><p>This is exactly the case with the <a href="http://www.boutell.com/gd/">gd library</a> for PHP. The gd library is a graphics library that provides various functionalities like scaling, rotating, trimming, among others. Some plug-ins with advanced graphical effects like <a href="http://imageflow.finnrudolph.de/">ImageFlow</a> use this library to achieve those effects, like the reflections. Some CMS, like Drupal use this plug-in to create picture galleries.</p><p>ImageFlow in particular needs gd library version 2.0.1 to work and when it doesn't find it, it doesn't work at all, instead of images we get an error message like this one:</p><p style="font-family:courier">ImageFlow requires GD 2.0.1 or higher (2.0.28 recommended)</p><p>The problem is that in the Ubuntu systems, even in the last version (11.04) the gd library version that gets installed when you install the php5-gd package is 2.0 and no matter how many times you run apt-get update you never get an updated version of the library since Canonical (or the community member who maintains the package to be precise) haven't updated the library.</p><p>When searching through the network there is a lot of people asking how can they solve this issue, not only in Ubuntu forums but in other sites. There is, among the proposed solutions, one which consists in adding the Debian repositories to the sources.list file and then install php5-gd from there. The problem with this solution is that the dependencies in Debian repositories are not the same that in Ubuntu repositories and some times doing this results in things that stop working like the Plesk control panel, because when installing php5-gd other packages get changed too.</p><p>Also when trying to install from the Debian repositories some times another problem arise:</p><pre class="brush: plain">Dependency error:
php5-gd depends on libjpeg > 15b but 15bubuntu1 will be installed
E: Broken packages</pre><p>Obviously we have the right library version but the problem is that dpkg fails to compare the versions and so the installation can simply fail, and although we could force the installation from apt-get this could leave us to other problems. We could damage the local repositories or even end with a PHP installation that doesn't work at all.</p><p>I have found another solution that worked really well for me and I wanted to share it with the Ubuntu community. I really hope that It will work for you as good as it did for me, so, here we go:</p><h3>Updating the gd library</h3><br />
<h4>Uninstalling the current version of php5-gd</h4><p>The first thing we have to do is uninstall the current version of php5-gd, if we have one installed, that is, to check if there is a version currently installed we use this command:</p><pre class="brush: plain">dpkg --get-selections | grep php5-gd</pre><p>We will get something like:</p><pre class="brush: plain">php5-gd install</pre><p>If the previous command doesn't show any output it means that there is no version of php5-gd installed so you can just go ahead with the following step "Installing Alien". If the library is installed you must remove it completely first, to do so use this command:</p><pre class="brush: plain">sudo apt-get --purge remove php5-gd</pre><p>When uninstalling the library the system may tell you that there are some packages that were installed with it and that are no longer needed and will suggest you to use apt-get autoremove to get rid of them. PLEASE DON'T DO IT, leave the packages installed because in any case we are going to install another version of the gd library and so the packages will probably be needed again.</p><h4>Installing Alien</h4><p>Alien is an special utility that can be installed in the linux systems that use packages and lets you convert .deb (Debian Packages) to .rpm (RedHat and SuSe Packages) and vice versa. We are going to use this utility in the next step so we install it like so:</p><pre class="brush: plain">sudo apt-get install alien</pre><p>Once we have Alien installed we are ready to go and search for an updated gd library</p><h4>Get an updated version of the gd library</h4><p>The CentOS operating system is a RedHat branch and it has the updated version of the gd library and so we are going to use this operating system's packages to bring an updated version of the library to our Ubuntu system. The fist thing we will need is the exact version of PHP we have installed, to get this information we execute this command:</p><pre class="brush: plain">sergio@fate:~$ php --version
PHP 5.3.2-1ubuntu4.8 with Suhosin-Patch (cli) (built: Apr 27 2011 05:07:22)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
sergio@fate:~$</pre><p>We see here that the installed version of PHP is 5.3.2, now we are going to pay a visit to <a href="http://rpm.pbone.net/index.php3/stat/11/vendor/3337/com/CentOS.html">CentOS' Repositories</a> and we are going to search for the correct gd library for our PHP 5 installation. We use the search to locate the right php5-gd package for our PHP version and architecture (32 or 64 bits) and we are going to download it, in my case that would be:</p><pre class="brush:plain">wget ftp://ftp.icm.edu.pl/vol/rzm1/linux-opensuse/distribution/11.3/repo/oss/suse/i586/php5-gd-5.3.2-1.31.i586.rpm</pre><p>What we are going to get is a .rpm package. Now we have to use Alien to convert it to a .deb package, so we do:</p><pre class="brush:plain">sudo alien -d php5-gd-5.3.2-1.31.i586.rpm</pre><p>Alien will process the package and convert it to a .deb package that we can install:</p><pre class="brush:plain">php5-gd_5.3.2-2.31_i386.deb generated</pre><p>Now we have to install it like we do with any other Debian package:</p><pre class="brush:plain">sudo dpkg -i php5-gd_5.3.2-2.31_i386.deb</pre><p>The location where Ubuntu stores the PHP 5 extensions is a bit weird and somewhat curious opposed to CentOS so we will have to move some files to make them available for our Ubuntu PHP 5 installation, we do so like this:</p><pre class="brush:plain">sergio@fate:~$ cd /usr/lib/php5
sergio@fate:/usr/lib/php5$ ls
20090626+lfs extensions libexec maxlifetime
sergio@fate:/usr/lib/php5$ cd extensions
sergio@fate:/usr/lib/php5/extensions$ ls
gd.so
sergio@fate:/usr/lib/php5/extensions$ sudo mv gd.so ../20090626+lfs/gd.so</pre><p>Basically what we are doing here is moving the library gd.so from the "extensions" directory to the "20090626+lfs" directory which is the directory where Ubuntu puts PHP extension (I told you it was weird) so that PHP can find it.</p><p>In your version of Ubuntu the name "20090626+lfs" may be a little different but you'll know which folder it is by the unusual name</p><h4>Finishing the installation</h4><p>Well, so we already have a recent version of the gd library, but, we are not done yet, that library is not totally functional, now we have to take care of some details that arise from using other operating system's packages</p><p>For the next step we have to make sure that PHP is logging it's error to a file that we can check, to do so we go to the /etc/php5/apache2 directory and open the php.ini file</p><p>There we search for a line like this one:<p><pre class="brush:plain">;error_log = php_errors.log</pre><p>We remove the semicolon (;) at the beginning of the line and replace php_errors.log with the full path to the file we want PHP to log it's errors to, for example I used:</p><pre class="brush:plain">error_log = /var/log/php5/errors.log</pre><p>We save the file, then we have to make sure that Apache can write on the PHP log file so use these commands to do so:</p><pre class="brush:plain">sergio@fate:/etc/php5/apache2$ cd /var/log
sergio@fate:/var/log$ sudo mkdir php5
sergio@fate:/var/log$ cd php5
sergio@fate:/var/log/php5$ sudo touch errors.log
sergio@fate:/var/log/php5$ sudo chmod o+w errors.log
sergio@fate:/var/log/php5$ </pre><p>Now we restart the Apache web server and check the PHP error log file:</p><pre class="brush:plain">sergio@fate:/var/log/php5$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2
... waiting [ OK ]
sergio@fate:/var/log/php5$ tail errors.log
[30-Apr-2011 22:19:44] PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/gd.so' -
libpng14.so.14: cannot open shared object file: No such file or directory in Unknown on line 0
sergio@fate:/var/log/php5$
</pre><p>There we see that there is an error, PHP tells us that we are missing the <span style="font-family:courier">libpng14.so.14</span> library, so we are going to look for it on the <a href="http://rpm.pbone.net/index.php3/stat/11/vendor/3337/com/CentOS.html">CentOS' repositories</a>. There we use the search with the option that says <strong>Search for rpms which contain given file name (1) e.g. libhistory.so</strong> to locate the package with the library we need.</p><p>Once we locate the correct package for our architecture (32 or 64 bits) we are going to download the package like we did before:</p><pre class="brush:plain">wget ftp://mirror.switch.ch/pool/1/mirror/opensuse/distribution/11.4/repo/oss/suse/i586/libpng14-14-1.4.4-2.1.i586.rpm</pre><p>We get the RPM package and once again we use Alien to conver it to a Debian package:</p><pre class="brush:plain">sudo alien -d libpng14-14-1.4.4-2.1.i586.rpm
...
libpng14-14_1.4.4-3.1_i386.deb generated</pre><p>Then we install the library:</p><pre class="brush:plain">sudo dpkg -i libpng14-14_1.4.4-3.1_i386.deb</pre><p>After installing the library we restart the Apache Web server and check the PHP error log file once again. If we encounter another missing library we will have to repeat the previous procedure to install it from the <a href="http://rpm.pbone.net/index.php3/stat/11/vendor/3337/com/CentOS.html">CentOS' repositories</a>. When you see no more errors in the PHP error log then the installation is done</p><h4>Verifying the installation</h4><p>Now we check that the installation is working properly using the phpinfo function and checking that the installed gd library is version 2.0.34:</p><table border="1" cellpadding="3" cellspacing="2"><tr><td>GD Support</td><td>enabled</td></tr>
<tr><td>GD Version</td><td>bundled (2.0.34 compatible)</td></tr>
<tr><td>FreeType Support</td><td>enabled</td></tr>
<tr><td>FreeType Linkage</td><td>with freetype</td></tr>
<tr><td>FreeType Version</td><td>2.3.12</td></tr>
<tr><td>T1Lib Support</td><td>enabled</td></tr>
<tr><td>GIF Read Support</td><td>enabled</td></tr>
<tr><td>GIF Create Support</td><td>enabled</td></tr>
<tr><td>JPEG Support</td><td>enabled</td></tr>
<tr><td>libJPEG Version</td><td>unknown</td></tr>
<tr><td>PNG Support</td><td>enabled</td></tr>
<tr><td>libPNG Version</td><td>1.4.3</td></tr>
<tr><td>WBMP Support</td><td>enabled</td></tr>
<tr><td>XPM Support</td><td>enabled</td></tr>
<tr><td>XBM Support</td><td>enabled</td></tr>
</table><br />
<h4>Conclusion</h4><p>Using the Android utility we managed to update the gd library for PHP. Until Canonical updates the library version in the official Ubuntu repositories this is a good way around the problem.</p><p>I certainly hope that this post was useful to you. For me it meant an entire day working trying to find a way to update the library while keeping PHP, Plesk and the rest of the software installed on the server working.</p>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-84726118983273327852011-09-09T19:59:00.000-05:002011-09-10T02:07:07.417-05:00Apagar el equipo y hacer una captura de pantalla unos segundos antes<a href="http://bitelia.com/">Bitelia</a> publicó el día de hoy esta entrada <a href="http://bitelia.com/2011/09/audiobooksleep-cuenta-atras-para-el-cierre-del-sistema">[Descarga del día] AudioBookSleep, cuenta atrás para el cierre del sistema</a>, un programa Windows que permite introducir un tiempo (en minutos) después del cual el sistema se apagará pero no sin antes dejar una captura de pantalla unos instantes antes de que ocurra el cierre del sistema.<br />
<br />
Yo me quedé pensando si no sería posible hacer lo mismo en Linux y pensé que tal vez con un script del shell se podría lograr, así que me di a la tarea y escribí un pequeño script de shell que permite apagar el sistema y hacer una captura de pantalla un segundo antes de que se lleve a cabo el cierre del sistema, aquí está:<br />
<br />
<pre class="brush: plain">#!/bin/bash
seconds=$[$1 * 60]
seconds_shot=$[$seconds - 2]
shutdown -P $1 &
sleep ${seconds_shot}s
shot_filename=$(date +'%Y-%m-%d %H.%M.%S').png
scrot "$shot_filename"</pre><br />
Basta con guardar este texto en un archivo llamado shutdown.sh, luego darle permisos de ejecución:<br />
<br />
<pre class="brush: plain">chmod u+x shutdown.sh</pre><br />
Y luego podremos usarlo así:<br />
<br />
<pre class="brush: plain">sudo ./shutdown.sh 60</pre><br />
<strong>Nota:</strong> Hay que llamar al script usando sudo por que el comando shutdown solo puede ser ejecutado por el root.<br />
<br />
Damos el tiempo en minutos y un segundo antes de que se realice el shutdown el script del shell ejecutará el comando scrot que tomará un screenshot y lo guardará en un archivo cuyo nombre será la fecha y hora en la que fue tomado.<br />
<br />
cool! :)Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-69855350680197693402011-05-01T01:00:00.001-05:002011-05-01T01:45:18.679-05:00PHP: gd library > 2.0 (2.0.1 / 2.0.34) en Ubuntu<h3>Introducción</h3>
<p>Ubuntu es un sistema operativo muy popular, en estos últimos años ha crecido muchísimo en popularidad por ser un sistema operativo estable confiable y con actualizaciones regulares. Su popularidad ha crecido mucho no solo en los sistemas de escritorios y portátiles sino también en los servidores Web, sin embargo, hay que admitir que a veces Canonical tiene algunas fallas, a veces dejan por fuera de sus repositorios software muy útil, otras veces empaquetan mal o de manera extraña y otras veces no ponen en sus repositorios las versiones más actualizadas del software.</p>
<p>Este es el caso de la <a href="http://www.boutell.com/gd/">librería gd</a> para PHP. La librería gd es una librería gráfica que proporciona varias funciones como escalado, rotación, recortado y otras más. Algunos plug-ins con efectos especiales gráficos como el <a href="http://imageflow.finnrudolph.de/">ImageFlow</a> utilizan esta librería para lograr los efectos especiales, como el reflejo en las imágenes, adicionalmente, algunos CMS(s) como Drupal utilizan este plug-in para crear galerías fotográficas.</p>
<p>El ImageFlow necesita de la versión 2.0.1 de la librería gd para funcionar y cuando no la encuentra no funciona en lo absoluto, en lugar de imágenes recibimos un mensaje como este:</p>
<p style="font-family:courier">ImageFlow requires GD 2.0.1 or higher (2.0.28 recommended)</p>
<p>El problema es que en los sistemas Ubuntu, aún en la última versión (11.04) la librería gd que se instala al instalar el paquete php5-gd es la 2.0 y por más que corramos apt-get updrade nunca obtendremos una versión más actualizada de la librería ya que canonical no la ha actualizado.</p>
<p>Al buscar a través de la red hay un montón de personas que preguntan como pueden solucionar este problema, no solo en los foros de ubuntu sino en otros lugares. Hay por ahí algunas soluciones que consisten en agregar los repositorios de debian al sources.list e instalar php5-gd desde ahí. El problema es que las dependencias en los repositorios de debian no son iguales a las de los repositorios de ubuntu y a veces hacer eso resulta en cosas que dejan de funcionar, como el Plesk por que al instalar php5-gd se cambian otros paquetes.</p>
<p>Adicionalmente al instalar desde los repositorios de debian nos podemos encontrar con mensajes como este:</p>
<pre class="brush: plain">Problemas de dependencias:
php5-gd depende de libjpeg > 15b pero 15bubuntu1 será instalada
E: Paquetes rotos</pre>
<p>Obviamente tenemos una librería funcional pero el problema es que el dpkg falla al comparar las versiones y por eso la instalación puede simplemente fallar, y aunque podríamos forzar la instalación desde el apt-get esto podría llevarnos a tener problemas después. Podríamos tirarnos los repositorios o hasta terminar con un php que no funciona en absoluto.</p>
<p>Yo he encontrado una solución que funcionó muy bien para mi y por eso quiero compartirla con la comunidad ubuntu. Espero les funcione igual de bien que a mi, aquí vamos:</p>
<h3>Actualizar la librería gd</h3>
<br />
<h4>Desinstalar la versión actual de php5-gd</h4>
<p>Lo primero que haremos es desinstalar la versión actual de php5-gd, si ya tenemos alguna instalada, para saber si hay una instalada podemos usar este comando:</p>
<pre class="brush: plain">dpkg --get-selections | grep php5-gd</pre>
<p>A lo que el sistema responderá con:</p>
<pre class="brush: plain">php5-gd install</pre>
<p>Si el comando anterior no muestra ninguna salida significa que no tienes instalada la librería php5-gd por lo que podrás continuar con el siguiente paso. Si está instalada deberás desinstalarla por completo haciendo uso del siguiente comando:</p>
<pre class="brush: plain">sudo apt-get --purge remove php5-gd</pre>
<p>Cuando desinstales la librería el sistema te dirá que hay ciertos paquetes que se instalaron con ella y que ya no son necesarios y te sugerirá que corras apt-get autoremove para quitarlos, NO LO HAGAS, deja los paquetes ahí por que igual vamos a instalar luego la librería gd nuevamente así que probablemente serán necesarios.</p>
<h4>Instalar Alien</h4>
<p>Alien es una utilidad especial que se puede instalar en los sistemas linux que utilizan sistemas de paquetes y que permite convertir paquetes deb (de debian) a rpm (de RedHat y SuSe) y viceversa, vamos a emplear esta utilidad, así que la instalamos así:</p>
<pre class="brush: plain">sudo apt-get install alien</pre>
<p>Una vez está instalado Alien estamos listos para ir a buscar la librería gd actualizada.</p>
<h4>Obtener una versión actualizada de la librería gd:</h4>
<p>El sistema operativo CentOS que es una ramificación de RedHat si tiene la versión actualizada de la librería gd por lo que usaremos los paquetes de este sistema operativo para traer una versión actualizada a la librería a nuestro ubuntu. Lo primero que necesitamos saber es que versión de php5 tenemos, para lo cual ejecutamos:</p>
<pre class="brush: plain">sergio@fate:~$ php --version
PHP 5.3.2-1ubuntu4.8 with Suhosin-Patch (cli) (built: Apr 27 2011 05:07:22)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
sergio@fate:~$</pre>
<p>Vemos que es la 5.3.2, ahora vamos a ir a visitar el <a href="http://rpm.pbone.net/index.php3/stat/11/vendor/3337/com/CentOS.html">repositorio de paquetes de CentOS</a> y vamos a buscar la librería gd adecuada para nuestra versión de php5. Usamos el search para localizar el paquete php5-gd correcto para nuestra versión de php5 y nuestra arquitectura (32 o 64 bits) y lo descargamos, en mi caso;</p>
<pre class="brush:plain">wget ftp://ftp.icm.edu.pl/vol/rzm1/linux-opensuse/distribution/11.3/repo/oss/suse/i586/php5-gd-5.3.2-1.31.i586.rpm</pre>
<p>Lo que obtendremos será un paquete .rpm. Ahora debemos usar el alien para convertirlo a un paquete .deb, para lo cual:</p>
<pre class="brush:plain">sudo alien -d php5-gd-5.3.2-1.31.i586.rpm</pre>
<p>Alien procesará el paquete y lo convertirá a un paquete .deb:</p>
<pre class="brush:plain">php5-gd_5.3.2-2.31_i386.deb generated</pre>
Ahora debemos instalarlo como cualquier paquete debian corriente:
<pre class="brush:plain">sudo dpkg -i php5-gd_5.3.2-2.31_i386.deb</pre>
<p>La organización de las extensiones de PHP 5 es un poco diferente entre ubuntu y CentOS, así que deberemos mover la librería al lugar correcto para que funcione con el PHP, lo hacemos así:</p>
<pre class="brush:plain">sergio@fate:~$ cd /usr/lib/php5
sergio@fate:/usr/lib/php5$ ls
20090626+lfs extensions libexec maxlifetime
sergio@fate:/usr/lib/php5$ cd extensions
sergio@fate:/usr/lib/php5/extensions$ ls
gd.so
sergio@fate:/usr/lib/php5/extensions$ sudo mv gd.so ../20090626+lfs/gd.so</pre>
<p>Básicamente, aquí lo que hemos hecho es mover la librería gd.so del directorio extensions al directorio 20090626+lfs que es donde ubuntu almacena las extensiones de php5</p>
<h4>Terminar la instalación</h4>
<p>Bien, ya tenemos instalada una versión reciente de la librería gd, pero aún no es totalmente funcional, ahora debemos encargarnos de algunos detalles que surgen como resultado de usar paquetes de otro sistema operativo.</p>
<p>Para el siguiente paso debemos asegurarnos de que PHP esté registrando los errores en un archivo de registro que podamos consultar, para ello, vamos a /etc/php5/apache2 y abrimos el archivo php.ini</p>
Allí buscamos una línea como esta:
<pre class="brush:plain">;error_log = php_errors.log</pre>
Le retiramos el punto y coma (;) al inicio de la línea y colocar allí la ruta a un archivo donde se escribirá el registro de los errores de PHP, por ejemplo:
<pre class="brush:plain">error_log = /var/log/php5/errors.log</pre>
<p>Guardamos el archivo, luego debemos asegurarnos de que el Apache pueda escribir en el archivo que hemos elegido:</p>
<pre class="brush:plain">sergio@fate:/etc/php5/apache2$ cd /var/log
sergio@fate:/var/log$ sudo mkdir php5
sergio@fate:/var/log$ cd php5
sergio@fate:/var/log/php5$ sudo touch errors.log
sergio@fate:/var/log/php5$ sudo chmod o+w errors.log
sergio@fate:/var/log/php5$ </pre>
<p>Ahora reiniciamos el apache y consultamos el archivo de registro de errores:</p>
<pre class="brush:plain">sergio@fate:/var/log/php5$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2
... waiting
[ OK ]
sergio@fate:/var/log/php5$ tail errors.log
[30-Apr-2011 22:19:44] PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/gd.so' - libpng14.so.14: cannot open shared object file: No such file or directory in Unknown on line 0
sergio@fate:/var/log/php5$
</pre>
<p>Allí vemos que hay un error, nos dice que nos hace falta la librería <span style="font-family:courier">libpng14.so.14</span>, vamos a ir a buscarla al <a href="http://rpm.pbone.net/index.php3/stat/11/vendor/3337/com/CentOS.html">repositorio de CentOS</a>. Allí usamos el search con la opción <strong>Search for rpms which contain given file name (1) e.g. libhistory.so</strong> para localizar el paquete con la librería que necesitamos.</p>
<p>Una vez lo ubiquemos seleccionamos el paquete correcto para nuestra arquitectura (32 o 64 bits) y descargamos el paquete como antes:</p>
<pre class="brush:plain">wget ftp://mirror.switch.ch/pool/1/mirror/opensuse/distribution/11.4/repo/oss/suse/i586/libpng14-14-1.4.4-2.1.i586.rpm</pre>
<p>Obtendremos el RPM y nuevamente usamos el Alien para convertirlo a un paquete de debian:</p>
<pre class="brush:plain">sudo alien -d libpng14-14-1.4.4-2.1.i586.rpm
...
libpng14-14_1.4.4-3.1_i386.deb generated</pre>
Luego instalamos la librería:
<pre class="brush:plain">sudo dpkg -i libpng14-14_1.4.4-3.1_i386.deb</pre>
<p>Luego de esto reiniciamos el apache y comprobamos nuevamente el archivo de errores del PHP. Si encontramos otra librería que haga falta tendremos que repetir el procedimiento anterior para instalarla. Cuando el PHP no presente más errores habremos terminado con la instalación.</p>
<h4>Comprobar la instalación:</h4>
<p>Ahora comprobamos la instalación usando la función phpinfo y verificamos que la librería gd instalada sea la 2.0.34:</p>
<table border="1" cellpadding="3" cellspacing="2">
<tr><td>GD Support</td><td>enabled</td></tr>
<tr><td>GD Version</td><td>bundled (2.0.34 compatible)</td></tr>
<tr><td>FreeType Support</td><td>enabled</td></tr>
<tr><td>FreeType Linkage</td><td>with freetype</td></tr>
<tr><td>FreeType Version</td><td>2.3.12</td></tr>
<tr><td>T1Lib Support</td><td>enabled</td></tr>
<tr><td>GIF Read Support</td><td>enabled</td></tr>
<tr><td>GIF Create Support</td><td>enabled</td></tr>
<tr><td>JPEG Support</td><td>enabled</td></tr>
<tr><td>libJPEG Version</td><td>unknown</td></tr>
<tr><td>PNG Support</td><td>enabled</td></tr>
<tr><td>libPNG Version</td><td>1.4.3</td></tr>
<tr><td>WBMP Support</td><td>enabled</td></tr>
<tr><td>XPM Support</td><td>enabled</td></tr>
<tr><td>XBM Support</td><td>enabled</td></tr>
</table>
<br />
<h4>Conclusión</h4>
<p>Usando la utilidad Alien hemos logrado actualizar la librería gd para php. Hasta que canonical actualice la versión de los repositorios de ubuntu esta es una buena forma de quitarnos el problema de encima.</p>
<p>Espero que esta entrada les haya sido de mucha utilidad. Para mi significó un día entero de trabajo buscando la manera de actualizar la librería.</p>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-46919985404494489902011-04-25T01:08:00.000-05:002011-04-25T01:08:15.494-05:00What a good Mid-Rate Lineage II server should have<p>I've been playing Lineage II since C1 I started in <a href="http://l2.gxzone.com/">this 1x server</a>. Ever since then a lot has changed and I'm not talking about the game client only but about myself. I have moved to other servers and I have experienced Low rate, mid rate and high rate and the one I like the most without any doubt is Mid rate it has the best of the other two experiences.</p>
<p>The best mid-rate server I have ever played is Sieghart in Lineage II Teh Game. That server no longer exists because Lineage II Teh Game have been through a lot of changes and it doesn't have a Mid-rate server anymore, it only has the <a href="http://www.lineage2thegame.com/">original Bartz low rate server and the high rate Aria server</a>.</p>
<p>Without any doubt Sieghart taught me a lot it gave me more experience that all the other servers together, It was there where I first raided an Epic Boss, the first time I played olympiads and the first time I became hero. It was also the very first time I enjoyed being in a clan and playing with friends. Sadly the guys from Teh Game closed the server because they did a really bad update and they had no way to roll the server back to what it was before that shameful decision (that is my guess) but it doesn't change the fact that on it's peak that was without a doubt the best Mid-rate server ever made.</p>
<p>After Sieghart closed I moved on to Phoenix and I have to admit that I had a really good experience there although I think I ended up hating Greek people because they where so cocky and arrogant and in the top of that they were cheaters and made almost any kind of dirty tricks to prove that there was no one better than them... off course a lot of them where just bad players, curse them! but anyways, I had a good time playing in Phoenix. Sadly it was also wiped because the GMs did a poor job when it came to balance the server they did a lame job with landing rates and made sloppy work when it came to fix those faults also I think they wiped out the server because a lot of newbie guys where crying because they had no way to reach the level old players had attained, in the end I think it was all for nothing.</p>
<p>Now they opened Aria which is not a bad server just it doesn't have what I find fun about a server it is totally PvP driven and I don't like PvP that much, so I decided to leave.</p>
<p>Ever since I have been looking around the web trying to find a good Mid-rate server as close to Sieghart as possible but to no avail, nowadays It seems like any noob can create a Lineage II server and thus you see some things around that ¬.¬ there are no words to describe such failed servers.</p>
<p>There are guys around the web trying to create Mid-rate servers that are more like High-rate servers others trying to create Mid-rate servers with crafting which is a feature for low-rate servers. OMG What are they thinking? I can't believe they really think they will succeed with those crappy servers. And last but not least people who tries to force server balance with stupid mods like making Epic bosses accessible only through castles (yeah, like that is going to work -.- It's like they have never played in other servers before). I say, that is why your servers are boiling with peaks of 11 players on-line! Good job ¬.¬</p>
<p>Okay, so here is what I think a good Mid-rate server should have. If this description resembles Sieghart it is because that was a really good Mid-rate server. So here it goes:</p>
<ul>
<li>First of all the rates. It is MID-RATE, that means above 30x and under 100x. Please don't make me loose my time going in your "mid-rate" server site to see that it is a 1000x server THAT IS NOT MID-RATE BY GOD'S SAKE!!!!</li>
<li>Crafting: We DON'T want to craft that is for low rates! We just want to buy our equipment from the NPC Shop as we level up. It is okay to make high level equipment and S/As hard to obtain but PLEASE, PLEASE don't make us craft it totally sucks!</li>
<li>Adena and XP balance: Please don't make me reach level 61 with D grade equipment that is something I hate about official L2, It totally sucks! Please, please, just take a character and level it up and adjust the adena drop rate or prices in the NPC shop accordingly. (I guess there are a lot of GMs who level up by command and don't even bother on testing the drop rates or adjusting the prices).</li>
<li>NPC Buffers: This is not so hard I don't know why so many servers fail with this. It is a Mid-rate server there should be a NPC buffer in towns we don't want to log 5 accounts just to level up and there are no big clans with a lot of support characters in Mid-rate servers. And please, by god's sake don't go over to the other end, please don't put Songs, Dances or Third class buffs in NPC buffers is mid-rate not high rate. If the server is starting it is okay but as the server grow up those buffs should be removed from NPC buffers. Is a mid-rate not high rate PvP server.</li>
<li>Farming zones: Please don't fuck everything up modding the mobs to drop special items to buy things from the NPC Shop it totally sucks! Don't restrict farming areas, some of us who have experience in the game have special areas to level up our characters depending on the class and we DON'T want to be restricted by noobs like you that think that all areas are provided equal.</li>
<li>Custom Currency: In a Mid-rate server it should be a custom currency with an appropriate exchange rate to Adena. Medals worked really well in Sieghart and obtaining them through events was a really cool feature. It was also a nice feature to make champions drop some of this custom currency but only on high levels (80 and above) to avoid low level bot characters farming for a lot of them.</li>
<li>High level equipment and S/As: Please, we don't want to level up a crystal to put acumen on our Sword of Miracles which we will be using for only an hour while we level up to 76. In a mid-rate servers weapons should be sold with S/A on them up to a certain grade after which you have to get it in the retail way (leveling up a crystal). In a Freya server for example I think you should be able to buy S/A weapons on the NPC Shop up to S grade, maybe S80.</li>
<li>Please avoid custom weapons and armors we don't want to play low rate but that doesn't mean we want to play a totally customized game, we don't want titanium or crystal or triumph sets, we are okay with the sets NCSoft made.</li>
<li>Features page: Please when making the server website add a feature page in which I can see what kind of game-play should I expect from the server. I care more about NPC Shop and Buffers and custom farming areas that the physical setting of the machine that runs the server.</li>
<li>Events: Please add events to the server. Good events, like those in <a href="http://www.lineage2thegame.com/">Lineage II The Game</a>, TvT, CTF, KoH, FOS not crappy events like races and chest events (those are good for a GM event not for automated events). Events are crucial in this kind of servers because we want to PvP from time to time.</li>
<li>Please don't customize Sub class and Noblesse quests. If you think your server doesn't have the population to allow players to do subclass quest then make it free. As for noblesse please don't customize this quest this quests are one of the things that I appreciate from low-rate and retail.</li>
</ul>
<p>This is is for now. If I think of something else I will add it here. As I go around the web searching for a good Mid-rate server I will post my findings here (only the ones I make from now on). You never know what else can you find around and I would like to make fun of fail servers.</p>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-77273755571751873172011-04-07T03:07:00.003-05:002011-04-26T21:20:37.932-05:00MacOS X en VirtualBox -- Mi experiencia personal --<p>Bueno, primero que nada decir que esto no pretende ser un tutorial, lo que funcionó para mi puede no funcionar para nadie más, nada es seguro cuando se trata de hacer correr este sistema operativo en PCs y más aún sobre máquinas virtuales. Así pues esta es mi experiencia personal, puede que funcione para ustedes como puede que no</p>
<br /> <h3>Que hace falta:</h3>
<p>Antes de comenzar deben contar con lo siguiente:</p>
<ul>
<li>Un procesador Intel de 64 bits que tenga la tecnología Intel VT (Puedes verificar si tu procesador cuenta con esta tecnología en la <a href="http://ark.intel.com/VTList.aspx" target="_blank">Lista de procesadores de Intel que la soportan</a>)</li>
<li>Una tarjeta madre que soporte la tecnología Intel VT (Puedes verificar si tu tarjeta madre soporta la tecnología en la <a href="http://www.intel.com/support/motherboards/desktop/sb/CS-030922.htm" target="_blank">Lista de tarjatas madre Intel que la soportan</a>)</li>
<li>Un sistema con un hardware razonablemente poderoso, 2 GB de RAM o más, procesador de doble núcleo de 2 Ghz o más rápido</li>
<li>VirtualBox 4.0 o posterior</li>
<li>Una copia del <a href="http://znfagg.blu.livefilestore.com/y1pj4HxC9wIDGKgl4XAIsB3mSF5UU-SoXkRipEEdONzMHtui2GVMXU_YqZtcPN88OUY6djHM4p6jFbnBfy4ASvy28keV1LMjf28/iBoot.zip?download&psid=1" target="_blank">iBoot</a></li>
<li>Una copia (sin parchar) del MacOS X Snow Leopard [Si tienes una copia parchada este tutorial no te aplica]</li>
</ul>
<br /> <h3>Cómo empezar</h3>
<p>Lo primero que necesitas es activar la tecnología Intel VT en tu tarjeta madre. La mía venía con esta característica desactivada y según he leído vienen por defecto así.</p>
<h4>Para activar la tecnología Intel VT debes:</h4>
<ol>
<li>Reiniciar tu equipo</li>
<li>Cuando aparezca la pantalla de incio de la Board debes presiona F2 para ingresar a la utilidad de configuración de la BIOS</li>
<li>En la opción de Seguridad (Security) localiza la opción y activa la tecnología Intel VT</li>
<p style="margin-left:10px;margin-top:20px;margin-bottom:20px;font-style:italic">Si tu tarjeta madre cuenta con extensiones como VT-d, VT-i o VT-c no dudes en activarlas también ya que mejorarán muchísimo el desempeño de la máquina virtual.</p>
<li>Guarda los cambios en la configuración y abandona la utilidad de configuración</li>
<li><strong>Apaga</strong> tu equipo y enciéndelo de nuevo. (OJO, esto es importante, debes apagar el equipo, no solo reiniciarlo, debes apagarlo completamente o los cambios no surtirán efecto)</li>
</ol>
<p>Si estás preocupado por las repercuciones que activar la tecnología Intel VT podría tener en el desempeño normal de tu equipo en las tareas cotidianas no te preocupes, no tiene ningún impacto en aplicaciones que no estén relacionadas con Virtualización, en algunos lugares dice que puede reducir la velocidad de las máquinas virtuales en el VirtualBox pero la verdad yo no he visto tal comportamiento en mis máquinas virtuales.</p>
<h4>Configurar la máquina virtual</h4>
<ol>
<li>Ingresa al VirtualBox y crea una nueva máquina virtual</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoskXTMYL4KO67WXBahtAknTAEmdbOF6wwKVeeu1Fss07mstMBPAC0F0UMXXzFdoF1nEsIBpFiPa66oIF2B_-o_XBcNqZKMhPtMgPxiygq5kgAHZCPYSPBKjBoHw6ALqyC8n-rdg/s400/nueva-m%C3%A1quina-virtual-1.png" /></p>
<li>Dale a la máquina virtual una buena cantidad de memoria, 1 GB o más</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu-SE-al73HIx4gc7xwKTMO7aBDL9_iPGHu6bPG601MD0GIuSw_Sd9JAzqmvyHGAXcQpItkkdOHJ44Jpa_zvJkIu4tXI7d7CPwp_0vzjIrpaNtCo0_Ca5AnicR_9FWVOk6A8xBNA/s400/nueva-m%C3%A1quina-virtual-2.png" /></p>
<li>Crea un nuevo disco duro para la máquina virtual. Dependiendo de lo que pretendas hacer en la máquina virtual y de la cantidad de espacio de la que dispongas selecciona un tamaño adecuado para el disco duro virtual.</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1kjHijzkCbkv5AfjHUOcxhgNr9OrDk_i8SgqCMB1UGXRdNNpusduQ9qCtLEsgprWtoNd0efXk4ZjZkfb_0TujRrN1_KNlePl8Z5EmPhVxKq2ENLJ88Ysd8v9fJhUWh3IGOouSAA/s400/nueva-m%C3%A1quina-virtual-3.png" /></p>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWJofap1bFyhporXWpL6C7G_6VT1kYV9x3xyp3Ars6Zg8_uDviMpNTdBElXHBGsUWfCOswIO3ciYw0qRsRnpJMSM6_qg4aKucdjph6jV4beGlgCpiVbfrGsqHsFgzLJ8CbXNK_DQ/s400/nueva-m%C3%A1quina-virtual-4.png" /></p>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0KmATc7Rot9_env2oe_rkelpNSFsg4MymfBP2WM8A8LXLpWFrUPirp0ZQMgg_Uq2TSkKpQ0uCnZXaN_hXm3hgyHxTByLsz3H6tP_KMDHaZ9jOfKORE8SjrgmlSL0mxJ3sQmBDLQ/s400/nueva-m%C3%A1quina-virtual-5.png" /></p>
<li>Listo, ya está lista la máquina Virtual</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY2EFTgWB-usaOxUIRlgjE76IrC7Tr3LuDZ2dI2lJosJ4NWLrMOSuRicmJUjq7kX6kcZ8oma2vHr_utujGA4Alsmd4ZaKxSdTChrEqoKqSN10DT_c3nACA7owLcQS9jHdzIaDSNA/s400/nueva-m%C3%A1quina-virtual-6.png" /></p>
</ol>
<h4>Configurar la máquina Virtual</h4>
<p>Debes configurar la máquina Virtual pues la configuración predeterminada del VirtualBox no funcionará de entrada. Las configuraciones que debes alterar son:</p>
<ol>
<li>Fíjate que esté seleccionado el Chipset ICH9, que esté habilitado el I/O APIC y que esté deshabilitada la opción EFI:</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh93Bb07EGtZ32YLYVwMX0fIJRWNkLwnxB7Xpm52WljW847PQcD7SLjnoBJx6NKqqq1SPGgGKBvuth_ZEp3Un8JWyvA_f8SKl5Kcut3uCOXfJPhjpNAoUVDzhaxUSdqXiqu7nx-Hw/s400/configurar-m%C3%A1quina-virtual-1.png" /></p>
<li>Únicamente debes darle una CPU a esta máquina virtual o te encontrarás con inestabilidades cuando esté corriendo.</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyAjU0ZJ_M1IBcVI7MUqfcU30utiVy_bu0idQBuHiL_9DthMAdGmR6QofTPsnq2Te_0WkM3UPrrNEAQBKmiQtHRlI_p0tjiWk1upwrQveGGda4xnHwrvEr7mNTSVfqu2duA8KECA/s400/configurar-m%C3%A1quina-virtual-2.png" /></p>
<li>Luego en la pestaña de Aceleración asegúrate de marcar la opción Intel VT. [Según he leido la opción de Paginación Anidada solo funciona en los Intel Core i7 pero si la dejas activa y tu procesador no es compatible el VirtualBox no la toma en cuenta, yo la dejé activa en cualquier caso]</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZkIiGjDwLQe6DUnWmKPbSIEr-Jayn1Em6sxrbAMv7inlKjRQqpnOMAKRppGMAtEyyTlR9EnuXcu_Jqr8beQSROGXFcxTeU4CJAxkmW9_9KyoTWI_B-HC2lHLutlXKuwuO_qUkcw/s400/configurar-m%C3%A1quina-virtual-3.png" /></p>
<li>Aumenta la memoria de vídeo que le das a la máquina virtual. Si quieres puedes activar la opción de Aceleración 3D y probar a ver que tal te va, si mejora el rendimiento puedes dejarla activada, si te causa problemas puedes retirarla.</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqqNhZk-TuA-0xNtQkjSwmTQwyGlPkPNcgsAqro7m1xamOuxwno-OqbeMgMdS9Les4rLWHo4K7IJQvk43ekjhWL5yESbbIV1qiqPJ23ILJerP9cqhXx3sfz-9fBtqqYGUBwI34aQ/s400/configuraci%C3%B3n-m%C3%A1quina-virtual-5.png" /></p>
<li>Finalmente deberás montar la imágen del iBoot en la unidad de CD de la máquina virtual, sin el iBoot no podrás arrancar el instalador del MacOS X</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tDXjEPGgYnSazTadFgYYf8rve4-eyUwVieUqGz7_fInuxH67UsEh4z5r612N0SYRVhtu0_R1as9qL4FWZiI2ghNlHQCixskykfswX_jl6hIRIEPE39MGGEeftrEFMUDCxkt0yA/s400/configurar-m%C3%A1quina-virtual-4.png" /></p>
</ol>
<h4>Un comentario sobre EFI</h4>
<p>Un pequeño paréntesis en el procedimiento. <a href="http://es.wikipedia.org/wiki/Extensible_Firmware_Interface">EFI</a> es un sistema de arranque desarrollado por Intel y es el que utilizan los Mac, entonces ¿por que no dejamos el EFI activado? La razón es que al tratar de arrancar la máquina virtual en modo EFI el Kernel del MacOS X hace una verificación de procesador y al no detectar un procesador conocido lanza un Kernel Panic y no continua arrancando, al menos eso me pasó a mi y por eso tuve que usar el iBoot.</p>
<p>Si alguien aquí logra arrancar en modo EFI sin que el MacOS lance el Kernel Panic por favor haga un comentario con el procesador que tiene y si tuvo que hacer alguna configuración adicional para poder arrancar.</p>
<h4>Instalar MacOS X</h4>
<ol>
<li>Arranca la máquina Virtual, lo primero que aparecerá será el iBoot:</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKW65bPUhFQwilPgrUZGVl_aie_m3dGkdZOWeqyM7tUZtO3yZ1Y-ETYptkEHRLLcWjdFSgwpFW7F4ERqqB15Uen5sENfypFDRY1VrBiuki7sLPHr_irukMkgFwg0f4WY1NixmkYQ/s400/iBoot.png" /></p>
<li>Mientras estás en el iBoot utiliza el menú de la máquina virtual para montar el CD del MacOS X y luego presiona F5 (en la máquina virtual), verás que aparecer el CD en el menú del iBoot. Luego presiona Entrar para arrancar el instalador</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRXkRjeEkUrJwPf7wYOE-o8iUf9Z8N0Rh2BlHRkOuJAG_yG_6H912qkQJfVKfdiv3IUBZy9uigGAQoKol2Z1kjKKvJJ74ERZbq9JViUrZme-EClb4k7NSR8UubxEKbGGZc7vcrnQ/s400/mount%20macosx.png" /></p>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggnKgA9PUCh30mpsGwj0cepfdXvZmRwfoweg_bW9p17wBIZyTk7q9FbXwO6pgKQRTjfleQaUUA6owLolQ87FQvxVjecTEzcmvygl-E_9h4uqK1-BQR1RdeEkiY_ri8QJUZtvziAQ/s400/iboot%20macosx.png" /></p>
<li>Selecciona el idioma para el instalador:</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQMoJlninrt5EtWVhcYECrAF-vC53tEJ939cdhyphenhypheniNpC5AtRHOIZPzCsndrRe-rc6j5mO3tJY4dYZ0kWBVsSdwra9HvcNv8jpnrvkVLZFAbxv177O29Y-PvYxA2C04HUnoRUbH37w/s400/macosx-select-language.png" /></p>
<li>Haz clic en "Continuar" y acepta los términos de la licencia para iniciar el instalador</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhW9hYnafrRVW00kIIYRryFKGkezOFLng4K_LUKWnqultbHdTMTJkgAiP9rXksCAYnFWF7e67ngwQecpmQGn4SC-R0Atq9j_fJDGLfks2q6PxPTQIiK1MpG9NcRNHijiqyc1648sw/s400/macosx-start.png" /></p>
<li>El instalador te pedirá que selecciones un disco duro para instalar el sistema pero no verás ningún disco duro en la lista, haz clic en el menú utilidades y selecciona Utilidad de Discos</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpMw4tUvRfQTDVqEQzvJl_VVJqPlG7lQRTTt11mk3gNPm5CD9qsLXRkruIxcjvGDWyY78phX2ucd7OI1nb0-W9FkgtUS4PpK2UTyCfnNyFKXhk3o8Dz2Vs2EYCw0-wsdE9OAi7jQ/s400/macosx-no-disk.png" /></p>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV_rtiJqJHkfiuRK_usFhBKoc3b7e4Q3GyqZ__0csYvSfesqfTBY-5NcdQCQyF8mSUeQx2wQ8GcnWlavnYUVZe75Ibnt7qfcZtPjyF3c2h2y8ZGGV3Gludz_RIYomR43k6_7DUcw/s400/macosx-disk-utility-1.png" /></p>
<li>En la utilidad de discos selecciona el disco duro en la lista de la izquierda, luego pásate a la pestaña "Borrar" y haz clic en el botón "Borrar" para borrar el disco duro, esto creará tabla de particiones, y partición nueva todo de forma automática.</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguauIWJdo5U-9w3wvyog9XbhiGEjAbX1OXMpTyFVIsem0LnqSnr7Wd32DZh1Jgds76t4lw-zS15yDANzk6ExlTsGgTyxgX_U5c9gagl1jmAIJ56g1S1CC2OgJ_dRSy3bF1Vzy17g/s400/macosx-delete-disk.png" /></p>
<li>Una vez el disco haya sido borrado Haz clic en el menú Utilidad de Discos y selecciona "Salir de la Utilidad de Discos" u oprime Windows+Q para volver al instalador, ahora si verás el disco en la lista de discos duros:</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5VTeI1Hq65oSCrLm8n-Ssen3_EeP7OJrDCIWawXN1KaVUeAJG7Q5r-yVQuWRklcRkxip6rcKnPHGUv3WKO85DrmbPjiaOlJO7BKX3XsM7ArTHOiGIkQlN54wxFjaZmhInlVWjHg/s400/macosx-select-disk.png" /></p>
<li>Selecciona el disco duro y haz clic en instalar para empezar la Instalación, la instalación tardará aproximadamente 30 minutos.</li>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPnWdm4dHcPmormuDJxbU0T6evAfaonU9NYfdbwU0pnEXYtAve36tkmKbdcv5b6vxv_msbEPL9BMNDTLoR6cq2VR7i8obo2SdbH5gCJLGA8HIoz8nwgaiZqE8hHLy0NiaHfcTCkA/s400/macosx-installing.png" /></p>
</ol>
<p>Cuando termine la instalación la máquina virtual se reiniciará (Si no se reinicia sino que ves un mensaje de error diciendo que debes apagar el equipo en varios idiomas reiníciala desde el menú de VirtualBox).</p>
<p>Al iniciar nuevamente la máquina virtual no arrancará, verás un mensaje que dice que no se han encontrado sectores de arranque. Debes entonces volver a montar el iBoot en la unidad de CD y reiniciar la máquina virtual, verás entonces lo siguiente en el iBoot:</p>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3MIGNkVYjDamZGP4Gx9se_uN-uxQuuoU-zGleF16sDaCF3aDAiPJZ5fXOoUQQ4mbrt11bMj7KT4YMw7UX6OiD_NaRwKmOQ5Wx9401PD61ocZf49rV36mW9FYqvVfjusZZ0Jxw_g/s400/iBoot-macosx.png" /></p>
<p>Oprime la flecha derecha y selecciona la manzana, luego presiona Entrar para arrancar el sistema operativo.</p>
<p>Me ha ocurrido a veces que el sistema operativo no arranca sino que aparece ese odioso mensaje en varios idiomas diciéndome que debo apagar el equipo, en ese caso apago la máquina virtual desde el menú del VirtualBox y la vuelvo a arrancar y arranca bien, es un tanto caprichudo ese sistema operativo al estar corriendo en una máquina virtual.</p>
<p>Después de que la máquina virtual vuelva a arrancar deberás introducir información como tu nombre, correo electrónico y demás, nada del otro mundo, también deberás escoger una distribución de teclado. Por difícil que resulte creerlo el MacOS NO tiene la distribución de teclado latinoaméricano así que tendrás que conformarte con la distribución Español de España.</p>
<p style="text-align:center"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZf_F0_DJHll7lWubFvAk9M4pc7BnNiYHHNG3CmNk4eLYqelIfX1iPx_p6lYoDLSvufk1kfS4LhcA38LE0MxL1ZH3f8XBw3RysXJ0oiMPwaWhJKubLD0js_dNjwywcEhZvhyphenhyphenYXfQ/s400/macosx-running.png" /></p>
<h3>Actualizaciones del Sistema</h3>
<p>Una vez instalado el MacOS X si quieres actualizar el sistema a la última versión debes tener en cuenta lo siguiente. Si actualizas el sistema seleccionando el menú de la manzana y luego haciendo clic en Actualizaciones de Software lo que sucederá es que al reiniciar el sistema luego de la instalación perderás el ratón. Por alguna razón al actualizar el sistema operativo la máquina virtual es incapaz de reconocer el ratón del host y créeme manejar un MacOS X sin el ratón es toda una odisea.</p>
<p>Así pues, si quieres actualizar el sistema te recomiendo que sigas estos pasos:</p>
<ol>
<li>Bájate el último Update Combo para el Snow Leopard de la página oficial de Apple. Al momento de escribir este post el <a href="http://support.apple.com/kb/DL1349">último Update Combo</a> era el 10.6.6</li>
<li>Bájate el <a href="http://znfagg.blu.livefilestore.com/y1pJ29v-Azyy0kDprbomKVhdsspWTVu9X7sF896CVM1itBNVktU1YdPsnOrFE5OsPoyRlEi8F-rwQfdc8LrgUYIcygpUBZHXou0/MultiBeast.zip?download&psid=1">MultiBeast</a>, que es un paquete para post-instalación que trae varias utilidades como Extensiones de Kernel para sonido, para tarjetas de red, un bootloader, etc.</li>
<li>Instala el Combo update que bajaste de Apple. Cuando la instalación termine el instalador te pedirá que reinicies la máquina, NO LO HAGAS.</li>
<li>Instala el MultiBeast y selecciona entre las opciones que te presenta una que se llama "EasyBeast", que es la más simple.</li>
<li>Después de que se instale el MultiBeast ahí si podrás reiniciar la máquina y tendrás el Sistema Operativo actualizado y no habrás perdido el Mouse.</li>
</ol>
<p>Luego de hacer el procedimiento anterior ahí si podrás utilizar la actualización de software del sistema para actualizar el iTunes y el resto del software.</p>
<h3>iWork</h3>
<p>Instalé iWork 09 pero no funcionó aunque el programa corre no veo lo que escribo en Pages, los otros programas ni me molesté en probarlos.</p>
<p>Corrí las Actualizaciones de Software y actualicé tanto el sistema operativo como el iWork y definitivamente no funcionó.</p>
<p>Open Office por el contrario funciona muy bien, mi consejo es, no usen iWork, usen Open Office, hace lo mismo y funciona mejor.</p>
<h3>Comentarios finales</h3>
<p>Algunos comentarios finales:</p>
<p>Antes que nada debes recordar que el MacOS está corriendo en una máquina virtual y por lo tanto tiene algunas cosas que no funcionan como funcionan en un Mac real, tiene glitches gráficos, o se puede congelar repentinamente.</p>
<p>Segundo, no tienes soporte para sonido, el sonido dentro de la máquina virtual es horrible, se oye cortadísimo y muy lento, si quieres puedes intentar instalar este <a href="http://forums.virtualbox.org/viewtopic.php?f=30&t=33358">kext para el sonido AC97</a>, yo aún no lo he intentado</p>
<p>Otra cosa que no he podido hacer es hacer que el sistema operativo corra a más de 1024x768, hay una solución en la documentación del VirtualBox pero el problema es que solo funciona cuando el sistema arranca en modo EFI y como ya expliqué más arriba el sistema no está arrancando en modo EFI así que esa solución no funciona</p>
<p>Siempre que arranques el sistema debes tener el iBoot montado en la unidad de CD para poder bootearlo, pero una vez que el sistema arranca ya puedes cambiar la imagen de CD sin ningún problema.</p>
<p>Nunca podrás usar el sistema operativo para hacer cosas que requieran una gran exigencia gráfica, osea, si pretendías editar vídeo con Adobe Premiere olvídate, mejor anda y comprate un Mac real</p>
<p>A mi el sistema nunca me apaga, siempre que trato de apagarlo me sale el mensaje ese de los varios idiomas así que a la final tengo que forzar a la máquina virtual a apagarse. Tampoco puedo entrar al Diálogo "Acerca de este Mac" cuando trato de hacer eso la interfase gráfica muere. (Se parece mucho a cuando se reinicia el servidor X en Linux)</p>
<p>Conforme experimente más y vaya encontrando soluciones a los problemas que he descrito aquí postearé nuevas entradas al respecto. Por ahora espero que se diviertan experimentando con este sistema operativo, que por cierto es hermano de Linux =), Así es, también tiene un kernel Unix</p>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-34084742887528742952010-09-20T18:30:00.000-05:002010-09-20T18:30:18.992-05:00Final Fantasy XII ¡¡¡¡APESTA!!!!No quisiera tener que decir esto de un Final Fantasy pero Final Fantasy XII ¡¡¡¡APESTA MUCHO!!!!<br />
<br />
Se suponía que el sistema del juego estaba pensado para dar al jugador
la sensación de estar jugando un MMORPG pero ¡HUY NO! ¡LA CAGARON! La
cámara es absurdamente errática, la enfoco hacia mi objetivo, me muevo y
la cámara se mueve para donde le da la gana y no me deja ver al enemigo
o a los NPCs.<br />
<br />
Aparte te dan la oportunidad de moverte durante los combates lo cual no
sirve de nada por que igual los bichos te siguen pegando, no puedes
atacar cuando tu quieres sino que debes esperar a que se llene la barra
de acción ¿para que quiero correr durante el combate si no puedo atacar
cuando quiero y a pesar de correr no puedo evitar los ataques del
enemigo? Y como si todo eso fuera poco cuando me muevo la HDP cámara se
mueve más y más cada vez en ángulos más complicados en los que puedo ver
menos que antes,<br />
<br />
Nunca jugué Final Fantasy XI, que si es un verdadero MMORPG pero si se
parece en algo al Final Fantasy XII entonces debe apestar también.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-17930147354085466582010-06-22T22:02:00.000-05:002010-06-22T22:02:48.601-05:00Samsung Corby - Primeras ImpresionesBueno, después de casi un mes de estar usando mi <a href="http://www.samsung.com/es/consumer/mobile-phone/mobile-phones/touch-screen/MUGS3650CWEORM/index.idx?pagetype=prd_detail">Samsung Corby</a> ya puedo escribir un poco sobre como me ha parecido el dispositivo, sus defectos y virtudes.<br />
<br />
<b>Lo mejor</b><br />
<br />
Sin lugar a dudas la Batería, la batería es excepcionalmente buena, tiene una duración increíble, aún usando el teléfono como reproductor de música portátil la batería tarda entre 4 y 7 días en reducir su carga al 50%, igual yo no recibo muchas llamadas pero el hecho de no tener que estar cargando el celular me parece estupendo. No sé como le hicieron los de Samsung pero crearon un aparato con un consumo de energía muy eficiente eso me parece super.<br />
<br /><b>Las funciones del equipo</b><br />
<b><br /></b><br />
Comparado con mi anterior Sony Ericcon no tiene muchas más cosas, básicamente son las mismas funcionalidades, cámara de 2 mega píxeles, reproductor de música, radio FM, alarma, cronómetro, calculadora, juegos y aplicaciones Java y navegador web. Tiene adicionalmente un montón de accesos para las redes sociales, facebook, twetter, flicker, etc aunque la verdad yo no uso ninguna de ellas.<br />
<br />
En cuanto al almacenamiento externo es mucho mejor que el Sony Ericcon por que las tarjetas Micro SD son la mitad de costosas que las tarjetas M2 que utiliza el Sony Ericcon así que de una vez me decidí por comprarle una Micro SD de 4 GB (Suficiente para llevar mi música favorita a todas partes)<br />
<br />
El manos libres es más bien deficiente, yo no sé por que al presionar el botón del micrófono la llamada no se contesta, en varias ocasiones he tenido que sacar el teléfono del bolsillo por que la llamada no se activa con el manos libres.<br />
<br />
Tiene un diccionario Inglés-Español, Español-Inglés de Collins muy bueno. Es una lástima que no se puedan instalar más idiomas.<br />
<br />
La calidad de la señal es muy buena yo no he tenido problemas de interrupción de llamadas o de mala calidad del audio aún en el elevador de mi edificio aún no he probado el sótano pero tampoco nunca he visto que pierda llamadas por que el teléfono se ha quedado sin señal.<br />
<br />
<b>Lo malo</b><br />
<br />
Lo malo de este equipo, bueno, algunas interfaces no están bien planeadas y eso hace que la experiencia de uso sea más bien frustrante, por ejemplo, si uno quiere eliminar una canción de la lista de reproducción tiene que colocarle una marca de verificación a esa canción y cuando la lista es muy larga esa simple tarea puede ser tediosa además que a veces uno no se da cuenta y otra canción por ahí quedó marcada y uno no se da cuenta y se eliminan las dos.<br />
<br />
La pantalla táctil tiene un grabe problema al desplazar las interfaces en pantalla, por ejemplo para hacer scroll en los contactos, por que los contactos suben o bajan cuando uno pasa el dedo suavemente sobre la pantalla pero por ejemplo si uno tiene los dedos húmedos es muy difícil deslizar la lista, lo mismo pasa con el menú o los escritorios del Widget.<br />
<br />
El teléfono vibra muy suavemente aún en el nivel de intensidad más alto por eso cuando el teléfono está en silencio uno puede pasar por alto llamadas por que simplemente nunca se da cuenta de que están entrando.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-66539193766646737222010-06-13T02:12:00.000-05:002010-06-13T02:12:04.309-05:00Conectarse a un Servidor de Lineage II a través de un Túnel SSH (Cont.)<p>Bueno, ya habíamos visto <a href="http://sergiobobillier.blogspot.com/2010/06/conectarse-un-servidor-lineage-ii.html">en la entrada anterior sobre este tema</a> como conectarse a un servidor de Lineage II a través de un túnel SSH burlando un Firewall. En esta entrada concluiré ese tema explicando como realizar la conexión cuando el servidor modifica el cliente en lugar de modificar el archivo de hosts.</p>
<p>En realidad esta entrada también explica una manera de redireccionar cualquier conexión que vaya a una determinada IP a una IP diferente usando un túnel SSH. Esta facultad es especialmente útil por ejemplo cuando queremos saltar Firewalls o cuando tenemos programas viejos que ya no tienen mantenimiento y tienen una IP quemada en el código que no podemos cambiar y necesitamos que se conecten a una IP diferente, entre otras posibilidades.</p>
<div style="text-align: center;">
<div style="-moz-box-shadow: 0pt 0pt 10px rgb(102, 102, 102); background-color: #b7c0d9; border: 1px solid rgb(0, 0, 0); font-style: italic; margin: 20px auto; padding: 5px; text-align: left; width: 80%;"><p><b>De que trata esta entrada</b></p>
<p>Esta entrada explica la manera de usar un túnel SSH para desviar conexiones que van a determinada IP de modo que vayan a una IP diferente de nuestra elección. Para explicar dicho tema haré uso de un ejemplo, una conexión a través de un Firewall usando un túnel SSH para conectarse a un servidor de Lineage II que modifica el cliente.</p>
<p>En este ejemplo en particular realizaremos una conexión al servidor <a href="http://l2.gxzone.com/index.php" target="_blank">Ludmila</a>, un servidor que al momento de escribir esta entrada era un servidor low rate (7x) que corría con Lineage II - CT1 Hellbound</p>
<p>Para mas información sobre el tema que se está tratando en esta entrada por favor lean las entradas anteriores del blog sobre el mismo tema.</p></div></div>
<h4>Antes de empezar</h4>
<p>Antes de poder hacer uso de esta técnica se necesita alguna información, en particular necesitamos las direcciones IP y los puertos a los que el cliente necesita conectarse para poder realizar el redireccionamiento IP. Esta información la puedes conseguir muy seguramente en la página del servidor en el que juegas o tal vez preguntando en el foro de este mismo, no obstante, enseñaré aquí una ténica para obtener esta información por nuestra propia cuenta monitoreando las conexiones activas del PC.</p>
<p>Antes de intentar lo que describiré a continuación trata de minimizar lo más posible las conexiones que tu PC tiene con la red, cierra los programas que usan internet como Messenger, Skype, Outlook, etc. Lo ideal si puedes es que no haya ninguna conexión activa.</p>
<p>Seguidamente abre una consola y ejecuta:</p>
<blockquote style="font-family:courier">netstat -n -p tcp</blockquote>
<p>Verás en la consola algo como esto:</p>
<p style="text-align:center"><a href="http://picasaweb.google.com/lh/photo/LuAnXzsnwpiefnyB7p_Zepx8EC3t0GoUyPPrpRsXJWI?feat=blogger"><img border="0" width="550" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUH3K-spukhyLJfry5YPWldykT_O1Ep1Nb1FbomreBInjBDkby2WDqJuBZudoCAOAnuK9L3vjw0UXjPrvYWR5Ir1lrjlSBI_4WhZwUqF43oVNA15L1gb0DzhxEriXlruw-IXLoag/s512/console%20no%20conn.png"></a></p>
<p>Bueno, ahora vuelve a escribir el comando en la consola pero NO presiones Entrar, esto es, la consola debe estar lista para ejecutar el comando. Luego abre el cliente de Lineage II y escribe tus datos de inicio de sesión, luego da clic en Login o presiona Entrar y rápidamente presiona ALT+TAB para cambiar a la consola y presiona Entrar para que se ejecute el comando que estaba preparado en la consola.</p>
<p>Inmediatamente verás aparecer la nueva conexión con su IP y puerto. Bien, ya tenemos la información del servidor de autenticación. Seguidamente selecciona el servidor en la lista de servidores y dale a Connect, cuando veas la lista de personajes ejecuta nuevamente el comando y verás aparecer la IP y el puerto del servidor del juego, algo como esto:</p>
<p style="text-align:center"><a href="http://picasaweb.google.com/lh/photo/YwHn5rMH9GfIpQzHWUbJGZx8EC3t0GoUyPPrpRsXJWI?feat=blogger"><img border="0" width="550" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm65ogoeo8qjKNmubk8U8TjePeFWOpY3BzRR2s6l2CtRhjP3elXfGL_QYYk6sWlgzYhrnKhkwlSWuBVRBxJh-uQh_i28sIhyh4qK8Xkw8IY9oRaS_qABFIiXAenUnL6qBr9B7n9Q/s512/console%20conn.png"></a></p>
<p>Ok, ya tenemos las IPs y puertos que necesitaremos para establecer la conexión, estos son:</p>
<ul>
<li>190.224.162.71:666</li>
<li>190.224.162.71:7777</li>
<li>190.224.162.74:2106</li>
</ul>
<p>No importa si en tu caso el cliente se conecta a más o menos destinos lo importante es que anotes las IPs y los puertos que necesitarás redireccionar.</p>
<h4>Preparar la tarjeta de red</h4>
<p>Lo siguiente que haremos será preparar la tarjeta de red para desviar las conexiones que normalmente irían a través de la puerta de enlace de vuelta a nuestro equipo. Ya expliqué como hacerlo en la entrada anterior, aquí solo mostraré un screenshot de como se ve la página de configuración avanzada de IPv4:</p>
<p style="text-align:center"><a href="http://picasaweb.google.com/lh/photo/v6g7VqhCjJhMJFIq22llaZx8EC3t0GoUyPPrpRsXJWI?feat=blogger"><img border="0" src="http://lh4.ggpht.com/_XS0pGS_nMuE/TBR9fCJD8nI/AAAAAAAAAR0/PuFtljfroSk/s512/avanzada%20ipv4.png"></a></p>
<p>Nótese que he agregado las dos direcciones IP del servidor del juego que hemos detecto (190.224.162.71 y 190.224.162.74) además de la IP de conexión de la red local (192.168.0.174) dejando la tarjeta de red con un total de tres direcciones IP.</p>
<h4>Crear el Túnel SSH</h4>
<p>Lo siguiente que haremos será crear el Túnel SSH. Para hacerlo volveré a utilizar el Putty ya que es lo más fácil. Los pasos base para establecer la conexión ya los he explicado en las entradas anteriores así que aquí solo mostraré un screenshot de como se ve la configuración de los túneles:</p>
<p style="text-align:center"><a href="http://picasaweb.google.com/lh/photo/fQATmRaH7l4yBPlcXFp5wJx8EC3t0GoUyPPrpRsXJWI?feat=blogger"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNpSzaRQ9GKMXpX6z667PoYw7L8HTJffmrrnzA02wWpyV_gXLEVkxFvIlkTnNY1jKCQK_4Bl3g0fWKQL7fxpAZ0lMEXU4syJEcSVPOG9Qsq2X6YMP0-swWX7tIgAjpOFc6r7p-Pw/s512/putty%20tunnels%203.png"></a></p>
<p>Listo, una vez configurados los túneles le damos al botón Open y establecemos la conexión con el equipo relevador. Una vez establecida la conexión Putty estará escuchando en los puertos 666, 7777 y 2106 listo para hacer el redireccionamiento IP al servidor real del juego.</p>
<p>Abrimos el juego y nos conectamos como si nada. Felicitaciones!</p>
<h4>Algunos comentarios finales</h4>
<p>Así concluye este pequeño tutorial sobre SSH Tunneling para saltar Firewalls. A pesar de que esto puede parecer un conjunto de tutoriales escritos con cierto desdén por las reglas y con la intención de permitirle a quien los lea violar políticas de una empresa o una institución educativa en realidad no es así.</p>
<p>Este material se escribió con el propósito de poner a disposición de otros un conocimiento que no está muy a la luz. Y a pesar de que lo que aquí se explica podría usarse con fines ilegales y maléficos también tiene muchas aplicaciones beneficiosas, puede sacar de un aprieto a un profesional de IT en algún caso.</p>
<p>También muestra las debilidades que algunos sistemas tienen y demuestra que cerrar puertos en un Firewall no es garantía de que se evitarán conexiones no deseadas.</p>
<p>Yo siempre estoy abierto a comentarios y los recibo con mucho gusto. Por favor si tienen comentarios, dudas, preguntas, o lo que sea no duden en dejar un comentario en la entrada o enviarme un correo electrónico.</p>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-75789057739526739242010-06-11T03:25:00.001-05:002010-06-11T03:26:14.879-05:00The Core (El Núcleo)Bueno, esta película realmente es mi tipo de película, mucha acción y emoción y mucha tecnología (incluida tecnología informática, que es mi favorita) Plausible desde el punto de vista de la ciencia ficción, de hecho algunos científicos piensan que el campo magnético de la tierra está haciéndose mas débil y que con el tiempo lo perderemos por completo como le sucedió a marte, incluso se ha dicho que estamos cerca a una inversión del campo magnético.<br />
<br />
Creo que hubo más muertes de las necesarias y muy estúpidas, en especial la primera de ellas, de este comandante, del que no recuerdo el nombre, se murió por estar de sapo ahí afuera, además, debieron haberse metido todos de nuevo en la nave cuando vieron que la lava empezaba a entrar a la geoda, la lava se habría encargado de destruir los cristales, incluyendo el que tenía atascada a la nave.<br />
<br />
Me molestó un poco del final ese escape todo ficticio del profesor y la comandante, hubiera sido mejor que los dejaran morir una muerte honorable, como la de los astronautas de Impacto Profundo.<br />
<br />
Me quedó la duda de la forma en la que refuerzan la última explosión, el tipo simplemente pone el núcleo del reactor al lado de la bomba y ya ¿eso si es posible? es decir, ¿colocar más plutonio al lado de una bomba atómica si incrementa el poder de la explosión aunque ese plutonio este protegido por capas de metal y además aislado del núcleo explosivo de la bomba nuclear?<br />
<br />
Bueno, la película me entretuvo y además tenía buenas gráficas, solo creo que se pasaron un poco con la ficción.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-73968807305007433202010-06-08T23:02:00.026-05:002010-06-11T03:46:40.478-05:00Conectarse a un Servidor Lineage II a través de un Túnel SSH<p>Bueno, antes que nada muchas gracias a <b>Manuel Gulias</b> por leer las entradas anteriores e interesarse en el asunto y también por tomarse el tiempo para escribirme y despertar de nuevo mi interés en este cuento del tunneling.</p>
<p>Como ya saben estos temas ya los había tratado en el blog en estas dos entradas:</p>
<ul>
<li><a href="http://sergiobobillier.blogspot.com/2008/10/saltar-firewalls-usando-openssh.html">Saltar Firewalls usando OpenSSH</a></li>
<li><a href="http://sergiobobillier.blogspot.com/2008/10/saltar-un-proxy-que-requiere.html">Saltar un proxy que requiere autenticación</a></li>
</ul>
<p>Por eso mismo no voy a explicar aquí los detalles de configuración del servidor SSH y etc. solo me voy a concentrar en hablar de el tema que quedó pendiente que es la conexión al game server.</p>
<h4>De que trata esta entrada</h4>
<div style="text-align: center;">
<div style="-moz-box-shadow: 0pt 0pt 10px rgb(102, 102, 102); background-color: #b7c0d9; border: 1px solid rgb(0, 0, 0); font-style: italic; margin: 20px auto; padding: 5px; text-align: left; width: 80%;"><p>Esta entrada es un tutorial que pretende de la forma más gráfica posible ilustrar una manera de conectarse a un servidor de Lineage II y poder jugar cuando se está detrás de un Firewall que no permite la conexión directa a los puertos en los que funciona el juego haciendo uso de un túnel SSH.</p>
<p>Para poder hacer uso de esta técnica hay que tener un equipo relevador por fuera del firewall que esté configurado para servir el protocolo SSH por un puerto que sea accesible para el equipo que está dentro del firewall. Para mayor información sobre este tema leer la entrada: <a href="http://sergiobobillier.blogspot.com/2008/10/saltar-firewalls-usando-openssh.html">Saltar Firewalls usando OpenSSH</a></p>
<p>Un comentario más, esta técnica solo funciona con los servidores que no modifican el cliente sino que alteran el archivo de hosts para lograr la conexión. Es posible que funcione con un servidor que altere el cliente pero eso no está cubierto en esta guía</p></div></div>
<h4>Preliminares</h4>
<p>Bueno antes que nada, para usar la técnica que explicaré a continuación el equipo que está dentro del firewall debe tener una dirección IP estática, por lo que si el equipo está recibiendo una dirección por DHCP habrá que tomar nota de las direcciones que el DHCP entrega y luego fijar estos parámetros en la configuración, a continuación veremos como hacerlo:</p>
<p>Vamos por Inicio → Panel de Control.</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/HrHx41pJsP_h_U4rS9tk6Zx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4q8BWFEjgnb3bbshZelL3muLiLRN3sGhbGd_of1cwp4vdDS4jocXoj0om9Q5auMP5Ea1jaVpVGGLeYXIDGyEopSdtsTcu1_I1IdnMbamJ9DlYYl9hdqBFV0wmntVqfCADBR9feA/s512/Panel%20de%20Control.png" width="400" /></a></div>
<p>Allí, bajo la categoría "Redes e Internet" damos clic en el vínculo "Ver el estado y las tareas de red"</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/Ge-4Mxo7l45aKULvh0X-xpx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEistkA3SP0TnO0FEwDSH4K2tg7Qf-YFY8CbTxPWzdsn9Ieja5YyYwIc3TKD-10keSq2HLhbUxyq1f9BYwbJPTy50mFVlgAgtQ0J9_o8E39q5hF_mnDNz2sH033N7RxRIh6QfQc1AA/s512/Estado%20y%20tareas%20de%20red.png" width="400" /></a></div>
<p>y en la ventana que se abre en el panel de la izquierda seleccionamos "Administrar conexiones de Red"</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/sApRtkPNeABLn0Msufl8pZx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3AsOnDxXogTTgf594RrHEgHQimcSmQwwMvsZxkae1_R4W-LxmH9yOgP56il-Rudow8DbCAeElZGuTXMvhc5MBwZG5SWrOOdj0gy26GHq1rxfaTgnroEBSvBaIpEcf5KqQnKqomg/s512/Conexiones%20de%20red.png" width="400" /></a></div>
<p>Ahora veremos una ventana con las conexiones de red con las que cuenta nuestro equipo, vamos a dar clic con el botón secundario del ratón en la conexión que usamos y a seleccionar "Estado" en el menú que se despliega:</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/3XrEUTSOBzfcoFW37AZvbpx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuqULO-J9UEZraNj7VzSIcU1Q_jd9XTWahWD3S_smOho_T1p9kHy-SKfqjOCxnh1cWL2tlrfeqzARXhxMlFXeTWKkqHCeJsSDSme1-oVg8l1lUrQOPQcNVsulZdYRNKNNYabaG3w/s512/estado%20de%20la%20conexion.png" /></a></div>
<p>En la venta que se abre seleccionamos "Detalles"</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/iA7cGf-eSupFsfWeoWqrX5x8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm60upvmwFSDssYX7xuntRc3xctG7MxzERI87BjDcCAmJiivlP2t9w30IjSZf8OujNwhYjiZW3G_bveX3q2L9e4nLcReBM21q1B19Dn42yPxduEDf79aJOodWotpsCCQW3vviS7Q/s512/detalles%20de%20la%20conexion.png" /></a></div>
<p>Aquí deberemos tomar nota de los siguientes datos: IPv4 Dirección IP, IPv4 Mascara de subred, IPv4 Puerta de enlace predetermina, IPv4 Servidores DNS. Estos datos los necesitaremos más adelante así que los anotaremos por allí en algún lugar y luego cerramos todas las ventanas que abrimos.</p>
<h4>Información del servidor</h4>
<p>Bien, también vamos a necesitar del servidor al que nos vamos a conectar la siguiente información:</p>
<ul>
<li>Dirección IP del servidor de autenticación</li>
<li>Dirección IP del servidor del juego</li>
<li>Puerto del servidor de autenticación (normalmente 2106)</li>
<li>Puerto del servidor del juego (normalmente 7778)</li>
</ul>
<p>Esta información se puede sacar normalmente del archivo de hosts que la mayoría de servidores alteran. El archivo de hosts está en C:\windows\system32\drivers\etc</p>
<p>Para este ejemplo nos vamos a conectar al servidor <a href="http://www.lineage2thegame.com/" target="_blank">L2TheGame</a>, la información de dicho servidor es:</p>
<ul>
<li>Servidor de autenticación: 78.46.17.80</li>
<li>Servidor del juego (Phoenix [500x]): 78.46.17.80</li>
<li>Puerto del servidor de autenticación: 2106</li>
<li>Puerto del servidor del juego: 7778</li>
</ul>
<div style="text-align: center;">
<div style="-moz-box-shadow: 0pt 0pt 10px rgb(102, 102, 102); background-color: #cccbb3; border: 1px solid rgb(0, 0, 0); font-style: italic; margin: 20px auto; padding: 5px; text-align: left; width: 80%;">
<p><b>Tip:</b></p>
<p>Lo mejor para realizar esta ténica de tunneling es jugar el Lineage II abriendo directamente l2.exe (que está en la carpeta system) para así evitar pasar por el servidor del nProtect y el l2patcher. Es lo que yo recomiendo y es así como llevaré esta guía.</p></div></div>
<h4>Modificación del archivo de hosts</h4>
<p>Lo primero que haremos será modificar el archivo de hosts. El archivo de hosts está en C:\windows\system32\drivers\etc, como se trata de un archivo de sistema para poder modificarlo tendrás que ejecutar el bloc de notas con privilegios de administrador (Clic derecho → Ejecutar como administrador) y abrir el archivo.<br />
En el archivo verás tres líneas parecidas a estas:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
# The patch edited this three lines...<br />
78.46.17.80 l2authd.lineage2.com<br />
84.246.123.71 l2patcher.lineage2.com<br />
216.107.250.194 nProtect.lineage2.com</blockquote>
<p>Solo modificaremos la primera línea, agregaremos un # al inicio y luego agregaremos otra línea debajo de ella, el archivo debe verse entonces así:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
# The patch edited this three lines...<br />
# 78.46.17.80 l2authd.lineage2.com<br />
127.0.0.1 l2authd.lineage2.com<br />
84.246.123.71 l2patcher.lineage2.com<br />
216.107.250.194 nProtect.lineage2.com</blockquote>
<p>Ahora probaremos que la resolución de DNS para el servidor l2authd.lineage2.com haya sido cambiada al localhost (127.0.0.1), para ello abrimos una ventana de consola y ejecutamos:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
ping l2authd.lineage2.com</blockquote>
<p>A lo que el sistema debe responder:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
Haciendo ping a l2authd.lineage2.com [127.0.0.1] con 32 bytes de datos:<br />
<br />
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128<br />
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128<br />
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128<br />
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128<br />
<br />
Estadísticas de ping para 127.0.0.1:<br />
Paquetes: enviados = 4, recibidos = 4, perdidos = 0<br />
(0% perdidos),<br />
Tiempos aproximados de ida y vuelta en milisegundos:<br />
Mínimo = 0ms, Máximo = 0ms, Media = 0ms</blockquote>
<h4>Configurar la tarjeta de red</h4>
<p>Bueno, aquí es donde viene todo el secreto de esta entrada y en lo que se diferencia de las anteriores. Vamos a configurar una doble dirección IP en nuestra tarjeta de red, para ello vamos de nuevo a Inicio → Panel de Control</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/HrHx41pJsP_h_U4rS9tk6Zx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4q8BWFEjgnb3bbshZelL3muLiLRN3sGhbGd_of1cwp4vdDS4jocXoj0om9Q5auMP5Ea1jaVpVGGLeYXIDGyEopSdtsTcu1_I1IdnMbamJ9DlYYl9hdqBFV0wmntVqfCADBR9feA/s512/Panel%20de%20Control.png" width="400" /></a></div>
<p>Nuevamente seleccionamos "Ver el estado y las tareas de red" bajo la categoría "Redes e internet"</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/Ge-4Mxo7l45aKULvh0X-xpx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEistkA3SP0TnO0FEwDSH4K2tg7Qf-YFY8CbTxPWzdsn9Ieja5YyYwIc3TKD-10keSq2HLhbUxyq1f9BYwbJPTy50mFVlgAgtQ0J9_o8E39q5hF_mnDNz2sH033N7RxRIh6QfQc1AA/s512/Estado%20y%20tareas%20de%20red.png" width="400" /></a></div>
<p>y nuevamente en el vínculo "Administrar conexiones de red"</p>
<div style="text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/sApRtkPNeABLn0Msufl8pZx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3AsOnDxXogTTgf594RrHEgHQimcSmQwwMvsZxkae1_R4W-LxmH9yOgP56il-Rudow8DbCAeElZGuTXMvhc5MBwZG5SWrOOdj0gy26GHq1rxfaTgnroEBSvBaIpEcf5KqQnKqomg/s512/Conexiones%20de%20red.png" width="400" /></a></div>
<p>nuevamente clic con el botón secundario del ratón sobre la conexión y esta vez seleccionamos "Propiedades" en el menú que se despliega:</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/TrUi6tJxC0gqTbxiud-bg5x8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh3l_DSFXqZPla7QD0B8sxfWWY4UG9ornqce4hlarrZTxefSp48Jb7tM4bbxRlt5wKV5HxfN1P52JADsHB9WLGK7uKv0vAINoMznkfDB7qsaXDclUSE0ZfWPar3S4hK9L5lZt8PA/s512/propiedades%20de%20la%20conexion.png" /></a></div>
<p>Buscamos y seleccioamos en la lista el "Protoclo de Internet versión 4 (TCP/IPv4)" y damos clic en el botón "Propiedades"</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/AU0H51mE9NF9wG3LesvgfJx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9QwHWD5dltknuAH0xsR6muISG4BD-PvluRaML94q3pAI0SsVHb7kcO636jhrXjna28qzXhhzVimR__65FKbos-lFFfNlObkrfqgAgXYOIdbJbFqbLqZyKv5WynmUHEkNAgKPSgg/s512/propiedades%20del%20ipv4.png" /></a></div>
<p>Seleccionamos "Usar la siguiente dirección IP" y damos clic en el botón "Opciones avanzadas..."</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/j3Q6Sv_35g5NShko0xaHW5x8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmJrBeAZF03AChm6o73PI3W_Gwx-N9uWhBlSaNpoH6J223zJAKUyXubhQ6GjNSOFGTbjRoZMBKRcVqtwxWzZom_yiPOQDcIGgY_v06rG7EFfWkKYnrxZRecvZceTLODTmLzbpvZQ/s512/opciones%20avanzadas%20del%20ipv4.png" /></a></div>
<p>Arriba donde dice "Direcciones IP" damos clic en "Agregar"</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/6AxU6-iA-lG_pLkqSCR07Jx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMLKy7wAmzCV0DWzxksy8joy0W5k4wH6sXbOJN_kTvOgl5Ht_kimQPa_3IJJb78tT2POn2Xy8ZRtDugqy7QQQHWbPtJ_795Fe9L9FZK_lQnNTj6u1DEaKvSNL9XczNa-m9KfqN1g/s512/agregar%20ip.png" /></a></div>
<p>Primero agregaremos la dirección IP normal del equipo (la que anotamos en la sección "Preliminares" más arriba), también introduciremos la máscara de subred y damos clic en Aceptar. Luego volvemos a dar clic en el botón "Agregar" y agregamos otra IP. En este caso agregaremos la dirección IP del servidor del juego, en el caso del ejemplo 78.46.17.80 y para acompañarla la máscara de subred 255.255.255.0</p>
<p>Ok, ahora en donde dice "Puertas de enlace predeterminadas" damos clic en el botón agregar y agregamos la puerta de enlace predeterminada de nuestra conexión (que anotamos en la sección "Preliminares") dejamos que windows se encargue de la métrica por lo que dejamos la casilla seleccionada</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/cN1pYsRhzgQ-cslLeue4qJx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRy7tmLevwKYd-SyOc_nCRD4w6IMf5IzOGuAJFZJY_-lXS8Qpdg4uPd0TcHTgMTIXCm9Kpe41j18YYmwEyQydIRXgVu8d4aW14NVjTtJEBjslpEQWt0OiGUEejaeJ6KUJRArjFVw/s512/agregar%20puerta%20de%20enlace.png" /></a></div>
<p>Ahora damos clic en la pestaña DNS</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/UWTY7AX4f4MCMmRIiRshK5x8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtWAiYOsZQ4zioHkGkVppWHzqebAZ8zb0iIQvn5e5yTnJVxY84aQLOidrtvPXcGs05p76u-u4NR6uSGDaKoQDZCU_09o-HAxWUogvkw3ZAz34jGTCH8euzOSerTEUKH-sNrtdZbg/s512/dns.png" /></a></div>
<p>luego, donde dice "Direcciones de servidor DNS por orden de uso" damos clic en "Agregar" y agregamos los servidores DNS de nuestra conexión:</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/Vje7oWc1GQdjH5BZSUfIGZx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKEeyG5Uqjx4K6l0kg0tqGhAlIgzwMM6ePuPj8AOANBDrj2nsDlyBJOgKNhYfKhp2wazACq11TYHAtrrYChDzH08A7_ekfPIMRcWo8MdrjsBUNXm50ADhOa5u5plPa7uowZJfQaQ/s512/agregar%20DNS.png" /></a></div>
<p>Damos clic en "Aceptar" en todas las ventanas abiertas hasta que lleguemos nuevamente a la ventana donde aparecen las conexiones de red. Antes de continuar debemos probar que aún podamos acceder a Internet, para hacerlo abrimos el navegador y buscamos cualquier página de Internet, si podemos verla, estamos listos para seguir adelante.</p>
<p>También sería bueno verificar que la tarjeta de Red quedó con ambas direcciones IP. Para ello abrimos una consola y ejecutamos:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
ipconfig</blockquote>
<p>Y verificamos que la conexión tenga ambas direcciones IP:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
Adaptador LAN inalámbrico Conexión de red inalámbrica:<br />
<br />
Sufijo DNS específico para la conexión. . :<br />
Vínculo: dirección IPv6 local. . . : fe80::389d:74c8:67ee:f52c%11<br />
Dirección IPv4. . . . . . . . . . . . . . : 78.46.17.80<br />
Máscara de subred . . . . . . . . . . . . : 255.255.255.0<br />
Dirección IPv4. . . . . . . . . . . . . . : 192.168.0.174<br />
Máscara de subred . . . . . . . . . . . . : 255.255.255.0<br />
Puerta de enlace predeterminada . . . . . : 192.168.0.1</blockquote>
<h4>Crear el túnel</h4>
<p>Bueno, ahora llegó el momento de crear el túnel SSH que nos hará saltar el firewall. Para este ejemplo utilizaremos el Putty por que tiene interfaz gráfica pero igual serviría el SSH normal por consola.</p>
<p>Abrimos el Putty:</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/YgeNOT8K5UXsa2rCoZInf5x8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="383" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOiSYMd56z4tdV90d5Hgj0rg6oVO7XTTaRY4LfaeSTQXDFu7RRn828j7MKX-nqHLKvmkTPpbUfGnTqbS1I7ox6YOZQeGNKJbFj0MButxQuetAymnAWbf7jUllfjwvdtu1BBvxIGg/s512/putty%201.png" width="400" /></a></div>
<p>Donde dice "Host Name (or IP Address)" escribimos la dirección IP del equipo relevador (el equipo que está por fuera del firewall). Si el equipo relevador está sirviendo por un puerto diferente al 22 (por ejemplo el 80 como lo discutimos en las entradas anteriores) habrá que especificar ese puerto en la casilla de al lado.</p>
<p>Luego en el árbol de la izquierda vamos a Connection → SSH → Tunnels</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/rSjhcwXH_XkSWENeG0ZEC5x8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="383" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXBP07oCD6GNYkAIPwlcRuv84LieaHuEl1Njl7_2DWWTfAqwM_7mHxiz1p-ohYzSUBzweWy4PtfvEYjxX_65867X3bwpGPajHX3BEPVZDzopxEl0MG8l_5kp43nhIb8LbgUlBalw/s512/putty%20tunnels%201.png" width="400" /></a></div>
<p>Primro nos aseguramos que la casilla de verificación "Local ports accepts connections from other hosts" esté marcada y luego debajo de donde dice Add new forwarded port vamos a escribir los siguientes datos:<br />
<br />
Source port: 2106<br />
Destination: 78.46.17.80:2106<br />
<br />
Nos fijamos que "Local" y "Auto" estén seleccionados y damos clic en "Add"<br />
En este paso acabamos hacer el túnel para el servidor de autenticación, por lo que deberás remplazar 78.46.17.80 por la dirección IP del servidor de autenticación del server donde juegas.</p>
<p>Seguidamente agregaremos el forwarding para el servidor del juego:<br />
<br />
Source port: 7778<br />
Destination: 78.46.17.80:7778<br />
<br />
Nos fijamos que "Local" y "Auto" estén seleccionados y damos clic en "Add"</p>
<p>Al terminar la ventana del Putty debe verse más o menos así.</p>
<div style="margin-bottom: 25px; margin-top: 25px; text-align: center;">
<a href="http://picasaweb.google.com/lh/photo/rBisIYxltb55v-G-HTabSZx8EC3t0GoUyPPrpRsXJWI?feat=blogger" imageanchor="1" style="margin: 1em;"><img border="0" height="383" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK_UCg32hh8XknuttrxTH0UI0whggLME0JNlb8yWBUGyO-_YtA30-HnHgxrKnR41YGjblbb6D4ZVhXpktOBwf7kUunE2ppgrFJAz7gWUMCJQlv3SepZd4dpreOpPSxwguQDL7kFw/s512/putty%20tunnels%202.png" width="400" /></a></div>
<div style="text-align: center;">
<div style="-moz-box-shadow: 0pt 0pt 10px rgb(102, 102, 102); background-color: #a596cd; border: 1px solid rgb(0, 0, 0); font-style: italic; margin: 20px auto; padding: 5px; text-align: left; width: 80%;">
<p><b>Aclaración:</b></p>
<p>En el caso del servidor Phoenix de L2 TheGame tanto el servidor de autenticación como el servidor del juego están en la misma máquina (tienen la misma IP), sin embargo para muchos servidores de Lineage II esto no es así. Fíjate que hayas hecho el forwarding a las direcciones correctas o la conexión fallará.</p></div>
</div>
<p>Bueno, ahora te recomiendo que guardes la sesión del Putty para usarla cada vez que quieras jugar y también por si algo fallara para que puedas corregir los errores sin tener que volver a escribirlo todo. En el árbol de la izquierda selecciona el primer Item (Session) y donde dice "Saved sessions" escribe un nombre para la sesión, por ejemplo "L2" y luego haz clic en "Save".<br />
La siguiente vez que abras el Putty podrás hacer clic en la entrada de la lista y luego en "Load" y Putty cargará nuevamente todos los parámetros (incluidos los túneles).</p>
<h4>Conectar y probar</h4>
<p>Ok. Al parecer ya todo está listo para conectar y divertirse. Haz clic en el botón "Open" del Putty para establecer la conexión, logea con un nombre de usuario y una constraseña válidas.</p>
<p>Antes de iniciar Lineage fíjate que Putty esté preparado para hacer el Port Forwarding. Para ello abre una consola y ejecuta:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
ipconfig -n -a -p tcp</blockquote>
<p>Deben aparecer dos puertos abiertos en escucha, el 2106 y el 7778:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
TCP 0.0.0.0:2106 0.0.0.0:0 LISTENING<br />
TCP 0.0.0.0:7778 0.0.0.0:0 LISTENING
</blockquote>
<p>Si todo va bien hasta aquí solo restará abrir el cliente de Lineage II y conectarse y ya debes poder jugar normal. Felicidades!</p>
<h4>Detalles técnicos</h4>
<p>Ahora explicaré un poco por que funciona lo anterior. Como habran notado usamos la característica que tiene Windows de permitir más de una dirección IP en la misma tarjeta de red (aunque también se podría haber hecho con dos NICs si esa característica no estuviera disponible).</p>
<p>Lo que hicimos fue colocar la dirección IP del servidor del juego en la tarjeta de red con una máscara de subred de 255.255.255.0 y es allí donde radica el secreto de este asunto</p>
<p>Cuando una sistema va a establecer una conexión con otro sistema lo primero que hace es hacer un AND binario entre su propia dirección IP y su máscara de subred, en nuestro caso:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
078.046.017.80<br />
255.255.255.0<br />
---------------<br />
78.46.17.0
</blockquote>
<p>Luego toma la dirección la que se va a conectar y hace un AND binario con su máscara de subred, en nuestro caso:</p>
<blockquote style="font-family: courier; margin-bottom: 25px; margin-top: 25px;">
078.046.017.80<br />
255.255.255.0<br />
---------------<br />
78.46.17.0
</blockquote>
<p>Si las dos direcciones resultantes de las operaciones anteriores son diferentes el sistema sabe que debe tratar de enviar la solicitud de conexión a través de la puerta de enlace por que la dirección de destino está en otra red, más, si son iguales (lo que sucede en este ejemplo) el sistema sabe que la dirección de destino está dentro de su propia red así que no trata de enviar la solicitud a través de la puerta de enlace sino a través de la red local.</p>
<p>Como establecimos que nuestra dirección IP es 78.46.17.80 cuando la solicitud es enviada a través de la red local quien la recibe es nuevamente nuestra propia tarjeta de red.</p>
<p>Así pues, lo que hemos hecho aquí es engañar de cierta forma al sistema para que envíe una petición que normalmente enviaría a través de la puerta de enlace de vuelta a nuestro sistema y hemos hecho que Putty escuche conexiones entrantes en el puerto 7778 (como si hubiera un servidor de Lineage II corriendo en la máquina local)</p>
<p>Lo que sucede en resumen es:</p>
<ol>
<li>Abrimos el cliente de Lineage y escribimos nuestros datos de acceso</li>
<li>Lineage resuelve la dirección l2authd.lineage2.com, como hemos agregado una entrada al archivo de hosts que dice que esa dirección es la 127.0.0.1 Lineage II envía una petición de acceso al localhost en el puerto 2106</li>
<li>Putty está escuchando en el puerto 2106 cuando llegá la petición Putty la reenvía con ayuda del equipo relevador al servidor real de autenticación de Lineage II (el cliente no nota la diferencia)</li>
<li>La autenticación sucede y Lineage II muestra la lista de servidores que el servidor de autenticación envió de vuelta.</li>
<li>Seleccionamos un servidor para conectarnos</li>
<li>En este caso Lineage II no trata de resolver ninguna dirección sino de establecer una conexión directa con el servidor. Pone una petición en la red que va a la dirección IP del servidor del juego (en el caso del ejemplo 78.46.17.80)</li>
<li>Windows hace la operación binaria que mencionamos anteriormente y concluye que esa dirección está dentro de la red local. Pone la petición y esta regresa de vuelta a la tarjeta de red.</li>
<li>Putty está escuchando en el puerto 7778 de modo que recibe la petición y la reenvía con ayuda del equipo relevador al servidor del juego real. Se establece la conexión y Lineage II muestra los personajes que hay en nuestra cuenta.</li>
</ol>
<p>Mientras que juguemos Putty, y el servidor SSH que corre en el equipo relevador mantendrán establecida la conexión permanentemente. El cliente de Lineage II no notará la diferencia y el Firewall pensará que la conexión va a un puerto admitido.</p>
<div style="text-align: center;">
<div style="-moz-box-shadow: 0pt 0pt 10px rgb(102, 102, 102); background-color: #ffcccc; border: 1px solid rgb(0, 0, 0); font-style: italic; margin: 20px auto; padding: 5px; text-align: left; width: 80%;">
<p><b>Ten en cuenta que puede haber lag extra:</b></p>
<p>Recuerda que las conexiones SSH van encriptadas, por lo que tu equipo debe encriptar los datos antes de enviarlos al equipo relavador y luego este a su vez debe desencriptarlos para enviarlos al servidor del juego, adicionalmente estás agregando un nodo más a la conexión. Todo lo anterior puede causar lag extra por lo que la experiencia nunca será igual a la que tendrías con una conexión directa.</p></div>
</div>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-23515815905241767972010-05-22T18:54:00.020-05:002010-05-22T19:46:52.414-05:00Crear una emisora web con Icecast 2 e Ices 2 en Ubuntu<p>Bueno, en este pequeño tutorial enseñaré como crear una emisora Web en Ubuntu usando icecast2 como servidor de emisión e ices2 como fuente para el servidor. Aunque esto se puede hacer en cualquier distribución de linux yo recomiendo un ubuntu. Yo lo hice con kubuntu 9.10 (karmik).</p>
<h3>Instalar los paquetes</h3>
<p>Bueno, lo primero es instalar los paquetes que se van a necesitar para la emisora. Si prefieres usar un administrador de paquetes gráfico como synaptic o adept no hay problema, de todos modos dejo aquí el código de la consola para lograrlo. Los paquetes que necesitaras son icecast2 e ices2</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">sudo</b> apt-get install icecast2 ices2
</blockquote>
<h3>Configurar la emisora</h3>
<h4>Preparar Icecast</h4>
<p>Primero prepararemos icecast. Icecast utiliza un archivo de configuración xml donde están todos los parámetros de la emisora además de unos archivos para la interfaz web, unos archivos predeterminados se instalan con los paquetes, hay que hacer una copia de ellos en el directorio del usuario por que no se debe ejecutar icecast como root.<br /> </p>
<p>Primero crearemos una estructura de directorios para albergar los archivos de configuración y de registro de icecast, estando en nuestro home ejecutamos:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">mkdir</b> icecast<br />
$ <b style="color:#772f80">cd</b> icecast<br />
$ <b style="color:#772f80">mkdir</b> conf<br />
$ <b style="color:#772f80">mkdir</b> logs
</blockquote>
<p>Ahora copiamos el archivo de configuración predeterminado del icecast a la carpeta que hemos creado. en kubuntu dicho archivo es /etc/icecast2/icecast.xml Si el archivo no esta allí entonces puedes usar el comando find para encontrarlo así:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">find</b> / -name "icecast.xml"
</blockquote>
<p><b>Nota:</b> en algunas distribuciones de linux las carpetas del sistema están protegidas, los usuarios no pueden acceder a ellas (ni siquiera para leerlas) si este es tu caso deberás usar <b>sudo</b> cuando el sistema te diga que no puedes leer los archivos</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> conf<br />
$ <b style="color:#772f80">cp</b> /etc/icecast2/icecast.xml icecast.xml<br />
$ <b style="color:#772f80">sudo chown</b> <span style="font-weight:bold;color:#ff0000">user</span>:<span style="font-weight:bold;color:#ff0000">group</span> icecast.xml
</blockquote>
<p>Dado que el archivo pertenecía al root hemos usado chown para hacer que ahora nos pertenezca a nosotros. <b>¡Ojo aquí!</b> donde he colocado <span style="font-weight:bold;color:#ff0000">user</span> y <span style="font-weight:bold;color:#ff0000">group</span> debes colocar tu nombre de usuario y de grupo respectivamente, en ubuntu normalmente el nombre del grupo es igual al nombre de usuario, en mi caso por ejemplo tanto mi usuario como mi grupo se llaman sergio así que el comando quedaría: <span style="font-family:courier"><b style="color:#772f80">sudo chown</b> sergio:sergio icecast.xml</span><br /> </p>
<p>Por ahora no modificaremos el archivo de configuración, antes de eso copiaremos las carpetas que el icecast utiliza para la interfaz web. Estas carpetas normalmente están ubicadas en /usr/share/icecast2 pero si no están allí recuerda que puedes usar el comando find para localizarlas.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> ..<br />
$ <b style="color:#772f80">cp</b> -r -L /usr/share/icecast2/web web<br />
$ <b style="color:#772f80">cp</b> -r -L /usr/share/icecast2/admin admin<br />
$ <b style="color:#772f80">sudo chown</b> -R <span style="font-weight:bold;color:#ff0000">user</span>:<span style="font-weight:bold;color:#ff0000">group</span> admin<br />
$ <b style="color:#772f80">sudo chown</b> -R <span style="font-weight:bold;color:#ff0000">user</span>:<span style="font-weight:bold;color:#ff0000">group</span> web
</blockquote>
<p>Recuerda remplazar <span style="font-weight:bold;color:#ff0000">user</span> y <span style="font-weight:bold;color:#ff0000">group</span> por tu nombre de usuario y de grupo respectivamente.<br /> </p>
<p>Ok, ahora si configuraremos el icecast para ello modificaremos el archivo de configuración que hemos copiado:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> conf<br />
$ kate icecast.xml
</blockquote>
<p>Si no tienes kate puedes usar gedit u otro editor pero trata en lo posible de usar un editor que te resalte el código para que se te haga más sencillo ubicar las líneas.<br /> </p>
<p>Bueno, vamos a ir editando las líneas en el orden en el que aparecen en el archivo, así que estate atento.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><clients></b>10<b style="color:#000088"></clients></b>
</blockquote>
<p>Esta línea fija la cantidad máxima de clientes (reproductores) que se pueden conectar a tu emisora. Normalmente esto se ajusta de acuerdo con la cantidad de ancho de banda del que dispones para emitir. Un valor razonable es 50. Si esperas más de 50 clientes quizás este tutorial no es para ti.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><source-password></b>hackme<b style="color:#000088"></source-password></b>
</blockquote>
<p>En esta línea colocaras la contraseña que las fuentes (en nuestro caso el ices2) utilizará para logearse en el servidor y enviar la música. Es recomendable que cambies la contraseña predeterminada para evitar que alguien más pueda emitir con tu servidor.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><relay-password></b>hackme<b style="color:#000088"></relay-password></b>
</blockquote>
<p>En nuestro caso no usaremos relays pero debes cambiar esta contraseña por seguridad.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><admin-user></b>admin<b style="color:#000088"></admin-user></b><br />
<b style="color:#000088"><admin-password></b>hackme<b style="color:#000088"></admin-password></b>
</blockquote>
<p>Este es el nombre de usuario y la contraseña que utilizaras para logearte en el módulo de administración web de Icecast. Te recomiendo que cambies tanto el nombre de usuario como la contraseña por seguridad.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><hostname></b>localhost<b style="color:#000088"></hostname></b>
</blockquote>
<p>Si tu emisora está montada en un servidor al que accedes con un dominio que has adquirido aquí colocaras el nombre del dominio, por ejemplo miradio.org. Si estás montando un servidor de pruebas te bastara con dejar localhost.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><port></b>8000<b style="color:#000088"></port></b>
</blockquote>
<p>Este es el puerto por el que emitirás. Normalmente no hay que cambiar el puerto a menos que tengas restricciones de firewall o algo parecido.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><logdir></b>/home/<span style="font-weight:bold;color:#ff0000">user</span>/icecast/logs<b style="color:#000088"></logdir></b><br />
<b style="color:#000088"><webroot></b>/home/<span style="font-weight:bold;color:#ff0000">user</span>/icecast/web<b style="color:#000088"></webroot></b><br />
<b style="color:#000088"><adminroot></b>/home/<span style="font-weight:bold;color:#ff0000">user</span>/icecast/admin<b style="color:#000088"></adminroot></b>
</blockquote>
<p>Estas tres líneas le dicen al icecast donde guardar sus registros, donde están los archivos del panel de interfaz web y donde están los archivos del panel de administración de la interfaz web. Aca he colocado las rutas que deberías usar tu también si has seguido el tutorial, recuerda cambiar <span style="font-weight:bold;color:#ff0000">user</span> por tu nombre de usuario.<br /> </p>
<p>Ok, en teoría ya está todo listo para que Icecast funcione. Ahora a probarlo.</p>
<h4>Ejecutar Icecast</h4>
<p>Bueno, ahora probaremos que todo esté funcionando, ejecutamos este comando:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ icecast2 -c icecast.xml
</blockquote>
<p>Si la consola no arroja ningun error entonces Icecast ya está corriendo, ahora verificaremos los logs y la interfaz web para ver que todo esté andando bien.<br /> </p>
<p><b>Nota importante:</b> La consola quedará bloqueada con el Icecast <b>NO</b> vayas a cerrar la consola o harás caer el servidor, dejala allí abierta, abre otra ventana o pestaña de consola para hacer los pasos que siguen.</p>
<p>Estando en nuestro home ejecutamos:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> icecast<br />
$ <b style="color:#772f80">cd</b> logs<br />
$ <b style="color:#772f80">cat</b> error.log
</blockquote>
<p>Debes ver algo como esto:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
[2010-05-22 13:08:33] INFO main/main Icecast 2.3.2 server started<br />
[2010-05-22 13:08:33] INFO yp/yp_update_thread YP update thread started<br />
[2010-05-22 13:08:33] INFO connection/get_ssl_certificate No SSL capability
</blockquote>
<p>No importa si el log es un tanto diferente, en realidad lo que importa es que no haya errores y que aparezca la línea que dice <b>server started</b><br /> </p>
<p>Ahora veremos el estado del servidor a través de la interface web. Para ello en un navegador vamos a la dirección <b>http://localhost:8000/</b> esto nos debe presentar una página de estado del servidor. Recuerda que para entrar a la sección de administración deberas introducir el nombre de usuario y la contraseña que has especificado en <b><admin-user></b><b></admin-user></b> y <b><admin-password></b><b></admin-password></b></p>
<h4>Preparar Ices</h4>
<p>Bueno ya tienes el servidor corriendo y preparado para aceptar conexiones, no obstante aún no puedes escuchar música, básicamente por que no le has dicho a Icecast que música tocar. En realidad es un poco más complicado, verás:<br /> </p>
<p>Icecast es el servidor de emisión, el se encarga de aceptar las peticiones entratentes y distribuir el medio a los escuchas que se conecten pero no sabe nada de música ni de listas de reproducción, de ello se encarga el programa al que se denomina fuente (source). Existen varias sources diferentes para el Icecast entre ellas la más básica que es el Ices desarrollado por las mismas personas que desarrollaron el Icecast pero también puedes usar otras fuentes diferentes si lo prefieres, por ejemplo el <a href="http://www.videolan.org/vlc/">VLC Player</a> puede actuar como fuente para el Icecast.<br /> </p>
<p>Para este tutorial usaremos el Ices como fuente para el Icecast ya que es facil y rápido de configurar. Al igual que con el Icecast crearemos una estructura de directorios en el home para organizar los archivos. Esando en el home ejecutamos:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">mkdir</b> ices<br />
$ <b style="color:#772f80">cd</b> ices<br />
$ <b style="color:#772f80">mkdir</b> conf<br />
$ <b style="color:#772f80">mkdir</b> playlists<br />
$ <b style="color:#772f80">mkdir</b> logs
</blockquote>
<p>Ahora copiaremos el archivo de configuración predeterminado del Ices para usarlo con listas de reproducción. Recuerda que si no encuentras el archivo puedes hacer uso del comando <b>find</b> para localizarlo.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> conf<br />
$ <b style="color:#772f80">cp</b> /usr/share/doc/ices2/examples/ices-playlist.xml ices.xml<br />
$ kate ices.xml
</blockquote>
<p>Ahora editaremos el archivo de configuración del Ices. Recuerda que lo haremos en el orden en que las líneas aparecen en el archivo así que pon mucha atención para no perderte.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><logpath></b>/home/<span style="font-weight:bold;color:#ff0000">user</span>/ices/logs<b style="color:#000088"></logpath></b>
</blockquote>
<p>Esta línea le dice a Ices donde guardar los archivos de registro. Recuerda remplazar <span style="font-weight:bold;color:#ff0000">user</span> con tu nombre de usuario.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><name></b>Example stream name<b style="color:#000088"></name></b><br>
<b style="color:#000088"><genre></b>Example genre<b style="color:#000088"></genre></b><br />
<b style="color:#000088"><descriptione></b>A short description of your stream<b style="color:#000088"></description></b>
</blockquote>
<p>Estas tres líneas contienen la metadata de la emisora. Sería una buena idea que las llenaras con los datos correctos según el nombre de tu emisora, el genero y la descripción.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><param </b><span style="color:#880000">name=</span><span style="color:#008800">"file"</span><b>></b>/home/<span style="font-weight:bold;color:#ff0000">user</span>/ices/playlists/playlist.txt<b style="color:#000088"></param></b>
</blockquote>
<p>Esta línea le dice al Ices donde encontrar el archivo de lista de reproducción. Más adelante te diré como crear la lista de reproducción. Recuerda remplazar <span style="font-weight:bold;color:#ff0000">user</span> con tu nombre de usuario</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><param </b><span style="color:#880000">name=</span><span style="color:#008800">"random"</span><b>></b>0<b style="color:#000088"></param></b>
</blockquote>
<p>Esta línea le dice al Ices si tocar la lista de reproducción secuencialmente o aleatoriamente. Depende de ti establecerlo en el valor que quieras. Si la pones en 1 Ices tocará las entradas aleatoriamente</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><param </b><span style="color:#880000">name=</span><span style="color:#008800">"once"</span><b>></b>0<b style="color:#000088"></param></b>
</blockquote>
<p>Esta parámetro le dice al Ices si debe tocar la lista de reproducción solo una vez o debe tocarla infinitas veces. Si dejas el valor en 1 Ices tocará la lista de reproducción una vez y cuando termine cerrará la conexión con el servidor y finalizará haciendo que la emisora ya no se pueda escuchar más. Si piensas dejar la emisora corriendo todo el día para que la gente se conecte cuando quiera deberás establecer el valor en 0 para que Ices cicle indefinidamente la lista de reproducción.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><hostname></b>localhost<b style="color:#000088"></hostname></b><br />
<b style="color:#000088"><port></b>8000<b style="color:#000088"></port></b><br />
<b style="color:#000088"><password></b>hackme<b style="color:#000088"></password></b><br />
<b style="color:#000088"><mount></b>/example1.ogg<b style="color:#000088"></mount></b>
</blockquote>
<p>Esta es la información del servidor. Aquí colocamos la información del servidor Icecast a través del cual vamos a emitir. Esta información debe coincidir con la información que ya habíamos configurado en el icecast.xml. en <b><password></password></b> colocamos el password que habíamos puesto en la etiqueta <b><source-password></source-password></b> de icecast.xml<br /> </p>
<p>En <b><mount></mount></b> debemos escojer el mount point que queramos para emitir. El mount point será la parte final de la URL que usaremos para escuchar la emisora así que no conviene que sea exmaple1.ogg podrías poner en su lugar listen.ogg o tal vez algo más descriptivo pero no debe contener espacios y <b>DEBE</b> terminar en .ogg ya que es el codec que Icecast e Ices usan para emitir si no poner el .ogg algunos players se quedarán colgados sin hacer nada cuando trates de escuchar la estación.</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
<b style="color:#000088"><nominal-bitrate></b>64000<b style="color:#000088"></nominal-bitrate></b><br />
</blockquote>
<p>Esta el la última configuración pero una muy importante. Define la velocidad de bits con la que emitirá tu emisora. Cuanto mayor la velocidad de bits mejor la calidad del audio pero más ancho de banda necesitas para mantener a todos los oyentes conectados. Si colocas más velocidad de bits de la que puede soportar tu canal para la cantidad de oyentes que esperas los oyentes empezaran a experimentar cortes en la música o peor aún desconexiones espontaneas.<br /> </p>
<p>Si no estás muy seguro de que bitrate usar deja el bitrate predeterminado que es de 64kbps es una buena calidad para el .ogg al menos para la mayoría de aplicaciones. Si quieres saber más sobre como calcular el ancho de banda que necesitarás lee el recuadro siguiente, sino saltalo.</p>
<div style="border:#000044 1px solid;padding:5px;font-size:8pt;margin-top:25px;margin-bottom:25px"><p><b>Cómo calcular el ancho de banda</b><br /> </p>
<p>Si no estás muy seguro de como saber cuantos oyentes puede soportar tu canal o cual es el máximo bitrate que puedes usar sin que tus oyentes experimenten problemas esta sección te dará alguna luz sobre ese asunto:<br /> </p>
<p><i><u>Ancho de banda Concurrente</u></i><br /> </p>
<p>El ancho de banda concurrente es la amplitud del canal que necesitas para emitir. Se calcula de la siguiente manera:<br /> </p>
<p>cb = b*n<br /> </p>
<p>Dónde <b>cb</b> es el ancho de banda concurrente (en kbps), <b>b</b> es el bitrate al que emites (en kbps) y <b>n</b> la cantidad de oyentes que esperas que se conecten simultaneamente. Así, por ejemplo, si vas a emitir a 128kbps y esperas 50 oyentes simultaneos: cw = 128kbps * 50 = 6400 kbps. Así pues necesitas un canal de 6.4 mbps para soportar 50 simultaneos oyentes si emites a 128kbps<br /> </p>
<p><i><u>Límite de Tráfico</u></i><br /> </p>
<p>Algunos servidores imponen un límite mensual de tráfico y cuando lo sobrepasas o bien empiezan a cobrarte más o bien no te permiten emitir más por el resto del mes. Para saber si tu límite mensual es suficiente para soportar la emisora puedes calcularlo así:<br /> </p>
<p>tb = b*n*at*30<br /> </p>
<p>Dónde <b>tb</b> es el ancho de banda total del mes (en kbits), <b>b</b> es el bitrate al que emitirás (en kbps), <b>n</b> es la cantidad de oyentes promedio que esperas por día y <b>at</b> es la cantidad promedio de tiempo que un oyente estará conectado al día (en segundos).<br /> </p>
<p>Así pues si emitirás a 128kbps, esperas 50 oyentes diarios y cada uno estará conectado en promedio 5 horas diarias escuchando la emisora tendrás:</p>
<p>tb = 128*50*18000*30 = 402.33 GB<br /> </p>
<p>Necesitarás un límite de tráfico mensual de al menos 400 GB</p></div>
<p>Ok, ya estas listo con el Ices configurado, ahora a crear la lista de reproducción.</p>
<h4>Crear la lista de reproducción</h4>
<p>La lista de reproducción es simplemente un archivo en el que cada línea tiene la ruta de acceso a un archivo .ogg, por ejemplo:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
/home/user/music/anime/yui - rolling star.ogg<br />
/home/user/music/anime/boa - every heart.ogg<br />
/home/user/music/anime/gumi - catch you catch me.ogg<br />
/home/user/music/anime/porno graffiti - melissa.ogg
</blockquote>
<p>Puede resultar un poco engorroso crear la lista a mano así que puedes usar el comando find para agilizar el trabajo, por ejemplo:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">find</b> /home/<span style="font-weight:bold;color:#ff0000">user</span>/ -name "*.ogg" > playlist.txt
</blockquote>
<p>Este comando escribira en un archivo llamado playlist.txt todos los archivos .ogg que encuentre en la carpeta /home/<span style="font-weight:bold;color:#ff0000">user</span>/, recuerda nuevamente remplazar <span style="font-weight:bold;color:#ff0000">user</span> con tu nombre de usuario.</p>
<h4>Ejecutar el Ices</h4>
<p>En cuanto tengas preparada tu lista de reproducción (que debes haber guardado en /home/<span style="font-weight:bold;color:#ff0000">user</span>/ices/playlists/playlist.txt) podrás poner en marcha el ices. Para ello haces lo siguiente estando en tu home:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> ices<br />
$ <b style="color:#772f80">cd</b> conf<br />
$ ices2 ices.xml
</blockquote>
<p>Ok, si todo va bien la consola no debe mostrar mensajes de error, si es así el ices ya está corriendo y enviando información de medios al Icecast. Nuevamente la consola quedará bloqueada <b>NO</b> cierres la consola o bajaras al Ices abre otra ventana o pestaña de consola para los pasos siguientes.<br /> </p>
<p>Vamos a verificar el estado del Ices, para ello, desde nuestro home:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">cd</b> ices<br />
$ <b style="color:#772f80">cd</b> logs<br />
$ <b style="color:#772f80">cat</b> ices.log
</blockquote>
<p>Debes ver algo parecido a esto:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
[2010-05-22 18:20:55] INFO ices-core/main IceS 2.0.1 started...<br />
[2010-05-22 18:20:55] INFO signals/signal_usr1_handler Metadata update requested<br />
[2010-05-22 18:20:55] INFO playlist-basic/playlist_basic_get_next_filename Loading playlist from file "/home/sergio/ices/playlists/playlist.txt"<br />
[2010-05-22 18:20:55] DBUG playlist-basic/shuffle Playlist has been shuffled<br />
[2010-05-22 18:20:55] INFO playlist-builtin/playlist_read Currently playing "/home/sergio/Música/J-Music/YUI/From Me To You/11.ogg"<br />
[2010-05-22 18:20:55] INFO stream/ices_instance_stream Connected to server: localhost:8000/yui.ogg<br />
[2010-05-22 18:20:55] DBUG reencode/reencode_page Reinitialising reencoder for new logical stream<br />
[2010-05-22 18:20:55] INFO encode/encode_initialise Encoder initialising in VBR mode: 2 channels, 44100 Hz, nominal 128000
</blockquote>
<p>Básicamente lo que debes buscar es una línea como <span style="font-family:courier">[2010-05-22 18:20:55] INFO playlist-builtin/playlist_read Currently playing "/home/sergio/Música/J-Music/YUI/From Me To You/11.ogg"</span> que te indica que Ices leyó y empezó a emitir uno de los archivos que pusiste en la lista de reproducción.<br /> </p>
<p>También puedes verificar el estado del servidor desde la interfaz web entrando a http://localhost:8000 allí debe aparecer el mount point que has configurado con la metadata que colocaste en el archivo.</p>
<h4>Escuchar la emisora</h4>
<p>Ok, por fin el momento que has estado esperando. Escuchar la música que emite la emisora. Ya puedes hacerlo, por ejemplo con el VLC Player:<br /> </p>
<p>En el menú Medio selecciona Abrir volcado de red, en el cuadro que aparece escribe en el campo de dirección: http://localhost:8000/<span style="color:#008800">mount.ogg</span> (remplaza <span style="color:#008800">mount.ogg</span> por el mount point que has colocado en <b><mount></b><b></mount></b> en el archivo ices.xml) y luego haz clic en el botón Reproducir.<br /> </p>
<p>Si todo va bien escucharás la música que tu emisora emite. ¡Felicitacione!</p>
<h3>Detener la emisión</h3>
<p>Ok. Ahora te diré como detener la emisión. Recuerdas que dejamos abiertas las consolas del Ices y del Icecast pues bien, para detener la emisión simplemente debes presionar CTRL+C en la consola para detener los programas. Lo más recomendable, claro está, es que detengas primero Ices y luego Icecast por que si lo haces al revés Ices perderá inesperadamente la conexión con el servidor lo cual no es muy recomendable.</p>
<h3>Como no bloquear la consola</h3>
<p>Es posible ejecutar Icecast e Ices sin que la consola quede bloqueada. Para ello debes ejecutar los comandos agregando un ampersand (&) al final, así:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ icecast2 -c icecast.xml &<br />
$ ices2 ices.xml &
</blockquote>
<p>Al hacerlo de esta manera el sistema responderá con algo parecido a esto:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
[1] 2923
</blockquote>
<p>Ese número es el pid (id de proceso) del Icecast esté número identifica al proceso en el sistema y es el que necesitas para detener la emisión luego. Si pierdes el número o la emisora ha estado emitiendo por mucho tiempo y ya no lo recuerdas puedes recuperarlo usando el comando:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">ps</b> ax | <b style="color:#772f80">grep</b> icecast2<br />
</blockquote>
<p>A lo que el sistema responderá con algo como esto:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
2329 pts/1 Rl 0:03 icecast2 -c icecast.xml
</blockquote>
<p>El primer número que aparece es el pid del Icecast.<br /> </p>
<p>Para detener la emisión debes enviar al proceso la señal de salida (TERM) lo haces con este comando:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">kill</b> -15 2923<br />
</blockquote>
<p>Aunque kill puede parece algo drástico en realidad ese comando simplemente envía una señal de terminación al proceso, no lo mata forzadamente. Cuando lo hagas verás que el sistema responde con algo como esto:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
[1]+ Hecho icecast2 -c icecast.xml
</blockquote>
<p>Así sabrás que el proceso ha terminado.</p>
<h3>Algunas herramientas utiles</h3>
<h4>Mp3 a ogg</h4>
<p>Cuando se configura una estación de radio con Icecast e Ices una de las preguntas que primero surge es: ¿Cómo convierto un Mp3 a ogg? La respuesta es muy sencilla para nuestro consuelo, para convertir un Mp3 a ogg en linux basta un comando de consola pero antes asegúrate de tener instalados estos paquetes si aún no los tienes:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ <b style="color:#772f80">sudo</b> apt-get install mpg321 vorbis-tools
</blockquote>
<p>Ahora para convertir un mp3 a ogg:</p>
<blockquote style="font-family:courier;margin-top:25px;margin-bottom:25px">
$ mpg321 music.mp3 -w - | oggenc -o music.ogg -
</blockquote>
<p>Creo que eso es por ahora. Si tienen alguna duda o encuentran algún error en el post por favor no duden en dejar un comentario y yo les aclararé cualquier duda que tengan o corregiré lo que sea que esté mal.<br /> </p>
<p>Más adelante revisaré el post y veré que me falta por aclarar o cambiar. Espero que les haya gustado el tutorial y sobre todo que les haya servido</p>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-29877317103201465352010-03-01T20:03:00.003-05:002010-03-01T20:11:48.678-05:00Abajo los transportadores¡Que caos tan terrible el que hicieron los transportadores hoy en Bogotá! Por culpa de ese estúpido paro Transmilenio colapso completamente, por supuesto ese sistema de transporte no puede absorber la cantidad tan enorme de personas que se movilizan por la ciudad:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilfBOWtX5EPG_Q_TLAcJN7FokOs_ju05s7xQp8gWyfBabxURSPaayV2fuxtei1DCR6PX7oKWI2HYlcFT2e1iFQnbygSe1_O7ykARCQy0fEkfipikf89i77dx3aw5GqKOvC-nHKxQ/s1600-h/DSC00119.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilfBOWtX5EPG_Q_TLAcJN7FokOs_ju05s7xQp8gWyfBabxURSPaayV2fuxtei1DCR6PX7oKWI2HYlcFT2e1iFQnbygSe1_O7ykARCQy0fEkfipikf89i77dx3aw5GqKOvC-nHKxQ/s320/DSC00119.JPG" alt="" id="BLOGGER_PHOTO_ID_5443836784620217810" border="0" /></a><br />Por culpa del enredo que ellos armaron no pude ir a mi clase de Astronomía. Malditos sean, Bogotá tiene el peor servicio buses urbanos, son desaseados, inseguros, hacen lo que les da la gana, paran donde les da la gana y aún así se quejan. Y aparte de todo hacen paros estúpidos que alteran todo el orden normal de la ciudad.<br /><br />Pues nada, ojala que no cedan a sus demandas y antes les pongan más impuestos para que paguen por lo que hicieron hoy, el caos de que hubo hoy en la ciudad no tiene ninguna excusa. Aprendan a prestar un buen servicio y luego si quéjense.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-28059596717197296982009-12-13T13:06:00.005-05:002009-12-13T13:18:32.417-05:00Nuestro primer intento de hacer Pan de MelónSiempre me había llamado la atención el Pan de Melón, la comida favorita de Shana en Shakugan no Shana. Cuando se lo come hace una cara de placer tal que yo siempre pensé que debía tener un sabor muy delicioso. Quería probarlo pero todas las recetas que había encontrado hasta el momento requerían de una máquina de pan que yo no tengo y que por supuesto no quería comprar solo para hacer Pan de Melón. Hace unos días encontré esta receta:<br /><br /><a href="http://www.recetasjaponesas.com/2009/04/meronpan-pan-de-melon.html">http://www.recetasjaponesas.com/2009/04/meronpan-pan-de-melon.html</a><br /><br />Quería intentarla, pero ya que no soy muy bueno en la cocina me decidí a decirle a mi hermana que la intentáramos juntos. Compramos todos los ingredientes, excepto por la Harina de Pan que no teníamos idea de donde conseguirla, la remplazamos con Harina de Trigo normal Haz de Oros, en cualquier caso el Pan está hecho de Harina de Trigo.<br /><br />La receta resultó ser bastante sencilla, miren, aquí están los panes ya armados:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZBFUqrihZw88OPPgyg9V9K-vlvfbNXx1wLkzrMLjSdBh50zf1BmlhAaN2AhVgpHZBeiCTz7y4wz-p7MOsazs1NOz5pdEWveGPudr0zUtgWqOElOwTNl8XkUNuT1PzzGKXv4bGVA/s1600-h/DSC00085.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZBFUqrihZw88OPPgyg9V9K-vlvfbNXx1wLkzrMLjSdBh50zf1BmlhAaN2AhVgpHZBeiCTz7y4wz-p7MOsazs1NOz5pdEWveGPudr0zUtgWqOElOwTNl8XkUNuT1PzzGKXv4bGVA/s320/DSC00085.JPG" alt="" id="BLOGGER_PHOTO_ID_5414785195216154834" border="0" /></a><br />El problema fue que creo que nos pasamos un poco con la levadura y cuando los panes salieron del horno, bueno, habían crecido más de lo esperado y se habían pegado los unos a los otros XD:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVWoigZ07Va_HWI5UpV9zMjK439aWLfo0NNHfmPUtPa_mDyU1VRQjvb2CKY7-98J174phlI2ZWQUgKGrLw-WU0DUVQDNxvtZV3zNd_cVoes1H-aF1p0Il0paSKZhkAN6sGFpY_Ug/s1600-h/DSC00086.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVWoigZ07Va_HWI5UpV9zMjK439aWLfo0NNHfmPUtPa_mDyU1VRQjvb2CKY7-98J174phlI2ZWQUgKGrLw-WU0DUVQDNxvtZV3zNd_cVoes1H-aF1p0Il0paSKZhkAN6sGFpY_Ug/s320/DSC00086.JPG" alt="" id="BLOGGER_PHOTO_ID_5414785528383574530" border="0" /></a><br />Ahora que lo pienso, también debí haber hecho más cortes por que al crecer solo con cuatro cortes, bueno... no se parece mucho a un Pan de Melón.<br /><br />Bueno, creo que no nos fue tan mal para ser el primer intento, el pan quedó de buen sabor, aunque me pregunto si ese es realmente el sabor que tiene el Pan de Melón Japonés. Lo importante de todo es que yo pasé una tarde muy chevere junto a mis dos hermanas, nos reímos un rato e hicimos algo diferente. Carolina dijo que "lo importante era divertirse haciéndolo así hubiera quedado hedioncho" y una vez Angela me dijo que "la cocina viene del corazón" y que no hay que seguir las recetas, así que sin importar lo que haya pasado estoy feliz con el resultado :DSergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-9594733523109733602009-12-10T01:28:00.004-05:002009-12-10T01:54:04.950-05:00Emu-maníaLos emuladores siempre me han fascinado, desde que reviví mis viejos días de adicción al Super NES he estado jugando juegos de consola en mi PC. La experiencia se ha vuelto más placentera y emocionante desde que descubrimos con Andrés que podíamos conectar los controles del xBox 360 para jugar como en las verdaderas consolas, incluyendo la retroalimentación del dual-shock ¡oh! ¡yeah!<br /><br />La mayoría de consolas funcionan bien en mi PC, desde el viejo NES hasta el PSOne (que con la adición del control del XBox puedo decir que es como tener un verdadero PSOne) Solo unas pocas aún se escapan, para empezar el Nintendo DS. Hace rato que existe un emulador para esta consola pero aún está en desarrollo y la mayoría, por no decir todos, los juegos corren mal, tiene fallas con el 3D, el sonido es horrible o la emulación se hace absurdamente lenta por momentos, en fin... ¡Ánimo muchachos!.<br /><br />Una consola que siempre se me ha escapado es el PlayStation 2. Esta consola por tener un hardware tan maravilloso es la orna del zapato de los emuladores. Pocos PCs en el planeta pueden emular la consola perfectamente, se necesita muchísima velocidad de GPU y varios núcleos de CPU para poder revalizar con la GPU del PlayStation 2 y sus dos cooprocesadores para operaciones vectoriales.<br /><br />A pesar de que el software ya no es un problema el hardware aún nos atormenta.<br /><br />Hoy por fin pude hacer funcionar el <a href="http://pcsx2.net/">PCSX2</a> en mi computadora. Por fin deje de quebrarme la cabeza tratando de encontrar una BIOS adecuada y de configurar los plug-ins gráficos para lograr siquiera ver el logo de "Play Station 2" ahora llegué a la limitación que no puedo sobrepasar sin hacer una inversión monetaria considerable, el Hardware.<br /><br />Por ahora tendré que dejar por fuera la emulación de PS2. No por limitaciones de Software o por configuración sino por que mi hardware no puede igualar el de un Play Station 2 (Nunca pretendí lo contrario, solo era una prueba).<br /><br />El Play Station Portable es quizás un objetivo más alcanzable. Su biblioteca de juegos es muy tentadora y me alienta pensar que es una consola que quizás no sea tan difícil de emular. El único problema por el momento, los emuladores, la mayoría de los emuladores de PSP que existen tienen algo en común, ninguno de ellos puede correr juegos comerciales (no tengo idea que es lo que emulan entonces).<br /><br />El <a href="http://jpcsp.org/index.php?p=News">JPCSP</a> es el primer emulador que se jacta de poder correr juegos comerciales (incluso tiene una página de compatibilidad con algunas entradas). Este emulador, no obstante, tiene una falla crítica, <span style="font-weight: bold;">¡Esta hecho en Java y OpenGL!</span> [Si, si, leyeron bien, Java] No sé que andaban pensando los que lo hicieron, pero <span style="font-weight: bold;">¡Java!</span> Por dios, Java no es un lenguaje como para correr una aplicación de este tipo, estas aplicaciones necesitan direct rendering y hardware acceleration, cosas de las que Java aún no entiende. Y por si fuera poco escogieron la librería gráfica más pobre y lenta que existe. OpenGL.<br /><br />Bien, cuando lo vi dije "¿¡JAVA!? ¡Nooo! ¡olvídenlo, eso nunca va a funcionar! Pero aún así mi curiosidad me llevó a intentarlo, descargue una versión japonesa de Disidia Final Fantasy, cargué la imagen UMD en el emulador y ¿que creen? Si, efectivamente, no funcionó, lo más sorprendente de todo es la velocidad a la que emula. Con la máxima prioridad el emulador alcanza el sorprendente rate de <span style="font-weight: bold;">¡1.5 fps!</span><br /><br />Bueno si, efectivamente es una torta, hasta el PCSX2 alcanza 18 - 20 fps. Muy poco para jugar bien pero al menos para ver algo. El JPCSP no fue capaz ni siquiera de mostrar el title screen del juego. ¿Prometedor? ¿Quien sabe? Al parecer hay un proyecto de portear el emulador a C++, quizás C++ mejore mucho la situación, yo espero que sea así. Ojala que veamos pronto un emulador de PSP funcional.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-25096223990562225662009-10-29T20:05:00.012-05:002009-10-29T21:11:42.759-05:00libQGLViewer en Windows usando Microsoft Visual C++ 2008 Express Edition<a href="http://www.libqglviewer.com/">libQGLViewer</a> es una librería para ver escenas 3D de OpenGL en aplicaciones Qt. Las cosas buenas que tiene libQGLViewer es que ya trae implementadas cosas como el movimiento dinámico de la cámara, y le permite al usuario interactuar con la escena con el ratón y el teclado.<br /><br />En Linux las cosas con libQGLViewer son supremamente sencillas, simplemente se instala el paquete de desarrollo y la librería queda lista para ser utilizada. En Windows las cosas cambian un poco, es más difícil hacer que la librería quede lista para funcionar y también hacer uso de ella.<br /><br />En la página oficial de libQGLViewer están los pasos para compilar la librería con el Microsoft Visual Studio pero ellos asumen que uno tiene la integración de la versión comercial de Qt con ell Microsoft Visual Studio y eso no siempre es así, en mi caso por ejemplo, eso no sucede. De modo que aquí están los pasos para compilar la librería usando el Microsoft Visual C++ 2008 Express Edition sin necesidad de usar la integración de la versión comercial.<br /><br />Estos son los pasos:<br /><ol><li>Descargar el código fuente del libQGLViewer de la <a href="http://www.libqglviewer.com/installWindows.html">página de la librería</a>.</li><li>Descomprimir el código fuente en una carpeta del PC. Yo recomiendo C:\libQGLViewer\2.3.4 (La 2.3.4 fue la que yo descargué pero puede que para el momento en que lean el post haya una versión más reciente. También recuerden que la ruta de acceso carpeta NO DEBE CONTENER ESPACIOS).</li><li>Abrir la consola de Microsoft Visual Studio 2008. Inicio -> Todos los programas -> Microsoft Visual C++ 2008 Express Edition -> Visual Studio Tools -> Símbolo del sistema de Visual Studio 2008.</li><li>Ir a la carpeta donde se descomprimió el código fuente del libQGLViewer y allí entrar a la carpeta QGLViewer. (Deben quedar ubicados en la ruta C:\libQGLViewer\2.3.4\QGLViewer)<br /></li><li>Compilar usando los siguientes comandos:</li></ol><br /><blockquote style="font-family: courier new;">qmake -config release<br />nmake</blockquote><br />Está compilación crea una carpeta release dentro de la carpeta QGLViewer donde se encuentra el archivo <span style="font-weight: bold;">QGLViewer2.dll</span>. Copiamos este .dll a C:\Windows\system32 para que esté disponible para las aplicaciones que usen la librería.<br /><br />Luego seleccionamos todo lo que hay en el carpeta release y lo movemos a la carpeta QGLViewer (la carpeta padre de release) y eliminamos la carpeta release, esto lo hacemos para facilitar el funcionamiento de la librería. Es solo cuestión de facilidad nada más.<br /><br />Eso es todo. Ya es posible usar aplicaciones que hagan uso de la librería libQGLViewer.<br /><br />Ahora explicaré como compilar los ejemplos que vienen en el paquete de código fuente de libQGLViewer. Los ejemplos se encuentran en la carpeta examples. En teoría se debería poder compilarlos todos al tiempo pero esto no funciona así que hay que hacerlo uno a uno. Empezaremos con el más simple, el simpleViewer.<br /><br />En la carpeta simpleViewer que se encuentra dentro de examples está el código fuente necesario para compilar el simpleViewer. Para compilar el ejemplo se siguen estos pasos:<br /><br />Abrir el archivo simpleViewer.pro con un editor de texto (puede ser el bloc de notas).<br /><br />Ese archivo contiene código para tratar de detectar automáticamente donde se encuentran los archivos de inclusión y la librería del QGLViewer pero en Windows no funciona nada bien así que vamos a eliminar todo el código que no sirve para nada.<br /><br />Localizamos en el archivo la línea ### Unix configuration ### y eliminamos todo el código que hay desde allí hasta la línea ### Windows configuration ###.<br /><br />Debajo de la línea ### Windows configuration ### se encuentra el siguiente código:<br /><br /><blockquote style="font-family: courier new;">win32 {<br />MOC_DIR = moc<br />OBJECTS_DIR = obj<br />}</blockquote><br />Vamos a editarlo para que quede así:<br /><br /><blockquote style="font-family: courier new;">MOC_DIR = moc<br />OBJECTS_DIR = obj</blockquote><br />Luego eliminamos todo el código que está debajo de la línea OBJECTS_DIR, de modo que quedemos solo con algo como esto:<br /><br /><blockquote style="font-family: courier new;">### Windows configuration ###<br />MOC_DIR = moc<br />OBJECTS_DIR = obj</blockquote><br />Arriba de este código hay dos líneas que empiezan por #INCLUDEPATH y #LIBS. Estas líneas le dicen al compilador donde buscar los archivos de inclusión y la librería de libQGLViewer. Debemos editarlas para hacerlas apuntar a la ruta correcta, las líneas deben quedar más o menos así:<br /><br /><blockquote style="font-family: courier new;">INCLUDEPATH *= C:\libQGLViewer\2.3.4<br />LIBS *= -LC:\libQGLViewer\2.3.4\QGLViewer -lQGLViewer2</blockquote><br />Nota: No hay que olvidarse de quitar el # que se encuentra el inicio de la línea ya que este marca la línea como un comentario.<br /><br />Eso es todo. Luego de esto ejecutamos qmake para crear el Makefile y luego nmake para compilar el programa. Esto generará un ejecutable simpleViewer.exe en la carpeta. Ya está compilado el ejemplo.<br /><br />Si encuentran problemas compilando algún ejemplo o la propia librería con los pasos que he dejado aquí no duden en escribir o dejar sus comentarios.<br /><br />Por ultimo una recomendación. La gran mayoría de los que descargamos el libQGLViewer no lo descargamos para usar aplicaciones que utilizan la librería o para quedarnos pasmados viendo los ejemplos sino para desarrollar nuestras propias aplicaciones.<br /><br />Si planean usar libQGLViewer en su aplicación yo les recomiendo que no empiecen con un .pro vacío sino que copien uno de los .pro que han editado para compilar los ejemplos y lo editen agregando las fuentes y los headers de su propio proyecto, esto les facilitará mucho la compilación y les quitara de encima problemas de símbolos externos sin resolver que aparecen regularmente al usar libQGLViewer.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-5151657534662955962009-01-27T16:47:00.009-05:002009-02-19T16:13:55.953-05:00Crear aplicaciones Qt en Windows usando Microsoft Visual C++ 2008 (Compilar, Depurar y Ejecutar desde el IDE)Bueno en <a href="http://www.blogger.com/post-create.g?blogID=31519804">mi post anterior</a> expliqué como se podían crear aplicaciones Qt en Windows usando Microsoft Visual C++ 2008 Express Edition y dije que había que compilar desde la consola por que ni idea como hacerlo desde el IDE, ya sé como hacerlo así que lo dejo aquí para el que le interese.<br /><br />Bueno, lo primero es saber que Microsoft Visual C++ 2008 Express Edition tiene dos configuraciones de compilación: Debug y Release. La configuración de Debug se supone que compila el ejecutable con los símbolos de depuración de Windows y otras cosas, por lo que el ejecutable es más rastreable y de tamaño mayor, la configuración de Release no tiene nada de esto por lo que el tamaño del ejecutable es menor.<br /><br />Vamos a preprar a Microsoft Visual C++ 2008 Express Edition para compilar nuestras aplicaciones Qt en ambas configuraciones, para empezar tenemos que crear dos archivos (.bat) de procesamiento por lotes que se encargaran de llamar al precompilador de Qt y preparar todo para que luego el Compilador y el Linker del Visual C++ puedan compilar el programa, los pasos son los siguientes:<br /><br />Vamos a crear dos archivos (.bat) en la carpeta bin del Qt 4 (en mi caso C:\Qt\4.4.3\bin), al primero le llamaremos qcreate.bat, dentro de el escribimos estás líneas de comando:<br /><br /><blockquote style="font-family: courier new;">qmake -project<br />qmake<br />nmake</blockquote><br />Al segundo lo llamaremos qcreate-release.bat y en el escribiremos:<br /><br /><blockquote style="font-family: courier new;">qmake -project<br />qmake -config release<br />nmake</blockquote><br />Ahora ya tenemos las secuencias de comando listas, lo que sigue ahora es configurar al Microsoft Visual C++ 2008, para ello seguimos estos pasos:<br /><br />1. Se creamos un proyecto nuevo aparecerá el asistente de configuración de proyectos de archivos MAKE:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiOGKFDhn3JOXSb_yAmLKjLdU9_UcqsgZl_Oo6blE_k93Bf9Agz3KVu8AykMoEXwdZhxRIUhocc6u3zLoAG4T1LPeZ7E90Yewe8lkfC059SG3bsgcGzVNY417z-BACfPIAoKdHLg/s1600-h/make-wizard01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 273px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiOGKFDhn3JOXSb_yAmLKjLdU9_UcqsgZl_Oo6blE_k93Bf9Agz3KVu8AykMoEXwdZhxRIUhocc6u3zLoAG4T1LPeZ7E90Yewe8lkfC059SG3bsgcGzVNY417z-BACfPIAoKdHLg/s320/make-wizard01.jpg" alt="" id="BLOGGER_PHOTO_ID_5304615831557216290" border="0" /></a><br />Le damos clic en Siguiente y el asistente nos muestra la configuración de Debug:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg99OMUA8lXI4XFHEnF7qiUpLxbCrWYufLCgPm_VJ0lz02wGLLTqYWZS0cWOFKkSQBaIOD6l3Nb14_TX6YsATyJ-UN7LOiY-F3JcH826OjYs4duFH-QaHlRv6BS0MD1Nkngl7kpRQ/s1600-h/make-wizard02.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 273px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg99OMUA8lXI4XFHEnF7qiUpLxbCrWYufLCgPm_VJ0lz02wGLLTqYWZS0cWOFKkSQBaIOD6l3Nb14_TX6YsATyJ-UN7LOiY-F3JcH826OjYs4duFH-QaHlRv6BS0MD1Nkngl7kpRQ/s320/make-wizard02.jpg" alt="" id="BLOGGER_PHOTO_ID_5304616289999465426" border="0" /></a><br />Allí, en donde dice <span style="font-weight: bold;">Línea de comandos</span> de generación escribimos <span style="font-weight: bold;">qcreate</span>, que es el nombre del .bat que hemos creado y luego en donde dice <span style="font-weight: bold;">Resultados (para depuración)</span> escribimos <span style="font-weight: bold;">debug\</span> antes del texto que ya se encuentra en el recuadro (sin eliminarlo), es decir que en el ejemplo el texto quedaría: <span style="font-weight: bold;">debug\Text-Make.exe</span>, para terminar damos clic en <span style="font-weight: bold;">Siguiente</span>.<br /><br />Ahora nos muestra una ventana muy parecida solo que esta vez se trata de la configuración para el Release, en esta vamos a quitar la marca de verificación de la casilla <span style="font-weight: bold;">Igual que la configuración Debug</span> para que se activen los campos. En donde dice <span style="font-weight: bold;">Linea de comandos de generación</span> escribimos <span style="font-weight: bold;">qcreate-release</span> que es el nombre de nuestro .bat para los releases, y de forma similar a lo que hicimos antes en el recuadro que dice <span style="font-weight: bold;">Resultados (para depuración)</span> escribimos <span style="font-weight: bold;">release\</span> antes del texto que se enucentra allí:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8qbMURnH-Desp9YH1s8aY2dA1qA2f4ZR8eEZnkdwNhvdOgSvveZXXBQIPuWlcIHAt017R9v_BmNMFqNQKv3eL2rJqQCcUeHut1IxQc-xSnJ-IkbfZlc6HWjYhJcE5M9Q6V7VQMg/s1600-h/make-wizard03.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 273px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8qbMURnH-Desp9YH1s8aY2dA1qA2f4ZR8eEZnkdwNhvdOgSvveZXXBQIPuWlcIHAt017R9v_BmNMFqNQKv3eL2rJqQCcUeHut1IxQc-xSnJ-IkbfZlc6HWjYhJcE5M9Q6V7VQMg/s320/make-wizard03.jpg" alt="" id="BLOGGER_PHOTO_ID_5304617991691632786" border="0" /></a><br />Luego damos clic en <span style="font-weight: bold;">Finalizar</span>.<br /><br />Listo, eso es todo, ahora si podemos usar los comandos del IDE para generar (Generar -> Generar Solución / Generar Proyecto) o para Depurar (Depurar -> Iniciar Depuración) también podremos ver los errores y advertencias de la compilación (Ver -> Otras Ventanas -> Lista de Errores) y hacer clic sobre ellos para que el IDE nos lleve directo a la línea donde se encuentra el error.<br /><br />Lo único que no he podido hacer es que el IDE vea los archivos de Include del Qt, eso si no lo he podido hacer por que los archivos de Include del Qt tienen inclusiones anidadas y el Visual C++ 2008 como que es muy perezoso para irse a buscar las referencias en los archivos anidados entonces cuando uno escribe hello. (en el tutorial) no puede esperar que el Visual C++ le muestre los miembros de la clase QPushButton.<br /><br />Si encuento una forma de hacerlo posteare nuevmanete. Por ahora los dejo. Comentarios y etc siempre están bien recibidos, siempre y cuando no sean Spam.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-16881483989208390592009-01-26T16:04:00.016-05:002009-01-27T17:23:20.947-05:00Crear aplicaciones Qt en Windows usando Microsoft Visual C++ 2008Hola, para los que no saben que es Qt se trata de una API multiplataforma para crear aplicaciones nativas en Windows, Linux, mac, Solaris, etc y poder portarlas sin cambiar ninguna línea de código. Si quieren ver más información sobre este paquete pueden visitar: <a href="http://www.qtsoftware.com/">http://www.qtsoftware.com/</a><br /><br />Yo ya había escrito dos posts en este mismo blog sobre Qt y como instalarlo en Linux, si quieren darles un vistazo:<br /><br /><a href="http://sergiobobillier.blogspot.com/2007/04/el-remplazado-de-visual-basic.html">El remplazo de Visual Basic</a><br /><a href="http://sergiobobillier.blogspot.com/2007/05/instalar-qt4.html">Instalar Qt4</a><br /><br />La verdad es que había estado intentando hacer correr este paquete en Windows pero hasta ahora no había podido, traté con DevC++ y con Eclipse pero nada, quien pensaría que la solución era un producto de Microsoft.<br /><br />Recientemente Microsoft liberó las <a href="http://www.microsoft.com/express/default.aspx">versiones Express del Visual Studio 2008</a> que se pueden descargar gratuitamente. Con este producto podemos compilar el Qt y también crear nuestras propias aplicaciones. En este post explicaré como hacerlo.<br /><br />Obviamente lo primero es descar e instalar el Visual C++ 2008 Express Edition, una vez instalado (pesa como 150 MB) debemos descargar la versión de Código Fuente de Qt4 para Windows de la página de <a href="http://www.qtsoftware.com/downloads/opensource/appdev/windows-cpp">Qt Software</a>. Ojo, no descargen la versión que viene con el MinGW sino la que es solo código fuente. La descarga pesa como 120 MB, es un archivo comprimido.<br /><br />Descargamos el archivo y lo descomprimimos en C:\Qt\4.4.3 <span style="font-weight: bold;">[EL NOMBRE DE LA CARPETA NO DEBE CONTENER ESPACIOS]</span> (la 4.4.3 fue la versión que yo bajé pero puede que para el momento en que lean este post sea una más reciente). En esa carpeta queda un archivo que se llama configure.exe este es el autconf del builder, hay que ejecutarlo <span style="font-weight: bold;">PERO NO SE PRECIPITEN, LEAN ABAJO</span>.<br /><br />Vamos a Inicio -> Todos los Programas -> Microsoft Visual C++ 2008 Express Edition -> Visual Studio Tools -> Símbolo del Sistema de Visual Studio 2008, esto nos abre una consola en el directorio del Visual C++ y habilita los paths para el maker, y el linker.<br /><br />En esta consola nos vamos a C:\Qt\4.4.3\ (o el directorio donde hayan descomprimido el qt), una vez allí ejecutamos:<br /><br /><span style="font-family:courier new;"><blockquote>C:\Qt\4.4.3\>configure -platform win32-msvc2008</blockquote></span><br />Este comando prepara el código para que se pueda compilar con el compilador de Microsoft Visual Studio 2008, una vez temine el proceso veremos un mensaje como este:<br /><br /><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;">Qt is now configured for building. Just run nmake.</span><br /><span style="font-family:courier new;">To reconfigure, run nmake confclean and configure.</span></blockquote><br />Entonces simplemente hacemos lo que dice ahi, ejecutamos nmake para que Visual C++ empiece a compilar. Este proceso tarde un rato, igual que en Linux, la consola va a estar compilando durante un tiempo creando los ejecutables de Qt Designer, Qt Assistant, el moc, etc y las dll de Qt, cuando el proceso termina Qt esta compilado e instalado en el equipo listo para usarse.<br /><br />Ahora vamos a ver como crear un programita en Qt usando el Visual C++, vamos a crear el Hello World del tutorial de Qt. Pero primero hay algo adicional que debemos hacer y es agregar la carpeta bin de Qt al Path del Sistema:<br /><br />Damos clic en <span style="font-weight: bold;">Inicio</span> y luego clic derecho en <span style="font-weight: bold;">Mi PC</span>, ahi vamos a <span style="font-weight: bold;">Propiedades</span> y en la pestaña de <span style="font-weight: bold;">Opciones Avazadas</span> le damos clic en <span style="font-weight: bold;">Variables de Entorno</span>, aparece un cuadro de diálogo con las variables de sistema y las variables de usuario, en las variables de sistema buscamos la variable <span style="font-weight: bold;">Path</span>, la seleccionamos y damos clic en <span style="font-weight: bold;">Modificar</span>. Al final del texto colocamos un ; (punto y coma) y despues escribimos la ruta del bin de Qt, que en mi caso era C:\Qt\4.4.3\bin y damos clic en <span style="font-weight: bold;">Aceptar</span> en todos los cuadros de diálogo.<br /><br />Ahora si vamos a crear el Hello World.<br /><br />Abrimos el Visual C++ 2008 y cremos un <span style="font-weight: bold;">Nuevo Proyecto</span>, en donde dice <span style="font-weight: bold;">Tipo de proyecto</span> seleccionamos <span style="font-weight: bold;">Visual C++</span> -> <span style="font-weight: bold;">General</span> -> <span style="font-weight: bold;">Proyecto de archivos MAKE</span>. Seleccionamos la ubicación y el nombre del proyecto que en este caso será Hello World. Retiramos la marca de la casilla <span style="font-weight: bold;">Crear directorio para la solución</span> y damos clic en <span style="font-weight: bold;">Aceptar</span>.<br /><br />Visual Studio nos abre un asistente para configuración del proyecto de archivos MAKE, vamos a ignorarlo y daremos clic simplemente en <span style="font-weight: bold;">Finalizar</span>. Se creará el proyecto y apareceran las carpetas y archivos usuales del Visual C++ (crea un montón de basura).<br /><br />Vamos a crear el main, entonces, en el <span style="font-weight: bold;">Explorador de Soluciones</span>, en la carpeta <span style="font-weight: bold;">Archivos de código fuente</span> damos clic derecho y ahi seleccionamos <span style="font-weight: bold;">Agregar</span> -> <span style="font-weight: bold;">Nuevo Elemento</span> y escojemos <span style="font-weight: bold;">Archivo C++ (.cpp)</span>, le damos el nombre <span style="font-weight: bold;">main</span> y hacemos clic en <span style="font-weight: bold;">Aceptar</span>.<br /><br />El Visual Studio nos abre un editor de código, ahi vamos a escribir el código que está en el Qt Assistant, en el tutorial de Hello World que es este:<br /><br /><span style="font-family:courier new;"></span><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;">#include <QApplication></span><br /><span style="font-family:courier new;">#include <QPushButton></span><br /><br /><span style="font-family:courier new;">int main(int argc, char *argv[])</span><br /><span style="font-family:courier new;">{</span><br /><blockquote><span style="font-family:courier new;">QApplication app(argc, argv);</span><br /><br /><span style="font-family:courier new;">QPushButton hello("Hello world!");</span><br /><br /><span style="font-family:courier new;">hello.show();</span><br /><span style="font-family:courier new;">return app.exec();</span><br /></blockquote><span style="font-family:courier new;">}</span></blockquote><br />Le damos en Guardar y ya estara listo el proyecto, ahora vienen las malas noticias, no podemos compilar desde el IDE (o por lo menos yo no he podido por que hay que configurarlo y yo no me he puesto en esas) así que vamos a compilar por consola:<br /><br />Abrimos otra vez el Símbolo del Sistema de Visual Studio 2008 que abrimos para compilar el Qt. En esa consola vamos a la carpeta donde hemos guardado el proyecto de Visual C++ y allí escribimos estos comandos:<br /><br /><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;">qmake -project</span><br /><span style="font-family:courier new;">qmake</span><br /><span style="font-family:courier new;">nmake</span></blockquote><span style="font-family:courier new;"></span><br />Esto compila el programa y genera el ejecutable en la carpeta Debug, en mi caso Hello World.exe. Desde la misma consola o desde un explorador de Windows podemos ejecutar la aplicación para constatar que funciona.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcmkYbwR7CzmWfthFZLKOXQcag7ZNbFJwFNOb9K6ef5gs3yY3bktkiKZsPtu5JGpkwAV1JhvSD5wLYuTMVxAwZFZi_yQIoJgNV9VHUWSZjuvax9HNGZuaXY0P6TuMMVwK8XW0mpw/s1600-h/hello+world.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 123px; height: 57px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcmkYbwR7CzmWfthFZLKOXQcag7ZNbFJwFNOb9K6ef5gs3yY3bktkiKZsPtu5JGpkwAV1JhvSD5wLYuTMVxAwZFZi_yQIoJgNV9VHUWSZjuvax9HNGZuaXY0P6TuMMVwK8XW0mpw/s320/hello+world.jpg" alt="" id="BLOGGER_PHOTO_ID_5295730010755756274" border="0" /></a><br />Bien, ya hemos creado y ejecutado una aplicación en Windows con Qt. Si corre el Hello world corre cualquier cosa. :)<br /><br />No duden en dejar sus comentarios, dudas o preguntas.<br /><br />Se cuidan Bye Bye.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-61915015560122426192008-10-16T19:08:00.017-05:002008-12-05T00:55:09.298-05:00Saltar un proxy que requiere autenticaciónBueno lo que pasa es que en <a href="http://sergiobobillier.blogspot.com/2008/10/saltar-firewalls-usando-openssh.html">mi post anterior sobre como saltar firewalls usando el OpenSSH</a> no dije como se hacía cuando el proxy que ibamos a saltar tenía autenticación, como es el caso concreto del proxy de la universidad, si usamos por ejemplo el cliente que viene con el OpenSSH for Windows NUNCA vamos a poder pasar por que ese no sabe nada de proxy y siempre va a intentar conexión directa, entonces pailas.<br /><br />[NOTA:] Me he dado cuenta que poner al OpenSSH a servir por el 443 es mejor que hacerlo servir por el 80 ya que algunos ISPs bloquean el puerto 80 (como es mi caso con ETB) pero el puerto 443 no está bloqueado por los ISPs ni por los firewalls, ya que es el puerto del HTTPS.<br /><br />Bueno, para este ejemplo necesitamos:<br /><br /><ul><li>Un equipo relevador configurado por fuera del firewall (<a href="http://sergiobobillier.blogspot.com/2008/10/saltar-firewalls-usando-openssh.html">ver el post anterior</a>)</li><li><a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html">El cliente putty</a></li></ul><br />Bueno, entonces, ya sabemos que debemos tener configurado el equipo relevador para aceptar conexiones SSH a través de un puerto accesible por el firewall, en este caso vamos a decir que es el puerto 443.<br /><br />Para este ejemplo voy a mostrar como jugar en el servidor de Lineage 2 de <a href="http://lineage2.tehgamers.net/portal.php">TehGamers,</a> voy a asumir que ya tienen instalado y configurado el cliente y que ya tienen su archivo de hosts en la carpeta correspondiente y que funciona bien (esto es en el equipo donde vamos a jugar, el equipo relevador no es necesario que tenga instalado el cliente ni el archivo de hosts modificado).<br /><br />Bueno, lo primero que necesitamos es la información de a que puertos se conecta el cliente de Lineage II, esa información está en internet, pero para que no tengan que ir más lejos:<br /><br /><ul><li>2106 para el servidor de autenticación</li><li>7777 para el servidor del juego</li><li>2009 para el servidor del game guard</li><li>80 se conecta también al de autenticación</li></ul><br />Así que ya sabemos que puertos debemos relevar, ahora viene la parte complicada que es hacer todos los tweaks que necesitamos para que esto funcione, así que comencemos:<br /><br />Lo primero que hay que hacer es modificar el archivo de hosts del equipo donde vamos a jugar (aquel que está dentro del firewall y tiene instalado el cliente) El archivo de hosts del servidor TehGamers luce más o menos así:<br /><br /><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;"># Tehgamers patch edited this three lines...</span><br /><span style="font-family:courier new;">91.185.193.200 l2authd.lineage2.com</span><br /><span style="font-family:courier new;">91.185.193.200 l2patcher.lineage2.com</span><br /><span style="font-family:courier new;">216.107.250.194 nProtect.lineage2.com</span></blockquote><span style="font-family:courier new;"></span><br />Lo que necesitamos entonces es redireccionar esas conexiones al localhost, para ello modificamos el archivo así:<br /><br /><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;"># Direcciones modificados para el port forwarding:</span><br /><span style="font-family:courier new;">127.0.0.1 l2authd.lineage2.com</span><br /><span style="font-family:courier new;">127.0.0.1 l2patcher.lineage2.com</span><br /><span style="font-family:courier new;">127.0.0.1 nProtect.lineage2.com</span><br /><br /><span style="font-family:courier new;"># Tehgamers patch edited this three lines...</span><br /><span style="font-family:courier new;"># 91.185.193.200 l2authd.lineage2.com</span><br /><span style="font-family:courier new;"># 91.185.193.200 l2patcher.lineage2.com</span><br /><span style="font-family:courier new;"># 216.107.250.194 nProtect.lineage2.com</span></blockquote><br />Noten que lo único que hice fue comentar las líneas originales del servidor y agregar tres nuevas todas apuntando al localhost, la razón de esto es que en el momento en que quiera volver a jugar por fuera del firewall pues invierto las líneas comentadas y ya.<br /><br />Ahora hay que configurar Putty para que haga el port forwarding, abrimos putty y lo primero que vemos es esto:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6QkqrM3QWZ7TSkELpesDfFJESvWKJ9FGKbsKMSmo2C2qqbdDV1LFHPLrnQfJI58fqZpXGLnetdL8Fw1u1F0aA1Un-OxGBoHsPQCyuz5oMyGwNl9tTEx_QLcnWlvMCT0vPjHh7CA/s1600-h/putty01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 306px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6QkqrM3QWZ7TSkELpesDfFJESvWKJ9FGKbsKMSmo2C2qqbdDV1LFHPLrnQfJI58fqZpXGLnetdL8Fw1u1F0aA1Un-OxGBoHsPQCyuz5oMyGwNl9tTEx_QLcnWlvMCT0vPjHh7CA/s320/putty01.jpg" alt="" id="BLOGGER_PHOTO_ID_5260748818111715634" border="0" /></a><br />Aca debemos introducir los campos necesarios, en Hostname (or IP Address) introducimos la ip del equipo relevador o el dominio que apunta a él y en Port pues el puerto que estemos usando (el 443 en mi caso). Lo siguiente que hacemos es ir a Connection -> Proxy en la parte izquierda, la ventana muestra lo siguiente:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw_OkVSdAPoRmbKnDfgzkThPcpi642nUWaekZrsCDXe56lBDwpltUFF1Zg7X7aMC7XrYOoQM5OwCSr57WxRNTo_qNnfluA9CgjWaun5TdcoWevCizfcc4L1kx2Q3o1bTwv9ce79g/s1600-h/putty02.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 306px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw_OkVSdAPoRmbKnDfgzkThPcpi642nUWaekZrsCDXe56lBDwpltUFF1Zg7X7aMC7XrYOoQM5OwCSr57WxRNTo_qNnfluA9CgjWaun5TdcoWevCizfcc4L1kx2Q3o1bTwv9ce79g/s320/putty02.jpg" alt="" id="BLOGGER_PHOTO_ID_5260749814165674274" border="0" /></a><br />Aquí debemos introducir la información del proxy, pues creo que no hay mucho que explicar, pero por ejemplo en el caso de la universidad será: el proxy es HTTP así que seleccionar esa opción en Proxy Type, luego en la dirección del proxy pues: proxy.unal.edu.co, lo siguiente es el puerto, que es el 8080. Listo, lo único que falta es meter el nombre de usuario y la contraseña del SIA y ya, habremos configurado el Putty para pasar por el proxy de la Universidad que requiere autenticación.<br /><br />¿No es tan dificil verdad?<br /><br />[NOTA:] Si están preocupados por que quede registro de que jugaron Lineage dentro de la universidad en el proxy no se preocupen, las conexiones del SSH van encriptadas con al menos 128 bits, así que no hay peligro, lo único que ellos verán serán paquetes encriptados que van al 443 (un puerto en el que es normal que fluya informacion encriptada).<br /><br />Bueno, ahora hay que configurar el forwarding: eso lo hacemos en Connection -> SSH -> Tunnels:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJRhIhiLXr1PbIvqF5k53B13mJHXYzAaevYzLPMUJBdoqdCxCwqmZ4toRjQAChSFqpQXi9XC5l626U-cOg1GDe4PM_77lZKG5mUYVpExLBnegc-6Nz6qhXjX7xWQfUPi7xbPZ_Q/s1600-h/Putty03.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 306px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJRhIhiLXr1PbIvqF5k53B13mJHXYzAaevYzLPMUJBdoqdCxCwqmZ4toRjQAChSFqpQXi9XC5l626U-cOg1GDe4PM_77lZKG5mUYVpExLBnegc-6Nz6qhXjX7xWQfUPi7xbPZ_Q/s320/Putty03.jpg" alt="" id="BLOGGER_PHOTO_ID_5260751775025688114" border="0" /></a><br />Aca debemos agregar cada uno de los puertos a los que le vamos a hacer forwarding, para ello debemos tener en cuenta el archivo de hosts, entonces:<br /><br /><ol><li>Para el puerto 2106 que va al servidor de autenticación, la redirección es: Source port: 2106, Destination: 91.185.193.200:2106</li><li>Para el puerto 7777 que va al servidor del juego, la redirección es: Source port: 7777, Destination: 91.185.193.200:7777</li><li>Para el puerto 2009 que va al servidor del game guard, la redirección es: Source port: 2009, Destination: 216.107.250.194:2009</li><li>Para el puerto 80 que va al servidor de autenticación la redirección es: Source port: 80, Destination: 91.185.193.200:80</li></ol><br />Lo que se está haciendo aquí es decirle al Putty que todo lo que entre al computador local (el que tenemos por dentro del firewall) por el puerto 2106 lo reenvie a la 91.185.193.200 en el puerto 2106 haciendo uso del equipo relevador, y así con el resto de los puertos. Notese que coloqué las direcciones IP en vez de los nombres de los hosts, la razón de esto es que el equipo relevador no tiene el archivo de Hosts, si lo tuviera se podrían haber usado los nombres de los hosts.<br /><br />Cuando estén listos todos los tuneles simplemente hay que darle <span style="font-weight: bold;">Open</span> al putty.<br /><br />Listo, si hacemos un netstat -n -a -p TCP -b veremos entre otras entradas:<br /><br /><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;">TCP 127.0.0.1:7777 0.0.0.0:0<br />LISTENING 3852</span><span style="font-family:courier new;"> </span><span style="font-family:courier new;">[Putty.exe]</span><br /><br /><span style="font-family:courier new;">TCP 127.0.0.1:2106 0.0.0.0:0<br />LISTENING 3852</span><span style="font-family:courier new;"> </span><span style="font-family:courier new;">[Putty.exe]</span><br /><br /><span style="font-family:courier new;">TCP 127.0.0.1:2009 0.0.0.0:0<br />LISTENING 3852</span><span style="font-family:courier new;"> </span><span style="font-family:courier new;">[Putty.exe]</span><br /><br /><span style="font-family:courier new;">TCP 127.0.0.1:80 0.0.0.0:0<br />LISTENING 3852</span><span style="font-family:courier new;"> </span><span style="font-family:courier new;">[Putty.exe]</span></blockquote><span style="font-family:courier new;"></span><br />Estas entradas en el netstat confirman que el forwarding está listo, ahora debemos probar que efectivamente las direcciones están siendo atendidas por nuestro propio equipo, para ello hacemos ping a las direcciones del archivo de hosts:<br /><br /><span style="font-family:courier new;"></span><blockquote><span style="font-family:courier new;">Haciendo ping a l2authd.lineage2.com [127.0.0.1] con 32 bytes de datos:</span><br /><br /><span style="font-family:courier new;">Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"</span><br /><span style="font-family:courier new;">Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"</span><br /><span style="font-family:courier new;">Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"</span><br /><span style="font-family:courier new;">Respuesta desde 127.0.0.1: bytes=32 tiempo<1m ttl="128"</span><br /><br /><span style="font-family:courier new;">Estadísticas de ping para 127.0.0.1:</span><span style="font-family:courier new;"><br />Paquetes: enviados = 4, recibidos = 4, perdidos = 0</span><span style="font-family:courier new;"><br />(0% perdidos),</span><br /><span style="font-family:courier new;"><br />Tiempos aproximados de ida y vuelta en milisegundos:</span><span style="font-family:courier new;"><br />Mínimo = 0ms, Máximo = 0ms, Media = 0ms</span></blockquote><br />Si todas son respondidas por el localhost (se resuelven al 127.0.0.1) entonces ya estamos listos, ahra si, abrimos el Lineage y a divertirnos.<br /><br /><span style="color: rgb(255, 0, 0);"><span style="font-weight: bold;">[NOTA:]</span> Esto en realidad no funciona, por que después de haber autenticado con el auth server este le dice al cliente en que dirección IP está el servidor del juego al cual se va a conectar, de modo que el cliente nunca hace un DNS Lookup para localizar el servidor del juego y por tanto no hay forma de engañarlo para que se conecte al localhost. Así que, cuando intenta hacer la conexión por el proxy muere.</span><br /><br /><span style="color: rgb(255, 0, 0);">Para poder hacerlo habría que usar una técnica que se llama ip-forwarding que conciste en engañar al sistema para que mande los paquetes que van a determinada dirección a otra, estoy investigando el asusnto pero todavía no he conseguido nada, para Windows al menos. De todos modos les dejo el post para que sepan como brincarse los Firewall que tienen proxy con autenticación.</span>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-26072497910634186292008-10-11T22:42:00.005-05:002008-10-11T23:15:49.833-05:005000xBueno, como Terror nada que sube pues ayer con Jorge decidimos probar un server 5000x y fuimos a un server llamado <a href="http://www.l2kayan.tk/">L2Storm</a>, un servidor PVP ultra high rate. Es la primera vez que juego en un servidor así y fue alucinante. Como había quedado con las ganas de crear a mi dagera (inspirada en シャナ) pues empecé con ese personaje:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcE1sTDumnU-MRLrvgDjs8AiBfElKpdQGMLLMQNesFhPf_3Kp50OiBsczLf1NnjxEE05ltRpCzPqiakS-2mx8edMicfCvKnrP1qcp1Ib_GOz6_75yV_ZlkM0atJHmE2VZZdfgscw/s1600-h/5000x.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcE1sTDumnU-MRLrvgDjs8AiBfElKpdQGMLLMQNesFhPf_3Kp50OiBsczLf1NnjxEE05ltRpCzPqiakS-2mx8edMicfCvKnrP1qcp1Ib_GOz6_75yV_ZlkM0atJHmE2VZZdfgscw/s320/5000x.jpg" alt="" id="BLOGGER_PHOTO_ID_5256108650114688930" border="0" /></a><br />Mis impresiones sobre este server son muchas, primero ¡miren los buffs! hay 6! ¡SI 6! líneas de buffs, esos buffs que ven ahi valen 50kk y duran 5 horas. Los Scrolls of Enchant encantan de a +5, el primer Scroll deja el arma o armadura en+5, el siguiente en +10, el siguiente en +15 y así sucesivamente.<br /><br />Venden pociones y elixires en la Shop, y también armas con SA, el arma que ven ahi es un Dinasty Knife +35 con Haste. Venden los hair ornaments, ¡orejitas de neko! :P Kawaii!<br /><br />La primera hunting area es Ketra Orc Outpost, no hay requisitos para ir ahi, la segunda, no recuerdo cual es, creo que es Wall of Argos y el requisito es que todo el equipo esté en +35 (obviamente el servidor no valida eso, pero es una forma de decirle, si no tiene eso, ni valla por que se va a morir). La siguiente es Monastery of Silence y el requisito es que el equipo esté en +100.<br /><br />Venden unos huevos que encantan los objetos con probabilidad del 100% y tienen una probabilidad de hacer "saltar" al objeto a +100 de una vez.<br /><br />Cuando uno mata a otro pj, ese pj dropea adena, así que hay una recompenza por PVPiar, esa debe ser la razón de que en ese servidor la cursed Weapons caigan tan a menudo.<br /><br />Bueno, mi experiencia, pues nada más empezar mate a un moob y subí a nivel 83, entonces fui donde el Newbie Shop y con las Newbie Tokens compre arma y armadura, pero cuando ya había comprado todo me dí cuenta que la embarré y compré una espada en vez de una daga entonces la vendí y fui y me compre una Angel Slayer S y un Enchant Scroll, la encanté y +5 ¡oooooo! por dios!<br /><br />Entonces fui a ver si podría cambiar de clase, me volví Elven Scout y luego me volvi Plains Walker, cuando iba a hacer el tercer cambio de clase me dí cuenta que cobraban por él (en ese momento no me había dado cuenta que tenía una Gold Bar en el inventario) entonces decidí no cambiar por ahora, me fui y busqué al Town Buffer, e hice clic en el botón de "All Buffs" y me salió un aviso que decía "You do not have enough adena, go farming" tonces hice clic en Newbie Buffs y el buffer me puso un montón de buffs normalitos (como los del Prohphet y esos)<br /><br />Me fui al GK y mire las Hunting Grond, en donde decía Newbie Hunting Grounds vi el Monastery of Silence, y pensé "ja, con este equipo voy a partirlos en dos" me fui y ¡oh sorpresa! me dieron una paliza, habían unos pjs con uns armaduras re pasadas y entonces ataque a una de esas Shadow que hay ahi cerca de la entrada y con el primer ataque me mató luego hizo respawn un T-Rex entonces dije "bien, creo que de verdad no es para mi" luego lei el requerimiento y dije "seee realmente no era para mi"<br /><br />Luego entonces me volvi a poner los Newbie buffs y me fui a Ketra Orc Outpost y empecé a matar bichitos cuando llego una @#$! por detrás y me PKio, y me aparecio "You have droped adena" entonces pensé como "¬¬ mmm si, no la culpo entonces.... me vio como un moob mas :( "<br /><br />Como ya había colectado algunas adenas entonces me fui y cambie mi equipo, luego fui donde el buffer otra vez y le pedí "All Buffs" y seeeee fue muy tezo entonces ya ahi empecé a verle como más cara al Server. Creo que es bacano para jugar un rato, pero ¡hay ojala que no bajen L2Terror del todo! ¡ahi ya tenía subclass y todo!<br /><br />Pues bueno, creo que a la larga fue una experiencia bacana... :) y es muy util para probar personajes.Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-27924775176136705152008-10-10T17:46:00.028-05:002009-01-19T09:51:42.667-05:00Saltar Firewalls usando OpenSSHEn la mayoría de instituciones educativas, empresas, bibliotecas, etc. Hay un Firewall (por lo general un ISA Server) que restringe el acceso a Internet a determinados puertos, esto lo hacen con el fin de evitar que los usuarios que se encuentran por dentreo del Firewall accedan a apliciones y protocolos que el Administrador ha marcado como inseguros o que consumen mucho ancho de banda, como por ejemplo MSN Messenger, Radio por Internet o juegos en línea (Como Lineage II).<br /><br />Para todos nosotros los que nos encontramos atrapados dentro de los Firewall esto es frustante, pero se acabó. Ya no hay que preocuparse por eso, hay una forma de saltar cualquier Firewall y no despierta ninguna sospecha<sup>*</sup> ya que utiliza los puertos 80 (HTTP) y 443 (HTTPS) para establecer la conexiones, todo parece una inocente conexión a una página de Internet.<br /><br />* Siempre y cuando el Firewall que estamos intentando saltar no tenga un analizador de paquetes. Ni nadie se extrañe por el continuo flujo de datos a través de HTTP (aunque esto podría ser por ejemplo un vídeo de YouTube).<br /><br />Bueno, para todos ustedes los impacientes que están leyendo va ahora si el cómo hacerlo:<br /><br /><span style="font-weight: bold;">Que se necesita:</span><br /><ol><li>Tener un equipo por fuera del Firewall que tenga instalado OpenSSH y en el que tengamos credenciales de acceso. (Yo uso el PC de mi casa).</li><li>Tener un cliente SSH en el equipo que está dentro del Firewall desde el que nos queremos conectar al protocolo / servicio restringido.</li></ol>¿Nada del otro mundo verdad?<br /><br /><span style="font-weight: bold;">Preparando el equipo Relevador</span><br /><br />El equipo relevador es el equipo que tenemos por fuera del Firewall, hay que instalarle el OpenSSH Server y configurarlo para servir a través del puerto 80. Esto se debe a que el Firewall solo nos permite conexiones a ese puerto.<br /><br />El OpenSSH se puede descargar de Internet de forma gratuita, si el equipo relevador es un equipo Linux pues bastara con buscar el paquete OpenSSH Server en el administrador de paquetes e instalarlo. Si se trata de un equipo con Microsoft® Windows® entonces se puede bajar el OpenSSH para Windows, que es un proyecto de código fuente abierto que está en SourceForge: <a href="http://sshwindows.sourceforge.net/">http://sshwindows.sourceforge.net/</a><br /><br />Una vez instalado el Servidor OpenSSH hay que configurarlo:<br /><br /><span style="font-weight: bold;">Configurar el Servidor OpenSSH (En windows)</span><br /><br />Bueno, lo primero que hay que configurar es el puerto por el que servirá el servidor (valga la redundancia) como ya se dijo debe ser el puerto 80 como el OpenSSH por defecto sirve por el 22 hay que modificar esta configuración predeterminada, para hacerlo:<br /><ol><li>Abrimos con el WordPad el archivo C:\Archivos de Programa\OpenSSH\etc\sshd_config</li><li>En ese archivo localizamos la línea <span style="font-family:courier new;">#Port 22</span> y debajo de ella agregamos la línea Port 80</li></ol>El archivo debe quedarnos más o menos así:<br /><br /><blockquote style="font-family: courier new;" face="courier new"># $OpenBSD: sshd_config,v 1.65 2003/08/28 12:54:34 markus Exp $<br /><br /># This is the sshd server system-wide configuration file. See<br /># sshd_config(5) for more information.<br /><br /># This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin<br /><br /># The strategy used for options in the default sshd_config shipped with<br /># OpenSSH is to specify options with their default value where<br /># possible, but leave them commented. Uncommented options change a<br /># default value.<br /><br />#Port 22<br />Port 80<br />#Protocol 2,1<br />Protocol 2<br />#ListenAddress 0.0.0.0<br />#ListenAddress ::<br /><br />[...]</blockquote><br />Listo, ya está configurado el servidor para servir por el puerto 80, ahora lo único que resta es preparar el Key Based Authentication que es lo que nos permitira autenticar en nuestro servidor SSH (si no lo hacemos siempre nos negara el acceso), para hacerlo:<br /><ol><li>Abrimos una consola y nos dirijimos a C:\Archivos de Programa\OpenSSH\bin\</li><li>Allí escribimos estos comandos:</li></ol><blockquote style="font-family: courier new;" face="courier new">mkgroup -l >> ..\etc\group</blockquote><br />y luego:<br /><br /><blockquote style="font-family: courier new;" face="courier new">mkpasswd -l -u <i>nombre_usuario</i> >> ..\etc\passwd</blockquote><br />Estos comandos preparan el key based authentication, lo que hace el primer comando es guardar la información de los grupos locales en el archivo ..\etc\group y el segundo crea un password para el usuario nombre_usuario en el archivo ..\etc\passwd.<br /><br />[NOTA:] nombre_usuario debe ser un nombre de usuario de la máquina local, el nombre que usamos para iniciar sesión en Windows®. Después de esto el OpenSSH permitirá que nombre_usuario y solo nombre_usuario inicie una consola remota en la máquina, si queremos otro usuario pues simplemente ejecutamos el mismo comando con el otro nombre de usuario y ya.<br /><br />Listo, eso es todo, ahora solamente hay que subir el servicio, para ello ejecutamos:<br /><br /><blockquote style="font-family: courier new;" face="courier new">sc start "OpenSSHd"</blockquote><br />Luego de eso el Servidor SSH estará corriendo en el equipo sirviendo por el puert 80.<br /><br /><span style="font-weight: bold;">Configurar el Servidor OpenSSH (En Linux)</span><br /><br />Configurar el servidor OpenSSH en Linux es igual de fácil que en Windows, lo que hacemos es lo siguiente:<br /><br />Localizamos el archivo sshd_config que se encuentra en /etc/ssh y lo editamos con permisos de super usuario, en el archivo vamos a ver algo similar a esto:<br /><br /><blockquote style="font-family: courier new;"># Package generated configuration file<br /># See the sshd(8) manpage for details<br /><br /># What ports, IPs and protocols we listen for<br />Port 22<br /><br />[...]</blockquote><br />Allí editamos la línea del puerto, en vez de 22 escribimos 80 o 443 según el puerto que podamos usar con nuestro ISP. Yo uso normalmente el 443 por que el 80 me lo tienen bloqueado.<br /><br />Una vez que hemos editado el archivo debemos bajar y volver a subir el servicio del SSH Server, para hacerlo:<br /><br /><span style="font-family: courier new;"></span><blockquote><span style="font-family: courier new;">$ sudo /etc/init.d/ssh stop</span><br /><span style="font-family: courier new;">$ sudo /etc/init.d/ssh start</span></blockquote><br />Y listo. En linux no es necesario preparar la key-based authentication ya que el servidor SSH utiliza el sistema de autenticación del sistema operativo así que no hay que hacer nada más.<br /><br /><span style="font-weight: bold;">Hacer el Port Forwarding</span><br /><br />Bueno, ahora si viene la parte divertida, conectarse a un puerto "prohibido", a partir de este punto estamos en la máquina que está dento del Firewall. Recordemos que en ese equipo debe estar instalado el cliente SSH. Si no tenemos permisos de instalación podemos buscar un cliente SSH que no lo requiera, no sé si el <a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html">Putty</a> pueda hacerlo poero valdría la pena probarlo <span style="font-weight: bold;">(Posteen sus comentarios si lo intentan)</span><br /><br />Para hacer esto más fácil de entender vamos a poner un ejemplo sencillo, digamos que queremos escuchar <a href="http://www.animeacademyradio.net/index.php">Anime Academy Radio</a> dentro de la Universidad, normalmente eso no se puede por que el puerto está cerrado pero como ya tenemos nuestra máquina Relevadora por fuera del Firewall entonce si podemos.<br /><br />Entonces, bueno, cuando entramos a la página de la estación descargamos un .m3u que básicamente nos apunta a la URL donde está el punto de publicación del servidor, la dirección donde apunta ese m3u es: rs1.animeacademyradio.net:8500<br /><br />Tenemos que hacer que la máquina que está por fuera nos releve al puerto 8500 del servidor rs1.animeacademyradio.net entonces para eso ejecutamos este comando:<br /><br /><blockquote style="font-family: courier new;" face="courier new">ssh ip_maquina -p 80 -l nombre_usuario -L 8500:rs1.animeacademyradio.net:8500</blockquote><br />Escribimos nuestra contraseña y ya está, eso nos abre una consola remota y hace el Forwarding del puerto, ya voy a explicar como funciona, pero primero hace falta un paso, después de eso vamos a la página de Anime Academy Radio y hacemos clic en el link como siempre, la conexion fallará por que el proxy de la Universidad no permite conexiones al puerto 8500, entonces, en el WinAmp le damos clic derecho a la entrada de la lista de reproducción y seleccionamos Editar Entrada y ahi donde dice rs1.animeacademyradio.net escribimos localhost y volvemos a darle reproducir, ya debería funcionar.<br /><br />[NOTA:] Se puede agregar la opción <span style="font-weight: bold;">-N</span> al comando para que no nos abra una consola remoto sino que solo haga el Port Forwarding, en Windows® igual la ventana de la consola quedará bloqueada entonces pues da como lo mismo.<br /><br /><span style="font-weight: bold;">Explicación</span><br /><br />Bueno, ahora la explicación de lo que hicimos. En el comando que escribimos vemos lo siguiente:<br /><ul><li><span style="font-weight: bold;">ssh</span> es el nombre del comando (no se necesita más explicacion)</li><li><span style="font-weight: bold;">ip_maquina</span> es la IP (o en caso de que se tenga) el nombre de la máquina Relevadora</li><li><span style="font-weight: bold;">-p 80</span> es para decirle al SSH que se conecte al puerto 80 en ves de al puerto 22 (que es el puerto predeterminado)</li><li><span style="font-weight: bold;">-l nombre_usuario</span> Es para decirle al OpenSSH que logee en la máquina remota con el nombre de usuario nombre_usuario. Si no se especifica esta opción el SSH logeara con el usuario actual.</li><li><span style="font-weight: bold;">-L 8500:rs1.animeacademyradio.net:8500</span> Esta es la parte teza del comando, lo que esta parte del comando le dice al OpenSSH es: Todos los paquetes que lleguen a la máquina local a través del puerto 8500 mandelos a la máquina remota (ip_maquina) y cuando lleguen allá digale al SSH Server que los mande a rs1.animeacademyradio.net en el puerto 8500. ¿Se entiende?</li></ul>Así por ejemplo se pueden hacer otras cosas, digamos que por ejemplo tenemos un servidor de MySQL que se está ejecutando en nustro PC de la casa, pero claro, el cochino proxy de la universidad no nos permite conectarnos al puerto 3306 entonces:<br /><br /><blockquote style="font-family: courier new;" face="courier new">ssh ip_maquina -p 80 -l nombre_usuario -L 3306:localhost:3306</blockquote><br />Y listo, este comando a veces resulta un poco confuso pero lo voy a explicar en detalle: Le estamos diciendo a la máquina local, todo lo que le llegue por el 3306 mandelo a la máquina remota (ip_maquina) y digale al SSH Server que está allá que cuando llegue lo mande a localhost en el puerto 3306 ¿Localhost es la máquina donde ejecutamos el ssh o donde está el SSH Server? Es donde está el SSH Server, lo que colocquemos en la parte -L del comando ssh lo resuelve el sercvidor SSH y para el servidor SSH localhost es el pc donde se ejecuta.<br /><br />De esta misma manera podemos redirigir cualquier puerto. Es muy util si se utiliza bien. El manual del SSH ofrece más información de como usar estas características, hay incluso otras opciones muy interesantes, como por ejemplo la opción -R, les recomiendo que la vean, por ahora voy a explicar como funciona la opción -L:<br /><br />La opción -L tiene tres argumentos, por llamarlos así <span style="color: rgb(51, 51, 255);">puerto local</span>, <span style="color: rgb(255, 0, 0);">destino</span> y <span style="color: rgb(51, 204, 0);">puerto remoto</span>, estos argumentos se colocan separados por : así:<br /><br /><blockquote style="font-family:courier new;"><span style="color: rgb(51, 51, 255);">puerto_local</span><span style="color: rgb(51, 51, 255);"></span>:<span style="color: rgb(255, 0, 0);">destino</span>:<span style="color: rgb(51, 204, 0);">puerto_remoto</span></blockquote><br />Entonces: <span style="color: rgb(51, 51, 255);">puerto_local</span> es el puerto que el comando ssh escuchara en la máquina local. Cuando ejecutamos el comando ssh se abre un puerto en la máquina local y escucha por ahi, podemos constatarlo con un <span style="font-family:courier new;">netstat -n -a</span>. <span style="color: rgb(255, 0, 0);">destino </span>es la máquina <span style="font-weight: bold;">FINAL</span> a donde queremos acceder (donde está el servicio al que no podemos acceder por culpa del proxy). Recuerden que ese nombre o dirección la resuelve el Servidor SSH, por eso en el ejemplo del MySQL localhost resulta siendo la máquina donde está el SSH Server corriendo, y no donde ejecutamos el ssh.<br /><br />Por ultimo el es el <span style="color: rgb(51, 204, 0);">puerto_remoto</span> puerto al que queremos conectarnos en la máquina <span style="font-weight: bold;">FINAL</span>.<br /><br /><span style="font-weight: bold;">Me lleva.... :C pero no quiero perder el puerto 80</span><br /><br />A veces tenemos en nuestra máquina un servidor HTTP de verdad corriendo en el 80, en ese caso podemos usar el 443 (el HTTPS) para hacer que el OpensSSH Server sirva por ahi, en ese caso el comando del ejemplo quedaría así:<br /><br /><blockquote style="font-family: courier new;">ssh ip_maquina -p 443 -l nombre_usuario -L 8500:rs1.animeacademyradio.net:8500</blockquote><br />Noten el cambio en el <span style="font-weight: bold;">-p</span>.<br /><br />Notese que esto del Port Forwarding permite conectarse al puerto que uno quiera en la máquina que uno quiera y parece que la conexión siempre para a través del puerto 80. Esto quiere decir (supongo que ya se habrán dado cuenta) que si uno tiene una máquina ejecutando el SSH Server por el puerto 80 no hay límite respecto a lo que se puede hacer, <span style="font-weight: bold;">¡no hay Firewall que pueda detenernos!</span><br /><br />¡Tomen eso malditos de la DANIC!<span style="font-weight: bold;"></span><br /><br />Por ahora voy a dejar aquí, si tienen dudas o quieren mayores explicaciones me pueden escribir al correo electrónico o postear su comentario por aquí, estaré pendiente. También los que me conocen me pueden comentar por MSN.<br /><br />Hay otros trucos en la bolsa por ahi pero ya no quiero escribir más por hoy, después postearé más.<br /><br />Se cuidan<br /><br />さようならSergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-46294348870331097312008-10-07T00:30:00.002-05:002008-10-07T00:41:12.178-05:00Overclocking y CPUsDesde que Jorge anda con la vaina del Overheat del procesador me he puesto a mirar mucho sobre overclocking y procesadores he aprendido resto de los vídeos en YouTube y leyendo por ahi, creo que después de todo yo nunca overclockearía mi procesador... eso como que los pone a correr muy calientes y mmmm... prefiero vida util que velocidad extema, además no tengo nada que requiera tanta velocidad como para decir que voy a Overclockear.... seee yo nunca jugaría Crysis... ese juego manda huevo ¿para que lo hacen tan exigente? a nadie le corre a más de 19 fps.. re locos.<br /><br />Este vídeo me marco, me parecío re tezo:<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gk2Sadcn48o&hl=es&fs=1"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/gk2Sadcn48o&hl=es&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />Y bueno, que más podría decir, me he puesto a mirar resto de vídeos, gente re loca que Overclockea el procesador y ponen hielo seco en el Heat Sink .... hay por dios, y también he visto vídeos de que pasa cuando el procesador se queda sin discipador... terrorifico, he visto algunos en los que el procesador literalmente explota (sale disparado del socket y todo).<br /><br />Este es re pasado:<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/BSGcnRanYMM&hl=es&fs=1"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/BSGcnRanYMM&hl=es&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />mmm.... Todavía recuerdo mi i486dx que no tenía nisiquiera disipador de calor... y ahora se necesita Water Cooling system para poder mantener un procesador a temperatura operativa... cuanto hemos avanzado... ¡que tezo!<br /><br />Mi Board está diseñada para Overclocking, overclockear con esta board es re facil, es como cambiar un par de parametros en la BIOS y ya, pero no, creo que paso, quiero mucho a mi PC como para hacerle eso... depronto cuando pueda poner un cooling system con LN2... pero de aquí a eso hay un largo trecho...<br /><br />En YouTube hay unos vídeos que hacen ver tan fácil Overclockear... pero no, por ahora no.<br /><br />Bueno, los dejo por ahora, después estaré posteando más cosas.<br /><br />さようならSergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-32032188462244830032008-10-07T00:00:00.006-05:002008-10-07T00:27:05.586-05:00Actualizaciones OtakuHola<br /><br />Hace rato que no escribo por aca en el Blog, mmm supongo que no todo lo que pasa en mi vida lo quiero postear en Internet. En fin ultimamente he estado bastante otaku así que aquí van algunas actualizaciones.<br /><br /><span style="font-weight: bold;">らきすた</span><br /><br />Lo primero es que me ví Lucky Star (らき すた) Y me gustó bastante, debo decir, al principio los dibujos son un poco raros, pero la verdad es que le sientan muy bien a la serie, las caras que hace Konata no serían lo mismo si el estilo de dibujo fuera diferente. También las de Kagami.<br /><br />Es la serie más anime que he visto, todas las posibles situaciones del anime se presentan en la serie, Konata es un gran personaje y Kagami también :P me gustó mucho el Karaoke en el Ending de los 12 primeros episodios, los otros se los tiraron con el tarado ese cantando, pero bueno, nada que hacer.<br /><br />Lo que menos me gustó de la serie fue el Lucky Channel, la verdad me parece que sobraba y pues aunque las situaciones de vez en cuando eran graciosas.... mmmm creo que la serie habría podido usar esos 2 - 5 minutos en buen contenido. Realmente me pareció un sobrante.<br /><br />Al final le doy 5 estrellas a Lucky Star. Una gran serie, la recomiendo mucho.<br /><br /><span style="font-weight: bold;">シャナ</span><br /><br />Acabo de encontrar a un nuevo personaje femenino que se ha convertido en mi personaje femenino favorito, シャナ de <span style="font-weight: normal;"><span class="t_nihongo_kanji" lang="ja">灼眼のシャナ es un personaje muy tezo, me encanta, es muy carismatica y es muy bacana en general. Cuando está peleando se ve re teza con la katana, y cuando está normal y está comiendo pan de melón se ve muy kawaii. (。。。)<br /><br />Me gustó mucho el personaje, sus actitudes son m</span></span><span style="font-weight: normal;"><span class="t_nihongo_kanji" lang="ja">uy bacanas, a veces parece una niña inocente, otras veces una guerrera despiada, me encanta cuando se pone celosa de Yuji :P Se ve muy kawaii. Creo que supieron hacer muy bien al personaje y la Seyou que escogieron para ella no podría haber sido mejor. Es que todo es tezo acerca de ella, ... no wonder she became my favorite character so quickly ...<br /><br />Hasta el momento ha valido mucho la pena la serie, me siento muy feliz de haberla encontrado y hay Shakugan no Shana para rato por que hay dos</span></span><span style="font-weight: normal;"><span class="t_nihongo_kanji" lang="ja"> series de 24 episodios, una OVA y una película. Apenas termine de ver la serie les comentaré que tal me parecio... voy en el episodio 13 y huuuy hasta ahora esta muuuy buena, ojala que siga así ... :P Ahora entiendo por que es tan popular la serie... no entiendo como no la había conocido antes.<br /><br />Bueno, les dejo un regalito, una imágen de Shana en versión Anime<br /><br /></span></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinMy_22VUZcd7RvTuajTGyEMMgDme7i6Y0oW6jGXOh4d7Ih7Dj55TSo543fDOKzBuxoZvCTRkm4StrJbYg-nXXszjGEaWLTSxrE8ar20J0XZCvcAlZh4hJkn89bXUTQdrm2xy1IA/s1600-h/n582936195_134451_312.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinMy_22VUZcd7RvTuajTGyEMMgDme7i6Y0oW6jGXOh4d7Ih7Dj55TSo543fDOKzBuxoZvCTRkm4StrJbYg-nXXszjGEaWLTSxrE8ar20J0XZCvcAlZh4hJkn89bXUTQdrm2xy1IA/s320/n582936195_134451_312.jpg" alt="" id="BLOGGER_PHOTO_ID_5254276775716874690" border="0" /></a><br />...y también una imágen de mi Cosplayer<span style="font-weight: normal;"><span class="t_nihongo_kanji" lang="ja"> favorita haciendo cosplay de Shana... no voy a decir el nombre de la cosplayer debido a que hay ciertos pervertidos ¬¬ que leen mi blog y prefiero que su identidad permanezca en anonimato para ellos... creo que la pobre ya tiene muchos ojos pervertidos encima... ¬¬<br /><br /></span></span><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtc8x4dQXYwH5fgr8OtvPEA05JPlnHgq-9yp3-EUjVWuzu-NhyNCka341ZvmpL8JxQwQAah98F-veiFvRffQwQoLSm2oqw_ulcCpvAsC-bk6dHxgTW4J7sB_WBIuhf9NrvqWRDiA/s1600-h/cb1910ab492a206132d37bdc9b42314c.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtc8x4dQXYwH5fgr8OtvPEA05JPlnHgq-9yp3-EUjVWuzu-NhyNCka341ZvmpL8JxQwQAah98F-veiFvRffQwQoLSm2oqw_ulcCpvAsC-bk6dHxgTW4J7sB_WBIuhf9NrvqWRDiA/s320/cb1910ab492a206132d37bdc9b42314c.jpg" alt="" id="BLOGGER_PHOTO_ID_5254277423157272658" border="0" /></a><br />teza ¿verdad? seeeee... sus Cosplay siempre son espectaculares... es como ver al personaje en cuestión y bueno.... otra imagen de ella, pero cuando está normal, comiendo Pan de Melón, tiene la misma sonrisa que se le forma a シャナ cuando come pan de melon... kawaiii!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgfd3mSXQt8mIcO1CXVBvVJHLoF1NlWVS4K616wDU-xE3kecDCazlUGNI5cSmgPBLZaJcL4i7gWlzSPi-R0vDpRDBUhsz2AVxpDXBcCezI3azpQj3IK11nS_bkNOewwJY4EjvQsg/s1600-h/005666575.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgfd3mSXQt8mIcO1CXVBvVJHLoF1NlWVS4K616wDU-xE3kecDCazlUGNI5cSmgPBLZaJcL4i7gWlzSPi-R0vDpRDBUhsz2AVxpDXBcCezI3azpQj3IK11nS_bkNOewwJY4EjvQsg/s320/005666575.jpg" alt="" id="BLOGGER_PHOTO_ID_5254278725503391234" border="0" /></a><br />Lo cierto esque ultimamente me he pueso a mirar muchos Cosplays japoneses y me he dado cuenta que son muy tezos, ... hace tiempo detestaba el cosplay, claro pero era por que simepre veia las fotos de una gordas horribles disfrazadas de Rinoa (Malditas, ¿como le pueden hacer eso a la pobre Rinoa?) mmm pero los cosplay japoneses no solo son muy buenos (los disfraces) sino que además las niñas son muy kawaii :P (mucho kawaii ultimamente... por que será... ?)Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.comtag:blogger.com,1999:blog-31519804.post-45457423836011891042008-09-18T14:35:00.004-05:002008-09-18T15:05:36.838-05:00JUAAAAAAAAAA!¡Hay no! Estas fotos si que me hacen reir, no puedo creer que exista gente así, bueno, como dicen por ahi, de todo hay en el rebaño del señor:<br /><br /><a href="http://content.techrepublic.com.com/2346-10877_11-198663-1.html">http://content.techrepublic.com.com/2346-10877_11-198663-1.html</a>Sergiohttp://www.blogger.com/profile/15799715735267662888noreply@blogger.com