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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 28
1  Foros Generales / Foro Libre / Ingenieria inversa a liquidación de prestamo con sistema frances. en: 18 Julio 2020, 05:20 am
Hola, a los que tengan conocimientos de economía o matemáticas financieras:

Es posible ingenieria inversa a liquidación de préstamo con sistema frances. Lo que quiero es determinar si es posible, en base a una liquidación dada, si puedo descubrir el monto original del préstamo y la tasa de interés. Ya que estoy en la tarea de reemplazar un sistema contable...

La liquidación de ejemplo es esta:
https://docs.google.com/spreadsheets/d/1HoESxFXjA-DqEzopP59aE9r3KwhednIC80eobAYEka4/edit?usp=sharing

Saludos y muchas gracias por su ayuda!!

2  Informática / Hardware / Qué motherboard es esta? en: 15 Julio 2020, 03:21 am
Hola, alguien sabria decirme que motherboard es esta? Le tome la foto hoy en la oficina y ya no la tengo a mano, pero no tenia el modelo por ningún lado...

3  Foros Generales / Foro Libre / Github está caido en: 13 Julio 2020, 09:57 am
Esta caido el servicio...creo que es la primera vez que pasa...todo en twitter bardeando a Microsoft  :xD
4  Programación / Desarrollo Web / [Resuelto] Cómo crear mis propios Nameservers? en: 9 Julio 2020, 03:11 am
Hola, acabo de contratar un VPS en hostinger. El tema es que esta empresa no te da nameservers con sus vps,  asi que me pregunto si es posible crear los míos propios en el vps? del tipo ns1.dominio.tld ns2.dominio.tld

Y otra duda que tengo es si es lo mismo un nameserver y un dns?
5  Programación / Desarrollo Web / (RESUELTO)[Mongoose] Me estoy volviendo loco, como hacer esto? en: 6 Julio 2020, 00:26 am
Hola, resulta que toda mi vida use Node junto con MySQL, pero ahora se me dio por usar Mongo con Mongoose en un proyecto, y me estoy volviendo loco con algo.

Tengo dos modelos. Uno es de clientes y otro de Application(que serian las veces que dicho cliente se aplico mi producto). Los 'application' tienen un campo cliente que hace referencia al id del cliente que lo compro. Yo pensaba que luego podría emular los joins de mysql, pero resulta que si no existe un un articulo para cada cliente entonces el populate no funciona, probe hacerlo con virtual, pero por lo que entendi de la doc de mongoose no funciona.

Entonces se me ocurrió hacerlo a la antigua, como trabajaba con PHP.

Primero leo todos los clientes de mi DD.BB. Y luego recorro el array con un foreach y para cada uno busco en la colección Application si existe una para dicho cliente. Pero no logro dominar la asincronia.

Lo que yo espero es que en consola se muestre algo como
Citar
00000000000000000 0000000000000000000
00000000000000000 0000000000000000000
00000000000000000 Sin Aplicaciones
00000000000000000 Sin Aplicaciones
00000000000000000 Sin Aplicaciones
00000000000000000 0000000000000000000
00000000000000000 0000000000000000000

Y luego de eso se imprima  console.log('C', C); Pero resulta que siempre se imprime antes de terminar el bucle forEach. Tengo los await en todas las llamadas a mongoose, por lo que la logica me dice que deberian ejecutarse todas las sentencias y finalmente imprimir en consola el contenido de C.

Me estoy volviendo loco, estoy a nada de volver a PHP (js y su p*ta asincronía)  :xD

Código
  1. router.get('/', async (req, res, next) => {
  2.    const clientes = await Client.find();
  3.  
  4.    var C = [];
  5.  
  6.    //Traigo la ultima aplicacion si es que tiene
  7.    await clientes.forEach(async (cliente, index) => {
  8.        const application = await Application.findOne({
  9.            cliente: cliente._id,
  10.        });
  11.  
  12.        if (application) {
  13.            console.log(cliente._id, application._id);
  14.        } else {
  15.            console.log(cliente._id, 'Sin Aplicaciones');
  16.        }
  17.    });
  18.  
  19.    console.log('C', C);
  20.  
  21.    return res.json({ ok: true, clientes });
  22. });
6  Foros Generales / Dudas Generales / descifrar links MEGA de http://safelinking.net (CLN2) en: 16 Junio 2020, 05:20 am
Hola, me pregunto si hay alguna forma de descifrar los links de mega cifrados con http://safelinking.net usando el sistema CLN2)

Llevo dias buscando y aun no encontre una forma que sirva....
7  Sistemas Operativos / Windows / No puedo instalar nada de la Windows Store en: 7 Junio 2020, 05:13 am
Hola gente, les comento que no puedo instalar nada de la Store y ya probe de todo, por ejemplo todas las posibles soluciones que se muestran en este hilo

https://answers.microsoft.com/en-us/windows/forum/apps_windows_10-winapps-appscat_games/wsresetexe-doesnt-work/25e1b624-33b3-4d8f-bbd9-3c066ae639bf

Pero sin importar que haga, siempre me sale este error cuando quiero instalar algo de la store:



Alguna otra idea o que podra ser?  mi windows  home es original, es el que vino de fabrica con mi Lenovo Legion Y520 y tiene los ultimos updates. No quiero reinstalarlo, primero porque tardaria dias en configurar de nuevo todo mi stack de desarrollo y segundo porque no quiero perder la licencia...

Edito: Alguien tiene idea si se guarda un log de ese error, para al menos ver en detalle que caraj* es lo que está fallando?
8  Informática / Electrónica / RC522 y Arduino UNO/MEGA usando IRQ (interrupts) en: 6 Junio 2020, 07:20 am
Hola, estoy aprendiendo Arduino. Tengo un lector RFID modelo RC522 y lo quiero usar con tarjetas.



Todos, absolutamente todos los ejemplos que he encontrado son usando el metodo polling, es decir meter una rutina que constantemente esté verificando si se leyo algo, dentro de la funcion loop del programa Arduino.

Mi duda es si algun heroe sin capa podria darme un ejemplo basico de como usar el pin IRQ del RC522 asi poder manejar la lectura con las interrupciones de mi Arduino. Tambien tengo un arduino Mega como opcion B
9  Programación / Desarrollo Web / Impresora Brother QL-800 y BarCode Scanner XB-2055 desde SPA con Vue. en: 6 Junio 2020, 02:46 am
Hola gente, tengo una duda algo complicada. Estoy haciendo un sistema de stock, es una SPA con Vue + una API Rest con Express. Mis dudas son dos:

1) La impresora que usare para la impresión de etiquetas autoadhesivas es la Brother QL-800, ya que es la unica que se ajustaba al presupuesto. Mi duda es si esta puede ser usada desde mi sistema como una impresora cualquiera o si o si debe generar e imprimir las etiquetas desde el software propio del equipo.(Ps Print). Si alguien ha usado una de estas o similares me vendría bien cualquier dato o experiencia.

2) Ademas de mi app necesitaria usar un lector de codigos de barra XB-2055. Supongo que en modo USB-HID (simulacion de teclado) no tendria problemas porque lo unico que hace es emular el tipeo y la pulsacion de la tecla enter al final cuando se lee un codigo. Pero me pregunto si es posible usarlo con la API WebUSB en modo USB-COM. Se que chrome soporta esta api, pero no tengo idea si podre usar mi lector (me que llegan en unos 8 dias aprox ya que soy de un pueblo del interior y compre ambas cosas por mercado libre). Alguien ha tenido ya alguna experiencia de este tipo?
10  Programación / Desarrollo Web / [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 15 Mayo 2020, 03:56 am
Hola, queria compartirles este Ejemplo basico de como implementar MySQL en Node. Usando Promesas y async/await para dominar la asincronia sin bloquear el Event Loop.

Archivo mysql.js contiene la conexión a MySQL.
Código
  1. const mysql = require("mysql");
  2.  
  3. const mysqlConnection = mysql.createConnection({
  4.  host: "localhost",
  5.  port: 3306,
  6.  user: "root",
  7.  password: "",
  8.  database: "",
  9. });
  10.  
  11. mysqlConnection.connect((err) => {
  12.  if (err) {
  13.    console.error("[DB] No se pudo conectar con MYSQL", err);
  14.  } else {
  15.    console.log("[DB] Conectado con MYSQL", mysqlConnection.threadId);
  16.  }
  17. });
  18.  
  19. module.exports = mysqlConnection;
  20.  

Archivo con la clase principal. Implementa las 5 funciones básicas de CRUD+L = Create/Crear, Read/Leer, Update/Modificar, Delete/Borrar, List/Listar

Código
  1. const MySQL = require("./mysql");
  2.  
  3. function list(table) {
  4.  return new Promise(async (resolve, reject) => {
  5.    const sql = `SELECT * FROM ${table}`;
  6.  
  7.    await MySQL.query(sql, (err, results) => {
  8.      if (err) {
  9.        console.error("[DB]", err);
  10.        return reject({ message: err, code: 401 });
  11.      }
  12.      return resolve(results);
  13.    });
  14.  });
  15. }
  16.  
  17. function get(table, id) {
  18.  return new Promise(async (resolve, reject) => {
  19.    const sql = `SELECT * FROM ${table} WHERE id=${id}`;
  20.  
  21.    await MySQL.query(sql, (err, results) => {
  22.      if (err) {
  23.        console.error("[DB]", err);
  24.        return reject({ message: err, code: 401 });
  25.      }
  26.      return resolve(results);
  27.    });
  28.  });
  29. }
  30.  
  31. function insert(table, data) {
  32.  return new Promise(async (resolve, reject) => {
  33.    try {
  34.      const fields = Object.keys(data);
  35.      const values = Object.values(data);
  36.  
  37.      if (fields.length === 0) {
  38.        return reject({ message: "Faltan datos", code: 400 });
  39.      }
  40.  
  41.      const sql = `INSERT INTO ${table} (${fields}) VALUES (${values.map(
  42.        (h) => `'${h}'`
  43.      )})`;
  44.  
  45.      await MySQL.query(sql, async (err, results) => {
  46.        if (err) return reject({ message: err.message, code: 400 });
  47.  
  48.        const insertedData = await get(table, results.insertId);
  49.  
  50.        return resolve(insertedData);
  51.      });
  52.    } catch (error) {
  53.      return reject(error);
  54.    }
  55.  });
  56. }
  57.  
  58. function update(table, id, data) {
  59.  return new Promise(async (resolve, reject) => {
  60.    try {
  61.      const fields = Object.keys(data);
  62.      const values = Object.values(data);
  63.  
  64.      if (fields.length === 0) {
  65.        return reject({ message: "Faltan datos", code: 400 });
  66.      }
  67.  
  68.      const sql = `UPDATE ${table} SET ? WHERE id=${id}`;
  69.  
  70.      const beforeUpdate = await get(table, id);
  71.  
  72.      await MySQL.query(sql, data, async (err, results) => {
  73.        if (err) return reject({ message: err.message, code: 400 });
  74.  
  75.        const updateData = await get(table, id);
  76.  
  77.        return resolve({ ...results, beforeUpdate, updateData });
  78.      });
  79.    } catch (error) {
  80.      return reject(error);
  81.    }
  82.  });
  83. }
  84.  
  85. function remove(table, id) {
  86.  return new Promise(async (resolve, reject) => {
  87.    try {
  88.      const beforeUpdate = await get(table, id);
  89.  
  90.      if (beforeUpdate.length === 0)
  91.        return reject({ message: `El elemento ${id} no existe`, code: 403 });
  92.  
  93.      const sql = `DELETE FROM ${table} WHERE id=${id} LIMIT 1`;
  94.  
  95.      await MySQL.query(sql, async (err, results) => {
  96.        if (err) return reject({ message: err.message, code: 400 });
  97.  
  98.        return resolve({ ...results, beforeUpdate });
  99.      });
  100.    } catch (error) {
  101.      return reject(error);
  102.    }
  103.  });
  104. }
  105.  
  106. module.exports = {
  107.  list,
  108.  get,
  109.  insert,
  110.  update,
  111.  remove,
  112. };
  113.  
  114.  

Esta clase no tiene ningún tipo de validación, eso se debería hacer en otra capa, como por ejemplo en el controlador con @hapi/joi.

Para usarse simplemente debe importarse este modulo desde otro e invocar a la función CRUDL, por ejemplo

Ejemplo de Uso
Código
  1. const db = require("./db.js"); // suponiendo que el archivo anterior se llame "db.js y
  2.                                           // ademas este ubicado en el mismo directorio que el presente codigo.
  3.  
  4. // Usar como funcion asincrona que debuelve un resultado o un error
  5. // Operacion CRUDL: Listar la tabla 'usuarios' completa
  6. // SIEMPRE dentro de una funcion async
  7.  
  8. async function getUsers(){
  9.    const myUsers = await db.get('usuarios')
  10.    return await db.get('usuarios')
  11.    // return await db.get('usuarios')
  12. }
  13.  
  14. console.log(getUsers())
  15.  
  16. // O usar como funciones que devuelven promesas, y gestionarla con then/cath:
  17. // Operacion CRUDL: (D) Borrar el registro de la tabla 'usuarios' cuyo id sea igual a '666'
  18.  
  19. db.remove('usuarios', 666)//Borrar usuario con id 666
  20. .then(users=>{
  21.    // Se borro el usuario, hacer algo
  22.    console.log(`Se borro el user 666`)
  23. })
  24. .catch(error=>{
  25.   console.log(error)
  26. })
  27.  

Por ultimo, como tambien hago frontend, una cosa muy util es poder deshacer cualquier accion con un solo click, por cuestiones de UX/UI es una forma muy poderosa de fidelizar al usuario.

Por eso en las consultas 'remove' y 'update' se devuelve un objeto beforeUpdate y updateData

Código
  1. "beforeUpdate": [
  2.            {
  3.                "id": 14,
  4.                "nombre": "Departamento de Coordinacion y Gestion Cooperativa",
  5.                "responsable": ""
  6.            }
  7.        ]
  8.  

Eso es muy util para revertir la ejecucion de la queri con un simple boton o 'call to action' como tiene gmail.


Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 28
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines