Hacker Newsnew | past | comments | ask | show | jobs | submit | deweerdt's commentslogin

The H2O build produces libh2o and libh2o-evloop. The latter doesn't depend on libuv.


This is the only claim that i've found saying that throttling (or disabling, for that matter) renegotiation would prevent the issue: https://twitter.com/Unreal_IRCd/status/778975019829489664

The advisory makes it sound like that would be the case, but it would have been great if that was explicitly stated.




I bought the app, and I'm really happy with it, thanks!

I know it's a long shot, but some sort of shell integration would be awesome. My typical day is > 60% iTerm2. iTerm2 has shell integration: https://iterm2.com/shell_integration.html, and maybe that would be one way is something that Qbserve could be fetching info about what's going on in the terminal.


Yes, I got many requests for iTerm2 tracking and it will be definitely added. I'm looking into the available options, so thank you for the link!


Any chance of tracking Terminal.app?


Sure, I will check it too.


And I forgot to say that you made a great app! 95% gonna buy.


The newyorker ran an interesting piece along those lines: http://www.newyorker.com/magazine/2015/11/16/politics-and-th...


I think that gofmt is particularly innovative, in the sense that it acknowledges that formatting is integral part of the language.

In the sense that a programming language is not only made to be parsed by a computer, but also read back by a human.


Yes, and that the nuances of how things are formatted are really not that important, but rather having a standard which provides a consistent reading experience is the important aspect.


I agree completely with this. After fighting over code formatting for so long (often starting those fights myself), I have thankfully come to realize that what format you use almost never matters, only that you use some standardized format.


And in the case of go that standard is language wide, not just project, team, or company wide.


I think that's one of the best contributions golang has made to the programming world. The idea that the language itself should be easy and unambiguous for the compiler and the human to parse. And that a single formatting standard makes life easier for everyone.

If we ever move beyond using text files for storing code, we could eliminate formatting differences entirely... but efforts in that direction have run into many issues in the past.


Except the go standard is awful, so a language-wide formatting requirement with bad defaults makes the language basically unusable (since programs are made to be read, not run).


Rust does something similar. It doesn't allow for brace-less clauses and it also bitches and moans at you about 'miss-using' camelCase, snake_case, etc. Which is great because it means that by default all project will follow a similar mark-up.


We also have 'rustfmt' in development, which goes even further than the built-in lints.


Actually for C there has always been GNU indent, which serves a similar function as gofmt.


> I think that gofmt is particularly innovative, in the sense that it acknowledges that formatting is integral part of the language.

gofmt is still optional. Python significant white spaces are not.


I thought that the go compiler would throw an error of your code is not in the format produced by gofmt. You don't need to use the tool, but you need to have your code in the same format that the tool would produce.


> I thought that the go compiler would throw an error of your code is not in the format produced by gofmt.

This is not the case.


Nope. The gofmt-contract is a purely social one. But it's one held by nearly the entire go community which probably gave you that impression for good reason.


Wow, true. The first thing that I read was how to set up emacs to run gofmt every time you save a src file. After that, I never questioned it.


> Other musical spammers simply upload the same song thousands of times with different titles that are purposely similar to major hits

Reminded me of: https://en.wikipedia.org/wiki/U2_(EP)


Oh, I thought that was a joke about U2 on iTunes ;)



> gcc seems to use a fixed size "pool" of mutexes attributed to a shared_ptr according to a hash of its pointee address, when dealing with atomic operations. In other words, no rocket-science for atomic shared pointers until now.

A side effect of the shared pool is that you might have two totally unrelated pointers share the same mutex, leading to surprising locking behaviors. Something to keep in mind.


surprising locking behaviors – there is a phrase to strike terror into the heart of any sufficiently experienced programmer.


As I explained in a commentary: As far as I understand gcc implementation. In a pseudo-code it would be:

Mutex mutexes[SIZE_OF_POOL];

int hash(void* p) { ... }

std::shared_ptr<t> atomic_load( const std::shared_ptr<t>* p )

{

    int r = hash(p);

    lock(mutextes[r % SIZE_OF_POOL]);
    return *p; // Safe copy of p.
}

All the other atomic operations (store, etc) use the same lock pool, so it should be fine for the copy! If you want to take a look at gcc's implementation:

https://github.com/gcc-mirror/gcc/blob/bd3f0a53c07086e978ea4...

https://github.com/gcc-mirror/gcc/blob/bd3f0a53c07086e978ea4...


Yes, that's my understanding of the implementation as well. I was commenting on the fact that you might have two totally unrelated p1 and p2, where (hash(p1) % SIZE_OF_POOL) == (hash(p2) % SIZE_OF_POOL), that will end up sharing the same mutex.


Yes definitely tricky. It might give a heart attack to some high frequency system designers! I will investigate this topic in future: maybe someone can come up with a spin-lock or lock free solution.


Note: this is from 2007 and discusses 32bits x86 disassembly.


damn..


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: