Funciones recurrentes: Bloodtraining Lógico

29 de Febrero del 2008 Escrito por José Cabo

Explicados los lenguajes esotéricos, quizás en clave de humor o quizás algo serio. Quisiera aportar algo sobre lenguajes algo más útiles. En este caso del lenguaje C aunque posiblemente aplicable a muchos otros.

No voy a expandirme pues no pienso profundizar demasiado, pero espero que la mayoría lo conozcáis o al menos sepáis en que consiste. Tenéis más información al respecto en la Wikipedia sobre la historia de este lenguaje.
funcionesrecurrentes2.png
Recientemente en clase de Programación de mi Universidad nos han enseñado un método de programación que hace uso de la recurrencia y de las funciones. Es decir, nos han enseñado las llamadas funciones recurrentes. Estas funciones son aquellas que se llaman a sí mismas hasta llegar a resolver la forma más simple de un problema. Un ejemplo de código sería:

  1.  
  2. /*Factorial de un número*/
  3. int func (int var) {
  4.     if (var==1) return 1;
  5.     else return func(var-1)*var;
  6. }
  7.  

Este método es fácil de entender, es más, no tiene mayor complicación que el hecho de entender la propia recurrencia. Pero me gustaría compartir con vosotros que fue gracias a este método que estoy desarrollando un programa capaz de calcular las tablas de verdad de un circuito lógico. Hablo de Bloodtraining Lógico (nombre todavía pendiente…). ¿Tablas de verdad?, ¿circuito lógico? Bueno… es la unión de varias cosas de estas.

Ahora, llegando al punto de hacer publicidad de mi programa relativamente útil y, después de que comprendáis el porqué de su comienzo

screenshotbloodtrainiglogico10beta1.png

El programa más que por su utilidad me sirvió para entender las funciones recurrentes y, además, para echar una mano a mis compañeros de clase que usan un sistema diferente a Windows (Bloodtraining también es compatible con Windows). Podéis acceder a Bloodtraining Lógico desde Codis, descargarlo y comprobar todas sus últimas features (Y decirme como solucionar los errores que encontréis que los hay):

  • Actualmente soporta cualquier entrada de datos de tipo: (variable1,&,variable2) en donde variable1 es a y variable2 es b.
  • Soporte de puertas: AND &; OR |; NAND /&; NOR /|
  • Además, pueden negarse las salidas tanto de las variables (variables negadas) como de las salidas (puertas NAND y NOR) escribiendo el carácter / delante de la correspondiente variable o puerta. Ejemplo: (a,/&,/b) –> Es una puerta NAND de dos entradas con la variable b negada.
  • Se permite la composición de circuitos. Ejemplo: ((a,&,b),/|,((/a,&,b),|,b)).
  • Actualmente es una rc1 pero en breve sacaré la 1.0 cuando corrija los bugs que han quedado por ahí sueltos.

Categorias: Aplicaciones, C, GNU/Linux, Multiplataforma, Software libre, Windows | 1 comentario »

Trucos para hacer diseños en CSS más rápido y mejor

17 de Febrero del 2008 Escrito por Alex Barros

Enfrentarse a crear una plantilla de diseño desde cero puede ser muy duro y desmoralizante. Por eso he reunido una serie de trucos que conviene tener a mano, para agilizar el proceso, y hacerlo algo más agradable.

Las tres reglas de oro

Lo primero y principal antes de empezar a escribir la plantilla, es definir estas tres reglas de oro del CSS. Se colocan al principio del archivo CSS, y sirven para evitar las discrepancias principales entre navegadores. Así nos evitamos más de un susto al comprobar si se ve igual en todos los navegadores.

  1. * {
  2.         padding:0;
  3.         margin:0;
  4. }
  5. body {
  6.         font-size: 76%;
  7. }
  8. img {
  9.         border-width: 0;
  10. }

Lo que hacen es inicializar todos los márgenes internos y externos a cero (de TODOS los elementos), prefijar un tamaño de letra uniforme para todos los navegadores, y eliminar el borde de las imágenes.

Conocer más sobre las tres reglas de oro del CSS.

Suelo añadir esta cuarta regla, que evita que salga un recuadro alrrededor de los enlaces al pulsarlos.

  1. a {
  2.         outline-style: none;
  3. }

(más info)

Centrar contenedores (elementos div) en CSS

Para centrar un contenedor en CSS, además de definir un ancho determinado, debemos asignar el valor auto al margen izquierdo y derecho del contenedor. Esto no da resultado en Internet Explorer, que requiere de la propiedad text-align: center. Si usamos las dos, nos aseguramos la victoria.
HTML:

  1. [...]<body>
  2.  
  3. <div id="contenedor">
  4.       <h1>Titulo</h1>
  5.       <p>Texto…</p>
  6. </div>
  7.  
  8. </body>

CSS:

  1. body {
  2.         text-align: center;
  3. }
  4. #contenedor{
  5.         text-align: left;
  6.         margin: 10px auto;
  7.         width: 80%;
  8. }

(más info)

Hacer columnas con CSS

Para crear varias columnas en un skin, debemos colocar elementos de bloque (div, ul, form…) que las representen, de forma contigua (uno al lado de otro) en nuestro HTML. A continuación, en el CSS usaremos la propiedad float, que “flota” un elemento a la izquierda o a la derecha, sacándolo del flujo de contenido.

Hay varias formas de aprovechar la propiedad float para crear columnas, algunos ejemplos:

Usando propiedad Float de CSS Usando propiedad Float de CSS
Usando propiedad Float de CSS Usando propiedad Float de CSS

Las flechas indican si se ha flotado a izquierda o a derecha, aúnque resulta bastante obvio.

Ejemplo, el código CSS para hacer que todos los elementos li de una lista, esté flotados a la izquierda, con un tamaño de 100×100 px:

  1. li {
  2.         width: 100px;
  3.         height: 100px;
  4.         float: left;
  5. }

Evitar solapamiento en la propiedad Float

Da definicion en el estándar de CSS, hace que la propiedad float saque al elemento del flujo, y provoca que el resto de elementos “lo ignoren” en muchos aspectos, como que el elemento que lo contiene no adapta su ancho para incluirlo.

Lo que quiero:
Lo que quiero
Lo que ocurre:
Lo que ocurre

Esto lo podemos solventar muy fácilmente.

Si queremos que un elemento que va a continuación de un float, no se vea afectado, le podemos dar la propiedad clear: both

Pero si el problema es que tenemos elementos “flotados”, y queremos que el contenedor los envuelva, nada más fácil que aplicar al contenedor la propiedad overflow: hidden. La explicación la encontraréis aquí

Todas las propiedades a mano

Es muy importante tener siempre las propiedades a mano, y sobretodo conocer las 95 propiedades del CSS 2.1 para conocer las herramientas de que disponemos. Podéis encontrar un agradable listado, muy bien explicado (en inglés) en CulturedCode CSS 2.1 Reference (es un recurso alucinante, muy muy útil)

Usar estructuras prefabricadas

Podremos ahorrarnos tiempo, si partimos de estructuras prefabricadas en CSS y HTML.

  • Layout Gala contiene muchas estructuras combinando tres elementos principales, cabecera y pié de página.
  • Css Easy te ofrece las principales configuraciones para skins, listas para descargar y manipular.
  • En Listmatic encontraréis muchos tipos de lista, para aplicar a menús, o a lo que queráis.
  • En CSS Showcase podréis encontrar muchos ejemplos de barras de navegación.

Plantillas ya elaboradas

Otro recurso es acudir a skins completamente elaborados, y extraer lo que nos interese de ellos. Algunos enlaces:
OpenSourceWebDesigns, FreeCssTemplates, Free-css-templates, TheStyleArchive, TemplateWorld

O recurrir a sitios donde muestran plantillas únicamente para inspirarte:
Inspirational CSS, CSSBeauty, Elegant Desighns

Por último, en del.icio.us (tag: css) podéis encontrar muchos recursos interesantes de CSS, y en Webéame (categoria diseño) otros tantos.

Categorias: CSS, Código, Diseño, Estándar, HOWTO/CóMO, HTML, Web | 7 comentarios »

Para mí, el software libre es….

16 de Febrero del 2008 Escrito por Alex Barros

Navegando entre mis feeds, he topado con un post en PuntoGeek, sobre un informe alertando de que “utilizar software de código abierto no es sinónimo de 100% de seguridad“, tratando este fenómeno de “mito

Tras leer el artículo (el informe no lo leí, porque hay que rellenar un extenso formulario para leerlo, aún no lo comprendo) publiqué un comentario que me gustaría reproducir aquí, para poder compartir con vosotros mi opinión sobre el Software Libre:

Nos olvidamos de lo esencial:

No se defiende el Software Libre por ser más seguro, ni por ser gratuito, ni por crear comunidad. Todo esto depende del proyecto en concreto (aúnque estos tres fenómenos se cumplen a menudo en el S.L. )

Defender el software libre, es defender que la cultura sea Libre. Una sociedad prospera si su cultura se comparte. Música, novelas, arte gráfico, cura de enfermedades, técnicas de fermentación…. y, por qué no? * código de programas *

Un programa software libre podrá ser inseguro, de pago y un fiasco en popularidad, pero ese código será accesible a programadores, que podrán contribuir a mejorarlo en favor de la sociedad.

Sabemos además que no es una utopía, Ubuntu está ganando cada vez más terreno, con millones de usuarios por el mundo, Firefox podría convertirse en el navegador mayoritario (ya lo es en algunas regiones) e incluso Google, Youtube o Flickr son aplicaciones montadas sobre Software Libre.

Cada un@ es libre de opinar, pero las cartas están sobre la mesa, y las evidencias nadie las puede negar.

Doy mi apollo incondicional al Software Libre, e invito a todos y todas a conocer el gran potencial de este movimiento ideológico.

Si te quieres informar más, la Wikipedia es un buen lugar para comenzar. (He mencionado que Wikipedia es Software Libre (GPL)?)

Categorias: GNU/Linux, Google, Licencias, Software libre, Ubuntu | 17 comentarios »

Lenguajes esotéricos

12 de Febrero del 2008 Escrito por Alex Barros

Hola de nuevo.

Ya hemos acabado los exámenes, y podemos volver a la carga. Para abrir boca, os presento una curiosidad que me llamó la atención hace un tiempo: los lenguajes de programación esotéricos.

Cito de la Wikipedia

Existen muchos lenguajes de programación especialmente extraños, muchos de los cuales fueron desarrollados con el propósito de resultar divertidos (en vez de útiles) para los programadores. Estos lenguajes esotéricos (o exóticos) se crean como un pasatiempo para los desarrolladores, que intentan hacer lenguajes lo más alejados de la forma de razonar humana, pero que al mismo tiempo sean Turing completos [...]

Me gustaría destacar unos pocos:

Brainfuck

El lenguaje Brainfuck (jode-cerebros) fue diseñado por Urban Müller con la intención de que fuera lo más simple posible para tener un compilado rápido y sencillo.

Consta únicamente de 8 instrucciones de un sólo carácter: incrementar y decrementar puntero, incrementar y decrementar byte apuntado, introducir byte en la corriente de salida, tomar valor del byte, y dos más para representar bucles.

Ook!

El lenguaje Ook! es una parodia del brainfuck, teóricamente diseñado para orangutanes ¿?. Las instrucciones se generan con combinaciones de las palabras (Ook., Ook?, y Ook!). Muy similar al anterior.

Whitespace

El lenguaje whitespace consiste únicamente en espacios en blanco, tabulador y línea nueva. Sorprende ver el “resaltado de código”, y pensar que eso es código fuente.

Podéis ver más de estos extraños lenguajes en la wikipedia

Categorias: Curioso, Código, Geek | 2 comentarios »

del.icio.us meneame.net RSS

Buscar:



Tagcloud

Entradas Recientes

Meta: