Recreating the THX Deep Note - EarSlap - <AUTHOR> http://www.batuhanbozkurt.com/instruction/recreating-the-thx-deep-note <comment><USER2> Turn it up! Turn it up!

<http://www.youtube.com/watch?v=K3_HHZFi0As>

On a more serious note, I'm really a fan of SuperCollider (especially for it's smalltalk-like dynamic language). It's incredibly good for sound design and real-time experimentation.

But for the best quality output, Csound (<http://www.csounds.com/>) is hard to beat. Here are some people who tried to recreate the same effect in Csound:

[http://csound.wordpress.com/2008/08/08/the-thx™-sound- from-c...](http://csound.wordpress.com/2008/08/08/the-thx™-sound-from-csound/)

[http://joesprojectblog.blogspot.com/2008/03/thx-deep-note- ch...](http://joesprojectblog.blogspot.com/2008/03/thx-deep-note- challenge.html)

<comment><USER3> I like this one- [http://www.youtube.com/watch?v=lMchJfsIj7E&NR=1](http://www.youtube.com/watch?v=lMchJfsIj7E&NR=1)

</comment></comment><comment><USER4> I find the note at the end about SCTwitting the most fascinating. Music represented as code confined to a character limit of a broadcast medium...just wow.

I know a few digital poets who will have a field day with this. Thanks for sharing!

<comment><USER5> Thomas Dolby apparently made a living for some years composing cellphone ringtones, which I think also have to fit into a small amount of space and be synthesizable in real-time on a limited processor.

<comment><USER2> They were almost certainly prerecorded. Or he could have composed some MIDI tracks.

But seriously doubt that they were synthesized in real-time.

<comment><USER5> Playing a MIDI track involves synthesizing waveforms in real time, so I'm not sure what you're saying here. There have been plenty of phones that supported monophonic or mildly polyphonic ringtones without supporting full PCM, and plenty more that supported PCM samples but have limited space, kind of like old .MOD files.

<comment><USER2> I'm saying that they probably use a general midi sound bank, with sample sounds and limited control. You can only choose instruments from a predefined palette.

I doubt you could generate your own waveforms, apply your own custom effects and so on.

I never researched much into MIDI ringtones so I might be wrong.

</comment></comment></comment></comment></comment><comment><USER6> This reminds me to ask, is anyone aware of any beginner-friendly books on audio synthesis? Be it using csound, supercollider, or chuck, just something that explains concepts reasonably well.

<comment><USER2> For SuperCollider there's a book which is not out yet (I have read a draft and found it excellent, especially for beginners) but it should be out soon.

You can try to send an email to one of the authors: [http://www.music.utah.edu/faculty/faculty_a-z/david_michael_...](http://www.music.utah.edu/faculty/faculty_a-z/david_michael_cottle)

He used to send a pdf of the draft version if you asked him, but since the printed book is due soon (by MIT press) I don't know if this is still true.

There's also 'The Theory and Technique of Electronic Music' by Miller Puckette (the author of Pure Data):

<http://crca.ucsd.edu/~msp/techniques.htm>

The examples are, obviously, in Pure Data. But it is an excellent book and all the concepts can be applied to any synthesis language/tool.

For Csound there's 'The Csound Book' by Richard Boulanger (MIT Press):

<http://csounds.com/shop/csound-book>

This is also excellent. Disclaimer: the author is a friend.

<comment><USER7> My old roommate was recruited to write one of the chapters (on language internals and his CocoaCollider bridge), but last I heard MIT Press had dropped the project.

IIRC it would have been the first supercollider book.

</comment></comment></comment><comment><USER8> If I was teaching someone how to program and wanted to get across the idea of incremental development, this is the first example I would use. You can just _hear_ at each step how he's getting incrementally closer.</comment>


DigitalHax – Allows you to recover data from "Destroyed" Digital Ocean VM - <AUTHOR> https://github.com/gregimba/DigitalHax <comment><USER2> Hi, Ben from DigitalOcean here - just to give you guys an update. This method will no longer work on a newly created droplet.

We've now default scrub_data to ON for both web interface and API as we look at making this process permanent. Additionally, we've re-engineered the way we're provisioning disks and access to previously written data is no longer possible.

We've taken all steps in favor of security currently and will build a permanent solution that favors security and caution moving forward.

<comment><USER3> I am a bit surprised I have heard absolutely nothing about this via. email (I'm a customer). From what I remember of the last security incident I did not get an email until way after it had become publicly known.

You guys really need to become better at communicating with your customers when I can look at the front page of HN one day and see some issue with your services, DO people commenting and no mail in my inbox.

The priority should be to alert customers there is a problem, and most importantly to fix the problem.

And sending a mail a week or a few days later is really not okay, a rapid response on your end to notify us is needed if we are going to be able to quickly take necessary precautions.

</comment></comment><comment><USER4> So, this is going to overwrite lots of data on the block device you're trying to recover data from, resulting in a lot of repeated information and erasure of recoverable stuff. The correct answer is to redirect the output, and make find.sh output the gzipped data so you can pipe that to your local disk never touching the remote end.

Edit: Here's the code. [https://github.com/gregimba/DigitalHax/pull/1](https://github.com/gregimba/DigitalHax/pull/1)

<comment><AUTHOR> Ok. I really only know enough to be dangerous im 17. Looks like I have some changes to make though.

<comment><USER4> Stick with it! I didn't know about shell builtins like 'read' when I was 17 - you're already ahead of millions in the game out there.

Read a lot of other people's code to see how stuff is done, it helps a lot.

</comment></comment></comment><comment><USER5> This is a cute PoC of how much easy it is, but with freely available forensic tools like, say, PhotoRec is possible to extract much more meaningful and diverse data (entire files, images, database files...) that by simply running strings.

So, don't take it as the maximum damage one can get.

</comment><comment><USER6> how long does dd take? Could use an estimate. Ran dd for around 10 minutes this morning and got 500,000 lines, and it was still running.

update: finished in around 12 minutes. out.txt is around 10gb.

update: out.txt is around 54 million lines from wc -l out.txt. I'm using less with command [line number]G to poke around. I have an NYC1 droplet, and there's a lot of junk not mine.. text in other languages and python which i don't use

<comment><USER7> Thanks for the followup about how long dd takes. I was wondering as well.

May I ask, which droplet type were you running dd on? Micro?

<comment><USER6> no problem. The command "dd if=/dev/vda bs=1M | strings -n 100 > out.txt" in find.sh, which is the same as the one first mentioned today morning [https://github.com/fog/fog/issues/2525](https://github.com/fog/fog/issues/2525). $20/month droplet

<comment><USER7> Thanks! I wonder how long it would take for someone to scrub their VM manually using dd before terminating it? Maybe the same length of time? 12 minutes seems a pretty reasonable amount of time, but since it's an SSD the writes could take >3x longer than the reads.

<comment><AUTHOR> The other thing you could do instead of trusting Digital Ocean you could use shred on your sensitive files before you destroy the droplet.

<comment><USER7> That's true, but if you've already rm'd a bunch of sensitive files, their data unfortunately can't be shredded. So you'll have to make sure you've always used shred for everything since the beginning, which is good practice but probably rare.

</comment></comment></comment></comment></comment></comment><comment><USER8> As a user of Digital Ocean (amongst others) I find it hard to get too excited about this. When I destroy a droplet (VM) I already have the option to scrub the discs before deletion.

If I choose not to use that (and I never have on any of the hundreds of machines I've created and later torn down) it's because there is nothing of any sensitivity on them. If someone wants to resurrect gigabytes of entirely boring and transient log data from what I was last doing, they're welcome to!

I can only really see this being a concern for people who were storing sensitive information on a cloud instance which they then removed and chose NOT to scrub. In which case, they already have larger issues than this one. "Problem with user, not with cloud."

<comment><USER9> If you're in the business of designing systems for users, I hope you'll reconsider your viewpoint. I'm a Rails developer, and the attitude you've adopted is very familiar to me. It's a kind of "trust your users" attitude that was prominent in the Rails community for a long time. Unfortunately, that led to several very, very ugly security issues.

What you're saying is that insecure defaults are OK, so long as they're obvious. The problem is that things are rarely obvious to 100% of the people, 100% of the time. A company the size of Digital Ocean has enough customers that if even 5% of their customers misinterpreted this option, a "significant" number of people would be affected.

Consider, for example, a user who sees the destroy page and assumes that "scrub" data is some extra, optional precaution, because "destroy" can't possibly mean "erased but recoverable". I mean, it says _destroy_ , right?

Just a few days ago, someone posted a link to a blog post titled Toyota Manufacturing Principles. One of the principles mentioned in that post was poka-yoke[1]; otherwise known as mistake-proofing. A tenant so important that Toyota -- one of the most successful industrial companies in the world -- has made it a core principle.

One of my business partners has a favorite catch phrase: it's never a problem until it becomes a problem. It's his way of pointing out that just because something hasn't happened to you yet doesn't mean it won't be a problem if it does. Speaking as someone who has made their fair share of mistakes, I'd caution you to consider that advice carefully.

1: [http://en.wikipedia.org/wiki/Poka-yoke](http://en.wikipedia.org/wiki/Poka- yoke)

<comment><USER8> Very fair point, I do see what you're saying. I had a conversation just recently about some software that a third party had developed for us, which in one use case would basically present the users with a question saying, in effect, "Do you want to reflect the change you've just made in all places where it matters, or leave it wrong in some of them?" \- complete with option buttons Yes, No (!), or "Always No" (!!!)

As I said at the time, "that's a stupid option and a user should never be given that choice". So, I see where you're coming from, your point is well made. :)

</comment></comment></comment><comment><USER10> This is a case where only "aggressive full disclosure" got a company to respond. Which is why I'm generally only willing to go through "responsible disclosure" for companies which have shown themselves to be reasonable in the past, or in exceptional cases where the vulnerability is impossible to end users to mitigate, and/or causes exceptionally grave harm.

</comment><comment><USER11> In what circumstances will this work? Are you recovering data from other customers? If so, will this work even if the other customer has deleted their VM using the recommended procedure?

<comment><USER12> It only works if you're lucky to land on a drive that hasn't been zeroed when the previous VM was deleted.

<comment><AUTHOR> Yep. Hopefully this will encourage digital ocean to change the default or at least warn people.

<comment><USER13> [https://digitalocean.com/blog_posts/transparency- regarding-d...](https://digitalocean.com/blog_posts/transparency-regarding- data-security)

<comment><USER14> Well that just made my brain explode. This is going to make it that much harder to argue that public clouds take security seriously. I'd love to see an example of what data they think is fine to leak, since that seems to be their performance strategy.

<comment><USER15> Indeed. The non-scrub option simply should not exist. Are there use cases for non-scrub? Yes. Are the risks worth it? No, at least in my opinion.

Forget to check that box? Oh well, better hope the next droplet doesn't go and read your data.

Moderately competent developer doesn't realize the implications of not checking that box? Oh well, better hope that developer didn't have too much sensitive data on the droplet.

Etc etc. Security is the big area where the default should be to err on the side of caution - often removing choices that are simply too dangerous (when, for example, the tradeoff is a tiny amount of performance gain).

I say this all as someone who likes and is a customer of DO. I am disappointed.

</comment></comment></comment></comment></comment></comment><comment><USER16> Approximately how much would it cost in DigitalOcean time to cover 10%, 50%, 90% of their data?

</comment><comment><USER17> Instead of installing apache2 you might consider just using scp.

<comment><AUTHOR> I figured SCP would be slower and but now that I think about it your probably right.

<comment><USER18> scp will always be slow because of some built in limitations. It's not your data anyway, so toss the ecnryption and just use netcat.</comment></comment></comment>


Work remotely with anyone, anywhere - <AUTHOR> http://www.hubbot.io/

<comment><AUTHOR> Hello Everyone, Team communication is hard everyone knows about it and we also had a lot bad experiences having collaboration with distributed team so we build Hubbot that makes communication ease of use & super fast for globally distributed teams and improve collaboration by providing instant voice & video chat, easily searchable and instantly accessible documents, realtime shared editing, threaded discussion stream and feedback on documents.

Hubbot allow to assign task, manage team and easy way to connect with great Integrations list to improve your workflow.

Right now i m trying to get some feedback on How we can increase distributed team workflow better? What are the problems they face with remote communication?

<comment><USER2> Looks awesome.</comment></comment>


Show HN: Mixtape Dating - <AUTHOR> https://mixtape-dating.herokuapp.com <comment><USER2> It'd be cool to be able to re-order songs after adding them. The order I think of tunes isn't necessarily the order of listening that works best.

</comment><comment><USER3> Cool! I made a playlist. It would be neat to connect it to the Youtube API and search for songs in the app</comment>


Ask HN: Can't get signups. Any advice?  - <AUTHOR>

Hi there.  I'm a female (not that it matters!) single-founder startup and I have created a site and system called Gallereo - www.gallereo.com.   I am getting a good number of visitors to the site but really struggling to get people to sign up, even to the trial.  I have tried various things but I'm not sure if I'm too close to this as a project and if there is something simple and stupid I am doing wrong.  Any advice on how I could improve the visitor -> signup ratio would be wonderful!    Thanks in advance.  Emma <comment><USER2> I think there are a few problems here.

1\. Your positioned for the Art market but your site looks so corporate. Have a look at the design for smugmug.com (targets photographers) and carbonmade.com (targets artists).

I'm guessing your market may assume that your a fly-by-night operator who bought a template from somewhere and isnt really serious about the market.

This is just my opinion - you can easily A/B test this with another design.

2\. There is no testimonial on your homepage. This is not good.

3\. You can only figure this out if you start A/B testing. There are a lot of products out there which will let you run experiments without changing your homepage. So start doing that.

<http://blog.kissmetrics.com/landing-page-design-infographic/>

4\. I should be able to build the site first before logging in.

<comment><USER3> Based on the description of the design here I was expecting it to be a lot worse. The design is okay, but yes, A/B tests will let you know for sure.

But the building-the-site-first idea is tops particularly because people can get worried that (1) it will be too hard, or (2) there won't be a theme/design they like. Instead of trying to prove it with words/pictures, just let them start. At this point, even giving your email address away is a commitment, not even just CC info.

</comment></comment><comment><AUTHOR> I just wanted to say a big thank you to everyone for taking the time to comment, your feedback has been excellent, and really gives me something to think about in pushing Gallereo forward.

Thanks again,

Emma

</comment><comment><USER4> It seems to me you're trying to break into a field where most people already know what to do (or think they do): art & photography. Maybe branch out into other areas too? Maybe target writers who want to sell their ebooks -- setting up that is a PITA, I can tell you as a writer. Otherwise, I like what I saw.

EDIT: One other thing, put a yearly fee on it instead of the $7.99/month. Monthly charges seem to inspire uncertainty in people.

<comment><AUTHOR> Hi, thank you very much for your comment. We've actually just started experimenting in terms of monthly / yearly price structures. It was previously set at $99 per year, and we changed to $7.99 per month to see if it made the difference. I'd be interested to know what other people think about that.

<comment><USER5> 7.99 a month is a much easier sell.

Perhaps offer to archive the site and site name for x months if someone cancels.

</comment></comment></comment><comment><USER6> I took a quick look at the signup process. My question to you is do you need details like Company/Organization (optional), First Name, Last Name, and even Email?

I'm not sure how the software works, but do you feel that these details are necessary for the initial signup process?

The reason I ask is that a longer signup process, and the more details you ask for right off the bat, the more daunting it is to users. If it's not much trouble, I would suggest stripping out those that are not absolutely necessary to allow for users to signup quickly and easily and begin playing around with the actual features your system provides them with.

You could always request these details, along with a payment option, once the 30-day free trial has ended in order to sign them up as a paid user.

</comment><comment><USER7> I'm not your target market, but I wasn't ready to buy on the front page ("30 day free trial"). _I_ would prefer "only E5.99/month / see our featured galleries / sign up for our 30-day free trial" - especially since I was pleasantly surprised by both price and quality.

I'd strongly consider replacing your header image by something like a small version of (a/this month's?) featured gallery - they look pretty good.

Finally, if you are having trouble finding customers, a referral system seems to help some sites (Dropbox offers free storage; you could offer one free month for every referred customer that pays for a third month, or somesuch.)

</comment><comment><USER5> My friend is working on her MFA in painting and I assure you this product is necessary. I had to build her site and had many requests for her friends.

As this product is for the non-techie, make it simple: no sign-up to use. Let them jump right in. You're already offering a month free. Your "Build Your Site Now" button is deceiving. It takes you to a looooong form. Let them get started immediately. After a few steps of building, request an email to save their work. Once you have an email, you can request more info later.

Good luck. Looks great.

<comment><AUTHOR> Hi, thanks, much appreciated. Funnily enough, we've just been working with a lot of students based in the UK on building free websites for their end of year shows - we found we got a lot of great feedback from them as a consequence.

The sign up form is something that we should definitely look at if it looks daunting or too long, and the wording for the buttons, so thanks for your comments there! Any suggestions as to what you think would make a good call to action in this instance?

Emma

<comment><USER5> The "Build Your Site Now" is perfect IMO if one can in fact build immediately.

I want to say that it looks like a really good product and the price point is reasonable/competitive.

For a stronger call to action, I'd remove the ARTNews box and the start building box next to it.

The navbar is very busy too for a landing page.

Maybe on the Build Now button drop the no-credit card required and 30-day free trial - So maybe it's not perfect :) - No reason to make them think about money if they're getting the free month. Hit em up with when they save their first build.

Put the price and free month info in the Why Choose Gallereo box.

</comment></comment></comment><comment><USER8> I think your design is fine, though could probably use a bit more nuance to identify with your market.

I think the thing I'm missing is images of sample sites, right on the main page.

The "latest news and gossip" sends a strange message, makes it feel like I'm on a gossip site.

The sign up process could use a bit more attention. It feels like a contact form.

Overall, I think it looks like a great start though.

</comment><comment><USER5> Emma: you're sending passwords by email in plain text. Please change that. <http://goo.gl/7ijUw>

Are you storing them in plain text too? [http://www.codinghorror.com/blog/2007/09/youre-probably- stor...](http://www.codinghorror.com/blog/2007/09/youre-probably-storing- passwords-incorrectly.html)

</comment><comment><USER5> Just signed up - if you can switch the process so I can build the site first I think you'll really improve conversion. That was so simple to build, you'll have people hooked.

Side question: are you implementing payment processing so they can actually sell their work online?

<comment><AUTHOR> Brilliant, thank you!

We do have payment processing for people who sign up so that they can sell their work. We have a range of payment gateways available from Paypal and Google Checkout, right through to Credit Card processing for anyone that wants it.

</comment></comment><comment><USER9> I think you need to start actively selling your product. Try find related businesses or business people that aren't online and try sell them your product.

</comment><comment><USER10> You have an intimidating signup form. You really just need email and password, everything else will be gathered when they pay you later on anyways.

Creating a system to let people build without an account yet might be hard to work into the current app workflow, so maybe create a demo account that resets every 30 minutes or something so they can login and see what they're getting themselves into without committing to anything?

</comment><comment><USER11> Maybe your not getting the right visitors? Do you advertise or SEO. Any Facebook Fan Page? You can have 1000s of visitors but if they aren't looking for what your doing its pointless, get the exact user you need to your site.

Also the site looks pretty good, I like it. Just find a way to market it.

<comment><AUTHOR> Hi there, you make a great point, and SEO and marketing is something that we're trying to ramp up at the moment. We also have a facebook fan page which again is something we're working on building fans for.</comment></comment>


Idiot CEOs - <AUTHOR> http://www.venturecompany.com/opinions/files/idiot_ceos.html#unique <comment><USER2> It's an interesting exercise to ask what the thesis of this article is. It's not that all founders who take VC are idiots. He's not saying that Larry & Sergey are idiots-- and implicitly that he's smarter than them. He hedges pretty conspicuously there. All he's saying is that some VCs are bad. But that is hardly news. Every line of work has some people who are bad.

Imagine the corresponding article about roofers. It would be called "Idiot Homeowners," and say, as if it were some great discovery, that some roofers are bad-- that they overcharge you, and then do bad work as well.

<comment><USER3> "Founded in 1998, The Venture Company is a catalyst for disruptive innovation; helping entrepreneurs, corporations and investors innovate."

I noticed a similar article yesterday. I'm skeptical that Hacker News will weather the upcoming storm once all of the professional-entrepreneur-advisers decide to start drumming up clients here.

<comment><USER2> It's nothing new. In fact it used to be worse. Remember, HN started out as Startup News.

</comment></comment></comment><comment><USER4> \- Exorbitant loss of upside Great entrepreneurs are known for their passion to pursue their dreams at virtually any cost, and sub-prime VCs smell their blood and desperation. Those companies become owned by VCs quickly and because of the investors' lack of relevant operating experience yields a further deflation of the valuation of the company. We've seen many companies with end- game founder stock way below 5%, which is unlikely to become life-changing. So, why would you take the scrutiny of the CEO job with that outcome in mind?

Always think about that, is it better to own 100% of a company worth 10 million bucks or 5% of a company worth 200 million? I would rather own completely the smaller business and have fewer people to answer to and focus on a more niche (often times more interesting) problem.

<comment><USER5> Except that if you own 5% of a company worth 200 million you should be able to quit and walk away with 10 million (for the standard definition of "own" and "worth").

If you own a company worth 10 million you can't really quit. If you sell it, chances are that the acquiring company will want you around for years so you'll be in the above situation but with golden handcuffs.

<comment><USER6> You say that if you sell a 10MM company, chances are you'll be handcuffed to the acquirer. This seems like pure supposition on your part. I know plenty of people who wound up handcuffed to their VC-backed team, due to vesting, incentive packages issues after shatteringly bad valuations, or just terms and conditions of the deal.

The same forces seem to be at play in the 200MM case as in the 10MM case, with the significant difference that in the 200MM case, the interests of the board aren't aligned with the interests of the founders.

This is all a big moot point, of course, because you aren't going to build a 200MM company.

<comment><USER5> It's not supposition, I'm speaking from experience. For a tech startup, 10M is a price point at which you have a small team and a product with a few man- years of development behind it. Acquiring the product without the team is only worthwhile when the product is a brand. Otherwise, the team/product combinmation is what gives the company most of that value.

To name one example: in 1999 my company paid $13M for a company with 11 people, most of them developers. The company failed to offer them an interesting package so they quit after the acquisition. A team on our side was left to deploy the software. After a few weeks we decided it would be easier to develop the same functionality from scratch.

On the other hand, the assumption was that you 'owned' 5% of the 200M company. If you are handcuffed, then you own less. If you owe the bank 70% of the value of your house, only 30% is yours. Same with vesting.

<comment><USER6> I respect your experience, but I don't understand how your example has anything to do with $13MM vs. $200MM. In neither case is the CTO, VP/E, or MTS more or less necessary to the acquiring company. You can "own" 5% or 100% of 200MM, but if an acquirer thinks they need you to execute on the acquisition, they're going to keep you, right?

<comment><USER5> The idea is that if you own 5% of a company worth 200M and you quit, the remaining 95% ownership of the company cares enough about it that they will replace you and move on. In this scenario there is no acquisition, and you walk away without making the company lose any significant value.

I've seen that happen: one of the fully vested founders of the company I worked for left on a sabbatical. After six months he decided he didn't want to come back. By then all his functions had been taken over by other people. He sold some of his stock, kept the rest and went back to grad school.

The point is not so much the size as the fact that you can walk away more easily if you own a small fraction of a company without causing a significant drop in value.

</comment></comment></comment></comment></comment></comment><comment><USER7> I've only skimmed the article, but one bullet point caught my eye:

 _\- Low salary

Opportunity rather than salary is top of mind to entrepreneurs, but that changes quickly when they struggle to support their families and pay mortgages. $175K is not a salary that leaves much on the table, especially not when you live in the expensive area around Sandhill Road._

</comment><comment><USER8> I do find it interesting that for all the griping and sniping at sub-prime VCs and the idiot CEOs they fund, he doesn't mention one single example of either.

<comment><USER9> That's just good business.

</comment></comment><comment><USER10> I worked with 2 VC's, one was an idiot and the other was great. It's like anything else.

As for $175/bay area, what he really means is live like you are 'supposed' to live if you are a hot CEO -- live in the right neighborhood, send your kids to the right schools, take the right vacations at Tahoe, etc. That may sound silly but it's part of the networking needed to play that game among that crowd.

</comment><comment><USER11> _"$175K is not a salary that leaves much on the table, especially not when you live in the expensive area around Sandhill Road."_

Is he serious? I'll bet money gets _really_ tight when you factor in the silver cutlery, butler, and other essentials.

<comment><USER4> note he says "support family", it is easy to be a bachelor on a lot less but 175k if you want to do any kind of saving for retirement, saving for your kids education, and paying for healthcare is not much. So if you want to look your kids in the eyes and say "hey I'm gambling on something for my own personal fulfillment rather than giving you the opportunities that I could easily if I had kept my old job" then go right ahead but its difficult for others to do. Thats why I want to my whole risky-taking entrepreneurship thing BEFORE having kids so you don't run into that quandary.

<comment><USER11> If you can't support a family on $175k, you're doing it wrong.

<comment><USER12> You seem pretty sure of yourself, and some differing data points would be nice to hear. Are you raising a family in the Bay Area?

<comment><USER13> There are quite a few poor families making a living in the Bay Area that happen to have other mouths to feed too. If you want more data points, come visit my neighbors and ask them how they do it. The cost of living here is not as bad as you might think.

<comment><USER12> I probably should have been more clear - are there areas in the bay area with good schools, and homes that require significantly less earnings than 175k per year (say, 125k?) And I'd like to not spend 2 hrs commuting, because spending time with my children would be nice. In my experience, you have to pay a lot more here to get the same quality of life that you could find elsewhere.

I live in the Bay area, and am raising a family here. It is expensive - 175K/yr would probably buy you the same standard of living as 80k/yr would in Ottawa, Canada, where I grew up.

<comment><USER6> It's not as if it's hard to actually figure out the cost of living difference between Ottawa and San Francisco. They're ranked all over the place. Ottawa and Chicago are neighbors in the rankings on the first page of the Google results. $80,000 in Ottawa therefore approximates $108,000 in San Francisco.</comment></comment></comment></comment></comment></comment></comment>


Why junior developers are learning bad habits from Angular - <AUTHOR> https://javascriptkicks.com/stories/3718 <comment><USER2> >Many would not even see the problem here, and just as children don't know cars can hurt, juniors don't know just how destructive this anti-pattern can be to performance, separation of concerns and long term code base maintenance.

Yup, I don't get it. I guess not only am I eternally doomed to be a junior dev but also am being compared to a child, a monkey typing at a typewriter, but also someone who doesn't know JS at all. Feels good man.

Other than some horribly obtuse undefined checking, there's no explanation of what the problem is. The argument seems to be that the controller depends on $scope. I... I thought that was the point. From the first line of documentation on controllers:

>In Angular, a Controller is a JavaScript constructor function that is used to augment the Angular Scope.

If the idea is that this is a bad habit to bring elsewhere, fine. Some more explanation would be nice, but whatever. But the implication is that this is a trap within the context of Angular dev itself.

<comment><USER3> The thing that struck me about it was that the $scope.displayName() function shadows itself by setting $scope.displayName again:

            $scope.displayName = function () {
                if ($scope.anonymous()) {
                    return;
                }
                $scope.displayName = $scope.name;
            };

I have no idea how that's related to Angular, though. It looks like it's just bad programming practice.

<comment><USER4> I agree completely. You wouldn't do this any ANY language let alone Angular. However, I get he is trying to make a point that junior developers are using the $scope too trivially therefore causing slow performances, but this can be easily overcome by just incorporating better conventions into your codebase.

</comment></comment></comment><comment><USER5> (sorry if this comes off a bit snarky)

"Overuse of the eventing system ($watch, $emit, $broadcast) leading to performance problems and memory leaks and not realizing it or being able to debug it"

Blindly overusing most features in frameworks or libraries can cause performance problems. Which memory leaks?

"Writing Controllers and Directives that take dependencies which make them nearly impossible to test."

Doesn't dependencies in general make any code harder to test?

"Views that are heavily dosed with logic - but more on that later"

I certainly don't feel my views are dosed with logic? Which kind of 'logic' are you referring to here? Is there something preventing you from moving your logic outside of the view?

"Their first experience of DI is quite often that in Angular and it's horribly broken. Since the "patch" which fixed the minification issues, it's still really just a square peg in a round hole with woeful support for scope and lifetime and features which most DI gives you for free such as child containers. They end up hating DI and shy away from it on other projects."

This seems like wild speculation here, as well as not being very specific (how is it broken?). I'm sure DI in Angular could have been done in a more elegant way (I have no idea how), but I don't seem to run into any problems.

"Strange bugs that (when called over) have us all scratching our heads until one of use realizes - oh yeah, sorry we forgot to mention that pretty much everything passed around is global, and Directives etc. aren't namespaced, so I see what's happened - you've got a naming collision there"

Not sure what to respond here - you had a bug in your code and discovered it was due to naming collision. Do you run into this daily? I've run into 'strange bugs' or at least hard-to-diagnose bugs in almost every framework or library I've used.

None of these issues seem especially unique to Angular. I'm not saying Angular is a perfect framework, but my own experience have been mostly pleasant, and I don't feel that there is anything in particular in Angular vs. other frameworks or libraries that encourage bad behavior - juniors or seniors.

<comment><USER6> "Blindly overusing most features in frameworks or libraries can cause performance problems. Which memory leaks?"

Binding to event emitted by an object on another object, then deleting the receiver, can cause a memory leak if you don't unbind first.

<comment><USER7> iOS has the exact same situation for it's notifications framework (essentially, observer pattern).

From what I've seen, consistently across frameworks that support the pattern, that you need to de-register your listener before releasing it from memory.

Pretty funny to think, I'm a "junior" developer and even I know that you have great power, but also responsibility, in the observer pattern.

</comment></comment></comment><comment><USER8> The page is not loading properly for me (on a Windows laptop with Chrome). When I use the given link I get "500 - InternalServerError Something went horribly, horribly wrong while servicing your request. We're sorry :-(" and when I go via javascriptkicks.com it keeps loading and never completes.

<comment><USER9> I somewhat assumed that the 500 error was evidence of the post's title, heh.

<comment><USER10> Seriously. Why do you need to run a shitload of JavaScript just to display a damn article.

<comment><USER11> Bad habits. Those JavaScript kids nowadays ...

</comment></comment></comment></comment><comment><USER12> There was a lot of commentary on my first post [https://javascriptkicks.com/stories/2657](https://javascriptkicks.com/stories/2657) about not detailing enough why I think Angular isn't good for junior programmers asking for more detail. Here it is.

One of the big motivators for this follow-up post is due the the cries of FUD. Of course it's just my opinion, but I like to back my opinion up with facts if possible and it seems there were some questions cropping up around how much of a problem it geniunly is versus me just having a whine about it.

In all fairness I'm excited about Angular 2.0, but it's just too far off to quantify its use just yet. So it's not that I'm anti-Angular, I'm just anti- Crap, and there is a lot of that in the first incarnation I'm afraid, and it's biting too hard to ignore.

I hope my next post will be a lot more cheerful :)

</comment><comment><USER13> I find it interesting that most negative Angular articles are so vague. Why is it so tough to articulate what is wrong with Angular? I agree Angular is not the best, but I don't have such strong negative feelings for it. I've used it successfully in the past and as long as you keep things simple and don't go overboard with all that it offers, you can create a decent website with it.

</comment><comment><USER14> I wish I could go back in time and strongly oppose AngularJS at the last place I worked. Knowing what I know now, it was such a bad idea. I also made the mistake of adding it to a resume, too, so I have gotten too many recruiter emails about AngularJS jobs.

AngularJS has an amazing success/failure story. The developers have managed to get their technology used by so many web development teams whilst being extremely over-engineered and having a very steep learning curve. Why did so many of us get enamored with it in the first place? The power of Google?

<comment><USER15> The overengineering actually led to success, as it resulted in a batch of non- JS devs thinking that they had discovered some secret magic. They went on to write a bunch of blog posts, which made people think it was good.

<comment><USER16> Enabling non-JS devs to create a rich experience website (even if it has performance and future-proofing flexibility issues) _is_ secret magic. Never underestimate the number of non-web engineers who desperately want to make browser-accessible frontends to their tools without having to learn the "hell" that is Javscript.

I strongly suspect people were writing those blog posts because Angular worked for them in a way that alternatives had not; I hear that's how things get popular sometimes.

</comment></comment></comment><comment><USER17> >those that said I was just spouting FUD

I was not part of the crowd that made this comment at the outset of the first article but I would say that the second article only confirms the suspicions of these readers.

Identifying a treacherous design pattern is one thing. To say that a particular pattern says one thing or another about the skill or scale of a particular developer is another. Especially in the land of Javascript frameworks where the flexibility to do and incorporate anything can be a serious poison pill.

I have worked on and lead two teams that implemented angular projects, on the first we moved into it as a group of relatively experienced developers. In the second we on-boarded a number of junior developers. My experience with the junior developers was that they took their queues pretty quickly from the work of the senior developers.

In particular I have never seen this particular pattern in our code. I have found that the tendency to want to break the angular paradigm with outside JavaScript or angular library injection overkill are much more common practices that we end up needing to spend time quashing.

</comment><comment><USER18> I am not a web developer but I have been trying to keep up with the technology.

I tried learning Angular because people at work started using and hyping it beyond measure. So I thought 'ok' this got to be really good stuff.

And it was good, _if_ experienced people held my hand. Otherwise I got lost in a soup of what seemed like unnecessary terminology -- $scopes, controllers, digest cycles, dependency injections, directives, and so on.

It kind of brought back memories of first generations of Enterprise Java frameworks (you know the factoryfactorymanager joke...)

So I have seen Angular work easily for already experienced devs who knew web front-end development very well. For me, what I really like is React. Ever since watching Peter Hunt's video one or two years ago, the idea of the virtual DOM and how events propagate made sense and was small enough to fit in my brain. I was able to go through some tutorial and do a few toy project in my spare time.

Anyway, if you care for another data point, there it is.

<comment><USER16> Unfortunately, that issue isn't limited to angular: it falls under the general category of "If you haven't gotten burned by the problems a pattern is trying to solve, a pattern looks like unnecessary complexity." I'm reminded of when I had to learn COM back in the day; as a developer who had cut their teeth on programming on Macintosh followed by Debian, it seemed like needless complexity until I grasped the zen of the problem it tried to solve: providing a common protocol for different binaries _compiled by different C++ compilers_ to share data structures and do inter-process communication in an object- oriented fashion _without sharing source code._ COM seemed way too complex to me because (a) in the Mac world, there was only one compiler that mattered (at least by the time I got into it), so binary incompatibility was essentially a non-issue, and (b) in the Linux world, if you needed two modules to inter- operate, you could meld their source code together.

Similarly, if you haven't tried for 100% test coverage, dependency injection seems needlessly complicated, and if you haven't had to nest dozens of HTML templates written by different developers using different patterns, directives seem way over-engineered.

<comment><USER19> I strongly disagree. The idea of a directive isn't unnecessarily complex because it isn't needed. And yes, there should be a pattern to force their use, for exactly the reasons you specified.

The claim that's being lobbied against Angular, however, is that they were schizophrenic in their choice of implementations for all of their patterns, or to state it another way, that the same advantages could have been gained with much, much simpler patterns. Instead of building a nice clean framework, they built an auto-magical framework, and declared you must learn every workaround in the "Angular Way" to use it.

There are plenty of js frameworks now, many of which have analogous components to directives and controllers and views, etc. But while most, if not all of them, allow for the same advantages you've mentioned, few of them do so in such a complicated, boilerplate, and arbitrary manner.

And this is scary, because it looks like they're continuing this trend with a completely new "Angular 2.0 Way".

I'm going to go off the deep end here for a moment, but, back when I was in college, I took some marketing class where they discussed in depth the idea of user interface as a method of product lockin. The idea was if you built a product simple enough, but then obfuscated the correct method of usage correctly, you could make a product that was simple enough that new comers would be drawn to your product, but complicated enough that it would take so much time to master, that most who did so would actively desire never to leave as they were now the local experts. SharePoint really is a poster-child for this sort of dark design. And I think of this every single time I use angular, not because the ideas are wrong, but because of what simple things were implemented in a complicated manner, and what others were made auto-magical.

<comment><USER16> To pull it back a bit from the deep end: another possibility besides intentional vendor lock-in is that AngularJs dates back to an initial public launch of 2009 (and was likely older than that in the bowels of Google's infrastructure), while the frameworks that have been mentioned in this thread are younger (react: 2013, boostrap: 2011). It's quite possible that angular is simply over-engineered to solve the problems it's targeted to solve and other, younger frameworks have second-mover advantage on architecture and design (while angular has first-mover advantages of "Older, therefore more well- understood" and "wide adoption base").

COM wasn't the last word on binary cross-communication either; for various reasons I see that sort of thing done a lot more often these days via building a RESTful HTTP service, even when the intent is localhost-only communication.

</comment></comment></comment></comment><comment><USER20> It seems like what junior Angular devs really need is a post showing examples of both what NOT to do and also what to do INSTEAD.

I think the difficulty of Angular is largely you have so many tools available but it's hard for a junior developer (like myself) to recognise when each should be used.

<comment><USER21> I agree, and this article does not really help. I feel that part of calling yourself a senior developer is teaching junior developers how to write great software.

<comment><USER12> As I said in the post, you just need to google for it. Here's one I found that helps you with $scope: [http://csharperimage.jeremylikness.com/2014/11/the- top-5-mis...](http://csharperimage.jeremylikness.com/2014/11/the- top-5-mistakes-angularjs-developers.html)

</comment></comment></comment><comment><USER22> In other news "How junior developer was able to quickly ship their first SPA using Angular, satisfy client requirements and get paid."

</comment><comment><USER23> Anyone has an exemple on how to use the $scope properly ...? He only shows the wrong way of using it, but has no code for the right way.

<comment><USER8> Yeah I personally think the page has shown bad habits much worse than Angular. I think AngularJS makes it REALLY easy to make SPA applications with data binding. I find it ironic that they bash AngularJS while their own site has (had) sever loading issues.

Don't blame the tool blame the fool :).

</comment></comment><comment><USER24> Interesting, the title tells something about bad habits but as soon as I try to visit it I just get a "loading" message that never seems to complete. If something is a bad habit, that's how it looks like.

</comment><comment><USER25> Is there a way to open this full-screen? I find the pop very distracting.

<comment><USER12> yes I'm working on that this weekend - also in an effort to fix the mobile issues. Full posts will display on the page on their own instead of the side bar like link stories appear

</comment></comment><comment><USER26> > the second camp, those that said I was just spouting FUD because I didn't > explain myself in detail, which surprised me a bit because those are > developers who presumably have been working on Angular and in my opinion > should already know about the pitfalls and their effect on juniors.

I have come to learn that the majority of people who _say_ they work in a particular system have actually only ever dabbled in it.

</comment><comment><USER27> MVVM has been around for years and years. It's just newish to the JS scene.

It is painful to read articles like this where even the author misunderstands the pattern and failed to read some of the standard literature on the topic. Just because MVVM is hip now does not mean everyone needs to reinvent wheels.

</comment><comment><USER28> If anybody is having issues loading the page, here's a really long screenshot of the text... [http://milankragujevic.com/uploads/2015-01-29_151409.jpg](http://milankragujevic.com/uploads/2015-01-29_151409.jpg)

<comment><USER29> Sorry but I got an "Error 1011, access denied"

<comment><USER28> Fixed it. Probably.

</comment></comment></comment><comment><USER30> Why junior developers are learning bad habits from <insert anything here>.

</comment><comment><USER31> I see a lot of hate, but I can't see the arguments.

</comment><comment><USER12> Apologies to those of you who might be having trouble viewing this on mobile - it's high up on the list to fix in the coming days

<comment><USER32> So... Are they learning bad habits like serving 500 errors to mobile devices? ;)

<comment><USER33> Hah! Shows what you know. I've got a 500 on my laptop, too ;)

<comment><USER34> Yeah doesn't load on my Lumia 928 either. I bet OP is sorry he is missing out on the traffic from the 2.6% of mobile users that use Windows Phone.

</comment></comment></comment></comment><comment><USER35> I wish he had clarified what was wrong with stuff. This article wasn't helpful for me at all.

</comment><comment><USER36> The blog rambles and disables native scrolling. It's not worth your time reading it.

</comment><comment><USER37> Hmm. I think I'll check out what my boss blogged about today..

</comment><comment><USER38> It's like Kinja, but somehow worse.

</comment><comment><USER39> seriously, the website design sucks.

<comment><USER40> Agreed. If you click out of the weird popup the article is in, you get a list of articles. If you click on one of those articles, a new window/tab opens in your browser, with a similar setup (article in weird popup), and if you click to the left of that, now you have two windows/tabs with lists of articles.

I almost wonder if it was made like that as a joke.

</comment></comment><comment> kuni-toko-tachi The central problem with Angular is what is says about the software industry in general - that a framework so fundamentally and ridiculously flawed could invite such wide appeal suggests that many people have absolutely no idea what they are doing. The thousand monkeys approach to engineering has wide implications for security and safety of systems that we rely on. There is simply no way that you can say that you know Javascript and at the same time support Angular. None.

<comment><USER41> This is a rather surprisingly and unnecessary harsh comment. Would you like to explain why do you think Angular is so flawed?

<comment><USER42> For one, it is incompatible with the whole open web stack. You cannot use Bootstrap with it. And if you decide to move off Angular, you are going to be in a world of pain.

Second and worst of all - it is a monolithic framework. As long as you just do things the "Angular Way" \- you are fine. If you want to change or override something, you are in a world of pain.

If you are learning Angular - you are hardly learning JavaScript. The knowledge learned from it is hardly transferable to the next framework down the line.

To me it looks a lot like SOAP. Everybody is acting like they understand what is going on. But nobody really does.

<comment><USER43> 1: You shouldn't be using bootstrap, even though you can with angular.

2: What do you need to do in the front end that can't be accomplished the 'angular way'? I'm not sure you understand what monolithic really means. The beauty part of angular is that you can use it as little or as much as you'd like in your web applications.

3: Angular 2 is going to be preeeetty much only ecma6. Also, understanding angular means you understand AMD, digest cycles, etc... totally applicable to other frameworks.

4: What are you even talking about?

<comment><USER44> > 1: You shouldn't be using bootstrap, even though you can with angular.

Why in the world would you say that

</comment></comment></comment></comment></comment><comment><USER45> Fix the site! this sounds interesting

<comment><USER46> The mobile site it is totally broken</comment></comment>


FreeBSD 10.0 Alpha 1 now available - <AUTHOR> http://lists.freebsd.org/pipermail/freebsd-current/2013-September/044522.html <comment><USER2> The What's New for FreeBSD 10 wiki page[1] linked in the reply has more details (though it doesn't necessarily indicate what will make the cut). The interesting bits to me are the merging of VPS support[2] which, last I read was a patchset against the 7 or 8 kernel. The seamless migration of virtualized envs seemed like a pipe dream at the time, I can't wait to play around with it (if it makes the cut).

Not to mention virtio support and bhyve[3] (in addition to the old jail subsystem). If everything makes it in, there will be so many different options for service isolation!

\--

[1] [https://wiki.freebsd.org/WhatsNew/FreeBSD10](https://wiki.freebsd.org/WhatsNew/FreeBSD10)

[2] [http://7he.at/freebsd/vps/](http://7he.at/freebsd/vps/)

[3] [https://wiki.freebsd.org/action/show/bhyve?action=show&redir...](https://wiki.freebsd.org/action/show/bhyve?action=show&redirect=BHyVe)

<comment><USER3> it's likely to make the cut, given that it's pretty damned stable.

virio will be huge.

<comment><USER4> Virtio is excellent news, and I'm glad to see they've implemented virtio-scsi which is just in every way much better than the old virtio-blk (although they've implemented that too).

</comment></comment></comment><comment><USER5> quick summary for the impatient:

\- drop GCC for CLANG.

\- introduce VPS (more virtualised approach to jails)

\- introduce bhyve (native hypervisor on common standards)

\- replace BIND

\- Can be run on raspberry pi

\- major speed ups in SMP, and networking

FreeBSD Is taking a fairly big leap forward in its sweet spot of the workhorse of the data farm. BSD has always had great jails virtualisation support (it's what LXC or docker is following) but now that's being expanded and complemented with the run-another-OS-on-my-host-OS of "virtio" style VMs

Raspberry pi of course is what the world has been waiting for - never mind all the rest :-)

edit: tidy ups

<comment><USER6> FreeBSD 10 is also going to have much-improved support for Xen [1][2] and newly-added support for Hyper-V [3]. I'd love to see AWS and Azure support first-class FreeBSD instances. (You can currently run FreeBSD instances using cperciva's AMIs [4], but that's not the same as Amazon supporting FreeBSD in the same way they support Linux).

[1]: [http://lists.freebsd.org/pipermail/freebsd- xen/2013-June/001...](http://lists.freebsd.org/pipermail/freebsd- xen/2013-June/001618.html)

[2]: [http://wiki.xen.org/wiki/Testing_FreeBSD_PVHVM](http://wiki.xen.org/wiki/Testing_FreeBSD_PVHVM)

[3]: [http://forums.freebsd.org/showthread.php?t=38019](http://forums.freebsd.org/showthread.php?t=38019)

[4]: [http://www.daemonology.net/freebsd-on- ec2/](http://www.daemonology.net/freebsd-on-ec2/)

<comment><USER3> [http://aws.typepad.com/aws/2012/11/aws-marketplace- additiona...](http://aws.typepad.com/aws/2012/11/aws-marketplace-additional- operating-system-support.html)

edit: we're about to launch pfSense on EC2, too.

<comment><USER7> Can you send me an email about this? I like to keep track of how FreeBSD/EC2 is being used and I might be able to help you.

</comment></comment></comment></comment><comment><USER8> I run BSD on all of my desktop boxes, but I have not found any way to run it on a laptop. It just doesn't seem feasible; there are just so many mobile drivers that are missing. Has anyone else had any luck with getting FreeBSD to work on a laptop, or is Linux still the de-facto?

<comment><USER9> I had FreeBSD running on my old Dell Studio 1737. It took some effort but most of the linux drivers will work with BSD if you edit the source and recompile.

<comment><USER10> You most definitely can't recompile Linux drivers for FreeBSD. The driver model is very kernel specific, porting drivers is more close to rewriting drivers. Plus there's the GPL thing. Linux is GPL, that's why you'll never see Linux drivers ported to BSDs.

Sys V drivers conforming to the STREAMS model were supposed to be portable between Unix variants, but STREAMS never catched on, neither Linux nor BSDs use STREAMS, and BSDs only have minimal STREAMS support for the SVR4 compatibility layer. Solaris has STREAMS, but has rewritten many drivers not to use the, e.g. the networking stack has been rewritten from being STREAM- based (now it's called Fire Engine).

It's generally easier to port BSD drivers to Solaris, then it is to port BSD drivers to Linux.

<comment><USER11> I do find it odd that when BSD people talk about the BSD license, they describe it as pragmatism winning over idealism. However, when they talk about the BSD OS's, suddenly that pragmatism disappear and everything need to be _pure_ permissive licensed.

Is both "camps" just similar fanatic regarding licensing, similar pragmatic, or is it a natural distinct difference when talking about licenses, and when picking software licensed under one of the two types?

<comment><USER10> > is it a natural distinct difference when talking about licenses, and when > picking software licensed under one of the two types?

Of course there is. When I write some software project, of course I want it to be under a specific license, for example BSD. If I chose a BSD license I can't accept GPL patches because that means I can't _chose_ what license I distribute my own software, I have to make it GPL.

As the author, I don't mind if GPL or commercial entities import my software. I am very happy if they do that, I want them to have the freedom to do so. However, I most certainly don't want myself to be forced to change my own license because I import some code. Then, I won't be able to give the freedom of choosing the way they use my software to other people anymore.

<comment><USER11> A distribution is not based on patches - its based on picking software packages which to bundled together into a working operative system.

But okay, lets go with the distributions desire to chose what license to use. Who cares about the license? The whole point of pragmatism winning over idealism is to achieve a set of practical effects, regardless lofty concept such as "freedom of choosing license".

A distribution is most effective when it can use the best software as much as it can. This mean that a pragmatic distribution should use any software, be that proprietary, GPL, permissive, anything, so long it is superior. A pragmatic approach to license issues would be to have built in tools to slim down the distribution to reach _specific practical effects_ depending on the need of each individual users.

Surely, giving people working graphic drivers is more pragmatic than giving people nothing and say "the software that give your practical use from your hardware is under the _wrong_ license".

<comment><USER10> BSDs are not distributions. They are complete operating systems. They don't pick software packages, they develop almost all necessary software themselves (notable exceptions include gcc which the BSDs are trying to get rid of).

BSDs are pragmatic in that they don't restrict their users in their usage of the provided code. That's how Cisco's IOS and Juniper's Junos can exist.

The BSD ports contain many GPL software and non-GPL software (including closed source graphics drivers) that you can install on your own. They are not part of the base operating system.

<comment><USER11> Some believe that permissive licenses are good because it do not restrict their users. Some believe that copyleft licenses are good because it do not restrict users of derivate version. Both are views, rather than practical actions. They are just thoughts about the promised land that licenses might give.

The parent post talked about porting hardware drivers from Linux to BSD kernel. The BSD project decide against it, citing the license as reasons. As a result, BSD users goes without because the drivers are not of the _right_ license.

 _Pragmatism_ : Based on practical uses and successes rather than in terms of believing.

 _Idealism_ : Mentally constructed ideas on how things ought to be best. Its priorities what it believes over practical gain.

Deciding against practical gain because of an mentally constructed idea is Idealism over Pragmatism.

<comment><USER10> Porting a GPL driver to BSD helps only _a few_ people (those who have the particular hardware) to the detriment of _every_ contributor and _every_ consumer of the code (like Cisco, Juniper and Apple).

<comment><USER11> How is that to the detriment of every contributor? They can simply opt out of using that driver. Are you implying that Cisco, Juniper and Apple don't have the expertise to exclude drivers that they don't want?

You are trying to decide for those "few" people that they are better off without working drivers. Maybe some people do like having working graphic cards or working sound. It takes a quite fundamental approach to ignore practical use over idealism present in a license text.

Not that this discussion matter much... FreeBSD has a linux compatibility layer, which mean they can often run said GPL drivers through its port system. Its only with the base system that useful drivers get thrown out with the bath water in favor of license purity.

<comment><USER10> > How is that to the detriment of every contributor? They can simply opt out > of using that driver.

No, it doesn't work like that. You can't make driver X in the kernel GPL without making the whole kernel code GPL.

> You are trying to decide for those "few" people that they are better off > without working drivers. Maybe some people do like having working graphic > cards or working sound.

Aside from the fact that sound works better in FreeBSD compared to Linux (because of OSS4) and that graphics is at least on par with Linux (or better; the proprietary FreeBSD driver continues to work without recompiling the kernel shim every time the kernel is updated), you are completely missing the point. Some guy who complains on the Internet that FreeBSD doesn't work on his laptop is of no value to FreeBSD. Valuable users are those who contribute code, those who run large installations, and those who use the code to build their products. These always take priority and every decision happens with them in mind, not random dudes on the Internet. You're complaining about sound and graphics? I'm having a hard time believing this is a serious discussion, why not complain about the lack of sound and graphics on a PIC32 microcontroller.

> FreeBSD has a linux compatibility layer, which mean they can often run said > GPL drivers through its port system.

No, this is impossible. Linuxemu is a compatibility layer for Linux user-mode binaries. It emulates the Linux system call interface. It cannot be used with Linux drivers. As mentioned above, the driver model is very different between different operating systems.

<comment><USER11> > You can't make driver X in the kernel GPL without making the whole kernel > code GPL.

That is factually wrong. You are perfectly fine in keeping the rest of the kernel under BSD. GPL only prevents added restrictions from being added to the GPL code itself, or the combined work. If users downstream remove said code, then it would not be a combined work anymore.

See: [http://stackoverflow.com/questions/4854519/gpl-component- in-...](http://stackoverflow.com/questions/4854519/gpl-component-in-bsd- project)

Or this almost 2 year old answer on HN: [https://news.ycombinator.com/item?id=4359524](https://news.ycombinator.com/item?id=4359524)

> Linuxemu is a compatibility layer for Linux user-mode binaries. It emulates > the Linux system call interface. It cannot be used with Linux drivers.

Quoting Luigi Rizzo:

      I decided to start working on an emulation layer that would let
      us recompile the linux source code on FreeBSD, and provide a
      sufficiently complete emulation of the kernel APIs so that
      device drivers (or at least certain classes) could be used
      without modifications to their source code.

-> [http://info.iet.unipi.it/~luigi/freebsd/linux_bsd_kld.html](http://info.iet.unipi.it/~luigi/freebsd/linux_bsd_kld.html)

<comment><USER12> > That is factually wrong.

That answer is factually wrong.

Did you even bother reading the sources you cited or ever read the GPL? The first couple links side with the OP and the third doesn't address the OP's point.

<comment><USER11> > Authors of individual files are clearly free to release their own work under > BSD even inside such a GPL-licensed compilation, and if someone takes out > all GPL code, the result can be distributed under BSD license.

> BSD doesn't need to "relicense" anything as the license to the existing code > already permits _combining with the GPL_.

I don't see how it can be made any more clear. If you remove the GPL code, it no longer need to be under GPL. Did _you_ bother to read the sources, and do _you_ have any sources to support your clearly false claims?

The third link was about the linux emulation laying being used to including linux drivers into freebsd through the port system. You said it was impossible, yet they did it. The impossible happened, and is/was used for USB support particularly.

<comment><USER12> Do these words look familar?

> GPL only prevents added restrictions from being added to the GPL code > itself, or the combined work. If users downstream remove said code, then it > would not be a combined work anymore.

Perhaps you should read your own work before replying.

> You said it was impossible, yet they did it.

O'rly? Where was that?

<comment><USER11> > Perhaps you should read your own work before replying.

Perhaps you should read your own words before replying.

>> You said it was impossible, yet they did it.

> O'rly?

>>>> No, this is impossible. Linuxemu is a compatibility layer for Linux user- mode binaries. It emulates the Linux system call interface. It cannot be used with Linux drivers.

>>> emulation layer ... provide a sufficiently complete emulation of the kernel APIs so that device drivers could be used.

> Where was that?

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

<comment><USER12> > Perhaps you should read your own words before replying.

Perhaps you should read your own words before replying.

>> Where was that? > [https://news.ycombinator.com/item?id=6426384](https://news.ycombinator.com/item?id=6426384)

No, someone else may have said it, I didn't. Please quit misattributing words to me.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> Can anyone tell me more about the hypervisor ([http://bhyve.org/](http://bhyve.org/))? The design looks extremely similar to KVM, so I don't understand why they didn't just implement the KVM ioctls, on the basis that they would be able to run all the existing userspace (ie. qemu).

The problem with implementing a similar-but-different kernel API is that you've either got to persuade qemu to implement your API as well as KVM, or you have to rewrite the whole of qemu (a massive job).

<comment><USER10> They don't have to convince anyone, nor rewrite anything. It's a different architecture. Note that not even KVM doesn't technically need Qemu in particular. Qemu is overkill for most usage of KVM, but they used it because it was available. Some people wrote something much smaller that can be used with KVM: [https://lkml.org/lkml/2011/3/31/406](https://lkml.org/lkml/2011/3/31/406)

<comment><USER4> Sure, except kvmtool was never accepted upstream and has since been abandoned. To make kvmtool useful would have involved tediously reimplementing large parts of qemu/seabios (qcow2 support, hundreds of emulated devices, firmware). Which is the same thing that FreeBSD will have to do, if they want to run a mix of real world guests any time soon.

Pure programming is great and I've no problem if FreeBSD wants to take years and implement something fantastic.

<comment><USER10> Emulating real hardware is pointless if your use case is running Linux/FreeBSD in production[1]. It's only important if you want to run historic operating systems or Windows[2]. Effort is more usefully directed into making the hypervisor better rather than implementing legacy cruft. Why should I emulate An A20 gate if my current Linux kernels do just fine without it?

[1] Other people seem to agree with this as they were willing to use Xen before the advent of CPUs which offered hardware assisted virtualization. Xen required a special paravirtualized Linux kernel and people had no problem with this.

[2] In my experience people who want to run Windows use Hyper-V or VMware, not Xen/KVM.

<comment><USER4> I do agree with this point of view, dislike having to write h/w emulation code for qemu, and have upvoted you; but two points:

People do want to run Windows. More importantly (to me) they want to extend the useful life of ancient Linux distros (usually for software certification reasons) which no longer run on real hardware but could run indefinitely in a VM. For both of those you do need to emulate real hardware.

Second point is if you take it to the logical conclusion, a simple Unix process is the ideal VM: lightweight, secure, well-defined ABI to the OS. From that point of view, jails/cgroups/LXC/seccomp are likely to be even better than your hypothetical ideal-but-doesn't-work-in-the-real-world hypervisor.

Or to put it another way: If you define the goal as "want to run only a mix of recent Linux and FreeBSD guests which happen to have modern but slightly different kernels from the host", then BHyve is certainly the hypervisor for you (except for all the other hypervisors which are battle-tested and have had years of performance improvements, massive community and loads of documentation). If your requirements are even slightly different from that, then you'd be better off with KVM or LXC.

</comment></comment></comment></comment></comment><comment><USER13> So how does bhyve compare to kvm? I've seen FreeBSD people saying it's a 'legacy free' virtualization system but I don't really know what that means or entails.

Can it do live migrations and failovers like xen/kvm?

What can it do that kvm/xen can't? What about vice versa?

<comment><USER14> It's legacy free in the sense that it doesn't do paravirt like Xen and requires hardware assistance like KVM. Maybe also that it doesn't use QEMU which has some pros and cons: [http://www.slideshare.net/syuu1228/implements- bios-emulation...](http://www.slideshare.net/syuu1228/implements-bios- emulation-support-for-b-hy-ve-a-bsd-hypervisor). Ultimately, it will let people like NetApp use it on their filers without any GPL complications though.

In all other respects, it's still in its infancy and I wouldn't expect KVM parity for common use cases until the next release. I'm more excited about the VIMAGE stuff in 10.

</comment></comment><comment><USER15> What's new: [https://wiki.freebsd.org/WhatsNew/FreeBSD10](https://wiki.freebsd.org/WhatsNew/FreeBSD10)

</comment><comment><USER16> Personally I can't wait to use 10 when it gets released. But it's a pity that it won't see Gnome 3.10 due to its dependence on logind, and then logind's new dependency on systemd as of 205.

</comment><comment> a--b I've had a long standing question about FreeBSD and ports/portsnap: does/how does FreeBSD prevent against bad mirrors or MITM attacks?

<comment><USER17> AFAIK ports checks the checksum of the file when it downloads it against the checksums the ports maintainer submitted.

For the ISO mirrors, I don't think there's anything automatic, you have to manually run sha256 on the file and compare checksums. Do Linux distributions have another way?

<comment><USER18> Most Linux package managers use GPG signed packages.

<comment><USER6> In FreeBSD (and the other BSDs), packages and ports are two separate things. Packages are binary distributions; a port is just a set of patches (if necessary) and a special makefile telling the build system where to download the sources for the software you want to build and any special instructions necessary to build/install it.

It makes sense to sign packages, but not ports. Ports do contain checksum files though, to make sure the source tarball/zip you download hasn't been changed -- this is what 'gaadd33' was referring to.

<comment><USER18> Very few Linux distributions have the equivalent of FreeBSD's ports. I know of the Arch Linux AUR and they also use checksums in their PKGBUILD files.

</comment></comment></comment></comment></comment><comment><USER19> It sounds like some amazing performance boosts around networking. I wonder how much of that will carry over to all of the network-type appliances built on FreeBSD? I know Juno's OS runs a pretty ancient version of FreeBSD (6 or 7 IIRC), but am not sure about any other commercial uses.

<comment><USER6> The `netmap` stuff (high-performance networking stack) is really neat. The author's site has a lot more information about it if you're interested:

[http://info.iet.unipi.it/~luigi/netmap/](http://info.iet.unipi.it/~luigi/netmap/)

I'm curious to see what kind of performance is possible with FreeBSD 10 (using `netmap`) and the new I/O manager which will be included in the upcoming GHC 7.8 release. The combination seems like it would be epic in terms of web server performance, and it might be a nice choice for web hosting companies / CDNs who have a vested interest in reducing latency as much as possible.

<comment><USER20> First somebody needs to create a TCP stack for Netmap; right now it only deals in Ethernet packets. Netmap has the potential for very high performance; we're capturing 50 Gbps and hoping to hit 140 Gbps per server soon.

</comment></comment></comment><comment><USER21> Is there information as to whether pkgng will be available in time for the 10.0 release?

<comment><USER6> AFAIK, pkgng is the default package manager in both FreeBSD 9.2 (due any day now) and 10.0. The table at the bottom of this page says so anyway, and it was updated just a few months back:

[https://wiki.freebsd.org/pkgng/CharterAndRoadMap](https://wiki.freebsd.org/pkgng/CharterAndRoadMap)

</comment></comment><comment><USER22> Dffcf-123. ,l,km</comment>


Aurum Project – The Golden Blockchain a Cryptocurrency Backed by Real Gold - <AUTHOR> http://247cryptonews.com/aurum-project-the-golden-blockchain-a-cryptocurrency-backed-by-real-gold/ <comment><USER2> Remember e-Gold?

<comment><AUTHOR> something like that :)) .</comment></comment>


Mexico Prepares for Its First Moon Mission - <AUTHOR> http://www.mexiconewsnetwork.com/news/first-moon-mission/ <comment><USER2> "Mexican taxpayers subsidize American space company"</comment>


How to get a Programming Interview - <AUTHOR> http://rawsyntax.com/post/6249655944/how-to-get-a-programming-interview <comment><USER2> Around here, all you need to get an interview is sound like you know what you're doing. However, to get PAST the interview you need code samples and to actually know what you're doing.

So I'd add to that list: Be willing to commute or move to find somewhere that has more job openings.

<comment><AUTHOR> or telecommute

</comment></comment><comment><USER3> Or if you are LAMP developer, skip the blog post and email firstname.lastname@example.com for an interview. :-)

<comment><AUTHOR> Oddly enough, that's a point I didn't say much about. I've found that online communities like HN can be pretty good for getting interviews.

Especially the monthly "Who's hiring" posts.</comment></comment>


Why Zynga Should Worry About the Laffer Curve - <AUTHOR> http://www.byrnehobart.com/blog/why-zynga-should-worry-about-the-laffer-curve/ <comment><USER2> I'm not quite sure what the author is trying to say about the Laffer curve, but I'm not certain it's correct. This paragraph is very confused:

 _The Laffer Curve normally describes government revenues compared to marginal tax rates. It's a curve because, given a sufficiently high tax rate, the incentive to work, report income, or live in a particular country declines. This leads to the argument that lower taxes are net beneficial: if we're past the peak, they'll raise government revenue, but even if we're not, they can produce economic growth._

I think what he means to say is that the Laffer curve describes government revenue versus tax rate. That is, it is not that at a certain tax point the incentive to produce taxable revenue in that country decreases -- this happens at any increase in tax rate. Rather, the argument is that at a certain point the disincentive to create taxable income is high enough to meet the amount gathered in taxation. At any point beyond this point, the disincentive is actually higher than the tax rate, causing the government to acquire _less_ revenue than it would at a lower tax rate (because the decrease in taxable income produced is higher than the revenue at the increased marginal tax rate). I think the author understood this (the rest of the argument seems cogent), but I just felt that paragraph was a little unclear.</comment>


Justine Musk Interview on Divorce from PayPal Cofounder - <AUTHOR> http://www.marieclaire.com/sex-love/relationship-issues/millionaire-starter-wife <comment><USER2> > ... and he was constantly remarking on the ways he found me lacking.

If you see your partner doing that then it's basically over. All you can do is plan exit strategy.

</comment><comment><USER3> This article is from 2010.

According to Wikipedia, Elon has already moved on from Wife No. 2.

</comment><comment><USER4> The famous and wealthy lifestyle of the high society is not for everyone, my friends.

> Then he took me to a bookstore and handed me his credit card. "Buy as many > books as you want," he said. No man could have said anything sweeter.

Oh, yes, so sweet. Green and sweet.

<comment><USER5> it's like a riches to megariches love story

</comment></comment><comment><USER6> I wonder why she kept his name.

<comment><USER7> It is extremely common for divorced (and not remarried) women to keep the surnames of their previous spouses, especially if they have children with that name. I know of at least half a dozen divorced women personally who still use their married names, including my own mother. For most it just isn't worth the hassle of changing everything legally (again) and/or not worth the social confusion of raising kids with a different last name.</comment></comment>


Ask HN: How to search through 1M scanned TIF images? - <AUTHOR>

Here's my problem: I've got a corpus of over 1 million scanned text documents in tif format. No OCR has been performed.
What is industry best-practice for indexing and searching through these documents?
Does anyone have any first-hand experience with commercial and/or open-source solutions that are performant on this type of problem?
How about experience with ranking algos other than tf-idf?
I'm sure this is a common problem at the enterprise level. For example, just today, the WSJ published an article mentioning that over "100,000 pages of documents [have been collected from] the companies and agencies involved in the" oil spill: http://online.wsj.com/article/SB10001424052748703339304575240210545113710.html?mod=WSJ_hpp_LEFTTopStories
What is the quick, easy, and reliable way to search through these single-serving corpora? <comment><USER2> I used to do this 15 years ago and as far as I know the approach is still the same:

Run the images through a fixup program that will among other things fix scanning skew.

OCR it, of course. If you can afford it I believe that this is still the best system: <http://www.primerecognition.com/augprime/prime_ocr.htm>

It can use multiple OCR engines and gets around a _nasty_ bug in the one that has the best quality and speed.

You might want to hire a specialist company for the above tasks. Litigation support companies are one possibility but the lawyers they work for usually have a serious budget.

Then you need to put it into a full text engine that's ideally flexible WRT OCR errors. I.e. the old standard of an inverted index is subpar.

Good luck.

</comment><comment><AUTHOR> What I'm getting at here is: What is the SugarCRM of Enterprise Search?

I've tried Googling for "DIY enterprise search", but I haven't come up with anything.

All I've found are these very heavy (and very expensive) systems from Autonomy, etc...

</comment><comment><USER3> You should probably read this first:

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

And then branch out from there.

</comment><comment><USER4> Might want to check this out:

[http://open.blogs.nytimes.com/2007/11/01/self-service- prorat...](http://open.blogs.nytimes.com/2007/11/01/self-service-prorated- super-computing-fun/)

</comment><comment><USER5> I believe most enterprise systems are fairly expensive. Maybe you would consider building your own system? I have done a similar thing, by writing a plugin for Google Desktop Search that indexes TIF files. Writing a plugin is pretty straightforward. Now for the OCR part, there is only a few Open Source OCR engines, the most popular being Tesseract. The quality of Tesseract's results is pretty good and I believe is sufficient for many systems.

<comment><USER6> Raw Tesseract is a pain to use. <http://code.google.com/p/ocropus/> This is much easier to deal with and uses Tesseract as the default engine - this is a google funded project btw.</comment></comment>


Spark: A tiny Sinatra inspired framework for creating web applications in Java 8 - <AUTHOR> http://sparkjava.com/ <comment><USER2> Came here and expected the first comment to point out the name is taken by the other Spark project. It's not a web-framework, but it's Java/JVM (Scala) and it's pretty popular. I would change/refine the name if you want it to be not confusing.

[http://spark.apache.org](http://spark.apache.org)</comment>


PCC: Performance-oriented Congestion Control - <AUTHOR> http://modong.github.io/pcc-page

<comment><USER2> This seems like a pretty cool idea. They essentially bolt on a new congestion control strategy onto TCP. It only requires server side changes and doesn't need any changes to either the receivers or the routers or the packet headers. Instead of taking predefined actions when events like packet loss occurs it uses the events as a feedback mechanism into its control algorithm which attempts to optimize a plugable utility function. Very cool. I would like to try this out my laptop but it looks like it isn't quite ready for that yet! (the prototype is a user space implementation) (you can run their experiments if you have a fedora 15 box. There are some issues on ubuntu)

<comment><USER3> That's how most/all the congestion control works. It's essentially a send side only algorithm. On linux congestion control algorithm is actually a per socket option, as I recall. The receivers input/signal is limited to loss, latency, and windowing. "Other" congestion control algorithms also make changes based on loss/latency/windowing _events_ , not necessarily per packet though. The "predefined" wording also struck me as a bit odd; is an undefined response preferable?

I read the readme, but not the implementation yet. It's possible I'm missing some magic. Would have been nice to include even a cursory description of the algorithm/mechanism instead of a bunch of pretty pictures.

<comment><USER4> Check the paper for all the magic: [http://arxiv.org/abs/1409.7092](http://arxiv.org/abs/1409.7092)

Sec 2.1 describes the key ideas, with longer description after.

PCC gets consistent high performance because it observes what performance outcome actually results from a particular sending rate -- rather than assuming that certain events like a packet loss should be hardwired to certain actions.

</comment></comment></comment><comment><USER5> interesting. I'd like to see performance comparisons to TCP/NC and/or CTCP.

<comment><USER4> Good question.

TCP/NC = network coding I assume. This is not really a competitor to PCC: the two techniques are solving different problems and could work together. PCC controls the sending rate, while erasure coding (in general - I'm not familiar with the details of TCP/NC) avoids extra round trips to recover from losses. Erasure coding would be quite relevant to very short flows, for which every RTT matters, which is extremely interesting and valuable but not the focus of this paper. Also note TCP/NC needs a new end-to-end protocol.

CTCP is probably compound TCP. We haven't done a performance comparison but it appears to fall within the large set of TCP variants that use what we called "hardwired" control. If you try it out, let us know!</comment></comment>


Show HN: Logo Crunch – Make your high-res logo legible at lower resolutions - <AUTHOR> http://brandmark.io/logo-crunch/ <comment><USER2> Hmm. This website doesn't seem to work well on iOS.

<comment><AUTHOR> what's the issue? I'll have a look</comment></comment>


Scraper - Chrome Extension for reading data from web pages into spreadsheets - <AUTHOR> https://chrome.google.com/webstore/detail/mbigbapnjcgaffohmbkdlecaccepngjd <comment><USER2> How do you verify that the code on Github is the same as the code installed by the Chrome webstore?

<comment><USER3> You have two options:

1\. Use the code from Github instead of the Chrome webstore

2\. Open up the code on your computer once you download and verify it against Github.

<comment><USER4> Author here. Yes, you can get the original (rather messy) code from <https://github.com/mnmldave/scraper>. There are brief installation instructions in the README.

It should be noted that the javascript is passed thru Google's Closure compiler before packaging, in case you're looking to verify.</comment></comment></comment>


The Staggering Administrative Bloat of Universities - <AUTHOR> http://www.coyoteblog.com/coyote_blog/2017/04/the-staggering-administrative-bloat-of-universities.html <comment><USER2> If you look at what the UC Office of the president does, there's a huge scope there that the other examples probably do not have [http://www.ucop.edu/about/](http://www.ucop.edu/about/)

<comment><USER3> It's easy to make an impressive looking list of responsibilities for administrative offices. The thing is many of those bullet points include words like "help", "support", "promote", and "oversee". It's very hard to judge just how much work is going into those things and how important it is. You can have endless rows of "support" staff doing important sounding things that are actually totally superfluous to getting actual productive work done.

<comment><USER4> Anecdotally, when I was IT student sysadmin at a major university, I don't recall ever seeing admin staff doing actual work. Often times, you'd walk through the hallways and see rows and rows of offices of people screwing around on the Internet, or even playing video games. A good part of our job in IT itself was super slow as well except for the first two weeks of every semester, so we weren't much better. My boss would play WoW on the clock.

<comment><USER5> I love anecdotes! When I was an IT admin at a major UC Berkeley university, all of the admin staff that supported our group worked super hard from 9am to 6pm, then they went home.

There was an extremely old clerk who as far as I can tell had been sentenced to entering in data on a Mac SE. No WoW.

<comment><USER6> I'll throw in my anecdotes. Used to be a sysadmin at a "Rather shiny" east coast university.

Mixed bag. Some IT worked extremely hard, carried whole group, others did almost nothing. I have stories about coworkers that make WoW look positively productive as a workplace activity.

Same went for admin staff. A few of them clearly did 90% of the work, whereas a few did almost nothing. (and this was widely accepted and known)

</comment></comment></comment></comment></comment><comment><USER7> This could have been an interesting article about a real problem, but it's just 3 paragraphs of ranting about political straw men.

</comment><comment><USER8> I'm sure there is a lot of waste in the UC Office of the President. But Universities have become huge, complicated behemoths with many functions besides education.

I recently saw a breakdown of where the money for one of the UC campuses comes from. About 50% was from the associated Medical center, about 25% was from federal research grants (many of which had PIs in the medical school and medical center), about 15% from tuition, and 10% from other sources (not broken down further). This wasn't UCSF, either, where I would expect the medical center's budget to dwarf everything else.

I don't think it would be too far fetched to call it a medical center that happens to have school with 30K undergraduates attached. I wonder how the cost of running the chancellor's office there compares with the costs of administration of a medical services company?

Of course, at this point aren't Yale and Harvard basically hedge funds?

</comment><comment><USER5> I decided to explore what else this blogger blogs about, who I believe blogs from Arizona:

"Take the Pledge: Let's Take A Year Off From Giving To Our Universities" [http://www.coyoteblog.com/coyote_blog/2017/04/take-the- pledg...](http://www.coyoteblog.com/coyote_blog/2017/04/take-the-pledge-lets- take-a-year-off-from-giving-to-our-universities.html)

"How The Left Is Changing the Meaning of Words to Reduce Freedom -- The Phrase "Incite Violence"

Wealth Creation and the Zero-Sum Fallacy

Statism Comes Back to Bite Technocrats

He actually has a few views I can agree with, and links to plenty of things I read every week, but I don't think his analysis is particularly technical or hard hitting.

</comment><comment><USER9> Where's the rest of the article? This is a great opening statement followed up by...nothing.</comment>