Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Dext3rCode

#1
Cita de: engel lex en 11 Mayo 2016, 03:38 AM
si estás creando un framework latino por qué usas un nombre en inglés y que a demás es bien asociado con un servicio estadounidense hijo de yahoo? :s

no entiendo el valor de "latino" aquí

Hermano, antes que todo Saludos!
En primer lugar, el nombre proviene de 'parpadeo' en ingles por ser un framework rapido ( rapido como un parpadeo) .

Como dije anteriormente, el software nació como una practica personal por lo que mi intención era solo crear un paquete NPM (preferiblemente en ingles) y por eso esta desarrollado en dicho idioma.
PERO, como expuse en el articulo, mi intención es transformar el proyecto en uno latino (cambio de nombre, idioma de desarrollo, comunidad, etc.) pero primero, la comunidad que lo desarrolle debe ser hispana. Por eso el motivo del artículo, para que sean ustedes que decidan a que se transforme el proyecto.

Gracias por tu comentario y espero haberte aclarado cualquier duda, pero sobre todo, disculpas!.
#2
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 (javascript) [Seleccionar]


const flicker = require('flickerjs'); /* requerir el modulo */
var app = flicker(); /* iniciar la app */
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*/
   (req, res) => { // recibe los parametros peticion y respuesta
       res.send('Hello Flicker.js'); /* envia al usuario el mensaje "Hello Flicker.js" con statusCode 200 por defecto*/
})
   .listen(3000); // a la escucha en el puerto 3000




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

Código (javascript) [Seleccionar]


const flicker = require('flickerjs');
const bodyParser = require('body-parser');
const compress = require('compression');

let app = flicker();

app.to(compress())
   .to(bodyParser.json())
   .to(bodyParser.urlencoded({ extended: true }));

let api = app.Router();

app.locals.todos = [
   {
       description: "Lorem 0"
   },
   {
       description: "Lorem 1"
   },
   {
       description: "Lorem 2"
   },
   {
       description: "Lorem 3"
   },
   {
       description: "Lorem 4"
   },
   {
       description: "Lorem 5"
   }
];

api.to({ url:'/todos', method: 'GET'},
   (req,res,next) => { /* retorna todos los todos  */
       res.json(app.locals.todos);
})
   .to({ url: '/todos/:todo', method: 'GET'},
       (req,res,next) => { /*  retorna un todo */
           if(req.params.todo >= app.locals.todos.length){
               next();
           }
           else{
               res.json(app.locals.todos[req.params.todo]);
           }
   })
   .to({ url: '/todos', method: 'POST'},
       (req,res,next) => { /*  insertar un nuevo todo */
           app.locals.todos.push(req.body.todo);
           res.json(app.locals.todos)
   })
   .to({ url:'/todos/:todo', method: 'DELETE'},
           (req,res,next) => { /*  borrar un todo */
           if(req.params.todo >= app.locals.todos.length){
               next();
           }
           else{
               app.locals.todos.splice(req.params.todo,1);
               res.json(app.locals.todos);
           }
   })
   .to({ url: '/todos/:todo', method: 'PUT'},
           (req,res,next) => { /*  editar un todo */
           if(req.params.todo >= app.locals.todos.length){
               next();
           }
           else{
               app.locals.todos[req.params.todo] = req.body.todo;
               res.json(app.locals.todos)
           }
   })

app.to({ url: '/api'},api) // anidamos el router (como una sub-app)

   .to({ url: '/'}, (req,res,next) => {
       res.redirect("/api/todos");
   })
   .to((req,res,next) => {
       res.json({}); // retorna un json vacio en caso de error
   })
   .listen(3000); /* listen */




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!.

#3
Cita de: MinusFour en  4 Mayo 2016, 20:22 PM
Cambiar el prototipo de un objeto en runtime no es lo ideal. El error no es relacionado a herencia, sino el hecho de que las funciones flecha no ofrecen contexto de objeto, lo que significa que no tienen this. Una función normal debería funcionar (aunque no estoy seguro si haya algún otro error).

Si quieres extender un objeto yo usaría Object.assign
Código (javascript) [Seleccionar]

var respuesta = Object.assign(Object.create(response), res);
//res = objeto con las funciones a extender
//response = el objeto inyectado en la funcion
respuesta.enviar('foo');







@MinusFour Hermano muchisimas gracias, estaba dandole vueltas por que no funcionaba y me acabas de llevar a la respuesta. Muchas Gracias!

Algo que anadir es que implemente el codigo de la siguiente manera:

Código (javascript) [Seleccionar]


// en el archivo response.js --->

var response = Object.assign(Object.create(http.ServerResponse));
response.enviar  = function enviar(str){ ... // nuevo metodo enviar };
// otros metodos

module.exports = response;




y en mi funcion handle que recibe los parametros 'req' y 'res' ==>

Código (javascript) [Seleccionar]


var handle = function(req,res){
var respuesta = Object.assign(res,response);
/*
siendo claramente res el parametro y response mi nuevo objeto
*/
respuesta.enviar("Hola");
}


Es decir, tuve que omitir la parte de Object.Create en el 'asign' para que heredara los metodos anteriores porque sino solo creaba un nuevo objeto con los nuevos que yo cree y agregaba los demas en ejecucion segun los llamaba.

Al parecer esto porque con el create creaba uno nuevo y lo pasaba por parametro pero si pongo el objeto tal cual, hereda todo lo que traia mi parametro 'res'.


De Nuevo muchas gracias y esto lo dejo por si alguien quiere trastear con el codigo de la mismo forma que lo estoy haciendo.


#4
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:



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):



http.createServer(request, response){
response.__proto__ = res; // o res.prototype
response.enviar("foo"); // aqui el error
}
#5
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).

#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