A React Journey
2018-11-28 13:32:41
I’m not a front-end dev per say, but I like to keep myself up to date with latest framework. After all, knowing what’s considered a good framework in an ecosystem can help engineer better framework in my home ecosystem.

React is a JS component oriented presentation framework
React aimed at creating single page application front-end
React is based on virtual DOM, an in-memory representation of the dom document : whenever a component is updated in the virtual DOM, only the changes in the virtual DOM nodes are applied to the actual DOM.

 
class SignUpForm extends React.Component {
 
handleSubmit = (event) => {
RestUtils.performRestPostReq((token) => {
this.setState({activation: true})
}, "/user/signup",[ ["email", this.state.email], ["password", this.state.password] ] )
event.preventDefault();
}
 
constructor(props) {
super(props);
 
this.state = {
email: ',
password: '
,
activation: false
}
}
 
render() {
return (
 
<span>
{ !this.state.activation &&
<Panel title="Sign up form">
<FormContainer handleSubmit={this.handleSubmit} submit="Sign up">
<FormTable>
<FormRow label="Email"><FormTextField value={this.state.email} name="email" handleTextChange={(event) => this.setState({email: event.target.value})} /></FormRow>
<FormRow label="Password"><FormPasswordField value={this.state.password} name="password" handleTextChange={(event) => this.setState({password: event.target.value})} /></FormRow>
</FormTable>
</FormContainer>
</Panel>
}
{ this.state.activation &&
<Panel title="Sign up form submitted">
An email has been sent to {this.state.email}, follow the included link to activate your account.
</Panel>
}
</span>
)
}
}
 


React components extends React.Component.
Immutable parameters passed to the component are available in the “props” object.
States are accessible using the “state” object. States are only mutable using the setState() method.
The render method returns the presentation layer as HTML tags and calls to React subcomponents. Hence forming a “component” hierarchy.
JSX file format allows the mixing between js and html tag style code for component calls. JSX need to be compiled using the JSX to JS compile : Babel.

Pure component (ie: component who do not hold states) can also be declared using a simple function returning the presentation layer :
 
function FormTextField(props) {
return <input type="text" value={props.value} name={props.name} onChange={props.handleTextChange} />;
}
 


React guidelines recommend to only keep states in the higher level component and passed down state as props in the subcomponents hierarchy : “One single source of truth”.
Very well, but React is rarely used only by itself. In large applications states are shared and muted from multiple subcomponents. Here comes the need to segregate the way that state can be muted in a single place. All application states are held in a “store” object and would only be muted using “actions” items dispatched to a “reducer” function.


Our Sign Up form, the Redux way :

A pure component:
 
export const SignUpForm = ({activation, email, password, formSubmit, formEmailChange, formPasswordChange }) => (
<span>
{ !activation &&
<Panel title="Sign up form">
<FormContainer handleSubmit={formSubmit} submit="Sign up">
<FormTable>
<FormRow label="Email"><FormTextField value={email} name="email" handleTextChange={formEmailChange} /></FormRow>
<FormRow label="Password"><FormPasswordField value={password} name="password" handleTextChange={formPasswordChange} /></FormRow>
</FormTable>
</FormContainer>
</Panel>
}
{ activation &&
<Panel title="Sign up form submitted">
An email has been sent to {email}, follow the included link to activate your account.
</Panel>
}
</span>
)
 


A reducer function to process actions:
 
export const getSignUpForm = (state = {email: "", password: "", activation: false}, action) => {
switch (action.type) {
case "SET_EMAIL":
return {
...state,
email: action.email
}
case "SET_PASSWORD":
return {
...state,
password: action.password
}
case "SIGN_UP":
RestUtils.performRestPostReq((token) => {}, "/user/signup",[ ["email", state.email], ["password", state.password] ])
return {
...state,
activation: true
}
default:
return state;
}
};
 


A Redux React component is created by connecting the pure component, the reducer, a mapping between the store and the components props, an action dispatch who will send actions to the reducer from the component generated events.
Introducing "Crypto TradeBot"
2018-11-22 16:38:07
https://www.crypto-tradebot.com

Why “Crypto TradeBot”

From a personal perspective, I did ride the crypto 2017/2018 rally, although great from a financial point of view, it has been very tough for me on the mental side : how to react, should I sell ? buy more ? buy the dip ? cut my losses ? fear, doubt….The decision making was incredibly difficult and I ended up make no decisions or bad ones.
Besides the decision making part, I despite the incredible amount of time that was spent looking at charts, youtube videos and articles. I want my life back !
I now know it for sure : time is the most precious resource one has, but time is nothing without financial independence.
The current crypto rally might be over, but I won’t miss the next one thanks to my ultimate effort : “Crypto TradeBot”. A trading system that will help me make the right investment choices while mitigating risks and protecting my gains. So here is my effort.

More free time and lots of money, gotta love it !
Book review
2018-10-01 17:13:21

Game Engine Black Book: Wolfenstein 3D will revive memories of the time long gone where programming was a bit of sorcery. Algorithm were by then evaluated by CPU cycles they will consume (and of course, every programmer would know in that time the cost of each CPU instruction).
Wolfenstein 3D is celebrated today as being the first First Person Shooter in history. I remember having played it on my cousin 286 at sluggish speed. It was a good game but nowhere as striking as it successor : Doom. The 3D was … very flat with no lighting, the environment was … cubic. Nevertheless, it paved the way for whole new genre of video game although I clearly remember having played a First Person 3D game on the Atari ST before, namely "Midwinter".
Most of all, one can say that it started a new era : the era of the PC gaming. Back then, PC were considered serious appliance for serious business, with the corresponding price tag.
These new action 3D game that were only possible on the PC in that time, due the required raw power only available were the the downfall of the proprietary home computer like the Amiga and the Atari.
It was kind of a surprise because the PC wasn’t meant to be a gaming machine from the start and had clearly some serious limitations :

* 640 kB limit for executable code due to the horrendous DOS operating system legacy compatibility requirement
* Memory manager software needed to access memory beyond 1024 kB with only 64 kB available at time via page-flipping logic
* Additional sound card required to output any quality sound with competing standard

One the programming side of things, I would say that this book is more about storytelling and trivias.
Actually, Wolfenstein 3D rendering technique has already been described in an older book : “Michael Abrash s Graphics Programming Black Book” which is an everlasting classic for those willing to crunch pages of ASM x86 code.
Besides, the story of IDSoftware, the company behind Wolfenstein 3D, Doom, Quake, has already been covered it the excellent book : “Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture”.
All in all, I don’t who is the book for, as the aforementioned books are much more complete and extensive in their own right. I guess it will appeal to all the die hard vintage programming nostalgic out there.
Ethereum ming outcomes
2017-07-05 20:48:49
At present day, Ethereum is hovering around 270 USD, difficulty is continuously increasing making mining less and less profitable each day passing.
GPU are in low supply due to people buy GPU to mine Ether.
So what the outcome of all this could be :


* Price drop : every new miner won't ROI there investement, huge loss for lot of people who mine hoping for a price increase in the future
* Price stay steady : slowly difficulty increases eating up on mining profit to the point where ROI will take up 6 month to a year. Bad operation for all new miners.
* Price increase to new ATH, 500 to 1000 USD : Huge profit for miner who could afford to mine at a loss waiting for the right time to sell.

Mining is more and more becoming a gamble where people would mine hoping for the price to go up.
It also become more and more an attrition war where only the most efficient miner will be able to put up gains.
Personnaly my rigs are already ROIed, so I might just continue and hope for the best. It's the thrill of life after all.

Failure of the Peachy Printer Kickstarter
2017-05-31 22:27:17


I didn't heard about the Peachy Printer until recently when I found out about a kind ridiculous video where the project author declared having lost all the money to his crook associate.

https://www.youtube.com/watch?v=80HsW4HmUes&t=149s

What is it about ?

The Peachy Printer was a $100 3d printer project launched in 2013.
To reach such a low price point, the creator of the project claim having completely rethink the way 3d printer are built.
Therefore, the Peachy Printer would use a stereo lithography system : that liquid resin solidifies when hit by a laser beam.
The only moving parts are mirror directing the laser to part of the resin to solidify.
The level of resin will raise during the printing by adding drop of salt water which would sink underneath the small layer of liquid resin.
This technique is suppose to be very simple and requires very few moving part.
To simply things further and to save driving components :
* Mirror rotation will be driven by an analog signal coming from the sound card.
* Water drop feedback will be given by an analog signal fed to the mic input of the sound card.

Needless to say that starting such a complex project with an original approach is very difficult.
Hence the concept idea sounds already completely dumb from the start...

So the project failed after a year of regular feedback with a "bad news" announcement.

Was it a scam ?

It's fairly difficult to assess that it was clearly a scam from the start.
The number of video posted showing people working and talking about the project lead to think that there was a least an attempt to deliver something.
The very rough demos that can be seens clears tells that the project wasn't going anywhere anyway.
Why not just vanish with money instead of giving regular feedback ? I'm more keen to think that the project was started by somebody who didn't had a clue about how to get from an idea to an industrial project.
After an unexpected Kickstarter success, he'll start working on developing his idea soon to realize, after having blown a big chunk of the money, that it is simply no feasible.
Claiming that the money was stolen was the only sound alternative in order to be able to keep the money from the backers.
For me, Peachy Printer is a failure turn into a scam.

Hardware projects on Kickstarter

I subscribe to the idea that "complex" hardware projects on Kickstarter : robots, 3D printers, video game consoles are scams for multiple reasons:
* Delivering hardware products is extremely hard and requires multiple skills beyond electronic knowledge.
* An idea, if any good, will probably get stolen : it's so easy to copy any electronic devices theses days.
* Being able to deliver a product to a large customer base requires investment that have to be made upfront, which mean that the project is already largely funded and didn't requires Kickstarter.
* If a Kickstarter backer pays for product that he is actually willing to receive at a good price, who is paying for the R&D ?
* Successful Kickstarter hardware projects :
Oculus Rift : backed by investor and eventually bought by Facebook
Pebble : delivered but didn't manage to stay in the business for long
Ouya : delivered but didn't manage to stay in the business for long
These 3 projects delivered on Kickstarter but there were not simple hardware device, the software (drivers/proprietary SDL/proprietary eco-system) was the one true thing that prevent copy.
Furthermore none of them managed to stay in the business as independent company which sums up the harsh difficulty of making and selling hardware devices.
Are crypto-currencies the new tulips ?
2017-05-26 00:04:42
The last days were tough ! Ether price has been 20x within 3 months time.
This unexpected market boom hadn't bring the joy it should have to me because my mind is still unconfortable with what I do not understand.

Let's remind how good of an oracle I was : I've written the wrongful prediction that Ether price would fall to 1.5usd during 2017.
I saw the year 2017 as a year of Ether accumulation where I would quietly mine and hold until a take-off occured.
Following my prediction, I've traded all the Ether I've mined from Oct 2016 to Feb 2017 for Bitcoin in the hope to be able to acquire Ether at a very low price during the year.
Unfortunately Ether has since then taken-off leaving me in the dust. Well...thanks god Bitcoin price has also more doubled to ease my pain.

What will be my next move ?

As of currently I own both Ether and Bitcoin for about the same amount. I've increased my mining capability since with the price rise, profitability is high no matter the current difficulty.
I'm still caped by my electricity provider at 6000kw so I won't go way higher that 4 rigs if I want to eat and shower.
Plus I've realize that mining is interesting when difficulty is low and price low because then when price rise with difficulty, the accumulated coins because so much worth.
Therefore I'm mining with good profit but then difficulty will rapidly catch the current price and will have to question my commitment to mining or try mining another coin.

What is driving the price currently ?

One can only guess, it appears that Korean are massively buying Bitcoin, maybe this mechanicaly drives all other crypto-prices as other cryptos can only be traded for Bitcoin (except Ethereum) ?
On korean market places, Bitcoin is trading for more than 4000USD while only 2400USD on other market.
Bitcoin may really well reach korean prices if demand stay steady.
Hashcode 2017 qualifications
2017-02-24 09:13:34
Didn't do very well in Python, so here is my good old C version.

 
 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
int v;
int e;
int r;
int c;
int x;
} T_PARAMS;
 
T_PARAMS g_params;
 
typedef struct {
int cid;
int latency;
} T_CONNECTION;
 
typedef struct {
int latency;
int cache_srv;
T_CONNECTION * conlist;
} T_ENDPOINT;
 
 
typedef struct {
int vid;
int endid;
int nreq;
int vsize;
} T_REQUEST;
 
 
typedef struct {
int vcount;
int * vlist;
int free;
} T_CACHE;
 
int * vsize;
 
 
T_CACHE * init_cache(T_PARAMS params) {
    T_CACHE * cachelist = (T_CACHE*)malloc(sizeof(T_CACHE)*params.c);
 
    for (int i = 0;i < params.c;i++) {
        cachelist[i].vcount = 0;
        cachelist[i].vlist = (int *)malloc(sizeof(int)*params.v);
        cachelist[i].free = params.x;
    }
 
    return cachelist;
}
 
int add_video(T_CACHE * cachelist,int i, int vid,int w) {
    if (cachelist[i].free < w) return -1;
    cachelist[i].vlist[cachelist[i].vcount] = vid;
    cachelist[i].vcount++;
    cachelist[i].free -= w;
    return 0;
}
 
 
int read_int(FILE * f) {
    char str[10];
    int c = fgetc(f);
    int count = 0;
    while (c != EOF && c != ' ' && c!= '\n') {
        str[count] = c;
        count++;
        c = fgetc(f);
    }
    str[count] = 0;
    return atoi(str);
}
 
int compare2(void const *a, void const *b) {
    T_REQUEST * req1 = (T_REQUEST*)a;
    T_REQUEST * req2 = (T_REQUEST*)b;
    return (req2->nreq * req1->vsize) - (req1->nreq * req2->vsize);
}
 
int compare(void const *a, void const *b) {
    T_REQUEST * req1 = (T_REQUEST*)a;
    T_REQUEST * req2 = (T_REQUEST*)b;
    return req2->nreq - req1->nreq;
}
 
void solver(T_PARAMS g_params,T_REQUEST * reqlist, T_ENDPOINT * endpointlist, T_CACHE * cachelist, int * vsize, int (*compare) (void const *a, void const *b)) {
    qsort(reqlist,g_params.r,sizeof(T_REQUEST),compare);
    for (int i=0;i<g_params.r;i++) {
        T_REQUEST req = reqlist[i];
        int l = endpointlist[req.endid].latency;
        int cid = -1;
        for (int j = 0;j < endpointlist[req.endid].cache_srv;j++) {
            T_CONNECTION con = endpointlist[req.endid].conlist[j];
            if (l > con.latency) {
                l = con.latency;
                cid = con.cid;
            }
        }
 
        if (cid != -1) add_video(cachelist,cid,req.vid,vsize[req.vid]);
    }
}
 
unsigned int score_simple(T_PARAMS g_params,T_REQUEST * reqlist, T_ENDPOINT * endpointlist, T_CACHE * cachelist) {
    double sc = 0;
    double totnr = 0;
    for (int i = 0;i < g_params.r;i++) {
        unsigned int l = endpointlist[reqlist[i].endid].latency;
 
 
        for (int j = 0;j < endpointlist[reqlist[i].endid].cache_srv;j++) {
 
            T_CONNECTION con = endpointlist[reqlist[i].endid].conlist[j];
 
            for (int k = 0;k < cachelist[con.cid].vcount;k++) {
 
                if (cachelist[con.cid].vlist[k] == reqlist[i].vid) {
                    if (l > con.latency) {
                        l = con.latency;
                    }
                }
            }
 
        }
 
        sc += (endpointlist[reqlist[i].endid].latency - l) * reqlist[i].nreq;
        totnr += reqlist[i].nreq;
 
    }
 
    return (sc * 1000.) / totnr ;
}
 
void output_solution(T_PARAMS g_params,T_CACHE * cachelist) {
    FILE * f = fopen("result.txt","w");
 
    int count = 0;
    for (int i = 0;i < g_params.c;i++) {
        if (cachelist[i].vcount > 0) count++;
    }
 
    fprintf(f,"%d\n",count);
 
    for (int i = 0;i < g_params.c;i++) {
        if (cachelist[i].vcount > 0) {
            fprintf(f,"%d",i);
            for (int j = 0;j < cachelist[i].vcount;j++) {
                fprintf(f," %d",cachelist[i].vlist[j]);
            }
            fprintf(f,"\n");
        }
    }
 
    fclose(f);
}
 
 
int main(int argc, char **argv) {
    FILE * f = fopen(argv[1],"r");
 
    fscanf(f,"%d %d %d %d %d\n",&g_params.v,&g_params.e,&g_params.r,&g_params.c,&g_params.x);
 
    vsize = (int*)malloc(sizeof(int)*g_params.v);
 
    for (int i = 0;i < g_params.v;i++) {
        vsize[i] = read_int(f);    
    }
 
    T_ENDPOINT * endpointlist = (T_ENDPOINT*)malloc(sizeof(T_ENDPOINT)*g_params.e);
 
    for (int i = 0;i < g_params.e;i++) {
        fscanf(f,"%d %d\n",&endpointlist[i].latency,&endpointlist[i].cache_srv);
        endpointlist[i].conlist = (T_CONNECTION*)malloc(sizeof(T_CONNECTION)*endpointlist[i].cache_srv);
        for (int j = 0;j < endpointlist[i].cache_srv;j++) {
            fscanf(f,"%d %d\n",&endpointlist[i].conlist[j].cid,&endpointlist[i].conlist[j].latency);
        }
    }
 
    T_REQUEST * reqlist = (T_REQUEST*)malloc(sizeof(T_REQUEST)*g_params.r);
 
    for (int i = 0;i < g_params.r;i++) {
        fscanf(f,"%d %d %d\n",&reqlist[i].vid,&reqlist[i].endid,&reqlist[i].nreq);
        reqlist[i].vsize = vsize[reqlist[i].vid];
    }
    fclose(f);
 
    for (int i = 0;i < g_params.v;i++) {
        printf("video %d : %d\n",i,vsize[i]);
    }
 
    for (int i = 0;i < g_params.e;i++) {
        printf("endpoint %d : latency : %d\n",i, endpointlist[i].latency);
    }
 
    T_CACHE * cachelist = init_cache(g_params);
 
    solver(g_params,reqlist,endpointlist,cachelist,vsize,&compare);
 
    printf("SOLVED\n");
 
    printf("Score: %d\n",score_simple(g_params,reqlist,endpointlist,cachelist));
    output_solution(g_params,cachelist);
    return 0;
}
 
 
Google Hashcode 2016 qualification : input parsing
2017-02-21 23:01:14
It took me 1h30 to write the proper input parsing of the exercise in C.

 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
    int x;
    int y;
    int * alist;
} T_WAREHOUSE;
 
typedef struct {
    int x;
    int y;
    int n;
    int * plist;
} T_ORDER;
 
 
int main(int argc, char **argv) {
    int h;
    int w;
    int d;
    int l;
    int t;
    int * wheight;
    int wc;
    int oc;
    FILE * f = fopen(argv[1],"r");
    fscanf(f, "%d %d %d %d %d\n",&h,&w,&d, &t,&l);
    printf("Area : %d x %d\n",h,w);
    printf("Number of drones: %d\n",d);
    printf("Number of turns : %d\n",t);
    printf("Maximum load : %d\n",l);
    int np;
    fscanf(f,"%d\n", &np);
 
    printf("Number of product : %d\n",np);
 
    int c;
    char arg[10];
    c = fgetc(f);
    int i = 0;
    int counter = 0;
 
    wheight = (int*)malloc(sizeof(int) * np);
    while(c != '\n' && c != EOF) {
        arg[i] = c;
        i++;
        c = fgetc(f);
        if (c == ' ' || c == '\n' || c == EOF) {
            arg[i] = 0;
            wheight[counter] = atoi(arg);
 
            printf("Counter = %d\n",wheight[counter] );
            counter++;
         i = 0;
        }
    }
 
 
    for (int i = 0; i < np; i++) {
        printf("Wheight of product %d : %d\n",i, wheight[i]);
    }
 
    fscanf(f,"%d\n", &wc);
 
    T_WAREHOUSE * wlist = (T_WAREHOUSE*)malloc(sizeof(T_WAREHOUSE)*wc);
 
    for (int j = 0;j < wc;j++) {
        fscanf(f,"%d %d\n",&wlist[j].x, &wlist[j].y);
 
 
        wlist[j].alist = (int*)malloc(sizeof(int) * np);
        counter = 0;
        c = fgetc(f);
        i = 0;
        while(c != '\n' && c != EOF) {
            arg[i] = c;
            i++;
            c = fgetc(f);
            if (c == ' ' || c == '\n' || c == EOF) {
                arg[i] = 0;
                wlist[j].alist[counter] = atoi(arg);
                counter++;
                i = 0;
            }
        }
 
    }
 
    for (int i = 0;i < wc;i++) {
        printf("wc %d : %d - %d\n",i,wlist[i].x,wlist[i].y);
        for (int j = 0; j < np; j++) {
            printf("p: %d availability : %d\n",j,wlist[i].alist[j]);
        }
    }
 
    fscanf(f,"%d\n", &oc);
    printf("Order count : %d\n",oc);
 
    T_ORDER * olist = (T_ORDER*)malloc(sizeof(T_ORDER)*oc);
 
    for (int j = 0;j < oc;j++) {
        fscanf(f,"%d %d\n",&olist[j].x, &olist[j].y);
 
        fscanf(f,"%d\n",&olist[j].n);
 
        olist[j].plist = (int*)malloc(sizeof(int) * olist[j].n);
        i = 0;
        counter = 0;
        c = fgetc(f);
        while(c != '\n' && c != EOF) {
            arg[i] = c;
            i++;
            c = fgetc(f);
            if (c == ' ' || c == '\n' || c == EOF) {
                arg[i] = 0;
                olist[j].plist[counter] = atoi(arg);
                counter++;
                i = 0;
            }
        }
 
    }
 
    for (int i = 0;i < oc;i++) {
        printf("oc %d : %d - %d\n",i,olist[i].x,olist[i].y);
        for (int j = 0; j < olist[i].n; j++) {
            printf("p: %d type : %d\n",j,olist[i].plist[j]);
        }
    }
 
    fclose(f);
    return 0;
}
 
On Ether price crash
2016-12-05 22:32:10
I've been mining Ether for 1.5 month already which made me own 80 ether. That would be worth 1000 usd 2 months ago but today it's only worth a measly 500 usd, thanks to current Ether value of $7. I don't really care about day to day Ether value as I'm mining to hold. I knew It was kind of gambling when I bought two rigs worth 1600€ a piece and started mining in October.

Nevertheless this bubble burst (yes I think we can call it like that) made me think more deeply about was crypto-currency mining.
In the Bitcoin paper, Satoshi Nakamoto desribed mining as an incencitive that would people to commit processing power to the Bitcoin in order to secure the network by validatiing transaction.
Cryto-currency mining is not supposed to make people rich, it's supposed the reward miners for the processing power they give to the network. To that regard, mining profitability should converge towards electricity cost. The fact that sometimes, mining profitability greatly exceed electricity cost to become an extremely rewarding business I more due to high level of speculation or that supply in coin greatly is insufficient compare to demand. Mining is steadily profitable during shorts lapse of time when demand exceed coin production but as more miners come into action profitability decrease thanks to difficulty increase. The Bitcoin boom made mining profitable but it would have been equally profitable to just buy coin rather than going with the hassle of mining.
Business based on Ethereum are in their infancy so one can argue that the short boom in Ether profitability is more likely due to speculation.

What is the real price of Ether ? Off course, it's very difficult to give a faire price to an asset such as Ethereum.
One interesting fact is that 70 milllions Ether out the 80 millions Ether currently available had been premined, which means that 70 millions Ether were sold or given to organization like DAO to support Ethereum eco-system. Creators of the Ethereum themselves do not see Ethereum as a currency but more as some kind of asset.
Hence my thought that Ether market cap should converge towards Ethereum eco-system value. A market cap of 1 billion as seen in july was just ridiculous considering how in its early stage is Ethereum. None of the most notrious Ethereum projects like "Slock.it" or "Augur" made it past that startup scale, and valuating Ethereum like a successful tech company seems ambitious.
Today I'd say that Ethereum core value is about 100 Millions USD. Which price it in line with "startup with potential". I do hope that I'm wrong, but in absence of ground-breaking news, I can very well forsee Ether reach 1.2 USD in the near future.
Code is law
2016-12-01 23:48:17
It all started with the novel "Code and Other Laws of Cyberspace" from Lawrence Lessig
I used to work in developing accounting software. Sometimes, regulations and business rules that comes with it are so complex that the users of the application themselves would go and ask developers the behavior of the software. The code written become the base on which people in the company will base their decision. it become more and more evident that technology and regulations are now tightly bonded.
Then I came to face the "Code is law" concept : what if the code did not comply to regulation but the code itself was the regulation. In the cybernetic era we are living in, computer software is everywhere. What if software ruled our lives.

Ethereum

In France, there's a law that only "government approved" cashier software are allowed, to prevent any falsification. Still nothing can guarantee that the some would run unmodified. Therefore i dont think that closed source program can be used as a base of trustable software because it is impossible to know whether the program contains any illegal backdoor.
How to produce that kind of software and how do ensure that is still meets its requirement ? State or established company could deliver such service, just think at Verisign which, for instance, issue encryption certificates. But that how can we make sure that the state or the company does not break the law, and isn't putting the power of law enforcement to private company a risk?
Open-source software is a good alternative as the source code can be read and verified statically but it is impossible to ensure that the code will not be modified at run time. So in order for the code to be the law, we need a platform where the code is publicly available and also an unmodifiable unstoppable platform where the code will run. These these approved software are law in a way that there business rules enforce the law. One can say that they are the law.
Blockchain technology comes into play because of its ability to for a decentralized trust mechanism that can support this concept that code can be a sort of unmodifiable contract that can be trusted as truthfully as the legal code itself, comes Ethereum. Ethereum is a blockchain platform that can run publicly non stoppable, non alterable software. Ethereum, hence, fill the need for trustable execution of the law code.
It's an innovative idea : one can imagine escrow service that will act as a man in middle without any human action, or billing software that will run on the platform to absolutely non modifiable.

It's only the begining

The cyber law era hasn't even started yet but with the ever growing role of technology on our lives, we've come to realize that software code rules our lives. With great power comes great responsiblity. So is the need for software that we can trust.
See 10 older news | Back to the top