Hiring experiment: hiring experts in 20 minute chunks - <AUTHOR> http://apps.glittle.org/pomhire

<comment><USER2> This guy is a genius, he keep coming with ideas about how to pay people less for their work. He must be very popular on the exec golf meetings.

<comment><USER3> On the contrary. Greg's work is creating a new market for expertise. If you want to sell your time in 20 minute intervals, it's quite difficult to do so today.

<comment><USER4> I'm not convinced anyone really WANTS to sell their time in such small intervals.

<comment><USER5> A counter example: He mentions graphing data as one option. I'm pretty sure people with excellent GNU plot skills can make a GNU plot script that does what I want in 10-20 mins, and I really can't be arsed to figure it out myself everytime. Seems like the type of expertise that is currently hard to sell and might benefit from this sort of site.

</comment></comment></comment></comment><comment><USER6> Sounds a lot like <http://anyfu.com/>

<comment><USER7> Or <http://www.liveperson.com/experts/> ...

<comment><USER8> Or <http://comprends.com> ...

<comment><USER9> Or <https://www.minutebox.com/>

<comment><USER10> Or <http://www.edviso.com>

</comment></comment></comment></comment></comment><comment><USER11> To me hiring a professional for 20 minutes might sound enough for some small taske, but I'm not sure how well this goes for more complex tasks (e.g. where the pro has to read and understand your code). I guess you can buy couple of chunks than but I'm not sure I see the benefit. Is it just so that you don't have to pay every starting hour?

<comment><USER12> From the perspective of a person hiring, I'm sure it's better to hire for exactly as long as you need. The point of 20 minute chunks is to make the idea more appealing to experts (who are busy doing other things). As an expert, you know that if you accept a job, you only need to commit up to 20 minutes, and you'll get paid for a full 20 minutes (even if they're not all used), to justify the 'switching cost'.

</comment></comment><comment><USER13> What do you consider an 'expert' to be?

It's one of the most ambiguously defined and useless word when used in practice.

</comment><comment><USER14> I love this. Not only will this be be great when you have those "stuck" moments, or you want to learn Ruby but wouldn't know to start by reading _why's Poignant Guide, but I bet you see some incredibly creative solutions because the expert knows he needs to deliver in a strict 20 minute window.

      "Man built most nobly when limitations were at their greatest."
      — Frank Lloyd Wright

</comment><comment><USER15> Love this idea. There have been plenty of times when I wish I could throw a few questions at an expert in a given field. "Is this the best way to program an XYZ?" "Can you think of a better way to do this?" Is the price is right, throwing a small amount of cash at a problem is often a better solution than (a) doing something wrong, or (b) spending significantly more time figuring out how to do it right.

</comment><comment><USER16> Interesting experiment.

Are you sharing the data?

<comment><USER17> I'd be pleasantly surprised if he (and oDesk, by extension) were to share this data. They're very profitable, and this type of information might offer them a competitive edge. Moreover, it appears as if they're also fervid believers in intellectual property law's "right to exclusion" applied to ridiculous vague quasi-inventions, viz. <http://www.google.com/patents/US20060284838>. Luckily, this is only an application, and its longer-than-typical prosecution history will hopefully prevent them from trolling too much, thanks to prosecution history estoppel.

<comment><USER18> Re: oDesk data - what do you want to know?

I regular post data from oDesk on my own blog (I work at oDesk w/ these folks: <https://www.odesk.com/info/l/research/>): <http://onlinelabor.blogspot.com/>.

And there's the "oConomy": <https://www.odesk.com/oconomy/> There's also lots of info available via the API.

</comment></comment></comment><comment><USER19> So I'd assume 20 minutes of an expert's time is worth $500, right?

Edit: Seriously, I'd charge $500 if the client picked the time and $100 if I could pick any period during the day, on short notice.

I'd actually charge more for a client-picked 20 minute period than I would for a one hour period because a 20 minute period would be very unlikely to repeat since 20 minutes isn't really enough to demonstrate great expertise.

<comment><USER12> Just to be clear, experts won't be 'on call'. Jobs will be opportunities for experts to grab, if they're free, rather than obligations to fulfill.

</comment></comment><comment><USER20> Extremely excited to see how this works out. This is an amazing idea.</comment>


What Facebook buying OculusVR is all about - <AUTHOR> http://me.sekistner.com/post/80766784595/what-facebook-buying-oculusvr-is-all-about

<comment><USER2> summary: P/E too positive, hence acquisitions needed on the #BillionDollarNonsense

also, when your company is offered billions of dollars, I guess it's to not repeat Groupon's mistake of keeping principle and not letting it be bought... the chances of it IPO-ing that much are low. :(</comment>


A Lidar-Validated Trajectory for a Long Home Run - <AUTHOR> https://technology.mlblogs.com/a-lidar-validated-trajectory-for-a-long-home-run-f9c716206c8b <comment><USER2> This is cool. I didn't know lidar point clouds could be generated for an entire stadium.

Not clear how the impact point was detected in real time (or exit velocity, launch angle, and spray direction for that matter) without some manual intervention.

From what I have read of the Hawkeye/Smart Court systems in Tennis, there are a whole bunch of HD cameras around the stadium to detect the impact point. But that's just detecting impact(bounce) point on a standard 2D surface of known dimensions i.e. the tennis court.

Cool link. Thanks for sharing!

<comment><AUTHOR> Exit velocity, launch angle, and spray direction are currently tracked automatically using a TrackMan radar [1].

Next season, those will be tracked using a Hawk-Eye system [2].

[1] [http://m.mlb.com/glossary/statcast](http://m.mlb.com/glossary/statcast)

[2] [https://www.sporttechie.com/mlb-ball-tracking-technology- sta...](https://www.sporttechie.com/mlb-ball-tracking-technology-statcast- hawk-eye-trackman/)

<comment><USER2> Interesting thanks! That sporttechie site was an eye opener. Didn't realize how much stuff was going on.</comment></comment></comment>


Automated brute-force attack against the EFI PIN (2013) - <AUTHOR> http://orvtech.com/atacar-efi-pin-macbook-pro-en.html

<comment><USER2> _after three weeks of being bought the seller desided that he wanted it back. He expressed this by locking it with a 4 digit PIN and a message that stated "Give me back the laptop and give you back the money", with out calling or anything._

In other words, the seller somehow had remote control of the laptop and locked it remotely? Things like this are why you should _always_ reformat and reinstall all the software on computers you buy...

Bruteforcing it is the long way, the fastest way would be to use an EEPROM programmer to clear the EEPROM and rewrite the BIOS. This can usually be done in-circuit without any soldering with a little clip that goes onto the chip. A lot of laptop repair shops have this setup. Some of the newer models store the password in TPM, which caused the shops to initially replace the TPM with a new blank one but some RE later revealed that many (not all) can be cleared in the same way as before.

The fact that BIOS/EFI passwords can be easily cleared must be one of the worst-kept secrets in the computer industry - the companies will often officially say that there is no way to reset them and that the whole motherboard has to be replaced in a not-so-successful attempt to propagate the myth that this protection is so secure that even they can't bypass it.

<comment><USER3> I don't think reformatting would have helped in this scenario (in fact according to the blog post, he believes it made it work).

I don't own any macs, but I think this is some sort of "remote lock" function provided by apple.

It sounds like the buyer did not re-register the device with their own Apple ID (assuming that is possible).

<comment><USER4> >It sounds like the buyer did not re-register the device with their own Apple ID (assuming that is possible).

This is correct. You are supposed to set up your own iCloud account on the device, to make sure that no one else (except maybe Apple) has remote control over the device.

Actually, I don't remember reading about that in the Apple security whitepaper. Does Apple claim that they can't remote-lock your device without your password?

</comment></comment></comment><comment><USER5> Well saw a spike in traffic to my site and traced the source to HN... Let's hope the migration from WordPress to Pelican pays out.

As mentioned by some of you this is from early 2013 but the code still works. Furthermore it has been tweaked (the timeouts and keypress duration) to be compatible with most Macs yet as efficient as possible.

I also did an iCloud Padlock version [http://orvtech.com/ataque-fuerza-bruta- pin-icloud-en.html](http://orvtech.com/ataque-fuerza-bruta-pin-icloud-en.html) but it takes way longer.

I am working on a version that using a Raspberry Pi + Arduino should work on any BIOS, EFI, OR PIN lock for that matter.

<comment><USER6> For what it's worth, if you can produce some sort of proof-of-purchase, you can take it to an Apple Store and they can remove the EFI Pin. They tend to be pretty reasonable about this most of the time.

<comment><USER5> The buyer tried this but he purchased it from one of his contractors so they did not do anything on writing.

</comment></comment></comment><comment><USER7> If the buyer had reformatted the HD immediately after buying it, would that have made it impossible for the seller to lock it? Could the buyer have changed the account which it was linked to without going through the seller?

Of course a bill of sale would also have been enough to get Apple to help, according to another comment. But even that is not hard forge.

<comment><USER5> I think so. The correct procedure would have been to assign another iCloud account and assign your self another PIN (lock it with your own PIN)... Then reformat it

</comment></comment><comment><USER8> Note this is from February 2013.

</comment><comment><USER9> Interesting why Apple did not implement a forced delay (i.e. first fail - immediate, second fail - 5sec wait, third fail 25sec, ...)

<comment><USER5> They did it for the iCloud lock which can be circumvented by automatically rebooting the Mac every X tries.

</comment></comment><comment><USER10> It appears that the buyer didn't consider that they bought a stolen MBP. My first guess after reading this is that the real owner discovered their computer was stolen.

This is a good reason to test and change the iCloud account while the seller is standing there. I am not sure about the laptops, but an iPad/iPhone needs the same pin to change the account it is associated with, so you get some immediate evidence if you are buying something stolen.

<comment><USER5> The message on the first lock screen (iCloud padlock) read "Devuelve me la laptop y te devuelvo el dinero" which means "Give me back the laptop and I will return your money".</comment></comment>


Scribd.com Comes to the Dark Side - <AUTHOR> http://www.evilreads.com/blog/2010/9/1/scribdcom-comes-to-the-dark-side.html <comment><USER2> While I can for sure appreciate the Scribd service, charging for 24 hour access to "archives" is just silly. It reminds me of Rapidshare, which isn't exactly a brand to live up to.

On the other hand. So does the website that posted the article and requires a login to read the follow-up.

I like that someone called Scribed out and they fixed the situation.

<comment><USER3> What exactly do you like about Scribd? Every experience I had with is has been negative. Their reader sucks and to download a pdf you have to register. When somebody posts a link to Scribd I always end up searching for another place on the internet that has it. I don't see any value Scribd provides.

<comment><USER2> I never said I "liked" the scribd service, only that I could appreciate what they are doing, not necessarily the monetization.

</comment></comment></comment><comment><USER4> From the comments section:

 _UPDATE! Evil Wylie contacted Scribd and successfully negotiated a resolution. Scribd now offers the option for an author to PERMANENTLY OPT ALL DOCUMENTS OUT of the "archives." This is effective immediately. This doesn't mean that what they did was right (although their terms and conditions allow them to basically do whatever), but they do respond to complaints rather swiftly._

<comment><USER5> Smart move by Scribd. Diffuse a lot of the "SCRIBD IS PURE EVIL!!!!!" complaints, but only a fraction of a percent of documents will get opted out, so the impact on their revenue is negligible.

</comment></comment><comment><USER6> _scribd responds_

Why am i asked for a login to see their response?

<comment><USER7> And to clarify, it is evelreads that is asking you to login, rather than scribd

</comment></comment><comment><USER8> Scribd should be upfront with both authors and readers about this tactic. It's very disappointing, and makes me wonder about how various other services are using content that is uploaded/distributed to them on the basis that users can access it for free.

</comment><comment><USER9> I clicked on the "UPDATE: Scribd Responds!" link, only to get a page with this message:

>You are attempting to access a resource on this site which is restricted. Please login below. After re-logging in, you will be automatically directed to the page you were attempting to access.

</comment><comment><USER10> Thanks for letting me know, i've gone and disabled that setting in scribd.

</comment><comment><USER11> Seriously: what's the point of Scribd? All they do - show your document along with ads all over the place and let people download the source PDF after registration. Why not to just put PDF on your site in the first place?

<comment><USER12> I found it a somewhat more palatable alternative to SlideShare because I was a big fan of the HTML 5 viewer, but I had no idea this was part of their plan. It's a nasty bait-and-switch which isn't signaled when you upload at all.

Not too happy with that.</comment></comment>


The Worst API Ever Made? - <AUTHOR> http://mollyrocket.com/casey/stream_0029.html <comment><USER2> I claim MS Crypto API is even worse (I used both Crypto and ETW on the same project, it's by far not as bad, good luck tuning it not to lose buffers under load though):

I was implementing TLS/SSL in one of the services working at MS. I couldn't figure out many things from MSDN and samples - they would not cover error and some variations code paths, and there was just no way to figure it out. And recovery would be something like "in third buffer there will be value x, you have to it pass to other function". And there was a need to do it correctly for obvious reasons, really. So finally I requested access to IIS sources to see how it's done correctly, and discovered couple thousand lines of code with comments like this "xxx told us that buffer X will contain value bla if condition Z is met, and this is why we are doing it here". I had no choice but to cut-n-paste it to my service. I can tell you for sure, nobody outside MS, without access to internal sources? can implement TLS/SSL correctly by using MS Crypto APIs.

<comment><USER3> I think it has to be the sheer number of APIs that Microsoft has developed: they just don't have the resources to care about very many of them. It stems from Microsoft's extremely insular culture in the 1990s and 2000s, where being a "Microsoft developer" meant that you just didn't read code for open-source projects, didn't look at competing APIs, just did everything your own way. Apple had its own bad APIs, and blew a bunch of them away when OS X came along. So you want TLS/SSL on OS X, the typical way to do it was to just use OpenSSL. OpenSSL has tons of problems, but at least they're well-understood problems, with source code and documentation.

<comment><USER4> > OpenSSL [...has...] documentation

Did you really praise OpenSSL for its documentation? Honestly, until now I thought it was the de facto example of poor documentation.

<comment><USER2> While OpenSSL has bad documentation - there are both source code and real- world usage examples (from open source products using it) to help.

</comment></comment></comment></comment><comment><USER4> "The API is simple because the problem it's solving is trivial."

I beg to differ -- as ridiculous as the API interface may be, the problem it's solving is most certainly _not_ even close to being trivial. High-performance logging for something as low-level as the thread scheduler is _not_ something you can write in your sleep.

<comment><USER5> When an engineer uses the word "trivial," what you should hear is "There are some complications that I'd rather ignore, so let's just hand-wave the answer".

<comment><USER6> What are these complications? The API's job appears to be to let you iterate through a list of log items/read data from a log buffer/however you want to imagine it. That sort of thing is not rocket science, no matter how difficult it was to make that data in the first place.

(Besides, even if you don't think there's anything wrong with the way it provides the caller with data from the list, there's always the session nonsense to point and gawp at.)

<comment><USER4> > That sort of thing is not rocket science

Uh, for starters, the buffer doesn't have infinite size. It _will_ overflow. What is the system supposed to do here? There are a million possibilities (discard old data, discard new data, allocate more memory, write to a file, call a callback, return an error, stall the rest of the system or halt the clock, etc.); some make sense, some don't. Between those that do, the user needs to be able to choose the best option -- and the time-sensitive nature of the log means you can't just do whatever pleases you; you have to make sure you don't deadlock the system. That's _not_ by any means a trivial task, and I'd bet the reason you think it's so easy is that you haven't actually tried it.

<comment><USER7> > What is the system supposed to do here? There are a million possibilities…

No, there are two: You dump old data or you dump new data. Everything else should be up to the user code. It's really not as difficult as you are making it out to be. There's certainly no excuse for a ridiculous API as described in the article.

<comment><USER4> Huh? If you dump data you miss events. Imagine if Process Monitor decided to suddenly dump half of the system calls it monitored. Wouldn't that be ridiculous? For a general event-tracing system, there _have_ to be more options provided. Maybe it wouldn't matter so much for context-switching per se, but for a ton of other types of events you really need to track each and every event.

<comment><USER7> Yes, you miss events. But if you try to make build the kitchen sink into your low-level logging system then it ceases to be low level. If your logging system allocates memory then how can you log events from your VM subsystem? If your logging system logs to the disk, then how do you log ATA events? It becomes recursive and intractable.

The solution is to make your main interface a very simple pre-allocated ring buffer and have userspace take that and do what they please with it (as fast as it can so things don't overflow).

There is _always_ a point at which your logging system can't keep up. At the kernel level you decide which side of the ring buffer to drop (new data or old) and at the userspace level you decide whether to drop things at all or whether to grind the system to a halt with memory, disk, or network usage.

<comment><USER4> The options are not simply "drop data" or "don't drop data". The options depend on the logging source, because not every logging source requires a fixed-size buffer. The API itself needs to support various logging sources and thus needs to support extensible buffers (e.g. file-backed sources, the way ProcMon does). Whether or not a particular logging source supports that is independent of whether or not the generic logging interface needs to support it.

<comment><USER7> I think we're talking past each other here. I don't think we're disagreeing on the userspace part. I'm not even implying that the the low level kernel interface should have unconfigurable buffer sizes. They should be configurable, but pre-allocated and non-growable. You're right, the userspace part can do whatever it wants. But I stand by my last paragraph (you either drop or grind things to a halt).

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Poster has not worked very deeply with Win32, is unaware of its conventions. Film at 11.

For example:

> Yes, that's right, every user of the Event Tracing for Windows API has to do > the arithmetic and layout of the packed structure format themselves.

These represent very common idioms in Windows. One common idiom is about binary compatibility. Microsoft can change the length of the structure in a future rev of the SDK. Old callers can still work because they are specifying sizes and offsets - the library can look at these and know what to do. The other common idiom (very common in the NT kernel for example) is similar to what C99 introduced for structures with variable-length members, something C definitely didn't do for you and even today with it standardized still gets pretty clumsy.

The author lost all credibility when he wrote this:

> StringCbCopy((LPSTR)((char * )pSessionProperties + > pSessionProperties->LoggerNameOffset), sizeof(KERNEL_LOGGER_NAME), > KERNEL_LOGGER_NAME);

Why on earth would you say (LPSTR)(char * ) ? That is literally saying (char * ) (char * ).

To me a "bad" API enters into questions like:

* How does it handle errors? Consistency is good. Swallowing them to the caller is bad.

* Does it give the caller the right level of detail about what is going on? It's especially common for it to be a black box and completely fail under some condition that the author did not envision. Some kind of escape hook that exposes implementation details makes library maintanence difficult but sometimes it's needed.

I haven't looked _too_ deeply at etw but I don't suspect it fails at these. Maybe it errs too much on one extreme on the 2nd bullet.

<comment><USER9> Yes, that's frequently done in win32 land, but in this case, I'd argue the following should have been done

1) Why provide a copy of the parameter at the end of a struct?

2) How will you ever expand that struct given the fact that you put a variably-sized member at the end?

3) Why doesn't the current version of the header come with a

        char[] SessionName;

member as last member, so it's at least halfway convenient?

4) No seriously - why is it copied in at the end and not a pointer?

5) That struct doesn't even have a DWORD size member as first member, are we expecting to get coupling between some flag and "oh and expect there to be additional members after that char array"?

Even for Win32's usual badness, it's pretty bad.

<comment><USER8> > No seriously - why is it copied in at the end and not a pointer?

Consider where you have seen similar patterns in the Unix world. The obvious one would be they intend to pass the buffer to kernel mode and a structure with lots of pointers inside will be a pain in the ass to pass over and validate.

A flat buffer with a couple of offsets works better for that. Copy over the whole blob, check a few lengths. Generate your EFAULT errors in a single place. Better than following lots of user mode pointers.

</comment></comment></comment><comment><USER10> Another "fun" API is the one from MUMPS (matrix processing stuff) in Fortran.

See [http://mumps.enseeiht.fr/doc/userguide_4.10.0.pdf](http://mumps.enseeiht.fr/doc/userguide_4.10.0.pdf) , for example page 10.

It has lot of numbered "ICNTL" (input control) variables as well as named struct fields, and some of those struct fields are only valid if, for example ICNTL(26) has the values 0, 1 or 2.

ICNTL is actually an array with 40 elements, though "only" 1-33 are currently in use. And then there's CNTL (float control parameters), INFOG, RINFOG and what not.

Also, the number of calls you must do to the actual processing function depends on some combination of those magic variables.

Needless to say that there are no named constants for all those magic variables, because the code must be backwards compatiable with Fortran 77, where the behavior of code with identifiers longer than 8 characters is undefined, and differs from compiler to compiler (some truncate, some allow them, some error out). So names are actually in short supply.

<comment><USER11> Wonder what it is about the name MUMPS that makes software called that so terrible...

</comment></comment><comment><USER12> I had amazing "fun" with Amazon's marketplace API. Highlights include: \- rejection without error messages \- multiple hours before the successful call showed up as successful \- broken XML schemas along with conflicting versioning and

My favorite: \- error messages from the API asking me to call customer service to perform that action.

<comment><USER13> According to Eric S. Raymond's version of the Jargon File, people used to joke that MS-DOS system calls delivered "same-day service." Now that we're living in the future, that joke has become literally true.

</comment></comment><comment><USER14> I thought the standard way to use ETW is by generating code from a manifest file with Message Compiler. Presumably it takes care of all this boilerplate? You're right though, that's a weird API. It'd be interesting to learn the process behind its design.

<comment><USER15> This is the way I've done it. Which boils the problem down to an init call and a call per event. I dislike the code generated bindings though - is there a more... data driven alternative that's good?

I've got a simple event API where I have an event type identifier, and some basic data. Which I then need to pipe to some third party junk that listens to ETW events. To do this, I have to:

1) Manually map hundreds of event types to code generated ones, and update this mapping every time new events are added... or do a massive N:1 mapping... which is totally against the grain of the intended usage of the third party junk (although appears workable for the moment.)

2) Wrap every ETW event type with callbacks, and the init macro with a stub to allow callbacks, such that I may target the two "identically" configured endpoints... each with their own manifest and autogenerated header.

3) Wrap every ETW invoke with #ifdef s to limit them to the 1 of my 3 platforms they work on.

It's quite ugly compared to the equivalents of the other 2 platforms.

</comment></comment><comment><USER16> Can anyone recommend any resources about API design?

<comment><USER17> For a very deep, thorough and painful treatment instead of feel-good books, read "Practical API Design" by Jaroslav Tulach. Yes, it's Java, but it exemplifies the fundamental tradeoff that the feel-good books ignore: the more powerful you make your API for users, the less potential for evolution and long-term maintenance your API retains.

<comment><USER18> That is on my queue of books to buy. [Which is below my queue of books to read].

So shouldn't there be a way to balance these requirements?

It seems like we've ignored the ability to batch jobs, do async tasks etc. It sucks... but an API is out of my control.

</comment></comment></comment><comment><USER19> I offer a simple API decision which has condemned generations of programmers to useless toil. The decision in .Net to not map database NULL to programming language null. Perhaps there was some higher level philosophical distinction being drawn which mere mortals are not capable of understanding.

<comment><USER20> > The decision in .Net to not map database NULL to programming language null.

What specific API in the .Net framework does this (or doesn't do this)? Definitely hasn't been my experience but I am using Entity Framework so...

It goes so far as to mark null-able database types as (bool?) (nullable bool) which is super helpful and you can use == null for comparisons.

<comment><USER21> ADO.NET uses DBNull: [http://msdn.microsoft.com/en- us/library/system.dbnull(v=vs.1...](http://msdn.microsoft.com/en- us/library/system.dbnull\(v=vs.110\).aspx)

There's one valid (if obscure) use case for it, other than that it is pretty much redundant: [http://stackoverflow.com/q/4488727/1180426](http://stackoverflow.com/q/4488727/1180426)

All modern (micro)ORMs, even if they're just a thin wrapper over ADO.NET like Dapper, work just fine with regular nulls.

</comment></comment></comment><comment><USER22> If you feel the pain of public APIs you should definitely go and try some internal APIs companies write for themselves. Somehow they can really get worse than what people used to write for Programming 101 homeworks.

</comment><comment><USER23> I thought this was going to be link-bait crap until I actually read through the damn thing. My god. He could be right.

</comment><comment><USER24> I was half expecting the rant to be about TAPI. From memory, I remember at least one instance where it returns a void* pointer, with a few integers telling the offset of the information you need to get.

But at least the function calls made sense. This is much worse.

</comment><comment><USER25> A funny anecdote on the topic. When I worked in WinFS team, folks tried to add new flags in CreateFile API. Turns out, all 32 bits in dwFlagsAndAttributes were already taken, including the hidden usages inside the Win32 subsystem implementation.

</comment><comment><USER26> Nothing beats up the P4 C++ Api :)

While I love perforce, their constantly changing C++ api with it's namespace wasting, bad error handling API is the worst out there...

</comment><comment><USER27> "ALWAYS start by writing some code as if you were a user trying to do the thing that the API is supposed to do."

It still amazes me how many times junior devs ignore this. They will spend a lot of time walking through the UX scenarios, mocking it up, etc. But when designing the API layer, they just start creating end points instead of focusing on the "DX" scenarios (developer experience, not theirs, but devs using the API).

I remember reading Cwalina's "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" and really learning what that means. It is a book focused on .NET but I wish many of my colleagues in the open source world would get over that and just read it. It would change their view on API design. And that is just the first chapter.

<comment><USER28> The second edition of the Framework Design Guidelines book was written in 2008 and seems (from a 10 minute browse of the first chapter) to be pretty up to date still.

It's ISBN 9780321545671 if anyone's looking for it (it's on Safari Books Online, too)

<comment><USER29> First chapter is included in the free preview: [http://www.amazon.com/Framework-Design-Guidelines- Convention...](http://www.amazon.com/Framework-Design-Guidelines-Conventions- Development- ebook/dp/B0017SWPNO/ref=sr_1_1_title_1_kin?s=books&ie=UTF8&qid=1407386835&sr=1-1&keywords=9780321545619#reader_B0017SWPNO)

</comment></comment></comment><comment><USER30> As somebody who tried to use ETW, I can say that the OP didn't do his homework. Everything you need to know about ETW is described here: [http://msdn.microsoft.com/en- us/library/windows/desktop/bb96...](http://msdn.microsoft.com/en- us/library/windows/desktop/bb968803\(v=vs.85\).aspx)

ETW is much more than a simple logging system; the description says "Use ETW when you want to instrument your application, log user or kernel events to a log file, and consume events from a log file or in real time. ".

It allows broadcast (multiple consumers), structured binary data, filtering based on data structure, etc. It is an immensely powerful system (See manifest-based events above). In addition to everything it does, it is also designed for performance and for not using too much space.

Re my attempt to use ETW: I began to drool when reading the docs; it would be immensely useful in my project. However, the product must also work on Linux, and building a cross-platform layer for something like ETW (even if the Linux counterpart is a no-op) would be an overkill. I might return to it one day.

<comment><USER3> So, "as somebody who tried to use ETW", you think that the author, who did in fact actually use ETW, didn't do his homework?

Read the criticisms. They are not shallow.

<comment><USER30> From the article: "It is a logging system, and it is used to record performance and debugging information by everything from the kernel upwards."

It's apparent that he did not do his homework. ETW is much closer to DTrace than to syslog (e.g., you can turn on and off certain events in a running application w/o disruption).

EDIT: It seems that the author uses ETW as an excuse for writing a rant about how an API should be designed according to his taste. Powerful, low-level APIs are difficult to use. Simple as that.

</comment></comment></comment><comment><USER31> To be fair -- I am certainly not the only one that opened that page scared of seeing my own name. :-)

>> It's a great time in the history of computing to be writing an article about bad APIs (which is another way of saying it's a terrible time to actually have to program for a living).

It is hard to make good APIs. And for complex subjects it is probably impossible without iterating.

But you would think the guys that did the 2nd generation of VMS were smarter and more experienced than me? But OK, there weren't much event driven programming in VMS, I assume.

My vote for worst API I ever read:

I remember reading the "Inside Macintosh" (pre Mac OS X) about simple file IO and it took me multiple readings to realize that you just set _some_ of the parameters to get all the different functionality... (The rewrite of the Inside books were really good.)

</comment><comment><USER32> Apparently the worst API ever made is this guy: [http://i.imgur.com/EtWh3QZ.jpg](http://i.imgur.com/EtWh3QZ.jpg)

Might want to see to the stylesheet.</comment>


Amazon commits $700M to retraining - <AUTHOR> https://www.seattletimes.com/business/amazon-commits-700-million-to-retrain-workers-in-new-skills/ <comment><USER2> My first reaction was: good for them, I'm glad Amazon is really investing in its employees, and hopefully other companies follow suit.

My more jaded reaction: I have a feeling these investments are employment- duration based, like many other benefits at Amazon. So On paper Amazon can say they have an amazing benefits program, but that's all due to loyalty to a company that regularly works its employees to the bone.

Final thoughts: I'd be interested in a study which determined how many of the non-technical employees given access to this benefit became engineers or IT professionals in a year or two after starting their jobs.</comment>


Why Are Our Programs Still Represented by Flat Files? - <AUTHOR> http://www.atalasoft.com/cs/blogs/rickm/archive/2008/06/06/why-are-our-programs-still-represented-by-flat-files.aspx

<comment><USER2> From the article: what is keeping us tied to having our code in this format?

If your source code wasn't in text then you may not be able to use your favourite text editor.</comment>


Ask HN: How to minimize unwanted net usage by processes to a trickle? - <AUTHOR> Hi HN,
I have this problem sometimes of what seems like excessive Internet bandwidth usage. Sometimes I have to use a metered connection, so the issue becomes more important. Leaving aside things like malware (which may happen, and for which I do have anti-virus software installed), what are ways to reduce Internet usage (other than that directly initiated by the user) to a trickle, so as not to waste money? Thanks in advance for all answers.
I'll mention one way that I am exploring: NetBalancer for Windows. A friend also told me about nethogs for Linux. Not tried yet. <comment><AUTHOR> >of what seems like excessive Internet bandwidth usage

To clarify, I meant, excessive usage by process not directly started by me.

Also, a couple of other steps I took earlier:

\- I disabled Google Drive client on my machine.

\- I disabled Dropbox.

Disabling Drive is okay, because I don't use it. But disabling Dropbox is not so good, because I use it. However I decided to do this for now, until I resolve this problem, because I saw in Windows Task Manager that Drive was using a lot of bandwidth, even when I was not saving anything to it. So did though Dropbox may be doing that too, and did the same for it as well. I think I saw Dropbox at one point using a lot of bandwidth too, but not 100% sure.</comment>


iPhone 7 Has a New Nasty Surprise - <AUTHOR> http://www.forbes.com/sites/gordonkelly/2016/12/05/apple-iphone-7-phone-calls-signal-carrier-problem/#4fcdca8c1b83 <comment><USER2> It's like the forbes headline is slightly clickbaity , and HN headline is slightly more.

Tldr: "iPhone 7 has a freezing problem".</comment>


Show HN: A simple Ruby script to convert maildir format file to JSON format - <AUTHOR> https://github.com/amalfra/maildir2json <comment><USER2> How about a tool/script/program that converts a Google Takeout mbox file(s) to a SQLite database? I could make use of _that_...</comment>


How To Talk To Girls At Parties - <AUTHOR> http://www.neilgaiman.com/p/Cool%20Stuff/Short%20Stories/How%20To%20Talk%20To%20Girls%20At%20Parties/How%20To%20Talk%20To%20Girls%20At%20Parties%20(Text)

<comment><USER2> I went to a party once where all the chicks thought they were poems. The place reeked of patchouli.

</comment><comment><USER3> Not a typical topic, but fine writing is just as much hacking as programming... or painting. Fantastic.

</comment><comment><USER4> Step #1: Get invited to a party.

<comment><USER5> Step #3: Profit!

</comment></comment><comment><USER6> Crap, now I have to worry about whether the girl I'm chatting up is a cultural zeitgeist, besides just getting up the nerve to talk to her. Thanks alot, Neil.

</comment><comment><USER7> I liked the story too.</comment>


Ask HN: Why Can't I Downvote Submissions? - <AUTHOR> I've been a registered user since 2010, but I haven't been active for the past six years (give or take).
I've recently had copious amounts of free time to catch up on everything, and when I logged back into HN I discovered my priviledges on the site had been rather severly curtailed.
My best guess is I've been pigeon-holed as a "troll" because some of my comments diverge from the hive-mind that used to -- and possibly still does -- make up the majority of the contributors to HN.
Just because I don't buy into the HN group-think doesn't mean I'm a troll, or that my opinion (read as: downvote) has no merit.
I haven't really wanted to downvote anything I've seen in the past nine months, but I feel a recent posting merits my downvote... but that's apparently not an option that's available to me.
Dunno.  Maybe things have changed around here.  But if I'm a long-time verified user of this site I would hope that my opinion -- even if it's a negative one -- would carry some kind of weight. <comment><USER2> I think you need 500 karma or so.

<comment><AUTHOR> Ah. I'm sitting at 297 right now, so that does make sense... and thanks for clearing that up for me!

<comment><USER3> As a relatively new person, I didn't even know anyone could downvote

<comment><USER4> Users with >500 karma can downvote comments, not stories. No one can downvote stories.

</comment></comment></comment></comment><comment><USER5> You can't downvote submissions; only comments.</comment>


Uniform - Sexy forms with jQuery - <AUTHOR> http://uniformjs.com/ <comment><USER2> Looks nice and neat. It would be great if you could expand the examples a bit more. One more thing, could you please provide some examples with form validation.</comment>


I'm a Web 2.87 God and Social Media Guru - <AUTHOR> http://www.linkedin.com/in/faceyspacey

<comment><USER2> -"Going Above and Beyond" -"Hitting the Nail on the Head" -"Going the Extra Mile" -"Impeccability"</comment>


Good at programming competitions does not equal good on the job [video] - <AUTHOR> http://www.catonmat.net/blog/programming-competitions-work-performance/ <comment><USER3> I'm not able to watch the video at my current computer

but its actually really typical that when something becomes an advantage for being selected to a certain pool

the success of the those in the pool after the selection will negatively correlate with that thing

\</comment><comment>---

the really obvious example of this is the hockey birthday thing from Malcolm Gladwell's Outliers

people with the earlier birthdays were more likely to make it past each selection stage in becoming an NHL player

but those with the later birthdays who were able to be selected in spite of their later birthdays, were typically more successful after the selection

\</comment><comment>---

The authors contend that the strategy might actually work against a team's success because they found that players born later in the year and drafted later actually had more productive hockey careers.

Deaner said the study showed that men drafted in the second half of the year were about twice as likely to have successful careers in the NHL ??? reaching benchmarks like 400 games played or 200 points scored ??? than those born earlier in the year.

"If the team wasn't making this mistake, they probably would have been more successful," he said. "The guys born in the first part of the year are much more likely to be busts."

[https://www.nhl.com/news/study-suggests-nhl-has-bias-in- favo...](https://www.nhl.com/news/study-suggests-nhl-has-bias-in-favour-of- players-born-earlier-in-the-year/c-657724)

<comment><USER4> That's an excellent point! I can think of another example: In the movie "Hidden Figures" the black, female engineers at NASA are much better than their white, male counterparts simply because it was harder for them to get in. Perhaps the opposite is true today of engineering students at colleges with affirmative action?

<comment><USER5> Alumni preference is at least as big or bigger a factor in admissions than affirmative action. Many of the schools were segregated not so long ago, so you can guess how that affects the alumni pool.

</comment></comment></comment><comment><USER6> I'm also a former ICPC world finalist and I'm willing to believe this is the case in a BigCo because: 1) Top ICPC competitors tend to be extremely socially awkward, and may not work well in groups. 2) Vast majority of engineering work is very algorithmically simple, thus these folks don't get a chance to "shine".

However, I've noticed that they are popular in prop trading firms, where work tends to be in very small teams or individual. I don't know how their performance correlates to fund performance.

If I were hiring, I'd still prefer to hire at least some top ICPC performers. The hard algorithms are rare---but can make or break your product.

I also think the knowledge learned from programming contests is invaluable. I'd like to be able to discuss bipartite matching or min-cut with my colleagues without eliciting a blank look.

<comment><USER7> > Vast majority of engineering work is very algorithmically simple

anecdotal_evidence+=1 : Am engineer, only algorithmically interesting task I had the last three months was to quickly find all minimal solutions of a given instance of a certain class of constraint graph problems. That's about average, at my job. Four algorithmically interesting things a year. And I guess I might even be one of the luckier engineers.

<comment><USER8> I just match APIs up 60% of my time. 20% in 75% useless meetings. And another 20% yak shaving.

</comment></comment></comment><comment><USER9> Just like 'There is no such person as Good CEO', but only 'A Good CEO for a particular company, at a particular point of time', there is no such a person as 'Good Programmer', there is only 'A Good Programmer for a particular job, at a particular point of time'.

Context matters a lot. One does not use an AK-47 to kill a mosquito. It is terrible for that job. But that does not make AK-47 a terrible weapon.

Good at programming competitions does not equal good at any programming job, is a more appropriate sentence.

<comment><USER10> I think that there are personal traits that make people perform good in most situations, but perhaps not all extremes. As continuity is normally good, you try to find those, and change only if you really have to.

A programming competition evaluates almost none of the traits thats doing a marathon run as a highly preforming team.

</comment></comment><comment><USER11> In the chapter of his interview in _Coders at Work_ [0], Norvig found that the strongest correlate in the interview process with success at Google was paradoxically to have been given the _lowest_ possible score by one of the interviewers. He surmised that this was because in order for such a person to have even gotten hired at the end of the process, someone trustworthy must have seen so much potential in the prospective hire that he strongly advocated for the person to be offered a position which worked _in spite_ of that other low rating.

Kind of ironic for a company whose product values are so tightly tied to quantitive data.

[0][http://www.apress.com/us/book/9781430219484](http://www.apress.com/us/book/9781430219484)

<comment><USER12> This isn't surprising - in fact, it would be surprising if it wasn't the case. This fact says nothing about the ability of Google's hiring bar to distinguish between good and bad hires, except that it is not a perfect signal.

<comment><USER11> Totally agree. It just serves as a useful reminder though not to fall prey to the fallacy of deliberately chasing the correlational measure as a matter of policy.

</comment></comment></comment><comment><USER13> I once had an online discussion about the difference between competitive programmers and professional programmers, and which were better. Someone argued that competitive programmers were better, because they had to perform in more extreme circumstances. As he put it: they were sent into the forest with a knife to kill a lion.

Everybody else ran with that metaphor. Someone asked what a lion was doing in a forest; don't they live on the savannah? I asked whether he was sure there was a lion; plenty of times I've been sent to kill a lion and ended up having to kill a goat or an elephant instead. Are we even sure it needs killing?

I think that's the difference between a competitive programmer and a professional programmer. The competitive programmer will be much faster with a solution to the given problem, but the professional programmer will solve a better problem.

<comment><USER14> Mountain lions like forests just fine! Unfortunately for them, we chopped most of the forests down.

Assuming you're in the US and somebody tells you there's a lion around, pretty good odds it's not one of the big orange ones.

EDIT: Bay area published yesterday [http://www.nbcbayarea.com/news/local/Several-Mountain- Lion-S...](http://www.nbcbayarea.com/news/local/Several-Mountain-Lion- Sightings-Shut-Down-Trail-at-Alum-Rock-Park-432968923.html)

<comment><USER13> A mountain lion is a very different animal from a lion. Different subfamily and genus, even. I don't live in the US, but when someone tells me "lion", I tend to assume they mean a lion, and not a puma. Though if there's any doubt, that's absolutely something to ask questions about.

</comment></comment></comment><comment><USER15> I have had a bad experience with an algorthmic topcoder.

The guy has a brilliant mind. But he doesn't understand the big picture or why his code would fail when integrated with big codebases.

He thinks his work is "done" when he has written his tiny little code with some queues and trees. Then he leaves it for someone else to integrate and thus really solve the problem.

The best engineers I found were the ones who took ownership of their projects and had the ethic to dig deep. Not the ones who could solve toy algo problems.

</comment><comment><USER16> Here's a list of companies that don't do this [https://github.com/poteto/hiring-without- whiteboards](https://github.com/poteto/hiring-without-whiteboards) I hope it's the beginning of an industry wide trend away from these types of interviews.

</comment><comment><USER17> Look at programming competitions from an assessment perspective: what are they measuring and is what's being measured good or bad for a job?

Ability to work under short time constraints (probably good), to hack out some solution that will work temporarily (good) but probably not solid (bad), to forego much time to consider the implications of design and implementation choices (bad), to develop without communication if solo competition (bad) or without communication outside of the small group of core developers (bad), to build a solution without getting feedback and refinements from stakeholders (bad), and so on.

</comment><comment><USER18> People who enter programming competitions are looking for some sort of glory: to be stars. When they don't get it from the job, they get bored.

I suspect that the people good at programming competitions could easily perform well on the job, if the motivation were there. I don't think it necessarily has anything to do with short-term versus long-term problem- solving focus.

There are plenty of short-term problems that you have to solve on the job to be effective. You're not doing them in competition against anyone such that if you procrastinate, you will lose, so the motivation vaporizes.

Also, since job interviews are like programming competitions, people who are good at programming competitions figure they can easily get a job anywhere, and to do that repeatedly. They are not motivated into working hard by job security concerns.

</comment><comment><USER19> I would tend to agree, and while I was never very good at programming competitions, when I saw some of the winning code on Topcoder, I somehow lost interest. If that's the code I would write if I learned to be better at competing, then I should rather spend time learning something else.

On the other hand, something like Project Euler or even Advent of Code is very nice, if you do it at your own pace, or for learning a new language.

<comment><USER20> Although, I do think that competitive programmers can become great programmers more often than not.

They practice writing correct for-loops, branches, recursive functions, efficient graph searches, input-output, data structure uses etc. in a very fast pace. To be able to do that requires you to chunk a significant amount of information.

I found that doing stuff very fast correctly makes you learn and internalize concepts quickly and more deeply.

This is all unfortunately anecdotal, I'm not sure how to google for such research (not just in cp but in "learning to do stuff fast improves learning rate").

Yet every instrument I've played and tried to learn, the moment I tried to play stuff fast but correctly (be it drums or piano), I had to improve my technique, had to internalize the rhythm patterns (more complex rhythms are insanely difficult to do fast), memory etc. With it came a significant amount of progress.

Same thing happened to me with language. I was speaking English for 20 years but still had trouble with fluent pronunciation (despite my writing feeling natural), I knew what I had to say but somehow my tongue got all tangled. Yet, when I tried learning some rap songs that use insanely fast diction, my speaking improved up to a point where it felt normal.

</comment></comment><comment><USER21> I haven't done a code competition before but my understanding is that code competitions reward cowboy coding over good engineering practice, i.e. implementing features while paying no heed to maintainability.

When you have that mind set and start dealing with a codebase as monstrous as Google's it sounds like a recipe for some serious technical debt.

</comment><comment><USER22> It continues to surprise and frustrate me that as an industry we continue to highly prize proxy signals for engineering skill, when engineering skill is so directly measurable.

Why even bother with measuring things that are N-degrees removed from actual engineering, when you can just get people to engineer things?

I know others on HN have been hammering this point home for years, but until something changes it deserves to be repeated ad nauseum: work samples work samples work samples work samples.

Stop with the trivia questions. Stop with the contrived algorithms questions. Ask people to design systems, ask people to defend their designs, ask people to write real runnable code that directly relates to the work they will be doing at your job, ask people to review a real piece of code written at your company, ask people to critique real design produced at your company. Anything but what we're doing right now.

<comment><USER23> I actually like the current interviewing approach... and I feel like we are a silent majority. I think whiteboarding / coding algorithm and design problems is pretty fair and reflective of engineering skill.

<comment><USER24> How is whiteboard coding reflective of engineer skill? At what time, during any job you've had, have you needed to instantly write code on a whiteboard, in front of peers, in a matter of minutes. Almost by definition, it's not reflective of engineering as actually practiced in a job.

I'm a far bigger fan of at-home coding exercises. Yes, I know, some people get annoyed at these because they think you're asking them to do free work in their spare time. But what other way is there to test people's coding under circumstances that most adequately mirror those of an actual job. E.g. they have a (relatively) unlimited amount of time, they have access to Google, their IDE, etc.

I'd much rather see what someone can come up with, in response to some novel problem, based on a couple of days programming, than what they can hack out on a whiteboard based on thirty seconds of thinking. The former seems closer to what coders are actually required to do, day on day.

<comment><USER25> > At what time, during any job you've had, have you needed to instantly write > code on a whiteboard, in front of peers, in a matter of minutes.

Well, constantly, actually. Although I'm thinking of designs and snippets rather than actual functions. I guess it depends on what you're asking people to whiteboard during the interview. I agree that asking people to whiteboard qsort is silly, but walking through design alternatives with occasional code snippets to illustrate implementation options is a pretty basic skill.

> based on a couple of days programming

Either your company is very well-known and very attractive to candidates, or this is going to incredibly restrict your candidate pool.

I think smaller work samples are a great idea, I think code reviews are a great idea, but asking for two days sounds like a bit much, especially early in the process.

<comment><USER26> _Although I 'm thinking of designs and snippets rather than actual functions._

But that's the thing -- at whiteboard interviews, they don't ask you to produce "designs and snippets". They make you write actual working classes and functions.

</comment></comment></comment></comment></comment><comment><USER27> As a long-time interviewer, I've learned that a candidate being good at programming competitions means that they're probably good at programming competitions.

It's a weak signal either way for success or failure at interviewing and being able to do the job. Part of the problem, as we've discussed on HN so often recently, is that a programming interview has to waste time with FizzBuzz- style questions just to flag the candidates with great resumes, transcripts, and phone screenings who still actually can't program a computer to solve even a trivial problem.

<comment><USER26> _who still actually can 't program a computer to solve even a trivial problem._

Or who get nervous, and freeze up.

</comment></comment><comment><USER28> Here are some of the positive qualities I would expect from a competitive programmer compared to the general CS population _early in their career_ :

\- knowledgeable at algorithms and data structures

\- good at analyzing correctness and edge cases, even on simple non- algorithmic problems (e.g. FizzBuzz)

\- accustomed to working hard and learning new concepts. this attribute is not specific to competitive programmer – for example, I'd expect similarly from an open source contributor – but it's higher than for a typical college student.

Some negatives I'd expect, which are fixable over the course of the course of their career:

\- over-confidence in code, under-testing

\- less skilled in OOP, coding style, version control systems, as well as web development or systems code (unless they have specific previous work in these areas)

\- sometimes looking down on gruntwork/rote as beneath them (like the view that pure mathematicians have towards applied math or statistics)

I think that list of positive attributes often outweighs the potential negatives, especially during an internship or in the first year or two of someone's career. After that, I would expect many non-competitive programmers to have picked up on some of those advantages (code correctness, learning new concepts).

I've tried to steer my own interviews away from algorithms (especially DP) and focusing more on giving problems that are relatively straightforward, while still being complicated enough that someone has to write precise code and identify/fix a few edge cases.

</comment><comment><USER29> Adding to the good points here, I think coding competitions superstars are also potentially more likely to have a diva-complex, while others are more likely to have an impostor complex when they get into a company like Google. The right amount of impostor complex (where it enables you but does not cripple you) is actually very helpful as it helps you learn and better yourself.

</comment><comment><USER30> Question?

Does being good at programming competitions make you good at interviewing for programming jobs?

Obviously there's some irony in that question. But I also think there's some truth to it as well.

<comment><USER31> As a former ICPC world finalist who later worked at Google, I would say that practicing for programming contests is almost like cheating as far as Google interviews are concerned. The Google interview format is almost identical to the ICPC practice sessions I did in college.

I've seen this video before, and IMO the extreme similarity between programming contest questions and Google interview questions could explain the negative correlation. Specifically, borderline engineers with programming contest experience are more likely to get hired than borderline engineers without programming contest experience, and therefore the set of Google engineers with programming contest experience includes more borderline people than the set of Google engineers without programming contest experience. Thus the slight negative correlation.

<comment><USER32> When I was in high school, being good at programming contests meant picking up a bunch of habits that you'd never use at work -- memorizing the same twenty #include lines that include every conceivable STL data struct you'd need; using single letter variable names; no comments whatsoever. If you and the next person come up with the solution at the same time, you might lose simply because the other person could type faster. You have to un-learn these habits for industry.

Just about anyone can get exposure to a set of representative coding questions (see: the USACO training robot, or Cracking the Coding Interview), but training for these contests means spending XX hours a year under a time limit trying to write code from memory (because you don't have time to look things up in the manual).

</comment></comment></comment><comment><USER33> Also important to remember that good at programming does not necessarily equal good at job.

Excelling as a communicator, being an empathetic person, and having great interpersonal skills are just as (perhaps more) important than how well you can code.

</comment><comment><USER34> Winning the dunk competition does not make your team be an NBA champion...

<comment><USER35> But winning the 3pt shooting contest is a pretty good proxy for shooting ability.

<comment><USER15> And I'm so glad that Golden State Warriors didn't just Hire Kevin Durant for his 3pt shooting abilities. He'd lose to a lot of people who are better 3pt shooters.

<comment><USER36> So what happened to teamwork? We see dominant teams last 4-5 years and then fizzle. Wooden had 10 championships with 7 in a row. Celtics had 8 in a row of 10 championships.

<comment><USER15> Exactly! I'd hire a Durant (a high performing team player) over a sharp- shooting 3 pointer genius (fast algo coder)

</comment></comment></comment></comment></comment><comment><USER37> [http://ruberik.blogspot.com/2017/07/no-programming- competiti...](http://ruberik.blogspot.com/2017/07/no-programming-competitions- dont.html)

It looks like it wasn't "being good at programming competitions" that was negatively correlated with job performance.

It was "participated in programming competitions".

And there are some more "how to interpret machine learning models" caveats in that blog post.

It seems to me the biggest factor in explaining this is that the people who are just below the hiring line but participate in competitions get a bump over the line. Since there are more people just below the line than above it, the "participates" group is bottom-heavy, producing the correlation.

I do a lot of interviews, and it seems to me that lots of people with experience perform below how they "should", because they're not practiced at solving problems from scratch, they work all day on modifying larger systems. Programming competitions would fix that for them, as would most open-source hobby projects.

</comment><comment><USER38> I don't find this surprising. I played around on Top Coder enough to reach the first division but the problems presented were in no way related to my day to day work. While the people that did very well (I never got anywhere once I hit the top grade) might have had an excellent command of very specific data structures and techniques, non of the code would have been very useful in the real world.

If I was interviewing someone, a career as a competitive programmer would not be a detriment but it would not count for very much overall. We are looking for creative thinkers that can work as a team.

</comment><comment><USER39> The market is pretty good at sorting this out and I'm sure programming competition winners are fairly valued. I've seen more Berkeley, Stanford, MIT, CMU and IIT degrees rise to the top than other schools. I haven't seen any _top coders_. Maybe they're there and I haven't noticed. But I haven't seen them on resumes that I've culled through.

It's probably something you might list on a first job resume but further on down the road, you'd just list your work and your education.

</comment><comment><USER40> All job interviews rely on proxies for whether someone will be good on the job or not, because the only way to know is to actually hire them.

All proxies are inaccurate.

<comment><USER41> Also, everyone is convinced that _their_ proxy is the best achievable, although of course they test it only against false positives, not false negatives.

<comment><USER40> > everyone is convinced that their proxy is the best achievable

In my experience, people merely hoped their process was good enough. And it usually was. The "we only hire the best" is marketing propaganda and they know it.

</comment></comment></comment><comment><USER42> My viewpoint is taken from the context as someone who is a reasonably seasoned developer returning to the job market. I never did programming competitions in university, though I surely was someone who fit the profile (computer science guy with a discrete math bent). As part of my recent prep for a job search, I joined one of the programming competition websites and did a couple of contests.

I posit that one of the dangers of spending a lot of time doing programming competitions and becoming very proficient at them is that, perhaps, you can come to believe that "true" programming, some sort of Platonic ideal of programming, is about coming up with the clever insight that solves an algorithmic puzzle.

But, in fact, a fair bit of _commercial_ programming is down and dirty, with databases, and user interfaces, and a lot of the time is really just shuffling data from one place to another, maybe filtering it or combining it with another set of data.

And that's just at the beginning of your career. Later on in your career, success means being able to work at larger scales in a team. That means organizing the code in a way that supports the efficient development of the codebase by individuals like yourself, by your team, by the development group as a whole... And at the architect level, you perhaps are looking at designing the system to support the efficient operation of the entire organization.

So I can easily believe that success at a programming competition does not correlate with long-term success as a software engineer in commercial software development. The two are really very different.

(Btw, I actually found the competitions that I did to be fun, but mentally exhausting. I'd say go ahead and do them, especially if you have an inclination for those types of problems. Just be prepared to use a different mindset for commercial software development.)

</comment><comment><USER43> I see a lot of comments speculating that there may be something wrong with programming competition winners, but this result might be a statistical curiousity unique to Google. It's possible that for most companies, good at programming competitions could still be positively correlated with job performance. For example, what if most people whom Google hires could have won some programming competitions if they had wanted to (a situation that most other companies are probably not in)? In this case, 'won programming competitions' could be data that is a lousy filter for Google, yet a good filter for other companies.

<comment><USER44> Good point, in essence it sounds like one theory people have is that competition winners have over-specialized, but your theory is that there could be floor effects in the range of ability at Google (i.e. the floor is high, many people at Google could win competitions).

</comment></comment><comment><USER45> Completely agree with Peter. I'm shit at those competitions (maybe not the worst ever) but I think I'm pretty good at my job. But I think there are also some who are good at both.

</comment><comment><USER46> In general, I think there are a lot of things like whiteboard interviews and coding competitions where employers would _prefer_ "good at X means good on the job", but are reasonably happy to settle for "bad at X means bad on the job."

</comment><comment><USER47> When I am interviewing:

Candidate having competed in programming competitions - big green flag.

But, if success in competitions is, in their view, their biggest asset - <USER2> flag.

I would extend this to most competitive endeavours.

</comment><comment><AUTHOR> This:

[https://news.ycombinator.com/item?id=13739329](https://news.ycombinator.com/item?id=13739329)

</comment><comment><USER48> well if you're not good at programming contests would that entail a contemplating/slow programmer?

I'd rather pick an algorithmist and teach him/her to reflect than a so called "reflectionist" / "slow coder" and teach him/her how to solve algorithmic problems.

I'd be interested in knowing the guy's (catonmat) own reflections and experiences too.

</comment><comment><USER49> Depends also on what job I guess?

</comment><comment><USER50> Overfitting?

</comment><comment><USER51> The title of the post understates the claim in the link, which is that, "being good at programming competitions correlates negatively with being good on the job".

<comment><USER52> no the statement is ""being good at programming competitions correlates negatively with being good on the job, conditional on passing Google interviews" which is completely different statement.

"being good at programming competitions" hugely positively correlated with "begin good on the programming job" unconditionally

<comment><USER53> Do you have... any kind of evidence to support that claim?

<comment><USER54> The overwhelming majority of people who can't code would fail horribly both at jobs and competitions, this effect will drown out everything else no matter how the distribution looks for the few percent who can code.

</comment></comment></comment></comment><comment><USER55> They are two types of business, first type business to business, software made to run internal in a company, the business run on this software, generally in this kind of software you use enterprise frameworks, the second type are business to consumer where anyone can made an account and use application, some software as a service are like that, they are too other types of web applications business to consumer.

When you allow that anyone to make an account and use your application sometimes you couldn't rely on enterprise technology and it's better to write everything from scratch or to customize open source solutions.

What they are testing in algorithms contests: 1.) the algorithm is correct with various test sets 2.) the performance of the algorithm, running time in milliseconds, there you should to know how to measure time complexity of algorithm with O(N) 3.) memory consumed, there you should know how much memory you are allocating for variables, for example a variable of type byte consume 8 bits

I think that programmers which has prizes in algorithms contests are suitable for business to consumer applications because there they will find a challenge, this kind of programmers will be bored to dig in enterprise frameworks.</comment>


Healthvis R package – one line D3 graphics with R - <AUTHOR> http://simplystatistics.org/2013/04/02/introducing-the-healthvis-r-package-one-line-d3-graphics-with-r/

<comment><USER2> Another similar project I've seen is <https://github.com/nachocab/clickme>

Haven't played with either, just throwing it out there.

</comment><comment><USER3> <http://healthvis.org/develop/> says GitHub repo is: <https://github.com/hcorrada/healthvis>

Edit: wrong repo

</comment><comment><USER4> Are there any plans to put this package on CRAN?</comment>


New Ways to Go Live: Now from Your Computer - <AUTHOR> http://newsroom.fb.com/news/2017/03/new-ways-to-go-live-now-from-your-computer/ <comment><AUTHOR> The distinction here is that livestreaming from desktop is now available for users, when livestreaming via desktop was previously only available for Pages.

I strongly recommend using OBS ([https://obsproject.com](https://obsproject.com)) if you intend on streaming, especially if you are not on a Windows computer.</comment>


Why Can't Tablet Makers Just Freaking Ship? - <AUTHOR> http://www.crunchgear.com/2011/02/17/why-cant-tablet-makers-just-freaking-ship/ <comment><USER2> Because it's really hard to make a market-reactive product that is more powerful and featureful than the preceding product it is catching up to clone.

Apple just happened to have caught the entire planet with it's pants down when they introduced the i-Devices. I mean, look at what Google was working on[1] after Apple introduced the original iPhone. Google was chasing the market leader in style and interface at the time (Blackberry). When Apple introduced iPhone 3G, all bets were off and Google went back to the drawing board.

iPod Touch is introduced, and the only real competitor that comes to the fore is Microsoft, with the Zune (RIP) brand that mimics the Touch to no end and barely does anything better (yes, I'm taking the soon-to-be-dead Zune Pass into account).

Now it's tablets, and again, the rest of the industry reacts. I'm certainly surprised MS hasn't tried to hook up with a HW vendor to make a Phone 7 tablet.

Apple is on a hot streak. First with seriously consumer-friendly smartphones, then with software and media ecosystems, now with disruptive computing platforms.

It'll eventually run out of steam, but will the rest of the industry kill itself trying to keep up in the meantime?

[1] <http://news.cnet.com/2300-1037_3-6230132.html>

<comment><USER3> I am also surprised why MS at least doesn't talk about WP7 tablet. Nobody wants Win7 tablet with desktop software, so the only option left is that Win8 will natively support tablets, but then, what about apps?

<comment><USER4> I have HP Slate. It's "Win7 tablet with desktop software" which is exactly what I wanted.

<comment><USER5> That's great, it probably requires a stylus and gets less than 5 hours of battery life... go you.

<comment><USER4> It _allows_ a stylus... probably!

</comment></comment></comment></comment></comment><comment><USER6> Somewhat ironic commentary considering they were just as unable to ship the CrunchPad. And what did ship (the JooJoo) got completely panned in the reviews.

Really the issue is that hardware is _hard_ to get right and requires a lot of resources, resources that Apple has and many other companies do not.

<comment><USER7> But shouldn't companies like Motorola, Samsung, Palm, et al have those resources at their disposal? They are consumer electronics companies, after all.

<comment><USER8> The real shift that started with the iPhone was that the software became as important as the hardware - how they work together [1].

Motorola, Samsung, Nokia et al don't have the extensive software culture.

Palm/HP is the only one that does.

[1] Also a weakness with Android phone manufacturers - my phone has a small screen, making the icons just too small to hit accurately - Apple would never let a device like that leave the building, Samsung are quite happy to and Google are OK with having their name slapped on the back of it.

EDIT: forgot about formatting

<comment><USER9> Is that a Samsung Galaxy Europa by any chance?

<comment><USER8> yes :-)

</comment></comment></comment></comment></comment><comment><USER10> From first hand experience, it takes up two years to ship a new product that is of a decent quality. Assuming a lot of the hardware OEM started working on a tablet device around second half of 2009 when the iPad rumors started, then the later half of 2011 is when the tablets will start shipping.

It just not that simple as slaping few components together, put some software on top and you are done.

My guess on the age of engaget, or "i build an web app in two weeks" posts, people expect that manufactures can come with great new devices overnight.

Also when you are working with hardware you have to consider supply chain capacity, component quality, etc.

Hardware is just a lot harder to build and harder to scale(and maybe thats why PG advocates startups to steer away from it as much as they can).

<comment><USER11> That's fine and dandy, but quit showing mock-ups and talking about how great they are going to be and how they're going to change your life and all the other heavy breathing. Wait until it ships.

</comment></comment><comment><USER12> Why can't the blogoechochamber just fucking relax? It's been less than a year since the iPad launched, tablets haven't made it to most people's radars yet and the market will play out over the next 5-10 years.

In the grand scheme of things, who actually cares whether the Xoom ships on Feb 17 or gets "delayed" to Feb 22, or that RIM announced March availability for the PlayBook and will instead ship it in April?

<comment><USER13> Simple: consumers live in the moment. They have no idea how much work goes into creating a product, nor do they see more than a couple of months into the future.

<comment><USER12> Yes, so if a consumer wants a tablet now they'll get an iPad. If they want one for the holidays, they'll have 4 different OSs and 10s (if not 100s by then) of individual tablets to choose from. Unlike some tech bloggers, consumers don't get aneurysms because RIM delayed shipments by 3 weeks.

</comment></comment></comment><comment><USER14> There are several reasons:

1\. It takes time to develop the supply chain, product design and so forth;

2\. Apple completely caught the industry with its pants down, creating a market where previously there was none where the consensus seemed to be that tablets were niche products;

3\. Apple's competitors are constantly chasing last year's Apple product. It's why it's a huge mistake (IMHO) for competitors to draw attention to the iPad: at some point very shortly there will be a newer better iPad and suddenly they won't want to make those comparisons anymore (at least not for awhile);

4\. These companies generally have absolutely no understanding of the markets they're entering. It's what I call the Cargo Cult School of Product Management; and

5\. Whereas Apple went all-in with the iPad into unknown waters, every other suppliers seems to not believe in their product. It's a typical business strategy: test the waters, don't overcommit.

The problem is that Apple's "overcommitment" helped bring the price down.

<comment><USER15> "These companies generally have absolutely no understanding of the markets they're entering. It's what I call the Cargo Cult School of Product Management; " Yea, I mentioned the myth that a MBA can manage everything before.

</comment></comment><comment><USER16> What are you waiting for?

<http://www.apple.com/ipad/>

Seriously though, what is so compelling about the non-shipping tablets that makes them worth waiting for (or complaining about) than what Apple is already shipping?

Aside from the arguments that don't impact most consumers (jailbreaking, etc.) could it be that it's just not in the cards at the moment to come out with a device that competes with the iPad (price, performance, whatever, pick your metric)?

<comment><USER17> I want a tablet with flash that I can also use as an USB drive.

Neither of those things are stuff that doesn't impact consumers.

<comment><USER18> You want to use a $500 tablet as a $20 flash drive? And carry a USB cable that'll take up more space in aforementioned $20 flash drive?

That is really one of the problems with Apples' competitors - they just don't get the use cases.

<comment> T-hawk I think the parent meant _Adobe_ Flash.

<comment><USER18> Fair point, but using it as a USB drive? To what end?

<comment><USER19> The idea is to be able to move music and movies on and off the device without having to go through iTunes and the nightmare of "syncing" to only one computer at a time.

</comment></comment></comment></comment></comment></comment><comment><USER20> I suspect this has something to do with it, too:

"Apple secures 60% of global touch panel capacity, causing tight supply"

<http://www.digitimes.com/news/a20110216PD219.html>

</comment><comment><USER21> iOS is merely an iteration of a platform that's been under development for over 20 years.

It took Microsoft over 10 years to create a consumer-friendly version of Windows NT, and almost another 10 years to deliver an acceptable followup.

Software is hard. Consumer software much harder. Platforms take years and years to develop and mature.

</comment><comment><USER22> > _First, Apple has the tablet component market sewn up. An entrepreneur I > talked to in China described the difficulty he still has buying touchscreens > that are worth a darn. The real reason most of the current tablets are 7 > inches? Because Apple bought up all of the 10-inch capacitive touchscreen > stock and if they didn't then they drove the price too high for smaller > orders. There is no way to dabble in the market without paying a premium._

Most people attribute Apple's stunning financial performance to its differentiated products, which integrate excellent hardware, software, and content. If you dig deeper, however, you realize that other critical factors have played a substantial role in Apple's financial performance over the last decade.

One factor rarely discussed in detail, but that has significant impact on Apple's success, is the way in which the company manages the critical forces within its industry. There are five key industry forces, according to Michael E. Porter, but here I just want to focus on one force: "the bargaining power of suppliers."

Let's start with the iPod and iPhone. Most iPod's except for the "Classic," rely on flash memory -- instead of a hard drive -- for storage. The benefits of flash memory are reliability, form factor, and energy consumption. Realizing the significant benefits of flash memory for portable media devices, Apple formed long-term relationships with Samsung, Intel, and Micron, and by mid-2007 commanded about 25% of worldwide flash production.

Fast forward to today, and we are seeing a similar scenario unfold for the iPad and the tablet market. It turns out that Apple has secured about 60% of global touch panel capacity, with a focus on 10-inch displays. As mentioned in the article, this has forced some competitors to initially focus on devices with 7-inch screens, such as Samsung with its Galaxy Tab.

What's the effect of commanding such a large portion of the worldwide supply of a key component for a product?

First, because Apple is buying these components in such large quantities it can exercise significant leverage over suppliers. This leverage enables Apple to negotiate favorable terms and pricing. For instance, South Korean Fair Trade officials alleged that Apple struck a special deal with Samsung to obtain flash chips at below market rates. This favorable pricing means that Apple has a lower cost structure for its products relative to competing products. And all else equal, this lower cost structure results in higher margins for Apple versus a competitor.

Second, when Apple commands such a large portion of the global market for a key component it creates enormous barriers to entry for potential competitors. Competitors can obtain the component in limited quantities but at a higher price, therefore placing the competitor at a cost disadvantage. Next, the competitor can launch a different product -- a hard drive based portable media device or a 7-inch touch screen tablet – that may not match the preferences of consumers. Alternatively, the competitor can just sit and wait until more supply of the component is made available, which in some cases takes years.

In sum, Apple's financial success as a company hinges in part on commercializing differentiated products. But this is just part of the story. As important to Apple's success is the company's strategy around managing key industry forces. As described above, Apple's control over the worldwide market for key components has reduced Apple's cost structure and has created significant barriers to entry for competitors. This yields significantly higher margins and market share for Apple, among other benefits.

<comment><USER23> Is the number of LCD panel manufacturers limited by some universal constant or why Apple's competitors just don't build their own factories?

<comment><USER24> > Is the number of LCD panel manufacturers limited by some universal constant

It's limited by the ability to forecast the future as well as the costs (in money and time) to build a new panels factory and ramp up its production.

> or why Apple's competitors just don't build their own factories?

Because most of them have no core competency in manufacturing, because manufacturing is expensive to setup and evolve, because manufacturing is hard and because manufacturing does not mean you'll make money (one part of Apple's come-back strategy was to get rid of _all_ its manufacturing capacity, a plan executed by Tim Cook)

</comment></comment></comment><comment><USER25> The smaller names are already shipping - I got an Archos 70 and 101 this week (after weeks of delay for the 101, mind you). The Viewsonic G-Tab and Huawei Ideos are out there, too.

I think that Honeycomb introduced a lot of uncertainty into requirements. When would it be ready and would the shipping product be able to support it? Would Gingerbread be sufficient?

</comment><comment><USER26> The problem of designing and manufacturing a new product is harder than you think.

<comment><USER27> The problem of sourcing components and getting them delivered in a timely fashion is harder than you think. Especially on the heels of a global recession that caused suppliers to cut back on their manufacturing output.

</comment></comment><comment><USER28> A year ago I had a gig for a big name prototyping an Android tablet. The message that was passed from other vendors was that Goggle were that they aren't looking into tablets. The project was cancelled. How wrong they were...

When Android 1.0 was released a lot of vendors approached it with caution, 2 years down the road same story again...

</comment><comment><USER29> Hey, that's what I said: <http://news.ycombinator.com/item?id=2215290>:

 _Ever wonder why it's taken a year for anyone to build a 9"/10" iPad competitor? It's because no one can get capacitative touch screen in sufficient quantities. Even Samsung (which owns the factory!) had to make do with 7" screens. Now, finally new factories are beginning to come online, which means that competitors can release their products. The problem for them is that Apple locked in much lower prices (because of their bigger purchasing power), which makes it hard to compete on price._

</comment><comment><USER30> So when is the CrunchPad being shipped?

</comment><comment><USER31> There are many cheap 5" and 7" tablets. But very few 10" tablets. ViewSonic gTablet or viewpad10, Archos 101. They all have pretty good hardware with many of them with two cameras and comparable price with low end iPad. Processor manufacturers like nVidia gives them good frameworks to start with. In addition to several things mentioned in the comments, these tablets had problems like,

1\. Almost all except Samsung Galaxy lacked direct use of Android market. 2\. Some had software problems with bad out of box experience. (For example: [http://www.engadget.com/2010/12/18/viewsonic-g-tablet- pulled...](http://www.engadget.com/2010/12/18/viewsonic-g-tablet-pulled-from- staples-stores-manufacturing-de/)) 3\. Regular apps built for Android phones did not give good experience on the tablets

For the future tablets, waiting for Android 3.0 may not be a good reason. They always can release the hardware and then update the software later. HTC flyer is following this approach. There is a risk of users turning away if the first impressions are really bad. Announced prices for several of them are on the very expensive side. Among the announcements I also notice that very few come with wifi only option which is another reason for high price.

I collect tablet information at tbltpc.com.

</comment><comment><USER19> One problem is that Google is too tight-lipped about the Android roadmap even with its manufacturing partners. I know from working with one manufacturer how surprised they were with the pace of the Gingerbread and Honeycomb releases and how this has completely screwed up their schedule.

</comment><comment><USER32> Well didn't you look at Samsung? They did ship and what was the result..

</comment><comment><USER33> because nobody wants to re-create microsoft's mis-steps and it's clear that tablets are entering mobile territory.

</comment><comment><USER34> Wow, what's with the comments section in the article showing like 5 copies of each post?</comment>


Silicon Valley Trailer Park Residents Fight To Stay - <AUTHOR> http://www.npr.org/2013/10/15/227807022/silicon-valley-trailer-park-residents-fight-to-stay

<comment><USER2> Pretty sad article. The fact that they live in Palo Alto is the only thing that makes them eligible for the quality education that school district offers. For many of these (primarily low-income Latino) residents, a PA education is probably their best and only shot at breaking out of the cycle of poverty. And the landlord is going to end that so he can have $30MM instead of $15MM, and so that yet another developer can build yet another luxury apartment complex. Hey, it's their right as property owners--but I hope they can sleep at night.

The broader problem is how, at least in California (and probably the whole USA), access to adequate education depends on a family's ability to afford to live in a wealthy/expensive city. This is the real social injustice here--a quality K-12 education shouldn't be a luxury that only the few can afford.</comment>


Ask HN: Experienced php/LAMP developers, what is your hourly rate? - <AUTHOR>

I have been charging $45/hr for the past couple of months since I restarted consulting aggressively. I feel I am leaving money on the table. My clients are almost exclusively non-local. I'd love to know what fellow php devs are charging. <comment><USER2> I've charged rates from $60 (totally spec'd out product with full page designs and everything how he wanted it) to around $100 (lots of hand holding).

Depends on location and type of work. I'd say that $45 is a bit low.

<comment><AUTHOR> Yes, I am figuring that out now:) Though it did help me get going when projects were dry.

That is interesting. I have a system where I give a flat quote if the specs are clear or hourly if they are not clear. You seem to take it a level further and only do hourly. How has your experience been with that? With hourly, how do you take any deposit before starting(or do you?)? Sorry for inundating with questions.

<comment><USER3> i did LAMP consulting in college to help pay for "cigarettes". i quoted $60 to $85 an hour, depending on how much i thought my client would be willing to pay. i would refuse to do flat-rate jobs, though i would provide an estimate, and i almost always finish quicker than i estimated.

i would always start with a $1500 retainer, payable via check.

<https://s3.amazonaws.com/zack_public/Invoice+-+Template.doc> [https://s3.amazonaws.com/zack_public/default_contracting_agr...](https://s3.amazonaws.com/zack_public/default_contracting_agreement.doc)

<comment><AUTHOR> Awesome! Thank you.

</comment></comment></comment></comment><comment><USER4> You solve problems for business owners that prevent them from making money, right? That gives you a very different comparable than php code monkey, which is an implementation detail they do not understand anyway.

</comment><comment><USER5> That really depends on where you are and if you can offer specialized value to the company.

Here in NYC I can comfortably charge my clients $80/hour ... but I do more than just PHP development.</comment>


Scaling Mercurial at Facebook (2014) - <AUTHOR> https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/?_fb_noscript=1 <comment><USER2> Previous discussion: [https://news.ycombinator.com/item?id=11789182](https://news.ycombinator.com/item?id=11789182)

</comment><comment><AUTHOR> Related discussion at HN: [https://news.ycombinator.com/item?id=11992136](https://news.ycombinator.com/item?id=11992136)</comment>