Ejecuta código C, Perl, Python… via web

14 de Abril del 2008 Escrito por Alex Barros

code.jpg2 Una vez más se demuestra mi teoría de que TODO puede hacerse via web, sólo se necesitan programadores dispuestos a crear el servicio.

Esta vez es el caso de un compilador/intérprete de lenguajes via web. Se llama CodePad, y admite lenguajes tan conocidos como C, C++, D, Perl, Python, Ruby y algunos más.

He hecho unas cuantas pruebas con código C rebuscado y efectivamente compila y ejecuta de forma correcta, incluso te explica los errores de código si los hay.

Una idea similar tube hace algún tiempo, pero no fructificó el proyecto, ahora me quito el sombrero ante lo que ha hecho Steven Hazel (el desarrollador). Parece ser que ha sido desarrollado en Python, y que ha puesto énfasis en la seguridad. Aún así insta a hackers que comuniquen sus éxitos.

A partir del buen servicio que ha conseguido CodePad, se podría explotar ahí una comunidad de desarrolladores muy guapa, o crear toda una plataforma web para programadores, para que cuelguen sus proyectos de Software Libre, los promocionen, interactúen, y tengan a mano herramientas tan interesantes como el compilador, o un editor de código que esté bien. Sería una idea nada despreciable.

via wwWhat’s New

Categorias: Aplicaciones, C, Código | 3 comentarios »

Apoyemos al PHP!

11 de Abril del 2008 Escrito por Alex Barros

A raíz del post anterior haciendo mimetismos entre lenguajes de programación y embarcaciones, nos encontramos con que al lenguaje de programación PHP se le asignaba una triste balsa de bambú.

PHP is a bamboo raft. A series of hacks held together by string. Still keeps afloat though.

PHP es una balsa de bambú. Unos cuantos apaños unidos con una cuerda. Aún así consigue ir a flote

Me parece un juicio muy injusto, y a los comentaristas de Boozox también!

  • Memiux: [...] un poco exagerado lo de PHP xD
  • daniel: El que diga eso de php, es que no tiene ni idea [...]
  • Jose D: [...] yo también defiendo a php que está que se sale por todos lados [...]

Coincido con todos ellos, PHP no es una triste balsa da bambú! PHP es un lenguaje muy potente sobretodo para lo que está enfocado (desarrollo de webs dinámicas). Cuenta con infinidad de funciones y bibliotecas útiles para cualquier cosa que se te pase por la mente, y de hecho un porcentaje muy elevado (la mayor parte) de las webs en internet están respaldadas por este lenguaje.

No en vano, webs como Youtube, yahoo, wikipedia, facebook, digg, flickr…. han elejido como lenguaje idóneo el PHP.

Se le acusa de provocar desorden en el código y en la estructura de los programas, pero esto es un hecho que se desprende de la habilidad y la experiencia de quien programa.

Es posible que el hecho de que la versatilidad y facilidad de PHP permita su uso a personas inexpertas, de como resultado la proliferación de código de mala calidad, pero no se puede generalizar, y declarar que en PHP se programan apaños y chapuzas.

He programado toda mi vida en PHP y jamás me ha presentado una frontera, el límite ha sido siempre mi imaginación.

Por ello quiero defender el papel de PHP, y promover su uso para cualquier tipo de tarea en internet.


Larga vida a PHP !!!!

Categorias: Aplicaciones, Código, Opinión, PHP | 6 comentarios »

Se llama Geo y es Libre

29 de Marzo del 2008 Escrito por Alex Barros

De acuerdo, voy a comentaros qué me ha tenido todo este tiempo tan ausente.

He dedicado la mayor parte de mi tiempo a desarrollar la primera versión de la aplicación Geo. Geo es una aplicación web para compartir rutas captadas con GPS.

Detrás de Geo hay toda una infraestructura de objetos y algoritmos que me ha costado mucho de elaborar (los últimos tres meses), pero puedo decir que estoy muy orgulloso del resultado, y es una base genial para continuar haciendo de Geo una herramiente potente de aquí en adelante.

Como es lógico he liberado Geo (en realidad se llama GeoGPS) con la licencia GNU/GPL, pero esta vez he querido llegar más lejos, y lo he enviado como proyecto a Sourceforge, donde tendrá todas las atenciones que un buen proyecto libre merece.

Por ahora podéis leer (y agregaros al RSS) el blog que he creado y actualizo para este proyecto, y navegar entre las casi 100 rutas con las que ya cuenta la web de Geo.

Me disculpo por la escasa actualización de este blog. Entre la universidad y proyectos como Geo, no me queda apenas tiempo… :(

Un saludo a todos!

Categorias: Aplicaciones, Código, Novedades, Software libre | 3 comentarios »

Hacer que una web no se vea en Internet Explorer

1 de Marzo del 2008 Escrito por Alex Barros

Programando una web, me he topado con esta curiosidad.

El código es el siguiente:

  1.  
  2. <head>
  3. <title>Titulo de la pagina<title>
  4. </head>
  5.  

ie7.jpgNótese que la etiqueta TITLE no se cierra correctamente.

Di con esto por accidente, pero me resultó curioso que navegadores como Firefox o Safari visualizaran correctamente la página, mientras que Internet Explorer símplemente mostraba una pantalla en blanco.

Una nueva técnica para fanáticos anti IE (qué desarrollador no lo es…)?

En cualquier caso es una falta intencionada de sintaxis, que por mucho odio que tengamos a este navegador, no deberíamos cometer.

Categorias: Bug, Curioso, Código, HTML, Internet Explorer | 4 comentarios »

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 »

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 »

Texto web con formas raras. Adios rectángulos?

20 de Diciembre del 2007 Escrito por Alex Barros

Acaba de lanzarse una herramienta del todo curiosa y particular.

Se trata de un generador de un código especial, para que en tu web el texto se acople a determinada forma o figura.

csstextwrap_2.png

Símplemente tienes que dar la forma que quieres con dos líneas (el márgen izquierdo y el derecho) y dejar que genere el código necesario.

csstextwrap.png

Aúnque no muy ortodoxa, la técnica es perfectamente accesible en términos web. Ahora, que esto desemboque en una buena idea, o en la horterada 2.0 premio a la usabilidad nula del 2007, ya no depende del sistema.

Categorias: Aplicaciones, Curioso, Código, Diseño | No hay comentarios »

Desenfoque gaussiano: cómo funciona + filtro para Imaset

18 de Diciembre del 2007 Escrito por Alex Barros

Me he propuesto realizar el filtro de Desenfoque Gaussiano, y lo he conseguido. A continuación os muestro el algoritmo, y la descarga del filtro para quienes usen Imaset 2.1

El algoritmo

El filtro gaussiano consiste en la mezcla de los colores de una imágen para conseguir un efecto de desenfoque. Esta es una explicación muy general, y por supuesto el algoritmo es más complejo que esto.

En primer lugar, consideraremos la imágen como una matriz de puntos (pixeles), con unos valores determinados de rojo, verde y azul. A partir de aquí, los valores de cada punto de la nueva imágen, serán una combinación de los puntos cercanos. De esta forma, si un punto es de color rojo, y cercano a él hay puntos negros, este rojo se oscurecerá (y los negros se enrojecerán).

Intercambio de color entre pixeles cercanos

Pero para determinar cuáles son los pixeles que son cercanos, y los que no, se debe especificar al filtro un radio de acción. Con esto, si por ejemplo indicamos un radio de 10 pixeles, cada píxel de la nueva imágen se verá modificado por los todos los pixeles a menos de 10 unidades de distancia. Pero no todos los pixeles modifican con la misma “fuerza”, cuanto más cerca estén del pixel que se está modificando, más valor tendrán en el cálculo del nuevo color. Es aquí donde aparece nuestro simpático amigo Gauss.

La función de la distribución Gaussiana va a ayudarnos a adjudicar cuánto aporta cada pixel, en función de lo cerca o lejos que se encuentre. Esta función tiene la forma distribucion_gaussiana.png donde (x-b) es la distancia entre el pixel que está siendo modificado y el píxel del que se está tomando el valor, a y c valen 1, y f(x) resulta un número Real entre 0 y 1 que representa el porcentaje de influencia.

Resumiendo

Lo que está claro es que hay que mezclar los píxeles entre sí, y que usaremos un radio de influencia en que cuanto más lejos está un píxel de otro, menos le afecta.

Después de analizar el problema, y aplicar una fórmula estadística, podemos concluir que el valor de cada pixel es:

La suma de todos los píxeles dentro del radio R, multiplicados cada uno por distribucion_gaussiana.png (tal y como se ha descrito antes), y todo esto, dividido entre la suma de todos los valores de la fórmula distribucion_gaussiana.png en los puntos que intervienen.

Y todo eso es sólo para calcular uno de los tres componentes (Rojo, Verde o Azul) de un sólo pixel.

De modo que, a falta de una fórmula mágica de optimización, el efecto de desenfoque Gaussiano no es ninguna broma, realiza una cantidad muy elevada de cálculos (que aumenta junto al Radio y al tamaño de la imágen).

El archivo de descarga

Aquí os dejo el código fuente y la descarga del filtro Desenfoque Gaussiano para Imaset 2.1
Tened en cuenta que, como he dicho, es un filtro muy costoso, y aplicarlo puede llevar bastantes segundos.

La forma de poder usarlo es: descargar el archivo ZIP, descomprimir su contenido, y subir el archivo gaussian.xml al directorio “/filters” y el archivo es_ES.php al directorio “/lang

Ejemplo del filtro Gaussiano en Imaset

GaussGauss Desenfocado
Como se puede apreciar, realiza un toque de suavizado, si se aplica poco desenfoque (poco radio).

Código fuente

Os dejo como siempre el código fuente de este filtro.

  1. <filter>
  2.         <name>gaussian_blur</name>
  3.         <category>effect</category>
  4.         <parameters>
  5.                 <pa>$rad=5</pa>
  6.         </parameters>
  7.         <function>
  8.                 if(!$rad) $rad = 5;
  9.                
  10.                 $sx = imagesx($im);
  11.  
  12.                 $sy = imagesy($im);
  13.  
  14.                
  15.  
  16.                 for($x=-$rad;$x<$sx+$dar;$x++) // meto en una matriz los valores de colores
  17.  
  18.                 {
  19.  
  20.                         for($y=-$rad;$y<$sy+$rad;$y++)
  21.  
  22.                         {
  23.                                 if($x<0 || $y<0 || $x>$sx || $y>$sy)
  24.                                         $imatrix[$x][$y] = array($imaset->Red,$imaset->Green,$imaset->Blue);
  25.                                 else {
  26.  
  27.                                         $rgb = ImageColorAt($im, $x, $y);
  28.  
  29.                                         $r = ($rgb >> 16) & 0xFF;
  30.  
  31.                                         $g = ($rgb >> 8) & 0xFF;
  32.  
  33.                                         $b = $rgb & 0xFF;
  34.                                         $imatrix[$x][$y] = array($r,$g,$b);
  35.                                 }
  36.  
  37.                         }
  38.  
  39.                 }
  40.  
  41.                
  42.                 // Ahora voy a poner valores (calculandolos previamente)
  43.                 for($x=0; $x<$sx; $x++) { // recorro el array antes construido, pixel a pixel
  44.                         for($y=0; $y<$sy; $y++) {
  45.                                 unset($su1R,$su1G,$su1B,$su2,$sue); // inicializo
  46.                                 for($i=$x-$rad; $i<$x+$rad; $i++) { // circundantes en eje x
  47.                                         for($j=$y-$rad; $j<$y+$rad; $j++) { // circundantes en eje y
  48.                                                 $sue = round(pow(2.7,-(pow(($i-$x),2) + pow(($j-$y),2)))*100,4); //valor gaussiano de peso
  49.                                                 $su1R += $sue * $imatrix[$i][$j][0]; //Sumando de rojos
  50.                                                 $su1G += $sue * $imatrix[$i][$j][1]; //Sumando de verdes
  51.                                                 $su1B += $sue * $imatrix[$i][$j][2]; //Sumando de azules
  52.                                                 $su2 += $sue;
  53.                                         }
  54.                                 }
  55.  
  56.                                 imagesetpixel($im,$x,$y,imagecolorallocate($im,round($su1R/$su2),round($su1G/$su2),round($su1B/$su2)));
  57.                         }
  58.                 }
  59.  
  60.                 return $im;
  61.         </function>
  62. </filter>

Categorias: Código, Imagen Digital, PHP, Plugins | 3 comentarios »

Efecto 3DReflect para Imaset

15 de Diciembre del 2007 Escrito por Alex Barros

Acado de crear un nuevo efecto para Imaset, el 3DReflect. Si estás usando la versión 2.1, podrás utilizar este nuevo filtro subiendo un pequeño archivo XML a la carpeta “/filters” del plugin.

El filtro

El efecto es similar al ya existente de Reflejo. La diferencia es que este efecto es tridimensional, dando un efecto de profundidad.

Cielo Abstracto

Descargas

Descarga el archivo de filtro 3DReflect y súbelo a la carpeta “/filters” para empezar a disfrutarlo.Se adjunta también el archivo de idioma Español es_ES.php, para tener la traducción de los parámetros de este nuevo plugin (súbelo a tu carpeta “/lang”).

Código fuente

Este es el código fuente del archivo XML. Todabía no he escrito la API para desarrollar filtros de Imaset, pero con este ejemplo, puede que alguien ya se atreva a intentar algo.

  1. <filter>
  2.         <name>3DReflect</name>
  3.         <category>decoration</category>
  4.         <parameters>
  5.                 <pa>$s=30</pa>
  6.                 <pa>$oi=60</pa>
  7.                 <pa>$pr=25</pa>
  8.         </parameters>
  9.         <function>
  10.                 //controlo los limites
  11.                 $s = $imaset->lim($s,300,1); //tamaño
  12.                 $oi = $imaset->lim($oi,100,5); //opacidad inicial
  13.                 $pr = $imaset->lim($pr,100,0); //profundidad
  14.  
  15.                 $sx = imagesx($im);
  16.                 $sy = imagesy($im);
  17.                 if($s>$sy) $s = $sy-1;
  18.                
  19.                 $x = $sx+2*$pr;
  20.                 $y = $sy+$s;
  21.  
  22.                
  23.                 $reflekt = imagecreatetruecolor($x,$y);
  24.                 $color = imagecolorallocate($reflekt, $imaset->Red,$imaset->Green,$imaset->Blue); //Fondo
  25.                 imagefilledrectangle($reflekt, 0, 0, $x, $y, $color); //Relleno el fondo       
  26.                 imagecopy($reflekt, $im, $pr, 0, 0, 0, $sx, $sy);
  27.  
  28.                 $reflekt = $imaset->resize($reflekt,‘200%’,); //resize al doble por mejorar calidad
  29.  
  30.                 //hago el efecto conico de reflejo
  31.                 for($i=0;$i<=$s*2;$i++)
  32.                         imagecopyresampled($reflekt, $im, $pr*2-($pr*$i/$s), $sy*2+$i, 0, $sy-(round($i/2)+1), $sx*2+2*($pr*$i/$s), 1, $sx, 1);
  33.                
  34.                 $reflekt = $imaset->resize($reflekt,‘50%’,); //resize a la mitad
  35.  
  36.                 //finalmente creo el efecto transparencia con una imagen comodin
  37.                 $bla = imagecreatetruecolor($x,1);
  38.                 $color = imagecolorallocate($bla, $imaset->Red,$imaset->Green,$imaset->Blue); //Fondo
  39.                 imagefilledrectangle($bla, 0, 0, $x, 1, $color); //Relleno el fondo
  40.                
  41.                 for($i=0;$i<$s;$i++)
  42.                         imagecopymerge($reflekt, $bla, 0, $sy+$i, 0, 0, $x, 1, 100-round($oi-($i*$oi/$s)));
  43.  
  44.                 return $reflekt;
  45.         </function>
  46. </filter>

Categorias: Código, Imagen Digital, Plugins, Wordpress | 1 comentario »

Solucionado problema del plugin Imaset 2.1

7 de Diciembre del 2007 Escrito por Alex Barros

Tienes problemas para que funcione Imaset?
Hasta ahora algunas personas tenían problemas para que el plugin Imaset en la versión 2.1 les reconociera las imágenes.

Ya he conseguido dar con el problema, y he cambiado el archivo de descarga para que sustituyáis los archivos en el plugin.

El problema que ocasionaba esto es bastante complejo de explicar, pero está relacionado con la yuxtaposición de arrays. En el código de Imaset yo había optado por usar la función array_merge(), la cual une los arrays que le pases como parámetro, pero esta función no mantiene los índices numéricos, y para la aplicación era importante que los mantuviera.

La solución es usar el concatenador básico de arrays, es decir, el operador suma.

  1. $a1 = array(5=>"ABC",12=>"DEF");
  2. $a2 = array(30=>"PPP",50=>"UIO");
  3.  
  4. $a3 = $a1 + $a2;
  5.  
  6. /*  Ahora $a3 es:
  7. a3[5] = "ABC"
  8. a3[12] = "DEF"
  9. a3[30] = "PPP"
  10. a3[50] = "UIO"  */

Categorias: Aplicaciones, Boozox, Código, PHP, Plugins | 11 comentarios »

« Entradas Anteriores

del.icio.us meneame.net RSS

Buscar:



Tagcloud

Entradas Recientes

Meta: