Domingo en la mañana

Domingo en la mañana
Domingo en la mañana

¿Quien no a amanecido así?

Transcript

Narrador: Bueno ya fue la fiesta

Narrador: Ahora es tiempo de limpiar…

 

Anuncios

Ejecutando Pharo en GNOME 3

Acceso Pharo
Acceso Pharo

Uno de los cambios mas recientes al escritorio GNOME es el ya no poder ejecutar ejecutables, binarios o scripts, directamente desde el navegador de archivos Nautilus, esto como una medida de seguridad contra archivos ejecutables disfrazados y para evitar errores monstruosos, esto normalmente no seria un problema hasta que llega a aplicaciones que normalmente se ejecutan desde la carpeta que venia en el .zip, como lo es Pharo Smalltalk, por suerte hay una forma muy elegante y sencilla de corregir esta inconveniencia.

Archivo .desktop

En el escritorio GNOME los accesos a las aplicaciones son representados por archivos con extensión .desktop, estos le indican al escritorio y aplicaciones del escritorio GNOME la ubicación el ejecutable, icono a utilizar y categoría de la aplicación y lo mejor, estos archivos son muy sencillos de crear, es solo un archivo de texto en el siguiente formato

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Exec=/home/david/Workbench/Pharo/pharo
Name=Pharo
Icon=/home/david/Workbench/Pharo/Pharo.svg

Aquí las lineas que nos interesan son Exec, Name e Icon las cuales indican la ruta al ejecutable, el nombre de la aplicación y la ruta al icono que deseamos aparezca.

Archivo .desktop
Archivo .desktop

Obviamente las rutas de Exec e Icon deberá acomodarlas según donde halla puesto el ejecutable y el icono deseado, para el icono puedo sugerirle el siguiente

Icono Pharo
Icono Pharo

El cual puede encontrar en su forma de svg en la siguiente ubicación: https://files.pharo.org/media/logo/Pharo%20Logo%20SVG/Pharo_Icon_v3.0.svg

Y ya que quede todo el resultado se vera como en la siguiente imagen

Acceso a Pharo
Acceso a Pharo

Es posible que la primera vez que de doble clic al archivo le aparezca una pregunta de seguridad, solamente responda que si y a partir de ahí con solo dar doble clic a ese acceso..

Pharo Iniciado
Pharo Iniciado

Podra iniciar Pharo desde la interfaz gráfica sin problemas.


Referencias

Nautilus Will No Longer Launch Binaries Or Desktop Files


Espero que esta entrada fuera de utilidad y si lo fue y quiere cooperar con la causa tengo una pagina en Ko-fi para aceptar donativos

ko-fi

BigDecimal, no mas errores de redondeo

Suma de Doubles
Aquí veremos como evitar esto

Si ha usado Java para el desarrollo de aplicaciones donde los datos que maneje representen dinero seguramente se a encontrado con situaciones donde las operaciones con decimales le dan resultados incorrectos, específicamente en los decimales con el resultado quedando centésimas arriba o abajo del resultado correcto.

Esto se debe a la forma en que funciona la aritmética binaria a la hora de representar los decimales, si buen para la mayoría de los casos esos errores son demasiado pequeños las operaciones financieras usualmente implican la combinación ganadora de exigir precisión y operaciones sobre una cantidad significativa de datos de modo que esos pequeños errores de la aritmética binaria se acumulan y termina con una factura un centavo entero mas grande de lo esperado, y si cree que no le van a pelear ese centavo se equivoca, cuando es dinero hasta una décima de centavo basta para darse un encontrón con un cliente.

Por fortuna ya desde hace varias versiones Java incluye una clase que permite hacer esas operaciones sin preocuparnos por errores causados por la aritmética binaria, la clase BigDecimal.

BigDecimal.

La clase BigDecimal nos permite representar un numero decimal con las siguientes características

  • Operaciones decimales: Las operaciones sobre este tipo se realizan internamente en base 10, eso implica una perdida de rendimiento pero a cambio los errores de aritmética binaria se previenen por completo.
  • Precisión arbitraria: No se impone un limite en la cantidad de decimales, la cantidad de decimales a usar esta limitada únicamente por la memoria del sistema
  • Inmutable: Una vez creado un objeto BigDecimal el valor de este NO puede ser modificado, cada operación le generara un objeto nuevo con el valor resultado de la operación.

Si bien la perdida de rendimiento puede sonar preocupante esta esta en el area de mili/micro segundos, el usuario de su aplicación financiera no va a notar la diferencia e incluso si lo nota ese milisegundo es preferible a pelearse con un cliente por un centavo.

Operaciones con BigDecimal.

Las operaciones disponibles son las que espera, suma, resta, multiplicación, división, modulo, potencia, etcetera.

Sin embargo al momento de usarlas debe de tomar dos consideraciones, primero ya que en Java la sobrecarga de operadores no existe debera de usar los métodos .add, .multiply, .divide, .substract, .pow, etc

BigDecimal valor = new BigDecimal("10.0");
BigDecimal factor = new BigDecimal("5.5");

System.out.println("Suma: " + valor.add(factor));
System.out.println("Resta: " + valor.subtract(factor));
System.out.println("Multiplicación: " + valor.multiply(factor));
// MathContext indica cuandos bits deseamos usar para decimales, esto es debe especificar
// para manejar los casos donde la cantidad de decimales sea enorme (1/3 por ejemplo)
System.out.println("Division: " + valor.divide(factor, MathContext.DECIMAL128));
System.out.println("Potencia: " + valor.pow(3));

Hay que notar que las operaciones donde sea posible que ocurran numeros con decimales infinitos se debe especificar la cantidad de decimales a usar via la constante MathContext adecuada.

Otro detalle es que los objetos BigData son inmutables, por lo que las operaciones crean un objeto nuevo para el resultado por lo que debe asignar ese resultado a un objeto BigDecimal para poder usarlo

BigDecimal resultado = valor.add(factor);
System.out.println(“El resultado se guardo y accede desde la variable resultado: ” + resultado);

Ejemplo

Y para no dejar esta entrada sin ejemplo veamos como seria la sumatoria de la imagen en el inicio de la entrada usando BigDecimal en lugar de Double

package mx.hashCode.bigDecimal;

import java.math.BigDecimal;

public class App {    
    static public void main(String[] args){
        BigDecimal resultado = new BigDecimal("0.0");
        BigDecimal cent = new BigDecimal("0.01");

        resultado = resultado.add(cent);
        resultado = resultado.add(cent);
        resultado = resultado.add(cent);
        resultado = resultado.add(cent);
        resultado = resultado.add(cent);
        resultado = resultado.add(cent);

        System.out.println("Resultado de sumar 6 veces el valor 0.01 guardando en una variable BigDecimal");
        System.out.println(resultado);
    }
}

Y el resultado seria el siguiente:

Resultado de sumar 6 veces el valor 0.01 guardando en una variable BigDecimal
0.06

Referencias:

Por que usar BigDecimal (y no Double) para calculos aritmeticos financieros


Espero que esta entrada fuera de utilidad y si lo fue y quiere cooperar con la causa tengo una pagina en Ko-fi para aceptar donativos

ko-fi

Gracias y nos vemos en la próxima entrada :).

Borrar los favoritos de Twitter

Si esto le causa ñañaras a Jack Dorsey, Misión cumplida
Si esto le causa ñañaras a Jack Dorsey, Misión cumplida

Y en otra entrada de la serie “¡YO HARE LO QUE ME DE MI REGALADA GANA ESTUPIDA RED SOCIAL!” veremos como eliminar rápidamente todos los likes/favoritos/corazones de Twitter, ¿Por que?, por que podemos.

Consola de desarrollador.

Para lograr esto haremos uso de una funcionalidad del navegador que tal vez no conozca, la consola de desarrollador esta nos permite analizar todos los detalles de la pagina actual y ejecutar código JavaScript directamente, para acceder a esta presione Ctrl + Shift + C, la consola aparecerá en la parte inferior de la pantalla.

La parte de abajo es la consola de desarrollador.
La parte de abajo es la consola de desarrollador.

Notara que la consola tiene varias pestañas, la que usaremos para hacer la limpieza es la pestaña Consola.

Teoria.

Un poco de teoría aquí, para quitar un favorito lo que debemos hacer es dar clic en el corazón para que pase de rojo a gris, si también tiene un par de miles de favoritos eso va a tomar tiempo, pero usando un poco de JavaScript puede seleccionar todos los corazones en pantalla y darles clic en forma automática.

Limpiando Favoritos.

Ahora vamos a lo bueno, en su perfil de Twitter vaya a sus favoritos/me gusta, abra la consola de desarrollo.

Note los corazones en rojo.
Note los corazones en rojo.

Y de scroll hacia abajo tanto como pueda, esto es para que halla tantos de esos corazones en pantalla como pueda, es poco probable que pueda cubrirlos todos de un solo golpe, pero si trate de cargar tantos como pueda.

Ya que tenga varios corazones en pantalla escriba lo siguiente en el cuadro de texto en la parte inferior de la consola.

$('.ProfileTweet-action--unfavorite').click();

Y presione Enter, tras unos segundos notara que los corazones pasan de rojo a gris.

Favoritos eliminados.
Favoritos eliminados.

Va a necesitar repetir ese procedimiento unas cuantas veces, pero entre mas lo haga mas favoritos se eliminaran, repita hasta que desaparezcan todos.

Un detalle que debo mencionar, al menos que me paso a mi, es que cuando llega al final aunque ya no halla favoritos el contador no pasa a cero, pero es lo mejor que se puede hacer.

Favoritos eliminados
Favoritos eliminados

Espero que esta entrada les fuera de utilidad y desean cooperar, me pueden invitar una cerveza: https://www.paypal.me/hashRaygoza/20mxn Gracias y nos vemos en la próxima :).