Usando Trello para organizar mis tareas y ser más productivo

Desde hace un tiempo estoy bastante obsesionado con lograr aprovechar más mi tiempo de trabajo, para luego disponer de un tiempo libre de manera razonable (oigo las carcajadas de mi familia y compañeros de trabajo desde la distancia…). Es decir, quiero hacer mi trabajo dentro de mi horario laboral, para que el trabajo no fagocite mi ocio. Sé que en España esto que cuento es ciencia ficción, por culpa de la cultura empresaurial que existe, pero yo al menos voy a tratar de lograr que mi trabajo ocupe el tiempo que tiene que ocupar y conseguir que todo llegue a tiempo a su entrega (otra proeza).

Una de las herramientas que siempre me han ayudado, y que siempre he usado, es una pequeña lista de tareas, donde de manera desorganizada, apuntaba las tareas que tenia que realizar. ¿Os suena una libreta y un boli?, si exactamente eso. Tras años leyendo sobre desarrollos ágiles, y como enfrentarme a mis cambios en las tareas laborales, comencé a desbordarme. Necesitaba una herramienta mejor que mi libreta.

Siguiendo las modas, si mi mente es débil, me decanté por Trello, y le vi potencia por la gran personalización que permite y que no te obliga a utilizar ninguna filosofía concreta. De hecho eso me enamoró eso mismo: Me lo podía montar como quería.

En cuanto a las columnas, tras varios cambios (y creo que no los últimos), he definido las siguientes:

  • Dump (vertedero): Directamente copiado la de metodología de StrikeThru, que trata de mantener una lista de cosas que van mas allá de la semana, y que son ideas o tareas sin fechas. Pueden estar allí indefinidamente, o ser borradas sin problemas.
  • Pendientes (semanal): Son las tareas que tienen que ser desarrolladas esta semana.
  • Hoy: Las que tengo planeadas hoy.
  • En desarrollo: Están actualmente en desarrollo. No limito el número ya que realmente hay que ser razonables y en ocasiones se tiene que hacer varias cosas a la vez.
  • Finalizados: Tareas terminadas. No se archivan hasta que pasa la semana.

Para categorizar y priorizar las tareas uso las etiquetas que se pueden asociar a cualquier tarea, junto con los colores que me indican de manera visual si son importantes. En mi trabajo diario, siempre hay tipos de tareas que son más prioritarias que otras, por lo que las he categorizado y puesto una prioridad. Por ejemplo: “Clientes” tiene prioridad alta, “Proyectos” se le asigna normal, etc…  Aunque también es posible generar etiquetas tipo “urgente”, “alta”, “normal” o “sin prisa” para indicar la prioridad, y generalizar todos los trabajos.

En cuanto a los comentarios de cada una de las tarjetas, suelo usarlas para dejar alguna información importante, aunque no son muy habituales e indicar cuales son las vueltas a la vida de las tareas terminadas durante su revisión.

La metodología que desarrollo fija el periodo de tiempo que utilizamos en una semana. Esto provoca dos acciones que ocurren todos los lunes:

  1. Revisar todas las tares terminadas en la columna de “Finalizados”, y archivar todas las que se den por terminadas. En el caso que una tareas vuelva de los vivos (“Zombie”) se indica con el texto de la entrada y se indica en un comentario la hora de su vuelta a la vida.
  2. Creo todas tareas que conozco que tengo que desarrollar durante la semana.
  3. Si es posible, paso alguna de las tareas del Dump a la columna “Pendientes”.

En la columna “Dump” se pueden meter tareas en cualquier momento, por lo que suele crecer y decrecer a lo largo de la semana, pero NO permito que entren en la de “Pendientes” hasta su revisión.

Ahora viene la parte divertida: también esta permitido saltarme todo el proceso anterior (sin abusar, claro), y os preguntareis: ¿Entonces para que tanto follón?, pues porque la vida es así, y tener una flexibilidad controlada permite que sea mucho más realista, en cuanto al día a día.

Y esto es lo que hago, si os puede ayudar en algo (a lo mejor a hacer lo contrario que yo hago) pues me alegro mucho.

Please follow and like us:

HOW TO: Unir mucho shapefiles en un solo shapefile con GDAL en Windows

Si trabajas con cartografía es normal que te den un montón de shapefiles como respuesta a “necesito el vectorial de una zona”, y en algunos casos (en el mío) no es manejable cuando su número es mayor de 1000 ficheros.

Para unir todos los ficheros, y de paso borrando las geometrías repetidas, podemos usar la fabulosa herramienta ogr2ogr del paquete GDAL, que puedes obtener desde el instalador de la OSGeo4W que nos permite instalar de manera sencilla GDAL compilado para Windows. Creo que esta parte es suficientemente sencilla como para explicarla, pero si hay dudas, deja un comentario.

Una vez instalado, entramos en “Inicio > OSGeo4W > OSGeo4W Shell”, y vamos a la ruta donde tenemos la montonera de shapefiles. Y creamos el siguiente fichero “.bat” dentro del mismo directorio:

@echo off
mkdir merged
set counter=0

setlocal ENABLEDELAYEDEXPANSION

for %%f in (*.shp) do (
	if not exist merged\mergedFilter.shp (
		echo Uniendo %%f
		ogr2ogr -f "ESRI Shapefile" merged\mergedFilter.shp %%f
	) else (
		echo Uniendo %%f - Iteracion !counter!
		ogr2ogr -f "ESRI Shapefile" -update -append merged\mergedFilter.shp %%f  
		if !counter! GTR 500 (
			echo Simplificando %%f
			ogr2ogr -f "ESRI Shapefile" merged\mergedFilterAux.shp merged\mergedFilter.shp -sql "SELECT * FROM mergedFilter GROUP BY id_parcela" -dialect sqlite
			del merged\mergedFilter.*
			ren merged\mergedFilterAux.* mergedFilter.*
			set counter=0
		)
	)
	set /A counter=counter+1
)

Este código tendrás que adaptarlo a tus necesidades, por ejemplo lo nombres de los fichero y demas, pero te cuento lo que hace:

  • Va leyendo todos los fichero del directorio donde se ejecuta
  • Une el fichero con un fichero que se va creando dentro de “merge/mergedFilter.shp”
  • Cada 500 uniones, borra todas las features que tengan el mismo “id” (en tu caso puede que sea diferente y tengas que usarlo comprobando la geometria).

Le das unas horas, y al final tendrás un fichero Shapefile gigante… pero al menos uno.

Please follow and like us:

Pantalla en blanco tras actualizar OwnCloud 7 a 8

Quien me mandaría a mí… si algo funciona no hay que tocarlo. O eso me dicen habitualmente. Pero no puedo remediarlo, tengo que actualizar mis servidores.

Vayamos la grano, mi pequeña Raspberry Pi B+ llego a casa para funcionar como mi almacén online para ficheros, y utilicé Owncloud como software que instalar, junto con Ngnix. Todo funcionaba, aunque va algo lento porque uso SQLite, en vez de MySQL (creo que al final lo vamos a probar en la pequeña Raspberry). Una de las cosas más chulas es que tiene un actualizador automático (tipo WordPress) para cada versión… y claro, soy un vago y lo uso siempre.

En este caso, aparece una actualización pero no me dio y cuenta de que vamos a dar un salto de la versión 7 a la 8 (lo que me hubiera echado para atrás), por lo que lanzo la actualización sin pensar… un rato después todo termina sin problemas, voy a la pagina principal y página en blanco. A tomar por cu…

Hago una busqueda por internet, y en la primera entrada, la primera en la frente: Actualizar no esta tan fácil, si tiene activados el calendario o el gestor de contactos, aquello no funciona. Así que hay que deshabilitarlo, y a funcionar. Solo hay que lanzar estos comandos en el shell de linux:

sudo -u www-data php occ app:disable calendar
sudo -u www-data php occ app:disable contacts

No te tengo que explicar que hay que usar el usuario del servidor web (en mi caso www-data) y tener un usuario con permisos de “sudoer”. Y a disfrutar de una nueva versión.

Please follow and like us:

Compilar Openlayers 3 en Windows, sin morir en el intento

Si eres programador, trabajas sobre SIG, y por desgracia, tienes que hacer clientes SIG Web, creo que conocerás la solución “Openlayers” que nos hace la vida mas sencilla a todos los que nos peleamos a diario con esto…

Openlayers 3 Logo

Openlayers 3

El salto de la rama 2.x a la 3.x ha sido muy dura. Incluso compilar, desde el código fuente, la rama 3.x es bastante complicado (si vemos como se trabajaba en la version 2.x). Y recompilar el código es una necesidad cuando no paran de encontrarse errores y pequeños fallos (recordemos que estamos en una beta). Errores como por ejemplo el que se comenta en este hilo respecto del manejo de las capas “ImageStatic” como fuente de las imágenes.

Bueno pues manos a la obra.

Requisitos:

Os dejo una lista, instala todos por defecto y que estén en el disponibles en el PATH:

  • Git
  • Node.js
  • Python 2.6/2.7
  • Java 7 (yo usé el JRE)

Una cosa muy curiosa es que Python se tiene que instalar en “C:\Python27” o “C:\Python26” o no funcionará este sistema.

Git haz tu trabajo

Nos traemos el repositorio entero de OL3 desde Github (te recomiendo una ruta corta, tipo “C:\ol3” que es la que voy a usar a lo largo del manual):

git clone https://github.com/openlayers/ol3.git

Esto tardará un rato… es la hora del café!

Dependencias… y algo de magia

Bien, ahora comprobamos si tenemos todo lo que necesitamos:

C:\ol3>build.py checkdeps
Program "./node_modules/.bin/cleancss" seems to be MISSING.
Program "git.exe" seems to be present.
Program "C:Python27\Scripts\gjslint.exe" seems to be MISSING.
Program "C:\Program Files\jsdoc3\jsdoc.cmd" seems to be MISSING.
Program "./node_modules/.bin/jshint" seems to be MISSING.
Program "C:Python27\python.exe" seems to be MISSING.
Program "C:phantomjs-1.9.7-windows\phantomjs.exe" seems to be MISSING.
For certain targets all above programs need to be present.

Fue bonito mientras duró (no iba a funcionar a la primera 🙂

Pero vamos a realiza un par de comandos que nos van a arreglar el asunto:

npm install

Instalará bastantes cosas… otro café?. Por último:

C:\ol3>c:\Python27\Scripts\easy_install.exe http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz
C:\ol3>c:\Python27\Scripts\easy_install.exe pystache 

Y… redoble de tambores:

C:\ol3>build.py checkdeps
Program ".\node_modules\.bin\cleancss.cmd" seems to be present.
Program "git.exe" seems to be present.
Program "gjslint.exe" seems to be present.
Program ".\node_modules\.bin\jsdoc.cmd" seems to be present.
Program ".\node_modules\.bin\jshint.cmd" seems to be present.
Program "python.exe" seems to be present.
Program ".\node_modules\.bin\phantomjs.cmd" seems to be present.
For certain targets all above programs need to be present.

Y ahora la parte más difícil…

… Compilar. Hay mucho fallos en la versión para Windows de los scripts, por lo que hay que bucear un montón por los foros de GitHub para encontrar la solución a problemas en los scripts (rutas largas, directorios que no existen, rutas linux, etc…) yo lo he conseguido, con los scripts siguientes:

Scripts ol3-fix

Descomprime en el raíz del repositorio de Openlayers, y ya puedes lanzar el build.

C:\ol3>build
2014-10-23 11:57:44,256 build/ol.css: .\node_modules\.bin\cleancss.cmd css/ol.css
2014-10-23 11:57:44,424 build/ol.js: node tasks/build.js config/ol.json build/ol.js
info ol Parsing dependencies
info ol Compiling 333 sources
2014-10-23 11:58:06,733 build/ol.js: uncompressed:   406514 bytes
2014-10-23 11:58:06,733 build/ol.js:   compressed:   121282 bytes, (saved 70.17%)
2014-10-23 11:58:06,734 build/ol-debug.js: node tasks/build.js config/ol-debug.json build/ol-debug.js
info ol Parsing dependencies
info ol No compile options found.  Concatenating 333 sources
2014-10-23 11:58:10,434 build/ol-debug.js: uncompressed:  3276814 bytes
2014-10-23 11:58:10,436 build/ol-debug.js:   compressed:   603658 bytes, (saved 81.58%)

Sólo busca en el directorio “build” por las versiones de “debug” y “compressed”.

Referencias:

Please follow and like us:

NET: Como convertir el CLR una app en “AnyCPU” en “32bits”

Os propongo un escenario:

  • Aplicación desarrollada en .NET, hace mucho tiempo, y a decir verdad, con la mitad de los conocimientos que tenemos ahora.
  • Por desgracia, se compiló como “AnyCPU” (lo que se ha demostrado como un error a lo largo del tiempo).
  • Ahora lo lanzas, y te encuentras con un: “Error en microsoft.jet.oledb.4.0”. Tras leer, te das cuenta que esto se arregla recompilando en “x86”
  • … Solo tengo el ejecutable, y unas horas para presentar el programa (música de terror de fondo…)

Bueno, pues hay un trucoquillo para marcar un ejecutable de .NET, compilado en AnyCPU, como un ejecutable x86, ya que realmente, solo hay que cambiar un campo en la cabecera (más o menos). ¿Cómo?, ahora te lo explico:

  • Doy por sentado que tienes el SDK de desarrollo del NET o el Visual Studio en cualquier de sus sabores (con el componente “Developer Tools -> Windows Development Tools -> .NET Development Tools” instalado)
  • Te metes en: “Program Files\Microsoft SDKs\Windows\v6.1\Bin” (ojo el v6.1 es para NET 3.5, para NET 4.x cambiará obviamente) y allí tienes que encontrar un fichero “corflags.exe”.
  • Ejecutas:
    corflags /32bit+ <RutaATuEjecutableANYCPU>

    Y tachán. Ejecutable en 32bits :).

Referencias:

  • http://stackoverflow.com/questions/1507268/force-x86-clr-on-any-cpu-net-assembly
  • http://stackoverflow.com/questions/242304/where-should-i-download-corflags-exe-from
Please follow and like us:

Geoserver en entorno de producción (VI): Cacheando mediante MapProxy

Logo MapProxy

Si os fijáis, tener un servidor de mapas no es “ligero”, ya que por defecto, genera todas la capas al vuelo, reproyecta y cambia de formato… ¡Aunque pidamos dos veces lo mismo!.
Por lo tanto: usa mucha cantidad de CPU, memoria y incluso disco. Si pensamos en subirlo a la nube, y usar el Amazon para servir tus mapas, por poner un ejemplo, tendrías que pensar en controlar mucho el consumo  y de no encontrarnos con alguna sorpresa en la factura de algún mes.

Pero esto tiene solución, claro. La idea es cachear el trabajo, y lo vamos a hacer mediante un servicio de proxy geoespacial que guardará los mapas generados para no tener que volver a generarlos y gastar tiempo/recursos. Para esta tarea, usaré “MapProxy ya que es el desarrollo mas maduro y versátil que he encontrado. Está montado sobre Python, y su montaje es “relativamente” sencillo, si tienes una buena guía, como esta, por ejemplo.

Preparar el entorno

Empecemos, vamos a instalar todo lo necesario para empezar. Utilizaremos nuestro querido “apt-get” para bajar todas la librerías que necesitamos.

sudo aptitude install python-imaging python-yaml libproj0 libgeos-dev python-lxml libgdal1-dev python-shapelyy build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev

Aparte, bajamos la herramienta de creación de un entorno independiente de Python. ¿Que hace esto?, pues generar un entorno virtual Python dentro de un entorno real de Python, para que nos entendamos, tener siempre una versión de Python, aunque en el sistema este cambie.

wget https://raw.github.com/pypa/virtualenv/1.7.1.2/virtualenv.py

Creamos el entorno virtual, y le damos permisos para poder escribir sin ser root. Este paso no es necesario, pero es muy cómo para trabajar desde cualquier usuario normal.

virtualenv /var/local/mapproxy/venv
chmod ugo+x -R /var/local/mapproxy/venv

En este momento ya disponemos de un entorno virtual Python, y se encuentra dentro de “/var/local/mapproxy“, y lo usaremos  para trabajar e instalar MapProxy.

Para activarlo (esto significa que usaremos el Python virtual, no el real), tendremos que ejecutar el comando “source“. Si no hacemos este paso, será como si no existieran todas las herramientas que vamos instalar posteriormente. Por lo tanto este paso es muy importante.

source /var/local/mapproxy/venv/bin/activate
# Fijate como ha cambiado el prompt, y nos indica que estamos en un "venv" o entorno virtual.
(venv)admin@svrmapas:~$
# Si queremos salir del entorno virtual, NO lo uses aun, usa este comando:
deactivate

Usando PyIP para dejar nuestro Python perfecto

Este herramienta, que en adelante llamaremos PIP, es como el “apt-get” pero solo para Python. Es muy sencilla de usar, y de verdad, nos facilitará la instalación de todas las librerías Python. Pasemos a instalar todas las librerías:

pip install https://bitbucket.org/olt/pil-2009-raclette/get/default.tar.gz # Para uso avanzado de PNG
pip install flup # Servidor fcgi
pip install MapProxy
# Si MapProxy necesita dependencias que no tienes, se las bajará.
# Esto puede tardar.

Configuración básica para MapProxy y test del servicio

