I got asked this question in an interview. And I knew this question beforehands, and that it had to deal with hashtables, but never got to dig into it since I thought nobody would asked me that for a simple internship.

I didn't know how to answer, in my mind I just had a simple php script that would have looked like this:

```
$arr = array(-5, 5, 3, 1, 7, 8);
$target = 8;
for($i = 0; $i < sizeof($arr) - 1; $i++)
{
for($j = $i + 1; $j < sizeof($arr); $j++)
{
if($arr[$i] + $arr[$j] == $target)
echo "pair found: ${arr[i]}, ${arr[j]}";
}
}
```

But it's pretty slow, it's mathematically correct, but it's more of a CS-oriented question. How to implement that quickly for machines? The answer is **hash tables**. Which are implemented as **arrays** in PHP (well, arrays are like super hash tables) and as **dictionaries** in Python.

I came up with this simple example in python:

```
arr = (-5, 5, 3, 1, 7, 8)
target = 8
dic = {}
for i, item in enumerate(arr):
dic[item] = i
if dic.has_key(target - item) and dic[target - item] != i:
print item, (target - item)
```

- iterate the list
- assign the hash of the value to the index of the value in the array
- to avoid finding a pair twice, we do this in the same for loop:

we do the difference of the target sum and the number we're on, we hash it, if we find that in the hash table that's good!
- but it could also be the number itself, so we check for its index, and it has to be different than its own index.

Voilà!
We avoid the n-1! additions and comparisons of the first idea with hash tables (I actually have no idea how fast they are but since most things use hash tables in IT, I guess that it is pretty fast).

Time to celebrate!

and thanks r/dogecoin for tipping me!

If you want some of my dogecoins just comment :D

One last exam, ECC, and then I'm free to do whatever I want (no I still haven't found an internship, but I talked with **TrueVault**, **Cloudflare**, **MatterMark**, **Spotify** and maybe **Matasano** so this has been a good experience nonetheless).

I stumbled upon the notes of Ben Lynn an ex Stanford's student that took an ECC class there. They're pretty awesome and I kinda want to do something like that on this blog. Maybe next year it's a bit late for that :)

The notes are here

We're learning a lot of algorithm in my **algebre et calcul formel** class. One of them is the **Toom-Cook algorithm** used for multiplication of large integers.

I found a super simple explanation of it on a forum, it helps:

Say, we want to multiply 23 times 35.

We write,

p(x) = 2x + 3,

q(x) = 3x + 5.

We are using our realization that any integer can be written as a polynomial.

Here, p(x), represents 23, and q(x), represents 35, when x equals 10.

We write,

p(x)q(x) = r(x).

That is, p(x) times q(x), equals r(x).

So,

(2x + 3)(3x + 5) = ax^2 + bx + c = r(x).

Now,

p(0)q(0) = r(0).

So,

(2*0 + 3)(3*0 + 5) = a*0 + b*0 + c.

Therefore,

c = 15.

Now,

p(1)q(1) = r(1).

Therefore, when we do the substitutions (for x and c),

a + b = 25.

Now,

p(-1)q(-1) = r(-1).

Therefore, when we do the substitutions (for x and c),

a - b = -13.

Now, we already know c, and we just need to find a and b.

We have two linear equations and two unknowns,

a + b = *25,

a - b = -13.

We just add the two equations and we get,

2a = 12.

Therefore,

a = 6.

Now, we can substitute 6 for a in,

a + b = 25,

and we get,

b = 19.

So,

r(x) = 6x^2 + 19x + 15.

Now, we substitute 10 for x in r(x), and we are done,

r(10) = 600 + 190 + 15 = 805.

Believe it or not!

I've always wondered how it is that we can't easily copy the entire content of a CD/DVD/Bluray on another one and play it with a PS1/PS2/PS3 and I guess PS4 and its competition.

Here's part of an answer on psx-scene's forum:

Whenever you insert a disc (bluray one that is) the ps3 drive will look at a **special area of the disc called the Pic Zone** (the BD ROM Mark is actually used in movie discs but not in game unlike what I first thought).**This area cannot easily be dumped** (you'd pretty much need a bluray drive with a hacked firmware) and of course that specific area **cannot be burned on any kind of discs or with any kind of burners commercially available**.

reading this made me apply to Sony for an internship :)

# Weblang
posted April 2014

I've been writing html, xhtml, and now html5 for ages. I think I started in 2001 (13 years ago).

I had to go through `<br>`

becoming `<br />`

becoming `<br>`

again.

I had to go through different doctypes

I had to go through new divs like `<header>`

and `<footer>`

But I never had to go through a syntax change. Why is that? I don't understand why HTML is a language based on tags. It is unnecessary and it just adds time and confusion to typing in html.
I haven't ran into any project directed at changing that syntax. And I thought, why not doing it myself? (and if there is already such a project please tell me!)

So I thought about a new language to write static web pages called `web`

or `weblang`

. No tags. Indentation. Simple doctype.

A simple `index.web`

would looks like that:

```
\web:1 // this is a doctype
\head
$title: 'Weblang example';
$css: 'css/app.css';
\body
$header .monheader{
$h1 "Weblang";
}
$section #introduction{
$h2 "What is Weblang?";
$p "Weblang is an elegant way of writing static webpages"
"HTML is annoying to write." // there will be a breakline here
$p{
what about just writing text like this,
it's kinda easier
}
}
// what about just writing text
This is a text block, it will just render as text
in this text I want a list here : $ul{
$li "with text in it";
}
$ul .links{
$li{
$a "more info" href: 'https://github.com/mimoo/weblang';
}
$li $a{
tags can be chained
}
}
$javascript 'js/jquery.js';
$script 'js/script.js' type: 'javascript';
```

This is just a first draft. The biggest problem is that plain text and code is mixed. The trick I used here is to use $ to tell the render engine that it is not plaintext. Might not be super clever. I need to brainstorm a bit more about this.

Also I need to look at sass' code to see how a compiler works. Seems to be a bunch of regex.

I knew that my principal cryptography professor Gilles Zémor was a GO player.

Which is pretty amazing in itself :)

But this keeps going on.

I have an algebra class this semester, and I'm trying to understand **Berlekamp's algorithm**. Trying to find videos on youtube about him I discover that he is as well a go player! And doing researches about the game at that! So cool :D