To become a good C programmer (2011) - <AUTHOR> http://fabiensanglard.net/c/ <comment><USER2> I feel like I wrote that a decade ago. Wait. Damn. It WAS a decade ago.

Amazingly the list is still relevant. I will try to check out the new suggestions on this thread.

<comment><USER3> I've found "Understanding and Using C Pointers" by Richard Reese, a really wonderful book.

<comment><USER4> So glad to see this little gem mentioned! I have many books on C, but this is the only one I've ever read cover-to-cover. Clear and to the point, and no fluff/silliness. One of my favorite programming books ever!

</comment></comment></comment><comment><USER5> In the 90s, most seriouc C programmers knew about these books. They were the core books most devs relied on and referred to. They're all good.

I disagree with this comment: "No website is as good as a good book. And no good book is as good as a disassembly output."

There are many websites today that are excellent. And there are many websites that cover obscure topics not found in books.

Finally, I think it's important to move past C89 to at least C99. I realize in 2011 (the date of this post), that was less feasible. But today, there is little reason for most projects not use the advances found in C99.

<comment><USER6> > But today, there is little reason for most projects not use the advances > found in C99.

Does visual studio support c99 yet? Last I heard MS wasn't interested in supporting it.

<comment><USER7> Really? No longer an MS user but occasionally my code gets ported to Windows so would like to know more.

<comment><USER8> MSVC in C mode is essentially C89 plus extensions needed to compile C++/C99-isms present in Windows SDK and DDK headers. And Microsoft seems to be mostly interested in whether the compiler is able to build NT kernel and drivers and nothing much else.

<comment><USER9> That's not true for quite some time. Visual Studio 2013 added many C99 features that aren't in C++ like compound literals or designated initializers.

</comment></comment></comment></comment></comment><comment><USER10> It's unfortunate he doesn't list the POSIX system interface, which has personally become an absolute boon:

[https://pubs.opengroup.org/onlinepubs/9699919799/](https://pubs.opengroup.org/onlinepubs/9699919799/)

You can search it using duckduckgo with !posix, too.

Something else I've found infinitely useful when digging into musl libc or doing assembly programming, is the SYSV x64 ABI: [https://refspecs.linuxfoundation.org/elf/x86_64-SysV- psABI.p...](https://refspecs.linuxfoundation.org/elf/x86_64-SysV-psABI.pdf)

<comment><USER11> Thanks for the link to the POSIX docs, looks very useful. More recent specs for the x64 ABI can be found at [https://github.com/hjl- tools/x86-psABI/wiki/X86-psABI](https://github.com/hjl- tools/x86-psABI/wiki/X86-psABI)

</comment></comment><comment><USER12> One of the things I tend to think about these days is return on investment. I spent several years at the beginning of my career being a bad and then mediocre C programmer, and once I found a few other languages, I got the sense that being a mediocre-to-good programmer in these languages would be _much_ easier, and that seems to have been borne out.

Late into a career investing in other areas, what's the advantage of becoming a good C programmer? Especially in a time where Rust and Go are viable options?

<comment><USER13> Rust isn't viable for embedded platforms, at least not yet. It's not as easy to compile it to the most obscure ISAs as C, and the little support it has for stuff like STM32 is restricted to just that group of microcontrollers and doesn't support the entire ARM range. Maybe in the future? I'm looking forward to that day!

Go is probably never going to run on microcontrollers due to its very big overhead.

C perfectly matches on top of the hardware of a processor. Every single design decision about C was made with the computer in mind. Memory, pointers, stack, call stack, returns, arguments, just everything is so excellently designed.

Even Linus Torvalds says so! [https://www.youtube.com/watch?v=CYvJPra7Ebk](https://www.youtube.com/watch?v=CYvJPra7Ebk)

If I were to make one change to C, it would be to completely rip out the #include system and bring a proper modules system. Apart from that, it's pretty much perfect.

<comment><USER14> > Every single design decision about C was made with the computer in mind.

The only problem is that computers have changed a bit in the last 50 years, and C largely hasn't. There are a couple issues:

First, C was designed for single-pass compilers, because the PDP-7 it was designed for was too small to actually run much fancier of a compiler. So C is seriously sub-optimal for optimization in a lot of ways (because the assumption was you weren't going to do compiler optimizations anyway), and there are some user-visible warts like forward declarations that are completely unnecessary today.

Second, the relevant questions with regard to CPU performance have changed a lot. Most notably:

\- CPU performance has completely outstripped memory perf, so memory hierarchies and locality are _everything_

\- Parallelism everywhere. Multiple cores, but also deeper instruction pipelines and other such things.

The way those things map to C is completely implicit; they don't show up in the language at all, and getting the machine to do what you want requires knowing things that the code wouldn't suggest at all.

I think if the same people had designed a language for a similar niche today's hardware, a lot of things would be different.

<comment><USER15> > CPU performance has completely outstripped memory perf, so memory > hierarchies and locality are everything > they don't show up in the language > at all... requires knowing things that the code wouldn't suggest at all

I'm utterly confused at this.

It's trivial to layout memory as you please, where you please, very directly, in C. Set a pointer to and address and write to it. Better yet, I can define a packed struct that maps to a peripheral, point it to its memory address from a data sheet, and have a nice human readable way of controlling it: MyPIECDevice.sample_rate = 2000.

Keeping things physically close in memory has always been a strong requirement, as long as cache, pages, and larger than one-byte-memory buses have existed.

<comment><USER14> > Set a pointer to and address and write to it. Better yet, I can define a > packed struct that maps to a peripheral, point it to its memory address from > a data sheet, and have a nice human readable way of controlling it: > MyPIECDevice.sample_rate = 2000.

Just make sure you don't forget `volatile` in the right places. A lot of codebases end up just using their own wrappers written in asm for this kind of thing, because the developers have learned (rightly or wrongly) not to trust the compiler.

To be clear, it's not _that_ hard to get the memory layout semantics you want in C. But issues around concurrent access, when it is acceptable for the compiler to omit loads & stores, whether an assignment is guaranteed to be a single load/store or possibly be split up (affects both semantics in the case of mmio and also atomicity), are all subtle questions, the answers to which are not at all suggested by the form of the code; The language is very much designed with the assumptions that (1) memory is just storage, so it's not important to be super precise on how reads and writes actually get done (in fairness, the lack of optimization in the original compilers probably made this more straightforward), and (2) concurrent access isn't really that important (the standard was completely silent on the issue of concurrency until C11). If you care about these issues there's a lot of rules lawyering you have to do to be sure your code isn't going to break if the compiler is cleverer than you are. A modern take on C should be much more explicit about semantically meaningful memory access.

I think you can make a sensible argument that wrt _hierarchies_ C is at least not a heck of a lot worse than the instruction set, so maybe I'm conceding that point -- though the instruction set hides a lot that's going on implicitly too. Some of this though I think is the ISA "coddling" C and C programs; in a legacy-free world it might make more sense to have an ISA let the programmer deal with issues around cache coherence. I could imagine some smartly designed system software using the cache in ways that can't be done right now (example: a copying garbage collector with thread-local nurseries that are (1) small enough to fit in cache (2) never evicted and (3) never synced to main memory, because they're thread-local anyway). Experimental ISA design is well outside my area of competency though, so it's possible I'm talking out of my ass. But the general sentiment that modern ISAs hide a lot from the systems programmer and that other directions might make sense is something that I've heard more knowledgeable people suggest as well.

<comment><USER16> >If you care about these issues there's a lot of rules lawyering you have to do to be sure your code isn't going to break if the compiler is cleverer than you are.

>A modern take on C should be much more explicit about semantically meaningful memory access.

If you are working on concurrent code close to the hardware you're going to either have to accept a less efficient language or engage in rule lawyering. Unfortunately, granting the compiler license to perform the most mundane optimizations interferes with concurrent structures. Fortunately, with C there are rules to lawyer with, and they actually are simple. No matter what, rules will always need learned.

</comment></comment></comment></comment></comment></comment><comment><USER17> Why does everyone always suggest K&R? I really don't see the big deal. It's short, contains only trivial toy examples with no real world application, and touches almost nothing on actual project architecture or best practices. I bought it expecting to learn to write programs in C but it's really just a reference manual on syntax.

<comment><USER18> > Why does everyone always suggest K&R?

Because it's the best no bullshit book to learn C, period. Especially coming from garbage collected languages. It's not going to teach you valgrind or GDB, or even compile and link C programs but it will certainly teach you how to write C programs.

> only trivial toy examples with no real world application

Re-implementing POSIX commands is writing real world applications.

> and touches almost nothing on actual project architecture or best practices.

On what platform? Linux? Windows? Mac? tool chains are so different on all these platforms that it wouldn't make sense to spend time on that. That books is about C, not learning autotools and other horrors.

</comment></comment><comment><USER19> This is a great list of books - at least, I found the same ones were the most excellent. Also I really learnt a lot from _21st Century C_ (The author here said they wanted to stick to C89, which is fair enough.)

>To read great C code will help tremendously.

But then he just gives examples of games I don't know and am not really interested in. Anyone know some non-game C that is, I suppose, well-known and wonderfully-written?

Also, am learning about writing APIs, any good books or talks about that people could recommend, or examples of particularly good ones in C? (I'm particularly interested in maths/graphics-type stuff.) Thanks!

<comment><USER20> The sqlite codebase is well-known for being a large, well-written C codebase:

[https://github.com/sqlite/sqlite](https://github.com/sqlite/sqlite)

The tests in particular are very impressive.

Some other notable C codebases: Redis, LuaJIT, FreeBSD, Memcached -->

[https://github.com/antirez/redis](https://github.com/antirez/redis)

[https://github.com/LuaDist/luajit](https://github.com/LuaDist/luajit)

[https://github.com/freebsd/freebsd](https://github.com/freebsd/freebsd)

[https://github.com/memcached/memcached](https://github.com/memcached/memcached)

<comment><USER21> Varnish and the Linux kernel should be in that list as well I think.

<comment><USER20> Nice! Here are the links:

Varnish --> [https://github.com/varnishcache/varnish- cache](https://github.com/varnishcache/varnish-cache)

Linux Kernel --> [https://github.com/torvalds/linux](https://github.com/torvalds/linux)

</comment></comment></comment></comment><comment><USER22> "C Interfaces and Implementations" is another one that comes highly recommended.

[https://sites.google.com/site/cinterfacesimplementations/](https://sites.google.com/site/cinterfacesimplementations/)

<comment><USER23> This book is fantastic to tackle for anyone comfortable with C at the level of K&R. A great second book on C.

And one of the few examples of literate programming one might come across!

</comment></comment><comment><USER24> The K&R book was for decades my gold standard of a programming book. Perfectly clear and concise, its one notable failing being that it's obsolete.

The Rust Programming Language [1] has since equalled and surpassed it in my mind. Hats off for Steve Klabnik & Carol Nichols :)

(note, I'm not saying Rust is a better answer than Fabien's recommendation, just that _its book_ is as high quality as the excellent K&R)

[1] [https://doc.rust-lang.org/book/](https://doc.rust-lang.org/book/)

</comment><comment><USER25> I think for us laymen, the most difficult thing is to find a good reason to use C frequently. I have a few "legitimate" (in the sense that C is actually suitable for those) non-embedded projects that I'd like to take on in the future when I have time to pick up C:

1 - Recreate some of the Linux command line tools, including a command line interface similar to BASH;

2 - Implement a fully functional compiler or byte-code Virtual Machine for a stripped down scripting language;

3 - Write a key-value data store

Sadly I really can't name any project that is not system programming. I saw some projects that use C for backend (CGI style?) programming or game programming but I believe there are more suitable tools for either of them.

BTW I also found it very clear to use C or a stripped down version of C++ to teach myself Data structure.

<comment><USER26> C + knowing the Linux API and what is done in kernel vs user space can lead to very efficient Linux software. Since much consumer software these days is a webapp with a Linux backend, this sort of embedded optimization can make good consumer sense.

<comment><USER25> It's a pity that it's almost impossible for a non programmer to find a C/C++ job nowadays. Much of the deeper knowledge takes too much time and effort to master from outside of the field so I guess most people don't go this way.

</comment></comment></comment><comment><USER27> > No website is as good as a good book

Good (and often forgotten) advice for more than just C...

<comment><USER28> I don't agree with this sentiment. People learn different ways. I personally learn through trial and error, and explanations of things that I haven't been able to "touch" yet don't help me at all.

<comment><USER29> > I don't agree with this sentiment. People learn different ways. I personally > learn through trial and error, and explanations of things that I haven't > been able to "touch" yet don't help me at all.

Learning through trial and error can be okay for custom problems that don't have well defined solutions. For simple problems, it's highly inefficient. Extreme example: if I want to print something to the console in C, I can use trial and error for a half-hour to try to understand the nuances of how to use printf(), or I can read for a few minutes a few pages in a book or an (good) online tutorial. Not only will I learn faster, I will also learn best practices.

My experience has been that people who are really against learning through books/tutorials tend to have short attention spans. Which is okay—books don't work for you. But for people who do have the ability to sit and read, it can be much more efficient than struggling through trial-and-error.

Somebody has already solved your problems, and they can tell you in a few pages how you can solve them too.

</comment></comment></comment><comment><USER30> > The Standard C Library

> Or how errno came to existence?

This is interesting. According to this book, errno was created because they wanted system calls to work like ordinary C functions:

> Each implementation of UNIX adopts a simple method for indicating erroneous > system calls.

> Writing in assembly language, you typically test the carry indicator in the > condition code.

> That scheme is great for assembly language. It is less great for programs > you write in C.

> You can write a library of C-callable functions, one for each distinct > system call.

> You'd like each function return value to be the answer you request when > making that particular system call.

This turned out to be unnecessary. For example, many Linux system calls return a signed size_t type with either the result or the negated errno constant. When an error occurs, the C library stub function simply negates that value and assigns it to errno which is likely a _thread-local_ variable.

The C standard library provides many examples of bad design. All the hidden global data, the broken locale handling, the duplication found in so many str* and mem* functions... Freestanding C lacks most of the standard headers and is a better language for it. Understanding the historical context that contributed to these designs is very useful since it allows new languages to avoid repeating these mistakes.

</comment><comment><USER31> >> Expert C Programming . This book is fantastic because it will bring your attention to what happens under the hood in a very entertaining way. I am not a C programmer nor was trying to become one. Just trying to be familiar with low level programming and computer internals in general. But I enjoyed reading the book a lot. One of the the stories I remember is about the programming contest at Carnegie-Mellon University. The rules were simple that the program had to run as fast as possible and the program had to be written in Pascal or C. Here are some paragraphs extracted from the book about the result. "The actual results were very surprising. The fastest program, as reported by the operating system, took minus three seconds. That's right—the winner ran in a negative amount of time! The next fastest apparently took just a few milliseconds, while the entry in third place came in just under the expected 10 seconds. Obviously, some devious programming had taken place, but what and how? A detailed scrutiny of the winning programs eventually supplied the answer. The program that apparently ran backwards in time had taken advantage of the operating system. The programmer knew where the process control block was stored relative to the base of the stack. He crafted a pointer to access the process control block and overwrote the "CPU-time-used" field with a very high value. The operating system wasn't expecting CPU times that large, and it misinterpreted the very large positive number as a negative number under the two's complement scheme. "

<comment><USER25> This reminds me of Mel the real programmer. I'll quote:

Mel loved the RPC-4000 because he could optimize his code: that is, locate instructions on the drum so that just as one finished its job, the next would be just arriving at the "read head" and available for immediate execution. There was a program to do that job, an "optimizing assembler", but Mel refused to use it.

</comment></comment><comment><USER32> Using C as a lowest-common-denominator for game engines makes sense but I do _love_ having Objective-C (despite the platform limitations). It just makes expressing game logic so easy, with protocols, etc. and I would not want to do it all with just C.

</comment><comment><USER33> Interesting comment they made about using C89 for portability. What's the state of C99 today? I know gcc doesn't support all C99 features, but what about other compilers? Is it worthwhile to use C99 in a new project?

<comment><USER34> C99 is well supported now, but Its has become increasingly clear that some of the changes to the definition of undefined behavior in the spec has made som very troubling compiler optimizations possible that can make C a lot less dependable. Later versions of C also adopt a new memory model that is very broken. memcopy is for instance impossible to implement in C17. Due to these issues the Linux kernel is no longer using standrard C. So as it stands C89 remains a good choice.

<comment><USER35> > Later versions of C also adopt a new memory model that is very broken.

You mean, adopting a memory model that properly supports multi-threaded code?

> memcopy is for instance impossible to implement in C17.

What? I assume you mean memcpy? How is it impossible to implement given that it's implemented in the standard library?

> Due to these issues the Linux kernel is no longer using standrard C.

As others have mentioned, the Linux kernel never used standard C. Just search for, say, the substring "__builtin" where it uses compiler builtins directly. It's also quite recent that Linux can be compiled by clang; if it were using standard C, such compatibility issue would not arise in the first place.

<comment><USER34> The new memory model tried to make it possible to implement fat pointers with reference counters. That means that the compiler must be able to tell when a pointer is being copied. After the spec was ratified several people pointed out that its not possible to implement memcpy(typo sorry) since memcpy doesn't know what it is copying and might therefore copy a pointer without increasing the ref counter.

</comment></comment></comment></comment><comment><USER36> I consider [0] to be well written and fairly low fat.

0 [https://github.com/Genymobile/scrcpy](https://github.com/Genymobile/scrcpy)

<comment><USER37> I think you pasted the wrong URL.

</comment></comment><comment><USER38> Prior discussion: [https://news.ycombinator.com/item?id=11606296](https://news.ycombinator.com/item?id=11606296)

</comment><comment><USER39> I would add "C Interfaces and Implementations" to his (excellent) list.

</comment><comment><USER40> This is a good list because it isn't a gigantic compendium about C.

</comment><comment><USER41> C, the low-level language that cannot even get integer types right and believes that -1 is greater than 1... I wish the Zig language people get some industrial backers so C can finally start fading away to obscurity.

</comment><comment><USER42> > I picked C89 instead of C99

Stopped reading right there.</comment>


Enter 'petro': Venezuela to launch oil-backed cryptocurrency - <AUTHOR> https://www.reuters.com/article/us-venezuela-economy/enter-petro-venezuela-to-launch-oil-backed-cryptocurrency-idUSKBN1DX0SQ?il=0 <comment><USER2> The basic idea is so awesome. But to see that someone does this close before his regime ends, oh well.</comment>


Ask YC: A way to get a European buyer on the Mechanical Turk? - <AUTHOR>

I was curious if any of you knew a way to get work done by Amazon's mechanical Turk. When I try to sign up, the form tells me it's only for US citizens. Any way around this? Alternatives? Or should I find a US buddy to help me out? <comment><USER2> hey brother i will help you out</comment>


Show HN: Practical example of using git and GitHub in a school - <AUTHOR> http://sebastien.saunier.me/blog/2014/04/21/practical-example-of-using-git-in-a-school.html <comment> aug-riedinger Cool article. What about hiding the test code to the students to make sure they don't write their solutions specifically to make their tests pass? Maybe using a git submodule or something?

Besides, I'd be curious to read about your app that runs the tests by itself. Are you going to open-source it? Because until now, I only found paying solutions to having a platform running my tests before I deploy, when I'm pretty sure an Heroku app could handle that pretty well...

<comment><AUTHOR> Thanks!

For the first point, we had a debate on wether we should expose the tests to the student as it would:

1\. Maybe help them to find the solution 2\. Allow them to change the tests just to make their solution pass

In practise, we realized that error messages from specs do not necessary reveal the solution (point 1), and for point 2, we decided to trust the students (they are adults, in a paying bootcamp), and it works actually. So no need to put spec overwriting / hiding.

For the second question, we are running a simple rake runner (see [https://gist.github.com/ssaunier/9713130](https://gist.github.com/ssaunier/9713130)), launching the tests in a specific folder and parsing the result. We are not doing isolated environments with ruby install / bundle install like TravisCI does, so it is suited for our simple use case only.

Hope that answers your question!

</comment></comment><comment><USER2> Great idea! Thanks for sharing!

</comment><comment><USER3> Nice one!! Thanks for sharing!

</comment><comment><USER4> Great idea, great work !

</comment><comment><USER5> super interesting !!

</comment><comment><USER6> amazing. congratz!

</comment><comment> nicolas-lescop Nice !

</comment><comment><USER7> very smart guys !</comment>


Google Maps Reverts to Soviet-Era Place Names in Crimea - <AUTHOR> http://www.rferl.org/content/ukraine-crimea-google-maps-soviet-names/27888523.html <comment><USER2> This seems unnecessarily provocative. Why can't they just restore them to the pre-annexation names (i.e. rolling back the name changes proposed by the Ukrainian parliament)?

That would be the simplest way of saying "We're not playing these games -- with either side of the conflict."

<comment><USER3> This is what they did. They rolled back to soviet era names, which was exactly what the names were before Ukrainian parliament renames them.

So Crimea had a bunch of Soviet-named cities for these years

<comment><USER2> OK -- if so, then the article was pretty sloppy for not clarifying that point.</comment></comment></comment>


Contributing to Open Source projects - <AUTHOR> http://brad.livejournal.com/2409049.html

<comment><USER2> Github solved this problem. Everyone knows how to contribute to a Github project. Click the fork button, commit your patch, send pull request.

<comment><USER3> I wonder if you're being sarcastic? Had you said that to me two weeks ago I wouldn't know what the hell "fork", "commit", and "pull" had to do with contributing.

Git is hardly the _end all be all_.

<comment><USER4> Even for people git-aware, there's a bit more involved.

Most people are probably happy to get patch submissions, but there's some work involved in accepting them.

Generally, project owners want to see a test accompany any change to demonstrate that a bug was fixed or that new behavior does what's claimed. There may also be coding standards to follow, and (ideally) some documentation for new code.

If you omit these things when you submit a patch or issue a a pull request you may still think you're doing the project owner a favor, on the premise that something is better than nothing, but reviewing your submissions and checking that it is correct, and possibly cleaning up your code and adding tests, may end up being more work than it's worth.

Git and github have removed some obstacles to contributing, but there are still assorted details one has to look after.

<comment><USER2> _Generally, project owners want to see a test accompany any change to demonstrate that a bug was fixed or that new behavior does what's claimed. There may also be coding standards to follow, and (ideally) some documentation for new code._

If the project owner really wants the patch, they will fix these details themselves. In my experience this is how project owners reject patches that they don't want; make the submitter do more work than he is willing to so that the patch silently dies.

Personally, I will usually ask a submitter for a test case and some docs... but if I don't hear from them (or hear, "works for me, no time"), I will just write them myself. Same for style issues; easier to just fix them myself, then I know that the style is exactly what I want.

Github, at the very least, eliminates any technical reason not to contribute. Social issues are largely the same; although back-and-forth is a lot easier when you both have access to a public repository. (Who likes attaching the 8th iteration of a patch to email? Not me.)

<comment><USER5> Seriously? I'd much rather get a potential repeated contributor who can follow my style than clean it up without asking him to do it. Double for tests: I frequently can't figure out exactly what the best regression test will be and the contributor needs to make it himself (though that may be a special case of my VCS work). Pull requests actively make commenting on a patch harder than a patchbomb in email. The fork queue (imnsho) is even worse, as I've had people just assume I'll see it and just take it from the fork queue page.

Feel free to write me off as a cranky old fart - I've been doing OSS long enough to remember Subversion as a wonderful thing on the horizon and the pure joy of its relative speed. This is all based on my mostly-poor experiences with GH preventing a community domain forming by causing nobody to talk outside of their commit messages, which is a huge loss.

</comment></comment></comment></comment></comment><comment><USER6> Node.js is a great example of how to do this right. They walk you through the exact steps needed to submit a patch.

<http://nodejs.org/#contributing>

</comment><comment><USER7> One key difference which the post doesn't really touch on is that when it's a company everyone's interests are more closely aligned (or at least should be...).

On the other hand even if you find where to contribute to with open source you can't be as sure your patch will be taken.

(Although as mentioned on LWN: <http://lwn.net/Articles/379109/> it seems Google have managed to fork libjingle, so even Google can't get this right.)

</comment><comment><USER8> I found Giles Bowkett's for-sale video, which covered contributing to open source along with many other things, helpful. Contributing to the open source community way easier than it sounds. Contributing to open source code, specifically, in a noticeable way, is probably harder, but not that much harder.

[http://gilesbowkett.blogspot.com/2010/03/programmers-what- to...](http://gilesbowkett.blogspot.com/2010/03/programmers-what-to-do-if-you- get-fired.html)

It didn't even take a week after I watched it for me to start implementing his suggestions.</comment>


Show HN: Videovote– A YouTube watch party for the world - <AUTHOR> https://www.twitch.tv/videovote <comment><AUTHOR> I always found it difficult to figure out what to watch on youtube with its huge catalog of videos. With that in mind, a friend and I made this application over the last three weeks that allows users on Twitch to vote for their favorite videos with a constant stream of videos playing each less than 10 minutes. Feel free to vote for your favorite videos by pasting a youtube url in the chat.</comment>


Dispatches From Hubei: Deaths due to expansive care system in China - <AUTHOR> http://www.sixthtone.com/news/1005146/dispatches-from-hubei-two-weeks-between-life-and-death <comment><AUTHOR> The article writes about the death of an acutely ill pregnant woman when treatment stopped for lack of money. Sadly it was the day before the government decided to pick up the costs of all coronavirus treatments. The infection was spreading quickly due to a sum of factors. One of them, the expansive access to care, then people goes home instead of being threated and quarantined.

The woman in the article is also mentioned in another article that made the front page on HN [1]

[1] [https://www.straitstimes.com/asia/east-asia/reporters- notebo...](https://www.straitstimes.com/asia/east-asia/reporters-notebook- life-and-death-in-a-wuhan-coronavirus-icu)

<comment><USER2> I believe you mean "expensive", not "expansive".

<comment><AUTHOR> Right, but there is no way to edit the title once published.</comment></comment></comment>


Computers are fast - <AUTHOR> http://blog.hackensplat.com/2009/11/computers-are-fast.html <comment><USER2> I sometimes feel bad that I'm not more of an "algorythms developer", that I don't read all(any) research papers, that I don't remember what RedBlack Trees are, that other than minimal attention to using decent basic structures and reasonable bigO operaions (e.g hashes, don't pop of front of array in loop) when I sit down and code I invariably brute force it.

OTOH, I encounter the "computers are fast" phenomenon 9 out of ten times.

<comment><USER3> I'm on the other side of your situation. These days, nine out of ten times I'm looking at papers, algorithms, lots of paper with big-O and cache nitpicking, brainstorming with others trying to make those 20 Gbps turn to 60..

Speed is a direct product of simplicity, and for me simple is elegant. I also think speed is important enough for me to feel strongly about cutting down a "feature" or two, to just make the damned thing not take all night to solve your sudoku..

<comment><USER4> Well I think it's a combination of two things. Most days when I'm writing a web app or some other high level program I kind of chuck data about without thinking about it.

When I put on my kernel dev hat or when I was working on SQL Server I spent all day making sure other me could throw data around haphazardly and not get stuck on a course-grained kernel lock or only hit 1/8 of the pipelines.

Sometimes it's just too much to handle all at once, even if you know what you're doing in both domains.

</comment></comment></comment><comment><USER5> CPUs are fast but the ratio of latency of random access vs. maximum bandwidth is getting worse.

In nanoseconds, approximately:

      10^7 Disk seek
      10^4 2KB over 1Gbps
      10^2 RAM uncached reference
      10^1 L2/L3 cache reference
      10^0 L1 cache reference

That's why systems don't _feel_ fast lately. In particular for big data or bloated software that can't fit well within the caches or shared systems doing a lot of frequent switches (VMs in particular.)

Many classic assumptions for algorithms are outdated. Like avoiding full sequential scans. Those are fast for simple operations.

<comment><USER6> SSD's have become viable in terms of $/GB to justify them in a server room these days. I'd highly recommend moving to them (for your boot drive/VMs at least). It will make a world of difference. $400 may seem like a lot to spend for 160GB of storage, but knocking off two orders of magnitude off your seek time quickly becomes worth it when you're running four VMs off it at once.

<comment><USER5> Seagate Momentus XT hybrid is very cool. Probably the best bang for the buck at the moment.

[http://www.anandtech.com/show/3734/seagates-momentus-xt- revi...](http://www.anandtech.com/show/3734/seagates-momentus-xt-review- finally-a-good-hybrid-hdd/)

<comment><USER7> If you haven't read a lot about SSDs, you should read the big Anandtech article: <http://www.anandtech.com/show/2738> .

I didn't think SSDs were that important until I read this and was like, "Oh, I should get one." Which I haven't done yet -- soon, though. When AppleCare on my iMac expires.

<comment><USER5> SSD (80GB, Intel) + hybrid (500GB, Seagate)

</comment></comment></comment></comment></comment><comment><USER8> I loved the punchline to the story. Someone decides to write an algorithm to compute a few tables, works a while on an algorithm to compute them efficiently, in the end gives up and brute-forces it very inefficiently, then discovers that it takes only 2 seconds to run.

And the punchline: there's an article on Wikipedia with all of the values pre- computed!

</comment><comment><USER9> Something I like thinking about: Your computer can (probably) perform a few dozen arithmetic operations or a few stores/reads in the time light leaving your monitor takes to reach your eye balls.

edit: not to mention GPUs

<comment><USER10> I don't think so.

Light travels about 1 foot/nanosecond, so the travel time from monitor to eyeball is 1 or 2 nanoseconds, which might be 2 or 3 clock cycles. So I think at most 3 operations per CPU.

<comment><USER9> There's 2 to 3 feet between me and my screen, my cpu has 2 cores, and modern CPUs can perform many simple arithmetic operations per clock cycle, per core. Not to mention what's happening in my GPU.

<comment><USER11> Let's take a concrete example. A Core-i7 980X Extreme Edition, the latest and greatest from Intel, can execute a maximum of four instructions in a clock cycle. (The numbers on actual code are probably a little over 1 instruction per cycle, which is really pretty good.) It runs at 3.33 GHz and has 6 cores. That's a theoretical maximum of about 4 _3.33_ 6 = 79 instructions per nanosecond, on all cores combined. Assuming I didn't make some dumb arithmetic mistake.

Of course, in real code you'll be lucky to get anywhere near that.

<comment><USER12> Regarding double precision calculations (I can't compare random instructions) at the time OP mentions the PC FPU made something of the order of KFLOPS. Even assuming 100 KFLOPS (it was less), one current graphical card can be up to 5 million times faster than the PC of that time in some scientific calculations, that is, the gamer of today has under his desk the computing power of 5 million first PC computers.

i7 can do 2 double precision adds per clock per core, that would give 36 GFLOPS on 6 cores (assuming 3 GHz clock), and at the same time ATI Radeon 5870 GPU can do 500 GFLOPS in double precision, that's 500 floating point calculations in one nanosecond.

To cross the 0.5 meter distance the light takes around 1.6 ns, which means that during that time the CPU is able to do almost 60 FPU additions and the GPU around 800 FPU additions. Impressive.

</comment></comment></comment></comment></comment><comment><USER13> Yes. Computers are fast. Who cares about algorithms... Premature optimization is evil...

But why then it is so annoying that Visual Studio starts longer than my whole custom linux system in VM on the same computer...

<comment><USER14> I blame I/O. It's pretty fast warmed up.

<comment><USER15> I/O is one of my biggest daily pains. Spend some time in Process Explorer on Windows and you can see just how much disk-based I/O the average app is doing. Anti-virus software makes the bad problem worse. It's just like pouring sugar in a gastank. Why isn't more software designed to take advantage, where appropriate, of large amounts of RAM?

<comment><USER16> Did you see that article on the Varnish site about second-guessing Virtual Memory? "2006 programmng" I think it was.

<comment><USER17> obligatory HN links:

Varnish dev says second-guessing VM is so 1975: <http://news.ycombinator.com/item?id=1554656> OR <http://news.ycombinator.com/item?id=1760811>

Redis dev says second-guessing VM is elite (and not doing so is so 2006): <http://news.ycombinator.com/item?id=1760540>

</comment></comment></comment></comment></comment><comment><USER18> A long time ago I was working on a data conversion project that involved taking what was essentially a 10 dimensional data set and reordering it. The easiest way to achieve this was to load everything into a ten dimensional array and read it out in another order, but I was sure this would take too long. So I spent some time trying to get a sparse array implementation working until I finally sat down and worked out that the entire 10 dimension data structure would require 63 megabytes of RAM (not giga, this was a long time ago.) The Sparc server in the next room had 64 megs of RAM. It was a simple algorithm with quick results and I moved on to the next problem. I think that was the last time I really really cared about performance. I'd spent the previous 15 years getting closer and closer to the hardware, caring about every register and every byte. I've spent the 15 years since then on the slow slide to letting the computer worry about everything. I currently live in Python land and love every minute of it. I hear that string concatenation is slow but honestly, it's never been an issue for me. Computers really are fast.

<comment><USER19> Another: I solved the 8-queens problem for a magazine contest using a BASIC program (!) Instead of modelling the board with an 8X8 array, I used the digits 1-8 representing the height of the queen (row #), and the 8 digits in a string as the heights for each column. I permuted the digits - n! time to execute which was never going to finish.

So, prune! as it swapped digits left to right in a Grey-code-like sequence, test the digits to the left for diagonals (|row#A - row#B| == |A-B|) and don't bother to recurse if its already failing.

Every few minutes - out popped a solution, and it finished in under 25 minutes.

Nowadays, that would take imperceptible time to execute.

</comment></comment><comment><USER20> 1993: if

1998: "if" too slow; use "case".

2002: "case" too slow; use Boolean algebra.

2006: Boolean algebra too slow, use arrays & pointers.

2010: Who wrote this shit and what does it do? Rewritten to use "if".

</comment><comment><USER21> See also: "Slow Languages Battle Across Time" (<http://prog21.dadgum.com/52.html>)

</comment><comment><USER22> This is why we can't have nice things!

I'm kidding, obviously, but this is a very common phenomenon. Developers optimize their algorithms based on real-world performance instead of theory.

I wonder what impact this has on the world, would the cost of computing be dramatically lower (making computers more accessible) if we didn't do this?

</comment><comment><USER23> One thing I beat on my development staff about is that computers _are_ fast, stupid fast. As in billions of operations per _second_ fast. With rare exception, if I do an operation on something in memory, it shouldn't take any more than 1/2 a second for it to happen. This extends to UI interactions, selecting a few thousand items in a list shouldn't take 4 seconds a disk swap.

There are times though, when they have to go back and revisit something where they just "let the computer handle it" and whatever libraries they happened to be using do the work, and go back and rewrite a bunch of stuff to be performant from scratch. When that happens, there usually is some pretty large speedup, on the order of hundreds of percent.

</comment><comment><USER24> Naturally, when writing a non-realtime program that is only going to be run once, you should consider development time to be part of running time.

</comment><comment><USER25> No need to brute-force. It's pretty easy to just eliminate possibilities:

The largest number must be larger than 7, else the largest possible sum of the three numbers is 21.

If the largest number is 8, then the other two must sum to 15, which is not possible since they must both be 7 or less.

So the largest number is 9, and the other two numbers sum to 14. The possibilities for those other two, with the smallest first are (5 and 9), (6 and 8), or (7 and 7). Clearly (5 and 9) would duplicate the original 9 (5+9+9), and (7 and 7) would duplicate the 7.

So the only possible solution is 6+8+9.

</comment><comment><USER26> Most of that time is probably actually spent outputting the numbers. Something like that would be really quick on the back end.

And with a bit of optimization, it would be even quicker.

</comment><comment><USER27> Definitely makes you think about opportunity cost in terms of CS: spend time writing an efficient algorithm or just bust out the ole brute force. Surprisingly, brute force works really well with the excess performance we all have sitting around...

...until you have several hundred users hitting your server running that brute force algorithm. Sigh.

<comment><USER28> Most developers like to imagine they're going to have somewhere between 100 and 10,000 concurrent requests on their webserver shortly after launch, so they have to write really efficient algorithms. The reality is usually considerably less demanding. In most cases, its usually just cheaper to throw hardware at it. Of course, in some rare cases, algorithm efficiency is crucially important, but this is pretty rare.

As much as everyone would like to think they are working on something in the same class as google, facebook, etc, very few projects are comparable. You're better off shipping early, and dealing with scalability _when_ it becomes a problem.

</comment></comment><comment><USER29> "When in doubt, use brute force." -- Ken Thompson

<comment><USER30> "If brute force doesn't work, you're not using enough brute force." -- anonymous

</comment></comment><comment><USER31> If computers are so fast how come I'm waiting for them as much as ever?

<comment><USER28> Do you have an SSD? (I'm not joking by the way...) :)

</comment></comment><comment><USER32> I was going to point out that this extra part of Killer Soduku reminded me of Kakuro, but I see that's mentioned in the first line of the Wikipedia entry he links to:

<http://en.wikipedia.org/wiki/Kakuro>

</comment><comment><USER33> It's true that computers are really fast. I solve Project Euler puzzles on a pretty old PC, using Python which is an interpreted language, and it's amazing how much "brute force" I can get away with. Test all permutations of the digits 1-9 for primality? Easy.

</comment><comment><USER34> "Soon, computers will be fast."

\- Billy Zelsnack</comment>


New Google book Site Reliability Workbook, free download until August 23 - <AUTHOR> https://landing.google.com/sre/book.html?resubmit <comment><AUTHOR> This is a sequel to their 2016 book, Site Reliability Engineering, which is free to read online at the same link.</comment>


Google to delay distribution of new Android tablet code to outside programmers - <AUTHOR> http://www.businessweek.com/technology/content/mar2011/tc20110324_269784.htm

<comment><USER2> So they're waiting to release the code until it's a little more fully baked? <yawn /> Somebody wake me up when this is real news.

Sure, you can quibble over this move and how it doesn't fit with the usual "release early, release often" ideology of F/OSS, but - in the grand scheme of things - I have a very hard time seeing this as a big deal. If they said "We're not going to release the code, EVVAAAAAAARRR, MUWAHAHAHAHAHAHAHAHAHAA" then I could see a reason for being concerned.

<comment><USER3> Some privileged companies are not only getting access to the code but actually shipping Honeycomb based products today. Most of the reviews of the Xoom noted some lack of polish but I don't recall any massive problems that would suggest Honeycomb is simply too unstable/feature incomplete to be released.

<comment><USER4> I don't think they want anyone touching it until Ice Cream (3.1), when the Tablet and Phone "forks" of Android are merged together as one.

</comment></comment></comment><comment><USER5> The definition make sense now: <http://twitter.com/#!/Arubin/status/27808662429>

</comment><comment><USER6> To save RoG some trouble, we already have this thread: <http://news.ycombinator.com/item?id=2365725>

</comment><comment><USER7> What licenses are used in Android beside the kernel's GPLv2? In other words, what are they required to release? What can they keep closed at will?

<comment><USER8> Most of it uses the Apache Source License 2.0, which doesn't require releasing the source. You can look through <http://android.git.kernel.org/> (especially external) for some others, but they're mostly similar licenses.

There are some GPL things in there besides the kernel, and a few of them are probably shipped. I'm not sure how e.g., Motorola is handling this (since they clearly have an obligation to provide the GPL source).

See also <http://source.android.com/source/licenses.html>

<comment><USER9> My understanding is that all the exciting changes in Honeycomb involve the user interface, which is all ASL.

</comment></comment></comment><comment><USER10> Just seems like the typical Cathedral vs Bazaar discussion to me. Android always has been a Cathedral.

</comment><comment><USER11> meego is developed in the open... but obviously its not an option yet.</comment>


IPad Vision in 1994? For visionary Roger Fidler, a lot of what-ifs - <AUTHOR> http://www.washingtonpost.com/business/for-tablet-computer-visionary-roger-fidler-a-lot-of-what-ifs/2012/02/28/gIQAM0kN1R_story.html <comment><USER2> So, we'll just ignore the Dynabook in 1968 that precedes them all? Having an idea is about 0.001% of "invention". The rest is all the "little details".</comment>


Ask HN: What do I do with my written book? - <AUTHOR> I have written an advice/career book on the process of doing informational interviews. It's like networking, but without the agenda/sales/please-help-me vibe. I am leaning towards giving it away.
I am looking for A)What should I do with this content and B)If the answer is to give it away, what is the best way to do it?.
Notes: It is probably not long enough to be a full-fledged business/advice book. Closer to a booklet/long blog post. I am not connected enough or really have a desire to go through the publishing process. I don't have major distribution channels. My primary goal isn't to make money, but if that is possible while still helping people, I wouldn't mind!
Things I have seen people do: -Give it out as an eBook -Turn it into a blog post -Give it out in exchange for emails -Self Publish through Amazon (and make no money) -Build a website around it <comment><USER2> A standard self-published e-book model, which sort of combines many of the options you mention above, is along these lines.

First, put the e-book up on Gumroad and/or Amazon or the like, or set up an e-commerce site to sell it yourself (better margins; more work). Also set up a mailing list through MailChimp or the like.

Set up a site about the book, with a blog. Publish a few articles in the blog on the same content that your book is about (but not articles directly from the book itself; you don't want people who buy the book to feel ripped off). In the site's sidebar and at the end of each article, prompt people for their email address to receive a sample chapter of the book and sign up for a mailing list to receive new articles about the topic directly to their inbox for free. Now, as you continue to add new blog posts to the site - twice every month or so - publish them to the mailing list as well.

Finally, end each blog post/mailing list article with a call to action to buy the book. The article will establish your expertise on the subject, and as they're added to your site, will build up your SEO and start driving traffic from search terms related to your topic.

Eventually, if people are interested in your book, write another one. Hey, now you've got a voluntary mailing list full of people interested in your topic to advertise your new book to - it should have much better sales initially than your first one.

Wash, rinse, repeat. I haven't actually done this myself, but it seems to work for a lot of people.

<comment><AUTHOR> Thanks for breaking down each step in so much detail. Is there any value in going the "give the whole thing away for free" route? I have seen a few folks do this ([http://gameprogrammingpatterns.com/](http://gameprogrammingpatterns.com/))

<comment><USER2> There can certainly be value if you think that teaching others what you know is more valuable to you than making a (larger) profit. Altruism is a thing.

Another way to give it away would be to play a long game of sorts by requiring people to sign up to the mailing list to get the free book. That way, you're still building up a list of interested people to spa--… market to when you write your follow-up books (and sell _those_ for a profit).

</comment></comment></comment><comment><USER3> >I have written an advice/career book...

You didn't mention 'why' you wrote this book. Was there a particular goal in mind? We're you trying to help a specific type of person?

You might find some useful take-aways from Tim Ferriss on the subject of publishing> [http://fourhourworkweek.com/tag/self- publishing/](http://fourhourworkweek.com/tag/self-publishing/)

<comment><AUTHOR> Two reasons: 1)I really believe that following these steps can help new grads or unemployed people get jobs. 2)I give this advice all the time (verbally) and wanted a way to give someone the advice in a more helpful, thought-out format.

<comment><USER4> Can I get a free copy please?

<comment><AUTHOR> Absolutely! I am completing editing right now, should be done after Christmas. Glad to help! Shoot me an email</comment></comment></comment></comment>


How to get a 15-year-old started with coding? - <AUTHOR>

I have a nephew who has expressed interest in spending part of his summer learning more about computers and learning to code a bit.
I was thinking about inviting him to spend a few weeks at my dev shop where he can work largely in isolation but I'll be around and a couple of my guys can give him some guidance and help him learn.
Basically, my question is if you were trying to introduce a 15-year-old to coding, how would you go about it?
I was thinking about sticking a few books in front of him and challenging him to build a basic twitter or flickr clone just to give him a target. Maybe 2 days on HTML/CSS, 2 days on JQuery, 3-5 days in PHP or Ruby but I want to keep him away from frameworks, maybe another week with MySQL or SQL and trying to put it all together. I can build him the DB if needed.
It's been 16 years since I started so it's hard to put myself in his shoes. For some of you younger coders:
1) When you started coding, what did you start with? HTML/CSS, then basic scripting or JQuery, then DB stuff? What language would you start with today if you were just starting?
2) What resources did you use? Web sites/tutorials? Books? Any good entry level books you'd recommend I put in front of him?
3) Did you have specific things you were trying to build?
4) Did anyone help you or provide guidance? If so how/what?
5) What kind of guidance would have helped you? <comment><USER2> 1) I started with HTML in '96 and, TI calculator programming aside, it wasn't until 2000 (college) that I got into programming. Mostly because I asked around and nobody knew where to tell me to start (Java -> Python -> Javascript). If I were starting today and on a *nix environment, I'd start with javascript. Doing simple socket programming with node.js is dead simple and the browser provides an obvious gui progression path. I've also heard of a lot of people starting with Python and very recently with Obj-C/iphone development.

2) Started with a teach-yourself HTML 3.2 book. For learning JS today, I think eloquentjavascript.net is good if a bit dry and I like Manning's jQuery in Action if going the jQuery route.

3) I started out with the intent of making a WYSIWYG web editor that didn't suck...and I'm still planning on doing it at "some point".

4) No guidance for me, unfortunately. Aside from having a professor in my first Java class say "well don't worry about that, you don't need to understand it for a while", which annoyed me enough that I went and learned Java myself through Thinking in Java. Otherwise I'm entirely self taught.

5) Guidance on what to look at/what to understand would have been helpful. I'm very grateful to the mozilla project, since that's where I learned software engineering. Having someone point out version control earlier on would have been helpful.

</comment><comment><USER3> 1) HTML/CSS -> PHP/MySQL -> Javascript -> Python

2) Random tutorials online and an O'Reilly PHP/MySQL book.

3) Yes, and that was critical. I basically learned what I needed to get the next thing done

4) A friend helped get me pointed in the right direction, and I took it from there.

5) General best-practices. I started with just notepad and had horrible coding style. I think just having someone to answer questions and occasionally review code would have been a tremendous help.

Although PHP pretty much sucks as a language, it was extremely gratifying to see my work progress quickly ("Look, I made that dynamic list out of values in a database!").

</comment><comment><USER4> I tried to get into programming several times before it finally stuck. I ended up with a collection of c++ and java books that I never got further than a few chapters in. JavaScript of all things really got me into programming. I stuck with it long enough because I received nearly instantaneous gratification. I could actually make things happen on screen. Manipulating strings and tossing numbers around in a terminal window gets boring fast and the bar to entry for GUIs in java or c++ is tedious and frustrating. Once I understood the basics of programming, it wasn't much for me to pick up python, java, ruby, AS3, etc.. So, you're bang on with starting him building a web app. For so many reasons really...

To answer your questions directly...

1\. I'd start with JavaScript because it's fun and useful (despite its warts) and either python or ruby.

2\. Stackoverflow.com, The Pragmatic Programmer

3\. I had a client/server computer science course that was making me build very small apps but it wasn't until I had an idea for something _I_ really wanted to build that I started staying up all night learning. Before I had either my own "itch to scratch" or a professor requiring me to building something I floundered and got bored quickly. I needed a clearly defined goal to accomplish.

4\. Sadly, no. My professor wasn't really interested in his students. Google was my only friend.

5\. For someone to sit down and clearly explain fundamental concepts to me like OOP, MVC, etc. It's one thing to read about it but someone over my shoulder pointing at things and explaining why a block of code sucks or not would have really helped.

Best of luck. If you nephew sticks with coding, he will really thank you later!

</comment><comment><USER5> 1\. I started coding in QBASIC, then VB, then VB.NET, then HTML/CSS/JavaScript, then Java, then Ruby, then Python, then C#. If I was starting today, I would use Ruby or Python.

2\. Built-in documentation, college classes and web documentation. Generally I find documentation far more useful than tutorials. I would highly recommend checking out Zed Shaw's new book: Learn Python the Hard Way (<http://learnpythonthehardway.org/index>).

3\. I don't think I've ever learned anything when I didn't have something specific to build. Just playing around trying to learn stuff never works for me. I need to have a reason to learn, a project that needs the technology I'm trying to learn.

4\. I've had very little direct guidance in learning to program. I had my professors, which helped me mostly by introducing me to the technologies and giving me things to build. I've had various people on StackOverflow help me with particular. Mostly, I am guided by inspiration, not direction interaction. People like Zed Shaw inspire me. People like why. Sometimes libraries inspire me. LINQ is incredibly inspiring. As is pyparsing. These people and libraries give me an idea of what I want my contributions to the programming world to look like.

5\. Best guidance in my mind is giving you a tool and then giving you something to build with it. I never would have found Ruby without one of my professors (or I would have found it a lot later). I may never have cared without Ruby Quiz and Rails inspiring me to build things. This is why I think you should check out Zed's python book. He teaches the language by giving you the tools and then asking you to do things with them.

<comment><AUTHOR> great suggestion ... I'll forward him that PDF when he's done with finals and if he works his way through that and wants to learn more, I'll invite him to spend a few weeks at my shop. Thanks Daniel.

<comment><USER6> When you do, let me know how it's working out for him. I may start holding in- person meetups for people who try to go through the book and I watch and make notes on things that need to be improved. I'll announce it if I do.

</comment></comment></comment><comment><USER7> In reality, web development is quite a hostile environment, in my opinion. Too many different technologies. Better to keep him 'sandboxed' in a single environment, say, Ruby. The great thing about web development of course, is that it's easy to see _what_ you can achieve. Hacking Ruby command line scripts not so much. When I started back in the 90'es it was Visual Basic 6. As horrible a language it was, the instant gratification of pointing a button to a certain method etc. was invaluable, in my opinion.

Edit: O.K., I don't have any _current_ ideas, sorry :)

</comment><comment><USER8> 1) I started with BASIC/QBASIC, assembler, some C, html/css, javascript, php and then some python. Later at school I got C/C++, Java and VB.NET but by then I was already web development for quite some time. 2) At first I only had old books from my local library, hence the BASIC/QBASIC, assembler and C. Later they ordered new books on the 'new HTML 4.0' and soon I started doing js and php as well. 3) no not really, although I did have projects of my own most of it was purely for fun. To be honest, it only struck me after a year or so I was programming, before that I was only trying stuff out. I think that's an important part of the deal, having fun and just trying new things. 4) I was on my own, I didn't have anyone behind me to teach me... 5) To be honest I think should have focused more on C/C++, but I absolutely don't regret being a web developer, I would hate being a C/C++ developer I think. I don't know why, just a feeling...

About helping your nephew, try to make him see it as a game and have some fun. Explain that the computer does whatever he wants, he only has to program it himself. If the application, in whatever language it is written, doesn't run, you have a 99.9% change it's your own fault.

</comment><comment><USER9> I started recently learning with a pretty good book on Python. It teaches by having you create little games. "Python Programming for the Absolute Beginner, 3rd Edition" By Michael Dawson. For Ruby on Rails, a great, if a little wacky introduction, would be: <http://mislav.uniqpath.com/poignant-guide/>

</comment><comment><USER10> I'd start with python or javascript these days (I personally did my first self taught hacking in basic on DOS -- some simple text processing for a statistics class). I think the learner resources might be better for python. If he doesn't know anything about programming then you might not be allowing enough time on the different technologies, that's pulling together a lot for a first project.

If you have a modern enough browser you might be able to keep it to html/css/javascript and use web storage for a database. That'd be good for some little single user system or browser based game or something.

Depending on the type of person he is and what you work on at your dev shop you could get him to fix real-but-small problems -- language in error messages, pixel level interface visual problems, etc.

<comment><AUTHOR> yeah, that might be a bit aggressive with the number of technologies. He can probably get lost in HTML/css/javascript for a couple of months. I'd just like to give him an opportunity to build something he currently uses so he doesn't waste a bunch of time figuring out what to build. I'll have to dig into python and see if any of my guys around here know it. I don't and I'd like to keep him working in something that we use so we can help him out. Thanks for the comment.

</comment></comment><comment><USER11> I'm younger myself, and I started learning with WYSIWYG html and copy+paste javascript. From there, I learned real html and css, progressing to PHP. After PHP, I was real interested in this thing called Ruby on Rails, took me forever to even get it installed. After that, I continued to work in rails and ruby, along with php. I think if I could do it again, I'd start learning just python or ruby. A linux environment is a big plus, even if it's just a virtual machine. Javascript is a great language, and starting out with jQuery then backtracing to real javascript is a good, and instantly gratifying way to learn, you have to start somewhere.

</comment><comment><USER12> Is there a FIRST Robotics or FIRST tech challenge team at his school or in his area? (<http://usfirst.org/>) Programming robots is a great way to pull in kids (for FRC, they can use C/C++, LabVIEW or Java, FTC is LabVIEW or C I think).

I'd avoid HTML/CSS/PHP like the plague for a newbie. Have him write an ELIZA- style chatbot in Python or do some Project Euler questions in Python/C++/C#/Java

</comment><comment><USER13> PyGame. <http://www.pygame.org/></comment>


Ask HN: How can a HN comment parent id be higher than it's id? - <AUTHOR> I'm doing some looking into HN data and I notice times where the parent field is higher than the comment id.  Assuming this is a simple autoincrement id, the comment id should always be higher.<p>Any ideas how this happens?  is this from merging stories? something else? <comment><USER2> Sometimes the mods merge the comments of a story and a close repost. For example: [https://news.ycombinator.com/item?id=15137168](https://news.ycombinator.com/item?id=15137168)

I'm not sure if that cover all your cases.

<comment><AUTHOR> Could be - but I see examples without [dupe] in the title. But that's probably it.

Its interesting because I see plenty of times where they don't do this..

<comment><USER2> It's a manual decision [I guess they have a magical button to do the merge.] so sometimes they don't find out abbot the dupe or they may decide no to merge them, so it's quite random and arbitrary, but it looks very difficult to automate.

</comment></comment></comment><comment><USER3> Parent is updated, perhaps?

<comment><AUTHOR> I hope not - usually updates don't require a new primary id.</comment></comment>


Sorry, It's Game Over, Linux - <AUTHOR> http://www.conceivablytech.com/9718/business/sorry-its-game-over-linux-forrester-analyst

<comment><USER2> How about linking to the original Forrester blog entry that prompted this post?</comment>


Steve Jobs Giving His First Big Demo (Video) - <AUTHOR> http://www.techcrunch.com/2009/01/24/video-steve-jobs-giving-his-first-big-demo/ <comment><USER2> Was anyone else surprised by the rock concert -like reaction of the crowd? Where did this presentation take place? Who made up the audience?

<comment><USER3> [http://www.google.com/search?q=steve+jobs+1984+macintosh+deb...](http://www.google.com/search?q=steve+jobs+1984+macintosh+debut+shareholders)

"When Steve Jobs introduced the Macintosh at the company's annual shareholders meeting on January 24, 1984, pandemonium apparently ensued."

</comment></comment><comment><USER4> Man, Jobs has advanced a lot since then. He seems a lot like a college geek in this video.

I think this video best proves what I like to say about Jobs' presentations: it's not _always_ that he's best of show, though he's had great moments. Very often it only seems so brilliant because he so often reveals monumental products.

<comment><USER5> It's true that Jobs isn't necessarily the best presenter in the world. But I haven't seen anyone who can continually present their products with the purpose, passion, and pride that Jobs does, all of which are on display here. (No doubt because, as you say, he so often reveals monumental products.)

Someone could give a one-off presentation that might wow you more than any single Jobs presentation. But I can't think of anybody in recent times who has delivered more total wow over the course of his lifespan.

<comment><USER4> Absolutely! I love Jobs. I've tried to watch every keynote he's given. He's magnificent. But I feel that if he was told to give a keynote about a worse product, he'd refuse outright. A part of his passion comes from his belief that his product is the absolute best.

It's also why he's such a good salesperson. He's got the best product. It's also how the Apple web site works: they have an almost pornographic display of their material. I love it. It sells better than any hype could.</comment></comment></comment>


Current Covid-19 Growth Rate Seems Unsustainable - <AUTHOR> https://gist.github.com/62726164/a501e13ae9bec8ac8a3b5a440d93803d <comment><USER2> In practical terms virtually all exponential functions are logistic functions:

[https://en.wikipedia.org/wiki/Logistic_function](https://en.wikipedia.org/wiki/Logistic_function)

As the curve reaches the full size of the population it slows down. However, logistic and exponential functions are the same until they get close to the population bound. It's not unreasonable to believe this projection will be accurate until COVID-19 infections get close to 1B people in early May, unless significant quarantine procedures are put in place.

If quarantine procedures are enacted, you usually get "waves" of infection, where the infection spreads exponentially for a while until quarantine or social distancing is enacted, then dies out, then is reintroduced again, and this continues until all susceptible individuals have developed immunity. The point of the quarantine is not to prevent people from getting the disease (they're going to anyway); it's to lower and stagger the peak so that it doesn't overwhelm care facilities.</comment>


Project Betfair, part 7 (an HFT market-making strategy for Betfair in Scala) - <AUTHOR> https://kimonote.com/@mildbyte/project-betfair-part-7-2964/ <comment><USER2> This series makes you feel like market makers work hard for a living.</comment>


Thousands at risk of tax errors as HMRC's software struggles - <AUTHOR> https://www.ft.com/content/df96ab50-1aa3-11e7-bcac-6d03d067f81f <comment><USER2> Given that it was probably made over a long time by the usual suspects (Capita (known as "Crapita") amongst other "AcmeCos") this is unsurprising.</comment>


Show HN: New time and daylight application - <AUTHOR> https://chronozone.xyz/ <comment><USER2> It's great. The 12, 24, and light clock visualization is particularly good.

In terms of feedback, only one thing: The first thing I tried didn't work. This was dragging the map so I could explore the effect of latitude on day length in both hemispheres. It appears to only support the case where the crosshairs are near an actual city (which is not possible deep down in the southern hemisphere).

<comment><USER3> This might benefit from the code at [https://bl.ocks.org/mbostock/4597134](https://bl.ocks.org/mbostock/4597134), which uses lat/long directly.

<comment><AUTHOR> I like that. Big fan of D3

</comment></comment></comment><comment><AUTHOR> Just finished this little application that shows the current time in any zone and a sort of animated daylight clock that adjusts according to map coordinates. Value any feedback and a few social shares if it's any good. Thanks for looking.

<comment><USER4> I can't see the blue shades in the daylight clock with µblock running (in Chromium on Linux), so at first I didn't understand what the purpose of the website is, but it looks great in an incognito window — and thus without µblock — in the same browser.

<comment><AUTHOR> Hi. Thanks. Don't know how to address that. Must be something to do with the XHR for the timezone info.

<comment><USER4> Did you change anything? It works now, outside of incognito mode, with µblock running.

<comment><AUTHOR> That's good. No, nothing changed

<comment><USER4> I hate when software gets creative…

</comment></comment></comment></comment></comment></comment><comment><USER5> The clock took me a while to understand, but then I realized it's much more intuitive than I assumed and I was reading too much into it.

Here's what's going on:

\- At the center of the map is the crosshairs. Whereever this crosshair is, all other information will be a function of this location.

\- The inner analog clock shows timezone-legal official time at the crosshairs on a traditional, 12-hour clock dial.

\- The outer dial shows a 24-hour day's hours. The magenta dot indicates that location's current solar time, and therefore, its progression through the day.

\- The colorbands immediately inside the outer dial show each phase of the day at that location, keyed by the outer dial. The legend for each color is on the right.

Honestly, the impedance mismatch between the inner 12-hour dial and the outer 24-hour dial confused me at first.

<comment><USER6> >Honestly, the impedance mismatch between the inner 12-hour dial and the outer 24-hour dial confused me at first.

Likewise. It took me a second to realize that while the hour hand on the clock appears to be pointing at the "Astronomical twilight" shaded portion of the ring for my location, those two elements are completely unrelated.

<comment><USER7> > It took me a second to realize that while the hour hand on the clock appears > to be pointing at the "Astronomical twilight" shaded portion of the ring for > my location, those two elements are completely unrelated.

This matches my experience precisely.

</comment></comment></comment><comment><USER8> This is great. You know what would really take it to the next level? Tides! It would be awesome if micro-adjustments along the coast showed the times of low and high tides. My parents, who live along the coast, would use it multiple times/day. Most tide applications are a little too complex for their needs.

</comment><comment><USER9> This is very nice. The only thing I'd like better is if it changed on the fly as you scrolled around (rather than you needing to have the screen stationary).

<comment><USER10> This would be a big improvement, making it much easier to explore the map.

</comment></comment><comment><USER11> I like it! Two feature requests: deep linking to specific cities/coordinates/whatever, and geolocating me so I don't have to use the search bar first thing.

</comment><comment><USER12> Very nice. As somebody else mentioned, the length of the day would be nice (it could be a third column of times).

The time zone borders map is a bit low resolution so in some places it gets it wrong (for example the northern sides of Roche Harbor, WA and Eastport, MA). Also seems to be a few years out of date (doesn't show America/Santa Isabel). But I expect these are outside your control.

Sometimes it's nice to know the expected daylight in a place that you might visit later in the year, so a way to choose the day of the year would be useful. Perhaps a year-long slider across the bottom of the page that points to a date (defaulting to today)?

</comment><comment><USER13> Nice app, good work OP! I currently use [http://suncalc.net](http://suncalc.net) for stuff like this, something I really value that Chronozone doesn't seem to have yet is the ability to select different times of the year, as well as seeing the movement of the sun during the day.

</comment><comment><USER14> Was recently reading about the photography "Golden hour"[0], and this is very relevant. Bookmarked - thanks!

[0]: [https://en.wikipedia.org/wiki/Golden_hour_(photography)](https://en.wikipedia.org/wiki/Golden_hour_\(photography\))

</comment><comment><USER15> Love this, good work. Some suggestions (these are my own little quirks):

\- (desktop) Zooming is on the cursor, rather than on the crosses at the center. Don't know if that's a maps thing or not. Kind of annoying to position location on the center, then zooming to where ever the cursor happened to be.

\- would love it if it showed the duration of the day (HH:MM:SS) (in addition to the time of day for sunrise and sunset), and also the duration between {astronomical, nautical, civil} dawn and dusk.

All that being said, this is a really good app.

</comment><comment><USER16> This isn't actually accurate with regard to China Standard Time... All of China is one timezone, despite spanning 5 of them.

</comment><comment><USER17> This is great. It's be good if the lat/lon was updated in the URL so you could bookmark your own city.

</comment><comment><USER18> Wow, great way of visualising this. I recently moved from Istanbul to Stockholm so this kind of stuff has been on my mind quite a lot. What I'd also love is the ability to see how the daylight clock for different times of year - would love to see Stockholms graphic for midsummer or winter, for example.

</comment><comment><USER19> Pretty ui, I'd like to see a physical alarm clock like this.

</comment><comment><USER20> Interesting that in this 24h clock face 0 is at the bottom, instead of what I think is more conventional top. Of course it is pretty arbitrary either way.

</comment><comment><USER21> I like this a lot. For some reason it doesn't quite work in Safari on Mac as the fields don't get populated, but in Chrome it worked very well.

</comment><comment> Jean-Philipe Doesn't seem to handle DST. Otherwise, great thing! Makes me want to use it everyday!

</comment><comment><USER22> Very enjoyable little app, OP! Useful too.

</comment><comment><USER23> Are you supposed to see anything? I only see a crosshair overlaid on Google Maps.

Firefox 47.0.1 on W7 x64</comment>


My Tangible Standard Library (RoR/Agility Books) - <AUTHOR> http://www.syntacticsugardaddy.com/2007/01/17/my-tangible-standard-library/ <comment><USER2> +1 for Ruby for Rails, one of the best programming books I've read in a while.</comment>


Nokia saw the future, but couldn't build it - <AUTHOR> http://www.theverge.com/2014/9/22/6826051/nokia-saw-the-future-but-couldnt-build-it

<comment><USER2> Nokia was killing it in software until 2005 and Hardware until 2011. All ongoing handset manufacturers owe a lot to the foundations Nokia had set. They all still utilise 100's of their patents. If only Meego was released in 2007, we'd all be using it now and Nokia would still be the dominant force.

</comment><comment><USER3> Some say it was not really a software company.</comment>


TrickBot malware learns how to spam, ensnares 250M email addresses - <AUTHOR> https://techcrunch.com/2019/07/12/trickbot-spam-millions-emails/ <comment> ga-vu This is how TrickBot has worked since the beginning. It didn't learn "to spam." It's literally how it works and the purpose it was designed to do.</comment>


New Google play developer console - <AUTHOR> http://android-developers.blogspot.ca/2012/10/new-google-play-developer-console.html <comment><USER2> Can we get promo codes now? That and the ability to turn free apps back to paid.

</comment><comment><USER3> It definitely looks a lot nicer than previously, and the better publishing workflow sounds nice even though I haven't tried it. I spent quite a bit of time trying to publish my first app and it made me feel pretty stupid!

</comment><comment><USER4> > it's how you continue to iterate and make beautiful, successful apps.

I think it's great that they officially support "release early and often"!

</comment><comment><USER5> Looks like a nice improvement. And, they made the login link a little easier to find!

</comment><comment><USER6> Looks nice!</comment>


Google timer - <AUTHOR> https://www.google.com/#q=timer+for+10+seconds <comment><USER2> Yet again I am reminded that my google is not necessarily the same as 'your' google

Just like how "define: something" doesn't show a dictionary definiton for me anymore, a functionality i used all the time. And now can't be sure whether was actually removed, or just removed for me!

<comment><USER3> quick tip : google.com/ncr for no country redirect.

<comment><USER4> Never knew it, thanks! You don't know how many times I struggled with getting good result, because I was searching for something in English and Google keep redirecting me to my country's edition (and thus searching on webpages from my country/with my language).

<comment><USER5> When I was overseas, I just used google.us, which redirects to google.com, since I only searched in English, I didn't speak the language of the country I was living in.

</comment></comment></comment></comment><comment><USER6> This totally freaked me out.

I clicked the link to be opened in a new tab - and continued what I was doing.

I heard that beeping sound, and was completely baffled where it was coming from (didn't sound like it was coming from the speakers).

You should have seen me picking up papers on my desk listening to them. I listened to every potential port on my phone to see if it was giving off this sound.

I felt like I was going crazy while I was doing it, but I just couldn't figure out the source of the sound. Thinking back, if a camera was in my office, that woulda been hella funny to watch.

<comment><USER7> Typical Google. Uninformative, trite, bland, uninspired user experience. That's the best auditory indicator they could find? The following may not be a popular statement here, but it seems Google is still overrun by engineers that are humanoid-challenged. With all due respect to engineers, engineers are not human readable.

<comment><USER6> Pretty sure painting with a broad brush is one of the quicker ways for your opinion to be ignored.

#justsaying

</comment></comment></comment><comment> martin-adams Interesting side effect. There's this web site: [http://www.online- stopwatch.com/timer/1hour/](http://www.online-stopwatch.com/timer/1hour/)

which comes up top of the google search results for "timer for 1 hour" for me. Now there is absolutely no way they can compete with Google's own offering from an SEO perspective.

While this example is trivial to some extent, does it set a precedent that while you can advertise and compete with Google, they can always have the unfair advantage at being top of the list.

<comment><USER8> Lesson: don't put to much stock into a product that can be replaced by a few lines of code on a search result page.

<comment> martin-adams That's exactly my point. What if it wasn't a few lines of code, but something with a hefty investment in, then Google comes in with their own and just puts them top of the list because they can. Users don't get the choice because Google prioritise their own.

<comment><USER9> > That's exactly my point. What if it wasn't a few lines of code, but > something with a hefty investment in, then Google comes in with their own > and just puts them top of the list because they can. Users don't get the > choice because Google prioritise their own.

Even with the google thing that does the function at the _top_ , users have the choice. If it was a "I'm Feeling Lucky" style redirect (but always to a Google service with no search results page) whenever the query fit a format that keyed a Google-provided service, then the user wouldn't have the choice, but giving you a thing that provides what you think you want _as well as_ links to other pages that might either do what you want or have the information you want doesn't deny you the choice of using those other pages instead of Google's tool.

</comment></comment></comment></comment><comment><USER10> Nothing happens at that page for me. Could the reason be that I'm redirected to google.se (which does not have this feature, yet)?

<comment><USER11> It showed for me in Chrome, but not in Firefox. The same with Google's new flat icon/grid services homepage, actually.

<comment><USER12> It didn't work for me on Epic, but it did in Firefox.

</comment></comment></comment><comment><USER13> Google probably review their top searches periodically to determine utility related keywords and custom fit solutions to them.

It seems that if they continue to do things this way, sooner or later, Google is likely to replace thousands of utility websites.

This seems like a change in their philosophy from sending users to other websites in as little time as possible, to using Google as a portal.

Interestingly, this change in philosophy by Yahoo from a search engine to a portal was what made Yahoo lose out to Google.

<comment><USER14> Except that this is a very different approach to being a portal.

Yahoo filled their front-page with items that wouldn't be relevant except for some tiny percentage of the time, such that even if the front page had what you were looking for, it was like a needle in a haystack. Google's approach here is only revealing the portal functionality in response to a specific request for it. It won't kill them, and may even be a competitive advantage for them over any competitor search engine that has superior ranking algorithms.

</comment></comment><comment><USER15> If you want to break it, search for "timer for 23 hours 59 minutes 60 seconds" ... For some reason the code seems to be configured to max out at 24 hours. I am too busy dealing with my own broken JavaScript code to take a look, but maybe someone here can view source and figure out why they made that decision?

<comment><USER16> I'm guessing they decided they had to put a limit somewhere to ensure nothing broke, and decided arbitrarily on that.

<comment><USER15> Well, you can set the timer to 99 hours, 59 minutes, 59 seconds if you type in the values, so it doesn't seem to make sense that 23:59:60 would break it. I'm really curious as to why that happens.

<comment><USER17> it looks like some default limits are in place for this. Here's what I found:

Max for seconds: 999 Max for minutes: 999 Max for hours: 23

</comment></comment></comment></comment><comment><USER18> What am I supposed to be seeing? There is no special behaviour when I do this search.

</comment><comment><USER19> A script I use for this occasionally:

      #!/usr/bin/env ruby
      done = Time.now + ARGV[0].to_i
      while(true) do
        sleep(10)
        `say "Time's up!"` if Time.now > done
      end

Or the alarm clock version:

      #!/usr/bin/env ruby
      require 'time'
      done = Time.parse(ARGV[0])
      while(true) do
        sleep(10)
        `say "Time's up!"` if Time.now > done
      end

<comment><USER20> My alarm clock 15 years ago was:

        $ sleep 28800; while :; do cat /etc/termcap; done > /dev/audio

These days /etc/termcap is disappearing from UNIX machines, but back then it was always available. I found it had just the right amount of structure to make a really annoying noise.

<comment><USER21> My occasional alarm clock is:

        $ sleep 8h; mpg123 <something>/pandemonic_hyperblast.mp3

There is no way to fail to wake up with this song [http://www.youtube.com/watch?v=U5Den- CQ6jk](http://www.youtube.com/watch?v=U5Den-CQ6jk) .

<comment><USER22> I always used my stereos build in timer and a death metal CD for the same effect :)

But now my stereo and my CDs gather dust and I (and my neighbours) do not miss them.

</comment></comment></comment></comment><comment><USER23> TAKE OUT YOUR HEADPHONES

(I'm shouting both because it's very important advice and because I'm now deaf)

<comment><USER24> Interestingly I have no sound when the timer runs to zero, and no blip on the windows sound levels.

</comment></comment><comment><USER25> Pomodoro Bookmarklet (powered by Google timer):

1\. Create new bookmarklet

2\. Name: Pomodoro

3\. URL: javascript:window.open("[https://www.google.com/?gws_rd=cr#q="+((document.title.index...](https://www.google.com/?gws_rd=cr#q="+\(\(document.title.indexOf\("25"\)>-1))?"":"2")+"5+minute+timer&safe=off",'_self');

4\. Save

Click on the bookmarklet to toggle between "Work" and "Break" mode.

<comment><USER26> Or you can use Tomatoes[1] to track also your working time.

[1] [http://tomato.es](http://tomato.es)

</comment></comment><comment><USER27> Also works with

      timer <time of day>

E.g. timer 7am

Original Reddit link that started it all: [http://www.reddit.com/r/YouShouldKnow/comments/1j3pnv/ysk_us...](http://www.reddit.com/r/YouShouldKnow/comments/1j3pnv/ysk_use_google_as_a_stopwatch_with_its_set_timer/)

</comment><comment><USER28> I don't get anything special - Google Chrome on OSX

</comment><comment><USER29> It's not perfect though, this link will start a timer for 1 minute, not 24 hours and 1 minute:

[https://www.google.com/#q=timer+23+hours+61+minutes](https://www.google.com/#q=timer+23+hours+61+minutes)

<comment><USER30> Huh. Too bad they didn't test it even to this basic level.

</comment></comment><comment><USER31> Noticed that Alfred's default search URL for Google wouldn't work with the timer: [http://www.google.com/search?q=set+timer+for+10+seconds](http://www.google.com/search?q=set+timer+for+10+seconds)

It has to be [https://www.google.com/#q=timer+for+10+seconds](https://www.google.com/#q=timer+for+10+seconds) so I made a custom search URL and can now use the timer through Alfred.

<comment><USER32> No, the first url worked for the timer fine for me.

</comment></comment><comment><USER33> Actually this seems ridiculously convenient, if I'm sitting at my computer (which I almost always am). Easier than picking up my phone and setting a timer, even.

</comment><comment> k-mcgrady Doesn't work for me in Safari 6.1 or latest Chrome. (Strangely worked on google.co.uk but doesn't work on .com)

</comment><comment><USER34> Works better than timer / alert functionality of Google Now which is horribly broken. (At first I thought it was just rounding errors, with 25 minutes being set to 24 minutes, but I can't explain a 3 minute difference easily with rounding errors, which has happened to me. )

</comment><comment><USER35> Can't resist mentioning my small timer site from several years ago: [http://clockster.net](http://clockster.net). Takes RESTful urls, like [http://clockster.net/3min30s](http://clockster.net/3min30s).

</comment><comment><USER36> I built something for this exact purpose a few weeks ago. Surprisingly, I would put it's functionality in one of the top 10 things I use now.

[http://errk.se/remind_me_after/](http://errk.se/remind_me_after/)

</comment><comment><USER37> Seems to be limited to 1 second short of 1 day. What good is that? I want a timer that counts down to my favorite console launch. (I am not saying which one because I figure if I choose the wrong console I won't get any upvotes)

</comment><comment><USER38> Yay, I broke it :-)

[https://www.google.com.au/?q=timer+for+23+hours+59+minutes+6...](https://www.google.com.au/?q=timer+for+23+hours+59+minutes+60+seconds#q=timer+for+23+hours+59+minutes+60+seconds)

<comment><USER39> Maximum appears to be one day. Yet this works anyway:

[https://www.google.nl/?q=timer+for+23+hr+120+min+59+secs#q=t...](https://www.google.nl/?q=timer+for+23+hr+120+min+59+secs#q=timer+for+23+hr+120+min+59+secs)

</comment></comment><comment><USER40> Announced over 6 weeks ago at [http://googlesystem.blogspot.com/2013/08/google- timer.html](http://googlesystem.blogspot.com/2013/08/google-timer.html)

</comment><comment><USER41> I had to reset all my _.google._ cookies to work logged with the Google user it works, but when I sign in with the secondary google apps for domains user it stops working for some reason

</comment><comment><USER42> Fancy, however, I still prefer things like [http://e.ggtimer.com/](http://e.ggtimer.com/) as it allows other functions such as a Pomodoro timer.

<comment><USER25> You can also use this bookmarklet:

javascript:window.open("[https://www.google.com/?gws_rd=cr#q="+((document.title.index...](https://www.google.com/?gws_rd=cr#q="+\(\(document.title.index...\)?"":"2"\)+"5+minute+timer&safe=off",'_self'\);)

</comment></comment><comment><USER43> This is what they're working on while shutting down Reader? Guh. And yes, I will make a similar comment every time they roll out some inconsequential new product or feature.

</comment><comment><USER44> Here's your poached egg timer...

[https://www.google.com/#q=timer+for+3+minutes+30+seconds](https://www.google.com/#q=timer+for+3+minutes+30+seconds)

</comment><comment><USER45> [http://www.google.com/help/features.html](http://www.google.com/help/features.html)

</comment><comment><USER46> For the Google QA person who is inevitably reading this: "timer for 23 hours and 59 minutes and 60 seconds"

</comment><comment><USER47> For those of us Europeans where this doesn't work: it works on Incognito Mode in Chrome.

<comment><USER5> I'm in the United States and it doesn't work for me, not even in Incognito Mode in Chrome. I feel like I'm really missing out on the party.

</comment></comment><comment><USER48> you can combine this with the voice option from search, nice way to speak out loud and have this timer set. I've set up a custom shortcut for triggering voice search ( besides the Ctrl+Shift+.) and works like a charm.

</comment><comment><USER49> just wrote something similar in 60 lines of JavaScript: [http://requirebin.com/embed?gist=6668018](http://requirebin.com/embed?gist=6668018)

</comment><comment><USER50> I really miss per-application volume control (like in Windows).

</comment><comment><USER51> Yet another case of Google inconsistencies.

</comment><comment><USER52> Doesn't work on Chrome for Android

</comment><comment><USER53> Doesnt work in my Nightly 27.0a1

</comment><comment><USER54> No fortnight support?

</comment><comment><USER55> doesn't work as expected in Bulgaria</comment>