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 - rub'n

#211
Hardware / Re: UPS para servidor Dell
23 Abril 2020, 13:54 PM
Cita de: Boogie en 23 Abril 2020, 13:08 PM
Hola amigos. Tengo un servidor DELL EMC R6415 en mi domicilio. En mi barrio hay microcortes de luz, se suele ir durante 1 o 2 segundos durante la noche una vez por semana, o una vez cada dos semanas. Es raro pero ocurre desde hace un par de años.

Tengo un SAI donde conecto el router (para evitar que cambie la IP, ya que necesito que sea constante) y dos PCs, pero no funciona con el servidor (creo que me comentaron que por el tipo de onda).

He visto algunos UPS pero son tremendamente caros y no sé si son más de lo que yo necesito.

Busco uno que lo mantenga encendido durante ese segundo de caída y, si lo protege de picos de tensión, mejor.

Gracias

Yo tenias este APC Power-Saving Back-UPS Pro 1500 230V, de 1500Voltiamperios
#212
Seee, colabora con mas detalles, para ayudarte, si hay soluciones. tu disco duro quizás tenga todo, y solo fue el windows que se jodio.
#213
Java / Re: Traducir este código de C# a Java
22 Abril 2020, 22:58 PM
Cita de: TickTack en 22 Abril 2020, 22:19 PM
Hola rub'n,

y qué hay del método Zip.Decompress? Lo dejo como tú me lo compartiste? En caso de ser así ya me larga error en esta línea:


try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);

El error es: Missing ')'.

Cómo podría solucionarlo?


Muchísimas gracias por tu ayuda y saludos

Que estarás haciendo? esta con código C# aún o que? yo probé eso antes de ir por ahí pegando y copiando, extraño que pase eso.

Escribe tal cual lo que te puse, es try-with resources, y te indica tal cual que te falta un parentesis.

try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);  el código no termina ahí, falta mas, prueba como te lo puse.

Tip, ten paciencia.
#214
Java / Re: Traducir este código de C# a Java
22 Abril 2020, 21:47 PM
Cita de: TickTack en 22 Abril 2020, 21:36 PM
Hola rub'n,

muchas gracias por preguntar. Lo que en realidad quiero hacer es descifrar Hashlinks con Java (traduciendo un código de C# con el cual ya se puede hacer eso).

Y en este link empieza la historia: https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/Hashlink.cs

Empieza, en especial en este código (en el comentario te muestro hasta donde traduci):

public static DecryptedHashlink DecodeHashlink(String hashlink)
       {
           DecryptedHashlink room = new DecryptedHashlink();

           try
           {
               if (hashlink.ToUpper().StartsWith("CHATROOM:")) // not encrypted
               {
                   hashlink = hashlink.Substring(9);
                   int split = hashlink.IndexOf(":");
                   room.IP = IPAddress.Parse(hashlink.Substring(0, split));
                   hashlink = hashlink.Substring(split + 1);
                   split = hashlink.IndexOf("|");
                   room.Port = ushort.Parse(hashlink.Substring(0, split));
                   room.Name = hashlink.Substring(split + 1);
                   return room;
               }
               else // encrypted
               {
                   byte[] buf = Convert.FromBase64String(hashlink);
                   buf = d67(buf, 28435); //hasta ahí pude traducir sin problemas
                   buf = Zip.Decompress(buf);

                   HashlinkReader reader = new HashlinkReader(buf);
                   reader.SkipBytes(32);
                   room.IP = reader;
                   room.Port = reader;
                   reader.SkipBytes(4);
                   room.Name = reader;

                   return room;
               }
           }
           catch // badly formed hashlink
           {
               return null;
           }
       }


Y ahí está el método Zip.Decompress(): https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/Zip.cs

El método Zip.Decompress() es el del que trata este post.


Muchísimas gracias y muchos saludos

Pasa esta clase a Java LMAO

https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/HashlinkReader.cs

Ya esta DecryptedHashlink es muy simple.

Código (csharp) [Seleccionar]
class DecryptedHashlink
   {
       public String Name { get; set; }
       public IPAddress IP { get; set; }
       public ushort Port { get; set; }
   }

#215
Java / Re: Traducir este código de C# a Java
22 Abril 2020, 20:22 PM
Cita de: TickTack en 22 Abril 2020, 19:02 PM
Hola rub'n,

¡¡wow!!

El único detalle que se me olvidó comentar fue que la clase InflaterInputStream que mostré en el pequeño código se refiere a esta clase: https://github.com/icsharpcode/SharpZipLib/blob/master/src/ICSharpCode.SharpZipLib/Zip/Compression/Streams/InflaterInputStream.cs

Como no necesito todo el contenido, no quería traducir todo. Pero solamente pude traducir cómo pasar parámetros de un constructor a otro. Nada más :( :


public class InflaterInputStream {
public InflaterInputStream(Stream baseInputStream)
{
this(baseInputStream, new Inflater(), 4096);
}

/// <summary>
/// Create an InflaterInputStream with the specified decompressor
/// and a default buffer size of 4KB.
/// </summary>
/// <param name = "baseInputStream">
/// The source of input data
/// </param>
/// <param name = "inf">
/// The decompressor used to decompress data read from baseInputStream
/// </param>


/// <summary>
/// Create an InflaterInputStream with the specified decompressor
/// and the specified buffer size.
/// </summary>
/// <param name = "baseInputStream">
/// The InputStream to read bytes from
/// </param>
/// <param name = "inflater">
/// The decompressor to use
/// </param>
/// <param name = "bufferSize">
/// Size of the buffer to use
/// </param>
public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize)
{
if (baseInputStream == null)
{
throw new ArgumentNullException(nameof(baseInputStream));
}

if (inflater == null)
{
throw new ArgumentNullException(nameof(inflater));
}

if (bufferSize <= 0)
{
throw new ArgumentOutOfRangeException(nameof(bufferSize));
}

this.baseInputStream = baseInputStream;
this.inf = inflater;

inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize);
}
}


En especial no se cómo crear un objeto de Stream como en el código.

Se tendría que modificar el código que tú compartiste si se tiene en cuenta que InflaterInputStream no es lo que quizás tú pensaste que era?

Aunque quizás no se tenga que cambiar tu código --> https://icsharpcode.github.io/SharpZipLib/help/api/ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream.html
En ese link sale el autor original de Java...


Muchísimas gracias y muchos saludos

:huh: que es lo que quieres hacer? descomprimir un archivo, analiza bien cual es tu meta con esto LMAO.
#216
Java / Re: Traducir este código de C# a Java
22 Abril 2020, 16:00 PM
Cita de: TickTack en 22 Abril 2020, 14:51 PM
Hola a todos,

¿alguien me puede ayudar, por favor, a traducir este pequeño código de C# a Java?


public static byte[] Decompress(byte[] data)
       {
           try
           {
               byte[] r = null;

               using (MemoryStream ms = new MemoryStream(data))
               using (Stream s = new InflaterInputStream(ms))
               {
                   List<byte> list = new List<byte>();
                   int count = 0;
                   byte[] b = new byte[8192];

                   while ((count = s.Read(b, 0, 8192)) > 0)
                       list.AddRange(b.Take(count));

                   r = list.ToArray();
                   list.Clear();
                   list = null;
               }

               return r;
           }
           catch { }

           return new byte[] { };
       }

En especial, no se cómo programar estás dos líneas con Java:

using (MemoryStream ms = new MemoryStream(data))
using (Stream s = new InflaterInputStream(ms))

Ya que en Java reemplazo el using por el try. Pero no funciona si lo hago dos veces en este caso.



using (MemoryStream ms = new MemoryStream(data))
using (Stream s = new InflaterInputStream(ms))


Gracias y saludos

Ejemplo


using (MemoryStream ms = new MemoryStream(data)) / ByteArrayInputStream/ByteArrayOutPutStream
using (Stream s = new InflaterInputStream(ms))  / GZIPInputStream


Código (java) [Seleccionar]

public static byte[] decompress(final byte[] data)  {
         try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);
              final GZIPInputStream gzip = new GZIPInputStream(bis);
              final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {

              final byte[] buffer = new byte[8192];
              int dataRead = 0;

              while((dataRead = gzip.read(buffer)) != -1) {
                 baos.write(buffer,0,dataRead);
              }

              return baos.toByteArray();
          } catch(IOException ex) {
               throw new RuntimeException();
          }
}


Con versiones superiores a la jdk 8, aqui use open jdk 11

Código (java) [Seleccionar]

public static byte[] descompres(final byte[] data)  {
try(final var bis = new ByteArrayInputStream(data);
     final var gzip = new GZIPInputStream(bis);
     final var baos = new ByteArrayOutputStream()) {

gzip.transferTo(baos);
return baos.toByteArray();

} catch(IOException ex) {
//Mejorar excepcion
throw new RuntimeException();
}
}

#217
ClassNotFoundException ? importa el jar

https://sourceforge.net/projects/ucanaccess/files/latest/download

Código (java) [Seleccionar]
String urlConexion ="jdbc:ucanaccess://C:/Users/tone/Desktop/CarrerasBD.accdb";
#218
Cita de: Machacador en 21 Abril 2020, 20:17 PM
Existen carpinteros que jamas en su trabajo usan martillos y mucho menos clavos... o sea... ve tu a saber cuantos tipos de carpinteros hay... hasta hay pájaros que solo usan su pico y todo el mundo sabe que son carpinteros...

Una persona puede ser programador sin saber lenguaje alguno de programación porque existen muchas herramientas para ello... si le encomiendan hacer un programa y lo hace, es un programador, y no importa el método usado para llevar a cabo su tarea...

:rolleyes: :o :rolleyes:



@druguito por ejemplo @machacadol, le fascina la arte política y manipulación de las masas, eso no implica, o significa que no pueda desarrollar scripts malos en python.  :xD  , o hacerse así mismo un DD.0.S a su misma tarjeta de red con C# para pedir reposo de 3 días en el trabajo. perro ese.
#219
Cita de: lio8210 en 20 Abril 2020, 07:15 AM
hola amigo soy nuevo en esto espero que me ayude por fin como llegaste hacer la suma de los portales


La suma de dos interfaces para sumar mas ancho de bandas no existe, si ha eso te refieres, te tocara leer, y probar para que veas que no existe hommie.
#220
Java / Re: Modificar fichero en java
17 Abril 2020, 18:09 PM
Cita de: ryhuso en 17 Abril 2020, 15:30 PM
el objeto abonado son 3 cadenas
telefono
nombre
factura



  • Para no hardcodear la ruta mejor busca el fichero con un JFileChooser
  • Para reemplazar invoca a reemplazarNumero(), con dos parámetros String viejo y el String nuevo

>:D Si quieres pruebalo.


Ejemplo bean Abonado

Código (java) [Seleccionar]
/**
* @implSpec NO-THREAD-SAFE
*/
public class Abonado {

   private String nombre;
   private String telefono;
   private String factura;

   public String getNombre() {
       return nombre;
   }

   public void setNombre(String nombre) {
       this.nombre = nombre;
   }

   public String getTelefono() {
       return telefono;
   }

   public void setTelefono(String telefono) {
       this.telefono = telefono;
   }

   public String getFactura() {
       return factura;
   }

   public void setFactura(String factura) {
       this.factura = factura;
   }

   @Override
   public String toString() {
       return "Abonado{" +
               "nombre='" + nombre + '\'' +
               ", telefono='" + telefono + '\'' +
               ", factura='" + factura + '\'' +
               '}';
   }
}


Código (java) [Seleccionar]
import javax.swing.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Collectors;

/**
*
*/
public class FacturasTelf {

   private Path rutaFichero;

   public FacturasTelf() {

       final Abonado abonado = new Abonado();
       abonado.setNombre("gas");
       abonado.setFactura("lus DeboSiempre");
       abonado.setTelefono("3999 999 050");

       //Buscar Fichero no hardcoded
       if(buscarFichero()) {
           //Escritura normal objeto
           //this.altaFactura(abonado);

           //Invocar para reemplazar viejo numero telefonico Basico
           //Puedes invocarlo por medio de un listerner
           this.reemplazarNumero("3999 111 222" , "3999 111 111");
       }

   }

   public boolean buscarFichero() {
       final JFileChooser jFileChooser = new JFileChooser();
       jFileChooser.setDialogType(JFileChooser.FILES_ONLY);
       jFileChooser.setDialogTitle("Abrir Fichero");
       final int opc = jFileChooser.showOpenDialog(null);
       boolean value = false;
       if(opc == JFileChooser.OPEN_DIALOG) {
           rutaFichero = jFileChooser.getSelectedFile().toPath();
           value = Boolean.TRUE;
       } else {
           JOptionPane.showMessageDialog(null, "Fichero sin seleccionar");
       }
       return value;
   }



