Artículos con etiqueta «programacion»
Tutorial de CouchDB
Hoy vengo a hablar de CouchDB, una base de datos que no es precisamente nueva ni es precisamente famosa, pero que en mi opinión tiene unas características únicas
Seguir leyendo
WebAssembly para tontos (usando Rust)
Este post usa Emscripten para generar WebAssembly con Rust. Hoy día Emscripten no es necesario, pero no he podido actualizar el tutorialUna de las cosas que más me han sorprendido del mundo web en estos años fue el proyecto WebAssembly. Un proyecto que pretendía traer un bytecode unificado para navegadores. Un proyecto que permitiría compilar prácticamente cualquier lenguaje a la web sin necesidad de tocar JavaScript
Triángulo de Sierpinski en JavaScript
Un amigo me propuso esta mañana que viera un vídeo de Numberphile, concretamente uno titulado Chaos Game. El vídeo es bastante interesante y habla de como de una aparente aleatoriedad es posible sacar fractales y patrones regulares. Esta misma mañana al llegar a casa y antes de comer me he picado y me he puesto a implementar el algoritmo en JavaScript usando el Canvas de HTML5. El resultado lo tenéis aquí:
Seguir leyendo
http://adrianistan.eu/sierpinski/
Y el código que lleva es el siguiente:
const COLOR_LIST = ["red","green","yellow","pink","brown","purple","cyan","blue","orange"];
function punto(x,y){
var p = {
x:x,
y:y
};
return p;
}
function puntoMedio(p,q){
var m = {
x: Math.round((p.x+q.x)/2),
y: Math.round((p.y+q.y)/2)
};
return m;
}
function getRandomColor(){
return COLOR_LIST[Math.floor(COLOR_LIST.length * Math.random())];
}
function dibujarPunto(ctx,p,size){
ctx.fillStyle = getRandomColor();
ctx.fillRect(p.x,p.y,size,size);
}
function $(id){
return document.getElementById(id);
}
function get(id){
return Math.round(document.getElementById(id).value);
}
function main(){
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var interval;
$("start").addEventListener("click",function(){
var size = get("size");
var vertex = [punto(get("a-x"),get("a-y")),punto(get("b-x"),get("b-y")),punto(get("c-x"),get("c-y"))];
let p = punto(get("s-x"),get("s-y"));
dibujarPunto(ctx,p,size);
interval = setInterval(function(){
var q = vertex[Math.floor(3*Math.random())];
p = puntoMedio(p,q);
dibujarPunto(ctx,p,size);
},get("speed"));
});
$("stop").addEventListener("click",function(){
clearInterval(interval);
});
$("reset").addEventListener("click",function(){
ctx.fillStyle = "white";
ctx.fillRect(0,0,600,600);
});
}
window.addEventListener("DOMContentLoaded",main);
Con distinto número de vértices existen otros fractales, también muy chulos. Incluso en el vídeo de Numberphile realizan un fractal con un gran parecido a una hoja de helecho, usando dos triángulos y una ligera modificación del algoritmo¿Nos vemos en la LechazoConf?
El próximo sábado 27 de mayo tendrá lugar en Valladolid la LechazoConf. Uno de los mayores eventos de informática de la región
Seguir leyendo
Anrokku, un videojuego tipo puzzle
Anrokku es un juego de puzles que he programado estas semanas. Las reglas son simples, somos una ambulancia y tenemos que salir del parking debido a una emergencia. Desafortunadamente el parking es un caos y los coches bloquean la salida. Tu labor es ir moviendo los coches para lograr que la ambulancia salga del parking. Y cuantos menos movimientos hagas mejor
Seguir leyendo
Mandando paquetes ICMP ECHO personalizados con Python
Estos días he estado experimentando un poco con una característica de las redes. En concreto he intentando ver si era posible lanzar un paquete a la red cuyo origen es una dirección broadcast y el receptor, al mandar la respuesta, lo hiciera sin darse cuenta a todos los equipos de la red. Esto en efecto podría usarse para inutilizar una red por Denial of Service
Seguir leyendo
La belleza de MIPS
Todos los ordenadores, móviles y en general, cualquier dispositivo que lleva software necesita un procesador. Los procesadores se agrupan por familias, familias de procesadores que se programan igual, en un lenguaje llamado ensamblador. La más popular es Intel x86, presente en cualquier PC y en algunos móviles, tablets y servidores. Pero no voy a hablaros hoy de x86, ni de ARM, sino de MIPS. El ensamblador hecho bello. Adentrémonos en este mundo. Si nunca has visto ensamblador, este es tu momento. Si ya lo has visto, quizá te apetezca recordar algunas cosas
Seguir leyendo
¿Qué pasa con Elixir?
Desde hace un tiempo oigo a bastante gente hablar de Elixir. Elixir es un lenguaje de programación de propósito general que vio la luz en 2011. Con bastantes aspectos de un lenguaje de programación funcional y dinámico, está especificamente diseñado para manejar la concurrencia. Se ejecuta sobre la máquina virtual BEAM, originalmente diseñada para Erlang y es capaz de ejecutar código métodos escritos en Erlang sin ninguna complicación extra. Además dispone de un sistema de compilación llamado mix, un gestor de paquetes llamado hex y la forma de escribir documentación es similar a Python (existe help(método), ¡aleluya!). Elixir además dispone de hot swapping, es decir, permite cambiar el código en ejecución sin necesidad de parar el programa. También le caracteriza tener un buen soporte a operaciones asíncronas
Seguir leyendo
Novedades de C++17
Después de tres años de trabajo, C++17 ha sido finalmente estandarizado. Esta nueva versión de C++ incorpora y elimina elementos del lenguaje, con el fin de ponerlo al día y convertirlo en un lenguaje moderno y eficaz. El comité ISO de C++ se ha tomado muy en serio su labor, C++11 supuso este cambio de mentalidad, que se ha mantenido en C++14 y ahora en C++17, la última versión de C++
Seguir leyendo
Tutorial de Rocket, echa a volar tus webapps con Rust
Previamente ya hemos hablado de Iron como un web framework para Rust. Sin embargo desde que escribí ese post ha surgido otra librería que ha ganado mucha popularidad en poco tiempo. Se trata de Rocket. Un web framework que propone usar el rendimiento que ofrece Rust sin sacrificar la facilidad de uso de otros lenguajes
Seguir leyendo