elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Desarrollo Web / Flicker.js - Creemos un framework web latino para node,js en: 11 Mayo 2016, 00:51 am
Que tal gente!, en esta ocasion les escribo para presentarle mi nuevo proyecto, Flicker.js.

Flicker.js en un framework web para node.js que usa la sintaxis de ES6 por ende es compatible con una version >=6.0.0 de node. Mi idea al crear este framework comenzo como una tarea personal para crear un framework desde cero en node, ya que usaba uno pero tenia ganas de ver como es todo por dentro (mi curiosidad como programador) y decidi empezarlo, luego me gusto como iba y decidi lanzarlo en NPM para ver que tal me iba. Actualmente Flicker.js esta en su version 1.0.1 y cuenta con un paquete como generador de aplicaciones (flicker-easy).

Para que vean algunas funcionalidades de Flicker.js

Código
  1.  
  2. const flicker = require('flickerjs'); /* requerir el modulo */
  3. var app = flicker(); /* iniciar la app */
  4. app.to({ url: '/'}, /* la funcion app.to recibe dos parametros, un objecto de configuracion que contiene el metodo y la url a manejar (ambos opcionales) y el callback que ejecutara al manejar la peticion*/
  5.    (req, res) => { // recibe los parametros peticion y respuesta
  6.        res.send('Hello Flicker.js'); /* envia al usuario el mensaje "Hello Flicker.js" con statusCode 200 por defecto*/
  7. })
  8.    .listen(3000); // a la escucha en el puerto 3000
  9.  
  10.  


Tambien puedes anidar routers, un ejemplo de una pequeña REST API:

Código
  1.  
  2. const flicker = require('flickerjs');
  3. const bodyParser = require('body-parser');
  4. const compress = require('compression');
  5.  
  6. let app = flicker();
  7.  
  8. app.to(compress())
  9.    .to(bodyParser.json())
  10.    .to(bodyParser.urlencoded({ extended: true }));
  11.  
  12. let api = app.Router();
  13.  
  14. app.locals.todos = [
  15.    {
  16.        description: "Lorem 0"
  17.    },
  18.    {
  19.        description: "Lorem 1"
  20.    },
  21.    {
  22.        description: "Lorem 2"
  23.    },
  24.    {
  25.        description: "Lorem 3"
  26.    },
  27.    {
  28.        description: "Lorem 4"
  29.    },
  30.    {
  31.        description: "Lorem 5"
  32.    }
  33. ];
  34.  
  35. api.to({ url:'/todos', method: 'GET'},
  36.    (req,res,next) => { /* retorna todos los todos  */
  37.        res.json(app.locals.todos);
  38. })
  39.    .to({ url: '/todos/:todo', method: 'GET'},
  40.        (req,res,next) => { /*  retorna un todo */
  41.            if(req.params.todo >= app.locals.todos.length){
  42.                next();
  43.            }
  44.            else{
  45.                res.json(app.locals.todos[req.params.todo]);
  46.            }
  47.    })
  48.    .to({ url: '/todos', method: 'POST'},
  49.        (req,res,next) => { /*  insertar un nuevo todo */
  50.            app.locals.todos.push(req.body.todo);
  51.            res.json(app.locals.todos)
  52.    })
  53.    .to({ url:'/todos/:todo', method: 'DELETE'},
  54.            (req,res,next) => { /*  borrar un todo */
  55.            if(req.params.todo >= app.locals.todos.length){
  56.                next();
  57.            }
  58.            else{
  59.                app.locals.todos.splice(req.params.todo,1);
  60.                res.json(app.locals.todos);
  61.            }
  62.    })
  63.    .to({ url: '/todos/:todo', method: 'PUT'},
  64.            (req,res,next) => { /*  editar un todo */
  65.            if(req.params.todo >= app.locals.todos.length){
  66.                next();
  67.            }
  68.            else{
  69.                app.locals.todos[req.params.todo] = req.body.todo;
  70.                res.json(app.locals.todos)
  71.            }
  72.    })
  73.  
  74. app.to({ url: '/api'},api) // anidamos el router (como una sub-app)
  75.  
  76.    .to({ url: '/'}, (req,res,next) => {
  77.        res.redirect("/api/todos");
  78.    })
  79.    .to((req,res,next) => {
  80.        res.json({}); // retorna un json vacio en caso de error
  81.    })
  82.    .listen(3000); /* listen */
  83.  
  84.  


Pueden ver el repositorio en github -> https://github.com/FlickerStudio/flickerjs

Mi propuesta es que esperaria con ansias que alguno de ustedes se anime a seguir el proyecto juntos, y compartir ideas para mejorarlo, ademas estoy cambiando muchas funcionalidades y agregando otras para que la logica sea muy diferente a la de Express, aunque ambos frameworks estan basados en Connect, pero lo que quiero es que sin importar su experiencia en nodejs, sus ideas y Pull request seran bien recibidos, en resumen, el repositorio esta a su disposicion.

Ademas, si se animas desearia que la comunidad del proyecto sea un poco grande y trasladar el proyecto completamente al español y que la documentacion, codigo y desarrollo sea por y para la comunidad hispana, desearia (aunque manejo un poco el ingles) que hubiera proyectos como estos que fueran completamente para la comunidad hispana, con su documentacion en nuestro idioma para aquellos que empiezan y no dominan el ingles.


Bueno esto es todo (un poco largo la verdad) lo que queria contarles!

*Cualquier sugerencia, opinion o critica sera bien recibida en los issues del repositorio, los Espero por ahi!!!, Happy Coding!.

