25 January 2020

ISOC to sell .org domain to private investors for over 1 billion dollar


Last year ICANN (Internet Corporation for Assigned Names and Numbers), the organisation that supervises DNS, lifted the price cap on .org domain names, despite many protests. This was a decision taken by staff, not by the board. .org domain names are used by many non-profit organisations.
Now that more money can be made here, ISOC (Internet SOCiety), the authority who manages the .org domain, has put the top domain up for sale.
ISOC has immediatly found a candidate who wants to pay $1.135bn for it: Ethos Capital a completely new company with only two staff members, set up by... the former CEO of ICANN, Fadi Chehade, backed by investment companies. Ties of these investment companies with American republican billionaires have raised concerns about political neutrality with respect to the non-profit organisations under the .org umbrella.
A third of the purchase is going to be financed by debt, implying that Ethos capital will have to earn a lot of money with the sale of those domains.
People have been protesting and asked the ICANN board to halt the decision, arguing that, as ICOS never purchased .org, they do not have the right to sell it for more than a billion dollar.

16 January 2020

SHA-1 fully and practically broken

Redently scientists have been able to break SHA-1, with a computational cost (e.g. on Amazon cloud) of $11K.
You should only use the SHA-2 family of secure hash functions (SHA-256, SHA-512...) now.

15 January 2020

Jongeren in tijden van big data

Met hun video’s op TikTok
als een digitale prikklok
weten machtige Chinezen
heel hun leven af te lezen.

Wie er links of rechts een date had?
Wel, Mark Zuckerberg, die weet dat.
Dankzij kiekjes, filmpjes, flardjes,
ruim voorzien van tags en hartjes.

Een id moet dezer dagen
ook hun vingerafdruk dragen.
Privacy is, zo te zien,
zó 2019!

Stijn de Paepe - dagvers 11/01/2020

git state management

The Three Trees


 Detailed


9 January 2020

Firefox 72: get rid of push notification popups

In Firefox 72 you can now avoid random websites asking to send you notifications. Automatically say no in options> privacy and security, scroll down to notifications and click settings...
Then:


Additionally Firefox has enhanced security by making fingerprinting more difficult.

Developer features:

  • debugger watchpoints: breakpoints on property changes.
  • experimental CSS motion path feauture: an easier way to animate than transform.

30 December 2019

JPA: Composite Primary Key with Foreign Keys



 
Entity for the ProductSales Table:

package com.example.model;

import javax.persistence.*;

@Entity
@IdClass(ProductSalesPK.class)
public class ProductSales {

 @Column(name = "QUANTITY")
 private int quantity_sold;

 @Id
 @ManyToOne
 @JoinColumn(name = "sales_id")
 private Sales sales;

 @Id
 @ManyToOne
 @JoinColumn(name = "product_id")
 private Product product;

 public ProductSales() {
 }

 public ProductSales(Sales sales, Product product, int quantity_sold) {
  this.sales = sales;
  this.product = product;
  this.quantity_sold = quantity_sold;
 }

 public Product getProduct() {
  return product;
 }

 public Sales getSales() {
  return sales;
 }

 public void setProduct(Product product) {
  this.product = product;
 }

 public void setSales(Sales sales) {
  this.sales = sales;
 }

 public int getQuantity_sold() {
  return quantity_sold;
 }

 public void setQuantity_sold(int quantity_sold) {
  this.quantity_sold = quantity_sold;
 }
}

ProductSalesPK Id class:

package com.example.model;

import java.util.Objects;

public class ProductSalesPK {
    private int sales;
    private String product;

 public ProductSalesPK(int sales_id, String product_id) {
  this.sales = sales_id;
  this.product = product_id;
 }

 @Override
 public int hashCode() {
  int hash = 5;
  hash = 83 * hash + this.sales;
  hash = 83 * hash + Objects.hashCode(this.product);
  return hash;
 }

 @Override
 public boolean equals(Object obj) {
  if (obj == null) {
   return false;
  }
  if (getClass() != obj.getClass()) {
   return false;
  }
  final ProductSalesPK other = (ProductSalesPK) obj;
  if (this.sales != other.sales) {
   return false;
  }
  if (!Objects.equals(this.product, other.product)) {
   return false;
  }
  return true;
 } 
}
Entity class fpor Product:

package com.example.model;
package com.example.model;

import java.util.Objects;
import javax.persistence.*;
import javax.validation.constraints.*;
@Entity
public class Product {
 @NotNull(message="product id not null") @Size (min = 1,message="product id not empty") 
 @Id
    private String product_id; 
 @NotNull(message="product name not null") @Size (min = 10,message="product name length at least 10")
    private String prod_name;
 @Min(value=5, message="price >= {value}")
    private double price;
    private String prod_desc;

 public Product() {
 }

  
    public Product(String id, String name, double price, String description) {
        this.product_id = id;
        this.prod_name = name;
        this.price = price;
        this.prod_desc = description;
    }

    public String getId() {
        return product_id;
    }

    public String getName() {
        return prod_name;
    }

    public void setName(String name) {
        this.prod_name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getDescription() {
        return prod_desc;
    }

    public void setDescription(String description) {
        this.prod_desc = description;
    }
    
    @Override
    public String toString() {
        String s = String.format("Product id: %s\n"
        + "Name: %s\n"
        + "Description: %s\n"
        + "Price: $%.2f", product_id, prod_name, prod_desc, price);
        return s;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 97 * hash + Objects.hashCode(this.product_id);
        hash = 97 * hash + Objects.hashCode(this.prod_name);
        hash = 97 * hash + (int) (Double.doubleToLongBits(this.price) ^ (Double.doubleToLongBits(this.price) >>> 32));
        hash = 97 * hash + Objects.hashCode(this.prod_desc);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Product other = (Product) obj;
        if (!Objects.equals(this.product_id, other.product_id)) {
            return false;
        }
        if (!Objects.equals(this.prod_name, other.prod_name)) {
            return false;
        }
        if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) {
            return false;
        }
        if (!Objects.equals(this.prod_desc, other.prod_desc)) {
            return false;
        }
        return true;
    }
    
}