Upgrading to Ruby 2.1 (and why complex regexes will inevitably hurt you) - <AUTHOR> http://engineering.freeagent.com/2014/05/23/upgrading-to-ruby-2.1/

<comment><USER2> Whoever wrote the title: the article doesn't mention regexes even once.

<comment><USER3> That's what I thought so I did a second take. This is the relevant excerpt:

> This tree of strings is then converted to YAML tokens using the class > Psych::ScalarScanner that internally uses regular expressions to identify > YAML types. The regular expression used to identity time objects changed in > the new version of Psych, which meant our nanosecond precision time was now > correctly converted to a YAML Time type rather than being left as a string.

Apparently, the "hurt" mentionned in the title refers to a bug being _fixed_.

<comment><USER4> It may technically be a bug fix, but the "fixed" behaviour is kind of gnarly, especially in the way that it interacts with older Ruby versions. Basically, they're serializing _a string containing a timestamp_ as YAML, but because that string matches a regex deep in Ruby 2.1's YAML code it actually gets serialised as a YAML Time object. Ruby 1.9 then deserialises the YAML Time object to a Ruby time object rather than a string, causing round-tripping issues.

<comment><USER5> Yeah, this is actually pretty crazy:

In ruby 1.9, a String containing a timestamp gets serialized as a String -- and parsed as a String in 1.9 or 2.1.

In ruby 2.1, a String containing a timestamp gets serialized as a Time (I'm not sure I'd consider this correct behavior), -- and parsed in again as a String anyway in ruby 2.1 (due to new YAML-safety behavior), but as a Time in ruby 1.9.

The ruby 2.1 behavior of serializing out as a Time but then parsing back in to a String anyway -- seems particularly sketchy, and ripe for roundtrip bugs where the string it gets turned into on parse isn't _quite_ the same one that was original before serialization. (Say, winds up with a different timezone or something).

I'm not sure what the lesson here is, but I don't think it's about regexen. It may be about how too much cleverness/magic will get you -- just keep it simple. Shared gem/library code should be predictable and understandable with simple mental models, and gems used as core dependencies should be very stable from version to version (yaml and yaml serialization rules are neither).

It may be, yet again, about how using YAML the way we use YAML is a big mistake -- either use ruby marshal if you actually want exact roundtrip ruby objects, or serialize only to JSON-compatible datatypes (whether using JSON or maybe that's what YAML should have done all along). This middle ground of YAML where it's hard to predict what is round trippable and what isn't, what is safe and what isn't, and it can change from version-to-version -- is just asking for trouble. But it's hard to decide to stop doing it, as so many of your gem dependencies might be.

<comment><USER6> > The ruby 2.1 behavior of serializing out as a Time but then parsing back in > to a String anyway -- seems particularly sketchy, and ripe for roundtrip > bugs where the string it gets turned into on parse isn't _quite_ the same > one that was original before serialization. (Say, winds up with a different > timezone or something).

It's not serializing it out as a time, but serializing it as an "implicit string" (a string with no quotes). When Psych goes to dump the string out, it checks to see if the string could be interpreted as something else. Since the string being dumped doesn't match a YAML timestamp, it doesn't add explicit quoting on the string.

Here's an example. From the blog post, they are doing this:

        Psych.dump Time.now.utc.strftime("%Y-%m-%d %H:%M:%S.%6N %Z")

Output:

        "--- 2014-05-23 15:42:29.882127 UTC\n...\n"

The `strftime` adds the string "UTC" to the timestamp. But "UTC" isn't part of the [yaml timestamp spec]([http://yaml.org/type/timestamp.html](http://yaml.org/type/timestamp.html)). Since it doesn't match a YAML timestamp, Psych dumps it out as an implicit string.

If we change the `strftime` to produce a string that _does_ look like a YAML timestamp like this:

        Psych.dump Time.now.utc.strftime("%Y-%m-%d %H:%M:%S.%6N %z")

Output:

        "--- '2014-05-23 15:46:31.197338 +0000'\n"

Then the output is quoted so that when we load it isn't ambiguous (quoted strings are _always_ considered strings, and are never candidates for coercion). If we were to manually modify that YAML and remove the quotes, it is indeed converted to a Time object:

        irb(main):012:0> Psych.load "--- '2014-05-23 15:46:31.197338 +0000'\n"
        => "2014-05-23 15:46:31.197338 +0000"
        irb(main):013:0> Psych.load "--- 2014-05-23 15:46:31.197338 +0000\n"
        => 2014-05-23 08:46:31 -0700

The article says:

>The same would happen in Psych 2.0.5 if it were not for a new feature called Safe Load which was introduced after the recent Rails YAML deserialisation security vulnerabilities.

I have no idea where they got this. You have to explicitly call `safe_load`, and it doesn't sound like they're doing that. If your format the timestamp correctly in your YAML, it will happily deserialize as a Time object. :-/

<comment><USER5> So, the fact that there's such thing as an 'implicit string' in the YAML data model, and that I didn't know this, and that I still don't completely understand how it works even after reading your comment (thanks though!)...

...is leading me back to suggesting YAMLs data model is overly complex, and not understandable with a simple developer mental model, and that's the root of a lot of problems.

I previously thought leaving quotes off string literals in YAML was simply a convenience for hand-writing YAML and producing YAML with less noise for human readability; I didn't realize it resulted in an 'implicit string' which would be de-serialized by YAML parsers differently than quoted strings.

(Are these patterns by which 'implicit strings' are recognized to be coerceable to certain types part of the YAML standard, or up to the particular YAML parsing implementation as to how/whether to do it? If the latter... woah, just asking for trouble, no wonder we got it.)

 _update_ Oh wait, I just realized I totally misunderstood what you were saying. Strings are Strings, but on serializing, the serializer is supposed to ensure quotes are used if the string, were it unquoted would be misinterpreted as something other than a string. Okay, seems reasonable -- but OP is reporting this is failing somehow, right? And in some cases something meant to be a string is winding up unquoted, and being interpreted as something else on load?

Or I'm probably still not quite getting it. Okay, yeah, tldr, we can stick with: YAML's data/processing model ends up being way too complex making it's behavior hard to predict and hard to maintain consistent between parsers/versions.

<comment><USER6> > And in some cases something meant to be a string is winding up unquoted, and > being interpreted as something else on load?

In this particular case, a timestamp with "UTC" in it _should not_ be interpreted as a timestamp, and older versions of psych _would_ interpret it as a timestamp even though the spec says it's not valid.

> Okay, yeah, tldr, we can stick with: YAML's data/processing model ends up > being way too complex making it's behavior hard to predict and hard to > maintain consistent between parsers/versions.

Absolutely. If we eliminated implicit strings, it would make life lots easier. OTOH, you could just use JSON. :-D

<comment><USER5> Me, I'd keep implicit Strings (meaning optional to use quotes, for convenience), but stick to JSON-compatible data types. For most cases where YAML is used, what's really wnated is something that is pretty much exactly as expressive as json (no more), but easier and neater to write/read by hand.

Of course, I realize the devil is in the details, and that may be what those developing YAML thought they were doing, but always adding just one more tiny thing that would be useful too.

Complexity vs flexibility, one of the fundamental tensions of software design. I see how we got here through good intentions, but in retrospect YAML made some decisions on this balance that most of us would do differently. Or, did those designing YAML realize what a fundamental part of the ruby ecosystem it was to become, and what the implications of that were? Maybe part of the lesson is that some things really do need to be carefully designed, not just iteratively designed "you can always fix it later" by an ever-changing community of volunteers; is that part of what happened with YAML spec and implementations and uses?

Also, thanks for explaining the bug-fix as part of the story, that makes a lot more sense. I understand that bug fixes will inevitably sometimes be backward- incompat. I think it has maybe been consistently under-estimated how important/useful it would to allow upgrades of ruby itself while keeping the exact same YAML processor and version. The psych/syck stuff ended up being one of the biggest pain points for many people way back in 1.8.7->1.9.3 too. Most gems ended up compatible with multiple ruby versions, so you could upgrade ruby versions while keeping your gem dependencies identical. YAML serializing/parsing, so fundamental, where minor differences in implementation can have disastrous consequences, was a painful exception.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Isn't the real risk running different versions simultaneously (both of Ruby and the libraries) in production and having them sharing state via a serialisation format.

<comment><USER5> Except if that serialization format was Json, we'd both be shocked if there were any problems, wouldn't we? It's possible, but pretty darn unlikely.

And if that serialization format were ruby marshal... there's actually a 'marshal version' embedded with marshaled serializations, which changes independently of ruby version, can change to indicate backwards incompat, but I don't believe has changed in quite some time, not between 1.9.3 and 2.1.x. So again, if the marshal version is the same, we'd be shocked (and it would unambiguously be a bug) if there were anything handled differently between versions. (Okay, that's not entirely true, I can think of some counter- examples too).

I think it really is about YAML, and the mistaken design decisions in the way much of rubydom has historically used it, which continue to pile up.

Note that I think ActiveRecord `serialized` uses YAML in the db, so that's another place you might find yourself "sharing state" via YAML between diff ruby versions -- if you upgrade to ruby 2.1 and have it reading a database created with an earlier ruby version. Oops.

Maybe the lesson is really that serialization is way harder to get right than you think, in terms of both security and forwards compatibility (future- proofness).

<comment><USER7> By serialisation I meant something that dumps objects like Python's pickle. Maybe marshal is a better equivalent. If there was version checking as you say there is in marshal it would still have failed in production but the errors would be better.

Are you sure Activerecord uses YAML in the DB? Everything I've used it for is stored as the native database types. What is the need to serialize the object into the DB rather than create a new one based on the record in the DB?

Nowhere did I say serialisation was easy. My comment was that running multiple versions of platform and libraries at once sharing state was brave. To do that I would want to be completely explicit about the state format and have tests to ensure it is correct even though it is an internal API.

Better not to share anything between the servers and just have them all accessing the same service that owns the state format (probably the DB but possibly also caching layers[risky needs managing] and other services).

<comment><USER8> > Are you sure Activerecord uses YAML in the DB

ActiveRecord use YAML (by default) to serialize non scalar values like hashes and arrays.

<comment><USER7> OK, I don't actually use them, my data model is pretty pure relational (edit: and normalised) although I might start using the Postgres array and hstore/json column types at some point I guess that boundary would prevent serialization issues troubling me.

</comment></comment></comment></comment></comment><comment><USER9> Oh, this gets even better when passing yaml between versions.

In ruby 2.1:

        irb(main):018:0> "2014-99-99 99:99:99.999999 UTC".to_yaml
        => "--- 2014-99-99 99:99:99.999999 UTC\n...\n"

Send it to ruby 1.9:

        irb(main):006:0> YAML.load "--- 2014-99-99 99:99:99.999999 UTC\n...\n"
        ArgumentError: argument out of range
        	from /usr/lib/ruby/1.9.1/psych/scalar_scanner.rb:111:in `utc'

Why did they even try to guess at stuff that's in a string, I can't understand. At least the new version does not explode. (returns a string)

PS: If you think at this point "who would send an incorrect timestamp?", think about some definition of a field validator for example. "format: 9999-99-99 99:99:99.999999 UTC"

<comment><USER6> > Why did they even try to guess at stuff that's in a string, I can't > understand.

Because that's what the YAML spec says to do. I will try to write better code. :-(

</comment></comment><comment><USER10> Good stuff. It's a testament to a good process that you managed to flip it live without more major problems. Obviously there's not as big a difference as 1.8.x -> 1.9.x, but I've still seen some weird errors in production…

<comment><AUTHOR> It was a much more painful story going from 1.8.7 to 1.9.3 in 2011. It didn't help that we decided to go from Rails 2.3 to Rails 3.0 at the same time :-/

</comment></comment><comment><USER11> > (and why complex regexes will inevitably hurt you)

This is a needless bash on Regex (which is not even mentioned in the article at all, except as a YAML footnote!). I have a tip, though- If you DO need to write a complex regex (hint: it will run much faster than doing the same thing in code), document it using things like the /x switch! Here is an example I wrote of a complex password validator- I don't think most developers would have a problem understanding what's going on:

[https://gist.github.com/pmarreck/4c5f1076498da1a86062](https://gist.github.com/pmarreck/4c5f1076498da1a86062)

<comment><AUTHOR> I agree in hindsight it's an overly provocative title. If I could change it I would (I have changed the actual blog post title FWIW). Sorry if it offended you or regular expressions in general.

<comment><USER11> Hey, I get that regexes can be a bit "dense" to understand. I've actually had to scale back my use of them at a prior job for the sake of the team (I was the most expert regex guy by far, but you can't have code that only 1 person is able to modify...)

I love them for some reason because 1) they're like puzzles, 2) they're extremely fast if you know what you're doing, vs. doing the same things in interpreted code.

</comment></comment></comment><comment><USER12> Good to see real-world data on the difference upgrading Ruby makes.</comment>


Ask HN: What do you guys use for wireframing? - <AUTHOR>

I want to draw out some ideas I have, but I'd prefer to do so without paying if possible. <comment><USER2> Balsamiq or mockflow.com (Basic version is free but its kinda useless)

Also, go here for a good list of wireframing tools: [http://www.smashingmagazine.com/2009/09/01/35-excellent- wire...](http://www.smashingmagazine.com/2009/09/01/35-excellent-wireframing- resources/)

Scroll half way down and look for "2. Wireframing and Mockup Tools"

</comment><comment><USER3> See here for a list of wireframing/prototyping tool: <http://c2.com/cgi/wiki?GuiPrototypingTools>

plug: Try App Sketcher (<http://www.appsketcher.com>) if you need to show interactions in your prototype. App Sketcher creates prototypes in HTML/CSS/JS (no coding needed) that can run in any browser.

</comment><comment><USER4> LucidChart (<http://www.lucidchart.com>)

I love being able to use it anywhere, and they just updated it to work on the iPad which is nice. It's got a few issues to iron out, nothing that's kept me from getting things done, and I like supporting these guys.

</comment><comment><USER5> PencilProject (<http://pencil.evolus.vn>)

It provides a decent set of features and has a browser version, as well as a desktop version.

</comment><comment><USER6> +1 for LucidChart (<http://www.lucidchart.com>). I'm a big fan of the collaboration with clients.

</comment><comment><USER7> <http://www.flairbuilder.com> is the best.

</comment><comment><USER8> Axure (<http://www.axure.com/>)

</comment><comment><USER9> Google Docs Drawing tool

Very simple and quick to throw up some ideas

</comment><comment><USER10> you can use papasketh, it is a powerpoint like tool, can make interactive wireframes, very cool. <http://www.papablue.com>

</comment><comment><USER11> \- Pen + Paper \- Adobe Fireworks \- Adobe Illustrator

</comment><comment><USER12> pen + paper

<comment><USER13> +1

</comment></comment><comment><USER14> omnigraffle

<comment><USER15> I also use Omnigraffle, hands down best app for detailed wireframing. Sometimes it can be too much. In those cases I'll just use Mockingbird</comment></comment>


Ask HN: How will ISP's enable network priority post NN? - <AUTHOR> I can't imagine it will be by IPv4 address.  That seems too hard for cloud based solutions to jump on board and pay extra.   If it is an IP header, couldn't one simply install an OS plugin that adds that header to every packet?  If it is an HTTP header, couldn't one simply install a webserver plugin that adds that header to every request?  Is it HTTP/S only and done via domain name inspection with transparent proxies?  In which case couldn't we run the web on another port?  Will it be a standard approach across all ISP's, or will each ISP do something different? <comment><AUTHOR> WRT running http over non-standard ports. I'm pretty sure one could write a chrome extension to make that transparent. Lest it be counter-blocked by the ISP, it seems like one could do a "spread spectrum" port hopping (with cooperating websites) to keep them on their toes. My point is that if we make it too expensive for the ISP's to enforce, since they are primarily businesses, Net Neutrality would be the defacto configuration.</comment>


Ask HN: Responsive As A Service (RAAS) – Would you take it? - <AUTHOR>

We recently started www.raas.co
A simple service for web designers, agencies & biz where we convert any graphic design, mock-ups or existing website to responsive html pages. Since we offer it as a service, it can be quite cost effective than doing it on your own or from front end developer. My question: Would you take it if it saves time & money? <comment><USER2> Since this is obviously just a landing page and the service doesn't exist yet, what is the proposed workflow? Do I log into my account and upload the files and then get emailed my html back? Are you the one hosting the pages? What your turnaround time be? You said the price will be 299. Is that per month, per year, per fortnight, or forever? You seem to be emphasizing the importance of responsiveness for mobile, so you also do the formatting to make the site mobile-friendly?

<comment><AUTHOR> Yes exactly, we want to make it as seamless as that. You upload your files and we emailed you back the html in 2days to a week depending on plan. $299 was for a simple website but we might have to come up with attractive fixed price plans. Yes we do formatting to make the site mobile-friendly as well.

</comment></comment><comment><AUTHOR> Clickable link: [http://raas.co](http://raas.co)</comment>


Mark Manson Became a Millionaire Blogger - <AUTHOR> https://medium.com/@jjpryor/how-did-mark-manson-become-a-millionaire-blogger-6fb9ee50007e <comment><USER2> Good write-up and all, but it really these 'all it takes to be a millionaire is hard work' stories really bug me. Yes, it does take hard work, but I bet this guy was already at least a little wealthy, and could dedicate all his time to his book.

Also, for this one guy that made it, how many didn't?</comment>


Ask HN: Do you expect interviewees to "ace" whiteboard coding exercises? - <AUTHOR> I know that whiteboard coding exercises are in low regard these days, but as someone who's currently looking for a job, I can say they're still widely used.  I personally never had a problem with being asked to write code on a whiteboard as part of an interview.  Partly because it used to be understood that the point of the exercise was not to write runnable and correct code, rather it was simply to convince the interviewer that under ordinary circumstances (access to an actual computer, sufficient time) that you could produce code that was both runnable and correct.
However, the last three whiteboard coding exercises I've done (two at Facebook and one at a small startup) seemed to be judged much more harshly than what I'm used too.  I don't think I "aced" any of them, but had I been interviewing somebody that performed at the same level, I would have said "good enough" and passed the person along for further consideration.
Now some extra information: All three interviews were in Seattle, two of the interviewers for sure were ex-Amazon people (which I mention because I think it might be relevant), and I managed to get hired at Microsoft back in the 90s and at Google in the mid-2000s.  I was not hired at Amazon back in 2002-ish, however.
So anyway, I'm wondering: Have I just not been doing as well as these interviews as I think, or has the industry moved the goal posts on me? <comment><USER2> 1\. Everyone will say they want to "see how you think"

2\. You will not get an offer if you do not get a solution

3\. Everyone ever: "White board interviews can be awful, but my company actually does a pretty good a job and I find them useful."

edit: for a slightly less snarky comment (and to expand on point 2) [https://news.ycombinator.com/item?id=9522400](https://news.ycombinator.com/item?id=9522400)

<comment><USER3> #2 is demonstrably wrong.

<comment><USER2> Of course there will be exceptions, but, given two candidates, the one who did better will get the offer. At big tech companies there is no shortage of people who ace a white-board problem.

Also, if you interview with multiple people for a position (and do multiple white-board problems) you can get an offer without acing _all_ of them.

<comment><USER3> Well yeah, but that's not what it said. I've had the occasional _complete_ whiteboard disaster (not really my thing) that ended up with offers, including pools where people _did_ bang-up whiteboard work.

There's a lot more at play in any reasonable place than whiteboard performance.

</comment></comment></comment></comment><comment><USER4> I don't expect interviewees to "ace" whiteboard coding exercises, because the point of my questions isn't to answer the question: it's to see how you solve problems. Do you ask smart questions before writing anything? Do you put something down and then refine it? Do you handle errors? Do you understand the performance, maintenance, and testability implications of what you've written? That's what I'm looking for you to answer.

Then again, I work at Pandora, so this is probably an outdated approach...

<comment><USER5> This isn't an outdated approach at all. It is how I conduct my coding interviews and how I have been interviewed in the past.

</comment></comment><comment><USER6> I don't understand how whiteboard algorithm challenges with a curveball or brain teasers are any indication of a developer's value add. Why would you not pair program with the candidate, and give them resources that are normally available to software developers? Memories are formed or helped by relationships (see mnemonics) and when you remove all context you're getting only a narrow view. You can "see how they think" by working with actual code.

It seems like the biggest players complaining about the lack of native tech talent in the US are the ones who give the worst tech interviews.

<comment><USER3> Brain-teasers aren't overly helpful, IMO, unless they're directly related to stuff the company does.

For example, I had an odd one that addressed solution search space, how to short-cut going through the entire space, etc. Definitely a brain-teaser, and not something 99% of developers have likely dealt with--but relevant.

</comment></comment><comment><USER7> Despite the sentiments of "they just want to see how you think" or "you don't have to get it right", in my experience if you don't do fairly well on the whiteboard you've failed the interview.

<comment><AUTHOR> I think this partly depends on how hard the coding question is. If they give you FizzBuzz, I think you're pretty much required to ace it, even if you've never seen it. FizzBuzz is really simple though.

At Facebook I was getting I guess what you'd call classic algorithm questions but with an extra twist thrown in. If you combine that twist with excessive time restrictions (the Facebook interviews were strictly 45 minutes), you not only have to code well, you have to do it fast. On an algorithm that they appear to be hoping you've never seen before.

<comment><USER8> Yeah, that hope from them is baseless. Truth is, you're competing with candidates who have practiced a lot. They know it, and candidates know it too.

I'll re-iterate: Technical interviews are a competition. You cannot go unprepared. Testing your "raw" skill is stupid and a myth. It's as stupid as saying you want to see Usain Bolt (and everyone else) compete without practice. Those days are gone.

<comment><USER9> What they are describing is putting Usain Bolt at the beginning of an obstacle course and then saying he's not an Olympic level athlete when he trips on a tire.

<comment><USER3> What you're forgetting is that most developers, as with most athletes, aren't competing at the international level.

</comment></comment></comment></comment></comment><comment><USER8> Whiteboard or not, in any interview, you are judged relative to performance of other candidates. At very coveted places like FB, they don't have a dearth of candidates. i.e. Even if you did "good enough", very likely they'll find someone who "aced" the same question on the whiteboard. (We're not debating whether that's right judgment or not, but from their perspective, it's justifiable).

Having said that, I believe that your hunch is also correct viz. tech interviews for core roles at good companies these days, are more competitive than ever. Compared to say 10-15 years ago, the variety of interview problems is higher, complexity of software has increased, and the value of an engineer is understood to be higher ($Millions in equity). All that is contributing to moving of the goal post.

(Source: several years of doing this, now running an interview training course for a living [http://InterviewKickstart.com](http://InterviewKickstart.com)).

<comment><USER10> _the value of an engineer is understood to be higher ($Millions in equity)_

This would be at hip, happening startups in which you take a gamble on awful pay and terrible hours in the hope of being the unicorn, is it? Because in the vast majority of coding jobs, you're not worth millions.

<comment><USER11> Even at my small CRUD software company, there are 8 devs for a company bringing in $14million a year in revenue. That is certainly skirting the million range.

<comment><USER10> How many secretaries are there? By this reasoning, if there's one secretary, that secretary is worth millions.

<comment><USER3> And if they're any good, they probably are.

</comment></comment></comment></comment></comment><comment><USER12> No, I don't do them at all. Stop telling people to code on the whiteboard for god's sake

</comment><comment><USER13> My two cents: (not hiring for a well known west coast company, but still)

This is how I rank candidates. Let's say for a common question such as lowest common ancestor in a BST.

1\. if they know the solution already and tell me they know it - major points, most interview prep books include it and they came prepared and they are also honest. I let them implement it still (and add some twist of my own)

2\. If they don't know the solution and still figure it out, might even score higher, but people can "act" that they know it and some interviewed will fall for it. I want to believe I catch bad actors but can't say I can catch good ones. In any case if this is a question that appears in an interview prep book, I would expect them to know it (most people don't)

3\. If they don't manage to implement it correctly, this is the biggest turn off. You CAN write correct whiteboard code if you WANT. I'm not with a stopwatch. If you don't then I consider it as sloppiness (more than "you can't code")

4\. How you talk and behave - most important. If you can't figure it out yourself but ask me questions, if you try a simpler problem first, if you talk and explain what you are doing, if you run your ideas with me asking what I think, if you are determined to figure it out, ask for hints and immediately understand them and get this "aha" moment of how didn't I think of it rather than oh sucks I didn't think of it. If you are excited about the solution more than the fact I gave you hints for it, then I'd like to work with you. Asking questions is so important. Also not arguing with the interviewer and being a nice person really helps. I prefer shyness to overconfidence. Arrogance is an immediate no. Asking questions leads many times to a yes. Even if you didn't ace.

Bottom line with the existence of books courses and forums that list so many interview questions (some are on algorithms that took several years to develop) so knowing the solution is likely to be known from a book means you are not tested on your academic algorithmic development skills, you are tested on implementing something you read on CtCI with a twist perhaps. If anyone reads CtCI then interviews will just become harder.

<comment><USER14> This is just my opinion, but If you're asking questions that can be found in "interview prep books" you're doing it wrong. Why not just ask questions that can be found by you know.. actually having experience developing software?

<comment><USER13> I do that too, but this type of questions serve two purposes. If they know it, I know that they do research before they approach a project, see what was done before, and take life seriously. Also it shows that they can learn something and actually implement it. Unless they memorized the solution, I can learn if they can actually code, not just talk. Second if someone didn't know that question, it still shows how they think and behave. I usually leave these to the end, but it's not always easy to come up with experience related questions that differentiate good candidates from great candidates. Think of it this way, most of the day you don't need the skills tested in the interview, just like in college usually you don't need the stuff they test in SATs, right? You still need to find the right candidate somehow. Asking them about more practical / knowledge based questions is much harder. People come from different backgrounds. Also most people will know well basic software engineering questions. I'm left off with basic CS stuff (data structures and algorithms) to really find the difference point. My experience shows that great SEs will know to answer, not so great ones, won't. No explanation why. Perhaps great ones want to learn more than they need for their job. Good ones just do their jobs well. But when something new comes, or if they need to improve a slow algorithm, they give it up. Seen it happen many times to great "craftsmen" they can code CRUD and UI very well, but they can write an algorithm out of a paper bag. Sometimes this is exactly what I am looking for in a candidate. Depends on the role.

</comment></comment></comment><comment><USER15> Maybe I'm an edge case, but I have never once had to deal with a whiteboarding session in a single interview I have been in. Though, this is obviously a small sample. I've worked at one startup, largely contracted otherwise, and am just now looking to join another.

Largely my experience has been 1/2 to full day pair programming sessions, building a sample application that does something reasonably nontrivial, or a combination of these two.

I really personally enjoy this practice. Even though a day of billed hours is a large opportunity cost, so is the expense of potentially hiring a bad fit for the team. It goes both ways.

</comment><comment><USER16> I used to (and, a few years ago, turned away smart people who failed them), but realized they were the wrong test for a small company. I switched initially to getting people to complete a task in their own time with the resources they liked and send us the code, and now entirely on network (i.e. who our CTO has already worked with and knows).

Big companies can't afford that luxury though. If big companies set tasks, the tasks would eventually leak because of the sheer number of people applying (both per position and over time). By necessity, you need the same task for all candidates to compare them effectively (ours was "build an inventory management system in Haskell for shoes", and we checked for things like documenting code, error management, and the sensible shortcuts someone might take), so you can't switch tasks around, and people will eventually learn what you like, work hard at faking the knowledge (e.g. copying and lightly modifying the code from other applicants), and you'll get loads of false positives.

So a big company needs to find relatively generalist questions that correlate roughly with later performance, and it seems that whiteboard CS questions are those by testing existing knowledge; through the sheer breadth of the exercise, it's a lot more time consuming to "revise" to fake that knowledge, and harder when on the spot to prove understanding. Are algorithm (and, less often mentioned, "fit") questions relevant to the job, maybe not, but you have to see the context and the hiring problem facing Microsoft or Google.

Of course, my opinion is that smaller companies asking whiteboard questions are just aping what they know from Google (as I was) and that there are better ways to hire when you have only 10 employees and 2 openings, but I might be wrong or at a local optimum.

I certainly regret not hiring a certain Masters in Statistics from Columbia who was very competent but who wasn't familiar with neural nets and admitted so in the interview/whiteboard... she'd have saved me at least 3 months on things I had to build later! Conversely, I later hired a guy who failed some of the whiteboard questions, but said it had caused him to learn more about the topic, which he did over a few months, at which point he came back to us, demonstrated competence and got an offer.

<comment><USER17> I agree with the work sample test. In similar threads, some found cheaters, but the followup interview exposed them because they can't speak about the process and solution cogently. I imagine that if you look at enough, just reading them will allow you to spot cheaters, and having so many applicants will provide a good selection ethical developers. And a short contract-to-hire or probation period should deal with any who get through.

<comment><USER16> The other issue with judging sample code is the sheer amount of time it takes. The two of us took around 3 months (full time, effectively, doing nothing else) to select, interview and make offers to around 10 employees out of a pool of over 100 qualified applicants.

You can sort of understand why companies try to develop less time consuming methods, and why experienced developers prefer to hire from their network...

<comment><USER17> Thanks for the data on the evaluation time. 9-10 hours per applicant is nontrivial, I agree. If you've worked with someone shoulder to shoulder, I can also see that being as effective. The problem I hear is that depending on the experience and number of the founding team, they can exhaust their network quickly.

Peopleware has the idea of auditions, and I thought if you were clear about what you wanted, applicants would be comparable. I'm thinking, "Walk us through a project you did that demonstrates your knowledge of code quality." Or similar, with a clear list of what you're hoping to see.

</comment></comment></comment></comment><comment><USER18> For what it's worth, I think whiteboard coding exercises can be quite useful, if they are done right. And a complete waste of time if not.

Here "done right" means something like: used as a way to explore problem solving and logic with the candidate.

So in this light, I wouldn't expect anyone to "ace" a problem, but I would expect them to be able to say sensible things about whatever they try and to understand and discuss how to correct issues or alternatives if they are pointed out.

</comment><comment><USER19> I don't do whiteboard interviews but something similar (I'm in marketing). I'm not looking for people to ace the interviews, though obviously, it doesn't hurt. Instead, I'm looking for people who will be able to perform with training. They don't need to be perfect already and I don't expect them to be perfect. Instead, I expect candidates to have the basics down so that once they learn how we operate, they'll be able to perform.

</comment><comment><USER20> It really depends on the position and the problem. For entry development positions we will give simple tasks that can be 'aced' with any meaningful understanding of (web) development. Oftentimes more complex whiteboard exercises aren't even completed(they could take a long time, but used similarly to ensure problems are approached in an experienced manner.

</comment><comment><USER21> > I know that whiteboard coding exercises are in low regard these days

I wouldn't say this. The hive mind holds them in low regard perhaps, but people hiring have to actually get the job done and in different companies different approaches are possible.

Why do you think it was the whiteboard? Perhaps you were just up against a really good candidate pool.

</comment><comment><USER22> I believe you should be able to use a computer because that's what they will be using day to day. Check out [http://fizzbuzzer.com/](http://fizzbuzzer.com/). It allows you to send interview challenges to test a candidate.

<comment><USER5> Neat. I have used a few different tools in the past.

[https://code.stypi.com/](https://code.stypi.com/) \- shared code editor in the browser

Just use hangouts (we are using [https://appear.in/](https://appear.in/) now, much better) and have them screenshare with you, this will allow them to use their own editor and setup and make them feel more comfortable.

<comment><USER22> brettlangdon try [http://fizzbuzzer.com/](http://fizzbuzzer.com/) and let me know what you think.

</comment></comment></comment><comment><USER23> what type of work are you looking for?</comment>


Show HN: Online Town – A better way to gather online - <AUTHOR> https://hn.town.siempre.io/ <comment><AUTHOR> Hi HN!

One of the creators here.

It's a cross between Zoom x Pokemon. You only get audio and video from people you're standing next to, and as you walk away from them, the video fades away and the audio drops off.

With current video chat apps, you lose many of the dynamics of real life meetups. In particular, you lose the ability to have multiple people in the same shared space having multiple conversations.

In real life events, you can talk to a few people at a time while still being able to quickly go from one conversation to the next. With video chat, you have to talk to everyone at the same time.

Online Town is meant to fix this.

The way it works is, when you're near someone you get their audio and video, when you walk away from them their video drops off, and their audio fades out.

So you can have multiple conversations within a single virtual space.

Join me in the public room! Would love to get your all thoughts on it :)

<comment><USER2> Hi Liamuk! You won't believe this but I was working on this _exact idea_ all of yesterday and shipped a basic version with proximal audio and a 2D canvas to display players. It's not ready for HN traffic yet, but I joined Online Town and ran into Cyrus.

We had a great ~10 minute video chat in the middle of the street about the possibilities of virtual realms. I've just popped him an email and sent some techno recommendations :).

Good luck with Online Town! I think we'll see a whole spate of similar ideas focusing on a variety of niches.

<comment><USER3> I'll see if I can lookup the post here about almost exactly what your talking about.

[https://meet.primrosevr.com/#FromGithub](https://meet.primrosevr.com/#FromGithub)

</comment></comment></comment><comment><USER4> Sounds like a new concept. Has anyone ever tried this approach of a virtual real-life emulating community with video calls?

A lot of community building questions still apply though and I'd love to see them answered. How do you plan to deal with nefarious characters or just general sexually motivated trolls (if any)? Is there moderation of some kind? Community rules in general? Sign up integration in the future? I couldn't find it on the home page (though I may be thinking too much about it - the whole purpose of this might be a 'real' virtual world with sign-ups being a redundancy)

Either way, do not, in any way take my comment to be nit picky or leaning towards the critic side - I'm a genuinely interested user. Just an inquisitive one :) All the best.

<comment><USER5> > Has anyone ever tried this approach of a virtual real-life emulating > community with video calls?

Yes, in stealth mode around 5yrs ago but couldn't get funding for launch. It was too early and too general. High battery drain didn't help either.

</comment></comment><comment><USER6> Another take on this idea of having positional audio is Mozilla Hubs. It's kind of like a simplified VRChat that runs in the browser. Also has mobile support on iOS and Android.

[https://hubs.mozilla.com/](https://hubs.mozilla.com/)

<comment><USER7> But it does not seem possible to have your webcam as your avatar (you can only put it out there as an object in space, which is not as useful).

</comment></comment><comment><USER8> Sounds similar to a product called iSee out of Australia used in school systems there.

"iSee is just like being in the real world, where your voice fades out with distance and you walk around to talk to others and look at what interests you."

[1] [https://www.iseevc.com.au](https://www.iseevc.com.au)

</comment><comment><USER9> I've spent the last 2-3 hours in here and have talked to maybe half a dozen people about all kinds of things. This is just such a fun way to get together and have a conversation, and there are so many possibilities.

Thanks a TON to Cyrus for being such an engaging host and sharing his thoughts about what's going on and how people are thinking about the service!

<comment><USER10> Good chatting with you, Scott.

<comment><USER9> Great chatting with you, too!

</comment></comment></comment><comment><USER11> Really cool idea. I've been thinking a lot about how to have a party online (zoom parties are inevitably terrible), and this seems like a great step towards recreating real-world social experiences

<comment><USER6> Also try out Mozilla Hubs:

[https://hubs.mozilla.com/](https://hubs.mozilla.com/)

</comment></comment><comment><USER12> Heh, it's cute.

Something I noticed is that you can collide with other characters, so if you have three other friends, you can effectively isolated people by collaborating and standing around them, and there is no escape but to reload the page.

<comment><USER13> If you get surrounded by four people, a textbox appears saying that you can press <space> to teleport out. A larger group of people could form a ring to entrap people, but that's harder to coordinate.

</comment></comment><comment><USER14> Similar idea to which I contributed. This one is built on top of Jitsi.

[https://github.com/capnmidnight/lozya](https://github.com/capnmidnight/lozya)

</comment><comment><USER15> 2d proto-"Ready Player One"

This is the coolest thing I've seen in a long time; brilliant.

Is this open source? If so, I would love to contribute.

</comment><comment><USER16> We used this for a remote company "happy hour" today. This was the most fun I've had with online video in a long time. We had a few "pods" that gradually merged and split throughout the event.

</comment><comment><USER17> Tried this with a group of friends today and it was a lot of fun. The fading is a great touch. Main thing we wanted was a minimap, or some way for new arrivals to find us. Nice work!

<comment><USER9> > Main thing we wanted was a minimap, or some way for new arrivals to find us.

I was thinking a minimap would be nice, or maybe a dash option so I could get around a little faster.

For helping people find each other faster, it seems like just having maps with more landmarks might help too!

It would be cool if I could upload my own PNG or something to use as a town backdrop.

It would also be neat if I could click people and find where they are on the map, or maybe just jump to them.

</comment></comment><comment><USER18> Sococo has a similar idea. I've tried it in a few places and for some reason it never really sticks. Maybe we're doing it wrong.

I understand the map is supposed to be NYC. I would use something more people friendly (you don't need car-centric roads when there are no cars!) with more greenery. Right now the map feels a bit odd to me, a bit like a post- apocalyptic world. Maybe that's appropriate for the current time.

<comment><USER19> Put it into a fantasy setting!

...Skyrim meetings confirmed?

</comment></comment><comment><USER20> Made it to hacker news!! Congrats all!!

I wonder if you would consider open sourcing the map creation component? I'd love to contribute

I tried this for a passover and unfortunately the servers were really laggy at that time so we stuck with zoom/Jitsi and gave up the fadeout

For primoserver, it's similar but definitely needs a larger map, appeared to have lag issues on calls.

</comment><comment><USER21> This was a fantastic experience! Probably the first time I've felt that online catchups could be like group ones. Had a good chat with Cyrus and some others. I could really imagine myself hanging out on here more often (despite never really being one for chatrooms).

Thank you for making this! I had a blast. (Guy - Australia)

</comment><comment><USER22> Ah this is super cute! Literally sending this to everyone i know.

</comment><comment><USER23> This is so awesome. So neat to see lots of people here. I totally want to use this -- especially if there is a plan individuals can afford (ex. for board game nights).

</comment><comment><USER24> This is definitely interesting. It reminds me of the bulletin boards slash chat rooms built by the fictional company Mutiny in the series Halt and Catch Fire.

A suggestion, I can basically create multiple 'people' by opening the app in multiple tabs, though it does seem to know me because the nickname seems to remain the same, maybe you should look at a way of allowing a single persona at a given time, if that is possible?

</comment><comment><USER25> I've been looking for something like this for the past couple of weeks, so I'm super excited to try it.

Another thing I think would be great would be shared virtual backgrounds depending on where on the map you are. My team has tried to hack this together manually (standups taking place with everyone having a background photo of our abandoned office space,etc) but an automated zoom plugin or similar would be great.

</comment><comment><USER26> Please keep the graphic in this quality.

It gives an easy-going/fun vibe to the game.

</comment><comment><USER27> Thank you. This is so great. I am curious how one can implement these multi- channels and always-on communication. Are they via WebRTC? Don't they get prohibitively expensive?

</comment><comment><USER28> PlayStation Home RIP wasnt video calls but avatars in a virtual space. Something you have to have for folks not willing or able to do video so the same thing in essence.

</comment><comment><USER29> I love this so much. Completely new paradigm of online chat.

</comment><comment><USER30> That is so cool. For the first few minutes everyone ran away from me :( But then I was welcomed into a convo.

</comment><comment><USER31> I think the concept is cool but after walking a few steps the game just freezes for me. Will try again later.

</comment><comment><USER32> Used this for the past hour hanging out with friends remotely - super fun!

</comment><comment><USER33> 2D VR-Chat with a cam! Really cool stuff :)

</comment><comment><USER34> really cool, met two very nice Canadians there. I hope this catches on. People will have a blast using it.</comment>


External Debt of Haiti - <AUTHOR> https://en.wikipedia.org/wiki/Haiti%27s_external_debt <comment><USER2> When I was reading about the history of the Caribbean islands this was a shock to say the least, putting a debt onto former slaves for the value of their own lives sounds like something straight out of a dystopian future. Sometimes we just have to look back into our history and you'll never believe the horrors you can uncover.

</comment><comment><USER3> Haiti could easily repay all of this in full if the Clinton Foundation would cut loose the funds it collected on the nation's behalf after the 2010 earthquake.</comment>


Scooters littering US city streets alarm: 'Unlock me or I'll call the police' - <AUTHOR> https://www.theguardian.com/technology/2018/jun/07/scooters-littering-city-streets-shout-at-people-unlock-me-or-ill-call-the-police <comment><USER2> I don't really see the racism slant the article is trying to paint all over this stupidity.

<comment><USER3> That's because you don't view the police as a dangerous occupying force in your community.

<comment><USER4> I view the police as dangerous but recognize their danger as a necessary cost for effectiveness.

I'm afraid of the police, but I'm more afraid of no police.

<comment><USER5> This is a very US centric view of policing.

<comment><USER6> This is a very regional US centric view of policing.

</comment></comment></comment></comment></comment><comment><USER7> Scooters are litter?

Are parked cars litter? What about when a restaurants put a chair or table outside on the sidewalk?

Maybe a closer analogy is the other kind of electric scooter (as in the mopeds like Scoot). Never heard them called litter. So is being on the sidewalk vs the street what determines if it's litter?

<comment><USER8> > Are parked cars litter?

If you leave them outside of a designated parking spot, sure.

> What about when a restaurants put a chair or table outside on the sidewalk?

That probably depends on who owns the sidewalk.

<comment><USER9> > If you leave them outside of a designated parking spot, sure.

What if designate about a third of the city's public space as scooter parking spots? Would that be ok?

To me all the cars that fill my city, standing around being useless 90% of the time, are nothing but litter.

</comment></comment></comment><comment><USER10> > "This is not only an annoying noise, this is a threat to people. For black > people, that can really be experienced as a death threat,"

This is so effed up it's beyond words.

> said Kaplan, who is crafting legislation to regulate the scooters and now > plans to add a proposal to prohibit loud noises and threats.

Sure that's the right way to approach the problem of black people fearing for their lives every time anyone decides to loudly announce the possible need for involvement of government employees to conform with the laws.

<comment><USER11> These are two separate problems. Kaplan is trying to address one issue. That didn't mean the other issue isn't also being addressed. Even if you solved the issue of people fearing for their lives, the other issue still exists and needs to be addressed.

</comment></comment><comment><USER3> This is litter and vandalism. Why aren't people calling the police/city to remove this junk from the streets, and fine the owners for illegal dumping?

<comment><USER12> No it isn't. We give free space to cars, trucks and bicycles. Why not scooters? Is it because they are owned by a corporation? If so should rental cars and car shares be banned?

<comment><USER8> We, as a _society_ , have decided to give space to cars, trucks, and bicycles, generally in a controlled fashion.

If I randomly leave any of them in the middle of the street or sidewalk, they'll be ticketed, towed, or removed.

<comment><USER13> > We, as a society, have decided to give space to cars, trucks, and bicycles, > generally in a controlled fashion.

Exactly. To be fair though this was only after a fair amount of vehicular chaos.

</comment></comment></comment></comment><comment><USER14> For everyone curious as to what the alarm sounds like in person: [https://www.youtube.com/watch?v=DsW4kIg4PQc](https://www.youtube.com/watch?v=DsW4kIg4PQc)

</comment><comment><USER15> Anyone know if people have started to gather these scooters up and part them out?

<comment><USER16> Yep, it happens in SF. I've walked by several encampments and they're getting parted out fast.

<comment><USER17> Uber will end up winning by being able to lose the most scooters and replace them the fastest.

<comment><USER18> They'll lose money on every one, but they'll make it up in volume.

</comment></comment></comment></comment><comment><USER19> I don't understand the legal or ethical rationale that these scooters are different from any other items discarded on the sidewalk.

This is different from leaving your personal scooter for a few minutes while you shop, or from someone accidentally dropping their wallet or phone. If you intentionally strew things around in public and leave them there, why shouldn't anyone do with them as they like? How is this not littering for profit?

The reasoning of, "I left this thing on the sidewalk...I have no plans to come back for it any time soon...I hope someone comes along and wires me money to use it for a bit then drops it somewhere else...but don't you dare touch it unless you pay me!" seems specious.

That is not part of the social contract. No one has a reasonable expectation to use the sidewalk as an unattended warehouse or storefront for as long as they like. At best, this is gaming the question of what is or isn't abandoned property.

<comment><USER20> Huh? In a high-trust society, you absolutely _can_ leave personal or business property in a shared public area, with the vague expectation it will be moved/reclaimed "soonish" (such as "before nightfall" or "within a day").

In some cases, there are posted limits: 2-hour parking; 72-hour maximum; etc.

You can also often leave temporary signs/markings (like sidewalk chalk or "garage sale"/"lost pet" posters). You can hand out flyers/coupons or solicit signatures on the sidewalks. You can monopolize a public field/court for a temporary period simply by starting to play/picnic there with friends. You can leave boxes/deliveries/garbage on sidewalks and in parking-spaces for later pick-up.

How can there be confusion that a branded scooter, which squawks when moved without authorization (just like other laptop/vehicle/shopping- cart/shoplifting security devices), is "abandoned property"?

Further, both the proprietor's needs (to recharge/inventory) and typical usage patterns mean these scooters seldom stay in one spot for more than a few hours – the same commons impact as if they were widely-owned personal scooters.

So dockless scooters look to me like an innovative use of the commons, fairly analogous to other precedents. Sure, if specific negatives are detected, and outweigh the positive until ameliorated, new rules could then be required.

But in a free, high-trust country, the default should be permissiveness until harm can be shown. It's obtuse to shoehorn something new into the category of "litter", when that's clearly not the intent of those responsible nor the practical impact.

</comment></comment><comment><USER17> Sounds like a lone drifter ambling about could kick down a row of these and execute a DDOS attack on whatever emergency lines the scooters are wired into.

<comment><USER21> > Repeatedly touching a scooter for 10 minutes in Oakland on Wednesday > afternoon did not result in a response or call to police.

Looks like the company doesn't even make a call, probably to avoid the high fines for nuisance calls.

<comment><USER17> Oakland has a shortage of police officers and calling the OPD generally wouldn't result in a response in 10 minutes. I've heard stories of waiting several hours for officers to arrive.

</comment></comment></comment><comment><USER22> This article says the word "police" is racist.

>Built-in alarm sparks anger from city officials amid concerns over racism and policing: 'This is a threat to people'

<comment><USER16> Unfortunately, until we have a secondary form of law enforcement that is what you should do if someone is stealing...

<comment><USER23> Who is stealing? It sounds like this is essentially abandoned property in city streets?

<comment><USER16> If you're walking off with someone else's property without their permission to use it, its not abandoned and is stealing.

<comment><USER23> I think the law is not so clear on that as you seem to think. How long can the scooter sit there? Eventually it could be considered abandoned if they are not coming to pick it up ever.

<comment><USER16> If it was truly abandoned, maybe. However if the scooter is alerting that its being stolen its probably not abandoned... We're not talking about sitting somewhere for a week, more like a couple hours, I doubt you'll find anyone who reasonably thinks thats abandoned.

<comment><USER24> I don't think you understand the scale at which these scooters are left.

<comment><USER16> I live in San Francisco, I understand the problem well. The scale is irrelevant to the property issue.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> Anyone have a recording of the audio played? A quick cruise to YouTube came up empty, though perhaps your search terms will be better than mine.

<comment><USER14> Found someone uploaded it to YouTube here: [https://www.youtube.com/watch?v=DsW4kIg4PQc](https://www.youtube.com/watch?v=DsW4kIg4PQc)

<comment><USER25> Thank you, perfect.

</comment></comment></comment><comment><USER26> No publicity is bad publicity I guess?

</comment><comment><USER9> Where's the outcry over cars littering the city?

</comment><comment><USER5> Lol no police officer is going to give a f __k what happens to one of these scooters.

They should all be launched into the sun.

</comment><comment><USER27> Kick these NARC scooters to the ground or throw them in a dumpster.

</comment><comment><USER28> Move fast, break things, litter, threaten to jail people - the new agile startup manifesto. I would be curious to hear the backstory of how this decision was made. Someone had to propose the idea and someone in charge had to approve. Then nobody around them chimed in with "hey this is a bad idea". Granted they were already planning on dumping their trash on the streets anyway so ethical considerations were probably not at the top of the list...

<comment><USER8> Yeah, it's a genuinely baffling decision.

A polite "Hey! Looks like you're checking out our scooter! For more info, head to example.com - use COUPONCODE for $5 off your first ride!" seems like it'd be equally effective at getting the message across and far less off-putting.

<comment><USER21> Maybe they are experiencing really high levels of theft and are desperate to do something to stem the loss?

<comment><USER8> An actual thief is probably going to laugh and roll their eyes at the idea that the police will respond to an automated 911 call from a scooter left on the sidewalk.

<comment><USER29> Isn't it the case, in SF, that police do not even respond to actual automobile break-ins when their very owners call to request police aid?

If a smashed window + stolen laptop (total loss: ~$2,500) can't convince the SF police to lift a finger, I doubt a scooter (~$400) will. Sad situation all around.

<comment><USER23> I agree, they would never respond to such a call. Moreover if it actually flooded the dispatch with calls they would probably be in big trouble. I am sure it is an empty threat.

</comment></comment></comment></comment></comment></comment><comment><USER30> You have to be fucking kidding me

</comment><comment><USER31> Just from reading the title you know this is a CA startup because the scooter threatens to call the police. If it were a TX startup the scooter would threaten to defend itself with force in proportion to the threat. (In case you were wondering, that's a joke).

The city has all sorts of tricks it uses to make life easy for people on it's side and hard for its perceived enemies.

If the city cared about resolving this it would do these (or similar) things because that's how government works. It makes a bunch of rules that are insane when followed at either extreme, normally runs near the middle and then picks and chooses which extreme to apply for situations it thinks warrant special treatment (when the government is bad at choosing this is called corruption).

They can impound the scooters without due process and then just say "oops" when ordered to return them. If you're a big enough jerk (as defined by the city's opinion which doesn't necessarily correlate with the truth) to be known to the traffic enforcement people this is probably exactly what would happen.

Alternatively they can just make a big show out of not prosecuting people for stealing them.

Clearly this isn't really a problem as far as the city government cares so they're just letting it run its course.</comment>


Yahoo (YHOO) to Acquire BrightRoll in $640M Cash Deal - <AUTHOR> http://www.streetinsider.com/Hot+Corp.+News/Yahoo!+(YHOO)+to+Acquire+BrightRoll+in+$640M+Cash+Deal/10000333.html <comment><USER2> Yahoo has to slow down acquiring companies. Some of the companies they acquire have helped them, but a large amount of them have done almost nothing. They should be saving cash.</comment>


An Intro to Haskell for Ruby Developers - <AUTHOR> http://www.free-variable.org/2012/05/an-intro-to-haskell-for-ruby-programmers/

<comment><USER2> Sorry about this comment, but I don't think you achieved what you wanted with this article. It's a bit rambling and unfocused, and you don't really ever talk to your audience in language they will understand without a prior background in functional programming. Case in point: there's plenty of Haskell, but the first Ruby is 3/4 of the way down. It would be more effective if you took one or two concepts in Haskell and explained them in detail, starting with Ruby.

<comment><USER3> I got several paragraphs in and thought, where exactly is the Ruby?

Further to that, having inline code (without any monospace formatting), and talking about binary trees as an _intro_ to Haskell, well, I would suspect that it alienates the people it tries to introduce.

I'll own up to my ignorance, of course. I've no CS degree, I've encountered no occasion where I'd implement CS classics like linked lists and binary trees. My understanding goes as far as sort of vaguely recognising them. I'm not going to boast, but I don't doubt I'm alone here.

I couldn't finish the article, because the content didn't match the expectations the title set.

<comment><USER4> It's possible that you don't roll your own custom trees and other data types because your language of choice doesn't make using your own data structures easy.

<comment><USER5> Perhaps, but demonstrating a custom binary tree implementation in Haskell is not the right way to lure blub programmers.

Show them how Haskell makes it easier to solve the problems they face in their day-to-day work and you might start to make some converts.

</comment></comment></comment></comment><comment><USER6> If you're telling a story, don't digress. In particular, don't have a six- paragraph section entitled "Digression."

A challenge for the author: summarize the article in a single sentence that any Ruby developer would understand.

</comment><comment><USER7> I was expecting this to be like "How to read Haskell like Python", but of course it took the exact opposite approach.

<http://blog.ezyang.com/2011/11/how-to-read-haskell/></comment>


Alluxio is getting attention from Baidu and other data giants - <AUTHOR> http://readwrite.com/2016/02/22/new-fast-sql-project <comment><USER2> What a stupid headline.

They use Alluxio (formerly named Tachyon). People who know anything about Spark will already know what that means. For everyone else it is an out of JVM memory layer that allows Spark to keep more data in memory instead of disk.

The key quote is that it is 100x than Spark _alone_. It isn't instead of Spark SQL, it's as well as.

<comment><USER3> It's also not 100X faster than "Spark alone". This article is plain wrong.

<comment><USER4> To those who don't know rxin, (Reynold Xin) he is a cofounder of databricks and a spark prominent maintainer, I would listen to him.

</comment></comment></comment><comment><USER5> I work on something similar. Spark is still fairly unoptimized, and there is more room for performance improvements.

<comment><USER4> I saw a presentation from a company named parallel machines, they claim x800 faster than Spark performance on pagerank, and you know what, working with GraphX, I am not utterly disbelieving them. Spark has a long way to go on terms of performance.

Having that said, this article is completely misleading and incorrect technically. Tachyon is documented in Spark docs as a off heap storage solution since Spark SQL was called Shark. Nothing new and nothing "competing" with spark. It's still catalyst that runs the spark SQL queries. Just a better memory store. This article is simply wrong.

<comment><USER2> _I saw a presentation from a company named parallel machines, they claim x800 faster than Spark performance on pagerank, and you know what, working with GraphX_

800 times faster or 800%? 800% (ie, 8 times) is believable, but I'd need a lot of convincing if they are claiming 800 times.

Frank McSherry's work on graph computation is pretty good, and he get's 16 times speed up over Spark[1]. Maybe if they are claiming 800 times less resource usage or something?

[1] [http://www.frankmcsherry.org/pagerank/distributed/performanc...](http://www.frankmcsherry.org/pagerank/distributed/performance/2015/07/08/pagerank.html)

<comment><USER4> I'll double check, you are probably right. In any case they are coming from HPC background and squeezing hardware to the limit. Also they don't use the JVM they compile a popular data science language to native code (I didn't sign an NDA but not sure if they want more info to be revealed yet)

Running native vs JVM, using hardware capabilities and utilizing every piece of performance they can think of (one of the co founders I think was a CPU designer at Intel or something) lets them get to the theoretical limit of linearity. Spark might get there eventually... But it will take time</comment></comment></comment></comment>


Review HN: Google replacement, use other search engines along with Google - <AUTHOR>

Please review my project
Url: http://www.shodhel.com/
It replaces Google as default search engine, still allows you to access Google as usual.
Only thing is you can access other search engines by clicking on Back button.
Everyone here will find it useful. And you can safely use it as Google replacement since you don't compromise privacy (query is part of URL fragment) or speed of searches (adds approx. 50ms on Firefox, even less on Chrome).
This really is a basic version. I will be adding some vital features in coming weeks. But I wanted your feedback if you will use it. There is no reason why you shouldn't but I would like to know what will make you use it daily.
I see immense potential here, I would love to know what you think. <comment><USER2> You're much too focused on allowing people to 'use google as usual' and I dislike having to hit the back button to access other engines. I also dislike that I get that popup notice telling me about hitting the back button long before I get any other results. If you want to see how a search engine aggregator is done, take a look at torrents.to.

Legal disclaimer, I don't condone downloading illegal torrents. I just think torrents.to is a well done search engine aggregator.

Also, it needs a lot of styling work. I hit that page and immediately distrusted it because of its antiquated design and styling.

Otherwise I like the idea, and if you improve the UX and IU I might use it.

</comment><comment><USER3> While using the back button is a neat trick, it looks kinda awkward...

Couldn't you have a toolbar or similar on top instead (or in addition to the back button thing, thus getting rid of the even more annoying popup)?

The idea is interesting, nevertheless, but the user experience could use some love.

(And no, I'm not going to use it. DDG is my default search engine, and the !bang searches there cover all my needs)

<comment><AUTHOR> But what if you access DDG as usual but access Google on clicking on back button. You know you need to access Google sometimes. That customization is planned. Thanks for you feedback.

<comment><USER3> If I want to access google (which is pretty damn rare), there's DDG's !g, and the "No more matches found, check google." link at the end.

For me, it is easier to prefix my search string with !g than to hit the back button. Especially if I already navigated a few pages through DDG results.

The back button is also an annoyance when, for example, I had an open tab, wrote a search string into the address bar and hit enter by mistake: I'd want to get back to the page I originally was at, so I hit back, and I get your search engine selection screen.

Isn't that intuitive in that case, I'm afraid.

The idea is good, but... I don't think it'd work well for this kind of thing.

</comment></comment></comment><comment><USER4> I made a solution to the exact same problem: <http://www.dashler.com>

Very interesting implementation you have with the back button. Great idea there. Personally, I don't like using the in-browser search thing. It just never became a habit.

</comment><comment><AUTHOR> Clickable Link: <http://www.shodhel.com/></comment>


Kerf: a columnar tick database for Linux, OS X, BSD, iOS, Android - <AUTHOR> https://github.com/kevinlawler/kerf <comment><USER2> Do I understand correctly that this is proprietary (closed-source) software, even though it's hosted on GitHub? This repository seems to contain two binary blobs without source code.

<comment><USER3> I don't get all the negativity RE: kerf not being open source in this thread. It's obvious the implementation is not free software (check the README in the actual submission) because the author wants to sell commercial licenses. Nothing inherently bad about that -- some of us need to make a living.

The query language and concepts which are explained in the documentation are an exciting/novel (at least to me) contribution and "out in the open" for everybody to see/discuss/adapt/improve upon. Let's not dismiss that because we can't read the source.

<comment><USER4> Strangely, there was no negatively in the comment you replied to, they were simply asking if is is open-source or not, as it didn't align with their expectations of github-hosted projects (I would argue this would be the case for most people).

Contrary to what you state, it is _not_ clear from the README that this is a commercial venture, just that the author provides an email address for any queries in relation to licensing, and actually includes _no_ copyright or restrictions on running the code in the provided documentation. One might even assume that since we've been provided a copy of the binary without any notices, we might be free to run said code without restrictions... but really, who knows? Hence the OP's questions.

</comment></comment></comment><comment><USER3> Off topic; It looks like you linked the linux binary completely statically. I am curious why you decided to do this and how you achieved it. Did you use something other than glibc to compile these binaries?

Also did you roll the SQL engine from scratch or does it built on some existing parser/runtime? Would love to learn more.

<comment><USER5> Linux linking: I wasn't doing anything special with the linking. The Linux binary was compiled on a VirtualBox instance of Mint and stripped and compressed, so it's possible your tools are misreporting, or I did something I wasn't expecting. At any rate, I haven't made that as a conscious design choice, and it's easy to change (fix?) compilation styles in a future build.

SQL engine: all from scratch

<comment><USER3> Awesome stuff, I am actually hacking on something similar, so I would love to hear your thoughts RE: supporting "windowed" aggregations. (E.g. a moving average over a timeseries).

Are you planning on adding that and which syntax are you planning to use? Have you looked at postgres "OVER PARTITION"? While it seems powerful it's also fairly unintuitive IMHO. I was experimenting with adding a GROUP BY clause that allows each input row to appear in more than one group in the result set. Something like:

        SELECT time, mean(value) FROM mymetric GROUP OVER TIMEWINDOW(time, 60);

<comment><USER6> You can do that like this: GROUP BY date_trunc('minute', time)

<comment><USER3> The snippet you posted will compute an aggregation based on a fixed time interval. I.e. it will put every row into a "bucket" of per-minute granularity and then compute an aggregate function for each of those buckets bucket, taking into account only the rows that ended up in that specific bucket (i.e. only rows from that specific minute). To put it another way this is asking the question "Please give me the aggregate of some value per minute".

To make my question more precise; I was trying to ask specifically about a "moving window aggregation" (e.g. a moving average over a timeseries). This is more like asking the question "Please give me every minute an aggregate based on all values in the last N minutes". To do that you need each input row to end up in more than one bucket (or have a special type of aggregation function like postgres does).

For example, if you were doing a moving aggregation with a 1-minute interval ("bucket size") and a 5 minute window ("lookback"), you would need to place each row into 5 buckets: The bucket into which it belongs based on it's timestamp and the 4 previous buckets. And a vanilla SQL GROUP BY can't do that.

Hope that makes sense.

</comment></comment></comment></comment></comment><comment><USER7> I am really interested in this as it seems like a more accessible version of KDB - especially in its support for SQL.

I'd like to look into it further, but I can't find any information about licensing. Given that there is no source code in the repo, it appears that this isn't an open source project.

<comment><USER8> I would generally consider it a bug to not have any form of license in the repo, but from the top of the Readme (last modified 10 days ago):

"Contact Kevin (e.g., licensing, feature/documentation requests): firstname.lastname@example.com"

So if you're interested, I suggest you send Kevin an email.

Personally I think it would've been interesting if it was Free Software -- as this doesn't come with any license, it's essentially less useful than the 32bit kdb[1] -- and I can't imagine it's as feature complete, or has a similar level of documentation, support or real-world testing.

If the intention is to make the binaries deployable/usable, a license file/note in the Readme would be the absolute minimum requirement IMNHO.

Also find it strange to host just binary artefacts on github -- I can't see how that's useful for the author or the users. I suppose one could submit pull-requests against the python api, but then it would make more sense to split the repo in two -- one for the source-available (unknown license) python code -- and host the binary artefacts somewhere.

[1] [http://kx.com/software-download.php](http://kx.com/software-download.php)

</comment></comment><comment><USER9> What is tick?

<comment><USER10> I had no idea and googled this page [https://www.mongodb.com/post/45116404296/how-banks-use- mongo...](https://www.mongodb.com/post/45116404296/how-banks-use-mongodb-as-a- tick-database)

"Tick databases are real-time database servers for capturing, managing, and processing market data."

They go into the requirements after that.

</comment></comment><comment><USER11> A somewhat similar project by Man Investments: [https://github.com/manahl/arctic](https://github.com/manahl/arctic)

</comment><comment><USER12> As a data nerd, I got very excited once I read all the features, but I'm just assuming this will wither and die since it's closed-source =(

</comment><comment><USER13> I see Linux and OS X, where are the iOS, Android and *BSD binaries?

</comment><comment><USER14> No source code? I'm not even going to give this thing a glance. There is nothing so compelling in the database world that I would even be tempted to give up source access. What an anachronistic throwback this kind of thing is.

<comment><USER14> And it's packed using UPX too, presumably to "protect" the program somehow. Just say no to proprietary software from small vendors.</comment></comment>


Scientists get closer to creating synthetic cells that can replicate themselves - <AUTHOR> https://www.fanaticalfuturist.com/2019/12/scientists-get-closer-to-creating-synthetic-cells-that-can-replicate-themselves/ <comment><USER2> This is blogspam from the press release: [https://www.tudelft.nl/en/2019/tnw/artificial-cell- division-...](https://www.tudelft.nl/en/2019/tnw/artificial-cell-division-a- step-closer-to-reality/)

Link to the paper ( _Nature Communications_ , open access): [https://www.nature.com/articles/s41467-019-12932-w](https://www.nature.com/articles/s41467-019-12932-w)</comment>


CAA Adoption Notes - <AUTHOR> https://gist.github.com/roycewilliams/1710ade469c05eb0b090d268470aa741 <comment><USER2> This definitely looks interesting, but I'm a bit disappointed this is intended to be solely a CA-side check. I'd much rather specify with DNSSec a set of root CA certificates that are trusted to sign certs for my domain, that the browser could download and trust at the same time it resolves the hostname. Perhaps with the limitation that they must be served (as specified for CAA) via DNSSEC, and potentially by the DNS servers on the glue record. It should be easy to use similar proofs of ownership to LetsEncrypt if that additional level of trust is desired.

LetsEncrypt is awesome, but the rate limiting and some missing features can be a bit of a buzzkill and require extra engineering to work around (e.g. reusing FQDN by reverse proxying on path if you're, say, deploying one environment per pull request). It's a nontrivial of work to make sure all your resources are using relative URLs just so they can be mounted on any path on a reverse proxy.

I'd much rather be able to specify my own Root CA on my DNS server and then just let my Vault intermediate CA generate certs to its little heart's content. No rate limiting, no '*' limitations, etc. And I wouldn't have to ask my users to either accept my invalid cert manually each time (poor security), trust each cert permanently (poor ux), or trust my CA cert for all domains anywhere (a level of trust I'm not sure I'm comfortable with -- back to poor security).

<comment><USER3> The usual argument against certs in DNS is that nameserver owners can quietly issue valid certs.

You have national domain? Your government can transparently create valid cert for your domain. For more details see [https://www.imperialviolet.org/2015/01/17/notdane.html](https://www.imperialviolet.org/2015/01/17/notdane.html)

<comment><USER2> I think that would be fairly easy to create rules for, though. Only check at the level where registrars are handing out domains (i.e. trust the most- specific SOA, not counting TLD).

In fact, with LetsEncrypt or DV in general, I'm not sure what exists already to stop the scenario you're referring to. My TLD can decide they want certs for my domain and start advertising their nameservers to any IP addresses owned by LetsEncrypt.

As it is there's plenty of manual checking that keeps CAs in check. I don't see why the same processes couldn't be applied to such a system.

<comment><USER3> You can check that a new certificate was issued for your domain through Certificate Transparency. Maybe if DANE/TLSA certs would also have be submitted to CT logs and browsers required CT that'd provide stronger security that we have now...

Another thing is DNSSEC's reliance on RSA 1024 (did that change?).

<comment><AUTHOR> You can absolutely use better keys than RSA 1024 for DNSSEC, see

[http://dnsviz.net/d/sys4.de/dnssec/](http://dnsviz.net/d/sys4.de/dnssec/)

It will take a while until everyone has upgraded, but so far no fast attack on RSA 1024 has been reported...

Even elliptic curve algorithm based keys are possible now (and recommended because of their small size, which is good for one packet UDP answers, which is not possible with RSA 2048)

See ALG13 etc:

[https://www.iana.org/assignments/dns-sec-alg-numbers/dns- sec...](https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg- numbers.xhtml)

<comment><USER4> Other problems with DNSSEC aside, the crazy thing here is the suggestion to replace the Web PKI with a system that has taken _longer_ to migrate towards safe key sizes than the existing solution. 1024-bit keys for end-entity certificates were deprecated in 2013 and the last 1024-bit roots were pulled in 2014-2015 (ish?). I don't feel like the CA/B Forum is a particularly fast- moving body, so this is pretty telling.

</comment></comment></comment></comment></comment></comment><comment><USER5> Sad that Route 53 isn't on the supported list. It should really be called out that Amazon isn't supporting this record type.</comment>


Zachademics: Free games for schools - <AUTHOR> http://www.zachtronics.com/zachademics/ <comment><USER2> When I was 9 I played Robot Odyssey, a notoriously difficult game even for electrical engineers, obsessively all summer.

I got to the last level on my own and learned a TON about logic gates. Maybe it's why I'm in robotics today.

The point I want to make is to never underestimate the capacity for children to learn and never assume something's too difficult. You don't have to get far for it to be a worthwhile endeavor.

Spacechem gave me a strong feeling of nostalgia for Robot Odyssey. It was very difficult. Didn't hold your hand. And was totally open ended on how you solve problems. Which results in feeling incredibly fulfilled when you do solve a puzzle. That feeling was what hooked me. I was so proud.

<comment><USER3> It's available online [https://www.robotodyssey.online/](https://www.robotodyssey.online/)

<comment><USER4> I just tried this and the 'Rewired Palette' doesn't work for me, just gives a white screen. The other two palettes seem to work fine though.

</comment></comment></comment><comment><USER5> Aside, but I notice that none of the games here are marked as a 5/5 in difficulty. Having played some of their games, I wonder what constitutes a 5/5 in the creator's mind?!

Well. If you want a 5/5 challenge, fire up Shenzhen.io and set the language to Chinese. It seems to be beautifully translated to my limited ability to discern, but boy is it hard to learn enough Chinese to play the game! Difficulty: 5/5

<comment><USER6> > _Well. If you want a 5 /5 challenge, fire up Shenzhen.io and set the > language to Chinese._

Ironically, in China some gamers complained that the game is kind of unrealistic as all the datasheets are available in Chinese, it shouldn't and it has made the game less challenging... In real life, engineers in Shenzhen rarely read or write formal datasheets in Chinese, even when the IC is completely designed in China.

Doing it in English can be a bit difficult for a freshman who is unfamiliar with the terminology, which can make the game a bit more interesting. I wonder if the developers should add a "native language w/ English documentation" option for those who want a more authentic experience.

<comment><USER4> > Ironically, in China some gamers complained that the game is kind of > unrealistic as all the datasheets are available in Chinese

Heh, I'd count it unrealistic if all the datasheets were available in _any_ language. As much as I rag on Google sometimes, Google Translate has been very useful from time to time.

</comment></comment></comment><comment><USER7> In case you missed it, ZACH-LIKE (the book of Zachtronics's history, design documents, and prototypes) was recently released for free on Steam: [https://store.steampowered.com/app/1098840/ZACHLIKE/](https://store.steampowered.com/app/1098840/ZACHLIKE/)

<comment><USER8> And it's more than just a book, it includes playable versions of the web games, which was the last thing I still had Flash installed for.

</comment></comment><comment><USER9> SpaceChem is currently $2.50 on steam. I picked it up because I've never played a Zachtronics game before. Despite the trailer looking stupid, I have been blown away so far.

<comment><USER10> This is subjective, of course, but I think SpaceChem is actually ranks at best middle-tier compared to other Zachtronics titles.

Opus Magnum > TIS-100 > Exapunks > SpaceChem > Infinifactory > Shenzen I/O

<comment><USER9> I watched the trailer for opus magnum, and it basically looks identical to SpaceChem, just on a hex grid with better graphics?

<comment><USER10> It's quite different. In SpaceChem the space is limited, the number of instructions is limited (because the instructions share the physical space), and you can only have 2 parallel operations.

Opus magnum has an unlimited space, unlimited instructions, and unlimited parallel operations.

The similarity is just that they're both about linking elements to form shapes.

</comment></comment></comment></comment><comment><USER11> Why just public schools? At least in California (and I suspect elsewhere), teachers at private schools are paid quite a bit _less_ than public school teachers.

I know this because I used to work at a private school! I did that for two years, then left all of it for a tech job so that I could climb out of student loan debt and actually have a decent life. (The basic issue is that parents can't afford to pay more because they pay _twice_ for education: first they pay taxes to send other kids to school, and _then_ they pay private school tuition on top of that for their own kids. The result is tens of thousands of dollars in lower pay for private school teachers.)

Anyway, the point of this isn't to dump on anyone's school. I just want to help correct the idea that private schools are somehow less worthy of care and attention than public schools are. The truth is that private schools are often in financially precarious circumstances!

<comment><USER12> Private schools can use the games, they just have to be not-for-profit (as opposed to a for-profit school, like DeVry). The vast majority of private schools are not-for-profit.

<comment><USER11> What about the school I worked at? Students were aged ~4-13. We were definitely for-profit, but we never managed to make a profit.

<comment><USER12> Those are just really rare - only a few states (Wisconsin, California, Michigan, Massachusetts, and Arizona) even allow private companies to accept charter money, and for-profit charters make up the vast majority of for-profit schools in America (see [https://en.m.wikipedia.org/wiki/For- profit_education](https://en.m.wikipedia.org/wiki/For-profit_education) and [https://en.m.wikipedia.org/wiki/Education_management_organiz...](https://en.m.wikipedia.org/wiki/Education_management_organization)). Whether these corporations should even be allowed to exist is controversial and it's entirely possible Zach doesn't support them. Sounds like the place you worked was an edge case.

<comment><USER11> > Charter schools

We didn't take _any_ charter money because it comes with strings. We were doing our own curriculum development. (Everyone there had a healthy distaste for the standard curriculum that gets taught in most places.)

And before you start, we were secular. Most of us, including myself, were/are atheists!

Maybe I did work at an edge case, but I still think that this is an edge case the world needs more of.

<comment><USER12> Nothing at all against your school! Sounds like you were doing great work

</comment></comment></comment></comment></comment></comment><comment><USER13> I worked on a team that was giving away a video game to public schools, but we had a really hard time convincing anyone to take the game. They wanted technical support and other things we couldn't provide. We just had the game.

<comment><USER14> Someone could form a company or nonprofit to support such games/tools.

<comment><USER15> I would give money to something like PBS but for smart, DLC-free, ad-free open source games.

</comment></comment></comment><comment><USER16> Zachtronics is a beautiful developer. Such a niche genre, so perfectly executed. I'm a bit behind but just started Shenzen I/O. It's a programming puzzle game done _right_. This is perfect for schools, it's genuine programming-thinking packed into a game-like challenge.

It's interesting that SpaceChem apparently isn't included? Maybe because the kinda fake chemistry would drive science teachers mad?

<comment><USER17> SpaceChem's omission is probably just oversight. The SpaceChem page itself makes a similar offer, with the same link to Zach's e-mail: [http://www.zachtronics.com/spacechem/](http://www.zachtronics.com/spacechem/)

A fun anecdote from a GDC talk ([https://archive.org/details/GDC2013Barth](https://archive.org/details/GDC2013Barth) at 21:57):

 _U.K. schools: We want to use SpaceChem to teach programming familiarity.

Eastern European schools: We want to use SpaceChem to teach problem solving.

U.S. schools: We want to use SpaceChem to teach chemistry._

</comment></comment><comment><USER18> This is a very popular model for educational/education-adjacent titles. Not surprising that zachtronics has also filed suit.

Schools generally don't purchase solutions that don't have content that fills their entire curriculum's needs (eg. think a product that covers all of a subject from grades 1-8)

This way, schools act as a great marketing channel for these educational products which are downloaded at the discretion of individual teachers for their particular one-off introductions/lesson plans. Then parents purchase paid versions for their kids at home.

This model can be seen (and has found success) with educational apps Prodigy, Codespark Academy (Foos), and more.

This is not to say it's purely a marketing ploy- there's plenty of social good too to being able to expand your content's reach for educational purposes to many many more players and students than you may have otherwise without a free for schools model.

<comment><USER19> > This is not to say it's purely a marketing ploy- there's plenty of social > good too to being able to expand your content's reach for educational > purposes to many many more players and students than you may have otherwise > without a free for schools model.

Especially games that teach something as fundamental to the future, and lacking in good course work, as programming. These are probably one of the best collection of tools for such content.

</comment></comment><comment><USER20> In addition to their engineering games Zachtronics made Infiniminer, the main precursor to Minecraft.

</comment><comment><USER21> Zach's games are great, I'd heartily recommend TIS-100, Shenzhen I/O, and Exapunks to anyone. Despite his ratings on the site, I actually found Infinifactory the most difficult of the bunch for me, but maybe that just means I'm not as good at spatially oriented puzzles.

<comment><USER22> I'm the same, I find TIS-100 and Shenzhen I/O reasonably comfortable in comparison to the other titles. I haven't completed either, I've almost completed TIS-100, but shenzhen I/O really pushes me way beyond my comfort zone but is more fun. I struggled to even get into spacechem or infinifactory at all. I found exapunks trickier to reason about but in a different way, I got stuck on a tree search puzzle where I find it tricky to match what I expect to happen with what actually executes because of I struggle to reason about the lifetime of the workers. (I've just realised I think I also struggle to program in Rust because of similar problems reasoning about lifetimes and borrowing).

</comment></comment><comment><USER23> I love all of the TIS-like Zachtronics games. I remember ignoring a professor and finishing the hidden puzzle during a 6-9 humanities class a few semesters ago.

It's the perfect mesh between "fake" and a real skillset.

I could also definitely see having a school leaderboard (to optimize for the best solutions against class mates) being very fun.

</comment><comment><USER24> have a lot of respect for companies who do this. Just want to chime in from a developing nation perspective.

we have no computers - no laptops, no desktops. All of India is on mobile phones (usually Android). It would be awesome if future educational content is developed mobile only.

Toolkits like Flutter, AWS Lumberyard and React Native allow for ios+android games being built.

The only reason that mobile based education games for children are not as popular as they could be in the US ..is because of the fundamental concern around "smartphones==bad". I think Steam can do a lot here by allowing parental+time based locks around games.

A problem worth solving.

</comment><comment><USER25> `SHENZHEN I/O contains minor references to drugs and alcohol and a little bit of swearing. It takes place in China and includes Chinese characters and situations. Students may acquire an increased sense of the ridiculousness of modern capitalist society.`

LOL. Shenzhen I/O is the only Zachademics game I bought on Steam and is actually an addictive card game, with a programming game as an Easter egg.

<comment><USER26> By the way, you can get Shenzhen Solitaire on iOS [1]. I play it on my phone all the time!

[1] [https://apps.apple.com/ca/app/shenzhen- solitaire/id120603777...](https://apps.apple.com/ca/app/shenzhen- solitaire/id1206037778)

</comment></comment><comment><USER27> I would love to use these games as activities in my undergraduate software engineering course, but it says they must be installed on school computers :(

All of our students are required to purchase their own laptops so we aren't eligible.

</comment><comment><USER28> Damn I need to revisit my solutions to compete with millions of new submissions :-)

</comment><comment><USER29> I thought KOHCTPYKTOP would be featured :( It got me into pondering how actual logic circuits work (as opposed to theoretical circuits with instant output).

</comment><comment><USER30> I wish there had been an exa-punks club when I was in school. I'd have spent less time NOOPing around.</comment>