2  Programación / Desarrollo Web / Ayuda con objetos de javascript (NodeJS) en: 4 Mayo 2016, 19:53 pm
Que tal gente! Les escribo porque tengo una inquietud...

Estoy creando un 'mini framework' a modo de practica en NodeJs de un servidor HTTP (mas o menos algo entre connect y express).

Tengo la función http.createServer() la cual recibe la peticion y respuesta (request y response) sabemos que request es de la clase http.IncomingMessage y response corresponde a http.ServerResponse. Lo que sucede es que quiero añadirle nuevos metodos a el objeto response, cree un prototipo de la siguientr manera:

Código:

var res = { __proto__: http.ServerResponse.prototype }

res.enviar = (msg) => {... // nuevo metodo enviar
this.statusCode = 200;
this.setHeader("Content-Type","text/html");
this.write(msg);
this.end();
}


Lo que quiero es que el objeto que recibe como parametro mi funcion CreateServer() adquiera los métodos de mi nuevo objeto.

Lo implementé de la siguiente manera pero cuando en el método enviar uso this.end() o res.end() me lanza un error de undefined relacionado con el metodo connection. Lo he cambiado por res en vez the this pero tambien me lanza el err (error asignando valor content_type a undefined):

Código:

http.createServer(request, response){
 response.__proto__ = res; // o res.prototype
 response.enviar("foo"); // aqui el error
}
3  Programación / Programación C/C++ / Perceptron Simple en C (Redes Neuronales) en: 14 Diciembre 2015, 20:33 pm
He aqui un pequeño codigo que hice iniciando en esto de las redes neuronales, no esta muy organizado el codigo ya que solo es para probar el funcionamiento...
Es un Perceptron simple-monocapa que entrena con los patrones que le ofrecemos en el vector "result[]" (OPERACIONES AND Y OR SEGUN EL VECTOR) y luego de estar entrenado con los pesos sinampticos ajustados, es capaz de entregar una salida correcta para los valores de entrada.
Si tienen alguna sugerencia o mejoramiento para la funcionalidad del codigo no duden en avisarme, Gracias!!!.

Para cambiar  a OR: el vector result debe ser  {1,1,1,-1} es decir, un vector con los valores de salida que queremos(patrones).
Código:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>

void Perceptron(){
srand(time(NULL));
float intervalos[] = {-0.98,-0.876,-0.654,-0.754,0.453,0.953,-0.322,-0.298,-0.11,-0.065,0.0234,0.232,0.2335,0.4674,0.675,0.7883, 0.752,0.823,0.9876};
float Umbral,defumbral,factor;
int i;
int x1[] = {1,1,-1,-1};
int x2[] = {1,-1,1,-1};
int result[] = {1,-1,-1,-1};
float w[2] = {intervalos[rand() % 18],intervalos[rand() % 18]};
factor = intervalos[rand() % 18];
Umbral = intervalos[rand() % 18];
defumbral = 1;
int verdad = 0;
int op;
int cont = 0;
int n = 0;
//////////// ENTRENAMIENTO DEL PERCEPTRON;
while(verdad == 0){
n++;
for(i=0;i<4;i++){
op = ((x1[i]*w[0])+(x2[i]*w[1])) + (defumbral*Umbral);
if(op >= 0){
op = 1;
}
else{
op = -1;
}
if(op != result[i]){
w[0] = w[0] + (2*factor)*(x1[i]*result[i]);
w[1] = w[1] + (2*factor)*(x2[i]*result[i]);
Umbral = Umbral + (2*factor)*(defumbral*result[i]);
}
}
for(i=0;i<4;i++){
op = ((x1[i]*w[0])+(x2[i]*w[1])) + (defumbral*Umbral);
if(op == result[i]){
cont++;
}
if(cont == 4){
verdad = 1;
}
}
if(n > 200){
printf("[!] Demasiadas epocas realizadas!\n");
printf("[!] Intente nuevamente con otros pesos sinapticos.\n");
exit(1);
}
}
/////////// MOSTRAR RESULTADOS FINALES
system("clear");
printf("\n[*] FINALIZANDO ENTRENAMIENTO...\n");
printf("[*] PERCEPTRON SIMPLE [ENTRENADO]\n");
printf("\n--------------- DATOS FINALES --------------------------------\n\n");
printf("[*] Total de epocas: (%i)\n",n);
printf("[*] Peso Sinaptico 1 w[1]\t\t--> %2.2f\n",w[0]);
printf("[*] Peso Sinaptico 2 w[2]\t\t--> %2.2f\n",w[1]);
printf("[*] Umbral(Polarizacion)\t\t--> %2.2f\n",Umbral);
printf("\n\n--------------- VERFICIACION DE ENTRENAMIENTO ------------------\n\n");
for(i=0;i<4;i++){
op = ((x1[i]*w[0])+(x2[i]*w[1])) + (defumbral*Umbral);
if(op >= 0){
op = 1;
}
else{
op = -1;
}
printf("\n[*] Entradas: (%2i,%2i) --> Salida: %2i",x1[i],x2[i],op);
if(op != result[i]){
system("clear");
printf("\n[!] Demasiadas epocas realizadas!\n");
printf("[!] Intente nuevamente con otros pesos sinapticos.\n");
exit(1);
Perceptron();
}
}
}
int main(int argc, char **argv)
{
Perceptron();
return 0;
}

En Git-hub: https://github.com/Dext3rLab/C-Examples/blob/master/Perceptron_Simple.c
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines