Ask HN: What's the *right* way to debug a program? - <AUTHOR> <comment><USER2> Reproduce the bug. Reproduction steps/environments are usually provided by support engineers or QA. Look through log files for any specific error messages, and use grep to find where in the code the error is coming from if it's not specified in the exception stack trace or something like that. Look at the code and form a hypothesis about where the bug might be located (use a "binary chop algorithm" discussed in books such as Code Complete and Debug It). Create breakpoints and step through the code with a debugger and record your observations. If you still haven't found the bug, use the data you just collected to form a stronger hypothesis and repeat the process until you've identified the source of the bug. Then apply the fix, and run some unit (or integration?) tests to verify you didn't introduce a regression or that you actually treated the symptom instead of fixing the root of the problem.

This might not be the best approach, but it generally works for me. I highly suggest reading the following books: Debugging, Debug It! and parts of Code Complete.

</comment><comment><USER3> There is no _right_ way to debug. Whatever finds your bugs works.

Personally I use whichever debugger I have on hand with breakpoints and walk through code to see what's going on, that usually lets me find my bugs fairly quickly. Of course the first step is reproduction of the bug, which can sometimes be hard.

</comment><comment><USER4> It depends on the kind of program. Is it client-side, server-side, is it a console command line application or a daemon process?

<comment><USER5> Or a Linux device driver, or embedded code running on a microcontroller... lots of different kinds of programs out there.

It also depends on the language that it's written in. For example, gdb is good for debugging C or C++ or assembler, but you probably wouldn't use it to debug a Lisp program (unless you were a masochist).</comment></comment>


Google's H.264 decision: It's all about YouTube costs - <AUTHOR> http://www.zdnet.com/blog/perlow/googles-h264-decision-its-all-about-youtube-costs/15529

<comment><USER2> This makes no sense. He seems to talking about the cost of having to store multiple formats. However, the only reason they have both WebM and H.264 is because they spent $100 million to acquire WebM. They could have simply not bought WebM, saved $100 million, and they would not have the storage problem.

It would make more sense if it is about the licensing cost of H.264, for the encoder they use and for their commercial streaming of H.264 video (does it count as commercial when they are not charging users for the video, but are monetizing the site with advertising?).

However, given the cap on annual license fees under the H.264 license, what they spent to acquire WebM would have covered their YouTube H.264 license fees through the remaining lifetime of the H.264 patents.

<comment><USER3> Confirmation bias, the author is a Infrastructure Architect, so he sees the problem as such.

> Infrastructure build-out and optimization strategy is something I know a > great deal about. It's what I do as my day job as an Infrastructure > Architect at IBM — understanding what our customers need to do in order to > minimize their infrastructure overhead in terms of systems, storage, > networking and facilities as they plan for further growth.

<comment><USER4> And yet he seems to believe petabytes are bigger than exabytes. This and the rest of the text makes me believe he doesn't know perfectly his subjet, to say the least...

Storage is cheap, and getting cheaper by the day. I don't think there's any reason to believe it's not going to continue that way in the foreseeable future.

EDIT: to give some numbers to the argument, I know that two years ago you could buy one petabyte (that's one million gigabyte) worth of storage for less than a million $.

</comment></comment></comment><comment><USER5> The AVC (h.264) licensing rate according to ( [http://www.streamingmedia.com/Articles/ReadArticle.aspx?Arti...](http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65357&PageNum=2) ) goes up to $100,000 per year for over a million subscribers and can not exceed $5 million a year per enterprise. AAC, the audio codec that usually goes along with AVC might be $1,200,000 per year ( <http://www.vialicensing.com/licensing/aac-fees.aspx> ).

Given that the last AVC patents expire at 2028, there's seventeen years left where Google might still have to pay the annual fee that wouldn't exceed a few million dollars (though at the last few years when there's something like one patent that's still valid, I doubt the patent pool really could be enforced). The On2 acquisition was $124.6 million ( [http://www.computerworld.com/s/article/9159738/Google_closes...](http://www.computerworld.com/s/article/9159738/Google_closes_On2_acquisition_for_124.6M) ) and probably a lot more for the ongoing development.

Assuming, rather reasonably that there's 12 years left for AVC (that's doubtful, it'll probably be ancient in a few years), the recurring fees for YouTube's licensing would need to exceed $10 million a year for the argument to make sense.

<comment><USER6> The license even perpetually exempts non-subscription, non-pay-per-view internet broadcast, so Google won't owe _any_ royalties unless they start broadcasting on television, start offering a subscription version of YouTube, or start offering pay-per-view videos.

See the top of the last page of: [http://www.mpegla.com/main/programs/avc/Documents/AVC_TermsS...](http://www.mpegla.com/main/programs/avc/Documents/AVC_TermsSummary.pdf)

</comment></comment><comment><USER7> This just doesn't make any sense. They still need to transcode to H.264 for Mobile Safari, Safari (using Youtube's HTML5 mode) and soon IE9 too; _none_ of these have announced plans to support WebM. Not to mention the fact that the flash videos are generally H.264 wrapped in Flash. If they wanted to cut storage costs then they'd be better off dropping support for WebM.

Also, I'd imagine that the storage cost for Youtube doesn't come close to their bandwidth costs.

<comment><AUTHOR> I think Google's playing the long game here. So they won't switch tomorrow but they'll try to make WebM the defacto standard by getting everyone but Apple on board. Then they'll leverage the open nature of the codec and its new found market dominance to force Apple's hand.

This is the same strategy Apple's using against Flash by only supporting HTML5 and to my eyes it's working.

<comment><USER7> Apple's reasons for not supporting Flash on their mobile platform are primarily performance reasons.

It's not only Apple that isn't supporting WebM by the way, IE9 won't support it (unless you have a VP8 codec installed). In fact, the only browsers that currently support WebM in their latest stable versions are Chrome and Opera. Remember that flash doesn't support WebM yet either.

WebM might well become more popular than H.264 for web video in the next couple of years and I wouldn't be all that surprised if Apple supported WebM in their next Safari release. But… I'd still be very surprised if YouTube stopped encoding videos into H.264 in this decade.

<comment> clark-kent Mozilla is also supporting it. Upcoming Firefox versions will support WebM. Even IE9 will support WebM with HTML5 when the codec is installed locally on windows.

<comment><USER8> As will Safari on Mac (it supports theora if a codec is installed).

</comment></comment></comment></comment></comment><comment><USER9> He seems to harp on the costs of a SAN as one of the drivers(not surprisingly, he's an IBMer), but according to <http://highscalability.com/youtube- architecture> they're running off of BigTable.

<comment><USER10> BigTable is basically a (distributed) Google-proprietary SAN. Lots of Storage, distributed over a really big Area ;-), and lots of Networking.

<comment><USER11> BigTable is a SAN without the SAN cost. It's all software.

<comment><USER12> That is more accurate. In terms of hardware + software it is closest to the Sun storage appliances which are Solaris or Linux with ZFS plus management tools.

The Sun promotional literature[1] refers to 70%+ cost savings on their units over comparable systems from EMC (the old school market leader). It was the fastest growing product at Sun, as it allowed companies to cut down storage costs using a model similar to what Google pioneered with Big Table and GFS.

[1] [http://www.oracle.com/us/products/servers- storage/storage/un...](http://www.oracle.com/us/products/servers- storage/storage/unified-storage/index.html)

</comment></comment></comment></comment><comment><USER13> I'm starting to think the real reason behind this is that google hasn't been able to flesh out any of it's flash-based advertising products for html5, and know that it won't be easy to do so (people can hide ad divs or download the source videos trivially; no way for them to guarantee content protection to publishers). I think that they realize that the only way for them to stick with flash without being seen as behind the times or anti-"open" is for them to prolong the codec dispute by requiring flash for all of the h264 videos out there by removing native support. As a side effect, users of safari and IE who want to view youtube webm content will have to use a flash wrapper as well if I understand it correctly. This isn't to say that a long term goal of html5 video served via a patent-unencumbered coded isn't a motivation of theirs, I just think that the decision to remove native h264 _right now_ is more of a way to keep flash a practical option than an ideological move.

<comment><USER14> _This isn't to say that a long term goal of html5 video served via a patent- unencumbered coded isn't a motivation of theirs, I just think that the decision to remove native h264 right now is more of a way to keep flash a practical option than an ideological move._

If they want to achieve that long term goal, isn't it obviously better to act sooner rather than later?

<comment><USER13> I agree, but it depends on how much removing native support for h264 this soon advances the state of html5. We are still convincing content-publishers to adopt html5. Dropping support right now and forcing people who want to support html5 video to dual encode and wrap content in flash for the sake of compatibility might slow adoption more than waiting for more people to get on first, then pulling the plug.

</comment></comment></comment><comment><USER15> If this is the truth and they are going to switch completely over to WebM on YouTube, I have one big question. What does Google gain from having control over the video format that they wouldn't get from h264? The only operative difference between the two codecs is that WebM is free. Surely, to justify being responsible for the enormous amount of money the world will spend to switch from one to the other, they have a better reason than "it's free."

<comment><AUTHOR> Not being at another company's mercy seems like reason enough to me. Right now Google is a company that's sunk hundreds of millions into Android and it's all at risk because Oracle bought Sun. I'd imagine that wake up call made them look at other vulnerabilities in their product line.

<comment><USER15> But what company are they at the mercy of for online video? The whole point of the open standard that is H264 is for a group of companies _not_ to be at each other's mercy. It seems riskier to switch to a new format created by one company than to go with the standard everyone else backs. I think there must be another answer.

<comment><AUTHOR> MPEG LA can still change the terms whenever they please and theor recent behavior has been troubling (<http://www.techdirt.com/articles/20100430/0232599255.shtml>)

<comment><USER16> This. Look who are major patent holders at MPEG-LA: Microsoft and Apple. Do you trust your blood enemies to a gentleman's agreement? MPEG-LA has been decidedly vague and "don't worry, be happy" about their long-term royalty plans. One might assume they would never increase the price, but can you be sure?

In fact, MS and Apple could even pull out of MPEG-LA at some point and charge exorbitant fees. Google simply does not want to be at any risk for that sort of FUD in the marketplace. I think that, combined with their ideological DNA (Patents BAAD, open source GOOOD) explains the decision pretty well.

<comment><USER17> > This. Look who are major patent holders at MPEG-LA: Microsoft and Apple.

Do you have a source for that? I've read quite a few times that at least Microsoft pays more for licenses than they get back.

<comment><USER16> [http://www.mpegla.com/main/programs/avc/Documents/avc- att1.p...](http://www.mpegla.com/main/programs/avc/Documents/avc-att1.pdf)

Microsoft: US patents: US 6,563,953 US 6,735,345 US 7,289,673 and a number of foreign filings, likely of the same IP.

Apple: US 7,292,636 US 7,548,584 US 7,551,674

US 7,339,991

doesn't matter if they pay in, the point is they are patent holders, and have a say in licensing terms.

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> It's not about the Youtube servers. I think, it's about the Youtube clients. Licensing costs may be small for Google but they are not small for manufacturers of mobile phones.

</comment><comment><USER19> Re: [http://www.zdnet.com/blog/perlow/googles-h264-decision- its-a...](http://www.zdnet.com/blog/perlow/googles-h264-decision-its-all- about-youtube-costs/15529) This is a mostly idiotic article.

First of all, for an Infrastructure Architect the guy has his storage knowledge all backwards: " _With YouTube, we're talking about exabytes upon exabytes of storage. Maybe even petabytes._ "

1 Exabyte = 1,024 Petabytes = 1,048,576 Terabytes

I'm sure that it was an innocent mixup, but good grief does it come across as someone who's trying to appear important and knowledgeable simply by tossing in some obscure computer terms.

Second, as others have pointed out as well, the whole logic of his argument doesn't make sense. Youtube, with all its massiveness, is probably _never_ going to be able to drop H.264 simply because it would no longer be able to stream its videos to any of the Android [1], iOS, webOS and Blackberry devices out there today. That's hundreds of millions of devices that would suddenly not be able to play Youtube videos anymore if Youtube goes WebM _only_.

( [1] side note: Only Android devices running 2.3 and higher are capable of WebM, but 1: that's with a battery-draining software renderer and 2: as we know, Android fragmentation is a pretty serious thing and millions of people are still running pre-2.3 OSes and there's no way that all of them will be upgraded at some point.)

Quoth the fool Jason Perlow: _My guess is that in addition to Android licensees, Apple and other device manufacturers which use embedded browsers such as RIM are not going to deny their customers and end-users embedded YouTube video support if Google chooses to encode to to a VP8/Theora standard, and I would expect the same of Microsoft and Internet Explorer and its embedded variations as well. Mozilla and Firefox we already know is completely on-board._

Yes, I'm sure Apple, RIM, Microsoft and HP/Palm can somehow _magically_ upgrade all the devices they have already sold to millions of customers and add WebM support to them. It's not like if you're the owner of an iPhone 3G you can't install the very latest version of iOS on your device. Oh, wait. You can't.

Simply put, the chance of Youtube dropping H.264 entirely and only maintaining their videos in WebM container format using VP8 is about 0.01%. It's higher if you look WAY far into the future, when _absolutely no one_ uses ANY of the 300+ million mobile computing devices we're using today anymore. But that's a whole lot of years into the future, and also depends entirely on Microsoft and Apple adding WebM support to their devices when they don't yet have much incentive to do so. Or at least, it won't be because of Youtube.

There should be no doubt that Google wants there to be only one format for video on the Web, 20–30 years from now, and that they prefer it to be WebM instead of H.264 if only so that they (and you, using their infrastructure) can sell video whenever and wherever they (and you) want without having to pay MPEG LA for it. Storage and technical specifics of the video format are secondary concerns which are actually great arguments _against_ this logic, for the situation in the "short" term that is the coming 5 to 10 years.

So all in all, sure, Youtube is an obvious motivator for this kind of move, but the article has the entire thing backwards in explaining it.

</comment><comment><USER20> nah, doubt it.</comment>


Less Text, Please: Contemporary Reading Behaviors and Short Formats - <AUTHOR> http://idratherbewriting.com/2011/01/21/contemporary-reading-behaviors-favor-short-formats/ <comment><USER2> tl;dr ;-)</comment>


Ask HN: How is Google policing screenshots of Google Maps? - <AUTHOR> I received a notice from Google regarding usage of Google maps without attribution. Which I ignored at first because we only use Google maps on our internal password protected site and we show all attribution. After another threat from Google that they would block our usage of the maps API if we didn't comply, I did some searching around and some back and forth emails and found that they were referring to a screenshot taken of some streets in Google maps that was being used as a background image behind our contact form at the bottom of one of our pages.<p>So my question is, how is Google discovering usages of their images in this case? Are they using some type of steganography? It seems that they would need to automatically process far too many images for it to be worth the effort. <comment><USER2> Google automatically processes every image on every site they crawl (that's how google image search works). Doesn't seem like checking to see if a given image is of maps would be too much additional effort.

<comment><AUTHOR> They must have something embedded in the images to make them detectable in that case. Because otherwise they would be trying to compare each image against a huge amount of maps images that can have any number of modifications like colors and roads and different points of interest toggled on and off.

<comment><USER3> They could be checking for presence of specific colors first and going into more expensive comparison from there, if they're specifically targeting screenshots.</comment></comment></comment>


Everything I thought I knew about water in California is wrong - <AUTHOR> http://grist.org/food/everything-i-thought-i-knew-about-water-in-california-is-wrong/

<comment><USER2> This article is awful. He ignores that Agriculture drills many wells and extracts water from rivers and streams - and that water is not metered and free. There was the recent article about Starbucks getting their bottled water for free from California wells. And when he praises the ability to buy/sell water he is praising the very system that allows farmers to take their free water and monetize it through bottled water sold throughout the USA. I could go on, but all you really need to do is drive through California and look at the miles and miles of rice fields - a full immersion crop. It is exported worldwide by the multi-billionaire "farmers".

<comment><USER3> There's also the subdivision of that pie graph. Crop types are badly optimized (alfalfa!) leading to lopsided water usage - "It takes $750 worth of retail water to grow $150 worth of wholesale cotton." Lloyd Carter (Feb. 2009)

Am I supposed to be empathetic toward protecting the Delta Smelt? This is water for humans. Other creatures get cleared out, that's the nature of our civilization. Start making the hard decisions (regulate the farms) and if the smelt go, too bad. Our population is not diminishing.</comment></comment>


Introducing Boxen - <AUTHOR> https://github.com/blog/1345-introducing-boxen <comment><USER3> This is pretty cool. There are some other companies that have released similar tools in the past. I personally tried out:

* Thoughtbot's laptop script - [http://robots.thoughtbot.com/post/8700977975/2011-rubyists-g...](http://robots.thoughtbot.com/post/8700977975/2011-rubyists-guide-to-a-mac-os-x-development)

* Lunar Logic's Lunar Station - <https://github.com/LunarLogicPolska/lunar-station>

* Pivotal Labs's Pivotal Workstation - <https://github.com/pivotal/pivotal_workstation>

I personally liked Pivotal Workstation the best, as it had the best combination of robustness, pre-built recipes, and easy configurability. I'll be excited to take a look at Boxen the next time we bring someone into our team.

<comment><USER4> However, it's still a pain for a small team to keep those recipes up to date and invest time to tweak configs.

That's why I love a product like Action.io (<http://action.io>), which allows all dev-boxes to be kept in sync and create clones when needed

(disclaimer: I work with action.io team and it's still in private beta)

<comment><USER5> Until services like that allow me to code on a plane, I'm not interested.

</comment></comment></comment><comment><USER6> A tool-chain like this is needed for Apple to move widely into the enterprise. As a sysadmin, it is a _major_ pain to worry about unpatched, outdated, apple laptops that have to conform to a security policy. Without automated tools like this, you are left running around patching the latest java/flash/pdf issue!

<comment><USER7> I still don't understand why Apple hasn't built something like this for the SMB market. Maybe they don't want to play in the true enterprise space, but even if a company has 5 workers, having a central cloud service to handle system configuration, baselines for security, backups, vpn, software push, hardware replacement, etc. would be essential.

On mobile there are a variety of MDM services so you can almost do this for phones, but there isn't much for the SMB market for desktops/laptops. In the Microsoft world there are some tools, but even those are generally too much work for a small business to set up (even a non-tech business with 100 employees isn't likely to do it, at best they'll have ghost or something to image new machines -- a tech business might after 25-50 employees)

<comment><USER8> They don't see themselves in that market...yet, and the trends don't look good in that direction either. As we all know, Apple has continued to shy away from actual computing in recent years. Now if you could do something like this for Linux, businesses that don't yet have an MS infrastructure could find this very compelling, especially if the rumors of Linux MS Office come true. I work in IT in a large nationwide law firm and we spend so much time of our days dealing with viruses and general Windows headaches when what people do is mostly either 1) through Citrix, where we manage the Windows instances or 2) on the web. If MS Office for Linux dropped, I think businesses like ours would find this a very compelling option.

<comment> wes-exp _"we spend so much time of our days dealing with viruses and general Windows headaches"_

Rather than maintaining all this enterprise stuff to fight off the Windows tar-pit of viruses and dreaming of a day of MS Office on Linux, why don't you switch to Macs which require no such special effort to stay virus-free and already have MS Office available?

Am I missing something here?

<comment><USER9> Because double the price ?

</comment></comment></comment></comment></comment><comment><USER10> This sounds awesome!

That being said, there's not a chance in hell I'd install so much stuff onto my mac.

IMO, Vagrant and VM's in general are what you should use to develop your web applications. (I happen to be opinionated about this :D )

Mainly this is because I believe in matching your production environment for development.

It's also because I'm anal about installing memory-using apps into my little MBA.

However, for things like Minecraft, onepassword, wget, sublime text 2 - <USER2> is really awesome.

<comment><USER11> You're anal about install memory-using apps onto your MBA so instead of installing them you run them inside a VM? That uses quite a bit more memory.

Boxen doesn't seem to care too much about what you want to install, so you could have it install Vagrant and VirtualBox for you.

<comment><USER12> > That uses quite a bit more memory.

Not really. What it gives you is easily configurable, absolute control over memory usage. I can ensure that my local dev environment doesn't use more than 2GB of RAM. From one setting. In one place. In about 20 seconds flat.

<comment><USER13> _> What it gives you is easily configurable, absolute control over memory usage._

Perhaps this speaks to OS X's rather wimpy, squishily configurable control over memory usage.

<comment><USER12> You think? It's OSX's job to give me a way to say "Don't let the combination of Mysql, Apache and nginx use more than 1 GB ram" ?

I disagree. That doesn't belong in a consumer OS.

<comment><USER13> _> You think? It's OSX's job to give me a way_

Bzzzt! Jumped to conclusions & placed words in my mouth! Thanks for playing. BTW, I'm an iOS developer and I've been using OS X as almost my exclusive dev environment since 2003.

Sorry, forgot that I have to keep quiet about shortcomings of OS X, or else.

 _> I disagree. That doesn't belong in a consumer OS._

I applaud your brave stance against the straw man you just conjured. [slow clap]

<comment><USER12> Wow. Just wow. Your winning combination of charm, wit and kindness must keep your social calendar very full.

Enjoy the ride home on the short bus, man.

<comment><USER13> _> Enjoy the ride home on the short bus, man._

Also, doesn't admit or apologize when he's shown to be wrong, and responds with cheap insults instead.

</comment></comment></comment></comment></comment></comment></comment></comment><comment> one-man-bucket I'm not trying to flamebait, but are macs so popular that it's just assumed that all new hires want one as their tool? At my company we're still asking new employees which platform they want to work on, is this falling out of fashion?

<comment><USER14> Seriously. I find Apple's UI to be really frustrating to use. And honestly, I can't go back after switching to XMonad.

I have many happy coworkers who use Macs, but please don't make me use one.

<comment><USER15> [http://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_on_Ap...](http://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_on_Apple_OSX)

<comment><USER16> A X11 window manager can only manage X11 apps.

<comment><USER17> There's nothing keeping you from using the same X11 apps on OS X as you do on Linux.

</comment></comment></comment></comment></comment><comment><USER18> Honest question; I've never understood why people have such a fixation on puppet-style tools.

Small-scale? Run a simple script. Large-scale? Use a network-hosted configuration (optimally read-only root and network booting so the entire system is known-good) to avoid the entire class of configuration drift / migration / state-accrual problems associated with the above.

I just see puppet as sort of trying to provide the latter and failing, resulting in a complex version of the former.

<comment><USER19> > _Honest question; I've never understood why people have such a fixation on > puppet-style tools._

There are two things I want:

1\. To describe the desired correct configuration as a directed, acyclic graph.

2\. To have some automatic compare-and-repair mechanism regularly bring my systems to such a state.

If you don't have a good tool for those two requirements, you wind up reinventing it anyway.

Your small shell scripts start being littered with lots of checks for this and that file, if-thens and cases. Then they break when script 27 silently gets out of sync with script 42.

You realise one day that system configurations can be expressed as DAGs (possibly it's a new insight, perhaps you were reading ITIL documentation). And you begin to dream about a tool that can take a descriptive DAG and generate the correct shell scripts. You have now half reinvented puppet.

But the systems _still_ get out of sync. So you start tinkering with a tool that periodically checks each system and reruns the correct script. Now you have to ensure that your scripts are all idempotent. All those if-thens and checks creep back in.

So now you begin to dream about a system that only generates the steps needed to close the gap between the DAG and the current state of the system.

Congratulations. You just reinvented the other half of puppet.

<comment><USER18> > 1\. To describe the desired correct configuration as a directed, acyclic > graph.

If you have already decided on your solution before you have analyzed the problem then there's nothing to discuss.

> 2\. To have some automatic compare-and-repair mechanism regularly bring my > systems to such a state.

Right. My fundamental point is that puppet-esque solutions only describe certain aspects of the system state, ultimately failing here and resulting in 'configuration drift'. Entire system images are far more elegant.

Most of the use cases I have seen for puppet-style stuff are legacy-situation based and only make sense within that context.

So what is the alternative to puppet-style solutions? Personally I use full system images on cloud and cluster solutions (corosync/pacemaker) to maintain server state.

<comment><USER19> > _If you have already decided on your solution before you have analyzed the > problem then there's nothing to discuss._

You can see how I arrived at that solution.

> _My fundamental point is that puppet-esque solutions only describe certain > aspects of the system state, ultimately failing here and resulting in > 'configuration drift'._

Particularly with runtime / process supervision. One of my pet peeves.

> _Entire system images are far more elegant._

Yes and no. It really depends on what your cost/benefit tradeoffs are. I like system images for startup, but systems still drift from their initial configuration no matter how that configuration is established (DAG or blob).

Even with system images you'll need to detect divergence from ... what, exactly? Doing a byte-for-byte comparison is going to suck.

Do you just kill and relaunch periodically? I can see that being stochastically effective.

<comment><USER18> > Do you just kill and relaunch periodically? I can see that being > stochastically effective.

Personally no, but you easily could.

> It really depends on what your cost/benefit tradeoffs are.

Well, realistically, to facilitate automated deployment and testing of multi- machine systems you _really do need_ to be operating at this level of abstraction. (ie. to declare your desired state). Once you reach this point, a configuration file for some version of a package within some node is really a distraction rather than a help; it should have been abstracted to some known- good state and taken out of the equation if you are to have any hope of staying sane. Many people use entire system images coupled with service monitoring as the de-facto segregation point for management purposes.

> Do you just kill and relaunch periodically? I can see that being > stochastically effective.

While that's entirely possible and probably a reasonable approach in some cases, the corosync/pacemaker de-facto/spiritual approach is to detect issues with a given resource (roughly: 'service instance'), automatically destroy it and fail over to another instance thereof, and then potentially start another instance to replace it automatically on the same, or some other cluster node. To facilitate rapid failover, the master/slave paradigm allows you to have live backup nodes running and promote them as masters easily. Any type of hardware or software can be scripted as a managed resource. The type and frequency of resource health monitoring checks can be custom defined.

<comment><USER20> I still don't quite understand how you manage version control with entire system images. I guess you could just write a changelog, but that requires a large amount of self-discipline to ensure that the changelog exactly matches system state. Let's say you discover some minor instability, and discover that it was introduced 8 months ago, but the changelog for that image was completely innocuous. Can you do anything other than throw out all 8 months' worth of images and try to work your way back to present via the changelogs?

Puppet-like systems have the same issue in that they don't attempt to specify the entire system, but at least with puppet if there is an issue due to system drift you can start with a clean base installation and re-run it.

<comment><USER18> _I still don't quite understand how you manage version control with entire system images._

You just uniquely name the environment, for example with a version number, and/or use a snapshot-capable datastore.

 _I guess you could just write a changelog, but that requires a large amount of self-discipline to ensure that the changelog exactly matches system state._

Definitely don't do this.

 _Let's say you discover some minor instability, and discover that it was introduced 8 months ago, but the changelog for that image was completely innocuous. Can you do anything other than throw out all 8 months' worth of images and try to work your way back to present via the changelogs?_

If you write a test that can trigger the issue and replay the test against past images ("regression test") then you will identify exactly where the issue was introduced. The key thing is: don't have manually configured what-not in production. Keep it versioned, keep it solid, keep it known.

 _Puppet-like systems have the same issue..._

Exactly. This is my point. They don't really deliver on the promise of decent automation, because they are inherently patchwork/partial-scope in approach.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> Clever name. <http://www.jargon.net/jargonfile/b/boxen.html>

<comment><USER22> I thought it was a reference to Brian Regan Live, 1997: <http://www.youtube.com/watch?v=yxenUzZPFiQ#t=01m56s>

</comment></comment><comment><USER23> We've opened up #boxen on freenode for questions and discussion. We'll idle there whenever we can.

</comment><comment><USER24> Looks very similar to Vagrant: <http://www.vagrantup.com/>

<comment><USER25> That was my first thought as well. And then I started wondering why they are automating so much setup on OS X itself instead of using something like Vagrant for dev stuff.

I find OS X to be pretty frustrating to work with natively. I've long tried to keep things like Postgres and Python consistent, but even a 10.x.y update can break things. Even with homebrew and postgresapp, it's challenging to keep the system from breaking. I'm currently running 10.7 precisely because I didn't want to rebuild my setup on 10.8 (I've since started using Vagrant much more aggressively to help solve this).

I realize that part of the point of boxen is to help set a baseline but it seems like a Vagrant box that mimics the actual Github stack would make more sense.

<comment><USER26> This surprised me too, I would not have expected that Githubbers develop on OS X and deploy to Linux.

I would be interested to hear more about why they made that choice.

<comment><USER27> Not everything we work on deploys to Linux.

<comment><USER26> Understood, but the original blog post begins "Boxen started nearly a year ago as a project called "The Setup" — a pipe dream to let anyone at GitHub run GitHub.com on their development machine with a single command."

It was this line specifically which implied that Boxen is used to emulate the production environment in OS X and spurred my comment.

</comment></comment></comment></comment></comment><comment><USER28> Isn't puppet overkill for this? Seems like a bunch of ruby to build command line arguments. Bash would have been easier. We have a workstation dotfiles which we clone and execute an install script with plugins for oh-my-zsh.

<comment><USER29> To set up initially, possibly. But this is for maintenance too. Need to install a security patch? Puppet. Need to upgrade versions? Puppet. Want to tweak some setting somewhere? Puppet. Using Puppet makes it stupid easy for us to keep our setups (a) in sync, (b) up to date and secure, and (c) do it without a bunch of hacky scripts that will probably break or not work right in 3 months.

<comment><USER28> I'm not seeing it how installing a security patch is any different. Security patches usually check to see if they need to be applied before doing anything. Updating a version is as simple as `brew update node`, `brew updated mongodb`, etc. The bash you call hacky is what's being done here with an extra layer of Ruby.

<comment><USER29> Cool, well have fun next time you need to update a setting buried in a config file or verify the results of something you ran. You can write 200 lines of bash that might work (or might not if the user decides they like csh or zsh) or like 3 lines of Puppet and guarantee it's idempotent.

There's a lot more to this than just setup scripts, but if all you need is setup scripts with the occasional update, then by all means just stick with that. Our needs just happen to be beyond that.

</comment></comment></comment></comment><comment><USER13> Does it work well with Homebrew, or does it subsume that functionality?

<comment><USER30> It's kind of like initializing a fresh OS install to something useable.

Their our-boxen template[1] installs homebrew for you as well as some other software.

[1]<https://github.com/boxen/our-boxen>

<comment><USER31> How does this work for proprietary software, or stuff that requires installation keys or authorization? Say Office 2011 or sublime text 2 or some other paid app (whether in the app store or not)?

</comment></comment></comment><comment><USER32> "brutalize a key with your favorite finger"

</comment><comment><USER33> Massive ruby framework that only runs on macs? Yuck.

</comment><comment><USER34> This looks pretty great. We do something slightly similar at Chartbeat, but using puppet + ubuntu server VMs on our macs. Enables us to to develop on the same hardware we'll be using in production. Our CTO wrote a blog post about it here if anyone is interested:

<http://engineering.chartbeat.com/2012/09/24/devvm/>

</comment><comment><USER35> This reminds me of radmind: <http://rsug.itd.umich.edu/software/radmind/>

Lots of good ideas in there (some of which inspired early work on dotCloud, including <https://github.com/dotcloud/cloudlets> )

</comment><comment><USER36> I just can't keep track of SCM systems any more...

Calgon, take me away.

</comment><comment><USER37> This looks very nice -- automated workflow setup for developers. It's essentially generalization across every "developer setup guide" you could possibly imagine.

Now the question is: can we get this for Linux users?

<comment><USER6> Puppet/systemimager already exists for Linux users.

<comment><USER37> Boxen works with puppet too, but they don't fulfill the same role. Boxen is about the sharing and centralization of your puppet-like tools. Presumably not everyone wants to write a developer workflow from scratch, and Boxen could solve that without requiring a Mac, right?

<comment><USER6> Exactly -- no one wants to start from scratch. Puppet maintains something called, Puppet Forge [1] where anyone can uploads and share their puppet recipes. This goes beyond Puppet Forge, since it is a bundle of scripts that work together, so there is much added value to something like boxen.

[1] <http://forge.puppetlabs.com/>

</comment></comment></comment></comment><comment><USER38> This is awesome and a long-time coming. If you're setting up a developer box, the last step should deploy to production :)

</comment><comment><USER39> I had built something very similar to this a while ago, based off of the pivotal idea but with a one-liner install.

<https://github.com/seryl/kindness>

supports updating itself and it's templates form the git repo it's referencing.

</comment><comment><USER40> We use babushka for local machine config and also production. It's radically simpler than Puppet/Chef.

<http://babushka.me/>

</comment><comment><USER41> This might be enough for me to settle on Puppet over Chef. Haven't really compared them in depth and only played around with Chef so far.

Either way it seems pretty cool.

</comment><comment><USER42> Would be interesting to know what made them settle on Puppet instead of Chef. Thought the guys at Github were big Ruby-Lovers...

</comment><comment><USER19> "Boxen" is the German word for "Boxing".

I learnt this when I considered starting a linux-optimised PC business back in the early noughties.

<comment><USER43> Also in Dutch :)

</comment></comment><comment><USER44> This looks very promising. Thanks, GitHub!

</comment><comment><USER45> I can't bring myself to trust a project that has such horrible commit messages, even if it is github.

</comment><comment><USER46> Heard about this a while back from a beta user. Very excited to start playing with it!

</comment><comment><USER47> \--> You must be running OS X 10.8 (Mountain Lion). :(

</comment><comment><USER48> This looks very promising.

</comment><comment><USER49> cool.</comment>


How Amazon killed the printing press - <AUTHOR> http://www.samshub.com/2007/11/20/how-amazoncom-killed-the-printing-press/ In case you've been hiding under a rock. Amazon has been developing a little gadget named "Kindle"... <comment><USER2> Hmm, I think it's a little premature to come to that conclusion . . .</comment>


Major Flash/AS3 to WebAssembly Effort Just Revealed (contains Demos) - <AUTHOR> https://github.com/JasonHuang3D/AJC-Flash-WebAssembly-Examples <comment><USER2> Oh, this is marvellous, Flash is dead, long live AS3!

Although it's not quite that, it's providing a C++ Flash API and a slow AS3->wasm workflow, but it shows how respected and mature an eleven-year-old API and language are in some quarters. And I agree.

<comment><AUTHOR> Right? JS evolves every year, set somehow AS3 has hung in there. I think it really says something positive about its maturity</comment></comment>


Please participate in our research study about Python programming - <AUTHOR> https://das.th-koeln.de/studies/python/ <comment> d--b This requires way more work than I intend to put in. Good luck with getting a significant number of respondants. And if you do, be sure to weight your results with the fact that your sample contains only people who are willing to spend a few hours on your study for free...</comment>


Show HN: Evolving fractals with genetic algorithms - <AUTHOR> https://github.com/victorqribeiro/randomFractal <comment><USER2> Live version [https://victorribeiro.com/randomFractal/](https://victorribeiro.com/randomFractal/) (it is linked somewhere, but it is easy to miss)

Perhaps you can add a little more info about each fractal. One is the trunk and the other the general structure?

Most of the examples of the live version are not nice, I have to click 5 or 10 times to get a nice one. Is it possible t generate 9 of them in a 3x3 grid or something, so I can choose the one I like better?

Is it possible to add a permalink to the trees I get, something like [https://victorribeiro.com/randomFractal/?a=3.24&b=2.73&c=-6,...](https://victorribeiro.com/randomFractal/?a=3.24&b=2.73&c=-6,2$d=1.0)

<comment><AUTHOR> well, you just described what was my plan all along. To generate a population of fractals and have the user being the evaluate function (genetic algorithm) giving each new fractal a fitness score based on aesthetic. I just have been so busy lately with my job and a game I released that I just stop the project right where is at.

tonight and this weekend I'll give some more attention to it .

</comment></comment><comment><AUTHOR> Well, I end up implementing the thing I was originally thinking about and the project is awesome now. I was able to create beautiful fractals from the crossing of two.

There's room for improvement and I'll implement the ability to view and share the rules that generate the fractals

<comment><AUTHOR> the ones on the left, that you select, will be added to the mating pool and will have a chance to reproduce on the next generation

</comment></comment><comment><AUTHOR> Hi everyone, I've pushed a cool update where you can view, render, adjust the zoom and the resolution of the selected fractals. You can learn more about it on my short video:

[https://youtu.be/DY5Me5hiQOc](https://youtu.be/DY5Me5hiQOc)

Anyways, have a nice time creating your very own fractals.

</comment><comment><USER3> I have not heard much about Generic Algorithms for years. Oddly, this morning I saw a book on my shelf which I thought I might revisit, An Introduction to Genetic Algorithms.

Are they called something else these days?

<comment><AUTHOR> since they are classified as AI, the GA being a search algorithm, they call it AI. "AI learns how to play game" usually is a neural network evolving through GA

</comment></comment><comment><AUTHOR> I've made a video showing the project and how it works:

[https://youtu.be/CBHweO03WqI](https://youtu.be/CBHweO03WqI)

</comment><comment><AUTHOR> I got a Straight Barnsley fern.

[https://imgur.com/a/7E1zDIx](https://imgur.com/a/7E1zDIx)

</comment><comment><USER4> Nice, keep it going.

</comment><comment><AUTHOR> I have just updated the README with a picture from parentA and parentB, the ones I'm using on to cross fractals.

<comment><USER5> You should explain what kinds of fractals these are (are they L-systems?) and how you go about crossing them.

<comment><USER6> It's IFS (Iterated Function Systems):

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

IFS uses a set of affine transformations (translation, scale, rotation and shear, which can each be represented by a single matrix, and in the 2d case you can think of them as a set of rectangles/parallelograms).

IFS are most often drawn by starting from a random location and then repeatedly selecting a random transform from the set, applying it to the previous position and then drawing a dot at the new position. You can also generate all the locations first (yielding a point-cloud) and then rasterize them to make an image. The same idea applies using 3d affine transforms with almost no extra effort. I think this is what Richard 'doc' Bailey (may he rest in peace) may have been doing in his awesome 'image savant/spore' work.

Flame fractals (electric sheep) extended the same idea with non-linear transformations, and coloring methods to great effect!

There is also some cool formulas in the isosurface-based 3d-fractal scene (one is called 'Kaleidoscopic IFS') where the drawing method is (of course) very different but the underlying repeated-transformation principle is the same.

Indeed most kinds of fractals can be thought of in the same way: Repeatedly apply some geometric transformation or deformation (or synthesis in the case of 'fractal noise') in feedback.

</comment></comment></comment><comment><AUTHOR> if there's anyone following this thread, I was laid off work due to covid-19, so, I'm available to work on fun projects. My email is on my profile. God bless us all on this trying times.</comment>


The Computer for the 21st Century (1991) - <AUTHOR> http://www.ubiq.com/hypertext/weiser/SciAmDraft3.html

<comment><USER2> _Pads differ from conventional portable computers in one crucial way. Whereas portable computers go everywhere with their owners, the pad that must be carried from place to place is a failure. Pads are intended to be "scrap computers" (analogous to scrap paper) that can be grabbed and used anywhere; they have no individualized identity or importance._

That sounds eerily appealing. It speaks to my preference for a multi-device lifestyle where portable devices are but terminals to my network of applications running on my singular compute host. And yet, that's nothing quite like that today. Today, despite my desire to buy what I call a "subservient tablet," [1] I have no such option. Instead, tablets are first- order computers on their own right, adding to the number of devices in my life that want constant attention.

I find it a shame that in the real present-day, we're off on this curious tangent where every device has to stand on its own as a silo of computing.

In fact, it's a shame many of the concepts described in this article from 1991 still don't exist. Most notably, I am especially interested in large form- factor displays.

[1] [http://tiamat.tsotech.com/microsoft](http://tiamat.tsotech.com/microsoft)

</comment><comment><USER3> Mark Weiser was a professor of mine at the University of Maryland before he went to PARC. It was an awful tragedy that he died at such a young age (46). With the rise of tablets and small, powerful computers like the Raspberry Pi and the Arduino, I'm often reminded of his ideas about ubiquitous computing. He'd be having a ball today with all of the power one can now get in such tiny, efficient packages. It would be great if more of his UC ideas were to get into the mainstream of computing.</comment>


Show HN: Polltime – Polls that can be texted - <AUTHOR> https://polltime.co <comment><USER2> I had coded something similar for TADHack 2018[0] we didn't get it as cleanly as this but we got it working enough to demo. I haven't had a good chance to post our original code yet though. Looks nice, would love to know about the back-end stack used. We used Flask / MongoDB for ours.

[0] [http://blog.tadhack.com/2018/03/12/tadhack-mini- orlando-2018...](http://blog.tadhack.com/2018/03/12/tadhack-mini- orlando-2018-winners/)

Ours is Poll IO (terrible name I know...)

<comment><AUTHOR> I don't have much of a backend, just Express for form processing.

For a quick setup DB, using [https://github.com/bluzi/jsonstore](https://github.com/bluzi/jsonstore)

<comment><USER2> Yeah I used MongoDB cause it was just a quick apt-get install away and I was ready to use it. I have not had the pleasure of using Express yet but I'm sure I will at some point.

</comment></comment></comment><comment><USER3> I'm a bit bewildered. I've created a pole, which takes me to a page with the question and options to vote or view the results. Am I then supposed to text that to my users for them to click the links? I was expecting your site to send out the texts and accept the options as replies.

<comment><AUTHOR> Yeah you're supposed to send the links yourself, It's mainly meant for personal use on group chats.

</comment></comment><comment><USER4> Found a security loophole.Polltime stores your location data and emails visible publicly. [https://ibb.co/eh7vG7](https://ibb.co/eh7vG7)

</comment><comment><USER5> Reminding me of this: [https://news.ycombinator.com/item?id=16915858](https://news.ycombinator.com/item?id=16915858)

</comment><comment><USER6> Simple, clean, gets the job done.

Have you thought about adding a box on homepage to text me an example to my phone? Probably with reassurance that the number won't be saved and used again.

</comment><comment><USER7> Nice job! I'm consistently impressed by your work ethic

</comment><comment><USER8> Why not just use Strawpoll?

<comment><AUTHOR> With polltime you get unique links for each option, meaning people can see options before the click on a link to vote - I think this would increase response rate, but no data to back that</comment></comment>


Postmortem - Fictionalley.org - <AUTHOR> http://nostrademons.livejournal.com/103250.html <comment><AUTHOR> Some background, since this was written for HP fandom members who already know what FictionAlley is...

FictionAlley.org is the leading Harry Potter fanfiction site on the net (a category that's larger than you might expect). It was small but growing when I first joined the staff, having about 2000 registered members and roughly 30-50 simultaneous users at any given time. Over the next 5 years, it grew to 100,000 registered users and 350-500 simultaneous sessions.

This postmortem's describing the project to replace the original upload system - which was basically built on hand-uploaded HTML files and off-the-shelf forum and directory software - with a more modern database system. This project wasn't really a failure per se: it's in production now, people use it, and FictionAlley's still getting 350 or so simultaneous users. However, it took _much_ longer and was much more difficult than expected, and the final result has fewer features and more bugs than I'd like. I initially figured on 3 months to finish; it took 3 years.</comment>


Pick operating system - <AUTHOR> https://en.wikipedia.org/wiki/Pick_operating_system <comment><USER2> I work with a Pick derivative every day. UniData still runs many higher ed ERP systems. (As it does at our institution, which was the first installation of our particular product.) I sometimes joke that we were running a NoSQL DB before SQL existed! ;)

I can't comment directly on Pick, but UniData is an... interesting DB. The concept of MultiValue fields is both powerful and horrifying (reporting is a nightmare for anything designed to deal with SQL DBs). The configuration varies between installs, but for the most part all data is treated as ASCII text. Numeric values are converted at runtime. Dates are stored as number of days since December 31st, 1967. (You read that right.) There are no real checks on field length or content. Also, for the most part we program in a basic variant (UniBasic) where the only dynamic programming feature is "dynamic arrays" which are strings with special delimiter characters. "Structured programming" is still mentioned as a novel concept in the manuals. However, there is a vendor "augmented" version of UniBasic that interfaces with our software product's frontend in various ways. It's a niche ecosystem.

My manager still remembers the good old days back in the '80s when our ERP system ran on a Prime minicomputer. I still have some manuals sitting around my office with "Prime" printed on the spine...

<comment><AUTHOR> Thanks for sharing that. I'm curious about whether you work with other, more mainstream technologies too alongside Pick, and what the interoperability is like?

Despite the limited features you alluded to, I think I would quite enjoy a platform that isn't constantly mutating in response to fashions and (I assume) lets you get on with the job.</comment></comment>


Can Microservices Make Things Simpler? - <AUTHOR> https://medium.com/windmill-engineering/can-microservices-make-things-simpler-f169d540955a <comment><USER2> Define 'simpler'?! A monolith is easier to build.

When you get into microservices, you get into additional layers of complexity.

The primary one being that you now need to get into inter-service communications, which means serializing/de-serializing messages across the wire, and building in structure to handle the associated failure modes.</comment>


A 3D printed toothbrush for all your teeth - <AUTHOR> http://www.3ders.org//articles/20131001-blizzident-releases-3d-printed-6-seconds-toothbrush-tailored-to-your-teeth.html <comment><USER2> Wow, what's with all of the hate? Someone uses a new technology to create a device that could be a more efficient way of solving a current problem, and the best comments that anyone can write are complaints about how it's a bad idea or solving the wrong problem because they personally don't have this problem? What an awful way to encourage inventive people to follow their dreams and build new products for everyone. These attitudes kill entrepreneurship.

<comment><USER3> I'm very excited about this. The 6 second thing would be a Godsend for my 5 year old, who I spend 90 seconds every night brushing his teeth for him, trying to stave off more tooth decay on his teeth (bad teeth run in my family). I feel guilty about only doing 90 seconds, and he hates that we even do that long. This would be huge for our evening routine, and maybe for his long term tooth health (baby tooth health can effect adult tooth health)

I'm disappointed at the $500/person price tag. ($300 plus dental impressions), but I'm still really thinking about this for him and for me.

<comment><USER4> for my 4 year old son, I brush his bottom teeth and count to 100, then brush his top teeth and count down to zero. maybe it's because i started this routine when he was 2, but he sits through it A-OK.

no cavities yet, and i hope it helps him with numbers too.

<comment><USER5> One of the parents at my school took a bullet for the rest of the team and let her son not brush his teeth. They became black, holey and disgusting, and I imagine quite painful. Everyone in school knew that that's what happened if you didn't brush your teeth. Worked on me and my brothers, and I remember the kids in my class boasting about how long they brushed their teeth for.

</comment></comment></comment></comment><comment><USER6> It looks impossible to change the angle of the brush, meaning only the major face of each tooth gets touched by the bristles. This seems more to do with 3D printing, than dentistry.

What is interesting is the change from mass produced to 'mass customization' where things are made with efficiencies of scale, yet each one can be unique (within limits).

</comment><comment><USER7> While it obviously appears to shorten the brushing time, it also looks like it would be much harder to keep the device itself clean - everyone who has had a retainer or other removable dental device could likely attest to this. I'd imagine it would also require more toothpaste.

Seeing as toothbrushes in bulk are about less than $1 each, a $300 ($150 refurbished, but ewwwwww...), hard to clean device seems somewhat difficult to argue for.

<comment><USER8> Lets put aside the cleaning argument and discuss cost for a minute here.

Its recommended you brush your teeth for ~2 minutes. Lets say with this thing you shorten it to 30 seconds. That means you save 3 minutes per day every day on brushing, assuming you brush twice daily. This works out to about 18 hours a year. If your time is more valuable than 17/hr it's arguably worth it.

Time and time again I see people complain about the cost of daily use items but when you factor in how much you actually use them and the potential benefit you can get out of a them it quickly becomes worthwhile.

edit: there is a huge difference between being maximizing productivity and measuring opportunity cost, I'm arguing the latter. I don't expect you to get paid another 18 hours a year. I'm simply pointing out that depending on how YOU value YOUR time spending $300 on a fancy toothbrush is entirely worth it.

<comment><USER9> So, it takes me approximately one minute to walk to the bathroom per day. I probably average four trips, so that's four minutes.

But if I just peed in a jug at my desk, I could save four minutes per day, or about one whole day every year!

\--

For most people, saving three minutes a day is negligible. I know I'd get far more utility turning on noprocrast then I would trying to optimize for those three minutes.

</comment></comment></comment><comment><USER10> This is the wrong problem to try and solve. Toothbrushes are a solved problem.

If you want to disrupt at-home dentistry, solve flossing instead. That one's still a pain in the ass that comes back to bite (heh) a huge amount of people down their roads.

<comment><USER11> Tooth health was solved thousands of years ago - and it's called Oil Pulling. Toothbrushes are the norm because of marketing budgets of teaching society to buy 1 disposable product (toothbrush), which then requires buying another product on a recurring basis (toothpaste).

There are different kinds of oils you can use for different benefits, though overall you just need the suction and vacuum that the oil allows for (with the density of the oil). It's great for your gums and teeth overall - and has other benefits relating to tongue health, tasting of food, etc..

<comment><USER12> I was really curious, so I looked up Oil Pulling [1]. 15-20 minutes of swishing oil around in my mouth? I don't see how that's ideal for anyone, it sounds disgusting and terribly time consuming. The literature linked from Wikipedia also doesn't talk about any of the benefits you discuss, and I'm a little skeptical. Why can't I achieve this by just swishing my own spit around all day?

1\. [http://en.wikipedia.org/wiki/Oil_pulling](http://en.wikipedia.org/wiki/Oil_pulling)

<comment><USER13> Not only all that, but the Wikipedia article states that after spitting out the oil you would then clean your teeth, gums, and tongue as you normally would.

It only seems to be a remedy for specific situations.

</comment></comment></comment></comment><comment><USER14> "And you can floss your tongue simultaneously" \-- way to trigger my gag reflex.

No, seriously. I'm sure this will work for some people, but for those of us with a strong gag reflex this is a nightmare device. (I know whereof I speak; I've had to have dental imprints taken for prosthodontic work several times, and I _always_ come close to throwing up -- when having my jaws packed with something not dissimilar in size and shape).

<comment><USER15> I agree, this device looks neat but I fear it would be very difficult for me to use. I could _probably_ get use to it eventually, but it would almost certainly have me throwing the first few times and just gagging long after that.

</comment></comment><comment><USER16> A lot of negativity in the comments, I'm surprised. Electric toothbrushes aren't more effective than traditional ([http://en.wikipedia.org/wiki/Electric_toothbrush](http://en.wikipedia.org/wiki/Electric_toothbrush)), but have huge sales numbers.

Packaging is a problem right now, but put that thing in something unapologetically plastic and shiny and there may just be a market.

<comment><USER17> _Electric toothbrushes aren 't more effective than traditional_

There's a key qualifier: "assuming that the person using the manual toothbrush will brush effectively". I have a huge amount of trouble brushing effectively with a manual toothbrush; with an electric I can just let the toothbrush do the work.

<comment><USER16> Good point. That should be noted and it also furthers my original point: This new device claims an even simpler and shorter process.

</comment></comment></comment><comment><USER18> A dentist (unverified) offers an opinion on the product: [http://www.reddit.com/r/technology/comments/1ni570/the_world...](http://www.reddit.com/r/technology/comments/1ni570/the_worlds_craziest_toothbrush_cleans_your_teeth/ccivlo2)

</comment><comment><USER19> What I really want is nanobots that live in my mouth and discard of bacteria the moment they appear. Every night I'd put some fresh nanobots on my tongue and they will last a day. I'd even splurge for the nanobots deluxe, they directly remineralize the calcium in my teeth. They extract the calcium from the bacteria they kill!

<comment><USER20> What I want is a seed batch of probiotic flora (possibly even GMOs) that compete with S. mutans for nutrients and are better houseguests.

<comment><USER21> Yeah this never works. Scattering some daffodil seeds in a field full of weeds - the weeds win. I never understood the 'probiotic' concept.

</comment></comment></comment><comment><USER22> I have been told by a dentist that the reason for "you must brush your teeth for 2 minutes" is mostly because the tooth paste should have time to work on the teeth. I.e. Not to remove physical "dirt". In which case you should keep the paste on for two minutes even with this device.

Disclaimer: I never checked on the 2 min fact, but do think a dentist would know.

<comment><USER23> Nope, it is to make sure you do a "good job" brushing. Increasing time increases plaque removal.

[http://skeptics.stackexchange.com/questions/6479/do-i- have-t...](http://skeptics.stackexchange.com/questions/6479/do-i-have-to- brush-my-teeth-at-least-3-minutes-each-time)

</comment></comment><comment><USER24> > One of the great advantages of 3D Printing is the ability to design and > create customized versions of everyday objects.

This is not a customized version of an everyday object. This is a completely new object nobody has ever made before. Calling it a toothbrush is like calling an automobile a "horseless carriage".

<comment><USER25> An automobile is a horseless carriage. Many new objects that displace older objects are refereed to initially in reference to the established product. This serves the same purpose as a toothbrush, so its entirely sensible to refer to in terms of a toothbrush. Calling it a "whizgonger" or some such is neither descriptive or useful for anyone.

<comment><USER26> It's a teethbrush!

</comment></comment></comment><comment><USER27> Anyone with half a brain knows no self respecting density will sell this.

The number one they teaches kids is that you don't brush food into the gum... So any magic brush that works by biting will push the food to where? Hint: it's not away from the gum.

Would love if they worked around this problem though...

</comment><comment><USER28> This is interesting but a pointless optimization. I use a cheap brush and have no dental issues to date. Also, for those of you like me who will criticize this -- make sure your small business isn't a virtual analogue of this.

<comment><USER29> You're making a weird assumption that because you have no dental issues nobody does. Or that because a cheap brush is good enough for you it's good enough for everyone.

33% of Americans have untreated tooth decay (CDC). An optimization may be just what the average American needs.

</comment></comment><comment><USER30> My dentist told me that the most important part of brushing wasn't the technique or type of brush, but the time. The two minutes of fluoride contact is the most important part of the process, and this product removes that.

</comment><comment><USER31> Interesting, they're using 3DSystems' Visijet material which is approved for use in 'guides.' I wonder if they're safe to put in your mouth every day?

Very few 3D Printing materials are actually safe for consumption.

</comment><comment><USER32> Now just give it some rigidity and attach it to a Sonicare handle. The high frequency vibration and resultant cavitation kill bacteria (or so says some papers on it).

</comment><comment><USER33> This is technology fixing a problem that doesn't exist.

<comment><USER34> have you ever been to the denist and they ask you to focus on some area of the mouth? for perfect brushing, yes, this is a solved problem. however, I don't think everyone is a perfect brusher.

</comment></comment><comment><USER35> It's not about how much absolute time this brush saves, it's how much it saves relatively in comparison to the status quo and in that way it is just 30 times better. If you deduct the higher costs and whatever you might lose some of that, but you will still be above the magic "10 times better" threshold that a product needs to be to beat competition.

</comment><comment><USER36> Seems a lot like the razor for all of your facial hair: [http://www.shavingstuff.com/archives/011601.php](http://www.shavingstuff.com/archives/011601.php)

</comment><comment><USER37> As nice as this sounds, it's going to take me a while to get used to using a >refurbished< toothbrush.

</comment><comment><USER38> Great idea. Will probably do well on late-night shopping channel shows.

</comment><comment><USER39> Next: cut out the dentist

<comment><USER40> Please don't...my wife's a 4th year dental student :(

</comment></comment><comment><USER41> I bet you this thing doesn't get your teeth clean at all.

It's also not for people with TMJ.

<comment><USER42> Thats what I was thinking, for me this is a bit in the "I can't believe they invented it" territory. A 3d printing curiosity.

<comment><USER2> May the great Maker forbid people from using their imagination to find better solutions to current problems with new technology.

<comment><USER41> In this case, I have doubts they have improved on anything. Where did you get the impression anyone is against the idea of finding better solutions in general?

</comment></comment></comment></comment><comment><USER43> What about toothpaste?

</comment><comment><USER44> this is the most unappealing thing i've seen this year</comment>


Comparison of Erlang Web Frameworks - <AUTHOR> http://www.chicagoboss.org/projects/1/wiki/Comparison_of_Erlang_Web_Frameworks

<comment><AUTHOR> Bias may be injected due to being from one of the frameworks.

See also:

[http://stackoverflow.com/questions/1822518/current-state- of-...](http://stackoverflow.com/questions/1822518/current-state-of-erlang- web-development-frameworks-template-languages)</comment>


Duped 'Dads' Aren't the Only Ones Hurt by Paternity Fraud - <AUTHOR> http://www.noozhawk.com/article/diane_dimond_paternity_fraud_fatherhood_20150829 <comment><USER2> _Anita, scared and broke, puts down the name of a long-ago boyfriend and a phony address. When Boyfriend doesn't show up in court (because how could he? He was never notified) an automatic default judgment is entered and he is on the hook for 18 years of child support._

Woah, this happens??? This doesn't sound logical or sensible in any shape or form. How can there be a "automatic default judgement" if he wasn't even notified? What is stopping the girl from giving some/any guy's name and address in this case?

<comment><USER3> _> Woah, this happens???_

Why are you surprised? Middle-to-low income men are not represented by any powerful lobby or movement (because that would be branded misogynistic and/or racist).

Want more surprises? Compare what US companies are allowed to put into food to their EU counterparts.

<comment><USER4> > Middle-to-low income men are not represented by any powerful lobby or > movement (because that would be branded misogynistic and/or racist).

Lots of things that would be (and are!) labeled misogynistic and/or racist are represented by powerful lobbies and movements, so the logic there doesn't follow. It may be that middle-to-low income men are not represented by any powerful lobby or movement, but if so, the reason you offer is _not_ the reason why.

(The reason why is probably that middle-to-low income men don't, as a class, necessarily have lots of free money to devote to political causes, and, to extent that people in that class do devote money to such causes, they don't do so around their identity as "middle-to-low income men".)

</comment></comment></comment><comment><USER5> This is nothing new. Men have been complaining about abuses in the family court system for years. States receive federal dollars each time they collect child support so they are really aggressive about finding potential payees. Get a vasectomy.

</comment><comment><USER6> Great article.

Kind of sad that the way to bring light to the problem of duped dads is to highlight how much it also hurts women though.</comment>


Github is investigating reports of service unavailability (16 July, 18 10:34AM) - <AUTHOR> https://status.github.com/messages <comment><AUTHOR> It was momentarily back up for me. The new message says "We are investigating reports of service unavailability." hence the title change.</comment>


Exploring Lisp on the JVM - b-man http://www.infoq.com/articles/lisp-for-jvm

<comment><AUTHOR> In the past I have used Kawa and SISC Schemes a lot: good projects. However, Clojure has the momentum, community, etc.

I wrote a Scheme book for Springer-Verlag back in ancient history and I still use Gambit-C a reasonable amount and Racket is pretty cool also. So, I am not biased against Scheme, I am just saying that Clojure might be a better place to start if you want to experiment with Lisp languages on the JVM.

</comment><comment><USER2> > Armed Bear Common Lisp ( www.armedbear.org/abcl.html) is a reasonably > complete implementation of the Common Lisp standard, but it suffers from > that the distribution can't be built unless you have another Common Lisp > system installed, which may be a problem for beginners.

That's not true at all. ABCL can be built with Ant.

</comment><comment><USER3> This article is like a time capsule from the pre-Clojure age.

<comment><USER4> Well, it is from 2008. And it does mention Clojure and explains why it's not going to discuss it ("still in an exploratory beta-stage right now", which I'm guessing was true when the article was written) but says it's "definitely a project to keep your eyes on going forward". So if you meant anything other than "This article is from 2008", I think you may not be being quite fair.

<comment><USER3> It's not a criticism of the article, but the article does seem a lot less relevant now.

</comment></comment></comment><comment><USER5> OurDoings, <http://ourdoings.com/> the photo site designed for your memories, is implemented in Kawa Scheme.

</comment><comment><USER6> Yeah, ABCL is solid on the JVM. I am still struggling to get it on Android though.

<comment><USER7> I don't know how ABCL works, but Dalvik uses it's own byte code so unless ABCL compiles to raw Java, it won't work for Android.

<comment><USER6> ABCL has both an interpreter and a Compiler.</comment></comment></comment>


Show HN: Using public humiliation to keep you from being late - <AUTHOR> http://www.bettermeapp.co/

<comment><USER2> been looking forward to this new update.

</comment><comment> Khajagk</comment>


Ask HN:What are your daily reading sources? - <AUTHOR> Where do you read everyday about things you are interested in . Tech, startups etc? <comment><USER2> I have hacker news and the /r/programming /r/cpp also /r/netsec subreddits, That's all.

</comment><comment><USER3> HN, NYT, Python Weekly newsletter, Data Science Weekly newsletter.</comment>


I created the exact same app in React and Vue. Here are the differences - <AUTHOR> https://sunilsandhu.com/posts/i-created-the-exact-same-app-in-react-and-vue-2020-edition <comment><USER2> Not a fan of the setup function in Vue 3. I hope we can continue to do like in Vue 2.</comment>