HNHacker News
TopNewBestAskShowJobs

grn

1 karma · joined September 22, 2026

submissionscomments
grn··on Some decompiling, reverse engineering, and keygen tutorials
You can also have some fun by doing crackmes at http://www.crackmes.de. Many crackmes require considerable technical and analytical skills. They also enable you to learn the underlying platform better.
grn··on Some decompiling, reverse engineering, and keygen tutorials
That's also my story. I spent countless hours reverse engineering software but stopped after going Linux-only. In fact I realized that reverse engineering was the only reason I'd been using Windows for a very long time.

I also remember many wonderful tools like PEiD (locating and identifying hash functions), hiew (hexeditor), RSATool (RSA cracking tool), FSG (file compressor). There was also OllyDbg and it seems that it's still actively developed.

Ah, memories.

grn··on Ask HN: What interesting books are you reading now?
Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister - a great book about software projects management

Founders at Work: Stories of Startups' Early Days by Jessica Livingstone - fascinating stories of founders of companies both young and old

grn··on Difference Between the Ideal Disparity of Wealth, and the Reality
I think that you confused wealth with money. pg's article you quoted makes this distinction pretty clearly:

If you want to create wealth, it will help to understand what it is. Wealth is not the same thing as money. [3] Wealth is as old as human history. Far older, in fact; ants have wealth. Money is a comparatively recent invention.

Wealth is the fundamental thing. Wealth is stuff we want: food, clothes, houses, cars, gadgets, travel to interesting places, and so on. You can have wealth without having money. If you had a magic machine that could on command make you a car or cook you dinner or do your laundry, or do anything else you wanted, you wouldn't need money. Whereas if you were in the middle of Antarctica, where there is nothing to buy, it wouldn't matter how much money you had.

Later there's an example of creating wealth:

Suppose you own a beat-up old car. Instead of sitting on your butt next summer, you could spend the time restoring your car to pristine condition. In doing so you create wealth. The world is-- and you specifically are-- one pristine old car the richer. And not just in some metaphorical way. If you sell your car, you'll get more for it.

grn··on Unix tricks
Personally I put the following in my .bashrc:

    function pushcd {
        if [ $# -eq 0 ]; then
            pushd ~ > /dev/null
        else
            pushd "$@" > /dev/null
        fi
    }

    alias cd='pushcd'
    alias b='popd > /dev/null'
Then cd saves the history of visited directories and b navigates backwards, e.g.:

    ~$ cd /tmp
    /tmp$ cd /usr
    /usr$ b
    /tmp$ b
    ~$
grn··on Some dark corners of C
It's also worth pointing out that buffers passed to strcpy, memcpy, etc. must not overlap. Otherwise it results in undefined behavior.
grn··on Vim After 11 Years
No, if I remember correctly it was somewhere on http://emacswiki.org which is a great resource by the way.
grn··on Vim After 11 Years
I can recommend CtrlP (or Command-T). I can't imagine navigating in a project without them. They also have great buffer navigation. Personally I mapped <leader>t to CtrlP file search, and <leader>b to CtrlP buffer search (:CtrlPBuffer).
grn··on Vim After 11 Years
Is rxvt slower? Recently I switched from xterm to rxvt-unicode and it's really great!
grn··on Vim After 11 Years
undofile sounds great! I didn't know about it.

Some people use jj to go to the normal mode. Personally I remapped Caps Lock to Escape in my whole system, so I can go to normal mode easily.

You can yank to the system clipboard by providing appropriate register to yank into. You do that by pressing "* before the yank command (e.g. "*yy to yank the current line).

grn··on Vim After 11 Years
Usually I use a method that I found on some Emacs-related website. It said to use text search for navigating around the file. That's why I use / pretty often. I use f, t, and related movements as arguments to actions.
grn··on Vim After 11 Years
Personally I have a mapping <leader>x that starts a terminal emulator when running under X or drops to the shell otherwise. When I work on a project I cd into its directory. Executing commands is just a matter of hitting <leader>x, doing what's necessary, and closing the terminal.
grn··on Write More Classes
I would argue that this repetition is not essential. It happens when you assign a constructor argument to an attribute directly without any modification. But there are case where it doesn't appear:

  - the attribute has a different name
  - an attribute is set whose value is a function of more than one argument
  - an attribute is set to a constant value independent of constructor arguments
In languages requiring attribute declarations the minimum number of occurrences is 2 (declaration and initialization in a constructor). When declarations aren't required then it's just initialization.

How often such circumstances occur is another issue. The form of initialization that you mentioned is probably the most common so languages can provide shortcuts in this case.

grn··on Write More Classes
I don't think that nullary constructors are so good. If you have dependencies then after constructing your object it'll be in an invalid state because the dependencies aren't set up correctly.
grn··on Why I Like Go
I remember that Go had some issues related to the garbage collector on 32-bit machines. Are they solved now?
grn··on Kandan - an open Source alternative to HipChat
I think that AGPL requires you to give source code to the users of the program. If you use a modified version internally then you'll have to give the source code to your employees. That isn't as problematic as sharing with the whole outside world.

Or maybe I misinterpret the license?

grn··on The R learning curve
I haven't used R nor Pandas. How does the two compare? Why do people use R and not Python?
grn··on How does a computer restart itself? (2011)
Where can I learn more about the PC hardware? I find this topic very interesting however I've never learnt more than the basic PC architecture.
grn··on Libcurl remote code execution
Here you can read about defeating the protections you mentioned: http://www.blackhat.com/presentations/bh-europe-09/Fritsch/B...
grn··on The R learning curve
Wouldn't it be better to have a Python statistics library instead of creating a new language? When I looked at the documentation of R it looked very convoluted and it seems that my feeling is confirmed by other comments in this thread.
grn··on Kandan - an open Source alternative to HipChat
At the company I work at we decided against IRC because of possible difficulties for non-technical employees. Currently we're using XMPP but we're considering other solutions.
grn··on Libcurl remote code execution
On my Debian Squeeze I get the following:

    $ curl --version
    curl 7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
    Protocols: dict file ftp ftps http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp 
    Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
Looks pretty impressive.
grn··on Announcing Topaz: A New Ruby
ruby that comes with Debian Squeeze.

    $ ruby --version
    ruby 1.8.7 (2010-08-16 patchlevel 302) [i486-linux]
grn··on Announcing Topaz: A New Ruby
In order to eliminate the potential bias of startup time I run similar test in many iterations. Here's what I got:

    $ time ruby -e "10000.times { puts 'hello world' }" > /dev/null
    real    0m0.102s
    user    0m0.096s
    sys     0m0.005s
and

    $ time ./topaz -e "10000.times { puts 'hello world' }" > /dev/null
    real    0m0.098s
    user    0m0.071s
    sys     0m0.026s
Any idea why I don't see such big difference?
grn··on Are you an advanced rubyist?
Please also note that t.send(:attr=, 5) returns 10.

When you do t.attr = x Ruby sends :attr= with x as the argument to t and then ignores the return value of the message and returns x instead.

grn··on Are you an advanced rubyist?
It's related to the right-associativity of the assignment operator and its expected semantics. If you write

    a = b = c
then it is interpreted as

    a = (b = c)
When c = 5 then you expect that

    a = b = 5 # which is equivalent to a = (b = 5)
results in a and b set to 5. That's why = must return its right-hand side.
grn··on I hate comments
Comments are useful when they provide information that is not in the code (e.g. rationale for the choice of an algorithm, source of a regular expression that parses an URL). Your example HTML encoding function can be coded as:

    def clean(foo)
        return [foo, foo.apply_html_encoding]
    end
The encoding logic should be contained in apply_html_encoding. The point is that most of the functions/methods that are 65 lines long are badly coded.
grn··on 100,000 stars
You could also take a look at http://htwins.net/scale2/. It's also a very nice demonstration of the scale of the universe from the smallest to the largest objects.
grn··on The Programmers Before Us Were Better
Similar claim was made by Alan Kay in his lecture Normal Considered Harmful [1]. However he didn't complain about lower barriers to entry. Instead he pointed out that the people in the 90s ignored the work and experience of the past generations of programmers. He especially criticized the Web.

[1] http://www.youtube.com/watch?v=FvmTSpJU-Xc

grn··on Ask HN: How do you decide which language to use for a project?
Availability of libraries may be an issue. I recently decided to go with Python instead of Ruby for my side project because it has a great symbolic mathematics library named SymPy.
← PreviousPage 4 of 6Next →