
So what happened to the HN server? - huhtenberg
I'm sure I'm not the only one curious how that Altair is holding up.
======
lifeisstillgood
I have only one portal onto the Internet - this site. I check it first thing
and last thing, and when it was down today I had a weird epiphany - I did not
mind.

HN is not a service, its not a startup trying to get mindshare - its a (luvvie
alert) community - and one where the downtime had a known and obvious cause
and did not matter - rtm would fix it, I would catch up, I knew _this_ thread
would exist and I would still get insight into what is happening 12 hours
ahead of everyone else.

I thought I would be more bothered - turns out I am emotionally invested, not
emotionally dependant.

To PG et al, good luck with the fixes, and thanks.

Cheers

~~~
dfc
I am not familiar with _"luvvie alert"_?

~~~
lifeisstillgood
Imagine you are at a nice party in London. You are chatting to an interesting
sounding person who turns out is an actor, and then you hear phrases like this

"just one summer with the RSC back when I was younger".

"Of course Johnny said, ... umm, Gielguld of course dahling, did you see him
in the Tempest in 74? Wunderful"

"I was saying to Sam just after that Quantum thing. You really should talk to
Barbara about directing the next one. I have her number; charming lady, did I
ever tell you about the time she ..."

A small red rotating flashing light will rise up out of the coffee table next
to you and the words "luvvie alert" will be flashed across your field of
vision.

~~~
bigtones
Well you learn something new every day. From your beautiful description I
could picture this type of person exactly !

------
kyro
PG wasn't aware that PetSmart closes an hour earlier on Sundays, so he was
forced to wait till opening this morning to get the additional hamsters needed
to keep this place running.

~~~
3327
amazing... Just amazing... Would you happen to know what breed of hamsters he
is using?

~~~
Filligree
Cured djungarian hamsters, I believe.

~~~
JacobAldridge
Djungarian hamsters? Well now you have two problems.

------
JuDue
Fast is one thing.

BUT I'd much rather get rid of the "this link has expired" syndrome.

Fast is only impressive if the results are modern.

~~~
brudgers
The superior results from my browser's back button far outweigh the
inconvenience of the expired link. I click on a link from the "Ask" front
page, reply to the top comment, and my comment appears in the thread. Next I
click "back" on my browser and I'm back at the front page of "ask".

I do that much more often than I hit an expired link.

~~~
jules
That doesn't really have much to do with the expired link issue. That issue
exists because the targets of links are stored as closures on the server. What
you want is to serialize those closures into the URL itself, instead of
letting the URL be a pointer to a closure stored on the server. In traditional
web applications, you'd have to do that serialization manually (although if
you've never used such a closure based web framework you might not even be
aware that you're doing this, just like a C programmer who has never used a
high level language might not consciously realize that he is implementing
objects or closures or garbage collection manually -- or like an old Fortran
programmer who is not aware that he is implementing recursion manually). The
problem used to be much worse, but then PG did this transformation manually
for the important subset of the site (most importantly for links to the
comments section -- these links no longer expire).

Here's an example. Currently if you go to the home page and then click the
"More" link at the bottom to go to the next page, and wait long enough, the
more link expires. That's because it's currently implemented as something like
this (not sure about ARC syntax, I'll use Scheme syntax here, but you get the
idea):

    
    
        (define (show-list-of-posts page-number)
          ... display the rest of the homepage ...
          (link "More" (lambda () (show-list-of-posts (+ 1 page-number)))))
    

This stores the closure `(lambda () (show-list-of-posts (+ 1 page-number)))`
with the free variable `page-number` in a hash table on the server. The URL
becomes an index into that hash table. But the only information needed to
reconstruct such a closure, is the function body and the free variables. So if
we defined an auxilary function:

    
    
        (define (foo page-number)
          (show-list-of-posts (+ 1 page-number)))
    

then we could represent the closure as the pair ("foo",page-number). If we
encode that in the URL, then instead of looking up the closure from the hash
table, we can reconstruct the closure on the fly. Hence we do no longer have
to store anything on the server, and no links can expire anymore.

There are some challenges when you want to do this transformation
automatically, but they can be overcome.

~~~
jgrahamc
"The problem used to be much worse, but then PG did this transformation
manually for the important subset of the site (most importantly for links to
the comments section -- these links no longer expire)."

I don't think this is strictly true. The comments and reply links simply link
to a normal (non-closure) URL on the site and the page is generated from that
URL in the normal manner.

~~~
jules
I don't understand the disagreement...isn't that the same thing I said? IIRC
it used to be the case that all links could expire, then he did this
transformation from closures stored on the server to closures manually
serialized in the URLs (which results in a normal URL as you say). What I'm
describing is how a web framework could do that automatically, which means you
get the behavior and expressiveness of closures without the link expired
issue. Though I can see that the explanation isn't very clear, but I don't
know how to make it more clear. Edit: don't downvote him people, it is a
perfectly fine comment.

~~~
irahul
> then he did this transformation from closures stored on the server to
> closures manually serialized in the URLs (which results in a normal URL as
> you say).

The reply links have a parameter 'id' - the id of the comment to which the
reply is being posted. I would guess it's just passed to a normal function
which adds the reply to the post.

May be you mean the same thing, but "serializing closures in the url"(where?
all I see is the id of the post being replied to) isn't the same as params in
the url which are then passed to a function.

~~~
jules
Yes, my point is that it _is_ the same thing. What's happening is just manual
closure conversion (<http://en.wikipedia.org/wiki/Lambda_lifting>), except the
resulting data gets saved in the URL rather than the server. On the server,
closures saved in the hash table, also have "params which are then passed to a
function", except that the params (i.e. the free variables) are saved on the
server inside the closure rather than in the URL.

If you have a lambda expression like `(lambda () (show-list-of-posts (+ 1
page-number)))`, the Scheme implementation does these things:

1\. Introduce a global function definition with the same body as the lambda
expression but with an extra parameter for the free variables. The free
variables in the body of the function get replaced with expressions that
extract their value from the extra parameter that has the free variables.

2\. Convert the lambda expression to an expression that builds a pair of a
function pointer to that global function, plus the values of the free
variables.

For example the code:

    
    
        (define (show-list-of-posts page-number)
           ... display the rest of the homepage ...
           (link "More" (lambda () (show-list-of-posts (+ 1 page-number))))
    

Will get converted to something like this:

    
    
        ;; this is the extra global function that has the body of the lambda expression
        ;; note that the reference to `page-number` got 
        ;; replaced by `(extract-value "page-number" params)`
        (define (closure-324 params)
           (show-list-of-posts (+ 1 (extract-value "page-number" params))))
    
        ;; note that the lambda expression gets replaced by a create-closure expression
        (define (show-list-of-posts page-number)
           ... display the rest of the homepage ...
           (link "More" (create-closure closure-324 "page-number" page-number)))
    

create-closure creates a closure data structure where the first argument is
the function pointer, and the rest of the arguments are the free variables.

Now, what happens if you want to remove this closure business in a web
application, and instead use normal URLs?

First, you introduce a global request handler for the body of the lambda:

    
    
        (define-handler (post-list-handler params)
           (show-list-of-posts (+ 1 (extract-value "page-number" params))))
    

This would define the handler for news.ycombinator.com/post-list-handler?page-
number=12.

Then, instead of the (link ...) with a closure, you just link to that url in
the show-list-of-posts function:

    
    
        (define (show-list-of-posts page-number)
           ... display the rest of the homepage ...
           (link "More" (create-url post-list-handler "page-number" page-number)))
    

Compare these code snippets to the one above. Do you see the similarity to
closure conversion? In both cases we:

1\. Introduce a global function/handler for the body of the lambda.

2\. That function/handler gets a `params` argument that has the free
variables.

3\. Everywhere a free variable is referenced in the body, it gets replaced by
an expression that extracts the value from the params argument.

4\. In place of the lambda expression, we have respectively a (create-closure
func free-vars...) or a (create-url handler free-vars...)

So it's really completely analogous. That's why I say that we are just
serializing the closure here, and this could be done automatically. Hopefully
this makes it more clear what I mean, but maybe these details just make it
less clear if you're not familiar with how closures are implemented (closure
conversion)...

------
markyc
strange productivity peak recorded in the IT sector during the past 16 hours

~~~
carlio
Soon in the news: "New startup emerges from stealth mode after delivering on
promise to improve IT efficiency by 80%"

------
tferris
Saturday, I thought: "This guy (PG) is really brave, everybody is nowadays
using virtualized server environments on mulit-core machines and PG just gets
some bare metal and puts his app on one core and one thread. WTF, this guy is
a genius, single-threaded apps on bare metal FTW, this is so great and I am
doing this too."

After seeing this thing down for several hours -- and Google hate downtimes,
they punish you instantly -- I think: "Maybe not."

However, happy to hear what went wrong and why we still should go for the bare
metal thing.

~~~
stiff
What would the benefits of using a virtualized server for a relatively small
(in terms of server needs) site like HN be? The way I see it so far, is that
virtualization is mostly beneficial for hosting companies that can provide
cheaper hosting and have better isolation and easier resource allocation. But
I can't think of any big benefits for the site owner, assuming they can afford
a dedicated server, and I can see downsides of virtualization, so I am
genuinely curious if I miss something.

~~~
gmac
One thing is abstracted failure-proof(ish) disks. I'm considering moving from
Linode to Hetzner for the enormous amount more RAM I can afford on a bare
metal box there, but the one thing that gives me pause is having only RAID1
redundancy, and having to manage it myself.

------
wglb
Here is a curious thing--now that its up, checking
<http://news.ycombinator.com/threads?id=pg> times out. And apparently only for
PG. Other frequent commenters work fine.

~~~
youngerdryas
It is back up now as well as the comments page.

------
dotmanish
More importantly, why isn't there a status page for something that's
equivalent to a lifesaving drug for many?

~~~
supercoder
there's only one server. if the server is down, then assume the status is not
'green'.

~~~
dasil003
How can Joe-random-user be certain the server is down?

~~~
lucaspiller
<http://www.downforeveryoneorjustme.com/>

~~~
beaumartinez
<http://isup.me/> (their official shortened link).

------
superflit
My bad karma tainted the server..

~~~
supercoder
I'll upvote you so it doesnt happen again.

~~~
superflit
Thanks Bro. Lived in Colorado for 3 years, Eric cartman was my role model ;)

------
gbraad
_phew_ Almost thought HN was blocked here in China...

~~~
lucb1e
There is no way to know if it's just you for whom it's blocked? Are services
like isup.me/domain also blocked?

~~~
gbraad
There s a plethora of checks I could do, and a lot of sites which check from
different locations within china. The Internet is not same everywhere... But
even some of these sites are blocked.

I did visit one of those quickly and the result was HN should be reachable...
Hmmmm, therefore I. Checked with another age and this also timed out on my
tablet. So either my ADSL or the server was problematic? I went for dinner and
upon return it worked.

The check I used was <http://www.blockedinchina.net/> First time I used this
site...

------
JosephRedfern
There was a post about it recently (advising that there would be downtime) -
they've upgraded. It's considerably quicker now!

~~~
neeee
That was for Saturday morning.

~~~
gabriel34
But saturday morning the site was up Perhaps the server upgrade was delayed or
something went wrong with it.

~~~
neeee
The site was down briefly saturday morning.

------
farious
I was starting to freak out without HN! (Even created an account just to
express my feelings)

------
barking
This latest test suggests that HN seeks membership of errorban club.
[http://www.codinghorror.com/blog/2011/06/suspension-ban-
or-h...](http://www.codinghorror.com/blog/2011/06/suspension-ban-or-
hellban.html)

------
jbrooksuk
Goodbye productivity.

~~~
X4
Goodbye procrastination.

------
dutchbrit
Curious too. I was able to ping the servers when it went down again a few
hours ago just fine. Let's just hope it stays up now!

------
X4
Why don't you Ajaxify HN while you're at it??

~~~
Yuioup
Not trolling but just wondering. What added value does Ajaxifying the site
bring to HN?

~~~
X4
:) I'd instantly know when I get downvoted for saying something stupid ;)

seeing submissions in realtime, reducing load on the HN server. Saving F5
addicts.

~~~
duiker101
F5 addicts will never go away.

~~~
X4
They will, once you have a highly responsive single-page site. I think more
responsivity can calm down even F5 addicts

------
tuke
I thought the thing was running off of a server on an iPhone; probably just
ran out of battery power.

------
purplepilot
i had to work for heavens sake

------
runarb
Do we get a new server? Please tell me more :)

------
X4
What else can go wrong on monday?

------
guojh0570
I think it may need some time to adapt the new server.

------
youngerdryas
Apparently it is not out of the woods yet - the comment tab links to the front
page.

~~~
samwillis
Seems to be showing the homepage, not redirecting it. I think PG/RTM must have
introduced a bug while fixing the problem. Have they no unit tests ;-D ?

~~~
youngerdryas
Or maybe they removed the comment page because it was causing the crashes,
possibly related to the Unicrud Twitter crashes?

------
kaushaldhora
Thank God Its Up now...:)

~~~
lucb1e
_Thank God it's up now._ FTFY

Overcapitalization is annoying, and it's "it's", not "its".

