viernes, 23 de diciembre de 2016

Tracking racing apps

I'm very sure you've read some posts about different apps to track your races. But I think the best way to decide what the best app is fo r me, is testing by myself.

I've already chosen some apps to reduce the list to 3 apps. My selection is.

  • Endomondo
  • Strava
I use these apps for running and biking. I confess I'm a long way endomondo user, but I want to re-check the status front to other apps. Moreover, I have a Sony Smartwatch 3 and I would like to take in advance this device.

The comparison is focused on two things,  data precision and kind of information that non-premium app offers to the user. I did a test race to evaluate the information that apps collect.  The race isn't too long, so the measuring errors should be minimized,  but the race is long enough to evaluate the information and to extrapolate to longer race.

Tracking Accuracy

Depend  on the profile of the user, this is the most important part because you want to record your record with highest accuracy.
To start the testing I started all applications before I started my race. Moreover I warmed up the GPS to get the best accuracy and to not disturb the measure of each application.

ApplicationDistanceAvg. PaceMax. PaceAvg. SpeedMax. Speed
Endomondo4.69 KM6:29 min/KM4:21 min/KM9.25 KM/h13.81 KM/h
Strava4.8 KM6:14 min/KM-- min/KM-- KM/h-- KM/h

Each application shows a little differences of my tracking, but differences are not big. Each application show a resume with different data, I specially focus on Endomondo, because its resume shows all data filled (Distance, Pace and Speed).

Strava is focused on pace and MyTracks is focused on speed. Obviously, I can calculate from pace to speed and vice-versa, but I appreciate that Endomondo fills all. Strava does not offer the max peace, only average. I can get the peace per KM, but I'm interesting on max pace.

Web portal

One thing that I used to do is review my track in the web portal of the application. If you are using MyTracks you have a disadvantage, because MyTracks does not have a web portal to view your track. You can export the track to GPX file and upload to another portal, or export to KML and view with Google Earth, but you have to do.

Endomondo and Strava have web portal where you can view your tracks. I'm going to analyse both portal to get some conclusions of the portals.

Mobile applications

Endomondo

 Strava

martes, 18 de agosto de 2015

Multi-threading in a common loop

Usually, we are doing a lot of loops as a programmer, it is a basic control method of the workflow. But, sometimes loops have bad performance because they do some heavy things.

public List<Output> getOutputFromKeys(final Collection<String> keys) {
    final List<Output> outputs = Lists.newArrayList();
    for (String key : keys) {
        outputs.add(getOutput(key));
    }
    return outputs;
}
 
This for-loop could be heavy depends on how long "getOutput" method takes. If the method takes lots of time, we will need improve the performance of that.
To improve the performance, we can take in advance the ExecutorService class of the Java.

public List<Output> getOutputFromKeys(final Collection<String> keys) {
    final int threads = Runtime.getRuntime().availableProcessors();
    final ExecutorService service = Executors.newFixedThreadPool(threads);





 

    class LoadOutput implements Callable<Output> {
        private String key; 
        public LoadOutput(final String key) {
            this.key = key;
        }

        @Override
        public Output call() throws Exception {
            final Output out = getOutput(key);
            if (out == null) {
                logger.warn(String.format("Output with key %s is null", key));
            }
            return out;
        }
    }

    final List<Future<Output>> futures = Lists.newArrayList();
    for (final String key : keys) {
        final LoadOutput callable = new LoadOutput(key);
        futures.add(service.submit(callable));
    }

    service.shutdown();

    return Lists.newArrayList(Collections2.transform(futures, new Function<Future<Output>, Output>() {
            @Nullable 
            @Override 
            public Output apply(Future input) {
                Output out = null;
                try {
                    out = input.get();
                } catch (Exception e) {
                    logger.error("There was an error with multithreading.", e);
                }
                return out;
            }
    }));
}

The improvement use multi-threading to improve the for-loop and use callback methods. That can help us to improve our performance.

lunes, 29 de junio de 2009

Emancipación de un geek (Parte 2)

Tras la dureza de la mudanza es cuando realmente empiezan todos los problemas para el geek. Porque, bien hemos conseguido traernos todos nuestros complementos, portátil, consola(s), gadgets varios, 3 o 4 monitores. Pero es entonces cuando empezamos a ver aparatos eléctricos extraños para nosotros, asombrosos en muchos casos.

Nada más llegar a nuestra casa, nos enfrentamos con el primero de ellos, ¡¡el frigorífico!!. Si, es un aparato que ya hemos visto, nosotros levantabamos nuestro trasero de nuestra silla y nos acercábamos en busca de nuestra tan deseada coca-cola que nos ayuda a continuar con nuestras interminables sesiones de programación o de CS.

Pero es en ese preciso instante, cuando abrimos nuestro frigorífico por primera vez y vemos algo insólito, ¡¡¡NO HAY COCA-COLA!!!. Está vacío!!!, ¿cómo puede ser?, ¿dónde está ese mecanismo de autollenado de comida y bebida que tan felices nos hacía?. Rápidamente y sin perder un instante de nuestro tiempo, miramos las instrucciones del frigorífico, vamos al índice y miramos la A... Autollenado... no hay referencia a autollenado.

Derrepente un escalofrío recorre nuestra espalda, sin embargo, aún no está todo perdido, nos quedan recursos que mirar. Volvemos a nuestro portátil para consultar el tema por Internet, pero... ¡¡no hay Internet!!, ¡¡todavía no nos han traído el maldito router!!. No pasa nada, haremos un derroche, cogeremos nuestro móvil 3g, y nos conectaremos a internet a través de él. Entonces es cuando vamos a google y buscamos "autollenado frigorífico". Pero nada, los resultados no nos sacan de nuestro problema. Cambiamos de sitio de búsqueda y entramos en foros, chats, irc, grupos de facebook, etc etc, dejamos nuestra duda, si alguien ha tenido el mismo problema, y es ahí cuando al cabo de un rato... sí!! siempre hay un gurú que nos puede ayudar. Empezamos a leer la contestación....

Querido amigo, a continuación te voy a explicar el algoritmo de autollenado de un frigorífico, que como has podido comprobar no viene en las instrucciones.

Vas pensando, bien!!! por fin, con lo que me ha costado, esto promete.

El algoritmo tiene dos versiones:
  • Método directo
  • Método delegado

Método directo

El método directo consiste en levantarse de la silla en la que estás ahora mismo, coger las llaves de tu casa, salir a la calle (sé que es difícil) y dirigirte a un supermercado (los diferenciarás porque sale mucha gente con bolsas, aunque más abajo te he dejado una lista de los más típicos que puedes encontrar). Una vez en el supermercado, tienes que coger un carro que nos servirá para transportar lo que necesitemos (para que me entiendas, sería el package que contiene los class), después dirigirte a la sección de bebidas (suelen estar en el último pasillo), busca tu marca de refresco y mete en el carro 2 paquetes de latas. Como seguro que necesitarás algo para acompañar tu refresco, ve con el carro al pasillo colindante, seguro que encuentras algo que te gusta.

Una vez que hayas conseguido todo lo que te gusta, debes dirigirte a las "cajas". Las cajas te recordarán a la teoría de colas que tanto has aplicado en tu día a día, debes elegir una cola y esperar tu turno. Cuando te vaya a tocar, debes colocar todo lo que tengas dentro tu carro en la cinta que está al lado de la caja, verás como se irán desplazando y una "alegre" señorita los irá pasando por un lector de código de barras". Por último te pedirá el valor de la compra, saca tu tarjeta de crédito y paga. No, no es necesario tenerla asociada en PayPal.

Recoge las bolsas, y dirigete a casa. Cuando llegues, mete lo que has comprado en el frigorífico y verás como ese aspecto ya te resulta familiar.


Método delegado

El método delegado es mucho más sencillo que el anterior. Lo bueno es que no tendrás que salir de casa, sin embargo el autollenado no se conseguirá de forma rápida, ya que habrá que esperar un tiempo a que los factores externos actúen.

Para este método necesitamos un teléfono. Busca el teléfono de mamá, llamas y le comentas el problema y verás como en pocas horas tendrás el frigorífico tal y como lo tienen tus padres.


Espero que te haya servido de ayuda. Un saludo. Ike.


Finalmente, pensamos la respuesta de Ike y tomamos la decisión de usar el método delegado, y efectivamente, Ike tenía razón, cuestión de horas y el frigorífico se llenó. Gracias Ike, eres un gurú.

Para ti mi vida,
que eres genial, increible, no cambies nunca.
Siempre estaré a tu lado, en lo bueno,
pero sobretodo en lo malo.
Te quiero, te adoro, te amo.

viernes, 15 de mayo de 2009

PyCamimg 0.1.0 is out. Finally a beta.


A long time has passed from last version of PyCamimg, but it is just here a new expected version, and for the first time is a beta version. Remember, previous versions were only alpha versions. I have less and less time to develop PyCamimg, but this my baby, and I still try to improve this software, but please test it and send me back your feedback or your new ideas, it is very important for me knows your opinion about PyCamimg or knows how PyCamimg could help you (send your feedback or your ideas to hugo.parraga.martin@gmail.com, I will be greatful).

Now, new PyCamimg has got new important features and some changes from previous version. I have tried PyCamimg are more scalable, useful, and easier to add new features in the future. For this reason, I have developed a system of plugins for PyCamimg. For instance, you can create new type of projects like a project that sends photos by mail as attachments or uploads photos by ftp. Also, you can develop new operations to execute on the photos, like red-eyes eraser. We can improve PyCamimg...

From 0.3.0 to 0.1.0

  • It exists two types of project. First is local project to treat and save photos on your local system. And second to treat and upload your photos to facebook.
  • Can create, save and load projets to process them whenever you want.
  • In execute dialog there are custom project options. In some cases there is an option for multiple type of projects, but it is not required.
  • Select of target folder is only for local project, it is not in main form.
  • Plugins must be in plugins folder, it is in root folder of PyCamimg.
  • Each project is in a tab in main form. So PyCamimg is a multi-tab application.
  • Of course, some bugs are fixed.

PyCamimg is still an open source application and it continues to have GPL license. Here you can obtain a copy of license.

If you want to execute PyCamimg under python interpreter, you will need below libraries:

In the following links you can download PyCamimg

NamePlatformLink
PyCamimg-0.1.0WindowsDownload
Megaupload
PyCamimg-0.1.0AnyDownload
Megaupload
PyCamimg-0.1.0 (SVN)Anysvn co https://blindpump.dyndns.org/svn/pycamimg/tags/pycamimg0.1.0

lunes, 27 de abril de 2009

Emancipación de un geek

¿Cómo es la emancipación de un geek? ¿Difiere mucho de la de cualquier persona?. La emancipación siempre es dura para cualquier persona, aunque ilusionante. Consigues salir del nido, de la cálida protección familiar, y empiezas a explorar por ti mismo los "oscuros senderos".

Todo empieza con la mudanza. Aquí es donde están las primeras diferencias entre el geek y el resto de las personas. Mientras que la mayoría de la gente, tarda en recolectar toda la ropa a llevar y todos los utensilios básicos para la vida, tales como los utensilios de cocina (habrá que alimentarse de algo además de pizza, las películas nos engañan), los del baño (sí nosotros también nos aseamos.. xD), etc. El geek, recolecta todo en 30 minutos, un par de camisetas, un par de pantalones, un cepillo de dientes, ...
Sin embargo, ¿qué pasa con todos los aparatos electrónicos? ¿es capaz de dejar alguno para volver más tarde?. Pues la verdad es que un verdadero geek no puede dejar ninguno de sus "cacharros" o gadgets, son su historia, su evolución geek. Es el momento en el que cajas y cajas llenas de gadgets surgen de la nada, olvidadas debajo de la cama o al fondo del armario...

De ellas sacas tu primera gameboy con tu Tetris todavía colocado y te echas una partidida (o dos) para ver si te superas tu histórico record. Aparecen tus maquinitas de marcianos con las que jugabas con 4 y 5 añitos (esos matamarcianos... jeje). Y llegas a un momento cumbre en la vida de todo geek experimentado... ves tu Street Fighter y tu SuperNintendo, y rememoras todos los buenos momentos que te has pasado con ese juego, lo buena que era tu infancia y te das cuenta de todo el tiempo que ha pasado desde entonces.

Recuerdas cada etapa geek que pasaste, tu primer pc (ese MS-DOS), tu primer móvil (todavía me acuerdo de ese ladrillaco... ¡¡toma si tiene para hacer melodías!!). Y entonces es cuando recuerdas a todos tus amigos geek que te han acompañado, los que han pasado y los que todavía están. Es entonces cuando decides llevarte todo, lo metes todo en cajas como oro en paño y te lo llevas, juntos con tus fotos, y tus DVDs porta vasos.

Cuando llegas a tu nueva casa (si tu casa, ya tienes que decir la casa de mis padres), empiezas a descargar todos los "trastos" que has llevado. Por supuesto, no lo llevas todo en un día, te tomas al menos 2 días. Pero el momento en el que ves que todo empieza es la que tu portátil está en la nueva casa, es el momento en el que terminas la mudanza y te estableces. Como buen geek tu máquina va donde vas tú.

Cuando has colocado todo y enciendes por primera vez tu portátil, te das cuenta de algo fundamental... ¿dónde está mi ADSL? Entonces, como un loco, miras las redes disponibles de tus vecinos esperando a que haya un alma bondadosa que se apiade de nuestro descuido, que se dé cuenta que estamos empezando y nos deje acceso a su WIFI. Pero ves que la gente evoluciona y ves todas las redes protejidas (maldices a todos los amigos informáticos que se ofrecen para configurar la ADSL de sus amigos, es cuando tiras de experiencia.... pillas tu wifislax y dándole.... eureka!!! Uno que está con WEP y en unos minutitos tienes acceso a la red. Sabes que no lo debes hacer, pero las urgencias son las urgencias, y esta es de las graves.

A la mañana siguiente, lo primero que haces es contratar tu nueva ADSL, antes que comprobar tus contratos de agua, gas o luz... ni lo miras sólo piensas en el sufrimiento que tuviste el pasado día. Al colgar, suspiras y te dices... en 15 días tengo mi router, ¡¡menos mal!!

Continuará...


Papá, Mamá, Aitor y Adrián os quiero!!!!

miércoles, 1 de abril de 2009

Guerra de navegadores

Parece que ser que, además de la típica guerra de sistemas operativos, estamos ante otra guerra de software, los navegadores web.

El hecho que Google empezase a desarrollar su propio navegador (chrome), daba un índicio de la importancia que va a tener el navegador web en un futuro no tan lejano como nos puede parecer. Y es que la tendencia de hacer todo vía web (no será descabellado decir que en algún momento veamos una S.O. web) está haciendo que las páginas web requieran navegadores web con más capacidades y con mejores implementaciones.

Un factor muy determinante para esta guerra va a ser la implementación del motor de javascript de cada uno de los navegadores, Google con V8, Mozilla con TraceMonkey, Apple con SquirrelFish y sin olvidarnos de IE8 y de Opera 10. En este aspecto, parece que Google lleva la delantera sobretodo desde que sacará la versión 2 de su motor, aunque no hay que no haya mucha ventaja con Mozilla.

Por otro lado, tras la publicación de la versión 8 de IE, se menciona en muchos análisis que IE no ha evolucionado, con tanto empeño como sus competidores, su motor de javascript, a lo que Microsoft responde que no sólo hay que mejorar y buscar la rapidez en el intérprete de javascript, sino que hay que evolucionar los motores de renderizado (en el caso de IE, puede ser la última versión con Trident), gestión de memoría, etc. Razón no les falta, pero precisamente creo que Trident no es la respuesta para el renderizado, sin embargo cierto es que para IE8.1 se va a dar la posibilidad de elegir con que motor de renderizado se quiere procesar una página pudiendo elegir Gecko y Webkit, además del propio Trident.

Además de la lucha de motores de javascript, parece que hay una nueva tendencia en la implementación de los navegadores. Mientras que hasta ahora, los navegadores eran un único proceso en el que se abrían multiples hilos (normalmente, uno por página abierta en el caso de los navegadores con pestañas), está cambiando hacía una tendencia multiproceso en el que cada página es un proceso independiente. Esto tiene un punto negativo, y es que inicialmente los recursos de memoria son mayores, pero se gana en un factor que creo que es más importante, seguridad, ya que si un proceso se compromete, no compromete al resto de procesos.

Por último, hay otros factores que son igualmente importantes, por ejemplo la capacidad de expansión mediante addons o similares, y en este sentido Mozilla tiene toda la ventaja. Sin embargo y con la salida de IE8, se ha publicado que Microsoft tiene la intención de soportar los addons de Firefox en IE8.1. Esto abre a IE8 un sin fin de software de gran utilidad, no me imagino firebug en IE8. Gran idea la de Microsoft.

Yo por mi parte sigo con mi querido Firefox esperando acontecimientos, pero sin cerrar la puerta a nada.

lunes, 2 de marzo de 2009

Personalizar la caperta de papelera de Thunderbird en un servidor IMAP

Es muy común que la carpeta IMAP de la papelera no se encuentre en el raiz del directorio de IMAP o que bien no se llame "trash", que es el nombre por defecto que thunderbird le asigna a la papelera.

Lo primero que tenemos que hacer es ir a la configuración de Thunderbir. Después a opciones avanzadas y entrar en la edición de configuración.



Una vez dentro buscamos la cadena mail.server.server.



Aquí podemos ver como tenemos entradas en el registro por cada cuenta configurada, es decir, tenemos mail.server.server0, mail.server.server1, etc..

Ahora lo que tenemos que hacer es localizar qué servidor es el que queremos modificar. Para esto buscamos el nombre de nuestra cuenta que se indica en cada mail.server.serverX.name, encontrado una vez el que queremos simplemente tendremos que añadir la entrada mail.server.serverX.trash_folder_name con el valor de la carpeta que queramos por papelera.

Como ejemplo si la cuenta "Mi Cuenta" y quiero que mi papelera sea la carpeta "desecho", es mail.server.server2.name = "Mi Cuenta", tendremos que añadir mail.server.server2.trash_folder_name con valor desecho.

miércoles, 14 de enero de 2009

PyCamimg 0.0.3 is out



Español
English


Español

Después de algún tiempo detrás de mi equipo, cada vez menos tiempo de sueño, y un montón de trabajo, la versión 0.0.3 de PyCamimg está afuera. Para recordar, PyCamimg es un software para gestionar sus fotos. El objetivo del proyecto es obtener un software como F-Spot, pero voy paso a paso. PyCamimg es una aplicación de código abierto y que sigue teniendo licencia GPL. Aquí puede obtener una copia de la licencia.

Hay pocas novedades, ya que el objetivo de la versión 0.0.3 para corregir algunos errores. En la versión anterior había una gran cantidad de errores, especialmente en navegador, es debido a mi inexperiencia en Python y GTK. Pero, por otra parte, estoy mejorar lo más rápido posible. Dame una oportunidad, creo que PyCamimg puede ser un buen programa.

En la nueva versión se puede cambiar el nombre, el tamaño y rotar las fotos. También cuando vas a cambiar el nombre de algunas fotos de diferentes cámaras, se puede aplicar un modelo con un prefijo, un sufijo y un contador. Este contador se aplica a las fotos en distintos órdenes, por ejemplo la foto tomada en la fecha.

En los siguientes enlaces puedes descargar PyCamimg

NombrePlataformaEnlace
PyCamimg-0.0.3WindowsDescargar
PyCamimg-0.0.3TodasDescargar
PyCamimg-0.0.3 (SVN)Todassvn co https://blindpump.dyndns.org/svn/pycamimg/tags/pycamimg0.0.3


De 0.0.2 a 0.0.3

  • El navegador muestra información útil sobre los archivos del sistema de ficheros. Asimismo, muestra los iconos de los archivos de sistema para una mejor diferencia.
  • Obtiene los cambios que se producen en su sistema de ficheros.
  • Almacena en los metadatos Exif modificar fotos.

  • Resuelve errores de idioma.
  • Soluciona los errores de concurrencia en el navegador.
  • Resuelve errores en las opciones de guardado.
  • El código tiene una mejor estructura. Y es más fácil de entender.




English
After some time behind my computer, less and less sleeping time, and a lot of work, 0.0.3 version of PyCamimg is out. For remembering, PyCamimg is a software to manage your photos. The target of the project is to get a software like F-Spot, but I go step by step. PyCamimg is an open source application and it continues to have GPL license. Here you can obtain a copy of license.

There are few new features, because the target of 0.0.3 version is to fix some bugs. In previous version there were a lot of errors, especially in navigator, it is because of my inexperience in python and gtk. But on the other hand, I am improving as fast as possible. Give me a chance, I think that PyCamimg can get be a good program.

In new version you can rename, resize and rotate your photos. Also when you are going to rename some photos from different cameras, you can apply a pattern with a prefix, a suffix and a counter. This counter is applied to photos in different orders, for example in taken photo date.

In the following links you can download PyCamimg

NamePlatformLink
PyCamimg-0.0.3WindowsDownload
PyCamimg-0.0.3AnyDownload
PyCamimg-0.0.3 (SVN)Anysvn co https://blindpump.dyndns.org/svn/pycamimg/tags/pycamimg0.0.3


From 0.0.2 to 0.0.3

  • Navigator shows useful information about files of the filesystem. Also, it shows system icons of files for better diference.
  • Gets the changes wich ocurr in your filesystem.
  • Store exif metadata in modify photos.

  • Solves language mistakes.
  • Solves threading errors in navigator. Idle operations have been removed.
  • Solves saves option errors.
  • The code has better structure. And it is easier for reading.


jueves, 27 de noviembre de 2008

IDE para Python

Siguiendo con mi investigación sobre Python y con el desarrollo de PyCamimg, decidí buscar un IDE para python.

Hasta ahora, estaba trabajando con emacs con su módulo de python. La verdad es que está bastante bien, pero quería un IDE que tuviese autocompletado. Tras leer unos cuantos foros y blogs, y tras unas cuantas pruebas, llegué a la conclusión que el IDE ideal para mis propósitos es eclipse + pydev.

La instalación es muy sencilla:
  1. Se descarga eclipse
  2. Se descomprime el archivo descargado
  3. Se ejecuta el eclipse
  4. Vamos al menú Help/Software Updates y añadimos la siguiente url http://pydev.sourceforge.net/updates/
  5. Actualizamos eclipse


Con eso ya tenemos nuestro eclipse listo para Python.

viernes, 21 de noviembre de 2008

Revisión PyCamimg 0.0.2

Siguiendo con el desarrollo de PyCamimg, y me aprendizaje de Python. He evolucionado PyCamimg, más que añadir funcionalidad he realizado una reestructuración del código, con lo que aquí está la versión 0.0.2.

La revisión, además de traer la reestructuración, corrige unos fallos que he detectado en la aplicación. Por otro lado estoy creando un servidor SVN para alojar el proyecto, y poder llevar un historico como Dios manda.

Aquí os dejo los enlaces al programa. En este caso podéis descargar tanto el código fuente, como un instalable para Windows.

NombrePlataformaEnlace
PyCamimg-0.0.2WindowsDownload
PyCamimg-0.0.2TodasDownload


Por supuesto, podéis enviarme cualquier sugerencia, error encontrado o, simplemente, cualquier comentario al respecto.

También os dejo el enlace a la versión anterior: PyCamimg-0.0.1

*Nota: La descarga no estará disponible las 24 horas del día, ya que es mi servidor casero y lo apago todas las noches, :D.

miércoles, 5 de noviembre de 2008

Nuevo portátil

Tras más de cuatro años (y los que le quedan) con mi portátil, llegó la hora de actualizarlo. No he mirado excesivamente, pero más o menos tenía controlado el tema. Entonces partiendo de mis requisitos, que no son excesivos, ví mi nuevo portátil LG R510 KAP51B.



Las primeras dudas llegaron por la marca, LG. No tenía referencias de nadie sobre los portátiles de LG, así que buscando en Internet, encontré unas cuantas referencias que recomendaban su uso, o por lo menos no encontraba aspectos negativos. Al final fuí, llegué y compré.

Por cierto. Ya tiene Ubuntu 8.10 en sus entrañas. :D

Especificaciones:
  • Procesador Intel® Core™ 2 Duo P8600 (2.40GHz, 1066mhz FSB, 4Mbcache LV2) centrino 2
  • Pantalla WXGA 15.4″ (1280×800)
  • Memoria RAM 3072 MB DDR2 (800 Mhz)
  • Memoria Robson 2048MB Turbomemory
  • Disco Duro 320GB SATA
  • Tarjeta Gráfica NVIDIA 9300 (Hasta 2047MB Hipermemory)
  • Refrigeración Líquida
  • Teclado Expandido
  • Webcam 1.3 Mega Píxel
  • Puertos USB 2.0, HDMI y e-SATA
  • Sistema operativo Windows Vista Home Premium Original


Aquí dejos unas fotos.




miércoles, 22 de octubre de 2008

PyCamimg 0.0.1





Español

Tras un pequeño trabajo de investigación y de adaptación a python, acabo de terminar la versión 0.0.1 de PyCamimg.

PyCamimg es un pequeño programa que renombra las fotografías realizadas de forma que el usuario puede organizar sus fotos, por ejemplo por fecha de realización de la foto. Además permite unos pequeños retoques sobre las fotografías:
  • Redimensionar la fotografía
  • Rotar la fotografía
  • Renombrar desde una numeración
  • ...

Actualmente el proyecto se encuentra en una fase Alpha, así que se puede esperar una gran inestabilidad por parte de éste, aunque he intentado que sea en el menor número de veces.
Por otro lado agradecería cualquier comentario sobre el software, ya sea sobre posibles fallos que sucedan o posibles mejoras (estoy trabajando en ambas).

PyCamimg se distribuye bajo licencia GPL v3 (http://www.gnu.org/licenses/gpl.txt). En el siguiente enlace puedes encontrar las fuentes: http://www.megaupload.com/?d=7AKU0EY0



English

After a little research work and adapt to python, just finished version 0.0.1 of PyCamimg.

PyCamimg is a small program that renames the pictures made so that the user can organize your photos, for example by date of the photo. It also allows some small touches on the photographs:
  • Resize the photo
  • Rotate the photo
  • Rename from a numbering
  • ...

Currently the project is in a phase Alpha, so we can expect a very volatile part of it, but I tried it in the fewest number of times.
On the other hand would welcome any comments about the software, either on possible faults or possible improvements to happen (I'm working on both).

PyCamimg is distributed under GPL v3 (http://www.gnu.org/licenses/gpl.txt). In the following link you can find sources: http://www.megaupload.com/?d=7AKU0EY0

domingo, 12 de octubre de 2008

Ubuntu 8.10 (Intrepid) - Primeras impresiones

Es la primera vez que hago una actualización en Ubuntu, ya que empecé a probar Ubuntu con la versión 8.04, y la verdad es que tengo que decir que ha sido una actualización algo complicada.

Desde mi humilde experiencia con Ubuntu, decidí actualizar desde "update-manager", solo que con el parámetro "-d" (update-manager -d). Rápidamente se detecta la nueva versión de Ubuntu, y simplemente con un click de ratón se pone en marcha la actualización.

La actualización es un proceso pesado, primero tiene que descargar un poco más de 1Gb de paquetes a actualizar, así que dependiendo de la velocidad de descarga así tardará. A partir de este punto es dónde empiezan los pequeños problemas.

El primer punto que no me gustó en la actualización, es la desactivación de los repositorios no oficiales. Entiendo los posibles problemas de dependencias en los paquetes, pero creo que debería dar la posibilidad de dejarlos activos.

El segundo problema que tuve, es la actualización de Grub. El análisis realizado a mi disco fué erróneo y por lo tanto al reiniciar el sistema, éste no arrancaba, ya que no encontraba la ruta del kernel. Entonces tocó iniciar a mano en grub (bendito grub).

Tercer error. El sonido, sigo sin saber que pasó con el sonido y que pasa de vez en cuando, pero el demonio de alsa, se queda colgado en algunas ocasiones, incluso en las primeras prubas con Ubuntu Intrepid, no funcionaba.

Sin embargo, no todo es malo con Intrepid. Tengo que reconocer que en la última semana se ha actualizado y corregido mucho el repositorio de Intrepid, hay que recordar que estamos ante un versión beta.

Aquí dejo el enlace de las novedades de Ubuntu Intrepid : http://www.ubuntu.com/testing/intrepid/beta#New Features since Ubuntu 8.04

viernes, 19 de septiembre de 2008

Requisitos de Office Live

Hoy me disponía a recuperar un documento de una ponencía que realizó mi director de proyecto de final de carrera basada en el mismo proyecto. Mi director me envió un enlace a un documento almancenado en su Office Live. Ya lo había recuperado otras veces sin problema alguno, pero hoy, desde el pc de la oficina me apareció el siguiente mensaje.



¡¡Requisitos!!, pero si estoy accediendo con mi firefox desde Windows 2000. Para qué necesito Windows XP para acceder a Office Live y por qué no me vale mi Windows 2000. ¿Será simplemente que Windows 2000 no tiene soporte?. ¿Será una estrategia para forzar la actualización a Windows XP?. Menos mal que la última vez, hice una copia del documento en mi Google Docs, que por cierto, es compatible (punto para Google en la batalla Web).

Quiero añadir que no este post no quiero que tome un cariz anti-Microsoft, primero porque no lo soy. Creo que Microsoft hace cosas buenas y otras no tan buenas, pero exigir tales requisitos para acceder a una página Web, sabiendos las diferencias que existen entre Windows 2000 y Windows XP.

Por cierto, aquí esta el enlace al documento: Ponencia

jueves, 11 de septiembre de 2008

Servidor de correo en Gentoo ( Postfix + Dovecot + postfixadmin + mysql)

Ya va siendo hora de ir escribiendo el primer post sobre informática. En este caso se trata de cómo montar un servidor de correo en Gentoo, aunque es facilmente aplicable a cualquier distribución de Linux.
En este caso partía con ventaja, ya que anteriormente había montado un servidor de correo de similares características pero bajo una Debian. Bajo mi humilde experiencia ambas son igual de fáciles o igual de difíciles, cuestión de gusto XD.
No quería empezar este post sin antes mencionar la gran fuente de conocimiento que me ha proporcionado gentoo-wiki.com en particular el siguiente link.

http://gentoo-wiki.com/HOWTO_Secure_Mail_Server_using_Dovecot

Instalación

Antes de instalar cualquier ebuild se debe configurar los flags que deben utilizar algunos ebuilds que son necesarios. Para ello se deben poner las siguientes líneas en el fichero /etc/portage/package.use.

Fichero: /etc/portage/package.use
net-mail/dovecot pop3d mysql
mail-mta/postfix ssl mysql mbox nis pam
mail-filter/dspam virtual-users mysql daemon
dev-lang/php apache2 concurrentmodphp hash imap mhash mysql mysqli posix postgres sqlite threads xml xmlreader xmlwriter xpm zip


Después de esto, se debe elimiar ssmtp que puede dar problemas de compatibilidad con postfix.

emerge -Ca ssmtp.

Ahora es cuando ya se pueden instalar los paquetes necesarios para montar el servidor de correo.

emerge -uD dovecot postfix clamav dspam dspam-web squirrelmail

Y por último para terminar la sección de instalación hay que ejecutar el script de configuración de dovecot.

emerge --config dovecot.

Configuración
Para la configuración del servidor no es necesario seguir el mismo orden que se ha establecido, sin embargo es el más aconsejable.

postfixadmin

Lo primero que hay que a hacer es configurar el servidor smtp postfix. No obstante, antes de empezar con la configuración pura de postfix, se instala postfixadmin, paquete muy aconsejable para la gestión de cuentas de correo.

emerge -a postfixadmin.

Con postfixadmin se consigue una fácil administración de las cuentas de correo y de los dóminios que controla el servidor de correo. Además permite otras gestiones como es la gestión de alias dentro del dominio.

Para concluir con la instalación de postfixadmin hay que aplicar el siguiente script de base de datos.

/usr/share/doc/postfixadmin-2.1.0/DATABASE_MYSQL.TXT.gz

postfix

Una vez configurado postfixadmin, es hora de configurar postfix (servidor smtp). Esta instalación está basada en la creación de direcciones virtuales y dominio virtuales, es por este motivo que se creará un nuevo directorio en el árbol de postfix. Para hacer ésto, hay que ejecutar los siguientes comandos:


  • mkdir /var/spool/postfix/virtual

  • chown postfix:postfix /var/spool/postfix/virtual

  • chmod a+rwx /var/spool/postfix/virtual



Lo siguiente que se necesita para seguir con la instalación de postfix es, conocer el uid del usuario postfix y el gid del grupo postfix. Para ésto es necesario mirar en los ficheros /etc/passwd y /etc/group.

Fichero: /etc/postfix/main.cf

smtpd_banner = $myhostname ESTMP $mail_name (Gentoo)
biff = no

append_dot_mydomain = no

alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = <hostname>
mydomain = <domain>
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain
mail_spool_directory = /var/spool/mail
home_mailbox = Mailbox
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb = $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = yes
show_user_unknown_table_name = no

virtual_transport = virtual
virtual_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_minimum_uid = <postfix_uid>
virtual_uid_maps = static:<postfix_uid>
virtual_gid_maps = static:<postfix_gid>
virtual_mailbox_base = /var/spool/postfix/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000

# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Espacio de usuario sobrepasado. Inténtelo más tarde
virtual_overquota_bounce = yes



Fichero: /etc/postfix/mysql_virtual_alias_maps.cf

user = <db_user_postfix>
password = <db_pass_postfix>
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address


Fichero: /etc/postfix/mysql_virtual_domains_maps.cf

user = <db_user_postfix>
password = <db_pass_postfix>
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'


Fichero: /etc/postfix/mysql_virtual_mailbox_maps.cf

user = <db_user_postfix>
password = <db_pass_postfix>
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'


Fichero: /etc/postfix/mysql_relay_domains_maps.cf
user = <db_user_postfix>
password = <db_pass_postfix>
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '1'


Fichero: /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = <db_user_postfix>
password = <db_pass_postfix>
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = quota
#additional_conditions = and active = '1'


Una vez que los ficheros han sido configurados, unicamente queda reiniciar postfix mediante /etc/init.d/postfix restart.

Dovecot

Configurado ya postfix (servidor SMTP), es hora de configurar el servidor IMAP / POP3. Dovecot es el encargado de gestionar las conexiones IMAP y POP3.

La configuración que se utiliza a continuación es válida para un servidor IMAP y POP3, de forma que el cliente es el encargado de decidir el método de conexión con el servidor de correo.


Fichero: /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = dbname=postfix user=<db_user_postfix> host=localhost password=<db_pass_postfix>
default_pass_scheme = PLAIN-MD5
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, <postfix_uid> AS uid, <postfix_gid> AS gid FROM mailbox WHERE username = '%u'

Fichero: /etc/dovecot/dovecot.conf
auth_verbose = yes
mail_debug = yes
mail_access_groups = mail

base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
listen = *
disable_plaintext_auth = no
shutdown_clients = yes
log_path = /var/log/mail.log
info_log_path = /var/log/mail.log
log_timestamp = "%b %d %H:%M:%S "
syslog_facility = mail
disable_plaintext_auth = no
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem
login_chroot = yes
login_user = postmaster
login_process_per_connection = yes
login_processes_count = 2
login_max_processes_count = 128
login_max_connections = 256
login_greeting = <Mensaje de bienvenida>
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
mail_location = maildir:/var/spool/postfix/virtual/%d/%n
first_valid_uid = <postfix_uid>
pop3_uidl_format = %08Xu%08Xv
auth default {
mechanisms = PLAIN
userdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot/dovecot-mysql.conf
}
user = root
count = 2
}


Para generar los certificados, simplemente hay que ejecutar:

  1. openssl genrsa -out key.pem 1024
  2. openssl req -new -key key.pem -out request.pem
  3. openssl req -x509 -key key.pem -in request.pem -out certificate.pem
  4. openssl x509 -inform der -in certificate.crt -out certificate.pem


Posteriormente se copia key.pem a /etc/ssl/private/dovecot.key y certificate.pem a /etc/ssl/certs/dovecot.pem

Postfixadmin

Al instalar postfixadmin, éste queda almacenado en el directorio /usr/share/webapp/postfixadmin dentro del que se encuentra el directorio htdoc que contiene el software de gestión. Por lo tanto se copia el contenido del directorio a la siguiente ruta:

/var/www/localhost/htdocs/postfixadmin

Cuando se haya terminado de copiar el directorio, hay que asignarle permisos especiales en apache debido a que no es aconsejable que cualquier máquina pueda acceder a esta URL. Por lo tanto hay que añadir las siguientes líneas a apache.

Fichero: /etc/apache2/vhosts.d/default_vhost.include

<Directory "/var/www/localhost/htdocs/postfixadmin">
AllowOverride All
Order deny,allow
Deny from all
Allow from 192.168.19.176/28 127.0.0.1
DirectoryIndex index.php
</Directory>


A continuación se configura el fichero config.inc.php quedando como el siguiente:

Fichero: /var/www/localhost/htdocs/postfixadmin/config.inc.php

<?php
if (ereg ("config.inc.php", $_SERVER['PHP_SELF']))
{
header ("Location: login.php");
exit;
}
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = '';
$CONF['postfix_admin_path'] = dirname(__FILE__);

$CONF['default_language'] = 'es';

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = '<db_user_postfix>';
$CONF['database_password'] = '<db_pass_postfix>';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

$CONF['database_tables'] = array (
'admin' => 'admin',
'alias' => 'alias',
'config' => 'config',
'domain' => 'domain',
'domain_admins' => 'domain_admins',
'log' => 'log',
'mailbox' => 'mailbox',
'vacation' => 'vacation',
'vacation_notification' => 'vacation_notification',
);
$CONF['admin_email'] = 'admin@<your-domain>';

$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';

$CONF['encrypt'] = 'md5';
$CONF['min_password_length'] = 5;
$CONF['generate_password'] = 'NO';
$CONF['show_password'] = 'NO'
$CONF['page_size'] = '10';

$CONF['default_aliases'] = array (
'abuse' => 'abuse@<your-domain>',
'hostmaster' => 'hostmaster@<your-domain>',
'postmaster' => 'postmaster@<your-domain>',
'webmaster' => 'webmaster@<your-domain>'
);

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';

$CONF['aliases'] = '10';
$CONF['mailboxes'] = '10';
$CONF['maxquota'] = '10';

$CONF['quota'] = 'NO';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'NO';

$CONF['transport_options'] = array (
'virtual', // for virtual accounts
'local', // for system accounts
'relay' // for backup mx
);

$CONF['transport_default'] = 'virtual';

$CONF['vacation'] = 'NO';
$CONF['vacation_domain'] = 'autoreply.<your-domain>';
$CONF['vacation_control'] ='YES';
$CONF['vacation_control_admin'] = 'YES';

$CONF['alias_control'] = 'NO';
$CONF['alias_control_admin'] = 'NO';
$CONF['special_alias_control'] = 'NO';
$CONF['alias_goto_limit'] = '0';

$CONF['backup'] = 'YES';
$CONF['sendmail'] = 'YES';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'YES';
$CONF['fetchmail_extra_options'] = 'NO';

$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';

$CONF['user_footer_link'] = "http://<your-domain>/main";

$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to <your-domain>';
$CONF['footer_link'] = 'http://<your-domain>';

$CONF['welcome_text'] = <<<EOM
Hi,

Welcome to your new account.
EOM;

$CONF['emailcheck_resolve_domain']='YES';
$CONF['show_status']='NO';
$CONF['show_status_key']='NO';
$CONF['show_status_text']='&nbsp;&nbsp;';

$CONF['show_undeliverable']='NO';
$CONF['show_undeliverable_color']='tomato';
$CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext","exchangeserver.domain.ext","gmail.com");
$CONF['show_popimap']='NO';
$CONF['show_popimap_color']='darkgrey';

$CONF['show_custom_count']=2;
$CONF['show_custom_domains']=array("subdomain.domain.ext","domain2.ext");
$CONF['show_custom_colors']=array("lightgreen","lightblue");

$CONF['theme_logo'] = 'images/logo-default.png';
$CONF['theme_css'] = 'css/default.css';

if (file_exists(dirname(__FILE__) . '/config.local.php')) { # for /
include(dirname(__FILE__) . '/config.local.php');
}


Sin embargo, antes de dejar el fichero de config.inc.php así, se debe crear una cuenta de administrador o superadministrador. Para esto lo único que se hace es poner $CONF['configured'] = false; y confirmar que existe el fichero setup.php en el mismo directorio. A continuación se abre un navegador y se introduce la URL de postfixadmin:

http://localhost/postfixadmin/setup.php



Una vez que se ha creado la cuenta se renombra el fichero setup.php a setup.php.disabled y en el fichero config.inc.php se pone a true la propiedad configured.

Referencias
http://gentoo-wiki.com/HOWTO_Secure_Mail_Server_using_Dovecot
http://panoptic.com/wiki/aolserver/How_to_generate_self-signed_SSL_certificates

lunes, 25 de agosto de 2008

Debian en Acer Aspire 2003WLMi. (Actualización del 02/08/2004)

Aquí tenéis una configuración de mi portátil en Debian. Está claro que el hw de mi portátil es un poco antíguo, pero siempre viene bien tener un punto de referencia. Por otro lado prometo que actualizaré este post con nueva información ya que ha pasado mucho tiempo desde este HOWTO.

Configuración del equipo



TipoComponentesEstadoRepresentaciónDescripción
Power ManagerACPIFuncionando
Testeando suspender, e hibernación.
RatónTouchPad (Synaptic)Funcionando
Touchpad con dos teclas, pulsación en la superficie, y un joystick de cuatro direcciones.(Por fin funciona el joystick)
Tarjeta GráficaATI Radeon Mobility 9200 (M9+)Funcionando
Funciona perfectamente con dri, glx. Sin el uso de los drivers de ATI
PantallaWXGA 15.4" con resolución de 1280x800.Funcionando
Funcionamiento correcto con XFree 4.3
Disco DuroHITACHI DK23FA-60 (60 GB)Funcionando
UDMA 100 Funciona correctamente.
DVD/CDRWMatshita DVD-RAM UJ-815AFuncionando
Funciona correctamente, software recomendado k3b o x-cd-roast.
EthernetRealtek RTL8101Funcionando
Funciona correctamente.
WirelessIntel PRO/Wireless 2100Funcionando
Wi-Fi con driver ipw2100 de Intel + hostap (para la encriptación WEP). Ahora también sin la necesidad de HOSTAP.
SonidoIntel i810Funcionando
Funcionando bajo ALSA (Con reproducción de dos sonidos simultaneos)
ModemIntel 82801DB AC'97 (winmodem)No Testeado
En pruebas
PCMCIAENE Technology Inc CB1410Hardware Detectado
No usado.
FirewireTI TSB43AB21 IEEE-1394a-2000Hardware Detectado
No usado.
USBIntel 82891DBFuncionando
Testeado con ratón USB, y Disco duro externo.
IrDASMC IrCC Fast Infrared (FIR)Funciona (Actualizado)
Testeado con mi movil Nokia 7650.
Teclas EspecialesAcer special keysFuncionando (Parcialmente)
Funcionando todas, menos BLUETOOTH, Fn+F1, Fn+F2, Fn+F3 y Fn+F4

ACPI [Inicio]


Hago uso del ACPI que se incluye en la serie del Kernel 2.6.x, en mi caso en este momento estoy con el kernel 2.6.7, si el uso de ningún parche del proyecto ACPI.
De momento conseguimos que funcione tanto el botón de apagado, y que el ordenador se apague y no se quede esperando a apagar.
Además con ACPI podemos ver el estado de bateria, procesador ..., y todo lo relacionado con el power manger.
De momento no he conseguido que funcione la suspensión ni la hibernación. Pero estoy mirando el proyecyo swsusp.


CPUFREQ


Para gestionar la velocidad de nuestra cpu, he usado el programa cpufreq, que se puede conseguir haciendo apt-get install cpufreq. Además tenemos que seleccionar la opciones en el kernel para que podamos cambiar la frecuencia de la cpu. Estas opciones son las siguientes:



[*] CPU Frequency scaling
[ ] Enable CPUfreq debugging
< > /proc/cpufreq interface (deprecated)
Default CPUFreq governor (userspace)
---><*> 'performance' governor
<*> 'powersave' governor
--- 'userspace' governor for userspace frequency scaling
[ ] /proc/sys/cpu/ interface (2.4. / OLD)
<*> 'ondemand' cpufreq policy governor
<*> CPU frequency table helpers
--- CPUFreq processor drivers
<*> ACPI Processor P-States driver
< > AMD Mobile K6-2/K6-3 PowerNow!
< > AMD Mobile Athlon/Duron PowerNow!
< > AMD Opteron/Athlon64 PowerNow!
< > Cyrix MediaGX/NatSemi Geode Suspend Modulation
<*> Intel Enhanced SpeedStep
[*] Use ACPI tables to decode valid frequency/voltage pairs
[*] Built-in tables for Banias CPUs
<M> Intel Speedstep on ICH-M chipsets (ioport interface)
<M> Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
< > Intel Pentium 4 clock modulation
< > nVidia nForce2 FSB changing
< > Transmeta LongRun
< > VIA Cyrix III Longhaul
--- shared options
[ ] /proc/acpi/processor/../performance interface (deprecated)
[*] Relaxed speedstep capability checks

Una vez que compilamos el kernel con estas opciones pasamos ahora a configurar el cpufreq,haciendo los siguientes pasos



  • $cd /sys/devices/system/cpu/cpu/cpufreq

  • $cat scaling_available_governors ondemand pwersave performance userspace

  • $echo ondemand > scaling_governor

  • $cat scaling_min_freq 600000

  • $cat scaling_max_freq 1600000


RATÓN [Inicio]


El ratón que incluye el portatil es del tipo synaptic. Para esto hacemos apt-get install synaptic y conseguiremos instalar el driver synaptic. Aun así usaremos para el control del ratón la interfaz GPM. Para más información sobre el GPM mira la página de Dmitry Torokhov's page.


Además tenemos que seleccionar las siguientes opciones en el kernel:



<*> Event interfacez
<M> Event debugging
[*] Mice
<*> PS/2 mouse
[*] Synaptics TouchPad

Cuando tengamos todo esto solo tenemos que poner la configuración del fichero /etc/gpm.conf. Y poner la configuración adecuada en la configuración de las X, que a continuación podemos ver.



Section "InputDevice"
Identifier "Touchpad"
Driver "synaptics"
Option "CorePointer" "1"
Option "Protocol" "auto-dev"
Option "Protocol" "event"
Option "ZAxisMapping" "4 5"
Option "Device" "/dev/gpmdata"
Option "UpDownScrolling" "on"
Option "LeftEdge" "1900"
Option "RightEdge" "5400"
Option "TopEdge" "1900"
Option "BottomEdge" "4000"
Option "FingerLow" "25"
Option "FingerHigh" "30"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "MinSpeed" "0.02"
Option "MaxSpeed" "0.18"
Option "AccelFactor" "0.0010"
Option "SHMConfig" "on"
Option "HorizScrollDelta" "100"
Option "VertScrollDelta" "100"
Option "Emulate3Buttons"
EndSection

Tarjeta gráfica [Inicio]

Este ha sido mi mayor problema para que funcionase correctamente. Dado que la tarjeta gráfica es una ATI Mobility Radeon 9200, lo primero fue probar con los drivers de ATI, pero no he conseguido que con los drivers de ATI funcionase el dri. Con lo que si hacemos un glxgear nos da unos resultados de entre 250 ~ 315 FPS, que es bastante bajo.

Entonces decidí probar con los driver de dri, además de ser drivers open.

Para esto debemos habilitar las siguientes opciones en el kernel:

<M> /dev/agpgart (AGP Support)
<M> ATI chipset support
<M> Intel 440LX/BX/GX, I8xx and E7x05 chipset support
[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
<M> ATI Rage 128
<M> ATI Radeon

Además hay que instalar los siguientes paquetes:

  • xfree86-common_4.3.0.dfsg.1-4_all.deb
  • xlibmesa-dri_4.3.0.dfsg.1-4_i386.deb
  • xlibmesa-gl_4.3.0.dfsg.1-4_i386.deb
  • xlibmesa-glu_4.3.0.dfsg.1-4_i386.deb
  • xserver-common_4.3.0.dfsg.1-4_i386.deb
  • xserver-xfree86_4.3.0.dfsg.1-4_i386.deb
  • x-window-system-core_4.3.0.dfsg.1-4_i386.deb
  • xlibs_4.3.0.dfsg.1-4_all.deb
  • libxt6_4.3.0.dfsg.1-4_i386.deb

Además yo instalé el paquete correspondiente que hay en http://www.freedesktop.org/~dri/snapshots/. Una vez hechoesto tenía el problema de que no arrancaba las X, con lo que reinstalé el paquete xserver-xfree86 con apt-get install xserver-xfree86 --reinstall.

A continuación muestro la configuración de la tarjeta en las X:

=== ATI device section ===
Section "Device"
Identifier "ATI Graphics Adapter"
Driver "radeon"
ChipID 0x5c61
Option "EnablePageFlip" "yes"
Option "AGPMode" "4"
Option "BusType" "AGP"
BusID "PCI:1:0:0"
Screen 0
EndSection

Para saber si está activado el dri hacemos glxinfo | grep direct.

Con esta configuración he conseguido unos registros en el glxgears de 2050 FPS.

Aquí tienes mi fichero /etc/X11/XF86Config-4

Pantalla [Inicio]

La configuración de la pantalla es bastante sencillo, sólo hay que decirle la resolución correcta. Entonces sólo tenemos que editar un fichero, que será nuestro /etc/X11/XF86Config-4.

A continuación pongo la parte del fichero para la configuración de la pantalla:

# **********************************************************************
# Monitor section
************************************************************************
# Any number of monitor sections may be present
Section "Monitor"
Identifier "Acer Panel WXGA"
#DisplaySize 330 210
HorizSync 31.5 - 91.1
VertRefresh 60 - 100
Option "DPMS"
Modeline "1280x800@60" 83.91 1280 1312 1624 1656 800 816 824 841
EndSection

Con esta configuración la pantalla funciona de vicio.

Disco Duro [Inicio]

No es necesario hacer nada en la configuración para configurar el disco duro.

Con el kernel 2.6.7

/dev/hda:
Timing buffered disk reads: 82 MB in 3.03 seconds = 27.02 MB/sec

DVD/CDRW [Inicio]

En el kernel 2.6.7 no es necesario usar la emulación SCSI, pero yo he seguido usandola, y no he tenido problemas. Así que tendríamos que en el lilo.conf append="hdc=ide-scsi"

Para la grabación, yo uso el programa K3B, o en su defecto X-CD-Roast.

Como hemos utilizado la emulación el DVD-RW estará en /dev/scd0, con lo que yo hago los siguientes enlaces:

  • ln -s /dev/scd0 /dev/dvd
  • ln -s /dev/scd0 /dev/cdrom

Las opciones del kernel que hay que habilitar son:

  • CONFIG_BLK_DEV_IDECD
  • CONFIG_BLK_DEV_IDESCSI
  • CONFIG_BLK_DEV_SR

Ethernet [Inicio]

Para configurar la tarjeta de red lo único que hay que hacer es cargar el módulo
8139too, para esto lo tenemos que tener seleccionado como módulo en el kernel.

Wireless [Inicio]

Desde el principio utilizo el driver de Intel en su desarrollo open,
que se encuentra en el proyecto ipw2100.

Lo único que hay que hacer es descargarse las fuentes, y compilarlas, para que este funcione. Pero de esta manera tiene un problema, y es que no funciona la encriptación WEP, por lo menos en la versión que utilizo ( 0.41 ).

Para solucionar el problema de la encriptación, vamos a recurrir a HOST AP DRIVER, con el que si que tendremos la posibilidad de utilizar el WEP. Para esto seguimos las siguientes instrucciones.

  1. Compilamos primero el hostap.
  2. Después compilamos el ipw2100.
  3. Por último dejamos el fichero del firmware ( ipw2100-1.0.fw ) en el directorio /etc/firmware.

Otra manera de hacer esto es aplicando parches sobre el kernel ( así es como lo tengo yo ), para esto tenemos que hacer lo siguiente.

  1. Aplicamos el parche del hostap en el kernel.
  2. Aplicamos el parche del ipw2100.
  3. Habilitamos las siguientes opciones en el kernel

    • CONFIG_IPW2100
    • CONFIG_IPW2100_LEGACY_FW_LOAD
    • CONFIG_HOSTAP
    • CONFIG_HOSTAP_PLX
    • CONFIG_HOSTAP_PCI

Nota: Con esto sólo tengo un problema, y es que cuando compilo el kernel, antes de compilar tengo que declarar una variable de entorno con el root. Esta es export HOSTAP_SRC=/<directorio_del_kernel>/drivers/net/wireless. Con esto compila perfectamente. Otro detalle a destacar es que las opciones del kernel dichas, las tengo marcadas como módulo.

Sonido [Inicio]

Para el sonido tenemos dos opciones, o bien usar ALSA, o usar
OSS. En mi caso me decanto por ALSA, ya que con alsa conseguimos
que nuestra tarjeta funcione con sonido Full Duplex, cosa que no quiere decir que podamos escuchar dos o más sonidos a la vez, sino que podemos grabar y reproducir a la vez. Para la reproducción de dos sonidos simultaneos, veremos como conseguirlo con ALSA.

Para empezar tenemos que configurar nuestro kernel con las siguientes opciones.

<*> Advanced Linux Sound Architecture
<*> Sequencer support
<*> Sequencer dummy client
[*] OSS API emulation
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS Sequencer API
PCI devices --->
<*> Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111

Para habilitar la reproducción simultanea de dos sonido tenemos que hacer los siguiente.

Tenemos que tener dentro de nuestro fichero .asoundrc lo siguiente.
#~/.asoundrc
# Everuthng sall be dmixed
pcm.!default{
type plug
slave.pcm "ossmix"
}
#OSS via aoss should d(mix)stroyed:
pcm.dsp0{
type plug
slave.pcm "ossmix"
}
#out ICE1712 dmix:
pcm.ossmix{
type dmix
ipc_key 1024
slave{
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 4096
rate 44100
}
bindings{
0 0
1 1
}
}
ctl.mixer0 {
type hw
card 0
}

Modem [Inicio]


PCMCIA [Inicio]

En este apartado me detecta el hardware, pero no he tenido la posibilidad de probar este dispositivo.

FireWire [Inicio]

Aunque no he podido comprobar el funcionamiento de este dispositivo, si que me detecta el hardware, además de activarme la red sobre el IEEE1394, con el módulo eth1394.

USB [Inicio]

Para hacer funcionar el USB, tendremos que seleccionar las siguientes opciones en el kernel.

Bus options (PCI, PCMCIA, EISA, MCA, ISA)
[*] Support for hot-pluggable devices
SCSI device support
<M> SCSI device support
<M> SCSI disk support
<M> SCSI CDROM support
[*] Enable vendor-specific extensions (for SCSI CDROM)
<M> SCSI generic support
[*] Probe all LUNs on each SCSI device
[*] Build with SCSI REPORT LUNS support
USB support
<*> Support for USB
[*] USB device filesystem
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
<*> USB Modem (CDC ACM) support
<M> USB Mass Storage support
[*] USB Mass Storage verbose debug
[*] SanDisk SDDR-09 (and other SmartMedia) support (EXPERIMENTAL)
[*] SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)

IrDA [Inicio]

Actualización 2/8/2004: Ya está configurado los irda, lo primero es saber que chipset debemos usar, en nuestro caso hemos de usar el smsc_ircc2, para esto activaremos las siguientes opciones en el kernel.

Bus options (PCI, PCMCIA, EISA, MCA, ISA)
[*] ISA support
<M> IrDA (infrared) subsystem support
--- IrDA protocols
<M> IrLAN protocol
<M> IrNET protocol
<M> IrCOMM protocol
[*] Ultra (connectionless) protocol
--- IrDA options
[*] Cache last LSAP
[*] Fast RRs (low latency)
[*] Debug information
Infrared-port device drivers --->
--- SIR device drivers
<M> IrTTY /uses Linux serial driver)
--- Old SIR device drivers
<M> IrPort (IrDA serial driver)
--- FIR device drivers
<M> SMSC IrCC (EXPERIMENTAL)

Una vez tengamos compilado el kernel, con esta opciones, tenemos que cargar el módulo smsc_ircc2,
con esto nos va a aparecer una nueva interfaz, llamada irda0, no confundir con irlan0.

Después de esto tenemos que instalar el paquete irda-utils, con el apt. Despues sólo
tenemos que escribir la siguiente instrucción: irattach irda0, teniendo cargados los módulos
irda y smsc_ircc2. Así ya está configurado el irda. Para usar la conectividad con el
móvil uso OpenObex, que obtenemos instalando el paquete openobex-apps.

Teclas Especiales[Inicio]

Para poder usar la teclas especiales de acer vamos a necesitar instalar
Acer Hotkey driver for Linux, con esto vamos a habilitar los botones, pero estos no activan nada. Para poder hacer que ejecuten un comando, vamos a utilizar Hotkeys. Entonces seguiremos los siguientes pasos.

  1. Instalamos acerhk.
  2. Cargamos el modulo creado por acerhk, con modprobe acerhk poll=1.
  3. Instalamos hotkeys (hacemos apt-get install hotkeys).
  4. Creamos un fichero en /usr/share/hotkeys/, que se llame acer_aspire_2000.def. El enlace no muestra el contenido exacto ya que es un fichero xml.
  5. Una vez creado el fichero tenemos que configurar el fichero /etc/hotkeys.conf, con el siguiente contenido.
  6. Por último arrancamos hotkeys, y ya está.


Además de las instrucciones anteriores vamos a necesitar mapear una teclas esto lo conseguimos con lo siguiente:

  • setkeycodes e03e 123 (Tecla vol+)
  • setkeycodes e03f 138 (Tecla vol-)
  • setkeycodes e071 148 (Tecla P1)
  • setkeycodes e072 149 (Tecla P2)
  • setkeycodes e012 122 (Tecla ARCADE)

Las únicas teclas que no funcionan con esta configuración son Bluetooth, Fn+F1, Fn+F2, Fn+F3 y Fn+F4.

Para no tener que mapear cada vez que iniciamos, creamos un script y lo ponemos en /etc/init.d/.