US lifts restrictions on more detailed satellite images - <AUTHOR> http://www.bbc.co.uk/news/technology-27868703 <comment><USER2> I don't like this. What is the business of a government in regulating the resolution of whatever form of imagery???

If it can be seen from the sky, or from the street, it's public. Planes, satellites, drones, whatever - you should be free to take pics and sell them if you want.

Fortunately, digital camera didn't exist where such kind of laws had been passed, or there would have been similar stupid restrictions (imagine google streetview with n-times 640x480 pics crafted together, or worse - a law restricting the resolution of the reconstructed google streetview you can view on your screen!)

<comment><USER3> I don't think I can agree with that. To a certain extent, I think this will be another one of those fronts where modern technology tries to breach fundamental and human rights.

What should give you the right, just because you can fly something over someone's property, to take pictures of them and their private space. The issue is a similar one to drones. Should you be permitted to violate someone's privacy in their own back yard or on their property just because you have the technology to circumvent safeguards?

There is no real difference whether the drone is 100 feet above your property or in the ionosphere? If someone put a camera on a stick and held it high enough to tape what goes on in your bedroom or back yard when your children are swimming they would be considered committing an illegal act?

In a way, you should have the right to automatically remove your property from satellite imagery. Or maybe you should get royalties for your property being part of the service. In fact, what is the difference between royalties due for commercial use of their images and that of your back yard? There is none, other than that the imagery of your back yard, especially at those resolutions, are a violation of your most basic and fundamental rights as a human. What, is it going to be left to individuals to build visual obstructions to prevent observation from above?

So you are now rationalizing how this is all different and how it's justified. Well, what happens when technology is developed that allows real time 1cm resolution, live, 24/7 observation? Or what if technology is developed that allows reconstruction of the interior of your home, maybe even in color resolution based on chemical analysis, and maybe even in real time?

Where is the limit? It should lie with the most fundamental rights that are being violated right as we speak. Everyone should have the right to privacy or a choice to profit from it.

We are already having the value of our identities and activities harvested from us, are we really going to allow constant and pervasive surveillance to steal our humanity too? At what point do a certain subset of people simply regress to becoming a commodity that is monitored and maintained like cattle on Big USA Ranch?

<comment><USER4> I agree with your general point but:

> In fact, what is the difference between royalties due for commercial use of > their images and that of your back yard?

The difference is that the photographer holds to copyright to any picture they take. The drone/satellite operator would have to explicitly sign the copyright over to you of the pictures of your backyard.

</comment></comment></comment><comment><USER5> Does "images that showed features as small as 31cm" means 1 pixel = average color of 31x31cm or is it more complicated?

<comment><USER6> That is roughly correct. There is typically a bayer-mask filter on a grayscale sensor, so any given pixel is actually only either blue, red or green, but then a mixing algorithm is applied and you get the full resolution with the appropriate mixing. Of course, there are a variety of filters and a variety of algorithms, so the exact mix will vary across different technologies, but roughly speaking, yes.

</comment></comment><comment><USER7> For anyone concerned about privacy, higher resolution imagery already exists and is used heavily in industry. See [http://www.pictometry.com](http://www.pictometry.com). They use airplanes.

<comment><USER8> Right. This is a win, because it allows you to get images that previously required airplanes over areas where airplanes aren't feasible or cost- effective.

</comment></comment><comment><USER9> I thought that some of the higher-res photos from google earth and competitors were taken by plane, rather than satellite. I wonder how/if the new restrictions apply to lower-flying photography?

<comment><USER10> Most of the higher-resolution photography on Google Earth and Google Maps is taken by airplanes rather than by satellites. Google calls it "satellite" view just to emphasize that it is from above, whatever the source.

</comment></comment><comment><USER11> I don't like this. You can already see a lot of detail on these satellite photos. This is a huge breach of privacy. (Not that a 50cm lower limit isn't a breach of privacy.)

<comment><USER12> Do you worry about people flying planes over your house, looking over your fence, etc?

<comment><USER11> What worries me more is what kind of corporate espionage these satellite images will be put to use for. They've been able to see the car(s) in a driveway for awhile now. But imagine: now they can pay to see what the most popular cars are in a geographical region; they can look at your deck and determine furniture brands; they can see you sunbathing; they can see what you play with, etc. No longer is it just "buying habits" but they can, en masse, buy the rights to psychoanalyze your lifestyle base on what they see from the outside of your house.

I'm pretty certain that a company paying a team of photographers to stalk the average citizen to psychoanalyze their world would be creepy, if not illegal. But this is exactly what they will be doing—and we'll have no ability to "outrun" their team of photographers. Technically, we won't even know when they're overhead.

And that does bother me.

<comment><USER13> Write an app to calculate orbital elements and pop up an alert: "Imaging object arriving over horizon, take action"

[http://en.wikipedia.org/wiki/Orbital_elements](http://en.wikipedia.org/wiki/Orbital_elements)

[http://www.heavens-above.com/](http://www.heavens-above.com/)

Other countries have done this _for years_ , and cover their equipment with camo cover when opposing country assets are overhead. This is why the Air Force/Boeing X-37B is such a big deal; its an asset that can shift orbits to counterattack known orbit information.

[http://en.wikipedia.org/wiki/Boeing_X-37](http://en.wikipedia.org/wiki/Boeing_X-37)

[http://www.spacedaily.com/reports/X_37B_Gets_Stranger_999.ht...](http://www.spacedaily.com/reports/X_37B_Gets_Stranger_999.html)</comment></comment></comment></comment>


Ask HN: Hacks to eliminate gender bias in hiring? - <AUTHOR>

Orchestras that audition musicians behind a screen eliminate gender bias and start hiring more women[1]. For various reasons, it would be difficult to do blind auditions for technical positions such as software development, but I started wondering if there might be other ways to hack the hiring process to eliminate (or at least compensate for) unconscious gender bias. Any ideas?<p>[1] http://www.theguardian.com/women-in-leadership/2013/oct/14/blind-auditions-orchestras-gender-bias <comment><AUTHOR> Here is one such idea: Since referrals by existing employees are one of the best ways to get high-quality candidates, what if male candidates _had_ to be referred by a female employee to be considered (or conversely, that male employees could only refer female candidates)? This idea was partly inspired by women-friendly technology events where men are welcome to attend, but only if they are brought as guests of female attendees.</comment>


MIT's Kaashoek receives ACM award for Exokernel Operating Systems, et al. - <AUTHOR> http://web.mit.edu/newsoffice/2011/kaashoek-acm-award.html

<comment><USER2> "Operating systems typically interpret instructions written in high-level programming languages and oversee their execution on a device's hardware."

What is that supposed to mean?

<comment><USER3> One place to start: [http://www.antlr.org/wiki/display/ANTLR3/The+difference+betw...](http://www.antlr.org/wiki/display/ANTLR3/The+difference+between+compilers+and+interpreters)

<comment><USER4> Awesome article, thanks.

</comment></comment></comment><comment><USER3> a link to the distribution:

<http://pdos.csail.mit.edu/exo/distrib.html>

<comment><USER4> from that link: "Please note that in June, 1998, long after the exokernel was a working system, the exokernel CVS repository was discarded..." Which makes me think his award comes long after his involvement in the project. What's the most up to date project to hack around with? Is this it? (the last tarball is dated 2000 and most of the pages on exokernals are dated 1998).

<comment><USER3> The stale-ness of the code is briefly addressed 20 min into the talk below.

In a perfect world, an exokernel OS would be roughly as stale as the architecture it was built for.

Imagine an operating system that could conceivably be 'done', in a development sense.</comment></comment></comment>


Show HN: Improving accessibility of websites by providing image OCR in-browser - <AUTHOR> https://twitter.com/LinguaBrowse/status/1059427821452443650 <comment><AUTHOR> This is an upcoming feature for my personal project, LinguaBrowse: an app for browsing the foreign-language web. It principally applies transcriptions (such as pīnyīn to Chinese, and furigana to Japanese) to text, but also provides dictionary lookup for words with a single click. This demo is for the [macOS version]([https://itunes.apple.com/gb/app/linguabrowse/id1422884180?mt...](https://itunes.apple.com/gb/app/linguabrowse/id1422884180?mt=12)), although an [iOS version]([https://itunes.apple.com/gb/app/linguabrowse/id1281350165?mt...](https://itunes.apple.com/gb/app/linguabrowse/id1281350165?mt=8)) also exists.

The macOS version is built in React Native, using the react-native-macos community project. I write the code in Swift (for native) and TypeScript (for the React Native JSContext). Ideally I'd have liked to have delivered a click- to-OCR feature, but saving a copy of the file (hence the drag-and-drop) was the only way I could find to overcome both:

* CORS issues, with loading the image data into Tesseract; and * the App Transport Security policy, which prevents mixed content in-browser and HTTP downloads by NSURLSession.

As a bonus, though, this methodology supports OCR of files dragged in from the file system.

Happy to talk about any part of it. Always striving to make foreign-language websites more readable.</comment>


Thanks for using my code, Google - <AUTHOR> http://openphotovr.jottit.com/re_panoramio

<comment><USER2> The most amazing part of this post is that people are still using jottit.

<comment><USER3> I use it a lot, for internal stuff only. But it's very useful for me. Is there any better alternative? (jottit is king in being simple and fast)

<comment><USER4> Make sure you back it up!

</comment></comment></comment><comment><USER5> well its obvious they copied. It doesnt matter if it is a re write. They owe somebody a thank note.

So much for the do no evil bullshit.

<comment><USER6> Building on someone else's work is "evil" now? Where I come from, we call that "progress."

<comment><USER7> the evil was not referencing the original work

</comment></comment></comment><comment><USER8> The interface on the Google service is identical as best as I can figure - does "Do no evil" include saying thank you to the authors of open source code?

<comment><AUTHOR> I see a lot of differences; maybe they even recoded it from scratch. But it uses some interesting tricks I invented, and doesn't use the easy features that I didn't include. They definitely have at least seen the source code.

<comment><USER9> _maybe they even recoded it from scratch_

Even when Google _buys_ a startup they usually rewrite everything.

</comment></comment></comment><comment><USER10> When I read about Panoramio (Google product) on TC today, I thought about how similar it is with your product. I don't know how long Google has been working on Panoramio, but I think you have a good product. Instead of closing the project down, did you try to get funding and take your service to next level?

<comment><AUTHOR> I never wanted to earn money with this thing, it was conceived and started as a non-profit. My number one goal was to see Sagrada Familia again, as it should be seen. The other goal was to change people's minds, change the web, open a new possibility. Win on both counts.

<comment><USER11> That's quite a spirit right there; great respect for that, and upmods won't quite do justice. I salute you sir.

</comment></comment></comment><comment><USER12> Wow this is amazing. What many would do to have google use our code haha... Congrats man.

<comment><AUTHOR> People are pointing out this is likely a rewrite. Fun, anyway.

<comment><USER13> I'm not a flash guy so I'm not sure about this, but isn't it possible to decompile flash?

<comment><AUTHOR> No need, I released the source as GPL. It was legal for them to just take it.

<comment><USER14> Hmm... very interesting. Flash is sent to the browser as a binary then, right? The GPL says that any derived works which are distributed as binaries must have the source code (including the changes) made available publicly.

Out of curiosity and to maintain the openness of open source software, it might not be a bad idea to mention to Google that the app looks to use GPL software and request to see the source. Of course, if they rewrote it, this is a bit more complicated (a line-by-line rewrite, or an interface-based rewrite?), but it might be worth a shot.

<comment><AUTHOR> I wouldn't want anyone to do that. It is a good thing that photo VR is becoming mainstream.

<comment><USER14> Yes, but it's also a good thing that open source software is becoming mainstream. If companies are able to present someone else's open source work as their own, without even giving any credit, it destroys a huge part of the incentive for writing open source software in the first place (recognition).

I wasn't saying that the author should try to get the content taken down. I was just saying that he deserves either:

(1) a clarification from Google saying that they liked the interface and did an interface-based rewrite without consulting the his source code

-or-

(2) a release of the modified source code (as the GPL requires)

I'm not trying to stop photo VR from becoming mainstream. Since when does open-sourcing something prevent it from becoming mainstream?

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> kinda feel bad for the fellow, although to his admittance his only innovation was some flash code. I wish him well in his 'for profit' venture

<comment><AUTHOR> Hey, I'm that fellow. Why feel bad? It's a win.

<comment><USER16> Just out of interest, have you thought much on how you'd go about doing automatic matching?

Would it be feasible to use one of the SIFT implementations out there?

<comment><AUTHOR> Yes, thought a lot, and coded a little. Main problem: sparse bundle adjustment is slow and non-incremental. From what I hear, the same problem is delaying the release of MS Photosynth. Maybe the answer is running SBA on small numbers of user-supplied points rather than SIFT output. Maybe I'm just clueless.</comment></comment></comment></comment>


Sega Channel - <AUTHOR> http://en.wikipedia.org/wiki/Sega_channel <comment><USER2> This was the most awesome thing in the world when I was growing up. Unfortunately, for some reason this plus my 32x destroyed the pins in my Genesis, probably too much weight pulling on them.

<comment><AUTHOR> I had a bunch of Sega consoles from that generation but don't remember the Sega Channel (granted I wasn't in a Time Warner service area). It just blows my mind that a system for essentially downloading games from the 'cloud' so to speak was available 20 years ago.

</comment></comment><comment><USER3> I remember this being HUGE at disney hotels at the time. It was really awesome, but I can't say I knew of anybody personally that did have it.</comment>


QEMU 2.0.0 Released - <AUTHOR> http://article.gmane.org/gmane.comp.emulators.qemu/267615 <comment><USER2> QEMU looks interesting. I have a few questions about its intended use case.

1\. My understanding is that the primary use case of QEMU is for server virtualization on Linux hosts leveraging KVM. Is there a use-case for QEMU on non-Linux hosts?

2\. I have read that QEMU excels in server virtualization but lags behind VirtualBox in desktop virtualization. Is this still the case? [1]

3\. Is it considered "slow" for cross-architecture virtualization? [1]

[1] [http://superuser.com/questions/447293/does-qemus- performance...](http://superuser.com/questions/447293/does-qemus-performance- still-lag-virtualboxs-and-is-there-a-way-to-improve-i)

<comment><USER3> Whether you think it's "slow" for cross-architecture use depends on your standards. It's always going to be slower than using the native CPU, because we have to emulate everything, and even with a JIT that's not going to be fast. Empirically not much effort is being put into trying to make the emulation/JIT faster (and there are serious technical obstacles as well as mere lack of effort/time), but if your target being emulated is a 200MHz embedded dev board then we can probably manage to go as fast as that in software... In any case the QEMU target is often more convenient for debugging or simply more easily available than the real hardware.

<comment><USER4> It is sometimes a bit disheartening to see so much development effort go toward the virtualization/KVM/Xen side rather than seeing improvements in TCG. I realize that Redhat (and maybe others?) funds a lot of development in that area, so it's natural that that's where most of the improvements are. I mostly use QEMU as a CPU emulator, though, and it's frustrating to see so little activity on the TCG side, especially when it comes to things like bugfixes (Win7 x64 bluescreens under TCG, mipsel loadvm broken, to name two issues that have bitten me).

Still, kudos to the developers for making some things better (TCG actually does seem noticeably faster in 2.0.0) and congratulations on the 2.0.0 release!

<comment><USER5> TCG?

<comment><USER6> "Tiny Code Generator", the JIT for cross architecture emulation.

</comment></comment></comment></comment></comment><comment><USER7> Completely read this as QEMM and flashed back to DOS days. :)

<comment> micro-ram [http://en.wikipedia.org/wiki/DESQview](http://en.wikipedia.org/wiki/DESQview)

</comment></comment><comment><USER8> Anyone know if there are good tools for migrating a VMware .vmx and accompanying files to a QEMU machine? Or is this more complicated than I imagine? I'd like to ditch the VMware crap modules that break with every kernel upgrade in favor of KVM.

<comment><USER9> I did just that when I switched my server from ESXi (which used the same formats). For me, the vmware2libvirt command from Ubuntu's virt-goodies package did the trick.

I documented my transition in some of the sections on this page: [https://justdavis.com/karl/it/davis/servers/eddings/vms.html](https://justdavis.com/karl/it/davis/servers/eddings/vms.html)

<comment><USER8> Thanks, this was very helpful. Here's what I did (converting VMware Workstation VM):

      1) Followed rwmj's guide to setting up a br0 device for libvirt in Fedora.
      2) Deleted all vmware snapshots. sync. sync.
      3) Grabbed vmware2libvirt from Ubuntu (it's just a standalone python script) and
         used it with --bridge br0 -f foo.vmx > foo.xml.
      4) Converted my vmdk to raw with qemu-img, moved it to /var/lib/libvirtd per your
         instructions
      5) Edited my xml to point to the right disk, use the qemu/raw driver, use the right
         path for kvm (/urs/bin/qemu-kvm on Fedora).
      6) Import into libvirt with virsh define foo.xml
      7) virsh start foo

It just works! Great. And virt-viewer over qemu+ssh is great; I run this VM on a headless box on the LAN from my desktop.

<comment><USER10> Helpful, thanks. But I'm reminded of my brother's email about how simple it was to create a Linux kernel for a tv-controller - 3 pages of build instructions, ending with "So easy!" What is it about Linux folks ...

</comment></comment></comment></comment><comment><USER11> Why would you use QEMU over virtualbox? (Serious question)

<comment><USER12> The VirtualBox virtualization drivers have serious issues. They're written so poorly that they're notorious for causing kernel panics on linux. The kernel devs consider your kernel tainted if you load the virtualbox modules.

I've crashed so hard using virtualbox that I didn't even _get_ a kernel panic, just a box that wouldn't even respond to alt+sysrq.

On top of this, I personally prefer QEMU because it doesn't come with a clunky GUI.

<comment><USER13> To be fair, VirtualBox runs flawlessly on OSX and Windows. I've also used VirtualBox without problems on Ubuntu. What Linux distribution you use ?

<comment><USER14> I've had Ubuntu 12.04 guests crash hard (like the commenter mentioned) on OSX and Linux hosts with VirtualBox.

<comment><USER13> Probably has something to do with the 3D acceleration Unity needs.

In my case (MacBook Air 2013 with 8GB of RAM I run Ubuntu 12.04.4 without a problem).

<comment><USER14> My installs are headless, no 3D accel or Unity needed.

As originally mentioned, the VBox kernel modules are of poor quality. You may or may not trigger an edge case in your daily use, with or without a desktop environment.

</comment></comment></comment></comment></comment></comment><comment><USER15> This is simply awesome. Congratulations!

</comment><comment><USER16> What is QEMU and why do I care? It would be helpful if that had been in the first paragraph. I am going to dig deeper, but I'm sure a huge number of people didn't.

<comment><USER17> I know where you're coming from, and I've had the same reaction to a few other similar posts on HN, however before I posted that reaction I realized two things:

1\. If it's on the front page of HN then a lot of other folks around here probably know what it is already.

2\. If it got voted up fairly quickly, it's probably also a big or important technology that I should familiarize myself with, at least superficially.

<comment><USER16> Thanks for that perspective, that's a good way of looking at it. It's easy to get overly dismissive and lazy and it's good to have a reality check.</comment></comment></comment>


18F's Micro-Purchase Experiment: Why I Bid $1 - <AUTHOR> http://www.brendansudol.com/writing/18f-micropurchase/ <comment><USER2> I think if there's any lesson to be taken from this it's that presenting bounded, well-described (and thus easily undertaken) sub-projects is probably more effective than simply inviting developers to "help out" in some non- specific manner on a larger open-source efforts.

</comment><comment><USER3> This is a great outcome for that story. I must admit, I did too assume it was trolling behaviour when I saw the bidding on HN.

He wanted to do the work, he got what he wanted, and the US Government got the job done for just $1!

Not sure how anyone can see this but a victory for the US public.

18F is, I think, a fantastic initiative; I hope HM Government takes note - could be fantastic here in the UK too.

<comment><USER4> I hope it's not dismantled by the next administration to come into power.

<comment><USER5> I think it's going to be safe. It demonstrably saves much much more than it costs, so conservatives will likely support it from a cost cutting/reducing government "waste" perspective. Liberals will support it because it's smart and makes government run better.

I think only an extremely cynical view would suggest this program isn't safe, a view in which conservatives intentionally dismantle good cost-saving government programs while leaving bad ones for the sole purpose of giving government a bad name.

<comment><USER6> Has our legislative branch behaved rationally in the last few years? Recently they threatened forcing a default for unrelated (to budget) issues. And in the not to distant past they voted a law that prohibits Medicare from to using it's bargaining power to negotiate for lower drug prices. You know something that would save every tax payer quite a bit of money since Medicare is one of the larger budget line items.

Based on past behavior you don't have to be overly cynical to think a useful program like this could be eliminated.

<comment><USER7> Fortunately, 18F is under the GSA, which is the executive branch. It's entirely likely that most Congressmen don't know 18F exists.

<comment><USER8> More to the point, 18F is supposed to be a self-funded organization that shouldn't draw much from the overall GSA budget. (Not sure if that applies to standing up the organization / hiring and other investments). It would be a hard argument to kill it. That said, The US Digital Service is out of the White House Office of Science Technology Policy (a distinctly political / appointed office) and USDS / 18F interact quite a bit so momentum could be a challenge if there was executive-level antipathy.

</comment></comment></comment></comment></comment></comment><comment><USER9> This appears to be working so far.

One sample doesn't really establish a "market rate" yet, so I don't worry about the seller not being motivated by financial profit motive. Sometimes the value provided to the seller goes beyond the financial payment. 18F gets a good deal here because of the intangibles they have to offer.

If they put out more projects than the amount of work people are willing to do at the "$1 volunteer" or "$1 build my portfolio" rate, then the price should go up. How deep is this pool? I guess they will find out.

The big challenge, I think, will be if bad actors start coming in and making crazy bids and then doing sloppy work. Time will tell.

I'm excited to see how this develops.

<comment><USER10> Yes, what we have here is the volunteer actually being paid in social capital and personal satisfaction, but not _directly_ from 18F. 18F has heavily promoted recently, and that along with them being a part of the government and the project being open source all contributed to the volunteer feeling it was a worthwhile endeavor at that price. It's an interesting case study of how any market pricing function that looks at _purely_ monetary cost is usually a poor pricing function unless the market is _extremely_ liquid.

</comment></comment><comment><USER11> The problem with this isn't that the bidder wanted to do something noble, it's that it set a precedent that the government is going to expect on future bids moving forward. "Buying a contract" is nothing new - companies do it all the time (i.e. deliberately dramatically underbidding just to get the past performance). However, reverse auctions are a lose-lose for the government and commercial sector. This approach assumes that the only thing that separates vendors is price alone, which is incorrect. For commodities, perhaps it works, but for IT you get what you pay for. Just ask the other numerous agencies backing away from the reverse auction model due to disastrous lowest-bidder contractor performance.

I do, however, wholeheartedly embrace the pilot-model approach to IT procurement (i.e. MVP for government). It will help avoid those failure-prone $100M+ acquisitions that are doomed from the start, thus saving taxpayer money and allowing innovators to shine in practice, not through proposals.

<comment><USER12> "For commodities, perhaps it works, but for IT you get what you pay for"

Well, you don't, sometimes you just pay for overhead you don't need.

My wife works at a small 15 person non-profit - I was shocked when I heard how much they pay for IT support from a small support organization.

She asked what other choice they had, because they don't have anyone on-staff that can do it, and their old hardware needed a lot of support.

So I put together a proposal - for less than they were paying for a year of support services, they could replace all of their hardware with new hardware (including desktops, network and printer), plus move from hosted Exchange to Gmail (for another big cost savings).

I spent a weekend setting up the hardware, including automatic backups to a local fileserver plus crashplan for remote cloud backups (they had no backups at all before, just a bunch of flash drives with various bits of information).

They saved money after the first year, plus they had all new and reliable hardware. They bought a block of 40 hours of support from their IT support organization and haven't even used half of that over 2 years.

<comment><USER13> I have to agree, with digital technology, "you get what you pay for" breaks down completely. Sometimes the very best choice for one component is cost free, or very low cost, because reproducing that component 100% perfectly is pretty much free.

The big problem is identifying what is a good choice. If you don't know, you can't easily contract out the choice either, how do you know the contractor can or will make a good choice for you?

So the best outcome for non-technical organizations is to get lucky and know someone personally who knows what they're doing and has no ulterior motive - someone just like you. They don't really know if they know such a person. But if they get lucky and pick just the right helpful competent person to make IT decisions for them, modern technology can give them quite a lot for very little.

It's a perplexing situation.

</comment></comment></comment><comment><USER14> 18F/USDS peeps... would you consider bounty or reward style programs that reward all open source contributors? Eg instead of bidding for a contract, keep an open list of tasks/bugs/full projects and reward contributors whose PR's are merged in some way?

Yes, I know this monetizes what used to be free in a way and maybe goes against the "spirit" of open source, but practically speaking it feels like it'd be a huge win win for the open source community and small to medium sized government projects in general.

<comment><USER15> @bicknergseng -

18Fer here. The main issue here is how the Gov actually gets $ to that entity. There are lots of laws and rules that we need to obey about who we pay $ to - Gov doesn't have a ton of flexibility here. There was a reason why bidders had to be pre-registered.

That said, many of us want to continue to expand our engagement with the community. When it comes to bounty/reward style programs, the one I'm personally focused on figuring out first is a bug bounty program. Once we've figured out solutions for a bounty type program, you'll absolutely hear from us.

edited: small typo

<comment><USER16> I'm sure you've thought of this, but is it impossible to subcontract this out to a non-profit to increase flexibility in the details of how the work is done? I.e. same requirements, same constraints, but the non-profit is formally registered with GSA and handles payments to subcontractors rather than the sub getting it straight from the government?

<comment><USER17> 18Fer here. Is this in regards to a bounty program or putting out specific microtasks?

<comment><USER16> The bounty program as a whole. Like when I worked at NREL they were government funded but on paper I think it looked like a subcontract to run the lab which was fully managed by another entity. NREL I'm sure can hire contractors, although I suppose they might have to be in GSA as well?

</comment></comment></comment></comment></comment><comment><USER18> > __It didn't seem controversial to me. Writing some code to help out the > government and the general public—what a unique opportunity! __

Y 'know, if the author explained it along the lines of "I wanted to have a record of government work as a foot in the door", I think it would be an easier pill to swallow for the folks bidding at reasonable prices.

However, the tone here is a little patronising if another bidder was just trying to get enough to cover the rent.

But at the end of the day, it's the way that system was set up. Hopefully 18F sees this as an opportunity to improve the auction system (secret minimum and other suggestions in the other thread), rather than a way to get cheap labour.

<comment><USER19> Why would anybody be against competent coders wanting to donate time to public use? I get that other people were hoping to be paid for this, but would you end all volunteer programs on account of them interfering with paid labor?

<comment><USER20> No one is. If you want to donate your time there are a million non profits that will gladfully take the donation.

There is no reason this process has to devalue everyone else's work on a paid job.

<comment><USER21> Then get another job. We don't owe you your line of work.

If you literally can't compete with volunteers maybe you should see what they says about your niche and then find a new one.

Once when replacing a server (and fixing the wiring, etc, etc) I also replaced a router and dual-homed the company's site as a freebie because it made my job easier (the new router had diagnostics, managed-switch features, etc). It was a line-item I could have billed for separately, or it was a new level of service.

By the "save the work for the guy feeding the starving children" philosophy we should nickel-and-dime our clients instead of providing our true value. I don't like that.

<comment><USER21> btw, I'm a supporter of unlimited (ie, not limited - I would try to encourage you to not need it though) welfare to let society say "tough" things such as "Oh well, I guess we don't need many buggy whips."

And as to why I didn't charge anyways - the change actually made my other work faster.

</comment></comment></comment></comment></comment><comment><USER22> Working for free is a luxury for the people not struggling to ends meet.

"Oh, I already got paid elsewhere, but let me work for free and outbid others who are doing this as their primary job" is the unstated context and it feels a tad bit smug and elitist.

Personally, I think that the goal should be to get paid while you work on open source. But, I know that its not an option for everyone.

>I use open source technologies on a daily basis, and this seemed like a great opportunity to give back a little.

If you want to contribute to open source, then please feel free to join an open source project.

<comment><USER10> > and it feels a tad bit smug and elitist

Saying that about someone who wants to help out so essentially volunteers their time to help a government project, which in essence means it helps everyone, seems a bit entitled and ill-informed.

I'm sure many people want to get paid to work on open source, but it's a free market, and people will bid what they think a project is worth, and worth isn't always about monetary compensation.

Complaining about this is essentially the same as complaining about soup- kitchen volunteers. Surely there are plenty of people that would love to be paid for that job, but we have all these smug elitist volunteers doing the jobs for free.

> If you want to contribute to open source, then please feel free to join an > open source project.

The people that start/work on a specific open source project have the right to _ask_ for compensation in whatever way they like, or _enforce_ it through their license. You have no right to speak for all open source projects.

<comment><USER23> Any form of volunteering replaces some amount of paid work. The pros and cons need to be evaluated on a case by case basis.

If volunteers do just enough free programming to drive professionals out of the market, it's possible the result will be that less work gets done. I don't think soup kitchens have the same risk.

<comment><USER24> > The pros and cons need to be evaluated on a case by case basis.

Utilitarianism? Watch it quickly spiral into a shit show.

These same concerns and arguments are nothing new. People have been bemoaning the evils of open-source and it's socialist ways as unethical and selfish for years. And look how the software market still flourished. In many cases, directly off the backs of unpaid developers.

There's a good chance we're beyond a tipping point of ever again having enough work for the masses anyway. Look how many able-bodied folks the Feds hide under disability to keep the unemployment numbers low. And computing jobs will continue to vanish as software advances. You gonna tell a software company they can't launch their accounting AI because of CPA job losses? You going to stop IBM from improving Watson because it might cost us some Javascriptkiddie jobs (don't need as many web pages if Watson can do my work just by talking to it, or just having a brain-wave interface)?

Humanity will shrug and do what they did when cars replaced horse and buggy: Carry on.

<comment><USER25> So I think most people completely miss this when they see it, but I love it when people call "socialist" things selfish. It's the very definition of irony that something done "for the benefit of others" is deemed to be done solely for the person's ego. Personally, I don't see open source as inherently socialist anyways, but that's another topic entirely.

</comment></comment></comment></comment></comment><comment><USER26> This happens all the time with public procurements in Sweden. It's not uncommon to see negative bids as well. After you've got the contract you can bill them for service hours etc so it's a win anyway.

<comment><USER8> Do you think bids would come in negatively for Firm Fixed-Price work. In this case (micro-purchase), you are not allowed to bill again for the same service so the $1 is pretty much where you stop, unless further contract work is pursued which can take months. Genuinely curious.

<comment><USER26> Sure, that could be a solution. The problem I see is that any future work is more or less guaranteed to go to the winning company (because of system lock- in, knowledge etc). So if you're a big company who can afford the upfront loss you can still cash in in the future. Having the government as a permanent customer is more or less the dream. I'm no expert though.

</comment></comment></comment><comment><USER27> On a side note, there are a lot of hoops to actually work with 18F. I don't blame the guy for just wanting to do a project and move on with his life.

<comment><USER28> Brendan would have had to jump through the hoops to work with 18F, including the SAM validation. Unless you are talking about working directly for 18F as a federal employee, which would have different levels of requirements.

</comment></comment><comment><USER29> Lower project bids reduce the level of commitment on the part of both the client and contractor. With only $1 at risk, the amount of leverage the client can exert over the work product is minimal.

Volunteering is not the same relationship as contracting, and carries different kinds of project risk for the client.

Judging bids using price as the sole basis is easy, and poor procurement.

</comment><comment><USER30> I think 18F should definitely allow negative bids as well.

</comment><comment><USER31> If this were a legal project, and a lawyer bid to do it pro bono, nobody would bat an eye. Why are we getting all riled up about it?

</comment><comment><USER32> Given the tendency of HN toward libertarian and free market approaches, I've been consistently surprised at the suggestions being made around this. This is free markets gone right: A buyer and seller finding the most efficient price for each.

<comment><USER33> The seller wasn't going for the profit motive however. The seller simply wanted to work on the project as a volunteer. This is how he facilitated that. There is no profit motive here, and so really it's not even a business transaction, it's a volunteering oppurtunity.

<comment><USER34> It's still 100% free market.

<comment><USER35> There's a lot of crappy things that are 100% free market. Oligopolies come to mind. Just because it's a free market solution doesn't mitigate the negative experiences this person created for the other bidders.

<comment><USER33> Well the problem is self correcting. People will stop giving quality bids if they don't think that there is any profit to be made because a bunch of volunteers have destroyed the market. There is no problem here. Only that anyone bidding should be aware that they won't get properly compensated for their work and time.

<comment><USER36> How is the market being destroyed correcting the problem? If people can't be compensated and work doesn't get done, the market is a failure.

<comment><USER35> The market isn't destroyed, it's just driven to zero. You can't force market participants to behave in the fashion you want. The market being driven to zero is one solution for the market, it optimizes for the people selling services and the people buying them, it just doesn't optimize for the profitability of those trying to make money off of selling their services.</comment></comment></comment></comment></comment></comment></comment>


The iPhone is the crack cocaine of technology. Don't celebrate its birthday - <AUTHOR> https://www.theguardian.com/commentisfree/2017/jun/29/apple-iphone-ten-years-old-crippling-addiction <comment><USER2> The Blackberry had this title first I think.</comment>


Show HN: A backbone.js app generated in two clicks - <AUTHOR> http://phreeze.com/cargo/

<comment><USER2> Is the source code for the app available?

<comment><AUTHOR> yes you can grab it at <http://phreeze.com></comment></comment>


How We Teach Programming, and Where We're Going Wrong - <AUTHOR> http://www.cachestocaches.com/2016/2/how-we-teach-programming/ <comment><USER3> One of the big gaps in programming education is the relative lack of material on how to find, comprehend, and use code written by others. Most "Learn language X" references assume the programmer is starting from scratch. Yet as I explore programming farther I'm increasingly understanding the value of learning about applications, libraries, and frameworks written by others. To use human language education as an analogy, syntax, reserve words, and grammar are the equivalent of grade school topics in programming. We need more high school style tutorials that survey, critique, and teach the style of code written by top programmers.

<comment><USER4> I would argue we need more analysis tools for testing. Top programmers arguably just work the hardest, test the most and often focus on speed over readability. Being able to test something is much better imo

\- grade school - list manipulation, loops, strings and if statements

\- middle school - servers and clients, oop, types and validation

\- high school - parsing, streams, byte code and efficiency

</comment></comment><comment><USER5> Games from people like World of Goo are exciting. I wasn't sure how I'd even imagine a game that could teach skills with good mapping to programming. They're doing a good job. Prior to that, the best results we were getting were projects like the brilliant MIT Scratch that turned it into collaborative, creative, lego building (below). Should still invest in stuff like that, too, which is more direct but fun.

