CRySoL GNU Install Party v3.2

— [ edit | raw ] migrated from node/860

Tengo el gusto de informaros de la celebración de la próxima Install Party de CRySoL que se celebrará en la Escuela Superior de Informática los días 22 y 23 (viernes y sábado).

Divide y vencerás

— [ edit | raw ] migrated from node/858
Esta receta pretende dar a conocer al lector en qué consiste la técnica de diseño de algoritmos “divide y vencerás”. Para ello se incluyen a continuación unas breves nociones teóricas y un ejemplo práctico sencillo.

¿En qué consiste la técnica “divide y vencerás”?

En el mundo de las ciencias de la computación es una técnica de diseño de algoritmos que consiste en resolver un problema a partir de la solución de subproblemas del mismo tipo, pero de menor tamaño. Si los subproblemas son todavía relativamente grandes se aplicará de nuevo esta técnica hasta alcanzar subproblemas lo suficientemente pequeños para ser solucionados directamente. Por último, habrá que combinar las soluciones obtenidas en los subproblemas para obtener la solución del problema inicial.

Estructura del algoritmo en versión recursiva

El pseudocódigo del algoritmo Divide y Vencerás en versión recursiva es el siguiente:

    DYV(int tamaño){
         if(facil(tamaño))
             return (resolver(tamaño))
         else{
             dividir(tamaño)
             //Suponemos j divisiones
             return (combinar(DYV(n1), ..., DYV(nj)))
         }
      }

Estructura del algoritmo en versión iterativa

El pseudocódigo del algoritmo Divide y Vencerás en versión iterativa es el siguiente (yo personalmente he visto muchas más veces implementada la versión recursiva que esta iterativa):

    DYV(int tamaño){
         while(tamaño >= 1){
              for(i=1; i<=k; i++)
                   s[i] = resolver(ni);
              combinar(s);
              modificar(tamaño);
         }
    }

Ejemplo sencillo de la técnica “divide y vencerás” en C

Se trata de solucionar el siguiente problema:
Diseñe un algoritmo “Divide y Vencerás” que calcule xn (x elevado a n) con un coste O(n log n).

   int exponencial_n(int base, int exponente){

	int resultado_parcial;
	int exponente_actual;

	switch(exponente){
		case 0:
			return 1;
		break;

		case 1:
			return base;
		break;

		case 2:
			return (base * base);
		break;

		default:
			exponente_actual = exponente/2; /*Dividimos a la mitad*/
			resultado_parcial = exponencial_n(base, exponente_actual);

			if(exponente % 2 == 0)
				return resultado_parcial*resultado_parcial; /*si el exponente es par*/
			else
				return resultado_parcial*resultado_parcial*base; /*si es impar*/
	}
}

Bibliografía

  • “Divide y vencerás”, Ampliación de programación. ESI. Miguel Angel Redondo.
  • Divide y vencerás

Revista Begins

— [ edit | raw ] migrated from node/857

Queria contar de una revista de habla hispana de libre distribucion dedicada al software libre.

Kicad: Conclusiones

— [ edit | raw ] migrated from node/856
Como lo prometido es deuda y yo prometí hace unos meses que probaría el paquete kicad y después os contaría mis experiencias, pues aquí estoy dispuesto a cumplir como está mandao…

Impresiones personales

Bueno, pues después de varios meses utilizando kicad para un proyecto mas o menos profesional y partiendo desde cero, tanto en la captura de los esquemas como en la creción de algunos componentes que no existian en las librerías, he de decir que los resultados me han sorprendido gratamente.

Ésta suite de diseño electrónico, está compuesta básicamente por un editor de esquemas electrónicos, un editor de PCBs, un editor de asociaciones componentes-huella (para el diseño del PCB) y un visor de archivos GERBER. Todo está centralizado bajo un mismo interfaz, desde el que abriendo el archivo de proyecto se puede acceder a todas las partes del proyecto (captura, PCB, etc…..)

El proceso de captura, con ésta herramienta es cómodo y bastante fácil. No hay mucho que contar aquí. Los menús son intuitivos y bastante cómodos. Para la selección de huellas en el proceso de fabricación del PCB, se lanza otra aplicación que permite ir buscando componente a componente, la huella mas apropiada a nuestras necesidades. Así mismo, también puede hacer una prebúsqueda de candidatos para dichas huellas, que unas veces con mayor acierto, otras con menos, pero facilita pelín el trabajo.

A la hora de la creación del PCB, la herramienta cuenta con un algoritmo de posicionado automático de componentes, que aunque no sirve para mucho, al menos viste ;-)
Al igual que antes, también tengo que decir que es intuitiva y fácil de usar. Basta con cargar la netlist generada por las dos herramientas anteriores y él solo busca todos los componentes y los coloca en el PCB. Nuestro único trabajo es ubicar los componentes estratégicamente según necesitemos y tratando siempre de facilitar el trabajo del rutado.

En cuanto al rutado, me ha dejado gratamente impresionado. Hay que decir que le puede llevar bastante tiempo, incluso horas, aunque eso dependerá de la rejilla que hayamos elegido. A menor espaciado, mas tiempo, porque tenemos mas posibilidades de rutado.

El algoritmo genera un rutado bastante bueno, pudiendo especificarle el espacio mínimo entre pistas (clearance). Siempre será necesario repasar el PCB a mano y modificar alguna pista, algo inevitable, pero en general el proceso es bastante rápido.

Como conclusión, kicad me ha parecido una buena herramienta para captura de esquemas y diseño de PCBs, mas recomendable que otras herramientas como por ejemplo gEDA o pcb.

Algunas fotillos

Aquí dejo algunas capturas de pantalla del proyecto en el que he estado trabajando con kicad. Especialmente quiero enseñar los resultados obtenidos con PCB.

Espero que os gusten.


Solo me queda decir que proximamente enviaré a una factoría en Japón los Gerber de los PCBs que diseñé para que me los fabriquen. Cuando lleguen prometo contaros que tal es el resultado final. ;-)

Buenísimo

— [ edit | raw ] migrated from node/855

Al menos a mi me ha hecho reir….

"Amara" por fin en Debian

— [ edit | raw ] migrated from node/853

Desde el pasado día 8 de febrero, y con la inestimable ayuda de nuestro developer local (Paco Moya), amara ya es paquete Debian oficial. Amara es un toolkit sencillísimo para tratamiento de XML, con soporte de DOM, SAX, XPath, etc y todo de una manera muy “pythonica”. Nunca fue tan fácil tratar documentos XML.

Router «chupachups» en GNU/Linux

— [ edit | raw ] migrated from node/852

Un “router chupachups” (más conocido como router on a stick) es una máquina que ruta tráfico entre dos o más redes que coexisten en la misma red física. Eso se consigue normalmente por medio de VLANes (aunque éste no es el caso). Es decir, es un router con una única interfaz de red.

Ya está disponible en la plataforma de formación del CESLCAM el curso Molinux 3.2

— [ edit | raw ] migrated from node/851
Días después de la presentación de la nueva versión 3.2 Hidalgo del software libre de Castilla-La Mancha, Molinux, se ha puesto a disposición de todos los ciudadanos el curso de formación online de esta versión, una iniciativa gratuita del Gobierno regional a través del Centro de Excelencia de Software Libre de Castilla-La Mancha (CESLCAM), perteneciente al Parque Científico y Tecnológico de Albacete.