Ahora creamos una configuración por defecto para MapProxy. Esto es una configuración por defecto que consulta unos mapas (creo recordar que del OpenStreetMap, pero no estoy seguro) y nos sirve para testar que nuestra instalación de MapProxy funciona. No voy a entrar mucho más allá, pero puedes consultar el manual de MapProxy para configurarlo.

mapproxy-util create -t base-config /var/local/mapproxy

Vale, tenemos la configuración básica, pero quiero ver algo. La gente de MapProxy son muy listos y nos permiten lanzar un servicio de test, solo usando herramientas de Python.

cd /var/local/mapproxy
# Yo le he pasado la ip y el puerto de escucha ya que tengo un Tomcat
# escuchando por el puerto 8080 que es el defecto que usa.
mapproxy-util serve-develop -b 192.168.0.100:8081 mapproxy.yaml

Con este comando, tendremos un servidor escuchando por el puerto 8081, es decir se podrá acceder a dicha cache mediante la URL:

http://192.168.0.100:8081/service?

Este servicio lo podremos testar mediante el uso de algún cliente GIS que tenga soporte para WMS, como por ejemplo “gvSIG” que permite la consulta a servidores WMS.

Ahora, a producción

Ahora habrá que utilizar, algún método para desplegar el servicio de caché de manera que de el mejor rendimiento. Yo he optado por FastCGI sobre un servidor “Apache2”, ya que estoy muy familiarizado con este sistema, pero hay muchas otras formas de hacerlo como indican en la documentación oficial y en otras guías.

sudo apt-get install libapache2-mod-fcgid

Ahora creamos un fichero “mapproxy.fcgi” con el siguiente texto:

#!/var/local/mapproxy/venv/bin/python
# WSGI module for use with Apache mod_wsgi or gunicorn
# # uncomment the following lines for logging
# # create a log.ini with `mapproxy-util create -t log-ini`
# from logging.config import fileConfig
# import os.path
# fileConfig(r'/var/local/mapproxy/log.ini', {'here': os.path.dirname(__file__)$

from mapproxy.wsgiapp import make_wsgi_app
application = make_wsgi_app(r'/var/local/mapproxy/mapproxy.yaml')

if __name__ == '__main__':
    from flup.server.fcgi_fork import WSGIServer
    WSGIServer(application).run()

En este script, hay varias cosas a destacar:

  • La primera linea tiene que indicar donde está el fichero de python del entorno virtual. NO vale con el python que tiene instalado el servidor, ya que no tendrá instalada ninguna de las librerías anteriores.
  • Esta línea: make_wsgi_app(r’/var/local/mapproxy/mapproxy.yaml’) indica donde esta el fichero .yaml donde has configurado todas las capas que consultara MapProxy. Esto es muy extenso y te recomiendo el manual de la web de MapProxy.

Tras esto configuramos el servidor web Apache, incluyendo esta línea al final de fichero “/etc/apache2/mods-available/fcgid.conf“:

[...]
# Tiene que tener la configuración del módulo arriba
ScriptAlias /mapproxy /var/local/mapproxy/mapproxy.fcgi

Y ahora un paso muy oscuro, tiene que poner como propietario al usuario que maneja el servidor web de TODA la carpeta de MapProxy. No sé si se podrá solo dar permisos en ciertos lugares, pero es lo único que me ha funcionado.

chown apache /var/local/mapproxy/ -R

Reinicia Apache, y ahora tendrás que tener accesible la web de prueba de MapProxy en “http://server/mapproxy” y el servidor WMS está en “http://server/mapproxy/service?“.

Otra guerra, es la configuración correcta para servir mallas… no me veo con fuerza hoy de escribir, ya que ese si sería un gran manual.

Documentación usada:

Please follow and like us:

Corrigiendo el error de “Automatic crash report generation” al arrancar Ubuntu 11.10

Se que soy un poco pijo para mis instalaciones de Ubuntu, pero detesto que muestre fallos en los arranques, y uno muy curioso que está dándome en una instalación nueva de Ubuntu Server 11.10 es que muestra un error al arrancar “Automatic crash report generation” dejando un error marcado en la consola.

Este servicio, el que provoca el error, es Apport, y es el encargado de generar reportes de error cuando una aplicación se sale de manera no controlada y no tiene un sistema propio de reporte de errores.

Para solucionar esto, solo hay que hacer:

sudo nano /etc/default/apport  # Poner a 1 el campo "Enabled"
sudo reboot

Tras esto no tendrías que tener más ese maldito error en pantalla.

Please follow and like us:

Backup rápido entre máquinas con rsync

Aunque no voy a entrar en profundidad en el tema de como montar un servidor rsync, ya que hay muchos manuales y es muy sencillo de montar en un servidor Linux, os voy a dejar mi receta, rápida, para montar un backup de una máquina remota en otra mediante rsync y sin muchos problemas.

Esto lo suelo usar para replicar información importante que siempre necesita tener un backup idéntico. No hace copias incrementales, si no un espejo de lo que hay en un disco a otro. Si el usuario borra una carpeta, en el backup también se borrará. Pero hay scripts para hacer copias incrementales con rsync por internet… no tardarás en encontrarlos.

Partimos que tenemos una máquina con rsyncd configurado y funcionando, pues para hacer un backup rápido, solo hay que hacer:

rsync -Eavz --delete-after --stats --progress --password-file=/etc/rsync.pass /directorio/a/salvar/ rsync://rsync@megaNAS/CompartidoRsync/

Como verás he indicado un directorio donde se almacena el password para el servidor rsync remoto, que no es más que un fichero con el password en texto plano. Pero es importante que tenga los permisos solo para el usuario.

chmod 600 /etc/rsync.pass

Se que lo ideal es montar un follón de certificados para que no te pida password, pero con un fichero nos ahorramos todos los problemas. Ahora metemos esta linea en el fichero de crontab… y ya está.

Please follow and like us:

Error “svn export failed” en WebSVN al hacer un tarball

Pero que complicado es esto… y desesperante. Lograr tener todo perfecto y sin ni una mancha 😛

Logo de WebSVNHoy vamos a luchar contra un “bug” (no se si se puede decir que sea culpa del script) de WebSVN en su rama 2.3.x. Si no conoces este software/script/web, es una pequeña página web que usa PHP, que permite acceder a un servidor Subversion desde una página web muy amigable. Este programa tiene la característica de hacer un zip/tar con el código fuente y bajarlo desde esta web… salvo si pones acentos en algún fichero. Entonces tendremos un bonito error que pondrá algo como:

svn export failed [...]

En ese momento piensas: “Seguro que es una chorrada de configuración de la web”. Mal, compañero, mal. Siguiendo una lógica deductiva busque si era un error de WebSVN, luego de Subversion, luego de Apache, luego de PHP y luego del sistema operativo. Obviamente, y como ocurre en estos casos, era un error en conjunto.

La causa, básicamente, es que Apache siempre arranca con las “locale” asignas a “C”, y obviamente, WebSVN lanza Subversion con dichas “locale” lo que hace que no sepa interpretar los caracteres acentuados y eñes (que están en UTF-8).

¿Como arreglarlo?, así de fácil o de complicado (como quieras verlo):

// Fichero websvn/include/setup.php
//
// Busca la línea 329 mas o menos, donde habrá algo del tipo:
setlocale(LC_ALL, '');
// Cambialo a:
setlocale(LC_ALL, 'es_ES.UTF-8');
// Añade esta línea
putenv('LC_ALL=es_ES.UTF-8');

Si no codificación de caracteres no es la misma, pues pon la que tenga tu equipo (ejecuta un “locale” en la consola).

Hecho.

Referencias:

Please follow and like us:

De imagen a ICO con Paint.Net

Muchos ya conocemos este magnifico sustituto del clásico (e infravalorado) Paint de Windows, el Paint.NET.
Y todos los que tenemos que sufrir a diario los pequeños retoques de imágenes que aparecen en los “quehaceres” diarios de un programador, agradecemos su existencia y su sencillez.

Pero como siempre, me he encontrado un problema… no conoce el formato ICO, ni ofrece ningún soporte para este formato, que tanta falta hace en Windows. Por lo que, de serie, el programa no los puede editar, ni trasformar de un formato hacia el formato .ico.

Gracias a dios, la gente de Paint.NET, ofrece la posibilidad de desarrollar plugins sobre su programa y como no, un programador, relleno el hueco desarrollando un plugin.

Para poder usar el formato ICO hacemos lo siguiente:

Pantalla de exportación a ico/ani/cur

  1. Vamos a esta dirección y bajamos la dll (Icon/Cursor Format Support). Demos las gracias al autor, por tan maravilloso plugin.
  2. Metemos esta dll en el directorio “FileTypes” del directorio de instalación de Paint.NET.
  3. Ahora podemos exportar a .ico/.cur/.ani cualquier imagen, y crear ficheros con varias resoluciones (dentro de un fichero la imagen se guarda con varias resoluciones lo que lo hace aun más potente), mediante un sencillo menú.
Please follow and like us: