HNHacker News
TopNewBestAskShowJobs

emillon

2,853 karma · joined January 10, 2011

Paris-based λ-term writer.

    https://github.com/emillon/
    http://blog.emillon.org/
    @etiennemillon
    me @ <username> . org
submissionscomments
emillon··on The Dropbox hack is real
When I used pwsafe and keepassx they had this option.
emillon··on Turns websites into Markdown
You might want to filter local and unroutable URLs, for example entering 127.0.0.1 renders a MAMP Pro page.
emillon··on The Dropbox hack is real
It's a common feature of password managers.
emillon··on Simple Ways of Reducing the Cognitive Load in Code
There are no semantic problems with this, but typing will get in the way: you can express it fairly easily if all the functions have the same type (such as Int -> Int): actually it's just 'foldr ($)'. But it is difficult to type a list of functions such as each member's return value has the same type as the next one's parameter (symbolically, [an-1 -> an, ..., a1 -> a2, a0 -> a1]). It's easier to refer to the composition of such functions, which is why you would see it as 'h . g . f'.
emillon··on Simple Ways of Reducing the Cognitive Load in Code
It's more like the pipe operator in ocaml (http://blog.shaynefletcher.org/2013/12/pipelining-with-opera...). The lisp version has the extra advantage that you don't have to repeat it between all the intermediate functions. ((->> 2 (* 100) str count) vs 2 |> (* 100) |> str |> count).
emillon··on 1999.io: Blogging like it's 1999
I'm hoping to make them fashionable again! http://webring.club/ :)
emillon··on Loop Invariants
This kind of proofs usually are separated in two steps:

- correction: define a loop invariant. Assuming the loop terminates, it will hold when the program exits the loop.

- termination: define a loop variant, something that changes at every iteration. If you can find a variant that is a strictly decreasing sequence of natural numbers (or an increasing, bounded sequence), you've established that the loop terminates.

Once you've done these two steps you know that the program terminates and the invariant holds at the end. (in your case, you won't be able to find a good variant - depending on the floating point semantics you use of course).

emillon··on Juniper screenOS authentication backdoor - master ssh password posted
This is correct, I missed this!
emillon··on Juniper screenOS authentication backdoor - master ssh password posted
That's assuming that this particular string was already present somewhere in the binary. Since it is only present as a reference, you would not see the string in a binary patch.
emillon··on Juniper screenOS authentication backdoor - master ssh password posted
That is my opinion too, but I would go even further and say that this change could have been made on the compiled binary.

This kind of statement must take 10-15 bytes max to patch and the build boxes are typically less safe than source control systems.

emillon··on Juniper screenOS authentication backdoor - master ssh password posted
The letters in this password spell "sun su".
emillon··on My Home-Built TTL Computer Processor
Thanks for the heads-up!

For some reason mailchimp was returning 403s from heroku, this must be related to this morning's outage. This is fixed and I added the emails that failed.

emillon··on My Home-Built TTL Computer Processor
(shameless plug)

I totally agree, that was awesome to discover random websites. I think that there's still a place for webrings these days, so I'm creating the webring club. Feel free to subscribe on http://webring.club/ or shoot me an email (address in profile) if you're interested in exchanging ideas!

emillon··on Tetris as a C++ Template Metaprogram
This kind of compiler has already be done: http://gergo.erdi.hu/projects/metafun/
emillon··on Closures and Objects Are Equivalent
Yes, it's not very formal and as others said it would need some definitions to make a useful result.

But actually I don't think that this duality is related to types: in a static language, the types of captured variables does not appear in a value's type. And for the object side, the type of instance variables is hidden behind the public interface too.

So it's really more about techniques for creating abstractions than how the values are composed together.

emillon··on Closures and Objects Are Equivalent
I like to see this as a sort of duality: closures are objects that have a single method (call) and objects are made of functions that can only capture one variable (this).
emillon··on Why OCaml GADTs matter for performance
Yes, exactly. ADTs are entirely known statically so there's no vtable etc.
emillon··on Why OCaml GADTs matter for performance
At runtime, GADTs are actually represented the same way as plain ADTs (that is, a tagged union). The tighter types make it possible to remove some unused branches in pattern matching, so you may remove a few tests, but memory-wise it should be the same.
emillon··on OCaml: Objects
> OCaml classes allow row polymorphism, but disallow immutable updates (immutable updates meaning create a new object with everything the same, but one element different.)

There's a functional update construct for objects:

http://caml.inria.fr/pub/docs/manual-ocaml/objectexamples.ht...

It works like { r with field = value }.

emillon··on Why OCaml, why now? (2014)
> Also, when your programs use abstract data types you lose the benefits of pattern matching.

In some cases you can also use "private ADTs". Modules seeing such a type can use pattern matching on them but can not apply the constructors.

emillon··on Fake2db – Generate fake but valid data-filled databases
Oh, makes sense. I did not see that this is a bridge between DBs and faker. Mixer does something similar directly on top of sqlalchemy if I recall correctly.
emillon··on Fake2db – Generate fake but valid data-filled databases
Hi! Looks interesting. I usually use faker for this (https://github.com/joke2k/faker). How does fake2db compare to it?
emillon··on Show HN: SWAPI – A Star Wars API
Under which license is this data available?
emillon··on Ask HN: Who wants to be hired? (December 2014)
Location: Paris, France

Remote: Possible

Willing to relocate: Not immediately but we can discuss it.

Technologies: OCaml, Haskell, Python, C

Resume: http://www-apr.lip6.fr/~millon/cv-emillon.pdf

Github: https://github.com/emillon

Blog: http://blog.emillon.org/

Email: me AT emillon DOT org

My background is in security & formal methods. In my PhD thesis I wrote a type inference system to detect security bugs in the Linux kernel. I'm passionate about open source and contribute quite a lot to Debian.

Happy to chat with you about cool opportunities!

emillon··on Unicode Text Converter
It depends on the size of the tab headers.
emillon··on Unicode Text Converter
Funny how it triggered a bug in Firefox. When the tab is unfocused, its title in the handle is "𝑼𝒏…", but when it gets the focus it becomes "𝑼<D835>…" (in a square box). The next codepoint is U+1D48F whose UTF-16 BE encoding is d8 35 dc 8f.

I'd say that the truncation algorithm operates on bytes and that it can't make sense of d8 35, but I'm not too sure how to fix that since graphemes can have arbitrary length (right?). Do you have to compute the width in advance?

emillon··on San Francisco system font replacement for Yosemite
> You must be a registered Apple Developer to use these fonts. Do not download if you don't have a paid Apple Developer Program account.

I presume that this is against github's TOS.

emillon··on A Pragmatic Guide to Getting Things Done
Org mode has a feature for that:

http://orgmode.org/manual/Stuck-projects.html

emillon··on Vulnerability in Microsoft TLS library could allow remote code execution
Unikernels can be a nice solution for this: it's possible to have a termination proxy mirage kernel sitting directly on Xen that only does TLS using ocaml-tls. It does not support everything either but it's coming.
emillon··on How I created two images with the same MD5 hash
In that case that's second pre-image resistance though, not collision resistance. TTBOMK that's still not possible with MD5 (though it will probably be in a few years).
Page 1 of 11Next →