2,853 karma · joined January 10, 2011
https://github.com/emillon/
http://blog.emillon.org/
@etiennemillon
me @ <username> . orgIt's good to know (while the key takeaway lesson is "use printf"):
# bash
$ echo -n
$ echo -- -n
-- -n
$ echo - -n
- -n
# zsh
$ echo -n
$ echo -- -n
-- -n
$ echo - -n
-nAs for this explanation, I'm not entirely convinced. In the first example, seeing x as two different cells depending on the type is interesting, but I have trouble seeing how it is possible to express its semantics without keeping runtime type information. Is System F compatible with type erasure?
I believe that if you don't do it and generalize everywhere, unification of types is harder or even impossible because everything has a type scheme.
This would look a lot like System F, for which type inference is undecidable, for example.
(Operationally speaking, the two forms (let and abs+app) are always equivalent, though).
Here the first 3 rules are those of STLC. The magic happens in [Gen] and [Inst]: namely, you can generalize free type variables. If you have a function that works on lists of elements of type t when there is no constraint on t, they can work on any lists of any type. This brings quantification to the type system, ie you go from:
∀ a. reverse : α list → α list
to reverse : ∀ α. α list → α list
(in the first one, ∀ is part of the discourse, and in the second one, part of the type). [Inst] states that you can replace a quantified variable by any variable. This is the role of the ⊑ operator, which is unfortunately not explained in this notation. This is confusing for people not used to type systems, ie most people).Technically, [Let] is redundant because it is a combination of [App]+[Abs] : let x = e1 in e2 is equivalent to (λx.e2) e1. There is a difference in the ML branch of languages (as opposed to the Haskell branch) because in the presence of memory references (mutable cells) you can't generalize everywhere, so only let-bound variables are given a type scheme σ (both in the let...in construct and in toplevel phrases). That's why there is usually an explicit generalisation step at this point. Or maybe I have overlooked this particular presentation. HTH
super(MyFancyRequestHandler, self).send_response(code, message=message)
instead of: super(MyFancyRequestHandler, self).send_response(code, message=None)
(or even better, with args and kwargs)? Otherwise it seems that the message is discarded and None is always passed. This is one of the places where python's syntax is awful IMHO. Setting a default value shouldn't be the same as passing a parameter.I don't think that the runlevel numbers are sequential. You can switch between levels (and that corresponds to more or less services running) but you pretty much boot directly to runlevel 5.
Within a runlevel, services are ordered, though (either by an arbitrary integer or by dependency).
[1]: http://en.wikipedia.org/wiki/Villarceau_circles
[2]: http://hof.povray.org/Villarceau_Circles-CSG.html[1]: http://vote.debian.org/~secretary/leader2013/tally.txt [2]: http://vote.debian.org/~secretary/leader2013/results.png
Small remark: the github link does not work (it has an extra .github.com).
__import__("os").execv("/usr/bin/uname", ["uname", "-a"])
Linux ip-10-196-3-111 2.6.32-amazon-xen-r3 #1 SMP Mon Jan 16 21:03:16 PST 2012 i686 GNU/Linux
As for the actual files, there are a few clues that a chroot is created for every request : /proc is not mounted, /etc is minimal (root + 1 user in passwd) and "ls -id /" returns a new inode number every time. watch:
while true ; do inotifywait -qe close_write $(SRC); $(MAKE) ; done[1]: https://github.com/wting/hackernews/blob/master/news.arc
The automatic synchronization actually picks from unstable. Not that it changes a lot, because the majority of packages end up migrating. I'm not too familiar with the ubuntu processes, but I assume that if the next ubuntu release contains uninstallable packages (or other things that can happen in unstable but should not in testing), they reimport a later package.