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


 


Tema destacado: ¿Usas Skype? Protégete de los Skype Resolver


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 208
41  Programación / Desarrollo Web / Re: consumir API en Angular en: 6 Junio 2020, 02:55
Hola, la verdad que nunca sue Angular, pero supongo que es tal simple como hacer una peticion HTTP 1.1 GET a la api en cuestion. En otros frameworks como React o Vue es tan simple como usar fetch (api nativa nativo) o axios (libreria externa y mi forma preferida de trabajar en Vue.)

Pero en Angular la cosa se complica, porque tenes que usar un services y el modulo especifico del framework.

https://angular.io/guide/http

Una pregunta, esto es una trabajo para la escuela/intituto o es por iniciativa propia? Si es el segundo caso, yo te recomendaria empezar primero con el framework Vue que es JS y esta exelentemente documentado, en dos o 3 dias lo aprendes en su totalidad y solo con la documentacion oficial.

Angular tiene la curva de aprendizaje mas elevada de todos, primero porque solo usa typescript y en segundo lugar porque no te da libertad, siempre tenes que hacer las cosas como el framework te lo impone, la famosa "angular way".
42  Programación / Desarrollo Web / Impresora Brother QL-800 y BarCode Scanner XB-2055 desde SPA con Vue. en: 6 Junio 2020, 02:46
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?
43  Programación / Desarrollo Web / Re: [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 20 Mayo 2020, 07:46
Muchas gracias.
44  Programación / Desarrollo Web / Re: [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 19 Mayo 2020, 10:16
Es cierto, normalmente se usa mysql2, de hecho es lo que usan todos los orm como Sequelize.

Pero era a modo de ejemplo, para los que recién empiezan en node. Ademas yo me acostumbre a trabajar así en express, encerrando todo en promesas, que es la forma correcta para luego usar middlewares a diferentes niveles (auth, error, routing, etc)

Citar
await trabaja con promesas. Puedes usar la instrucción para envolver valores en promesas pero en tu código, await nunca espera a que la callback de mysql.query sea llamada. Si funciona con tus get porque si regresa promesas (que se resuelven de manera asincrona).

No entendi del todo, pero las callbacks que mysql.query los uso asi por lo que te comentaba antes, para poder manejarlos mejor a nivel de middleware.

Quizás omiti el pequeño (o fundamental ) detalle de que este código esta pensado exclusivamente para usarse con el framework express.
45  Programación / Desarrollo Web / Re: Qué estructura y API utilizo para almacenar conversaciones de IA en navegador? en: 19 Mayo 2020, 09:55
1. Existe alguna api como pastebin que funcione crossOrigen sin necesidad de token y que solo deje subir archivos sin editarlos ni borrarlos?

Con "subir archivos" supongo que te referis a guardar datos, y no archivos de forma literal. No creo que exista un servicio que te permita guardar de forma anonima, porque seria un hervidero para todo tipo de actividades ilicitas...

Por que seria un problema usar tokens? Yo lo que haria seria usar Firestore.... :silbar:


2. Como almaceno en localStorage este tipo de info? Json? XML? Todas las propiedades asociadas a una clave? Una clave por cada ocurrencia?

Depende que tanta info quieras almacenar, pero yo usaría una sola clave para poder controlar mejor el limite de los 5Mb de localstorage. Meteria todo dentro de un array en JSON y luego tirar de JSON.stringify() y JSON.parse() pero supongo que eso ya lo sabes, y no voy a entrar en detalles....

Otra solucion un poco mas sofisticada seria usar idb-wrapper, como wrapper para IndexedDB y asi el limite es virtualmente infinito

PD: Que osado eso de hacer IA desde cero, yo estuve intentando aprender TensorFlow y me exploto el cerebro, pero es porque soy autodidacta, no tengo formación universitaria y por ende tampoco conocimientos de matemática muy avanzados...solo los de secundaria (bachillerato)
46  Seguridad Informática / Seguridad / Re: Como saber la direccion ip de una persona por Gmail en: 19 Mayo 2020, 08:54
Que atras quedaron esos tiempos donde con msn, un archivo grande y netstat hacias daño, ahora es todo super complicado (por suerte para los no informaticos)

Yo por eso hace muchisimos años deje el "aprendizaje del hacking" y me centre solo en aprender a programar y ser un buen desarrollador.

Y lo loco es que termine aprendiendo muchisimo mas de webhacking tratando de evitar que me rompan MIS sistemas a cuando era un adolescente lammer tratando de solo 'aprender a hackear paginas web' sin tener la mínima idea de que era SQL, PHP o JS.
47  Seguridad Informática / Seguridad / Re: Dudas servicios exteriorizados y correos en: 19 Mayo 2020, 08:41
El tema es que la gran mayoría de empresas lo que hacen es usar gmail (u otro webmail) bajo su propio dominio, cada vez menos empresas usan sus propios servidores de correo y tercerizan todo. Y aunque consigas la IP, seguramente sea dinamica, asi que puede cambiar en cualquier momento.

En cuanto al tema del IP y los mails, Gmail no envía la IP del remitente, envia la del servidor de google, en cambio Outlook o Yahoo si envian la IP original.

48  Programación / Desarrollo Web / [Aporte] Como usar MySQL en NodeJs (Codigo de ejemplo) en: 15 Mayo 2020, 03:56
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.


49  Foros Generales / Dudas Generales / Re: Es seguro la app para almacenar contraseñas en el móvil y la extensión en: 10 Mayo 2020, 19:34
Desde que la mismísima NSA fue hackeada por Shadow Brokers ningún sistema en el mundo esta a salvo  >:D

Pero de ahi a que te hackeen tu cuenta de fb o gmail....yo personalmente guardo mis contraseñas de redes y foros en el mismo chrome, sin extension y nunca tuve problemas, eso si, jamas en la vida guardaría info de mi home banking o de mi tarjeta de crédito....
50  Programación / PHP / Re: Subir Archivos con php Via SFTP en: 10 Mayo 2020, 18:38
En Windows yo uso WinSCP.

Si esta en linux con gnome podes conectarte directamente a un servidor SFTP desde el mismo nautilus. O sino podes instalar gFTP o Filezilla que tienen soporte para SFTP.
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 208
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines