Art trade

Art Trade
Art Trade

Con https://twitter.com/jm_amante02 😀

 

Anuncios

Iniciando MySQL manualmente en Windows

¿¡DONDE ESTA MYSQL!?
¿¡DONDE ESTA MYSQL!?

No me diga, tenia su servidor MySQL corriendo en una flamante máquina con Windows 10 y no solo le cayó una actualización que forzó el reinicio de la computadora (pese a que tenia desactivadas las actualizaciones automáticas) y ahora el proceso MySQL no funciona, el administrador de tareas no muestra el proceso mysqld y peor aun el servicio MySQL ya no aparece en la lista de servicios del sistema.

Antes que se desespere, le prenda velas a San Isidoro de Sevilla y reinstale la máquina rezando que pueda rescatar la base de datos directo del disco y con el mal presentimiento que esto puede volver a pasar hay algo que debo decirle.

Sabias palabras si alguna vez las hubo
Sabias palabras si alguna vez las hubo

Si bien es poco probable que pueda volver a crear el servicio MySQL (si sabe como digame por que yo gaste casi una semana tratando de hacer eso) y en efecto esa actualización caerá de nuevo haga lo que haga le puedo decir como arrancar el servicio MySQL de nuevo en una forma muy sencilla.

Para esto necesita hallar un par de rutas en su sistema, la ubicación del ejecutable mysqld y el archivo .ini de configuración.

Aqui esta mysqld
Aqui esta mysqld

Mysqld usualmente estará en

C:\Archivos de programa\MySQL\MySQL Server 5.5\bin\mysqld.exe

Obviamente la ruta cambiara según el idioma de su sistema y la versión de MySQL instalada, pero esa ruta le servirá para empezar a buscar.

Aqui esta el my.ini
Aqui esta el my.ini

Ahora necesita el archivo de configuración my.ini, este por defecto lo encontrará en

C:\ProgramData\MySQL\MySQL Server 5.5\my.ini

Como con mysqld la ubicación de este archivo puede cambiar dependiendo de la versión de MySQL y de su sistema pero esa es la ubicación por defecto, también recuerde que C:\ProgramData es un directorio que normalmente se encuentra oculto por lo que si no lo ve ponga haga visibles los directorios ocultos primero.

Ya que tenga esas dos rutas anotadas cree el siguiente comando:

“” –defaults-file=””

Que basado en el sistema donde me paso quedaría asi

"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.5\my.ini"

Este comando le permitirá iniciar el servidor MySQL indicándole a este cual archivo de configuración desea usar.

Ya que lo tenga abra el Administrador de tareas y vaya a la opción “Crear nueva tarea”, copie el comando que creo al campo Abrir e indique que desea crear esa tarea con privilegios administrativos.

Ejecutamos el comando.
Ejecutamos el comando.

¡Y listo!, tras eso volverá a ver corriendo el proceso mysqld y la base de datos volverá a estar disponible y las aplicaciones que dependían de esta volverán a funcionar.

La gran desventaja de iniciar así el MySQL es que si reinicia la máquina deberá de volver a correr el comando, por el momento no conozco una solución confiable para remediar eso.

Como una recomendación adicional antes de correr el comando confirme que no halla otro proceso mysqld corriendo, esto puede pasar si intento forzar el servicio a arrancar, en ese caso esta corriendo, pero con los datos de instalación no con su base de datos, por lo que debe de terminarlo antes correr el comando.

Espero que la información aquí le fuera útil y nos vemos en la próxima entrada.

Entrega via dron

Entrega via dron
Entrega vía dron

Bueno, si una empresa de jugos pudo mas que duplicar su valor en la bolsa con solo implicar que hibán a usar tecnológica blockchain (para hacer jugos…) ¿Pueden culpar a un expy descarado de Amazon/compañía de tecnología genérica (eso es Optimus TAAS si se preguntaban) de aprovecharse de la manía por los drones y ofrecer envío vía “drones”, donde por “dron” entiendase un muy ingeniosamente rebautizado repartidor, hey técnicamente NO es publicidad engañosa :P.

Agradecimiento especial a https://twitter.com/mlopcadraws cuyo comic https://lifeofmiguel.tumblr.com/post/162076842615/prevandoodles-lifeofmiguel-quick-where-are fue la inspiración de este.

Transcript

Entrega vía Dron

Panel 1
Narrador: Asi que Optimus TAAS ya arranco sus entregas vía drones
Narrador: ¿Seria bueno hacer una prueba, no Hash?

Panel 2
Narrador: Si la entrega es con un vehículo aéreo no tripulado eso implica que no habrá nadie al abrir la puerta….
Narrador: Util para todos los que no quieran molestarse en arreglarse para recibir a alguien.
Narrador: O arreglarse en general…

Panel 3
Narrador: O ponerse algo encima después de bañarse…
Narrador: Muy conveniente. ¿no?

Panel 4
Narrador: Así que abre la puerta..

Panel 5
Narrador: ¡Y saluda al la nueva categoría de empleados de Optimus TAAS!, los ya conocidos repartidores ahora rebautizados “drones”

Narador: De modo que si es una entrega via dron, no se que habias pensado…

Panel 6
Narrador: Inspirado por: https://lifeofmiguel.tumblr.com/post/162076842615/prevandoodles-lifeofmiguel-quick-where-are

 

 

Sobre las operaciones funcionales en NetBeans

Mensaje de NetBeans
Si tu lo dices…

Desde hace un par de versiones cuando ando haciendo alguna función que busque en un arreglo en Java es comun que NetBeans me suguiera el uso de operaciones funcionales, con un mensajito que dice “Can use functional operations” y ok he oido que la programación funcional tiene sus ventajas con respecto a multiproceso y hacer el código mas legible, aunque en ese ultimo caso tengo una pregunta que hacer…

Es esto:

ventas.stream().forEach((venta) -> {
 estados.stream().filter((estado) -> (Objects.equals(venta.getPc(), estado.getPc()))).filter((estado) -> (estado.getPcStatus() != 5)).forEach((_item) -> {
  imprimibles.add(venta);
 });
});

¿Mas legible que esto?

for (PcUltimaVentaVO venta: ventas) {
 for (PcStatusVO estado: estados) {
  if (Objects.equals(venta.getPc(), estado.getPc())) {
   if (estado.getPcStatus() != 5) {
    imprimibles.add(venta);
   }
  }
 }
}

Cierto la conversión automatizada que hace NetBeans tal vez no sea la mas elegante, sin mencionar que no estoy del todo familiarizado con los metodos stream y filter del Java, pero aun así no creo sea buena idea dar esa recomendación aun..

De paso si hay alguien mas familiarizado en como hacer programación funcional en Java, ¿Como se supone se debe escribir la versión funcional del código de arriba?, compila y funciona pero seguro hay una forma mas elegante de escribirlo, o al menos legible.

¡Fusión!

¡Fusión!
¡Fusión!

En caso de que vean el archivo y les extrañe que de golpe llegue hasta el 2011 es por que ya fusione ese blog con mi blog previo, chance esto cause un par de entradas repetidas por aquí por halla, pero la verdad si que quería tener todo en un solo sitio 😛

De las virtudes de la pereza

Pereza
Pereza

Bien dijo Bill Gates “Siempre elijó a una persona perezosa para hacer el trabajo difícil, por que probablemente encontrará la forma mas fácil para llevarlo a cabo” y si bien implicó aprender como funcionan las anotaciones, la reflexión y genéricos de Java creo ya me libre de una de las partes mas tediosas de leer una base de datos MySQL en Java ya esa esa donde tiene que andar..

objecto.setCantidad(data.getInt("cantidad"));
objecto.setCantidad(data.getDouble("iva"));
objecto.setCantidad(data.getDouble("precio"));
objecto.setCantidad(data.getDouble("ganancia"));
objecto.setCantidad(data.getDouble("ieps"));
objecto.setCantidad(data.getString("codigo"));
objecto.setCantidad(data.getInt("ventas"));
objecto.setCantidad(data.getDouble("ganancia"));
objecto.setCantidad(data.getDouble("iva22"));
objecto.setCantidad(data.getDouble("iva12"));
objecto.setCantidad(data.getDouble("iva21"));
objecto.setCantidad(data.getInt("nuevo_version"));
objecto.setCantidad(data.getString("clave"));
objecto.setCantidad(data.getString("ruta1"));
objecto.setCantidad(data.getString("ruta10"));
objecto.setCantidad(data.getInt("activo"));

Que es simple y practico hasta que tiene una tabla con 50 campos *todos* necesarios en el programa..

Con suerte aplicando las tres características del Java ya mencionadas este paso se puede simplificar y básicamente hacer en automático, el como se hace lo pondré después (ya que termine unas pruebas mas y vea si puedo hacer esas explicaciones en formato de comic), pero mientras deje pongo en forma resumida algunos de los hallazgos.

  • Crear anotaciones en Java es mucho mas sencillo de lo que parece, aunque hay que tener cuidado con @Retencion y @Target.
  • En tiempo de ejecución puede saber los miembros de una clase, las anotaciones tanto de la clase como de los miembros y mas importante la información contenida.
  • Los genéricos en Java tampoco son ciencia de cohetes, unas cosas requieren hacerse de una forma diferente a la usual, pero no es nada del otro mundo y es mejor que estar haciendo conversiones de clases a cada rato.
  • Eso de la reflexión puede entrar en conflicto con los getter y setter, mas que nada por que los miembros suelen ser privados y llamar a los getter/setter con una cadena de texto esta a una letra mayúscula incorrecta de un error muy feo, pero para eso esta Apache BeanUtils que se encarga de eso.
  • Usar Object como clase intermedia (o puntero generico) parece ser menos peligroso de lo que pensaba
  • Aunque la notación de Genericos en Java suele ser < E >lo que va entre los < > puede ser cualquier cosa, como por ejemplo < claseGenerica > o algo mas legible.

Haciendo esto puede automatizar la consulta y pasar la información a un objeto Java y muy posiblemente automatizar la creación de los comandos update e insert de MySQL.

Tal vez se pregunte por que no usar un framework que ya haga eso como podría ser Hibernate y si bien es una posibilidad es un poco pesado para lo que necesito y tarda mucho en iniciar.

Ya veremos como hacer todo esto próximamente, por lo pronto espero que algo de aquí le fuera de utilidad y nos vemos en la próxima :).