Self hosting decision - <AUTHOR>

Hi guys, I'm working on a Webapp with Java back end, could you please advise about hosting solution.
I just saw yc startups hosting decisions for 2010, and almost none is self hosted, is there a particular reason for this?
Is it worth it to self host to save some cash since I'm not funded (yet I hope :)) regarding the time it consumes, besides I'm no sys admin master. Thanks for your help <comment><USER2> There's many options for hosting, you could run a virtual machine running a web server, you could use Amazon web services (they have a free instance for 1 year, enough for testing) ... If you really want to host yourself, the virtual machine might be an interesting option. You can download a ready made instance (eg. Bitnami instances) and use VMware player to run it) ... If that's too complicated you can find much easier solutions where everything is readily configured but mostly they cost you money.

<comment><AUTHOR> Thanks for your answer, but actually I wanted to have an opinion or feedback on using Amazon EC or GoDaddy and similar over self hosting.

Basically is it really not recommended to self host at the beginning to stay focused on the product, or does it worth it in order to save some cash.</comment></comment>


New pagination and crawling features - <AUTHOR> http://kimonify.kimonolabs.com/kimload?url=http%3A%2F%2Fkimonolabs.com%2Fcrawlblog%2F1

<comment><USER2> I'd never heard of this site before today. This looks cool and like something I would actually want to use, and I think you've got a very promising way to demo your product while doing content marketing.

That said, I had absolutely no idea how to make it work. I clicked around, and recognized the effects of some of the things I was doing, but it didn't really make sense to me and I'm still confused. If you're trying to acquire users from this kind of page, I'd recommend having a giant call to action somewhere at the top of the page with a link to some introductory explainer material.

<comment><AUTHOR> Thanks a ton for the feedback... that's super helpful. We'll make some tweaks to this page now.

<comment><USER2> You're welcome :) By the way, I've found running things through eg. UserTesting.com will help reveal this kind of info in a way that you won't necessarily get via feedback from friends or HN. Lot's of facepalm moments but it's definitely worth doing to get a new perspective on how people perceive your marketing and product.

<comment><AUTHOR> Awesome, thanks for the recommendation!

</comment></comment></comment></comment><comment><USER3> Looks cool, but I couldn't find any definitive answer about whether it obeys robots.txt or not? Just that it's upto the end-user to determine which pages get crawled.

I'm not too fussed about people crawling my sites (as you say, it's gonna happen anyway), but I do worry about certain dynamically built sections of websites that are off-limits to bots for good technical reasons.

<comment><AUTHOR> Although we do put the onus on the users to pay attention to robots.txt we realize the reality is that some amount of them won't necessarily respect it. That's one of the primary reasons behind the way we designed our crawler the way we did -- requiring people to actually specify the links it will visit (as opposed to spidering around sites following all links). Our hope at least is this requires people to put a little thought into the data they want (and where they want it from) before hitting a site.

<comment><USER3> Sounds good enough to me. Might have to keep an eye out for it, hopefully your users will all be good ;)

Maybe you could design a feature that gives them a little friendly reminder if they're about to cross someones robots.txt, lets them check that they're aren't about to do something seriously annoying. Sometimes a robots.txt is over zealous and should be crossed, most of the time not though.

<comment><AUTHOR> Ah, yeah that's not a bad idea. Still keep the responsibility on the user, but do our best to keep them honest :)

</comment></comment></comment></comment><comment><USER4> This really needs actual docs instead of just videos.

Also, there's apparently no way to delete any properties or actually manage collections using the kimonofy GUI, which is pretty annoying.

<comment><AUTHOR> Thanks for the suggestion. You're right, videos aren't the best way to comprehensively describe how to use this. We're working to put together some deeper documentation (and improving the API editor) so you'll have more control over how things come out.

</comment></comment><comment><USER5> This is awesome product. Requests \- add target url to json \- merge a few apis into one e.g. I'm scraping 20 jobs postings. I would like to make one GET that gets me all the jobs.

<comment><AUTHOR> Thanks, great suggestions! We're working on a more powerful API editor that will let you do just that.

<comment><USER5> Also, is it safe to use API key in Javascript that runs on client? Maybe you should do singed urls in same format that S3 or have a public read-only key.

<comment><USER6> It's safe in the sense that we don't support 'private' APIs yet, charge money yet or allow you to authenticate any other parts of the service with your API key. But yes you're right, it will have to be dealt with eventually. This is on our radar to roll out well before we actually start charging people or offer different types of security features. Will probably be something like public-key/private-key.

</comment></comment></comment></comment><comment><USER7> You guys are pumping out hero features. Keep it up.

</comment><comment><USER8> I'm guessing the new feature is not suppose to look like this: [http://i.imgur.com/cKFgQcg.png](http://i.imgur.com/cKFgQcg.png)

It's pretty broken. Firefox 27.0.1 on Arch if someone from kimono sees this.

<comment><AUTHOR> Thanks for the feedback. Just curious, did you see this after you moved/ resized the window or did this happen right away?

<comment><USER8> It happened straight away. After clicking on any of the data, that's what happens.

</comment></comment></comment><comment><USER9> Man. If you manage to make it work and cover edge cases, you will be solving a big problem for a lot of people, I imagine.

I hope your service flourishes and continues to exist because it will definitely make my life a lot better.

Best of luck to you!

<comment><AUTHOR> That's the plan.. thanks!

</comment></comment><comment><USER10> Any way to pick up elements that are on the page, but not necessarily clickable? E.g. the <title> element of the page.

<comment><AUTHOR> It's unfortunately not possible right now, but we know people want it, so we're working on it. Probably have to tuck it into our advanced mode feature as it's not something we'll ever be able to solve with the point and click UI.

<comment><USER11> So this is a scraper that just scrapes links?

<comment><AUTHOR> No. You can extract any content you want from the page (incl. text, images, links) just not meta elements or invisible ones (e.g. <title> or anything else that usually shows up in <head> for that matter)

</comment></comment></comment></comment><comment><USER12> This is so good, it's scary.

<comment><AUTHOR> Awesome, glad you like it!

<comment><USER13> Great work. Big innovation in taking a clunky method of crawling info and turning it into something extremely elegant with how its outputted and someone can work with it.

</comment></comment></comment><comment><USER14> nice and impressive work, however I'm a bit old school, still prefer to do it in a few lines of python code.</comment>


Luxembourg is first country to offer free mass transit to all - <AUTHOR> https://www.curbed.com/2018/12/7/18130999/luxembourg-free-mass-transit-traffic-cars <comment><USER2> How is paid for by taxes "free"? Even if you don't use it, you're still paying for it.</comment>


Twitter and the evolution of blogging (Cat style) - <AUTHOR> http://mashable.com/2007/03/11/twitter/ <comment><USER2> I doubted how useful twitter would be untill recently. After going to a bunch of (un)conferences I wanted to stay in touch with the many great people I met. I used email, IM, linkedin, blogs and twitter. The only method that worked was twitter. It seems to mimic the kind of conversations you would have if you were sat in the same office as each other.

</comment><comment><AUTHOR> Thought this was pretty funny. But more seriously - twitter represents the atomisation of internet services - so moving from the heavyweight to the lightweight.

Do you think its growth is simply attributed to humans wanting to express themselves (like yelping)? Do you think twittering can become mainstream?</comment>


Thieves Planted Malware to Hack ATMs - <AUTHOR> http://krebsonsecurity.com/2014/05/thieves-planted-malware-to-hack-atms/ <comment><USER2> Interesting physical attack using specially made printed circuit boards that slide into the card reader slot. Designing a robust ATM has got to be up there in terms of safety platform engineering.

<comment><USER3> I had a few problems with the circuit-board-in-credit-card-slot part of it. Why would an ATM designer allow more than a few discreet signals (card inserted, card withdrawn, magsstripe data ready) and the magstripe data itself from the card reader into the ATM computer? It would cost a lot of money to make a card reader that can do more than that, wouldn't it? You'd also have to spend money on the device driver software to do more fancy stuff.

<comment><USER4> Because people aren't using the fucking magstripes anymore, thank god (at least if you're outside the US, where chip+pin is basically not existing!).

Everyone sane is using the smartcard interface because usually the chips cannot be cloned whereas a magstripe writer sets you back $150 and about 10 cents for a blank card. Just for the lulz: many payment terminals allow you for reading the WHOLE RAW STRIPE DATA by a command... so you hack the PoS software to issue a CardSwipe command before issuing the payment command. Unsuspecting store clerk will follow the instructions on the terminal: 1) swipe the card, 2) see the terminal saying again "Please swipe card", 3) think the first swipe failed 4) swipe again and do the normal payment. This is trivially done with any ZVT or OPI-based payment terminal. And it fucking works. (If anyone is interested, drop me an email. I develop PoS software and can send you a demo video)

The smartcard interface is the thing where the problems lie: PC/SC is a quite easy API, but most of the software will be written in C and suffer from the usual bugs: boundary checks done wrong, overflows, missing sanity checks... this uber-long PCB is essentially not needed at all. You could entirely implement everything on e.g. a BasicCard ($10 apiece for the high-memory+RFID card) or any other programmable smart card.

Edit: I've been asked by email by some people for the demo video. It'll be ready by Tuesday, I'll also submit it to HackerNews.

<comment><USER5> If you work for companies building Point of Sale software, please hire someone to fix the UI...

<comment><USER4> I build my own! And yes, UI is a big, big sales point for us... stay tuned :)

<comment><USER5> Interesting. A shop I work for had to go with a really bad piece of software because alternatives only had monthly fees.

<comment><USER4> Actually my system is open-source, with monthly fees being hardware rental and support. Sure, buying a system is possible too, but these systems must be continually updated e.g. to reflect changes in regulation, bugfixes etc.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> I had some issues loading the article; here is the Google cache:

[http://webcache.googleusercontent.com/search?q=cache:YOzSV2s...](http://webcache.googleusercontent.com/search?q=cache:YOzSV2s1hQ8J:krebsonsecurity.com/2014/05/thieves- planted-malware-to-hack-atms/+&cd=1&hl=en&ct=clnk&gl=us)

</comment><comment><USER7> Inspired by John Conner with this Atari Portfolio and a ribbon cable in Terminator 2? [http://imgur.com/5AVTMHV](http://imgur.com/5AVTMHV)</comment>


Wild Speculation on iPhone 3G S Hardware Encryption - <AUTHOR> http://www.zetetic.net/blog/2009/06/09/wild-speculation-on-iphone-3g-s-hardware-encryption/ <comment><USER2> I'm pretty sure they encrypt the entire flash with a random key that is stored in the first page. When remote wipe request comes in you just need to nuke the key to destroy data, which is a lot faster than actually overwriting 32Gb of flash.

iTunes backups are not encrypted by default because you have a key management issue. The primary purpose of the backup is so that you can restore it to a different device after your main device is lost or broken. Since devices where backup is taken and restored are different you can not use built-in key to encrypt the data. There are only two options where to store the key - with the backup itself (which is entirely useless) or with the user. Which is exactly what iTunes does - it allows the user to specify a password that is used to generate the key.

<comment><USER3> Hi Denis, are you at WWDC? It would be quite rad if someone were to start prodding the apple folks in sessions with regards to this. Inquiring minds want to know!

<comment><USER4> I'm here. What exactly do you want to know?

<comment><USER3> Hi, Yan, curious if we can get more technical info out of Apple folks about how their new "hardware encryption" feature for iPhone actually works.

</comment></comment></comment></comment><comment><USER5> Wild speculation makes the front page? They probably put in a hardware block encryptor, which is generally useful for encryption (look up Secure Virtual Memory in Mac OS X). Yes, it is faster to wipe a block key than to wipe an entire flash drive, but this post should have ended there instead of speculating that Apple's engineers don't understand encryption.

If you like wild speculation, it is likely that the block key is large enough to provide adequate security, and that it is stored locally but encrypted with a data encryption method like RSA. The password for this might be as simple as a 4 digit pin, but thats irrelevant because the encrypted encryption key would be the first data wiped in the event of a data breech. If you're really paranoid, you could store a larger key on the network. Rebooting the device would then require network access, but it protects you against someone removing your compact flash and reading it directly.

Obviously backup files are not encrypted, or they wouldn't be very useful. If they are encrypted, it will only be as strong as the user specified password, or key stored on MobileMe.

<comment><AUTHOR> This comment extends further into the realm of speculation than the original post. The article doesn't even mention Apple's understanding of encryption, let alone specifics like algorithms and key sizes.

The post only speculates about the meaning of Apple's carefully worded feature description, the _scope_ of the device encryption, and whether it's _primary intent_ is to enable the remote wipe feature.

With regard to four digit pins - the strength and length of a password is hardly immaterial to security if it is being used to derive or encrypt the key. This is especially true if the wipe needs to be triggered remotely. Storage of the key on the network or MobileMe would present a host of other issues that I suspect Apple would want to stay away from.

<comment><USER5> Yes, it is more speculative, but I have lower standards for HN comments than HN submissions.

The article doesn't mention Apple's understanding of encryption, but it seemed to speculate that this encryption wouldn't be "real" encryption: "is it really securing the device while running".

As for the length of the pin, it isn't as important as you think. Assuming the attacker doesn't read the compact flash directly (there is very little you can do at that point), you can store a strong encryption key on disk and protect the device via an exponentially increasing lockout. If the key were also stored in iTunes, you can always wipe the key from disk and require the phone be re-sync'd.

Anyway, my point is that the original article is lame.</comment></comment></comment>


FAQ Sheet on Feature Interaction (2004) - <AUTHOR> http://www.pamelazave.com/faq.html <comment><AUTHOR> I've posted this because it came to mind with the announcement over the weekend that Boeing didn't understand how their own system worked.

[https://news.ycombinator.com/item?id=19835608](https://news.ycombinator.com/item?id=19835608)</comment>


Ask HN: Give up on my startup for high paying job? - <AUTHOR> I have a really difficult decision here and wondering if anyone has had something similar.
I've been working on my startup for about 2 years now. It's been a long, slow road as I'm a solo founder and have bootstrapped the company.
After 2 years, I'm finally starting to make some serious traction and have been picking up some big customers. I'm now able to steal customers from my competitors who have raised close to $100M, and I'm in talks for a funding round with investors.
I'm more or less broke though and have been struggling to get by. Then due to a bug in the system, I got hit with a huge AWS bill last month that wiped out most of my remaining runway. So I'm kind of fucked...
A friend reached out to me today who has been trying to recruit me to his company for years. He's offering a salary close to $400k. So really tempting being how broke I am.
I'm not sure what to do. Continue to work on my startup that's finally seeing progress, give up and take the job, try to do both? One idea is to take the job and hire someone to run my company...
Any thoughts? <comment><USER2> "I've already maxed out all my credit cards, cashed out my 401k, and sold almost all my assets."

Take the 400K salary job for a year or two. Pay off your debt and keep working on your business on the side. Of course, you may need to be transparent with your friend about it.

I am all for risk taking but it should be "calculated". It seems like you are in serious risk of going off the cliff because lets face it, an AWS mistake wiped off your runway so it means you don't have a lot of it to play with.

So yea, take the 400K job, keep working on your stuff on the side and once you have some breathing room, get back to it fulltime in a year or so.

<comment><AUTHOR> Yeah, that's a good point.

The mantra for startups is never give up, but I'm close to pushing it as far as I can go... I'm starting to get into risky territory.

The thing that holds me up though is all the stories we hear, like Travis Kalanick with Red Swoosh and Elon Musk with Tesla and SpaceX. Down to a few days of payroll and figured out a way to make it work...

<comment><USER2> Giving up doesn't mean not trying again. Remember that you may fail multiple times but it only takes one time to succeed.

Sometimes it is good to give up and reset things. And I say this as someone who is running a bootstrapped business and will fight hard before I give up but my business is already relatively profitable so a different situation.

</comment></comment></comment><comment><USER3> If I am in your case, I would:

1\. Get the job. 400K would be quite a salary that would allow you to save.

2\. _AND_ Continue with your startup, by being on an advisory role. Delegate the business to someone you could trust (difficult, but possible). After office hours, you put in time to gauge how your startup venture is doing.

It is not quite easy to get a startup to a point where you are actually making solid progress. Of course, you would want to ensure your own survival as well.

Best of luck.

<comment><USER4> IMO you should either be in 100% or not at all.

<comment><USER5> 100% into the new job and 0% into the startup, or the other way around?

Either way, why?

</comment></comment></comment><comment><USER6> What valuation are these potential investors giving you?

You have to consider missed salary as an investment in the company. Assuming you could have gotten a somewhat similar salary 2 years ago, that means you have a bit under 1 million "invested" in the company. Each year you're putting in another 400k.

IMHO, unless you are really about to blow up and start making half a mil in profit a year, take the job. Save your money and in 5-7 years you will have enough to more or less retire. Then start another company and do it without being totally broke.

</comment><comment><USER7> You have numerous options in this situation.

Some could say that a feasible strategy might be to put your startup in hibernation mode. However, by doing that you might lose the customers that you just recently got. Sales is also a long term relationship. What this means is that if you put your startup to sleep, when it wakes up, your relationship from your customers at that point might have to start from the beginning.

Now let's say, you didn't close your startup and you decided to take your friends offer. So that would mean your startup would not go into hibernation mode and you get to maintain your current relationship with existing customers. And you can continue prospecting for customers and do the whole sales cycle thing.

But, how do you get to work a full time job, and not put your startup into hibernation? I think one of the things you can do is to delegate/outsource/hire someone to manage/develop the existing startup for you. Essentially, you don't even have to think about your startup, you just have to pay for it. Although it is true that hiring someone to run your startup is a different issue.

Let me know what you think

<comment><AUTHOR> Not a bad idea. I was thinking something similar to where I could possibly hire a few people for what the salary is.

Only fear about going into hibernation is falling behind competition wise...

</comment></comment><comment><USER8> Only you can really answer this question. How feasible is it to achieve profit, scale, exit over a short timeframe with your startup? How deep are your potential investors pockets and can you use your job offer as leverage for the valuation and salary if you continue with the startup? 400k/yr guaranteed is pretty good, especially if you're broke. You should have a very high degree of confidence in your startup to pass it up. Unless you can raise money fast and pay yourself 200k you should probably take the job and continue the startup on the side.

</comment><comment><USER9> If you are good enough to get that 400k offer now, you'll be good enough to get it again later. The same can't be said for a startup that you've been working on for two years.

You've invested two years in this startup. If you came here saying it wasn't working, I might say you should quit. But it sounds like _your business is going well._ So why not stay the course and see where it takes you? You've already invested two years worth of money and declined opportunities. What's the harm in saying no to a little more money and opportunities?

<comment><AUTHOR> That's what I was thinking too. I've been off the job market for a bit, so I guess it surprised me to get such a high offer.

That's also part of the frustration though. The business is just starting to take off, but I'm fucked financially if I can't figure out something soon. This AWS bill really messed me up...

<comment><USER9> How much is the bill?

</comment></comment></comment><comment><USER10> What do you _do_ to command such a salary?

<comment><AUTHOR> What I do have are a very particular set of skills; skills I have acquired over a very long career.

:)

</comment></comment><comment><USER11> > "I got hit with a huge AWS bill last month that wiped out most of my > remaining runway"

This is exactly why I don't use AWS. I need 100% predicable billing.

Lately I have considered looking into AWS again, since their system is just leagues ahead of competitors.

Mind explaining how this "bug" caused such a massive bill? Did you not have alerts set up? No protections against scaling? Etc.

<comment><AUTHOR> I'm using API Gateway, Lambda, and the IOT Platform to do realtime lookup / enrichment stuff for contacts in our CRM.

I setup a webhook in the CRM to call the API when a contact was created or updated, which would then enrich (update) the contact. I didn't realize that I had to disable the option to not trigger the update when the contact was updated via the API. So it created an infinite loop of updates that called everything millions of times before we realized what was happening.

I guess the one positive here is that our system can scale and handle the traffic :)

<comment><USER12> Talk to AWS support and see if you can negotiate it down, explain the situation and they might be able to cut you a break so that you don't have to shut everything down. You have nothing to lose here, make sure you've at least attempted this first.

</comment></comment></comment><comment><USER13> This isn't an answer to the direct question, but I've found AWS to be very understanding on issues of accidental overuse. If it's clear from your history that it was a one-off occurrence, considering giving them a call and seeing if they will refund/forgive some portion of it. It never hurts to ask.

<comment><AUTHOR> Tried that. I got 1/3 refunded so that helped a bit, but it's still ~6x what I had planned vs the 10x bill.

</comment></comment><comment><USER14> A few questions: Is the business generating income? If so, how far from breakeven if you do some combination of cut staff, increase prices, or similar? Is there any way to pick up enough side income - can you sell any consulting to your existing customers along the line of business? Have you taken in any funding?

<comment><AUTHOR> I'm in kind of a unique situation. My last startup was too many founders and gave up all the equity for an early fund raise. So I decided to go solo for this one and bootstrap it.

Since I'm bootstrapping, I haven't had funds to hire anyone. So I've been giving equity to friends to help part-time and then hire contractors for stuff as needed. I've already cut down all expenses to bare minimum.

I'm generating income and almost there on breaking even. I think a couple more decent sized customers will get me there.

I've been doing some consulting and custom dev, which has helped, but it's been as needed type of stuff.

<comment><USER15> Why not hire your part-time friend to take over from you full time, while you can try the 400k gig for a year or two.

</comment></comment></comment><comment><USER16> Maybe sell your startup to some investor and keep some equity stake and then join your friend's company. This will help you recoup some of the hard work that you have done as well as have stake in its future growth.

<comment><AUTHOR> I've thought about that. I'm not sure where I'd begin on that front though.

Ironically, I've been talking to this huge company who's interested in our IP. If I played it right, I could probably sell to them, but it would likely take at least a few months to make a deal happen.

</comment></comment><comment><USER17> I have been where you are, more than once. This is the true path of an entrepreneur and not for the feint of heart. I used to tell people that doing a startup is like being perpetually 'half way through the desert and out of water'. There's no turning back and no easy way forward.

My advice is to stay the course and scrape by. Scrounge, beg, delay, do whatever it takes to get over the next hill. A nine to five job will not solve any of your current problems in spite of its appeal. What's worse a high profile role will exhaust you leaving little or nothing left for your project.

By persevering you will impress investors and future employees with your ability to endure and commitment to your goals. Don't give up, never surrender and kick a little harder - you will succeed.

And when you do succeed, people will tell you how lucky you are!

FTW

<comment><USER6> _My advice is to stay the course and scrape by. Scrounge, beg, delay, do whatever it takes to get over the next hill. A nine to five job will not solve any of your current problems in spite of its appeal. What 's worse a high profile role will exhaust you leaving little or nothing left for your project._

That's not really true. This particular 9-5 job will take him from being broke to being rich.

</comment></comment><comment><USER18> Take the money, pay off the debt, get stable and work on your business.

</comment><comment><USER19> A 400K salary and you are tempted? Come back to reality. Hire someone to run your business and put your efforts towards the job that will give you an actual life runway.

</comment><comment><USER20> It's worth noting that you should go ahead and turn on AWS spending alerts, if you haven't already. Those should help prevent runaway expenses.

<comment><AUTHOR> Yep, lesson learned.

</comment></comment><comment><USER21> Why not do both, at least temporarily? Take the job, and then when you're in a better financial position, quit and continue the startup.

<comment><AUTHOR> Well two things. The company I'd be joining is run by a friend, so I'm unsure if he'd let me do both. He'd likely want me to focus on just his thing, especially if he's paying so much.

Then #2, the industry my company is in is moving very fast and is very competitive. If I slow down too much, the company might get left behind.

<comment><USER22> If he's offering you such a high salary, that shows he's very keen to have you. And you mentioned he's wanted you for a while. Which might mean you have lots of leverage, even if your friend wouldn't want to admit it.

So even if he would prefer you to focus on his thing, you could just state that working on your product on the side are your conditions for joining his company. And see what he says.

If he says no (and you feel he really means it, and you feel you really do want to work on his project full-time) almost certainly the 400k full-time offer will still be on the table.

</comment></comment></comment><comment><USER23> How close are you to making self sustaining income for your business? Would it be feasible to take out loans to get you to that point?

<comment><AUTHOR> Could be weeks or a couple months. I've been working on landing a number of big deals for months and all I need is 2 to come through and I'll be good.

I've already maxed out all my credit cards, cashed out my 401k, and sold almost all my assets.

The bank won't give any loans as they look at my personal credit.

<comment><USER23> Make a deal with your friend. Tell him you'll work on a part time basis, for just enough income to survive.

He'll know you're doing it just for your startup but at the same time he'll get your expertise and knowledge at least on a part time basis for a discount.

<comment><AUTHOR> He's been trying to recruit me for awhile now, and I already tried that strategy a couple months ago. He wants full-time people to build the team.

</comment></comment></comment></comment><comment><AUTHOR> Thanks for the advice guys.

I'll have to think it over, but it seems like the general sentiment here is towards taking the job.

</comment><comment><USER24> Contact Amazon support if the problem was on their end, they'll generally make it right with you.

<comment><AUTHOR> We accidentally created an infinite loop with our crm and an api on aws.

We at first didn't realize what was happening, then couldn't figure out how to stop it. The bill ended up being 10x what I had budgeted.

I talked to aws and they graciously refunded me a 1/3 of the bill. So it helped, but still wiped out the remaining runway I had.

</comment></comment><comment><USER25> Look after yourself first. Good luck.</comment>


How a flaw in Airbnb's privacy technology could put 1.2M homes at risk - <AUTHOR> https://hackernoon.com/how-to-rob-an-airbnb-252e7e7eda44 <comment><USER2> I'm actually surprised with such effort the rate of exposure of hosts was only 40%.

Even still, this seems pretty sensationalist to me. I find it hard to believe an organized service to "scam" Airbnb would be valuable to a host to save 3-5% at the cost of losing the legitimacy of being a part of the Airbnb platform. Furthermore, such a service would at least have the hurdle of being in violation of the ToS of using the site [https://www.airbnb.com/terms#sec14](https://www.airbnb.com/terms#sec14) .

Also, all of the numbers in the article assume the Wisconsin data set would be representative. The article states less population dense areas would be more vulnerable to this algorithm. So, why does it extrapolate based on only 84 homes in a more "vulnerable" area? The article ignores the fact that Airbnb operates in countries that do not have the same laws as the US. So, not even all 3 million homes are vulnerable to this method. This article is fishing for a result that will make a good headline.

</comment><comment><USER3> Am I missing the part where they explain how they tried really hard to make Airbnb aware of this, before publishing a method to cause physical harm to 1.2M people?

</comment><comment> xkcd-sucks Oh no, you can figure out an address by knowing a building's general location and comparing photos to Google Street view/satellite. You can even stalk the owner on public records/social media for even more info. Next week: the attack works on craigslist postings too! And those photos you saw on Facebook!

</comment><comment><USER4> The loss in commission argument is flawed since potential renters can exchange contact details with the owner beforehand.

The reason why I stay on the site is because as a renter I want some guarantee that my accommodation is going to be available when I get there and as an owner I want the insurance that Airbnb provides.</comment>


Ask HN: Is coding visualizations supposed to be this hard? - <AUTHOR> I've used experience both Python and R for years, in multiple jobs, and still, whenever I need to make a visualization that's anything more complicated than a single-panel bar/scatter/etc plot, it takes tons of trial-and-error to get what I want.
This is in contrast to my experience coding in general, where I build things out, have some tests, and use the little bits of libraries that I need. Visualizations seem like a whole other beast, and are incredibly frustrating given how simple it seems to want to just "move this title over there!", or "swap the order of these bars on all the facets!".
On a related note, is data analysis in Python just generally supposed to be more of a hassle than in R? I like Python for general coding, but sometimes pandas feels like pulling teeth. <comment><USER2> I've heard nice things about Roassal, this video may interest you:

[https://www.youtube.com/watch?v=-Pk4q5oMdLo](https://www.youtube.com/watch?v=-Pk4q5oMdLo)

The downside is, you'd need to learn a new language, Pharo (a contemporary Smalltalk dialect). There's a MOOC also:

[http://mooc.pharo.org](http://mooc.pharo.org)

I'm new to programming, still trying to master Python. My next learning project is Pharo, so I get a better grasp on OO programming.</comment>


xCharts - A D3-Based Library For Building Custom Charts and Graphs - <AUTHOR> http://tenxer.github.com/xcharts/

<comment><USER2> These libraries all look so very pretty, but with the exception of dygraphs, explode horribly given anything but the most superficial of data sets.

Speedy fetching/rendering/interaction of 10,000 samples for a handful of variables is always going to suck when every sample of every variable requires its own object with a handful of properties.

As for the usefulness of charts displaying only 4 or 5 data points.. well, you're really not gaining much from visual representation of such a tiny set, other than 'oooh that's pretty' feel-good factor.

<comment><USER3> Well isn't that a very positive comment. At which point do you see a link to a library that someone took time to code and polish and decide "now would be a good moment to shit all over it"??

<comment><USER2> In order to draw some boxes it (and many like it) require upwards of 10 heap allocations along with gobs of animation and sugar per 4 straight lines rendered on a 2D canvas, the result being they're useless for rendering actually large data sets – the very kind that benefit most from summary visual representation.

</comment></comment></comment><comment><USER4> I just completed a charting update to an application. I ended up using HighChart because of backward compatibility with IE8, which is still in major use in corporations.

xCharts doesn't offer anything over highcharts that I can see. SVG Support coming to IE9 was great but it will be a few years yet before we can depend on SVG.

<comment><USER5> xCharts is offering itself free even for commercial use unlike HighCharts

</comment></comment><comment><USER6> It looks nice, but perhaps not as comprehensive as Rickshaw <http://code.shutterstock.com/rickshaw/> \- also based on d3. Of course there are so many different charting libraries, it's really hard to choose, but I guess it depends on your needs.

<comment><USER7> I just checked Rickshaw, their main page throws a lot of js errors in Google Chrome 24 in the console, making the examples unusable. Can anyone recommmend a more stable, D3-based charting library ?

<comment><USER8> The Rickshaw page is working fine for me in Chrome Canary (currently at Chrome 25) and Chrome 23, there's a single JS error but it's not preventing the examples from loading. Are you sure something else isn't the problem?

<comment><USER9> Have you checked the JavaScript console?

<comment><USER8> yup, that's where I saw the single error.

</comment></comment></comment></comment></comment><comment><USER10> Could someone explain the title's summary? Surely D3 is the D3-based library for building custom charts and graphs?

<comment><USER11> I looked into using D3 for making typical x-y line and bar charts and found that it required _significantly_ more custom work than HighCharts. My take- away from the experience was that D3 is great for very custom visualizations, but if you want to do something simpler, it is worth looking for libraries that do only that simpler thing well.

</comment></comment><comment><USER12> I'm currently implementing charts using Flot with AngularJS data-binding and directives.

I had to find a workaround to the fact that Flot requires fixed width. xCharts does not suffers this limitation but I will have to evaluate d3.js first.

<comment><USER13> D3.js as an Angular directive is a thing of beauty, once you get your D3.js graphics updating live from your Angular data you can do some very nice dynamic graphics with very little code, whether it be graphs or otherwise.

Brian Ford gives a nice example in his blog and on GitHub: <http://briantford.com/blog/angular-d3.html> <https://github.com/btford/angular-d3-demo>

<comment><USER12> Thanks for the feedback and links, will look into it now.

</comment></comment></comment><comment><AUTHOR> via Functionn - Open Source Resources For Web Developers & Designers: [http://functionn.blogspot.com/2012/12/xcharts-d3-based- libra...](http://functionn.blogspot.com/2012/12/xcharts-d3-based-library-for- building.html)

P.S. Functionn contains a whole lot more of awesome resources like xCharts. There only a fraction of them I can post here at a time. Take a look if you're interested, and subscribe:

<http://functionn.blogspot.com>

<comment><USER14> daeken mentioned this yesterday, but you're still spamming the same exact text with only the name of the library changed.

<comment><AUTHOR> will take care not to do so from now on :)

</comment></comment></comment><comment><USER15> D3 seems to be gaining strength here. Sure, it doesn't work perfectly in all browsers and requires a bit of customization effort to make the charts look really good. But for me, it is a joy to interact with a chart and show different views without fetching server data each time. Data lives in the DOM -- this is a powerful thing.

</comment><comment><USER8> I don't like that all the examples (in the examples page) are animated. Loads of graphing libraries do that in their examples, and it's massively off- putting. My view is that charts shouldn't be animated unless the animation reveals something that a static chart couldn't.

</comment><comment><USER7> Interesting library, however I can see a lot of js and svg parsing errors in IE9 console. Some examples from <http://tenxer.github.com/xcharts/examples/> don't show on IE9 at all.

</comment><comment><USER16> I was hoping this would also include a simple CSV or other delimited text import method, but I guess you have to construct the JSON yourself? Is it omitted because D3 already takes care of this in some other way?

<comment><USER17> I have to assume so, as D3 does have things like CSV import:

<https://github.com/mbostock/d3/wiki/CSV>

And I assume that it xCharts omits it because of the wide variety of ways you may get your data. (XHR CSV, JSON, WebSockets, etc)

</comment></comment><comment><USER18> Someone already mentioned Rickshaw, but I also know of one other library that looks similar to this: dc.js (<http://nickqizhu.github.com/dc.js/>)

</comment><comment><USER19> Awesome, always love new charting libraries. I'm a big fan of D3 but it's too early to use in commercial apps (in my industry).

</comment><comment><USER20> good job, keep it growing Paul.</comment>


PRISM : let's have a look at the big picture - <AUTHOR> http://reflets.info/prism-lets-have-a-look-at-the-big-picture/

<comment><USER2> And some would think that PRISM is a BIG thing. Well no, it's just a small little thing that has a lot of brothers and sisters surveillance programs. PRISM is just the tip of the iceberg.

And USA are not the only one having such programs.</comment>


A Memory Comparison of Light Linux Desktops - <AUTHOR> http://l3net.wordpress.com/2013/03/17/a-memory-comparison-of-light-linux-desktops/ <comment><USER2> in case anyone is interested in a functional comparison of rather niche DEs, check this thread on #! forums <http://crunchbang.org/forums/viewtopic.php?id=18273> "30 Window Managers in 30 days"

Stacking Window managers

       Day 1.5 -- Housekeeping
       Day 2 -- jwm
       Day 3 -- flwm
       Day 4 -- fluxbox
       Day 5 -- pekwm
       Day 6 -- twm
       Day 7 -- evilwm
       Day 8 -- windowlab
       Day 9 -- lwm and wm2
       Day 10 -- aewm

Tiling Window Managers

       Day 11 -- scrotwm
       Day 12 -- wmii
       Day 13 -- i3
       Day 14 -- wmfs
       Day 15 -- dwm
       Day 16 -- catwm and dminiwm
       Day 17 -- snapwm and monsterwm
       Day 18 -- musca
       Day 19 -- tmux
       Day 20 -- ratpoison

Random Other Window Managers

       Day 21 -- sithwm
       Day 22 -- euclid-wm
       Day 23 -- oroborus
       Day 24 -- icewm
       Day 25 -- herbstluftwm
       Day 26 -- dvtm
       Day 27 -- sapphire and cwm
       Day 28 -- echinus and larswm
       Day 29 -- xmonad and awesome
       Day 30 -- tinywm

<comment><USER3> The author _completely_ missed the point about sithwm, which has actually no virtual desktops but one big desktop and your screen is the viewport on it.

<comment><USER2> wow, after your comment I just checked out its page and it's an amazing blast from the past <http://sithwm.darkside.no/> :) <http://sithwm.darkside.no/menu.png> is it even that eyes follow cursor thingie? :)

<comment><USER4> When I dabbled in writing a tiling WM in python, xeyes was my go-to testing app. It doesn't grab focus ever, which is nice when you haven't yet coded up focus grabbing (or keybindings, even).

I would test my tiling algorithms by filling up the screen with hundreds of eyeballs in a Xephyr instance. My roommate seriously started worrying about my mental health :)

</comment></comment></comment></comment><comment><USER5> Unity and GNOME 3 would be great for comparison - I've seen over 1GB in use by Unity at times.

It'd also be nice to try to measure CPU overhead when dragging a window around or just displaying them. Some of the newer desktops just seem slow if you have older hardware (such as a laptop with a C2D, Intel or older ATI graphics)

</comment><comment><USER6> Is anyone else experiencing sentimental vertigo over seeing Enlightenment mentioned in a list of lightweight environments... and actually doing quite well? Back in 1999 things sure were different.

<comment><USER7> Enlightenment did a good job looking a great deal heavier than it actually was. Back in ~1998 or so I purchased a cheap Pentium 133Mhz laptop with 48MB of RAM (poor student), and ended up settling on Enlightement as the window manager of choice. This was a fairly brutally underspec'ed machine for the time, but Enlightment was doing a fairly good job. I had to use a relatively unflashy theme, but that was no big deal.

(I did get a bit of win running Gentoo on it... yes, I'm not kidding, about either getting a win or running Gentoo. At the time, binary distros were just beginning to consider shipping things other than 486 binaries, and gcc had enough pentium optimizations that using Gentoo could get you noticeably faster binaries, even with very conservative optimization settings. And neither disk space, bandwidth, nor CPU power was so cheap that distros routinely compiled binaries for half-a-dozen architectures like they can now. Enlightement benefited a _lot_ from Pentium optimizations. Nowadays the Gentoo performance win is virtually gone, because $YOUR_FAVORITE_DISTRO probably already has something much closer to your target architecture already available.)

<comment><USER8> I presume you wanted to write "133Mhz"?

<comment><USER7> Ha, yes. How times change, when even my cell phone is measured in GHz.

</comment></comment></comment></comment><comment><USER9> I know it's a bit old, but if you're into this kind of things give WindowMaker a try. I have a 12 years laptop and it's the only window manager that runs on it. (and it's quite a good experience IMHO)

<comment><USER10> I love WindowMaker; it has to be one of the best window managers for productivity. The workflow is just so natural, and it's so easy to use.

<comment><USER9> Linux would have been on par with OSX if all those ressources wasted on Gnome had been focused on GNUstep.

<comment><USER10> Work is actually being done about it. See the Etoile project: <http://etoileos.com/>

But I agree, GNUstep is so much better than GNOME/GTK, both as a development environment and as a working environment. I wish there were more developers working on the project; development is so slow.

This isn't like Hurd (an unnecessary piece of software that really is pointless); GNUstep really is a genius piece of software.

</comment></comment></comment></comment><comment><USER11> I know I'm being nitpicky, but OpenBox is a clone of BlackBox, not a fork. OpenBox is written in straight C, while BlackBox and FluxBox use C++.

</comment><comment><USER12> And what about Fvwm? My setup does not really match modern UI concept (no taskbar, iconify to desktop icon, floating panel with pager and clock) and the whole thing with tpb and other hooks into thinkpad ACPI uses about 5megs RSS. IIRC my friend uses fvwm with more involved configuration (taskbar and QNX- style sidebar, the whole thing looks like QNX's Photon) that probably uses even less memory (ie. less running fvwm modules).

<comment><USER6> I loved fvwm. A pain to configure, but you could make it do pretty much anything. I had integrated xmobar with mine and essentially copied over the keybindings from xmonad. Not pretty or user friendly but it worked for me for a long time. Now I'm using KDE, not because it's better especially but because it got me to stop tinkering with my window manager. :)

You have to admit it's pretty cool what you can do though. I had a dynamic menu generated off the current slashdot headlines too.

</comment></comment><comment><USER13> Maybe these need to be updated?

<http://en.wikipedia.org/wiki/Comparison_of_X_window_managers> [http://en.wikipedia.org/wiki/Comparison_of_X_Window_System_d...](http://en.wikipedia.org/wiki/Comparison_of_X_Window_System_desktop_environments)

</comment><comment><USER14> It's great to have some numbers behind all these options.

As someone who switched to xfce around the time of Unity, but runs on a desktop with 16 GB of RAM, this article tells me that the differences here are not worth considering as a reason to pick one WM over another. But then again I'm using the heaviest option. :-)

<comment><USER15> I switched to Xfwm when Metacity started killing console beeps[0], then full[1] Xfce when Gnome 3 came around. As such, I can assure you that even with a mere 8 GB of RAM, there isn't much of a difference – apart from functionality, that is.

[0] If you had a terminal window open, "echo \a\a\a\a" would not play anything if Metacity was running.

[1] Nautilus 2.32 is still sticking around because I rather dislike Xfce's drawing of the desktop.

<comment><USER14> Slightly OT, but I think developers often over-optimize our technology choices. That is, we spend more time choosing between two options than it's really worth, because neither choice is bad. Nothing wrong with doing due diligence, but at some point it's fair to say "either option is okay" or "non- technical considerations are more important". I suspect this phenomenon shares something in common with language wars like Python vs. Ruby.

</comment></comment></comment><comment><USER16> Openbox isn't really a Blackbox fork. Early versions were derived from the project, but there's been a rewrite since then. At this time it shares nothing with Blackbox other than visual appearance.

</comment><comment><USER17> Odd that this article neglects to mention that LXDE's WM is OpenBox.

</comment><comment><USER18> dwm is configured by changing a .h file during compile time. now wonder it's so light :)

</comment><comment><USER19> Awesome. As a fluxbox user since ~2003, it's nice to see the little guys get some HN love.

Fluxbox does everything I need, and quite a few things I don't, or need only rarely.

<comment><USER20> I'm in the same boat.

To date, I have not found a solution that works better than fluxbox + emacs + urxvt.

</comment></comment><comment><USER21> monsterwm is even smaller than dwm, with 700k of memory (grep Rss /proc/`pidof monsterwm`/smaps | awk '{t=t+$2}END{print t}')

</comment><comment><USER22> Every time I find myself in X11-Windows, I use twm. It's there, it's small, it doesn't promise more than it can deliver.

</comment><comment><USER23>
       sudo apt-get install @lxde-desktop

Is the @ a typo? I have never seen an apt-get incantation like that.

<comment><USER24> No, I think it is a group shortcut. As in install all packages in the group lxde-desktop.

<comment><USER23> Do you mean task? As in a synonym for

      apt-get install task-lxde-desktop

</comment></comment></comment><comment><USER25> been using xfce4 for years, started because my machine was too slow, now i use it for every single machine.

somehow, it doesnt feel as fast as it used to be.</comment>


Ask HN: Working around daily ISP provider failures in SF - <AUTHOR> I am a comcast customer in central SF and have averaged 3-4 outages a day over the last several weeks. Comcast support has no explanation (other than blaming fires for awhile). Status page shows 51-500 customers w/o service in my hood. These outages last 15 minutes up to 3 hours.<p>Am now facing having to add a 2nd provider like Sonic to provide backup as my hotspot is limited. Any advice as to provider and simplist switch to support cable and dsl connections? I am aware of Monkeybrains but that may be an issue with landlord (home connection) and line-of-sight. Thx. <comment><USER3> I've had intermittent issues with comcast the last couple weeks - <USER2> randomly drops, and then my modem reboots after ~5m and everything is fine.

Fairly steady and reliable service for over 10 years prior to this however. I have a tech coming out today to take a look, so I hope he finds some bad wiring or something.

<comment><AUTHOR> Thx - Comcast doesn't deny there's an outage on their end, they just don't have any explanation as to what is going on or when this is going to end. I'm just reaching the point of accepting this as the new normal.

<comment><USER3> Have you had a tech out? A lot of the wiring in these buildings is old, or they have splitters and stuff out on the roof that go bad.

<comment><USER3> For the record, I had a tech out and he fixed my signal issues -- ironically, too much signal. It's been about 10 days now without a dropped internet connection according to my router logs.</comment></comment></comment></comment>


Ask HN: How do I build a mockup web app? - <AUTHOR>

How are services like myBalsamiq (web version of Balsamiq) built ? Is there a set of tools for this kind of drag and drop prototyping and wire-framing? Or it just rely heavily on javascript. <comment><USER2> Having never used myBalsamiq, I'm not sure what they built it in, but some of the tools you could use:

Flash, jQuery, ExtJS, HTML5

Isn't their desktop app built in Adobe Air? or have they moved away from that? I haven't used it in a while.

</comment><comment><USER3> I've always used Mockingbird. <http://www.gomockingbird.com>

<comment><AUTHOR> Keiferski, I'm actually asking how to build something like that Mockingbird. But thanks, I didnt know that one.</comment></comment>


New Universal Mobile Keyboard Works with Windows, iOS and Android Mobile Devices - <AUTHOR> http://blogs.microsoft.com/firehose/2014/09/16/new-universal-mobile-keyboard-works-with-windows-ios-and-android-mobile-devices/

<comment><USER2> $79.95 seems rather expensive for a Bluetooth keyboard as you can buy one from Amazon for only $11.57. Am I missing something?</comment>


Student arrested after bringing homemade clock to school - <AUTHOR> http://gizmodo.com/this-teenager-was-arrested-for-making-a-clock-his-teach-1730977157 <comment><AUTHOR> It's sad when a kid builds something fun with Arduino and his own teachers are not smart enough to understand their smart student that is trying to learn on his own.

</comment><comment><USER2> Obama: [https://twitter.com/potus/status/644193755814342656](https://twitter.com/potus/status/644193755814342656)

</comment><comment><USER3> This breaks my heart.

This kid should be running tutorials after school to show other kids how to work with electronics, not interrogated by police and bullied by his teachers.

This is so disappointing.</comment>


How much to charge for your Web App? - <AUTHOR> http://creately.com/blog/experience/how-much-to-charge-for-your-online-service/ <comment><USER3> I'm torn. On the one hand, it clearly succeeded as a publicity stunt.

On the other hand, in terms of discovering what users will pay for Creately, the experiment was a failure. By essentially structuring the system as "donate us money", you prime the users to think "Hmm, even $1 is being generous to them. I'm a big spender... I'll go as high as $3." That is, ahem, an _insane_ price point for _any service_.

You have to convince someone to dig out their credit card to pay you money. There is essentially no differentiation between $3 and $9 at that point, since neither amount is an appreciable amount of money to working professionals. (Students are another case. Since they're going to complain long and loudly about being made to pay, and are going to do their level best to steal your service anyhow, I think you can quite rationally make the decision just not seek their custom. Alternatively, you can segment your plans such that one which is free but helps your marketing meets their needs.) There are _tremendous_ advantages to the business, however, from moving from $3 to $9. (Revenues net of Paypal fees just increased by a factor of four.)

Note that $9 is still VERY VERY cheap. The fully loaded cost of a professional exceeds that for every ten minutes. Also, if you look at any SAAS business they'll tend to tell you the same thing: the most expensive plan, which is typically bought by employed professionals spending other people's money, brings in more revenue than any other plan. This has been mentioned by Wufoo in interviews, it was true of DropSend when they published their numbers, and I know it to be true of three other companies who have not given me explicit permission to make the fact known.

Additionally, as Creately noticed, the kind of people who are attracted by "This only costs a buck!" are the worst customers in the known universe. They cause hugely disproportionate loads on your support resources, and feel entitled to do so because they're Paying Good Money For This, Damn It. They tend to churn like crazy. They'll fail at the most trivial of tasks (like typing in their credit card details) and then blame _you_ for it. (When you spend a buck on something, if something goes wrong it is the merchants fault, the lazy bum. When you spend hundreds on something, you darn well check to make sure it went through alright.)

<comment><USER4> Perhaps now that we are moving into an age of micropayments the smaller dollar amounts have regained their separation. i.e. a buck vs a fiver.

<comment><USER3> I understand how someone typing a blog post on their $2,000 Mac while listening to music on their $300 iPod could perhaps think that we are moving into a new age of micropayments because he paid $1 for a fart app on the the $600 iPhone in the pocket of his $100 jeans, but I don't agree with him.

<comment><USER5> heh...your description of the emo mac dude gave me a laugh, thanks.

I'm curious how the same individual might value a subscription to "trendy $100 jeans...as a service", both in utility and price? I think it's been tried with luxury handbags for about $50/month, but I'm too lazy to look up what happened to that business (and my battery is at 3% so I can't look right now).

<comment><USER6> For starters, $100 jeans are on the low-to-mid-range end of the denim market.

$20'ish - el cheapo house brands at Target, Walmart, etc.

<$50'ish - Gap, Levi Strauss

<$100'ish - <USER2>

<$200'ish - Diesel, Seven for All Mankind

~$500 - Prada, etc.

If you think about what Avelle provides (LHaaS), it's a way for women to accessorize themselves for a big night out in a way far outside of their typical budget. That super-trendy, $1000 Fendi bag won't lend itself well to everyday usage for most people. Those $200 jeans, on the other hand, _cannot and will not_ be worn for that Big Event.

Imagine you're going to a cocktail party with a bunch of big-time politicos. If you're a woman, you might rent that Fendi bag from Avelle. No one in their right mind would say to themselves, 'hey, I'll go rent some trendy jeans for tonight's black tie event.'

A serious online competitor to those god-awful tux rental shops could be cool, though.

</comment></comment></comment></comment></comment><comment><USER7> I have a funny story about this subject. A while ago when we were charging $9.95 per month for the site and I felt pretty good (several thousand members) I was visiting someone that also runs a large for pay website.

He looked at what we were doing and he said 'double your price'.

I laughed at him, and said no way, people will cancel in droves, if more than half cancel it'll be a net loss.

Sales went _up_.

We basically doubled our income overnight.

<comment><USER8> Gotta try it with my service as well. One thing keeping us back from pushing it further up is the current, lower pricing.

What happened to the existing users when you doubled the price? Did your cancellations go up? Or did you freeze the price for the old users?

<comment><USER7> We gave them the option to lock in their account or to wait for expiry of their card and then get charged the new amount.

Most chose to lock in, and a very small number of them still have that rate even 3 years later.

We have fewer members now but that is due to other reasons.

Cancellations for the locked in accounts went down because those people thought they were getting a very good rate and knew that if they canceled and would sign up again it would be at the new rate.

At the time our retention was 3 months, so within 3 months the larger portion of the accounts were being charged at the new rate.

</comment></comment></comment><comment><USER9> I found the following approach very interesting:

* Generate a random price in the acceptable range (but don't tell the user about it)

* Let the user know that you made up a price and let him enter what he would pay

* If the user entered a higher price than the random one he gets the product, otherwise he doesn't

Of course this only works if you keep the user from trying to do this multiple times, for example by offering an invite-only system and giving every invitee only one chance.

</comment><comment><USER10> What if this were done iteratively? As they add more features to the premium, one could try creating different tiers with higher and higher starting points, you could then really start to see and breakdown where different segment's fall in the value scale. Anyone that paid more than the next tier, automatically gets in(can donate more if they want)? I am sure this would lead to too many plans (would probably need a moving bar to keep the numbers of plans reasonable).

</comment><comment><USER11> "The PWYW scheme did a good job in helping us gather invaluable data on our customers, but may not be sustainable over a long run. This is due in part to the fact that although we ask people to be Fair, not everyone is."

When fair is defined as "pay what you want", how do you define unfair?

</comment><comment><USER12> Given the prices listed of comparable products if they deliver more value than there competition they should be charging at in the same range.

If your app gets the job done better than visio for a company why shouldn't they pay you a comparable amount?

<comment><USER13> Because you are working to put the competition out of business?

<comment><USER14> But, in my humble opinion, fighting with lower price isn't good option (for anyone, in the long run). You should fight with features and/or better quality.

<comment><USER15> Depends on your market position. You can create a lot of value in the marketplace by commoditizing and simplifying an over-serviced, over-delivered, over-matched product.

This works in software too. For instance, Gmail and Amazon Web Services pull prices down on webmail and cloud services respectfully.

If the competition's strength is excellent service for more, provide no service for less. I know it sounds weird, but it has often worked. In a maturing market, many pragmatic and conservative customers will prefer the cheaper, simpler packaged product. The key is that you cut prices by far less than the actual cost of service of the premium competition, so you can make more profit across a wider base of customers.</comment></comment></comment></comment>


"long term dating/marriage/having kids with men 'isn't worth it'" - <AUTHOR> https://twitter.com/PennyRed/status/1099803360096530433 <comment><USER2> Any idea whose premise begins with "[Group] is the enemy" is pretty much guaranteed to be stupid at best, dangerous at worst (I say this more about the comments than the initial tweet).</comment>


ARIN IPv4 Free Pool Reaches Zero - <AUTHOR> https://www.arin.net/announcements/2015/20150924.html <comment><USER2> [https://news.ycombinator.com/item?id=10264513](https://news.ycombinator.com/item?id=10264513)

<comment><USER3> ... is secondary news coverage, whereas this item is the original ARIN announcement (also submitted as [https://news.ycombinator.com/item?id=10276711](https://news.ycombinator.com/item?id=10276711)).</comment></comment>


Structured Concurrency in High-Level Languages - <AUTHOR> http://250bpm.com/blog:124 <comment><USER2> The control flow issues mentioned there have been addressed many times. Coroutines and their discontents are well known. But the author has some good points about cancellation.

Cancellation isn't well-studied. It has two main cases - canceling a wait, and interrupting actual computation. The first case comes up more often.

If anything that can wait can be aborted, then things unwind better. Language support for this needs to be block-structured, as in Python's

        Lock lok;
        with lok :
          (do something)

Python uses exceptions, so the appropriate mechanism there would be to indicate lock failure with an exception, and not execute the "with" block. In error code languages, the locking block should return an error code.

Once a thread/coroutine/whatever is in cancellation, all waits should abort. So you rapidly fall through the code until the concurrent construct reaches its exit point. Unwinding still takes place. Non-blocking concurrency primitives should be allowed in this mode, so you can add things to a list, but can't wait on I/O. RAII things like file-closing on block exit have to be done that way, because the canceled construct can't wait for them.

QNX real-time messaging works something like this. QNX's basic interprocess communication primitive is MsgSend, which sends a message and waits for a reply. MsgSend can be canceled, or can time out; an error code is returned. All I/O requests are MsgSend operations and thus can be canceled. In QNX, everything that can block can be timed out or canceled. This is used to place upper bounds on how long things can take.

Canceling a compute loop is harder. If the compute loop is operating only on local data, it's not so bad. You need some data flow analysis to determine that the function being forced to error out doesn't have non-local side effects. If, say, you're inverting a matrix, and that needs to be aborted, you need to be sure that the matrix is never looked at again. This is probably easier in functional languages.

Once wait cancellation under control, so the thing you're canceling can't block, having to wait for the other thread/coroutine/whatever to reach its join point isn't so bad. You don't need to kill it; you can wait for it to unwind. So solving cancellation moots the problem of how to handle thread joins for failed threads.

</comment><comment><USER3> The idea of looking at things as a call tree (or graph) rather than a plain old stack is how Schemers think about things. We specifically avoid terminology like "stack frame" and refer to them as "continuation frames" because we don't tie the abstract feature to how it is implemented. A branch in the tree is an invocation of call/cc.

These recent complaints about structured concurrency in popular languages to appear to shadow the complaints about call/cc vs delimited continuations. More info here: [http://okmij.org/ftp/continuations/against- callcc.html](http://okmij.org/ftp/continuations/against-callcc.html).

</comment><comment><USER4> Oz's declarative concurrency is worth taking a look at. In Oz, a thread implicitly goes into sleep or wake up on data dependency. for example,

        declare
          FOO BAR % FOO and BAR are not bound to any value yet.
        in
        thread
          {print FOO} % the thread blocks here until FOO is bound to a value.

          BAR = 456   % Binds BAR which wake up any thread waiting for it.
        end

        thread
          FOO = 132   % Binds FOO which wake up any thread waiting for it.

          {print BAR} % the thread blocks here until BAR is bound to a value.
        end

Because of this, ordering of operations is easy.

<comment><USER5> This sounds like an easy recipe for race conditions. Consider:

        declare
          FOO BAR % FOO and BAR are not bound to any value yet.
        in
        thread
          {print FOO} % the thread blocks here until FOO is bound to a value.

          BAR = 456   % Binds BAR which wake up any thread waiting for it.
        end

        thread
          {print BAR} % the thread blocks here until BAR is bound to a value.

          FOO = 132   % Binds FOO which wake up any thread waiting for it.
        end

I swapped the instructions in the second thread. Does Oz detect that, or otherwise protect programmer from such mistakes?

<comment><USER4> It would deadlock but there is a debugger that shows the state of any thread and where it is blocked.

<comment><USER6> So it's race free.... If you test every single possible system state, and remove all the race conditions. No thanks.

<comment><USER7> A race condition is a situation where the result depends on the ordering/interweaving of threads. And that example isn't actually one.

It's a deadlock which are also bad but much more deterministic and easier to debug.

</comment></comment></comment></comment></comment><comment><USER8> Great follow up to the original argument. I certainly hope some language designers start to look really hard at these arguments.

        Off the top of my head:

        * Cancel all threads in the bundle.
        * Block until all threads in the bundle exit.
        * Block until at least one thread in the bundle exits. Cancel all the other threads.

I think there also is one 'restart any exiting thread' and a variant of the block until all rule where only failed threads are restarted. Hmm, actually - perhaps there should be variants specifying the behavior of failed threads in all cases?

<comment><USER9> > perhaps there should be variants specifying the behavior

It feels like Erlang/OTP is being reinvented right here again.

Once you get deep enough into concurrency the ideas start to converge on killable isolated processes with asynchronous message passing and programmable behaviors. Because with shared memory killing a thread has unpredictable consequences, you need to either enforce isolation or avoid consequences in some other way, like by not having multithreading and using an event loop. Isolated processes need to communicate with other processes somehow. You need message passing. But it has to be asynchronous to make it possible to implement various waiting behaviors. With event loops you get there via cancellable contexts and higher order programming, but on a single cpu. Getting into multi core or distributed systems yet again requires asynchronous message passing. At the end it's all actors everywhere.

<comment><USER10> What would be some usecases for which synchronous is insufficient and one has to reach for the hard to reason about asynchronous?

<comment><USER11> Synchronous messaging is insufficient for making multiple requests at once and waiting for the responses. Also asynchronous messaging allows for optimistic notifications -- for example to clear a cache when coherency isn't required.

With asynchronous messaging it's simple to build synchronous interactions if desired --- send a message and wait for a response; but you can't build asynchronous interactions on top of synchronous messages.

</comment></comment></comment></comment><comment><USER12> A proposal: what's being referred to as a 'bundle' or a 'nursery' should be called a 'loom'.

A loom has the precise relation to actual warp threads as a virtual loom would to software (green) threads.

<comment> irq-1 How about a "knot" which implies a structured organization of threads (like a knot of rope), and a messy tangle of threads (like a knot in hair.) Plus, it's funny that it's a homophone for "not".

</comment></comment><comment><USER13> For those interested in various approaches in this space that are very interesting, may I recommend:

* Haskell and in particular Marlow's async library.

* The Erlang language's Actor system along with the OTP framework as a different way of thinking about orphaned processes (via supervision trees).

* The Pony language, which can safely pass ownership of objects (and thusly coroutines) around.

</comment><comment><USER14> Isn't this really well trodden ground? Coroutines were known by the 60s, according to Wikipedia, and I have a really hard time believing that just about everything worth saying about them hasn't been said. I feel a little bit of scholarship would help avoid creating problems that have already been solved.

<comment><USER15> This comment doesn't add anything to the discussion. You could say this about anything, like say parsing, which was also "known by the 60's".

It's a "middlebrow dismissal": [http://www.byrnehobart.com/blog/why-are- middlebrow-dismissal...](http://www.byrnehobart.com/blog/why-are-middlebrow- dismissals-so-tempting/)

It ignores the difference between theory and practice. Whether you do coroutines in C, Python, or another language matters. Language features interact, and those interactions affect how you write specific programs, so treating it abstractly has limits. Python actually has 2 completely different notion of coroutine, both of which were implemented after the 60's.

The ground isn't really well trodden, because most languages don't have coroutines. Probably 99% of programs don't use coroutines (nearly every program in C, C++, Java). Pre-emptive threads are more common.

You also didn't mention any literature which would have "said all the things".

That said, here is a good paper from 2004 from the authors of Lua: _Revisiting Coroutines_. Among other things, it points out that "coroutine" doesn't mean one thing.

[https://scholar.google.com/scholar?cluster=14280883920152261...](https://scholar.google.com/scholar?cluster=14280883920152261782&hl=en&as_sdt=0,5&sciodt=0,5)

<comment><USER14> It's hard to give constructive criticism of the article, beyond suggesting background reading, because it seems both ignorant of existing research and naive as to the issues that arise.

Here are some of the relevant ideas and papers:

\- "A coroutine is like a control construct"\---a coroutine is a control construct. There is no "like". But there is a fundamental difference from a goto because it captures execution state (the stack and so on, also known as the continuation) which a goto does not. A continuation can only jump to program states that make sense (for some definition of "sense"\---you can at least count on variables being initialised, for example). A goto can jump anywhere.

\- "But coroutine is also like a variable"\---a coroutine closes over an environment. I.e. it is a closure. This doesn't really have much to do with being "like a variable". Representing closures is well studied in programming language research and there are many techniques for handling it E.g. [http://matt.might.net/articles/closure- conversion/](http://matt.might.net/articles/closure-conversion/)

\- "A coroutine can't be orphaned"\---those are your continuations. You now need to worry about either heap allocating continuations or copying the stack. E.g. [http://lampwww.epfl.ch/teaching/archive/advanced_compiler/20...](http://lampwww.epfl.ch/teaching/archive/advanced_compiler/2006/assignments/part5/continuations.pdf) And when do you free continuations? You probably need to GC them, as your control flow is now more complicated.

\- "A coroutine can be orphaned"\---this is where you need to think about semantics. What does it mean for a coroutine to be abruptly exited? It probably means leaking resources and hard to track down bugs. A lot of thought needs to go into this. (Somewhat relevant is this paper: [https://www.cs.indiana.edu/~dyb/pubs/LaSC-7-1-pp83-110.pdf](https://www.cs.indiana.edu/~dyb/pubs/LaSC-7-1-pp83-110.pdf))

The rest of the article isn't so interesting to me, because I don't think thread cancellation should be possible at arbitrary times.

So that's some of the existing work in the field, but the biggest issue is the need to think about the semantics, or programming model, of the concurrent tools you're introducing. The article does very little of this. Can you actually understand programs written using some proposed concurrency primitives? That's where it really gets interesting, and where recent work like [http://www.csc.kth.se/~phaller/doc/haller16-scala.pdf](http://www.csc.kth.se/~phaller/doc/haller16-scala.pdf) is making some thought provoking contributions.

<comment><USER16> > _- "A coroutine is like a control construct"\---a coroutine is a control > construct. There is no "like"._

Pedantic. A coroutine is a control construct in the same way an Exception is a control construct, or in the way a tomato or a cucumber is a fruit.

Adopting a particular naming depends on the categorization and the intention, not merely on the capabilities of a construct.

Even more so in a post, were the notion needs to be introduced to people who only associate the concept of a "control construct" to the more explicit and tamer constructs referred to as such, if and for loops, goto, etc.

> _- "But coroutine is also like a variable"\---a coroutine closes over an > environment. I.e. it is a closure. This doesn't really have much to do with > being "like a variable". Representing closures is well studied in > programming language research and there are many techniques for handling it > E.g. [http://matt.might.net/articles/closure- > conversion/*](http://matt.might.net/articles/closure-conversion/*)

The first part is just a formal definition, which doesn't negate the statement, and the latter part is just a generic reference to research on closures.

One could use the same kind of saying-nothing responses to all kinds of posts or papers.

<comment><USER14> "One could use the same kind of saying-nothing responses to all kinds of posts or papers."

You misunderstand.

If you know the name of the concept you can search for more information.

If you read the section on "But a coroutine is also like a variable" you'll see the author is struggling with how to represent coroutines. Closure conversion deals with representation.

</comment></comment></comment></comment></comment><comment><USER17> Isn't this the same as _Notes on structured concurrency, or: Go statement considered harmful_ [0] except using c rather than python?

One has a "nursery" while the other has a "bundle" with both hoping to control the lifetime of coroutines.

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

<comment><USER8> Did you read the preface? It is a direct follow-up to that post written by one of the people that inspired it in the first place. The post goes through some parts in a bit more depth than what the previous post you are referring to did.

But yes, the author has a very similar approach to the problem.</comment></comment>


Show HN: nnn – The missing terminal file browser for X - <AUTHOR> https://github.com/jarun/nnn/blob/master/README.md <comment><USER2> Very cool, very nice, but what about `ranger`? I don't see any differences between the two.

<comment><AUTHOR> Performance to begin with: [https://github.com/jarun/nnn#performance](https://github.com/jarun/nnn#performance)

You also have other goodies like a quick disk usage analyzer mode, _navigate- as-you-type_ , superfast _search-as-you-type_ filtering... extremely handy navigation shortcuts like `~` (tilda for HOME), `-` (last visited dir), `&` (startup dir), `cd .....` etc.

All of it in < 40 KB binary size (`ls` is around 126.5 KB), around 4 MB resident memory footprint.

<comment><USER2> Thank you. I'm removing ranger and installing nnn.

<comment><USER2> Actually I've tried nnn and changed my mind, it is indeed minimal and fast, but ranger has a lot of cool features I would miss (only file and image previews, actually).

<comment><AUTHOR> That's something I wanted to avoid by design. But I understand. Many thanks for trying it out!

</comment></comment></comment></comment></comment><comment><USER2> Shouldn't it be called "nnn is not noice"?</comment>


Lambda Calculus: The Y combinator in action - <AUTHOR> <comment><USER2> What?

<comment><AUTHOR> The Y combinator is one of the most beautiful idea in Computer Science: it allows to write recursive functions without using names at all!

<comment><USER3> Did you mean to submit a link? Or is this just a generic "hey, let's discuss this subject" kind of post?

<comment><AUTHOR> Oops, I forgot to submit the link. I opened a new story with the link: [https://news.ycombinator.com/item?id=12250435](https://news.ycombinator.com/item?id=12250435)

</comment></comment></comment></comment><comment><USER4> What the hell is going on here!</comment>


Tax Scam Records: Artist discovers his songs were released by shadowy companies - <AUTHOR> http://dangerousminds.net/comments/tax_scam_records_artist_discovers_albums_of_his_songs_were_released_by_shad <comment><USER2> There are some really amazingly rare and sought after tax scam records. I've been lucky enough to find/have a couple (Newban 2 & Jay-T - Party Time) but there's some heavy 4 figure LPs out there:

[https://gripsweat.com/search/?query=(%22tiger%20lily%22%7Cgu...](https://gripsweat.com/search/?query=\(%22tiger%20lily%22%7Cguiness%7C%22tax%20scam%22%7Ctsg\)&page=1&sort_by=price)

<comment><USER3> Nice, Newban is a great record. Some of the TSG releases are killer too - Spice and The Topics are my favorites. Never had any, though.

</comment></comment><comment><USER4> I don't understand how (as per the first paragraph) you can invest $20,000 and claim you lost $1,000,000. They did not explain that at all. Which seems stupid as that's what the article is about.

<comment><USER5> I found this ([http://nightflight.com/newpost/](http://nightflight.com/newpost/)) other article which tells a similar story but has slightly more detail. 1970s tax law apparently let you write off the (make believe) appraised value of a master recording rather than the actual cost.

<comment><USER6> Which doesn't make you money, as much as it offsets profits.

I think we're all familiar with a person who's done that.

</comment></comment></comment><comment><USER7> I'd like to see a wiki or list of various tax scams people have used over the years.

<comment><USER8> Not only tax related, this series of articles is highly entertaining and contains a plethora of financial fraud mechanisms [https://whitecollarfraud.com/crazy-eddie/crazy-eddie- fraud/](https://whitecollarfraud.com/crazy-eddie/crazy-eddie-fraud/)

<comment><USER7> Thanks!</comment></comment></comment>


Show HN: Blockchains, Bitcoin and Ethereum explained visually (part 2 of 2) - <AUTHOR> https://unwttng.com/what-is-bitcoin-ethereum <comment><AUTHOR> Full disclosure - this is a repost after realising that I forgot to add Show HN to both this and the previous part when I posted that.

<comment><USER2> Because there is nothing to play with or try out, it may not be obviously consistent with the 'show hn' guidelines. My understanding is that "show hn" is not really for blog post type content...with blog posts announcing a piece of software being a corner case.

None of which is to suggest that the article isn't interesting intellectually interesting. Only that intellectually interesting is the criteria for good 'regular' stories.</comment></comment>


Ask HN: Need career advice on software field to specialize on - <AUTHOR> I'm a software developer with about two years of experience, working for one of the big four. I recently joined a team that does some really cool stuffs, but it also made me realize my dispassion for maintaining services and the on-call responsibilities associated with it. These days I'm feeling a bit down by the fact that virtually all the software jobs out there will have such on-call responsibilities.
I also feel like my career has no real direction right now, and I wish to specialize in some technical field or business domain. The things that are important to me are:
1. Work-life balance: I would like to work in a field where my only responsibility is at work, 9-to-5. 2. Money: I like the amount I'm making at my current place at would like to at least maintain my salary. 3. Depth of domain field: I find that I'm more cheerful on days where I actively learn things and not so cheerful on others. <comment><USER2> Other companies split the work between development and operations (devops, Google calls it Site Reliability Engineer I think). That other team will be the primary contact if something fails, they follow instructions (your team wrote) and use tools (your team wrote) to fix errors and only if that fails they try to contact you. 9-5 is possible if that's a priority for you.

<comment><USER3> A smaller company maybe?</comment></comment>


Ask HN: Why does 'View Source' issue a new HTTP request? - <AUTHOR> I've noticed that both Firefox and Chrome issue a new HTTP request when you view the source for a web page that you've already loaded. It's particularly annoying when the page itself is slow to load or if it won't load at all.
Why is that? Wouldn't they have the existing source for the originally received page cached already? Is it based on Cache-Control headers?
This has been on my mind for a while (usually comes up when looking at what's behind slow web apps) and came up again with Piwik on the front page[1]. Their website was semi-down (HN hug of death) but eventually loaded. I wanted to see what their GA equivalent tracking code looks like but the page failed to load as rather than showing the cached copy, it tried to fetch a new one.
[1]: https://news.ycombinator.com/item?id=13210195 <comment><USER2> It's a bug: [https://bugzilla.mozilla.org/show_bug.cgi?id=307089](https://bugzilla.mozilla.org/show_bug.cgi?id=307089)

Or, it's a memory saving feature. To implement "View source from cache" requires keeping around the raw page HTML, which you might not otherwise need after parsing - except you probably will for all the developer tools to work, so this probably should just be considered bug.

<comment><USER3> How much memory is saved here? [http://www.httparchive.org/interesting.php?a=All&l=Dec%202%2...](http://www.httparchive.org/interesting.php?a=All&l=Dec%202%202016) 52 _kilobytes_ ? Really?

<comment><USER4> The browser would have to save the source text for EVERY tab it opens, regardless of whether you view source or not. That seems more onerous than making a separate request for the source code every once in a while.

<comment><USER5> Yes, but if you have more than enough memory, then that's no problem.

So, the browser should load the HTML page into a part of memory that can be discarded by the OS if the OS needs more memory. Actually I think it is strange that no such memory API exists in Unix.

EDIT: Anyway, storing it in the browser's file cache would also do the trick, I suppose :)

<comment><USER6> Isn't that one of the issues nowadays, that people have the attitude "we have enough memory" and thus don't tend to care about optimizing for memory usage anymore.

Your suggested solution, about discarding when memory is needed, solves this problem. But it solves a problem that would be created by needlessly storing a lot more data than needed. So it's a solution to a problem that was not a problem to begin with.

But I know, if it's a few kb, it will not make a huge difference.

<comment><USER7> > "we have enough memory"

Your phone is in disagreement.

<comment><USER8> My phone has a quite insane 3 GB of RAM.

<comment><USER9> My phone also has the insane 3GB of RAM, but last week Chrome killed Spotify and vice versa (music stopped playing) as soon as I switched apps. Sadly 3GB is not enough for Android and todays apps.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I wish View Source were more flexible. I would like:

* Raw: a view of the actual body as sent in the response. Although I'm not aware of the current situation, at least some browsers used to subtly alter what was sent, even for View Source (possibly related to validity corrections). I want a _guarantee_ that what I'm viewing is what the server sent.

* View source as it is today (with a good common understanding of what that means), but a bit more powerful. Give me a cursor so I can copy from the keyboard, for crying out loud! Maybe even let me edit the source so I can work with static pages more easily.

* Something in-between View Source and DOM inspector. E.g. the original source, guaranteed to be untouched by javascript, but cleaned-up for easier reading (given that the source returned by many websites nowadays is practically unreadable (take a look at this page, for example). Reformatting (where possible), maybe automatic expansion of any base href, consistent ordering of attributes, highlighting of errors, etc.

<comment><USER11> You can always use curl. Chrome allows you to copy paste a full curl command (with all the arguments and cookies) to issue an identical http request.

<comment><USER8> Identical Http requests don't necessarily return identical data.

</comment></comment></comment><comment><USER12> Once the DOM is ready, the browser has no need to keep the original source in memory or cache. For how many page views does the user want to view source? One in a thousand? You're asking the browser to waste space storing something that it will only rarely be asked to display.

<comment><USER13> it could be garbage collected when user closes the tab.

</comment></comment><comment><USER10> They (well, Chrome at least) even do that for a POST, which is highly questionable.

</comment><comment><USER14> I usually have Fiddler running constantly in the background.

If a page is slow to load and I want to see the HTML, I would find the actual HTTP request in fiddler and grab the HTML that way.

Alternatively, the element inspector doesn't re-issue the request, but it will show the _compiled_ HTML, so after DOM augmentation etc

<comment><USER15> Is there anything comparable to Fiddler for macOS? I heard you can run it in VM but that's just too much brute force for me.

<comment><USER16> Fiddler is available for MacOS.

<comment><USER15> Interesting. I had no idea they had a beta version for macOS. I've gotta try it.

</comment></comment></comment></comment><comment><USER17> Maybe the HTML source is discarded after the browser has built the DOM object tree?

</comment><comment><USER18> I think it may just be because in both cases it opens in a new tab with the view-source modifier, it treats it like you just opened a copy of the page in a new tab?

I believe if you open the inspector instead it does not issue a new request.

<comment><AUTHOR> > I think it may just be because in both cases it opens in a new tab with the > view-source modifier, it treats it like you just opened a copy of the page > in a new tab?

Interesting. I never payed attention to the resource prefix. Are those standardized at all? Both Firefox and Chrome use the same "view-source:" prefix.

> I believe if you open the inspector instead it does not issue a new request.

The inspector shows the current DOM, not the original loaded HTML, which could be different. It's probably "good enough" as in most cases the original HTML would be the simpler one (say a single div for a single page app) and the live DOM would show what look like right now.

<comment><USER19> It's not the prefix/scheme that's important, it's the fact that it's a new tab.

</comment></comment></comment><comment><USER20> I seem to recall that it wasn't always the case.

<comment><USER21> True and I was shocked that the referenced mozilla bug[1] is from 2006. Time really flies because it feels like yesterday I could view source without re- loading it.

[1]: [https://bugzilla.mozilla.org/show_bug.cgi?id=307089](https://bugzilla.mozilla.org/show_bug.cgi?id=307089)

<comment><USER22> Sweet memories:

[http://imgur.com/a/p02cQ](http://imgur.com/a/p02cQ)

</comment></comment></comment><comment><USER23> I once wondered this, but didn't think much of it. Now seeing the question, it seems quite clear. The DOM+CSS+javascript is pretty much like a computer running a (self-modifying) program. If it didn't do a fresh fetch, then what you'd be seeing is the contents of 'memory' after the program has been running some time. This is useful in itself, so we have Inspect. If you want to see the initial state, the program before execution begins, then you want to View its source(s).

</comment><comment><USER24> I'm not exactly sure why browsers do that, but I suspect that's due to caching.

However, I would suggest that you use "Inspect element" and open up dev tools - this way you will see DOM exactly as it is rendered.

<comment><USER25> Often the dom has been changed, and you want to know what the server actually sent

<comment><USER26> You can still do that with the inspect menu; if you look at the network history in Chrome, you can see the headers sent, the headers received and the body sent / received.

<comment><AUTHOR> > You can still do that with the inspect menu; if you look at the network > history in Chrome, you can see the headers sent, the headers received and > the body sent / received.

That only works if you have it open before the page loaded. It doesn't save information about network requests that occurred before the inspector was opened.

<comment><USER27> It would be handy if it did though since I continually forget to open inspector before the request.

I'd love a "I'm a developer, store all the things!" setting

</comment></comment></comment></comment></comment><comment><USER28> In Opera up to 12.x it does not.

</comment><comment><USER29> I suppose in today's web ecosystem, the initial HTML state of the page is useless in almost all cases after the DOM loads. Rarely will you care about the pre-javascript page, and if you do, you're probably debugging a web site, and the extra load shouldn't matter.

Where it could get interesting though, is if the content changes before you view the source. In that case, you're out of luck I guess.

</comment><comment><USER30> I wouldn't think view-source is a highly used feature that benefits from optimising much and your scenario sounds rare. If a "view-source:..." URL is entered into the browser directly you would need to write code to grab the page from scratch anyway so doing this always makes the logic simpler.

</comment><comment><USER31> Yeah, that always annoyed me. So far, i dont see any answer in this page. Really curious, tho.

</comment><comment><USER32> The html returned from the already performed HTTP action has been consumed, rendering the view in the browser. If you want to view the raw HTML instead, 'View Source' requests another copy of it, but does not render it.

</comment><comment><USER33> Same with save page, etc.

</comment><comment><USER34> Bug? Wow</comment>


(take 6 carin-meier) - <AUTHOR> http://clojure.com/blog/2011/12/12/take6-carin-meier.html <comment><USER2> Would Carin (or anyone) be willing to talk a little about adoption of Clojure in a work setting? I am trying to figure out how to introduce it into my workplace, and I need sufficiently complicated experiences far and above "Hello, World". Is it useful for mainly algorithmic/heuristic problems?

<comment><USER3> I have a couple of (take ...) interviews in the pipeline that focus on that very topic.</comment></comment>