   /**
    *
    * @param nueva
    */
   public void altaFactura(Abonado nueva) {

       try (final FileWriter fw = new FileWriter(rutaFichero.toFile(), true);
            final BufferedWriter bw = new BufferedWriter(fw)) {

           if (rutaFichero.toFile().exists()) {
               //Para reemplazar numero

               bw.newLine();
               bw.write(nueva.getTelefono() + "%" + nueva.getNombre() + "%" + nueva.getFactura());


           } else { //No ejecuta, new File() lo crea por defecto
               //fw = new FileWriter(f);
               //bw = new BufferedWriter(fw);

               bw.write(nueva.getTelefono() + "%" + nueva.getNombre() + "%" + nueva.getFactura());
           }
       } catch (IOException e) {
           System.out.println(e);
       }
   }


   /**
    * Metodo usado para reemplazar el viejo numero
    *
    * @param viejo
    * @param numeroReemplazar
    */
   public void reemplazarNumero(final String viejo, final String numeroReemplazar) {

       final StringBuilder sb = new StringBuilder();
       String nuevaData = "";

       try (final BufferedReader reader = new BufferedReader(Files.newBufferedReader(rutaFichero))) {

           sb.append( reader
                   .lines()
                   .collect(Collectors.joining( System.lineSeparator() )));

           nuevaData = sb.toString().replaceAll(viejo, numeroReemplazar );

       } catch(IOException e) {
           //mejor un logger
           e.printStackTrace();
       }

       /**
        *  Nuevamente escribimos el fichero
        */
       try (final BufferedWriter writer = new BufferedWriter(Files.newBufferedWriter(rutaFichero))) {

           writer.write(nuevaData);
           writer.write(System.lineSeparator()); //separador del sistema
           JOptionPane.showMessageDialog(null, "Reemplazo listo");

       } catch(IOException e) {
           //mejor un logger
           e.printStackTrace();
       }

   }

   public static void main(String ...blablla) {
       new FacturasTelf();
   }
}





Aunque prefiero los DSL por ejemplo algo simple

Código (java) [Seleccionar]

        final Abonado abonado = new Abonado();
       abonado.setNombre("Factura Telefono N#2144141");
       abonado.setFactura("lus DeboSiempre");
       abonado.setTelefono("3999 999 050");


        /**
        * Para escribir en un fichero ejemplo
        */
      new IFacturar.FacturaImpl()
              .buscarFichero()
              .escribirFichero(abonado) //toString()
              .make();

       /**
        * Para reemplazar String en un fichero, no tan eficiente, mejor RandomAccessFile
        */
       new IFacturar.FacturaImpl()
               .guardarFichero()
               .reemplazar(e -> e.replaceAll("3999 999 050", "3999 000 000"))//con expresión lambda de una vez.
               .make();


Código (java) [Seleccionar]
package foro;

import javax.swing.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.Objects;
import java.util.function.UnaryOperator;
import java.util.logging.Logger;

/**
* DSL simple.
*/
public interface IFacturar {

   /**
    * @param <T>
    */
   interface Builder<T> {

       default Builder<T> buscarFichero() {
           return this;
       }

       default Builder<T> guardarFichero() {
           return this;
       }

       Builder<T> altaFactura(Abonado nueva);

       Builder<T> reemplazar(final UnaryOperator<String> unaryOperator);

       <T> Builder<T> escribirFichero(final T t);

       T make();

   }

   @SuppressWarnings("unchecked")
   abstract class AbstractBaseClassFactura<S> implements Builder<S> {

       private Path rutaFichero;
       private String nuevaData = "";
       private static final Logger LOG = Logger.getLogger(AbstractBaseClassFactura.class.getSimpleName());

       public AbstractBaseClassFactura() {

       }

       @Override
       public Builder<S> buscarFichero() {
           jFileChooserBuscar();
           return this;
       }

       private void jFileChooserBuscar() {
           final JFileChooser jFileChooser = new JFileChooser();
           jFileChooser.setDialogType(JFileChooser.FILES_ONLY);
           jFileChooser.setDialogTitle("Abrir Fichero");
           final int opc = jFileChooser.showOpenDialog(null);
           if (opc == JFileChooser.OPEN_DIALOG) {
               this.rutaFichero = jFileChooser.getSelectedFile().toPath();
           }
       }

       @Override
       public Builder<S> guardarFichero() {
           jFileChooserGuardar();
           return this;
       }

       private void jFileChooserGuardar() {
           final JFileChooser jFileChooser = new JFileChooser();
           jFileChooser.setDialogType(JFileChooser.DIRECTORIES_ONLY);
           jFileChooser.setDialogTitle("Guardar Fichero");
           final int opc = jFileChooser.showSaveDialog(null);
           if (opc == JFileChooser.APPROVE_OPTION) {
               this.rutaFichero = jFileChooser.getSelectedFile().toPath();
           }
       }

       /**
        * @param nueva
        */
       public Builder<S> altaFactura(Abonado nueva) {
           try (final FileWriter fw = new FileWriter(rutaFichero.toFile(), true);
                final BufferedWriter bw = new BufferedWriter(fw)) {

               if (rutaFichero.toFile().exists()) {
                   bw.newLine();
                   bw.write(nueva.getTelefono() + "%" + nueva.getNombre() + "%" + nueva.getFactura());
                   JOptionPane.showMessageDialog(null, "Fichero escrito correctamente!");

               }
           } catch (IOException e) {
               LOG.warning(e.getMessage());
           }
           return this;
       }

       /**
        * Con UnaryOperator para reemplazar el numero por medio de expresion lambda
        *
        * @param unaryOperator
        * @return Builder<S>
        */
       public Builder<S> reemplazar(final UnaryOperator<String> unaryOperator) {
           Objects.requireNonNull(rutaFichero, () -> "ruta destino es nula");
           Path destino = rutaFichero;
           final long id = System.currentTimeMillis();
           //tomar extension
           final String ext = destino.getFileName().toString().substring(destino.getFileName().toString().lastIndexOf("."));
           final String fileName = destino.getFileName().toString().replace(ext, id +"reemplazado"+ ext);
           destino = destino.resolveSibling(fileName);

           try (final BufferedReader reader = new BufferedReader(Files.newBufferedReader(rutaFichero));
                final BufferedWriter wr = new BufferedWriter(Files.newBufferedWriter(destino, StandardOpenOption.CREATE))) {
               reader.lines()
                       .map(unaryOperator)
                       .forEach(e -> {
                           try {
                               wr.write(e);
                               wr.write(System.lineSeparator());
                           } catch (IOException ex) {
                               ex.printStackTrace();
                           }
                       });
               JOptionPane.showMessageDialog(null, "Reemplazo listo!");
           } catch (IOException e) {
               LOG.warning(e.getMessage());
           }
           return this;
       }

       /**
        * Escritura de fichero
        */
       @SuppressWarnings("unchecked")
       public <O> Builder<O> escribirFichero(O abonado) {
           Objects.requireNonNull(rutaFichero,"ruta de fichero es nula");
           try (final BufferedWriter writer = new BufferedWriter(Files.newBufferedWriter(rutaFichero))) {

               writer.write(abonado.toString());
               writer.write(System.lineSeparator()); //separador del sistema
               JOptionPane.showMessageDialog(null, "Escritura Lista!");

           } catch (IOException e) {
               LOG.warning(e.getMessage());
           }
           return (Builder<O>) this;
       }
   }

   /**
    *
    */
   class FacturaImpl extends AbstractBaseClassFactura<FacturaImpl> {

       @Override
       public FacturaImpl make() {
           return new FacturaImpl();
       }

   }

   public static void main(String... blablla) {

       final Abonado abonado = new Abonado();
       abonado.setNombre("Factura Telefono N#2144141");
       abonado.setFactura("lus DeboSiempre");
       abonado.setTelefono("3999 999 050");

       /**
        * Para escribir en un fichero ejemplo
        */
      /*new IFacturar.FacturaImpl()
              .buscarFichero()
              .escribirFichero(abonado) //toString()
              .make();*/

       /**
        * Para reemplazar String en un fichero, no tan eficiente, mejor RandomAccessFile
        */
       new IFacturar.FacturaImpl()
               .guardarFichero()
               .reemplazar(e -> e.replaceAll("3999 999 050", "3999 000 000"))//con expresión lambda de una vez.
               .make();


   }
}