HN user

lubomir

561 karma
Posts10
Comments50
View on HN

This is mentioned in the comments on youtube as well. The reply from author is "That's because there was a half-second near the end in my driveway where the thinning of my hair was much more visible than I was comfortable with, so I edited that part out."

Identity: there exists one unique element e such that for any a it holds that e⋆a = a⋆e = a. This e is the same no matter what a you pick.

Invertibility: given any a, there is b such that a⋆b = b⋆a = e. For two different a's you get two different b's.

As example let G be a set of all strings and the operation is appending. There is element e == "". For any string a it holds that if you append empty string to any side, you get the original string back. However there is no inverse. You can not append two string to form an empty string. Apparently, strings with appending do not form a group.

Group example: let G be a set of all integers and the operation is addition. Then e is 0, as for all a it holds that a + 0 = 0 + a = a, and for each a you can find -a such that a + (-a) = (-a) + a = 0.

Just a quick note: your pricing calculator does not let me enter any number. I use Czech keyboard layout where numbers are typed with Shift key. This happens in both Firefox and Chrome. Once I switch to English layout, it works fine.

Snake Vim Trainer 13 years ago

It is not insisting. Vim will happilly let you use the arrow keys. It's just that once you acclimate to "hjkl", it is slightly faster and more comfortable, since you don't need to move right hand anywhere while typing. Or at least that's how it works for me.

In C it is quite common for functions to indicate failure by returning NULL. Not checking for these errors is another very common reason for segfaults.

I agree it is not really important.

The main difference between the two I see is that partial application basically binds a certain argument to a fixed value, while currying only changes the way the function is called (thus allowing for easier partial application). It is easier to see on a function with more than two arguments. Imagine f:(A×B×C)->D. Currying it will yield f':A->(B->(C->D)), so you would call it as f'(1)(2)(3). On the other hand, partially applying on first argument it would yield f'':(B×C)->D.

What this article calls currying is actually partial application.

Partial application is a technique where you take a function that requires n arguments, pass in the first one and get a function that needs n-1 arguments.

Currying is a technique where you take a function that takes n arguments and turn it into a function that can be partially applied. E.g. in Haskell it works with tuples as arguments. There is function 'curry :: ((a, b) -> c) -> (a -> b -> c)' and its counterpart 'uncurry :: (a -> b -> c) -> ((a, b) -> c)'.

The given reason for that is that it is a popular game that has no native version (so no one will ask why he is porting Midnight Commander) and it does not use much OS X API. It uses OpenGL, OpenAL, IOKit (for finding input devices), AppKit (creating window), CGL (for configuring OpenGL) and CoreVideo (for running main loop).

About a week ago, the author posted a report to his blog http://www.abclinuxu.cz/blog/doli/2013/7/darling-progress-re....

Summary:

  * It can run basic console programs like Midnight Commander, vim
    or bash, so compatibility of system API is rather good.
  * Dynamic loader is being refactored, because it can not unload
    dynamic libraries now. In the future there will be API that
    would allow loading OS X library into native code.
  * There is a FUSE module for read-only access to .dmg files, so
    that it is not necessary to unpack them.
GNUstep is a problem; it does not seem to be very alive. It does have three backends, but none of them works reliably. The long term (slightly crazy) plan is to implement the basic Cocoa classes over Qt.

Right now the target application that should work is Angry Birds.