[https://scratch.mit.edu/](https://scratch.mit.edu/)

On other hand, that programming is a fundamental skill is an assertion that's being repeated by many without evidence. It's a useful skill that will become more useful as we go along. Yet, something like 80-90% of America, including top 1%, know nothing about programming despite their job success or quality of life. There's no direct tie in. Meanwhile, they use reading/writing and mathematics on a regular basis. So, I think people should stop making this claim as most people will mentally tune out upon seeing something like that.

This brings to a bigger point where software isn't engineered despite prior work showing how to do it. That started with Margaret Hamilton and Dijkstra in the 1960's where both of them used modularity, layering, and interface checks to build flawless systems. By the 1980's, Hansen had safe concurrency (Concurrent Pascal), Mill's Cleanroom let teams hit almost no defects first try, LISP machines let you live-edit, incrementally-develop running systems w/ no compile phase, Schell had a NSA-resistant kernel (GEMSOS) that ran other things as processes/containers on virtual CPU's (sound familiar?), and Wirth's simplicity + safe language approaches let ETH run on their students' OS's. Each of these approaches led, with small teams, to systems that reached high levels of security, reliability, extensibility, and (for Lisp machines) productivity.

Yet, the techniques that built them are largely not used by mainstream. The negative results are predictable. So, we have two problems: (a) getting nonprogrammers into programming so they can solve problems with _some_ approach and toolset; (b) getting programmers into _engineering_ so they can build robust, maintainable systems using lessons learned from the past. Like other engineering fields do. So far, we're doing better at (a). Some good news at least.

<comment><USER6> At the risk of stating the obvious, (b) doesn't progress because it's more expensive and often unnecessary. In the cases where it would be useful, when TCO incorporating whole lifecycle costs such as maintenance and/or rebuilds are considered, (b) is still often a failure because it requires higher lead time and up front investment. That's not to say there's no space for very carefully built systems, just that they're a niche and likely always will be, particularly as hardware is now basically free and improved tooling (eg. popularization of CI) helps to reduce the difference between one-off hacks and "robust, maintainable" systems built with knowledge of prior work and theory.

<comment><USER5> Regarding expensive, empirical tests found the medium assurance methods to cost either the same or cheaper due to huge reductions in debugging or maintenance issues. This was the case for Fagan Inspections, Cleanroom especially, TSP, and iterative methods with safer languages.

Far as high assurance, the level of assurance is usually applied to a high level design or some small, critical component. The cost reported for LOCK was about 30% extra on top of a solid lifecycle. Same percentage for security costs of one Special Access Program. A small team did an EAL7 IPsec VPN in relatively short time. I'd love to know cost overhead of Praxis Correct by Construction. seL4 cost a few million for highest extreme.

So, applied correctly, even high assurance methods result in a reasonable premium for certain industries. Niche as you said. Time to market is another story with high assurance killing that. Yet, medium assurance is nearly as fast and around same price as solid lifecycle while paying dividends later.

So, the cost and lead time objections are a misconception if we're aiming for medium level which is merely high quality. It benefits long-term better than alternatives. Only exception is bottom-dollar deals and one offs where it barely working is acceptable.

<comment><USER6> The study likely assumed that people already familiar with working in these methodologies were equally available, equally happy to do so, and equally priced as regular developers, which is unlikely to be case. A certain minimum team size is probably required to make many of these processes viable; many real world systems are written by solo coders. Also, in reality it is relatively trivial to scavenge work like seL4, Linux kernel security toolkits, software HA clustering and/or proxy implementations, hardware watchdogs, ssss and/or distribute infrastructure across disparate locations to provide what probably amounts to magnitude higher redundancy and resilience against real world attacks or component failures without paying those costs. Indeed, the implementation of such is becoming near free many cases due to convergence on SoA/microservices.

To put this more plainly, "I can get another if I break it, so a clay cup trumps a grail." \- Mirza Asadullah Khan Ghalib, classical Urdu and Persian poet from the Mughal Empire ... quote #1 in my fortune db @ [https://github.com/globalcitizen/taoup](https://github.com/globalcitizen/taoup)

<comment><USER5> "The study likely assumed that people already familiar with working in these methodologies were equally available, equally happy to do so, and equally priced as regular developers, which is unlikely to be case."

For things like Cleanroom and PSP/TSP, they were first-time users of the process. Not long-time. Just decent developers shown a better way of getting results. In high assurance, it varied from first-time to experienced users. First time users usually gained the benefits of the method but with difficulty. There'd be at least one specialist aiding the team. Best results came from people who had done it a while. So, for high that's partially true and for stuff I push on commercial sector it's the opposite.

"A certain minimum team size is probably required to make many of these processes viable; many real world systems are written by solo coders. "

That's a legit critique. They can still benefit as I experienced myself and some others. It requires one to divide the work into periods where you wear various hats. It takes discipline to externalize one's own work and attack it objectively. Good news is that inspection, testing, static analysis, model- checking, design-by-contract... these all catch problems that are objective more than subjective. Still get plenty of results. There's been one or two threads on here where even solo people do QA on their own stuff with good results.

Still open-ended problem worth some experiments to see how much can be done at what effectiveness for a solo coder juggling work. So, good point.

"in reality it is relatively trivial to scavenge "

It's so trivial we had today yet another HN thread about distributed locks showing how people were copying one implementation and screwing it up. Then there was disagreement in the comments. There's threads like that on various critical things at least once a day or so on HN. Shows it's trivial to do and hard to do right for many things. Better to make re-usable, strong solutions to the various problems we keep encountering where possible. Can always mix high, medium, and average assurance components as a compromise where we have X goals but only Y resources. Pieces can improve over time.

"Indeed, the implementation of such is becoming near free many cases due to convergence on SoA/microservices."

I've yet to see one go 5 years under heavy load without downtime much less the 17 years VMS clusters did or 30+ years for some IBM mainframe installations. For security, things are more abysmal. I'll agree many solutions are popping up that can do amazing things. Robust, scalable, fairly secure, and near-zero- downtime systems don't seem to be among them in this nearly-free, mainstream market you're talking about. A rarity in the market in general.

So, there's still room for both medium and high assurance software. To be clear, I'm only pushing medium because even first-timers did a better job than most do today by eliminating the problem areas & doing great detection. Similar cost, too. Only _hoping_ for high-assurance to be selectively applied to high-impact stuff that doesn't change often. A recent example was a formal verification of SCOOP: Eiffel's race-free, easy-to-analyze, concurrency model. It found issues in the model that were fixed. Three other analysis, ranging from specific to general, eliminated deadlocks, livelocks, and performance-hit respectively. That's the kind of situation where a significant investment of resources can keep providing benefits with almost no effort. Otherwise, medium assurance aka commercial + sane extras.

""I can get another if I break it, so a clay cup trumps a grail.""

Nice quote and good principle in much of current economy. Not so much my personal data or business I.P. when a byzantine failure takes out it and my hot standby. I think the comparison mainly applies to non-critical services and hardware. ;)

<comment><USER6> Interesting discussion, I'd be keen to try such a formalistic approach if you ever have a need for a remote critical eye.

Regarding the quote, I don't think you quite took the spirit of it: the idea is that, given a replaceable component with failure expected, we can manage reasonably to achieve the same outcomes for less overall cost - ie. do not build the one true system to solve all availability and security challenges (which would be very expensive (the old "pick two" adage)), but rather build a system which makes use of the properties of components intelligently to reduce overall hassle (as measured in thought, hassle, time, cost, third party dependencies, untested code or processes) to achieve the same objectives, just as reliably/securely.

I think the main reason there are less modern systems running for 15+ year timeframes is that the centralized models of yore only remain valid within traditional large organizations that are slow moving: finance, government infrastructure, military, etc. Even there, they are being dismantled, as COTS hardware + FOSS topple traditional mainframe vendors through cheap and highly scalable clustering. The paradigm has shifted: today we have components like the Linux kernel and sqlite which despite not generally running a single instance for >15 years (though they are definitely capable, and with Linux it has been done; sqlite is not old enough yet!) they do run in harsh environments with limited resources in hundreds of millions - nay - <USER2> of instances, extremely reliably.

<comment><USER5> "Interesting discussion, I'd be keen to try such a formalistic approach if you ever have a need for a remote critical eye."

I'll try to keep it in mind. There's a few people doing stuff in public if you want to play with it. Plus lists to stuff to try. Here's a few.

One person did an overview of Cleanroom and examples in Python, etc here:

[http://infohost.nmt.edu/~shipman/soft/clean/](http://infohost.nmt.edu/~shipman/soft/clean/)

I just pulled a list of techniques that were empirically proven to increase robustness into a Pastebin:

[http://pastebin.com/xZ6m4T8Z](http://pastebin.com/xZ6m4T8Z)

Note: One can pick and choose among these to find right work/benefit ratio. I'd like to see lots of experiments on mainstream software to get data on what's 80/20 rule. I'm betting on sane subsets of safe languages, code reviews, usage-driven testing, interface checks (even asserts), and fuzz testing maybe. The first four are widely available and take little work.

Case study of Altran's Correct-by-Construction approach showing great metrics:

[https://www.commoncriteriaportal.org/iccc/7iccc/t1/t1201100....](https://www.commoncriteriaportal.org/iccc/7iccc/t1/t1201100.pdf)

Note: Altran does plenty of medium and high assurance work. Their method can do either. I'd rate Tokeener as Medium-High if just focusing on their part of it. Note that they got it done with 3 part-timers in less than a year with code-level proofs. Quite a leap from millions spent on teams of geniuses doing proofs in Gypsy, etc two years at a time back in the day. :)

"Regarding the quote, I don't think you quite took the spirit of it: the idea is that, given a replaceable component with failure expected, we can manage reasonably to achieve the same outcomes for less overall cost "

I'm not questioning the spirit so much as the implementation.

" do not build the one true system to solve all availability and security challenges (which would be very expensive (the old "pick two" adage)), but rather build a system which makes use of the properties of components intelligently to reduce overall hassle"

That's what I advocated. With medium assurance, it cost almost nothing extra so apply it to the components. With high assurance, if used at all, it can be used on just the most important and is by some niche players with good cost/benefit results. It's just that...

"to achieve the same objectives, just as reliably/securely."

...this has rarely proven to work. There's an old rule that you can't make high robustness systems by composing low-robustness components. They experience both individual and byzantine failures. That's why we see the companies building on them experiencing downtime that shouldn't happen on top of unavoidable downtime which I don't judge. So, certainly break the problem into smaller ones and compose simple (or cheap) solutions where possible. You just have a baseline of quality you need for the components. Commonly expressed as "weakest link" or "Garbage In, Garbage Out."

"I think the main reason there are less modern systems running for 15+ year timeframes is that the centralized models of yore only remain valid within traditional large organizations that are slow moving: finance, government infrastructure, military, etc."

Someone else speculated the same thing. There's some truth to it. Yet, there's overlap between the kinds of services running on them and in the modern, downtime-prone infrastructures. The stuff works on robust systems of old times but fails on new ones. What's the key difference? One was designed to be robust and one is a composition of pieces of known to unknown quality. Garbage in, garbage out.

"as COTS hardware + FOSS topple traditional mainframe vendors through cheap and highly scalable clustering."

They're definitely cheaper and faster. That's been the case since Beowulf clusters I built back in the day. Yet, their uptimes still haven't reached what OpenVMS hit in the 80's with bullet-proof clustering. Are you truly saying hardware and admin labor is so free right now that we can just throw dozens to hundreds of servers in 3-5 locations at every businesses' problems while ignoring the architectural, interface or code quality of any of it? I'll take QNX 2 here and 2 there over a bunch of Linux boxes any day so long as budget will allow the license. I'll have predictability, performance, self- healing, damage containment, and live updates all in a few megs of well- written code w/ POSIX apps.

See the difference between that and mainstream systems? Good architecture still matters. System/38 (AS/400), OpenVMS, NonStop, QNX, BeOS... all great architecture that squeezed way more out of any given piece of hardware, software, or admin effort. OpenVMS was also an example of medium assurance that was point of our discussion. Their Red/Blue iterations did 1 week development & test writing then 1 straight week of review and fixes with regression tests over weekends. Results were boxes so reliable admins sometimes forgot how to reboot it and such. Still not common on Windows and Linux boxes despite the great strides in reliability that nearly a _billion dollars_ worth of labor bought those bad architectures. I like to poke at Linux folks that MINIX 3 eliminated most crashes in a few years with a small team while UNIX architecture took _decades_ to _mostly_ do the same thing. Architecture & assurance activities matter.

"though they are definitely capable, and with Linux it has been done"

I'd like to see evidence of that. The mainframes, AS/400's, VMS, NonStop's... these run all sorts of workloads without software repairs for years. Heavy workloads. I've investigated numerous claims of individual Linux boxes doing the same. It was almost always someone's barely-utilized, hobbyist web server, DHCP server, etc. I want to see the equivalent of a mainframe or VMS server running everything in a business 24/7 without a crash in years. Optionally that system getting lost due to never needing maintenance with people scouring the building looking for it. That was a recurring problem with pizza box servers and embedded cards running aforementioned OS's. ;)

"they do run in harsh environments with limited resources in hundreds of millions - nay - billions of instances, extremely reliably."

Again, a source for this. They certainly run regular workloads they're optimized for quite reliably. The cloud vendors optimizing on specific HW configurations with all kinds of disaster tolerance appear to run them reliably by hiding the failures. Yet, surveys of industry on their servers' downtime contradicts the overall claim with all kinds of downtime still in mainstream stuff. Plus, they show recent Windows servers ahead of Linux in reliability and AIX usually stayed on top. They don't include the stuff I mentioned due to maybe market share or perhaps the contrast would make the others look bad. ;)

Nonetheless, adopting medium assurance methods to build our components or using components built that way is a solution. It was proven... is used... in many commercial systems that have higher quality at acceptable price and performance. Outside one-offs, the only reason it's not happening is lack of knowledge or will to do it. Mainstream devs were told about the stuff for years so they just don't give a shit. Surprisingly, Microsoft is ahead in efforts as they implemented SDL, formal methods on drivers, integrity controls, app protections, safe language use, and so on. I would _love_ to see that level of commitment on BSD and Linux side given I use both. Least they sometimes accept fixes from academics who apply various tools in their spare time or with grant funding. ;)

<comment><USER6> The pastebin looked fine but an issue may be that some of the data/samples in supporting research are so old as to be difficult to apply to modern infrastructure, and the HR question still stands.

I will take a look at [http://infohost.nmt.edu/~shipman/soft/clean/](http://infohost.nmt.edu/~shipman/soft/clean/) tomorrow (evening here).

I agree with your assertions around reasonable use of prior work. I personally came to similar methods designing security-oriented systems (eg. at Kraken), eg. by strictly defining a protocol in a formalistic manner with a language suited for that purpose, then generating interfaces for client systems ... and even application-level enforcement proxies that can be inserted either during testing or (preferably) even automatically during live deployment. This amounts to automated application-level middleware, for SOA-type systems, direct from protocol spec.

Enforcement proxies ensure that broken implementation A and broken implementation B may only talk correct subset C of any given protocol, block and alarm on noncompliant communications, make otherwise restricted communication between nodes extremely difficult for attackers to use to horizontally expand any foothold established through security breaches. Assertions may be enforced in real time. Logging may occur there also. Very useful stuff. Not actually that hard to do, in practice. By contrast, the current norm of arbitrary HTTP POST with barely enforced JSON is a leaky bucket of slop.

Altran link 404s for me.

The internet's basis in decentralization roughly equates to FOSS clustering equates to torrents equates to the wisdom and utility of failable components, I do not think you can claim in good faith that embracing failure has "rarely proven to work".

Therefore, I'd like to know the source of your "old rule" that you can't make high robustness systems by composing low-robustness components, because in the face of just the above evidence it looks like bullshit. Get enough redundancy in a system and it will operate with high resilience, as long as the orchestration algorithms are well tested. Redundancy is virtually free today in hardware, software, network connectivity, legal jurisdiction and a host of other ways. Not to take advantage of this reality is to have one's head firmly in the sand. To take advantage brings benefits beyond merely security and availability, such as system mobility, peer service provider independence, legal jurisdiction independence, cheaper sourcing, easier scaling, etc.

Some of the rest of your post seems to me to be comparing apples and oranges, bygone eras to the present, monolithic transaction-oriented mainframes to general purpose complex COTS disposables, so I don't feel it warranted to discuss further.

With regards to Linux uptimes, you never specified workload, and that's hard to assure in hindsight, so you've created an impossible requirement to disprove your assertion. You do recognize however that many standard load Linux systems have run for 5+ or 10+ years with no problem, as I too know well as I've had some. Further, with changes in hardware (more work in RAM than ever, less unpredictable disk failure, higher quality cooling, more recognition of component lifetimes, ECC RAM, etc.) I expect that net COTS system longevity is increasing rather than decreasing, and Linux will not crash before the hardware in all but very unlucky cases... particularly with easily scripted, reasonable load testing.

My quote about sqlite and Linux running in harsh environments with limited resources in hundreds of millions - nay - billions of instances, extremely reliably, was primarily referring to mobile devices. Power challenges, many power cycles, physical bashing, temperature variations, heavily intermittent connectivity, dynamic clock speed migrations, moisture, etc. Furthermore, they are far more complex in terms of software stack than 1980s/early 1990s transaction processing oriented mainframes.

<comment><USER5> " may be that some of the data/samples in supporting research are so old as to be difficult to apply to modern infrastructure"

They still apply based on similar stuff published since then. Several are best practices for robust systems even today. The HR question should've been addressed by fact that medium assurance techniques take either little or no training: mostly just effort and accountability.

"This amounts to automated application-level middleware, for SOA-type systems, direct from protocol spec."

Great work. An example of the higher end of what I'm talking about. I did something similar and kept checks on in production. This lets me laugh about these obvious vulnerabilities like protocol downgrades while others scurry around trying to patch them. Common problem that tools can help us do better so we use tools to do it better. I'd like to see more think that way.

I cleared history and tried Altran link again. It works on my end. Try this one again:

[https://www.commoncriteriaportal.org/iccc/7iccc/t1/t1201100....](https://www.commoncriteriaportal.org/iccc/7iccc/t1/t1201100.pdf)

Note: I'd really rather give you one that shows the use of the method like on the CA they built. Yet, the Altran transistion and effect of time means links are disappearing off the net slowly. Happened to old language studies, too, that weren't put into IEEE or ACM.

"The internet's basis in decentralization roughly equates to FOSS clustering "

Not quite. When a site goes down, it goes down. I have to manually look for mirrors, archive.org, etc. One can use load balancers, CDN's, etc to cluster such things. That's not default, though.

" equates to torrents"

The default at the time was FTP or HTTP. This led to problems. Following my recommend, a person sat down to think of how they'd meet their goals differently. A combo of good architecture and coding led to BitTorrent.

"I do not think you can claim in good faith that embracing failure has "rarely proven to work"."

My overall claim is that you benefit by taking extra time to apply lessons learned to architecture, design, and coding to increase effectiveness (esp quality). The two cases you cited support _my point_ that this creates benefits rather than your original case of cheap labor throwing together whatever they can download. Most people who are stitching together components with good long-term results are using components or cookbooks made with my approach. So one may even precede the other.

Far as embracing failure, high assurance has been on that for a while. Hell, the concept even presupposes failures across the lifecycle. Most such systems are designed as interacting FSM's that incorporate failure states with a fail fast and fail safe approach. Later on, it was taken further with "recovery- oriented computing" funded by DARPA, etc. Google that phrase with words "survey" and/or "security" for some interesting architectures.

"I'd like to know the source of your "old rule" that you can't make high robustness systems by composing low-robustness component"

It came Bell of Bell-Lapadula model. Probably another person, too, though can't recall name. The DOD funded high assurance safety & security research leading up to Orange Book A1 systems over a period of three decades. Some systems were built to right principles from the start. Some tried to retrofit things like UNIX for both availability and security. All the security plus some availability retrofits failed with pentesters finding more and more obscure failures or vulnerabilities. These often resulted from interactions of overly complex, stitched-together components. That's because combining two complex programs essentially makes a third, complex program. Being unable to prove reliability or security of input components makes it difficult to say anything about output.

Note that this is true for security more than availability. HA solutions show that, depending on failure type, one can get at least three 9's out of crap systems. The HA had to be well-designed and coded. Fault-tolerance took solutions like NonStop or Stratus straight designed for them. So, both took my model to varying degrees either at middleware or whole-system level for availability. Many of these still failed at upper layers of stack, _occasionally_ lower ones, due to Byzantine failures due to how data moves throughout the cluster & corrupts stuff. Led to Byzantine-tolerant schemes, recovery-oriented architectures, and MILS architecture for secure composition of stuff like Linux. These efforts had mixed success with the problem hard enough that DARPA & NSF are _still_ funding smart people trying to find & prove anything about a solution up-front.

So, I think my claim is well-grounded in evidence. Availability often applies on common cases that really smart people... carefully designing and coding as I advocate... optimized the hell out of. Same at various layers of the stack. These things work well enough that average users will get results unless they stress them unexpectedly. Others are solving root problems where they can with better systems and software. Think RDBMS clusters vs Hadoop stuff vs Google's F1 RDMBS. The best method is composing a combo of what exists... in common, battle-hardened configuration/usage... with higher-quality stuff while incrementally replacing what you can as better stuff appears. This was high- assurance strategy called "incremental MLS" designed to address high costs and slow time-to-market of full, custom MLS. Worked wonders applied to web servers, databases, etc.

" You do recognize however that many standard load Linux systems have run for 5+ or 10+ years with no problem, as I too know well as I've had some. "

Most I've seen didn't. Yours did. Just collecting data to support or refute their claim. It's certainly possible. The question is how probable. It's close to 100% for some solutions in real-world loads. Those are pricey for sure but they work by design that can be emulated. I'd like to know where Linux's design & code puts it.

"comparing apples and oranges, bygone eras to the present, monolithic transaction-oriented mainframes to general purpose complex COTS disposables"

The _2016_ mainframes, NonStop clusters, IBM i's, etc run similar workloads with high availability and throughput on mainframes due to Channel I/O. The modern COTS "disposables" in cloud sector are even setup to emulate mainframes with many CPU's, virtualization, metered CPU/memory use, some I/O offloading, management software, etc. It's getting more apples to apples all the time. Their reliability just still isn't there with whole datacenters going offline here and there. The management tech, on other hand, has caught up in the lights out datacenters maybe even exceeded prior work.

You want to talk disposables, though. So, let's compare good architecture on a budget vs common architecture. In embedded sector, there's uptake of Java subsets to run safety-critical applications. Common deployments are microcontrollers or PowerPC boards with weak CPU's running a watered down JVM. The JOP people and Sandia's SSP team each just built a JVM on silicon w/out any abstraction issues that would hurt them. Everything down to OS code is Java bytecode. Results were low cost, low watts, acceptable performance, and high safety. The Azul Systems Vega processors did something similar for premium, enterprise market with hardware-assisted pauseless GC and tons of cores doing native Java. A fraction of that could be implemented inexpensively with standard cell model and sold as plug-in cards to disposable market.

[https://www.azul.com/products/vega/](https://www.azul.com/products/vega/)

There's doing what's typical but keeps causing problems vs doing something different that addresses needs & root problems from ground up. Not always an option but is more than people would admit.

"I expect that net COTS system longevity is increasing rather than decreasing"

That's debatable. You cited good evidence to back it up. The counter evidence is that the ridiculous levels of complexity in modern hardware and problems on deep-submicron nodes mean things fail in little ways more often. Overall, your claim holds as hardware is very reliable given complexity level and they've forced the failures into a few, predictable spots. We occasionally get surprises like RAM fault paper. Yet, clustering covers basic stuff pretty well.

"My quote about sqlite and Linux running in harsh environments with limited resources in hundreds of millions - nay - billions of instances, extremely reliably, was primarily referring to mobile devices."

You should've said that. Yes, embedded stuff is easier to do that with. Lots of embedded devices run for years. Especially with clock gating etc where most of the chip stays off most of the time only coming online to do its work. Quite effective in mitigating transient errors. Let's see. My Galaxy freezes up on cameria here and there. Just failed to recognize SIM card yesterday requiring battery reset. Otherwise, very reliable as you say given complexity of stack.

Yet again, as it's almost a trend in this discussion, were SQlite and Linux done in the cheap/free people stich together whatever exists method you espoused or clean-slate solution that carefully designed or reviewed changes as I push? I'm cheating as I know Linux kernel process is pickier & lower defect than average. I also know SQLite has a strong review process designed to keep complexity to a minimum and quality up. Two more examples leveraging my recommendations. :P

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> I used to be more involved in the educational space–I used to teach college- level classes and also participate/organize/mentor coding spaces for young adults–and I don't think there is anything inherently wrong with the way that we teach programming.

I have come to believe, after years of teaching, that you cannot _teach_ curiosity, but you can help create environments that foster a students desire to learn and explore. As such, the point of education is to expose and empower children (people, really) to have the tools they need to explore and discover the things that they _want_ to understand and master. You really can't _make_ someone enjoy "x", where "x" is the passion of the teacher.

Programming, to me, is like writing, painting, or mathematics. In so much that it is a multi-faceted discipline. Coding is to writing as typing is to penmanship. There are _many_ reasons to write; from jotting down a grocery list to writing an epic novel, just as there are many reasons to code; from bulk automation/text transformation to diving into deep artificial intelligence. Just as there are many reasons to paint, and many reasons to do math. The "how" is dependent on the "why".

Most people don't learn to mix oil paint simply for the joys of mixing oil paints, most people don't learn penmanship simply because they long to see a well formed letterform. Few people learn the how to take the functional derivative, simply because. It's a means to an end; they learn to do it because they need to express something _else_.

I don't expect every child in my english classes to go on to write a great non-fiction masterpiece or an epic novel. In fact, most of them wont, but I _do_ think its important that they are exposed to the fundamental skills involved; penmanship, vocabulary, basic composition, in the event they _do_ want to write, or code, or compute, or paint, or whatever...

I think "school" is exposure to the mechanics, and individuals who desire more will seek out the rest.

<comment><USER8> As a counter-point: my favorite classes were always the ones in which the teacher instilled their love of the subject into their teaching.

Show me what can be accomplished--show me the best of what can be done--and let my imagination run with that.

The mechanics are generally simple and can be learned online or through routine practice. It's the passion, the love, of the subject that teachers can uniquely give their students, whether that's history or painting or programming. Show us the joy behind it, and we'll seek out the rest.

I know that mechanics and passion aren't mutually exclusive, but the question ultimately comes down to what teachers should prioritize. What's their goal? Is it to teach how to add, multiply, and divide, or is it really to inspire a lifelong love of mathematics in their students' lives?

<comment><USER7> And I agree with most what you are saying; I think the worst teachers are, at best, not passionate about what they are teaching all the way to, at worst, have no understanding of what they are teaching and are just "teaching" from a book. Neither one of those really conducive for for what I would consider a prerequisite for real learning: An environment of exploration and curiosity.

But, I do disagree about teachers "giving passion"; I don't think thats possible. I think its possible for a good teacher, at the right time, to ignite a students curiosity in a subject. But that spark _has_ to come from the student, not the teacher. I don't care how passionate you are as a teacher, if the student doesn't give a shit, it's not happening. It's the teacher's job to fan it into flames of mastery, not create the initial sparks of interest. Although, it seems that most of the time these days, it's the teachers job to quell the sparks of interest from students and get them "back on topic".

But even still, as a teacher, I think you have to accept that making that impact is not going to happen to 100% of the students in the class, probably not even 25%. And it's questionable if the teacher really had all that much to do with it; would the student have sought out information on their own outside of the context of the classroom? Hopefully... Would they have found their own set of teachers, mentors, resources to express the thing burning a hole in their head? Again, hopefully. Would it have taken them longer to do those things? Sure.

I think, as a teacher, the hardest thing to do is not to take too much credit for the accomplishments of your students. You didn't do much, other than help orient them in the right direction, they did the hard part.

</comment></comment></comment><comment><USER9> I agree with the article's thesis: programming general-education needs to step away from abstracted problem sets. Instead, I think programming should first be presented as a tool - rather than a complicated science.

The comp-sci courses I had access to in high school / college were all depth- first, so the barrier of entry was overwhelming. The dense theory, to me, was so much less attractive than solving a problem with a BB plugin or broken Javascript in the real world. I believed I was going to be a script kiddy forever, because I enjoyed tinkering and tweaking more than traditional coursework.

It didn't click for me that I could be a "real" programmer until after I dropped out of college (was studying Latin/Classics, no science or math background). I started building my own games and game-helper apps, in Python, while working an IT helpdesk. Observing people interact and engage with things I built gave me the confidence to pursue a career in web development, using MOOCs (MITx series was excellet) and project-based tutorials to self-educate. I stepped up to tackle more real-world problems outside the scope of my helpdesk position, mostly day-to-day scripting and org automation.

So, educational strategies like Human Resource Machine really tick the right boxes for me. If I had played that game years ago, I think I would've gravitated towards comp-sci much earlier. I needed a strong reward system (coworker's gratitude) to propel me through advanced topics, and game- ification of edu is all about treadmilling through a reward track.

I hold the title of software engineer today, without ever having completed a formal comp-sci course outside of MOOCs. I don't think this narrative is uncommon, especially among women or first-generation programmers. I clearly demonstrated the skills necessary to be a successful developer: linguistics and programming share many common themes. But I was funneled towards a silly Latin program, because I and my academic advisers thought my non-existent math/science background precluded me from computer science.

Progamming has seeped into the vernacular of day-to-day problem solving, and I think this is the angle that intro courses should seize.

<comment><USER3> The [Head First Labs]([http://www.headfirstlabs.com/](http://www.headfirstlabs.com/)) series of books is a terrific example of teaching programming with relatable, real- world problem sets. I've found these books are good for a general overview of a topic that can later be supplemented by more advanced references.

<comment><USER10> The Head First series gets treated a bit like the For Dummies series of old however I think it is a bit unfair. I read Head First C a year ago and it is a fantastic introduction to C. I was really impressed to see an intro to C book (not intro to programming, you do need to already understand another language before reading the book) cover subjects such as threading and network programming. Most books on C don't go anywhere near that stuff which is a shame as it makes programming a lot more interesting IMHO.

</comment></comment></comment><comment><USER11> Like most here I always liked math and science. Nonetheless, growing up, I never felt like I was given a meaningful answer on "why do I need to learn math?" I think we can do better with programming.

The anecdote the OP gives, "learn coding so your really boring job [no offense to OP] will be less painful" is useful. Even better for high-school kids: "learn coding so you can Instagram all day at your job while your program works for you." I'm not condoning this, and obviously it's better to actually inspire true curiosity (extremely hard), but I think this kind of message would work for a lot of kids.

</comment><comment><USER12> So, don't just learn to code, learn to solve problems? Well, duh. There's at least two sides to this. CS comes down to code and it's a prerequisite to computational problem solving, most of the time. Problem solving OTOH is like language, it's expected to be learned by doing. Code is the simpler, formalized of the two topics.

I'd rather have not every step of development guided by institution, just in case the methods are maybe just a little bit flawed. Maybe, just in case. Arguably, learning problem solving is a problem to be solved, so it seems almost impossible to teach, anyway.

<comment><USER13> >> While I enjoy tackling these exercises (and have devoted my academic career to doing so), most people don't, further raising the barrier for learning to code.

My formal background is computer science, so somehow I can resonate with the author. My 1st programming language is C, though, not Scheme/Lisp. Damn I hate messing with pointers :D

So, what is the best (most feasible) way to teach non-CS folks to program, then?

<comment><USER14> Games, and game modding, seems to be the most accessible and most successful gateway drug to programming. Games that have decent mod support can offer a natural skill progression, without overwhelming all at once. Start by tweaking some data; move on to basic scripting. Eventually, you start to chafe against the limitations of the game's modding abilities, and want to start building your own thing.

This whole process is grounded in something real, and something that is more fun than crunching numbers or building a fake CRUD app.

I'm curious about the spate of games that directly incorporate programming. Maybe they have been more effective than I think, but for the most part, they just aren't really that fun, IMHO. They lean too hard towards the edu, and not enough toward the tainment... Particularly in comparison to, say, building a custom StarCraft map with triggers and conditions or a Quake level, that you can go play with your friends after.

<comment><USER15> I'll second games being a great gateway drug.

My first introduction to programming was game development. Around early 2007, Bungie ( the game studio that made Halo ) released a bunch of devcasts in which a handful of the developers would all sit around, shoot the shit, and talk about building the game. I naturally thought it was awesome and looked for tutorials on Youtube. Unfortunately I didn't stick with it due to the steep learning curve and decided software development was too hard ( If only I had a mentor/teacher at the time ).

A few years later though my friend and I wanted to bot the game Runescape to make some money. The most ban-proof way at the time was to use this program called Simba and you wrote scripts with a pasacal-like language. Everything was based on the pixel color of something and most of the bots were simple procedural programs. Due to the simple nature of the scripts, you could easily write something without a ton of prerequisite knowledge and see if it worked or not. The biggest problem with this method was color and object detection, how do you know if what you're clicking on is a tree or some grass? At the time, the hotshots in the community were mostly people enrolled in cs programs and building neat algorithms to detect stuff. The only way to compete with them was to learn the fundamentals of cs. so of course that's exactly what I did!

Gaming provides a fantastic playground for learning because it's fun and there are very clear rewards for learning more ( Learn matrix manipulation, get better object detection, make more gold ). I think teachers would do well by getting games into the classroom. They really do open the imagination when paired with programming.

</comment></comment></comment></comment><comment><USER16> hello world is outdated

i think this alone probably turns away the majority of would be computationally literate individuals

as i was being taught programming i was so ridiculously underwhelmed by a program writing out hello world

here i am on this machine that can play my favourite movie, entertain me with a beautiful interactive gaming experience, and connect me to the world's information and i am supposed to be wowed by 'hello world'

i only understood the power of hello world when i became interested in embedded systems

so much time setting up the ide and connections and circuits and somehow i managed to make this previously idle pile of organised metals print hello world

that was a a profound experience but this was years after i had become a competent programmer and had the understanding of physics to appreciate what was happening

if you want to teach programming then you have to show people that the process can help them do something they want to do

there used to be classes to solely teach typing without looking

everyone i knew hated it, it was a pain for everyone in the class, then instant messenger came out and suddenly everyone was a professional typist banging out 60wpm

if social media was only available to people through bash scripts i assure you everyone would be able to program in a few weeks

because that is what people want to use a computer for right now

but that would be regressive at this point

so i'd suggest the future of programming education should be folded into mathematics education

learning times tables? write a script to express that table

even better would be to pull problems from a web api, solve, and post

<comment><USER17> I disagree. "Hello World" as a problem is completely uninteresting. But it can be a part of a great introduction. I'd expect most "Hello World" tutorials to quickly tell me how to go from reading text in my browser to running code on my pc. And that is really useful.

<comment><USER18> It's definitely useful, but if we can do that and _also_ be interesting, wouldn't that be better?

If this was a marketing course and the assignment was to sell people on the idea of learning to program, "Hello World" introductions would get a failing grade.

What's distinct about Hello World is that it's a ritualized version of learning how to write a print statement. Teachers sell it as an important rite of passage, but that just isn't how students feel about it (and they shouldn't). I think this disconnect only causes students to disengage.

<comment><USER19> "Hello World" is basically the bare minimum you need to demonstrate that you got the computer to run the program and do something (so it's setup and configured correctly, and you understand some of the syntax). It also demonstrates how much of the way programmers actually communicate with each other is through conventions and not more formal standards. AFAIK there isn't a programming language with a specific built-in "Hello World" function, but, like Goldilocks and the Three Bears, everyone Just Knows About It.

Granted, if the rest of the course was just like it, I agree it would be terrible, but the first lesson itself is actually not that bad.

<comment><USER16> i really like this mythos argument that the first lesson is about communication to enforce the convention that languages should communicate

this is interesting

and trying to dream up languages that fail, or refuse, or do anything else but communicate, is fascinating.. what would a language like that look like, what would it be capable of?

i do like the idea that conventions supersede standards, but hello world seems even counter intuitive to the programming convention of efficiency

        print("hello world")

demonstrates communication, but also has the individual typing 20 things to print 11 thing out of the same editor thae typed into

        print(2**71)

demonstrates communication and running code, as well as having the potential to elicit awe at the capabilities of a collaboration with this machine

i said in the original comment that i think programming should be folded into mathematics education, in time parallel

stead trying to compartmentalise education into disparate parts we should be showing everything's interconnected nature

<comment><USER17> Yeah, I think that that print(2*71) might also be just as useful as print("hello world"). But I don't really think it is any more useful than hello world.

And how connected do you think computer science and mathematical education should be? I think they should definitely be different subjects, but they are definitely related. I'd be really surprised if I found a cs student from a decent program who graduated without realizing how connected they are. I'd expect the average cs student to have more programming experience than the average math major. But I think most math majors have some of the same general skill sets, and would have done well in cs classes.

</comment></comment></comment></comment></comment></comment><comment><USER20> I agree with this. I personally think you need to have really good critical thinking skills in order to be half decent at programming. The education system is failing with teaching critical thinking. I would love to see more focus on teaching critical thinking at a young age, which would give kids the tools needed to be a good programmer and problem solver.

</comment><comment><USER21> I was hoping for a much more in depth post after reading the title. It doesn't really go into much detail past an anecdote.

<comment><USER3> The article doesn't scan well, but the main ideas I got from it were that (1) the general population has different needs than people who intend to make a career in software, and (2) adapting the delivery and content of general programming education to address those needs may improve the accessibility and learning experience for non-career programmers. I agree with you that I'd hoped for more depth to backup the title.

</comment></comment><comment><USER22> I was surprised to see a lack of emphasis in this post on philosophical education, which has a great emphasis on logic. To me, it is a keystone of programming.

<comment><USER12> Philosophy is _the_ keystone to any knowledge, by the claim of the name.</comment></comment>


An Update to Upwork Connects Pricing - <AUTHOR> https://www.upwork.com/i/connects/ <comment><USER2> Since Elance closure I have won exactly ZERO projects on Upwork by sending my bids, so I stopped doing that long ago. This pricing change just cements my strategy of not using the feature.</comment>


How to stop your brain's addiction to bad news - sahin-boydas https://www.fastcompany.com/90269566/how-to-stop-your-brains-addiction-to-bad-news <comment><AUTHOR> So why nature is to blame instead of sources of "bad" news? Simple, because sources do not care and have the power not care as much as they want.

So, humans are the problem, again.</comment>