Ask HN: Does this idea exist and who wants it? - <AUTHOR>

I've been in the middle of working on a start-up for the past 8 months or so, and during that time I've only had one idea that I thought to myself "That idea is worth a lot more money than the one you are working on right now, and it would be easier to engineer."
I wonder if this app already exists. If it doesn't, feel free to run with it if you see the same potential I did.
The app is this - a button to turn a Flickr account into an online store, where people can order prints or pay for the rights to use photos. Everything starts off at a dollar, but it's fully customizable.
Having tinkered with the Flickr API, I don't think this would be hard to engineer. And I think there is an easy revenue model (a cut of sales), a low barrier to entry for users, and a large long tail to make money off of.
So anyways, that's it. I know ideas are worthless, but if you want this one, it's yours.
EDIT: I'm working o n a website for hikers - www.trailbehind.com. Probably less money in it, but it's something I'm passionate about. <comment><USER3> [http://www.techcrunch.com/2007/04/19/imagekind-scores- partne...](http://www.techcrunch.com/2007/04/19/imagekind-scores-partnership- with-flickr/)

Sold to Cafe Press recently ($20m I believe).

<comment><AUTHOR> This is interesting. I wonder if they do a one-click conversion of Flickr account to online store. And do they sell stock photo rights?

Clearly, there is a lot of money to be made in the photo space. It's universal - everyone has a camera and a hankering to be an artist - me included.

</comment></comment><comment><USER4> It's a bad idea. The reason it's a bad idea is because there is no sustainable competitive advantage and you're putting yourself in a position where Flickr could wake up one day and marginalize your entire business. (At which point it would be a race to the bottom margin-wise, until you go under and they have a monopoly on the service.)

It's funny how the people here on HN seem to equate "thing that would be fun to build and use" with "good idea for a profitable business."

<comment><AUTHOR> If you have the easiest to use site, that makes people money off their Flickr purchases, then that's sustainable.

It's not like there is any "sustainable advantage" to Google search - <USER2> weren't first to market in the space, and they can be beat - but right now, no one can beat them.

It may be true - this app or Google might not last in "the long run." But what's the long run?

I'd say if you made this Flickr converter and made a few million bucks in a year or two, you'd be happy, even if Yahoo smashed you later.

Throwing around business buzz words like "sustainable competitive advantage" and "race to the bottom," and insulting the community to boot, is no way to argue. Take it from a guy who can program and who has a prestigious business degree - you are talking out of the wrong orifice.

<comment><USER4> Uh, those aren't buzzwords. If you have to choose a project to work on for a startup, one of the first things you should be asking yourself is "what can I do to maintain a slight advantage over my competitors for some reasonable period of time?" This should be one of the first questions you ask, it's a pre-condition.

It might be an exclusive partnership, a difficult to replicate technology, a patent, an incredibly novel or non-obvious idea, something you have domain knowledge that's relatively exclusive, etc. This particular idea has none of these, and would be marginalized overnight if it showed any indications of being a profitable venture.

Also, when setting out on starting a project that's going to take more than a few weeks, you want to pick a really good idea. You only get a few shots at this, particularly if you're going to quit your day job. You'd best prune away ideas that, best case scenario, you expect to "make a million bucks in a year or two and get smashed." Instead, you want to focus on the few ideas you have that you think could become the next Google. Of course, it generally doesn't turn out this way, but you should at least feel that it's within the realm of possibility.

I wasn't insulting the community beyond the posters here who are saying this is a great idea without actually critiquing the business side of things. If I see bad advice, I'll point it out. (Although I'll admit it was a bit snarky, I was just a little taken back by all the "Great Idea!" posts.)

BTW, insulting the poster isn't the best way to argue, either.

<comment><USER5> Dude above you is right: "If you have the easiest to use site, that makes people money off their Flickr purchases, then that's sustainable."

Look at Moo. They are A) profitable, B) run off Flickr, C) in a replicable space (e.g. not hard to copy), and D) still winning.

They win because they were first, and because they are cooler than the others.

<comment><USER4> There's a difference between pointing out a company that doesn't have a clear advantage and saying that given an idea, it's one worth investing months of effort in despite the fact that it doesn't have one. You need to remember that most ideas you execute on generally fail (and take time in the process of failing,) so you need to be chooosy when it comes time to dedicate yourself to one.

That said, being first is a small advantage, particularly in a new space, but not a great one. The real benefit of being first is making it possible for you to build a bigger one (like mindshare,) but there's a lot more luck involved than if you had just started out on a project where you had an incredibly larger advantage. You don't see the failed versions of Moo, now do you?

<comment><AUTHOR> The point is, it wouldn't take months to launch.

</comment></comment></comment></comment></comment></comment><comment><USER6> Ideas are not worthless! Good ideas can have potential, but as long as they're untested they're not worth money; they are worthy of pursuit.

</comment><comment><USER7> For prints, it would be especially nice if customers also got a frame. Without a frame wall art looks cheap. It's no fun buying a beautiful poster and not being able to display it. If someone knows how to economically ship a frame, selling it together with the customer's choice of flickr art would be interesting.

<comment><USER8> As four bars wrapped in a poster, with pins (or glue) to put it together, perhaps?

<comment><USER7> That sounds good expense-wise. Maybe also include a rectangular sheet of clear, flexible plastic to serve in place of the front glass. And one for the matting.

</comment></comment></comment><comment><USER9> Doesnt Flickr already have this? <http://www.flickr.com/do/more/>

</comment><comment><USER10> _"... Having tinkered with the Flickr API, I don't think this would be hard to engineer. And I think there is an easy revenue model (a cut of sales), a low barrier to entry for users, and a large long tail to make money off of. ..."_

Why just flickr? Why not all the available images sites?

<comment><AUTHOR> Starting with the big one seems prudent.

<comment><USER11> I remember reading somewhere that Facebook has more pictures than Flickr, though its mostly pictures of friends, but might be worth looking into that as well

</comment></comment></comment><comment><USER12> So if you are going to make profit out of a site built on top of the Flickr API, then you'll have to use the commercial API. So the factors to consider would include the cost of the commercial API too. Besides, you'll also have to use some merchant account/Paypl to process payments which again eats off a bit of the money you get out of your commission you get out of letting people sell the pics.

This idea would automatically turn a amateur photographer's or artist's flickr account into something the person can make a profit by selling his best stuff. That would atleast fund upgrading his cameras or buy new colors. You could start by targeting amateur photographers and artists. But make sure you find an extra stream of revenue apart from sales commission.

But idea is sweet.

</comment><comment><USER13> I really like the idea, at least the stock rights part of it. The printing part feels over saturated, but the stock photography part feels like it could be done.

Email me, I'd like to talk more about this.

</comment><comment><USER14> Good idea. I'd like to see something like this become more integral on Flickr. I've been doing some searching for ideas for album artwork, and I found something on Flickr I'd strongly consider using, but I'll still have to contact and negotiate and it would be nice to have a bit of a framework for doing so, so that the photographer isn't potentially put off or things the email isn't legit. This sounds a lot like what youlicense.com does for music, btw.

</comment><comment><USER15> Sounds good until Yahoo! integrates it into their site...

<comment><USER16> ...by buying your company. ^_^

</comment></comment><comment><USER17> It's a great idea.

One reason why:

Blogs and news services are pulling more and more photos from Flickr. If you can give the photogs on there an easy way to just let people come and get their pictures, without having to track down permission from them, you'd make life easier for the blog editors.

<comment><USER18> _Blogs and news services are pulling more and more photos from Flickr._

Because they don't want to pay for them on sites like iStockphoto that already exist to give photographers a way to market/sell their products?

<comment><USER17> Nope.

Because istockphoto doesn't have anything resembling "news" photos. Whereas Flickr's got lots of photos with real people in them.

I've used istockphoto extensively. it's all models, references, icons etc.

If I need a decent picture of the Mayor of Chicago at a recent festival, there might be 10 on Flickr.

There won't be any on istockphoto.

</comment></comment></comment><comment><USER19> Better if default price is a quarter rather than a dollar.

<comment><AUTHOR> A good and easy thing to A/B test.

</comment></comment><comment><USER20> It's a great idea, though I think ImageKind covers most of this.

</comment><comment><USER21> You think to yourself in the third person?

<comment><USER22> I assume you meant "second" person. Surely everyone does this. "You don't really want X." "Dammit, Randall, that was a stupid idea."

You don't do this?

<comment><USER23> I think to myself in the first person sometimes, in the second person at others, and even as a _group_ occasionally.

For example my thoughts look like, _"I should work from home today"_ , or _"Bill, you're a genius"_ , or sometimes like _"Why don't we just go see if there's any ice cream left..."_

<comment><USER24> I have thoughts like that all the time. My usual first one of the day is :- " You know Maggie, we really should get up now " :) xx

</comment></comment></comment></comment><comment><USER25> This is a good idea. Last month I was creating a simple website and I needed a stock photo. I went to Flickr and looked for a few minutes because I knew something would be available there. Had I found one I would definitely pay for it.</comment>


When the memory allocator works against you - <AUTHOR> https://glandium.org/blog/?p=3698 <comment><USER2> How about trying pypy? It has different GC/memory allocator and the 2.7-compatible branch is pretty much drop-in replacement (Unless you need something like PyQt).

</comment><comment><USER3> The author states:

>"Import manifest" phase (which, in fact, allocates and frees increasingly large buffers for each manifest, as manifests grow in size in the mozilla- central history)."

I am not familiar with the reference of a "manifest" or importing them at least not in the context of memory allocation. Can someone shed some light on this?

Also right after the author states?

>"To put the theory at work, I patched the python interpreter again, making it use malloc() instead of mmap() for its arenas."

If I understand correctly the author is trying to remove the possibility of entanglement but doesn't the malloc() glibc library routine translate into an mmap() system call? I am not sure how that would help disambiguate memory allocators then.

<comment><USER4> > "Import manifest" phase ... in the context of memory allocation [+].

+of git operations.

<comment><USER3> Sorry, I don't understand your reply. Could you elaborate?

<comment><USER4> A manifest is an element of a Git repository. Importing a manifest is a git operation. So OP is looking at memory patterns per distinct git ops.

<comment><USER3> I see, that makes perfect sense. I'm not sure how I missed that, thanks.

</comment></comment></comment></comment></comment><comment><USER5> >"I hadn't optimized for memory use in the first place."

It is git, it is made to grow and get into billions of string comparisons. Anyways...

C/c++ would have probably been a better language for his problem.

Simply prealocate as much as needed as a working buffer and eliminate the need to profile libc and patch your interpreter altogether.

<comment><USER6> I concur. If the memory allocator causes problems and you use a language with managed memory/a garbage collector, you're doing something wrong.

<comment><USER7> An aggressive, copying garbage collector would have eliminated this problem from the start. People often argue that GCs have unavoidable overhead, but it's bounded overhead; they defragment your program with every GC cycle.

<comment><USER6> GC does have unavoidable overhead, in particular, it makes the execution times of your binary extremely unstable and high-variance. Not to mention, it has no idea how your program uses memory, such that it is bound to use a generic approach while with manual management, you can get real and high performance.

<comment><USER8> > it makes the execution times of your binary extremely unstable and high- > variance.

Not necessarily, it depends on your allocation patterns. The same can be said for using malloc.

> Not to mention, it has no idea how your program uses memory, such that it is > bound to use a generic approach

Ditto for malloc.

> with manual management, you can get real and high performance.

Using a GC does not mean you can't manually manage allocations. E.g. say you are allocating and deallocating a lot of Point objects. You keep a free list of Point objects that you can recycle. If you need a Point, you first see if there are any in the free list. If so, you pop the first one off the list and reuse it. Otherwise you allocate a new one. When you're done with a Point, you push it on the free list.

<comment><USER9> >> Not to mention, it has no idea how your program uses memory, such that it is bound to use a generic approach

> Ditto for malloc.

malloc != manual management

> Using a GC does not mean you can't manually manage allocations. E.g. say you > are allocating and deallocating a lot of Point objects...

But that's not using a GC. It's manual memory management.

<comment><USER10> That's aggressively missing the point. If you design the program architecture around manual memory techniques, the runtimes are stable even in a GC. If you use malloc willy-nilly throughout core algorithms, your runtimes become unpredictable.

<comment><USER9> But my point was simply that you can't defend GC by contrasting to manual management, if you do manual management.

> If you use malloc willy-nilly throughout core algorithms, your runtimes > become unpredictable.

First, where did I say "use malloc willy-nilly"? Second, do you have experience with that? I haven't much, but I haven't heard your claim before.

Of course "willy-nilly" should not be done with real-time constraints. But I have written a substantial algorithmic program (no RT constraints) in that style when I didn't know better, and it was very well performing. (probably glibc's malloc was optimized for my allocation patterns).

The main problem I see with that style is that each malloc has memory overhead, and that it leads to unmaintainable code.

<comment><USER6> Actually, to address realtime constraints... In my job, I work on systems with realtime constraints and even in less critical parts (latency of ~100 microseconds is still acceptable) we had to eliminate all malloc calls. Mostly because malloc on our platform essentially acquires one big lock for memory operations and if some other process has that lock, you get nasty delays or even priority inversions. Allocate a big chunk beforehand, preferrably in the form of ring buffers, and then operate on these if you need precise timing and performance.

<comment><USER9> ... or use a version of malloc on that preallocated thread-local chunk. At least if the only problem is locking overhead.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> Good thing you didn't optimize prematurely ;)

</comment><comment><USER12> ITT: people being snide about scripting languages over a post digging into a glibc malloc mishap

<comment><USER6> Did he really find a bug in glibc malloc? He didn't write that. This sounds like a bug in the python runtime and possibly in the offending program itself.

<comment><USER13> I don't fully understand the post, but I don't think the author found a bug anywhere. The main discovery the author made was that CPython uses its own allocator on top of memory allocated by mmap. This leads to a difference between the reported allocated memory by malloc and the memory used by the program. The author still hasn't discovered a root cause for the large amounts of memory allocated.

<comment><USER14> Author here. The last graph actually shows that the problem still happens with CPython's allocator disabled.

Also, to clarify, the amount of memory allocated is actually _decreasing_ (in- use bytes), while the memory allocator requests more and more memory from the system (system bytes), presumably because of fragmentation.

<comment><USER6> >The last graph actually shows that the problem still happens with CPython's allocator disabled.

Excuse my ignorance, but couldn't it still be a problem of the python runtime? I.e. they use malloc wrong, etc?

</comment></comment></comment></comment></comment><comment><USER15> People never learn. News at eleven.

Just the other day was reading N. Wirth objecting on using a resource lavishly just because it was cheap. And just now, in the same front page of HN, some guy wants programmers to stop calling themselves engineers because they aren't.

Well, let's build a bridge using all the iron we can get our hands on (iron is very cheap you know); or even better, let's use all the RAM in the computer with this program of ours.

<comment><USER16> I'm pretty sure "real" engineers would be very much in favor of using a cheap resource lavishly, if the tradeoff is worth it. Adding a million dollars to the design cost in order to save $100,000 in resource costs isn't a good idea, and a good engineer will design accordingly.

The difference is that engineers have codified this and call it "safety factor." Your house is built to carry perhaps ten times the load it truly needs to, because it's cheaper to throw in extra materials than it is to build it to hold precisely what it needs. An airplane is built with much thinner margins, because saving materials is far more valuable, and it's well worth the extra time and attention to.

<comment><USER15> Look up Hamming's course on "Learning to learn". An optimal design is not robust. You add a safety factor and this addition is wasteful in some sense (thus not optimal) and necessary in another. Do you design a building so that the toilets are optimally used? Likewise for planes.

But just because you have enough of a cheap resource (RAM) it is not a given that using it in excess is either optimal or robust.

<comment><USER17> Also, most users aren't really aware what's using up the resources - only that their computer gets slower with time. I actually wish Windows would start naming & shaming applications - e.g. by showing a balloon when the system slows down, that would say that application X and Y are consuming most of the resources.

As it is now, CPU, RAM and storage usage are perfect externalities for developers. The result of their abuse is user frustration, and reduction of the number of things people can do on their computers. That, and wasting user time. Unfortunately, there's no way that would make the developers suffer costs for wasting user's resources, so the only thing that lets us have lean software is engineering competence and human decency (both of which seem to be in short supply).</comment></comment></comment></comment>


LulzSec Hackers Make Enemies Online - <AUTHOR> http://bits.blogs.nytimes.com/2011/06/24/lulzsec-hackers-make-enemies-online/?hpw

<comment><AUTHOR> Someone in a previous discussion mentioned that the internet was still very much 'the wild west' with regard to security. I thought it was interesting that the story told here seems like something right out of an old western movie.</comment>


Zynga: 40-Year-Old Moms Are the New Hardcore Gamers - <AUTHOR> http://www.webpronews.com/zynga-40-year-old-moms-are-the-new-hardcore-gamers-sxsw-2011-03

<comment><USER2> Actually 40-year-old Moms are not hardcore gamers at all. In fact the beauty of Zynga is that it went to the basics. Most people are actually not hardcore gamers. Rather they simple want basic games. These are the 40-year-old moms where the amount of technology they want to digest is limited. While Zynga has room to grow in technology, their success lies on everyone not being hardcore and rather simply willing to spend a few minutes every day playing a game.

</comment><comment><USER3> They're hardly new hardcore gamers, as anyone who's played Gin on Pogo.com in the last ten years knows.

In fact, they were 40 then; now they're 50!</comment>


Senate Judiciary chairman urges PACER to restore access to removed case archives - <AUTHOR> http://www.washingtonpost.com/blogs/the-switch/wp/2014/09/12/senate-judiciary-chairman-urges-pacer-to-restore-access-to-removed-case-archives/ <comment><USER2> Our law firm wrote to the Chief Judge of the 2nd Circuit (in NYC) last month asking for these PACER docs to be restored. [http://adlervermillion.com/removal-of-public-pacer- records/](http://adlervermillion.com/removal-of-public-pacer-records/)

Leahy obviously has more pull than our little tech law firm.

</comment><comment><USER3> They get paid $0.10 for each "page view" (and a "page view" is an estimate of how many 8.5"x11" paper pages would have been required to show the content) and they _still_ can't be fucked to keep the archive online. Incredible.

</comment><comment><USER4> Total fucking bullshit.

Here's a thought experiment: ask Google if they would do it for free!

I'd bet that Google would jump on it, just because. Okay, so they'd serve ads for bail bondsmen and for ambulance chasers with every page view, but at least we'd have the data.

</comment><comment><USER5> What is this incompatibility they are alluding to? If the data could be viewed in the old system, it can be extracted..

<comment><USER6> I'm sure you are right, but the PACER system is a mess and certainly feels neglected. Like the article mentions, it is not a unified system. Each district, and each court, can have their own version of the system. Some courts are on the same version but with custom modifications.

This tells me that the system has no real architect. The left hand doesn't know what the right hand is doing. Migrating old data? The people in charge don't know how to do it, and don't much care.

There's a lot of opportunity to fix this service.

<comment><USER7> To be fair, the AO has to deal with a lot of local personalities.

Chief judge of each court basically has their own say, plus whatever their admins/clerks want.

There are 94 federal judicial districts. So it's like having 94 different clients.

Nobody at the top (which is really the supreme court) is really willing to say "no, we are all going go this way", because the people at the top are judges, not technologists. There is a tremendous amount of politics involved.

All that said, i'm not defending them. THey have 164 people working in IT. That's plenty to build a functioning database system. I've seen some public judge apologists for the complexity of pacer: that nobody understands how hard this is to build, and that it's outside the realm of normal technologies.

That, to me, just demonstrates the problem: They think their problem is very very hard, and while not easy, it's not _that_ difficult. People build systems that handle number, scope, and complexity equivalent to PACER every day.

<comment><USER8> Judge Kopf has a really interesting post about this

[http://herculesandtheumpire.com/2014/09/03/the-latest- really...](http://herculesandtheumpire.com/2014/09/03/the-latest-really-big- screwup-with-pacer-and-cmecf-requires-a-quick-fix-then-serious-reflection-but- not-utter-disdain-for-a-judicial-records-system-that-is-a-triumph-of-good- government/)

<comment><USER7> This post is in particular, where i say "judge apologist" He thinks this is really difficult and no techies understand. In particular, he says

"3\. For those who live in the IT world outside the judiciary, it is fashionable to trash PACER and CM/ECF. The problem is that those digit-heads are clueless when they get beyond slot A fits into slot B. Of course, in a perfect world these systems would be elegant and the cost to the public would be zero. But we don't live in the pristine world of the computer geeks. They know absolutely nothing about managing a large organization, and that is particularly true for an organization that supports judges who have jobs for life under the Constitution. "

This is utter and complete bullshit from top to bottom. It is a stereotypical judge view of the world of technology. An old and outdated view that hasn't been true for 20 years.

<comment><USER8> Ha okay I understand. But you cut off the important bit:

As a consequence of this real life illiteracy, these outsiders have no clue what a triumph these systems are from a variety of perspectives such as internal management of cases to external judicial transparency. The will and skill necessary to convince the internal stakeholders (judges and lawyers) to adopt the concept of these systems (to let go of paper) and then construct a dual public/internal system with few glitches is a major milestone in the annals of good government.* This was a truly a monumental achievement. For my money, PACER and CM/ECF should be here to stay despite the present debacle.

RGK understands that this is technically pretty straightforward but going in guns blazing will not endear you to an Article 3 judge. At the end of the day you are replaceable, they aren't.

<comment><USER7> "The will and skill necessary to convince the internal stakeholders (judges and lawyers) to adopt the concept of these systems (to let go of paper) and then construct a dual public/internal system with few glitches is a major milestone in the annals of good government.* "

See, but i disagree with this. All it really demonstrates is a lack of high level management and drive. The AO and the judicial council could have just done this. There is enough political power and will at the top to accomplish the goal. It just wasn't used. Because of this, to me, PACER is not a triumph of good government, it is the "mission accomplished" of the government world.

It stays that way. Nobody feels it has to change, because they think they already did everything there is to do.</comment></comment></comment></comment></comment></comment></comment>


COBOL thwarts California's Governator - <AUTHOR> http://www.theregister.co.uk/2008/08/14/cobol_california/

<comment><USER2> This sounds like a case of "Damn, I don't want a pay cut. I don't want to deal with the fallout of being the head of the department that has to hand out the pay cuts.. Better come up with an excuse!" more than a computer system problem.</comment>


The Assumption of Normality in Time Series - <AUTHOR> http://sujithjay.com/2018/03/10/The-Assumption-of-Normality-in-Time-Series/ <comment><USER2> I still do not see the complete picture. Why is the assumption of normality important? Other than to simplify the calculation of parameters in ARMA models.

<comment><AUTHOR> The short answer is I don't know. However, the convenience of simplifying the calculations is, in my opinion, a win. Again, I am myself not convinced. Probably, my premise on the ubiquitousness of normality assumption on the residuals in ARMA models is itself flawed.

<comment><AUTHOR> In a way, I am trying to link it with the central limit theorems. But, I may be woefully lost. I am just a novice in this.</comment></comment></comment>


What children's drawings would look like if it were painted realistically - <AUTHOR> http://www.elezea.com/2011/12/realistic-childrens-paintings/

<comment><USER2> Monster Engine? More like Nightmare Fuel. This is why I'll never have kids.

</comment><comment><USER3> "Be sure to check out the whole gallery."

<comment><USER4> "...here" (<http://www.themonsterengine.com/artwork>)</comment></comment>


Finding Developers for Your Startup Is Like Dating. And How to Master It - <AUTHOR> https://blog.nontechfounder.co/finding-developers-for-your-startup-is-like-dating-a2335664971a#.pujhxnifh <comment><AUTHOR> Why your opening line might put off your perfect match.</comment>


Forum scraping sites taking over my search results - <AUTHOR>

I do code solution searches all the time on Google and I've started hitting some really worthless sites that just scrap content from other sites and put it back up with AdSense. Is there any way I can permanently exclude sites from my searching? Are these sites breaking any actual rules I can report them for?
http://www.thedevsea.com/
http://www.bigresource.com/ <comment><USER2> You can permanently include and exclude sites with Google Custom Search (<http://www.google.com/cse/>). I added mine to my iGoogle page so I do all my searches from there instead of google.com.

Currently, I blacklist:

answers.yahoo.com

slideshare.net

scribd.com

bigresource.com

experts-exchange.com

</comment><comment><USER3> Sure. Add "-site:www.thedevsea.com -site:www.bigresource.com" to your search query.

</comment><comment><USER4> Yeah I've been seeing this too recently, mostly "codeweblog" results.

I thought Stack Overflow was doing a pretty good job of burying these sites.

</comment><comment><USER5> I noticed the same thing. Maybe its just a couple of days till googles webspam team catches on, but it's annoying none the less :(

<comment><AUTHOR> devsea was a new one for me, bigresource has been doing this for a while now and they just started framing all outbound links</comment></comment>


Google Page Speed Online - <AUTHOR> http://pagespeed.googlelabs.com/

<comment><USER2> Nice tool, even if it makes some funny suggestions:

Minifying the following JavaScript resources could reduce their size by 1.1KiB (0% reduction). Minifying <http://ajax.googleapis.com/.../jquery-ui.min.js> could save 641B (0% reduction). Minifying <http://ajax.googleapis.com/.../jquery.min.js> could save 516B (0% reduction).

</comment><comment><USER3> Rats, they got me:

The following cacheable resources have a short freshness lifetime. Specify an expiration at least one week in the future for the following resources: <http://www.google-analytics.com/ga.js> (1 day)

<comment><USER4> Heh...

The following publicly cacheable, compressible resources should have a "Vary: Accept-Encoding" header: <http://partner.googleadservices.com/.../google_service.js>

</comment></comment><comment><USER5> This is nice, but I find it much less usable than GTMetrix: <http://www.gtmetrix.com> which runs both Google Page Speed and Yahoo YSlow.

As an added bonus, GTMetrix also shows you the resource loading timeline.

</comment><comment> mike-cardwell I only got 97/100 for <https://grepular.com/> because:

1.) I have 306 Bytes of inline JavaScript

2.) Minifying <https://grepular.com/> more than it already is could save 794 Bytes, ie less than 1% of the page size.

3.) They want me to defer javascript until after page load. It's the last thing in the body anyway...

None of those are valid complaints. Where's my 100% damnit

<comment><USER6> Google.com has 100. Facebook has a 99.

The best I've gotten to (on a real site) is a 98, but I'm quite pleased that I've got a few sites faster than pagespeed.googlelabs.com (95)

</comment></comment><comment><USER7> Try entering the URL of the service itself[0] for a small easter-egg.

[0] <http://pagespeed.googlelabs.com/>

</comment><comment><USER8>
      The page Hacker News got an overall Page Speed Score of 86 (out of 100).

<comment><USER9> I actually don't mind HN taking a while to load. It't not that we have to fight for every new user by aggressively optimizing page load time. Btw. the recent changes to the HN backend already improved the average speed a lot.

</comment></comment><comment><USER10> This suggestion from Google especially looks fun:

The following publicly cacheable, compressible resources should have a "Vary: Accept-Encoding" header:

        * http://www.google.com/buzz/api/button.js

However, it's a useful tool. It gives me useful suggestions for improving.

Anybody knows a simple tool to minify javascript?

<comment><USER11> I often use the Closure Compiler at <http://closure-compiler.appspot.com/> (online) and <http://code.google.com/closure/compiler/> (offline)

<comment><USER10> Many thanks! I've just found a simple tutorial of how to use it in Python script: [http://code.google.com/closure/compiler/docs/api- tutorial1.h...](http://code.google.com/closure/compiler/docs/api- tutorial1.html)

So, I've written my own script, which minified seven js-files with total size 84.8 KB to one file with size 26.7 KB. Plus gzip and it will be very small.

Thanks again.

</comment></comment></comment><comment><USER12> I am surprised it doesn't catch or say anything about Flash

</comment><comment><USER13> "The page Google got an overall Page Speed Score of 100 (out of 100)." ... so they eat their own dog food, or was the homepage the pinnacle of excellence for the building this tool?

</comment><comment><USER14> I like how Google.com scores a 97, while Bing.com scores a 96 (ha!)

</comment><comment><USER15> Surely it would be in their best interest not to continually flag their own services as needing improvement.

Running <http://www.beseku.com> primarily indicates that they don't setup their Analytics or jQuery CDN properly.

</comment><comment><USER16> Is there a way to analyze which server (CDN) delivers the same content faster?

</comment><comment><USER17> I wonder what would happen to my 15% conversion rates if my shopping cart wasn't so crappy... I'm superstitious about switching though because of a fear that it might mess up our organic search traffic.

</comment><comment><USER18> Hmmm... Contrary to a lot of recommendations I see here on HN (patio11 mainly), they seem to recommend enabling keep-alive.

<comment><USER19> That's because patio11 is telling you how to keep your site alive under load, while that page is telling you how to decrease your page load times. They're contrary goals in this case. Keep-Alive makes things load faster, but it puts a cap on how many clients can connect to your server before it curls up and dies. It would be ideal if Apache would let you set a high-water limit for Keep-Alive connections after which it turns the feature off, but I don't know any way to do that. You can set how long they're kept alive, and you can set how many requests are allowed per Keep-Alive session, but not how many sessions are kept alive.

<comment><USER20> This is only true for servers that use separate thread/process for each request... It doesn't apply to event-driven servers (nginx, etc).

I'd even say that keep-alive is always your friend and the longer you can keep connection open the better... Of course there are always OS-level limits (open file descriptors, etc), so you should use LRU-queue on idle keep-alived connections to make sure that you won't run out of resources...

</comment></comment></comment><comment><USER21> Umm the Chrome extension states it can access: "All data on your computer and the websites you visit".

Say what?

<comment><USER22> It's very common. It's a limitation/feature of the Chrome API. If you want to make an extension that can be run on any page, this warning will appear.

</comment></comment><comment><USER23> Nice !!

<comment><USER24> did you try google.com?

[http://pagespeed.googlelabs.com/#url=http_3A_2F_2Fwww.google...](http://pagespeed.googlelabs.com/#url=http_3A_2F_2Fwww.google.com&mobile=false)

</comment></comment><comment><USER25> Nice to see google cheating:

<http://i.imgur.com/JxFKP.png>

<comment><AUTHOR> How is Google cheating?

<comment><USER26> Because on <http://pagespeed.googlelabs.com/> it says perfect score.

<comment><AUTHOR> I just noticed that your screenshot isn't even of Page Speed. It is of the Audits tab in Chrome Developers Tools.

<comment><USER26> It is not mine, but gautaml's one, and it use the independent tool of chrome that perform the same test. But when using the webservice it shows different results.

<comment><AUTHOR> My bad. I wasn't paying attention to the usernames.

Are you sure they perform the same tests though? Why would Google build a Page Speed Chrome extension if the exact same algorithms were already built in? I suspect they are working towards the same goal but are approaching it differently.

<comment><USER25> It likely is a different analyzing system but the web appears very much modeled after the audit tab.

I just found it funny that the web gave google.ca 100/100</comment></comment></comment></comment></comment></comment></comment>


Posthaven's domain appears to be parked by Godaddy - <AUTHOR> http://posthaven.com

<comment><USER2> Garry (Posthaven founder) is on it.

</comment><comment><USER3> Sorry about that. We're working with GoDaddy now to resolve this DNS issue.</comment>


How not to think like a programmer - <AUTHOR> https://medium.com/@semicolon_sucks/how-not-to-think-like-a-programmer-2a147f2221b6

<comment><USER2> Akshay, it looks like you're the person who wrote this and posted it. Thank you for the contribution. It deserves to make the front page.

This is insanely important and may be the best HN link all week. Any engineer who routinely feels frustrated when working with other people should pay attention to this.

I've done engineering and sales, which are very different skillsets. More importantly, I have been mentored by other people who are world class at these respective skills, and have been very lucky to have the opportunity to learn from them.

Even though not everyone should learn to code, it is valuable to be able to put on the other person's hat.

Non-engineers need to respect that engineers deal with situations that don't happen in everyday life. An engineer is frequently presented with situations that boil down to "it does work" or "it does not work". There is no gray area, and typically the computer is not very polite in the way that it tells you that you're wrong -- errors rarely say "Hey, I hope you aren't upset about this, but something's not working right. Want to talk it through and find a solution?" Instead, we deal with messages that have the emotional sensitivity of "screw you!", or if we are _lucky_ , "screw you! #32"

Being in this mindset all the time will condition you to thinking in a certain way, and that's what is required to program. People, on the other hand, don't work like this, and if you can see the difference and act on it, you will benefit from it.

<comment><AUTHOR> Thanks man. I totally agree. Sometimes I still get frustrated while speaking with clients and it takes huge amount of efforts to convince myself to look at things from the client's perspective.

</comment></comment><comment><USER3> The point driven home by this article is really about how to transition from being an agile problem solver to a product designer/manager.

<comment><AUTHOR> When I started to write the article this is exactly what I was trying to convey. But over time I realized that even when you are working as a full stack developer, you need to understand a software product's other aspects apart from coding to build a great product. Otherwise you are just building in vacuum which I think is the wrong way to build anything.</comment></comment>


FuckItJS: Dynamically Removes Errors From JS Code - <AUTHOR> http://github.com/mattdiamond/fuckitjs

<comment><USER2> This would totally be usefull for wordpress sites when you install that one plug-in the designer just HAS to have... that proceedes to barf all over your javascript

</comment><comment><USER3> i do not understand... apart from a joke what is this? i do not even find it funny...

<comment><USER4> A way to write client-side php

<comment><USER5> This is also a bad joke.</comment></comment></comment>


Holding a Program in One's Head (2007) - <AUTHOR> http://paulgraham.com/head.html <comment><USER2> I'll leave this here

"I believe that the clue to his mind is to be found in his unusual powers of continuous concentrated introspection. A case can be made out, as it also can with Descartes, for regarding him as an accomplished experimentalist. Nothing can be more charming than the tales of his mechanical contrivances when he was a boy. There are his telescopes and his optical experiments, These were essential accomplishments, part of his unequalled all-round technique, but not, I am sure, his peculiar gift, especially amongst his contemporaries. His peculiar gift was the power of holding continuously in his mind a purely mental problem until he had seen straight through it. I fancy his pre-eminence is due to his muscles of intuition being the strongest and most enduring with which a man has ever been gifted. Anyone who has ever attempted pure scientific or philosophical thought knows how one can hold a problem momentarily in one's mind and apply all one's powers of concentration to piercing through it, and how it will dissolve and escape and you find that what you are surveying is a blank. I believe that Newton could hold a problem in his mind for hours and days and weeks until it surrendered to him its secret. Then being a supreme mathematical technician he could dress it up, how you will, for purposes of exposition, but it was his intuition which was pre- eminently extraordinary \- 'so happy in his conjectures', said De Morgan, 'as to seem to know more than he could possibly have any means of proving'. The proofs, for what they are worth, were, as I have said, dressed up afterwards - they were not the instrument of discovery."

― John Maynard Keynes

<comment><USER3> This reminds me of G. Polya's book "How to Solve It" [0], there he talks about the process that teachers can go through to get students to think through problems. But more than that it's trying to build in a habit, so that you tackle problems in the same way each time and can train your brain pathways to hold more of the process in your head.

[0]: [https://www.math.utah.edu/~alfeld/math/polya.html](https://www.math.utah.edu/~alfeld/math/polya.html)

<comment><USER4> That's a very good book. I first read it while in college or high school, IIRC. Should buy a copy again, it's worth it.

BTW, for others who might not know, it is not applicable just to math (although Polya was a mathematician). It's good for general problem solving.

And there is a book that was inspired by it, called How to Solve it by Computer. I had and read that one too. It is very good too. See descriptions of both books below.

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

[https://en.wikipedia.org/wiki/How_to_Solve_It#Influence](https://en.wikipedia.org/wiki/How_to_Solve_It#Influence)

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

</comment></comment></comment><comment><USER5> He's close to how I think about it, but not quite there.

On regularity:

Take the handling of what is false-y. In Ruby only nil and false are false-y. If you use an && the only way it can come out false is if one of the two sides is nil or false. Python, on the other hand, tries to treat emptiness as false-y. It leads to irregularities because assumptions are broken. The clearest example was that the exact second of midnight was considered false-y. Fixed in 3.5 if memory serves.

On restrictiveness:

I agree with PG that a pro working on a project with a small set of other pros prizes unrestrictive languages. On large projects it is usually the opposite. This is why Go is great for Google, but Ruby is great for startups.

On conciseness vs readability:

Regex is concise, but it is shit at readability. The reason conciseness is less important than readability is that conciseness is about the _character count_ while readability is about _the time it takes to understand_. They're related, but only to a point. Ruby is much more concise than assembly, and that helps its readability, but further gains in conciseness don't really impact speed to understanding.

Regex is fine for a grep of your own filesystem because you're the one writing it so you know you understand it. But for complex form validation it's usually not the first tool I reach for because I tend to assume that the person that comes in behind me might not know more than the basics. Even when I do use them, I break them up as strings into variables that name what they do before concatenating them.

<comment><USER6> Nontrivial regexes should be treated as their own language. I.e., either the team agrees to use them freely, in which case, team members are obligated to actually learn them. Or, if not, then team members agree not to use them.

If you were working on a Python-only codebase and someone opened a merge request to add a C++ file, you'd smack them down. Complex regexes should be no different.

<comment><USER7> I disagree. Regexes can can be done in a neat and modular way. I can write a 3 line function IsValidEmailAddress() with a nasty regex in it, and everyone on the team who doesn't know regexes will understand immediately what I'm up to when I call IsValidEmailAddress() and program around it.

The alternative is to write a function hundreds or thousands of lines long that verifies one part of an email string at a time. Of course, that function will be too long and will have lots of duplicated code, so it will be refactored into smaller and more generic functions over and over until I've got a half baked text matching library on my hands. And then I'll have to document the library, and write unit tests for it, and if there is a bug or assumptions change about what to accept as an email, someone will have to read and understand my pages of code. And then someone will want to find email addresses in a file, and there won't be an efficient way to do it.

If it's not trivial to do a pattern match with regexes, it's probably not trivial to do it without. The best you can do is keep the ugly implementation hidden in some well named functions that make your intent obvious.

<comment><USER8> Regexes get a bad rap mostly for two reasons:

1) they are abused by people who have never written a parser but need to write a parser, often to parse languages that are highly nonregular, and

2) they get thrown at problems where the underlying grammar is actually unknown and iterated on until they're uneditable black boxes.

The first problem already has a really good solution: hire people who know the standard undergraduate CS material and you'll never end up with a regex-from- hell when a simple and easy recursive descent parser would've done the trick with ease.

The second problem is, of course, more difficult. I've only seen regexes used successfully for a problem like that once. And that's only because the structure was very easy to think about as an NFA. By itself, the regex was a freaking nightmare to look at. But the documentation included a picture of the automata and a great description of what was going on. From there, the monstrous regex was easy to reason about and modify.

<comment><USER9>
      hire people who know the standard undergraduate CS material and you'll never end up with a regex-from-hell when a simple and easy recursive descent parser would've done the trick with ease

The number of programmers whom I've personally worked with that actually _applied_ proper parsing principles in their work are exceedingly few--count on one hand, few; too few to make generalizations. But suffice it to say not all had CS degrees, nor even a degree of any kind.

By contrast, most of the people I've worked with professionally have had a CS degree, and regex abuse is rife. I'm sure the reasons are varied and complex (never really grasped it, unable to recognize appropriate situations, can't apply it in larger code bases, or are simply unable to resist easy fixes when under pressure), but the end result is the same.

<comment><USER8> _> But suffice it to say not all had CS degrees, nor even a degree of any kind._

You will notice that I very carefully worded that post. The word degree wasn't used.

Among all the coding quiz questions that get asked in interviews, the parsing- related questions make a ton of sense to me. Being able to bang out a reasonable parser -- and more importantly, knowing which type is needed for which problems -- is an actually useful skill and an even better indicator.

 _> most of the people I've worked with professionally have had a CS degree, and regex abuse is rife._

IME this can be shortened to simply:

 _> regex abuse is rife._

<comment><USER10> "> But suffice it to say not all had CS degrees, nor even a degree of any kind.

You will notice that I very carefully worded that post. The word degree wasn't used."

I sympathize with those shaking their heads at people using regexes to parse XML, for instance. I have fought the battle of trying to get people to do it right. However, in (my version of) the real world, people will give you data that is invalid according to a canonical parser or the language standard, so sometimes you might as well use regexes anyway. A lot of professional programming is more like being an auto mechanic than being an automotive engineer. HN gravitates towards the latter mindset.

<comment><USER8> _> However, in (my version of) the real world, people will give you data that is invalid according to a canonical parser or the language standard, so sometimes you might as well use regexes anyway._

This is very true, and I mention this in my top-level reply:

 _> Regexes get a bad rap mostly for two reasons: ... 2) they get thrown at problems where the underlying grammar is actually unknown and iterated on until they're uneditable black boxes._

When the (non-fuzzy) version of the input language is regular, then robustifying a regex can be the right way to go. And blaming the person who chose regexes on the basis that they used regexes doesn't make sense if the robustification isn't good enough. The failure to sufficiently robustify is a failure of domain knowledge about that particular fuzzy parsing task, not a failure of training.

However, if a developer is using regexes to parse XML then they're Doing It Wrong (TM), _even if_ the XML files they're parsing are not always valid XML. It's much easier to robustify the right solution to the idealized problem than it is to robustify the wrong solution to the idealized problem.

 _> A lot of professional programming is more like being an auto mechanic than being an automotive engineer. HN gravitates towards the latter mindset._

That's true. But also, a lot of professional programming is more like being an auto mechanic _even though it should be like being an automotive engineer_. Including, unfortunately for a hundred deceased Toyota vehicle owners, automotive software engineering.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> I wish there was a way to send this to my programmer coworker without seeming like a jerk. He insists we "work" together, meaning, we're in the same physical space, working on two different projects, and he interrupts my train of thought every 2 minutes with an arbitrary question about the thing he's working on. I'm close to a snapping point and don't know how to address it tactfully. What I want to say: "us working together may enhance your productivity by 50% but slows mine down by 80%."

<comment><USER12> The next time it happens, have a conversation with him about time-boxing. That is, say something like this:

Him: <some question> You: "Hey, that's an interesting question. Time-box an investigation into that to 20 minutes, and then we'll dig in after that if you're still not sure about the solution."

If he asks what time-boxing is, then you can have the discussion about actively investigating a solution for a specific amount of time. If, at the end of that time, you don't have a solid lead on a solution, then you reach out to your peers. That means, you have input to answer questions if your peers have any, and you know some simple solutions that don't work, and why.

That's what I've done with jr engineers for a number of years now and it works great. You have to do it a couple of times before they turn it into a habit, and internalize it, but eventually they bother you less and become better engineers in the process.

<comment><USER11> Thanks. Admittedly, I've been giving positive re-enforcement to his questions by answering them immediately. Which I realize is doing us both a disservice. It's now easier for him to ask me than to spend time investigating, and it's easier for me to answer quickly to get back to my work. But it's just making the problem worse. It's become programming by proxy.

</comment></comment></comment><comment><USER13> I think being able to be productive without having the whole thing in your head is one of the important skills of working at BigCo. It's definitely more awkward and I'm sure leads to an increased number of bugs, but it lets shifting teams and priorities move forward. Some people struggle a lot with this though, especially if they've only ever worked on their own programs or programs designed in a small and tight group (e.g school projects). It's definitely a skill.

After an intern experience I changed up one of my phone screen sections -- we have to do a phone screen (I modeled my favorite variation on Yegge's), I try to change it up from time to time though to make it somewhat interesting for both people, test different ideas of what questions produce what signals and what signals are valuable, and at least never make it a whiteboard or accurately-code-well-known-freshmen-problems-like-sorting-algos hazing. I used to reserve a section for discussing program design in a hypothetical board game program, I took that out to instead give the person a description of a simple web app with an accompanying ~100 LoC describing the architecture and component hooks (simplified and mocked a bit from our actual code, it has a startup that creates top level components like the PageBody component and the Header component, the Header component creates a Navigation component and whatever else, the Navigation component creates navigation elements...) and a problem statement that involves threading some new Component data from the root to a leaf using the existing framework in order to make a proposed code change work. So it's not that hard objectively, it's mainly adding a new function param in a couple component initializing functions and updating call sites, but it requires being able to read a chunk of code, ignoring most of it, but understanding just enough of it in context to make the change. The new intern who got through this (took ~20-25 mins) ended up being pretty solid, and I think the test would have negatively differentiated the prior intern with other candidates we had thought of as about equivalent...

</comment><comment><USER14> I'm a talented programmer but wasn't always so. The most important thing I ever learned was how to plan a program into abstract components that are as isolated as possible BEFORE ever touching any code.

If you plan an abstract hierarchy correctly you don't have to try and keep the entire swarm in your head. You can focus on the individual components and when they are done, forget about the implementation and refocus on the next level in the hierarchy. If you run into issues step back out into the planning phase. Never write code without a plan.

When I was younger I could barely get 1k lines of code down without it being a mess. Now I can build complex applications with multiple libraries in the 20k-40k SLOC range without much mental effort. It is almost like entering and leaving functions in your brain.

<comment><USER15> Do you write the plan down? Like an outline? I want to get better at what you are describing.

<comment><USER14> Better put you build the components with the least dependencies first after your software architecture is decided, up to and including pseudo code, to the point you are confident in the design and are not required to think about it while implementing it in real code. If a design issue comes up stop programming and fix the architecture. I'm a graph paper guy myself.

Say a racetrack library. We have a 'racetrack', it has a 'list' of 'cars', they have a 'list' of 'tires', and 'list' is a custom class and we know how it is all going to fit.

Now normally you might start with a 'racetrack' class, start a car class, start the list class so you can have the cars on the racetrack, start the tires class. Add functionality to the list class to get something to work. You leave a trail behind you that if you try to keep in your head can get pretty awful in big projects.

If you start with the objects with least dependencies you can forget about them once you are done. 'list' has no dependencies, you can make the class (and all test code if desired) and forget about it. Now you can focus entirely on a tire (and all test code if desired), and forget about it. Then you do the car class fully, then the racetrack. At every level you have everything below it done so you can fully complete the implementation in one shot instead of bouncing all over the place . It isn't always perfect but it really cuts down on the brainpower you have to expend.

This is best suited with unit testing. At first it can feel ungratifying to program this way, even scary. You could be 85% done with your planned architecture and have almost no visible behavior of your final product, with that last 15% being the actual high level abstractions that really tie everything together and the project just seems to pop into completion.

</comment></comment></comment><comment><USER16> A couple months ago I quit my software job to incubate a startup idea. I'm working out of home now and this definitely rings true. I'll add a couple additional thoughts. One is that "whole program" thinking is tiring, and I can only muster about 6 hours a day. After that, my brain resists thinking deeply until the next day. Naps help somewhat, but I've learned to just switch gears and either enjoy some entertainment, or work on less demanding tasks. I keep a queue of lite tasks now for this purpose. Another discovery is how helpful a warm shower is to creative thought (which includes refactoring IMO). It sounds rediculous, but when I'm working on a tough problem now, I may take 3 or more showers a day. And it works! Like magic, I don't think I've ever _not_ come out of a shower with the problem solved. There's nobody to judge me :) But if I do create a company someday, I will have onsite personal showers and encourage their use.

<comment><AUTHOR> I find nearly anything that gets me away from the screen can help with creativity. For me, gardening is one of the best.

An interesting property of the shower is that it's one of the few places where hardly anyone takes electronics. Even if you're someone who reaches for a smartphone without a second thought while walking, the chances are you put it down before showering (the garden has a similar property —- I don't want to handle electronics with muddy hands or gloves...)

<comment><USER17> > An interesting property of the shower is that it's one of the few places > where hardly anyone takes electronics.

I've been finding plane flights are good for that kind of unstructured free association problem solving too, for precisely that reason.

</comment></comment></comment><comment><USER18> > Oddly enough, scheduled distractions may be worse than unscheduled ones. If > you know you have a meeting in an hour, you don't even start working on > something hard.

This hit a little too close to home, since I'm procrastinating working on something right now because lunch is scheduled to be in ten minutes and won't be able to start anything meaningful…

<comment><AUTHOR> See also: [http://paulgraham.com/makersschedule.html](http://paulgraham.com/makersschedule.html)

</comment></comment><comment><USER19> One thing that this list of prescriptions would probably contain if this were written today is: write tests. This lets you make a lot of classes of change without actually having to hold the whole thing in your head. You can make an educated guess as to what needs to change, write a test for it, and confirm that you made the right change. More importantly, if the tests you wrote months ago are complete enough, you can be confident that your recent changes didn't fuck up anything up that you didn't intend.

<comment><USER20> Depends on how you write the tests. If your tests are very low-level, making cross-cutting changes can be extremely painful, to the point that you'll avoid doing them b/c of the cost of fixing the tests.

Unfortunately, such low-level tests are becoming increasingly common as managers and engineers focus on optimizing metrics like code coverage, and those kinds of tests are very easy to write to improve code coverage.

<comment><USER21> As a manager, I haven't bothered to look at code coverage for years.

What I care about is functional coverage for the boundaries and exception cases of our use cases or APIs. Run them CD in your pipeline.

Cover customer expectations at the highest level of reasonable abstraction (I also tend to avoid ui testing, and frontend JavaScript too).

Low level tests or unit tests only matter insofar as they make it easier to trust your dependecies. Breaking abstraction or encapsulation to test is a hard stop NO.

</comment></comment></comment><comment><USER22> That is also how I work when I am at my most effective. As a Lisp programmer, I especially like: "You can magnify the effect of a powerful language by using a style called bottom-up programming, where you write programs in multiple layers, the lower ones acting as programming languages for those above. If you do this right, you only have to keep the topmost layer in your head."

I work for a company right now in an office and the only way I get uninterrupted time slots is to either start work very early in the morning or occasionally go home for two hours when I need quiet heads down work time. When I work at home as a remote consultant I usually do 4 to 5 hour sprints and my wife and my pet parrot usually don't interrupt me. A five hour sprint starting early in the morning followed by four hours of exercise and relaxation, then another hour or two of work is just about perfect for me.

</comment><comment><USER23> This is certainly true when solving hard problems.

A counterpoint would be that most software used to run businesses is complicated, but not hard (or the hard parts are very localized.) And for these problems it's best to factor your codebase such that it is not _required_ to hold the whole thing in your head.

Because if you do, at some point in the project's history, someone is going to blunder in and make a change that fractures your crystal palace without you even realizing it.

<comment><USER24> I'd say the second part of #3 is addressing this.

> You can magnify the effect of a powerful language by using a style called > bottom-up programming, where you write programs in multiple layers, the > lower ones acting as programming languages for those above. If you do this > right, you only have to keep the topmost layer in your head.

<comment><USER25> This is pretty much how you should write programs regardless of the programming language. Otherwise the program would become virtually impossible to understand and maintain as it grows.

</comment></comment></comment><comment><USER26> I think the fundamental is the description of software as an idea.

It is very important to understand, because it helps explains that the essence/idea part of software writing will never be automated and that any repetitive part in software must be automated to make progress.

This is why the concept of software sweat shops/and some bad flavors of pair coding/agile development are stupid, it's all built around systematizing what should have been expressed in higher-order software anyways. They're only effective at still making money for the shop while the market hasn't caught up.

</comment><comment><USER27> Amazing how modern corporate "catch the cheaters and slackers" management structures are designed exactly the opposite of this.

</comment><comment><USER28> #2 Work in long stretches.

This is wrong or at least worded incorrectly IMHO. I believe the author knew it wasn't quite right when they wrote it, since the second paragraph is an attempt to qualify it away.

The rule would perhaps be better stated as "Think in a distraction free environment".

Plenty of productive programming is done at rest, and long stretches of "work" produce subpar code.

<comment><USER29> I do think working in long stretches is effective, but I'm not talking about a single "butt-in-seat" marathon coding session. I think of it more as a focus on solely one project for a number of days, without multi-tasking on 3+ projects at once giving each one only a couple hours per day.

The processing that you do when not sitting at a desk, and those eureka moments that come along with it happen more often when you are working one thing at a time. Or, at least they do for me.

<comment><AUTHOR> Yep. The tricky thing is that "help a colleague on some little problem" can end up being an expensive context switch, but can also be pretty valuable. A degree of asynchrony, and perhaps some kind of "office hours" type mechanism to handle questions in batch mode seem like good solutions. But that goes against processes which treat "resolving blockers" as top priority.

</comment></comment></comment><comment><USER30> As someone who does this with a lot of programs I've written, I'll say that avoiding _ab_ stractions is just as important as _di_ stractions --- if doing the simplest of tasks takes half a dozen layers of abstraction and indirection, it makes it all the more difficult to see the whole program at once. "Too many moving pieces makes it hard to see what's going on", as the saying goes.

The amount of "fluff" introduced by "modern" languages and their culture, like Java and C#, is certainly an obstacle to this; it seems like they _encourage_ overcomplexity and the creation of huge complex software, so that all programs written in them naturally take on that style, no matter how trivial they actually should/need to be.

<comment><USER31> The languages themselves sort of forces people's hands depending on how rigid they are and how easy it is to change your mind afterwards.

Take Python for example. Firstly they have a culture of "we're all adults here" and don't really bother with public/private distinctions in classes, and secondly the language makes it easy to turn a variable into a property with the @property decorator.

I'm not that familiar with Java or C#, but I guess turning a variable into a property after the fact is non-trivial. In Python all the calling code remains unchanged (`val = object.field`)

</comment></comment><comment><USER32> I manage to keep my main side project (~20,000 lines of code) in my head despite not meeting conditions #1 (I'm always distracted), #2 (I work in my free time at home), and #3 (C++, woo) because I have extensive documentation about the _why_ of code, and this helps me put myself in the same state of mind I was in when I wrote it.

It does help that all the others apply to me, though. I've rewritten it kinda twice, I already mentioned my comments, I work basically alone on it, so nobody else edits anything, and it started out very small.

</comment><comment><USER33> "Sometimes when you return to a problem after a rest, you find your unconscious mind has left an answer waiting for you."

I love when this happens. For me it's usually after a good sleep.

</comment><comment><USER34> That's the best programming article I've read in a long time.

I can't say all that is true for me, but some of it is.

It's truly interesting to see how others write and understand programs. It does seem a lot like art (and less like engineering) sometimes.

</comment><comment><USER35> >Maybe we could define a new kind of organization that combined the efforts of individuals without requiring them to be interchangeable.

Epihany: Tolerance for uniqueness is one way the open source trumps closed source.

</comment><comment><USER36> That's a wonderful article describing the work of a programmer, why bigger companies cause them trouble and how good programmers reason about code which is not even yet written. Paul Graham, which is a notable figure in the software engineering world if you didn't hear his name yet, names 8 steps that make you able to load a whole program into your head. I'm proud to say that I have mastered all 8 steps multiple times, though from my experience in my current engineering team I struggle with step 7. I do actually believe that what he describes shouldn't be done, is actually feasible - through pair programming.

</comment><comment><USER37> > 7\. Don't have multiple people editing the same piece of code.

Do others find this pretty crucial? We do this at my org and I'm interested in knowing if it's detrimental.

<comment><USER38> I think it's such a basic issue that one shouldn't even need to point. It's like remembering people to breath.

And now you just said you don't breath, and I am really questioning my understanding of the world. Do people at your org get anything done?

</comment></comment><comment><USER39> Paul Graham's essays are a consistent joy to read.

</comment><comment><USER40> I totally agree with PG here. This is also how Steve Wozniak designed the first Apple hardware</comment>


Reading and Writing a File in Javascript for Win 8 Apps - <AUTHOR> http://nawegr.blogspot.com/2012/12/reading-and-writing-file-in-javascript.html <comment><USER2> Wow. Thanks for writing it up, but that API just makes me cringe. That's what we had to deal with back in the day, but now we have abstract APIs like localStorage, Web SQL and Indexed DB [1]. At the very least, this wont gel with "Directories and System" component of the File API [2][3]. Microsoft will probably be implementing the W3C standard, but we may have to come up with a fileQuery.js library to do file-operations the same way across platforms until they see a need for it.

[1] <http://www.html5rocks.com/en/tutorials/offline/storage/>

[2] <http://dev.w3.org/2009/dap/file-system/file-dir-sys.html>

[3] <http://www.html5rocks.com/en/tutorials/file/filesystem/>

<comment><USER3> I find the whole situation quite absurd. Throughout the 1950s, 1960s, 1970s, 1980s, 1990s, and most of the 2000s, we saw real advancements being made. Things were generally getting better over time.

Fortran made programming much more accessible. C and UNIX made for an effective, practical platform. Lisp, Scheme, Smalltalk and ML brought some rigor and new ideas to the table. Perl and Python allowed for rapid development of scripts and prototypes. SQL let us really push relational databases to the limit. Even C++, Java and C# allowed for the development of large, real-world systems.

Then around 2007 or so, everything went completely stupid. We saw the rise of JavaScript and NoSQL, and things have only gotten worse since then. It's like we lost 50+ years of accumulated knowledge, programming language functionality, libraries and platform support.

What happened to our craft? Everything that was good is being discarded, in favor of languages, databases, APIs and platforms that are rubbish. It's not even a case of "worse is better". It's "worse is much worse".

<comment><USER4> Javascript is bad because Vendors like microsoft made it bad , to promote their own RIA tech ( silverlight ). IF ecmascript 4 would have been standardised in 2007 , javascript would be closer to ActionScript and Jscript.NET. they allow the same amount of functional programming than Javascript does yet are strongly typed , with classes , interfaces , etc ...

<comment><USER5> >Javascript is bad because Vendors like microsoft made it bad , to promote their own RIA tech ( silverlight )

What on this green Earth does that even mean? JavaScript and Silverlight could hardly be less related other than they're both available in some browsers. Timeframe, etc, don't support your [conspiracy] theory.

JS is _different_ in that it's a prototype-based language. That and the sometimes errant recent love-obsession with Node.JS has given JS an undeserved and often non-specific bad reputation.

<comment><USER3> JavaScript had a bad reputation far before Node.js was introduced. It was blatantly inferior to begin with, and it hasn't really improved since, but for whatever reason people don't recognize the inferiority like they used to.

While its prototype-based nature may have some theoretical benefits, in practice it has obviously been disastrous. I suspect that it is the cause of more terrible code than JavaScript's numerous other serious problems.

In order to make something truly usable out of JavaScript, you essentially have to discard all of its core features and syntax. At that point, one should ask why there's even any point in bothering. If JavaScript basically needs to be twisted into something resembling C++, Java, C#, Ruby or Python to be truly useful, then why not just go with those languages instead?</comment></comment></comment></comment></comment>


Why Good Visualization Matters: Rethinking the Food Label - <AUTHOR> http://blog.infochimps.com/2011/09/23/why-good-visualization-matters-rethinking-the-food-label/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+infochimps-blog+%28blog.infochimps.org%29 <comment><USER2> I'm not sure this is great visualization.

Firstly, trace ingredients are often what's important to the consumer. Fine, I know my peanut butter is mostly peanuts, but how much salt is there?

Secondly, these are simple examples. What do you do with, say, a can of chicken and vegetable and noodle soup, which could easily have thirty ingredients before you even start counting the potentially-nasty additives down in a tiny box in the corner.

Thirdly, apparently labellers aren't obliged to split up certain categories (eg broccoli, sugar snap peas, green beans and carrots are all in a single green square). So presumably this doesn't even solve the specified problem of not knowing how much white vs whole wheat is in your food -- why would you split up white and whole wheat into separate categories when beans and carrots are the same?

<comment><USER3> > Secondly, these are simple examples. What do you do with, say, a can of > chicken and vegetable and noodle soup, which could easily have thirty > ingredients before you even start counting the potentially-nasty additives > down in a tiny box in the corner.

How about inverting the tree-map such that the smaller the amount, the greater the portion of the tree-map taken up? You're going to need all of that space anyway for the names of those potentially-nasty additives to be printed in a legible font size...

<comment><USER2> Ah, the homeopathic approach to food labelling. I'm gonna sprinkle a grain of gold dust on every twinkie I sell, just to screw with the label.

</comment></comment></comment><comment><USER4> A few friends of mine built something similar. Loaded the USDA nutrition database in a dropdown, and scaled 24 vitamins, nutrients, calories, etc by recommended daily intake:

<http://exposedata.com/intake/foodpick.html> (takes a minute to load)

Many people have told me an added layer of discovering foods with particular nutritional qualities (filtering, sorting) would be very appealing. A recommendation engine for food.

If you're looking to hack on the dataset, check out this JSON version:

<http://ashleyw.co.uk/project/food-nutrient-database>

<comment><USER5> wow, that's really cool!

can they make a side by side comparator? it doesn't have to actually compare, can be just another frame ( or frames) where I can select the same and do the comparison myself.

For example I want to see the differences in raw broccoli and steamed broccoli.

<comment><USER4> Open two browser windows ;)

Here are a few other concepts we messed around with:

<http://fleetinbeing.net/intake/web/rdi.html> (stacked bars)

<http://fleetinbeing.net/intake/web/groups.html> (hover to see vegetable/nutrients)

<http://fleetinbeing.net/intake/web/matrix.html> (matrix plot)

</comment></comment></comment><comment><USER6> This is pretty bad I think. The amount of substance by mass is nearly completely unimportant. Consider a package which has 99.999% Organic Apples and 0.001% Plutonium. But hey, it's 99.999% organic! Look at all that red!

Much better is a simple ordered list of ingredients, so we're not bamboozled into ignoring certain ingredients just because they're not the majority of the content. But wait, thats ... what we already have on our packaging? What good visualization!

</comment><comment><USER7> The new food labelling in the UK is based on a traffic light principle and, imho seems to be clearer: [http://newsimg.bbc.co.uk/media/images/44434000/jpg/_44434134...](http://newsimg.bbc.co.uk/media/images/44434000/jpg/_44434134_foodlabel203pa.jpg)

The problem with this exaple is that it's hard to see quickly what the key points are, since prominence is automatically given to higher scores, whether they're good or bad.

</comment><comment><USER8> IMHO, the Nutrition Information box is actually a shining example of good design already. It is very, very legible and has a clear information hierarchy.

</comment><comment><USER9> I like knowing how much of things is in my food. :)

</comment><comment><USER10> it's a cool idea, but i believe most manufacturers would claim 'trade secrets' protections before putting proportions on their labels.

<comment><USER11> They'd claim something to avoid having to make it easy to visualize just what's in processed food...

</comment></comment><comment><USER12> His example with 5 ingredients in unreadable already. What will happen with 10-20?</comment>


Show HN: Katib – A Markdown Editor for Arabic, Urdu, Farsi and Hebrew - <AUTHOR> http://katibapp.com/

<comment><USER2> How do you put in diacritics (tashkil)? Can you use a regular English keyboard and do phonetic transliteration?

<comment><AUTHOR> That is possible under Mac if you use the "Arabic QWERTY" keyboard. See this link for instructions [http://katibapp.com/help/arabic-on- mac/#learnersofarabicwill...](http://katibapp.com/help/arabic-on- mac/#learnersofarabicwilllikethis)

Additionally, you can use the "Keyboard Viewer" when Arabic is selected as a keyboard layout and hold shift. This will show you which keys render diacritics.

</comment></comment><comment><USER3> This looks very nice, well done. Too expensive for me, but still nice.

</comment><comment><USER4> Very cool! Downloading now.

</comment><comment><USER5> Great, thanks for this!</comment>


Should you burn the ships? (basically, go 100% startup or take baby steps?) - <AUTHOR> http://www.gameproducer.net/2007/04/16/should-you-burn-the-ships/ <comment><USER2> in a nutshell: cortez story of burning his ships is false; they were destroyed but not burned. sun tzu advises a "burn ship" strategy only in desperation. king leonidas and his army took on the great persian army to defend greek cities. bottom line, "burn ship" is for older, more experienced people, and youngsters should not be encouraged to do it.

very well. but when you are an experienced sage, you have probably built yourself a battleship. for one, it's fireproof. for two, it carries cannons and cruise missiles. for foot soldiers, it still makes sense.

</comment><comment><USER3> What does he mean by burning ships, though? Quitting your day job? Or quitting your day job and doing something so outrageous to make sure you will never ever get employed again (can't even imagine what that would be)? The latter would be kind of stupid, but quitting your day job doesn't seem so bad. Don't they say that younger people can afford to take more risks in their investments, because if they fail, they have enough time to make up for it? That seems sensible to me - I think it is far more dangerous to not take any risks and then regret it later when it is (seemingly) too late, like when you have a family support.

So no, I don't think I agree with that article at all.</comment>


Show HN: Took 2 years but Pulse5 redesigned and reengineered for designers - <AUTHOR> <comment><USER2> Missing a link?

<comment><USER3> Probably this – [https://www.pulsecms.com/pulse5/](https://www.pulsecms.com/pulse5/) (it's a PHP CMS)</comment></comment>


Ask HN: Would you be willing to pay for this? - <AUTHOR>

Hi,
some weeks ago i came up the idea to make a new kind of organizer for tasks, schedules, etc.
the primary feature will be the fact that it is made up as a RPG-like questbook. Every element shall be sound like you are playing a rpg, e.g. general tasks/appointment are called quests. the content of the quest shall be either written by the user or be one of pregenerated texttemplates where you only change variables, like "catch Anne" or "bring sugar to bob" (with more text of course). you shall be able to link quest items to your quests. These items shall be manageable in your personal inventory which is of limited space. this inventory also shall contain optional money container, where you can store the info about your gold. you can than tag quest progress with modifications in your inventory, like the quest "drive bob to the market" will result in "-10 Gold for fuel" or something like that. each quest can also be failed (e.g. missed date) which will result negative influences in your statistic which records all your quest activity.
there are some more ideas, but i think the primary idea is made clear.
can you imagine this as a sellable product or do you consider this as a neat geek tool with no market which shall only be for free?
thanks. <comment><USER2> IMO, a better way to rephrase your question would be: "Would you be willing to pay for this?" This will let you gauge whether you would have buyers or not.

Personally, it's hard for me to answer this question based on what you wrote above. It seems a little verbose. However, my initial reaction is no, I would not be willing to pay, because I feel the effort to record all this info has too much cost for the necessary reward (getting-things-done). However, that's just me and I may have misunderstood what you're trying to accomplish. :)

Gluck!

<comment><AUTHOR> You're right about the title, i fixed it, thanks.

the manual verbosity is also my mind blocking problem. i didnt come around with an idea to reduce the text the user have to enter to make such thing useful/correct working. it wouldnt make sense if such a tool degrades to a normal organizer because of the stuff a user enters. This is one point to think about.

</comment></comment><comment><USER3> You will never know for sure until you have version 0.1 ready and some early adapters give you their feedback...

The real question is: are gamers a paying customer for such a product? IMHO: no !

</comment><comment><USER4> Could be an interesting app. Do it!</comment>


We Need to Talk About What Coronavirus Recoveries Look Like - <AUTHOR> https://www.nytimes.com/2020/04/13/opinion/coronavirus-recovery.html <comment><USER2> Can I get an outline link? On mobile. I thought covid articles were non paywall</comment>


Bezos defends model of keeping 65% of (kindle) book revenue - <AUTHOR> http://www.nytimes.com/2009/12/06/magazine/06fob-q4-t.html

<comment><USER3> "New York Times: What do you say to Kindle users who like to read in the bathtub?

Bezos: "I'll tell you what I do. I take a one-gallon Ziploc bag, and I put my Kindle in my one-gallon Ziploc bag, and it works beautifully. It's much better than a physical book, because obviously if you put your physical book in a Ziploc bag you can't turn the pages. But with Kindle, you can just push the buttons.

New York Times: "What if you dropped your Kindle in the bathtub?

Bezos: "If it's sealed in a one-gallon Ziploc bag? Why don't you try that experiment and let me know."

A good interview for giving a glimpse into the personality of an entrepreneur.

<comment><USER4> That follow up question and the end of the article makes the author look like a complete bozo. They should have edited it out.

<comment><USER5> I disagree. The point is to get an insight into the subject. The last question and the way that Jeff concludes the interview is very helpful there.

<comment><USER6> Yeah it sure does. Why do you keep so much? Because I can.

I want to stick a picture of Bezos in a zip-loc bag. And then drop it into the toilet. And then send Jeff to the beach.

</comment></comment></comment></comment><comment><USER7> "There are more items in the book category than there are items in any other product category. One of the things it was obvious you could do with an online store is have a much more complete selection."

Interestingly books are perfect for online sales for other reasons, they have a high markup and a high price to weight ratio. The former made them easy to discount beyond B&M bookstores (who, by the way, would happily order you any book they don't have in stock and get it rather quickly, even in 1994) and the latter made the cost of shipping not untenable.

Books in 1994 (and even today) were one of the few things you could sell for 30% less than the chains, add in $2 for shipping, and still both make a profit and decrease the cost for the consumer. There really aren't many things that fit that description, and I think it's why they were online shopping's first killer app.

<comment><USER8> ... and you don't have to try them on.

</comment></comment><comment><USER9> It might be more than the amount of royalties that most paper book publishers give, but distribution costs are so much lower with e-books that they could probably afford to give even more than 35%.

Right now they don't have to, but as competition heats up for e-books, it wouldn't be surprising if royalties went up (unless there's a cartel situation).

<comment><USER10> Book publishers also provide things like design, layout, and editing.

<comment><USER9> Anyone knows if the people who are self-publishing for the Kindle (basically uploading the finished product on Amazon) are getting more than 35%?

</comment></comment></comment><comment><USER11> Well, I'm not 100% sure he's referring to the Kindle here. Amazon Also operates CreateSpace where you can send them your text/ music/ movie plus cover artwork and have them turn it into a book/ CD/ DVD, which can be sold either through Amazon.com or your CreateSpace 'e-store' - not very customisable and crap looking, but you do keep a larger share of the revenue. If intended for sale, copies are then produced on demand, as they are ordered.

I have used the service a few times for short runs of things that needed a professional look but only a small number of copies, and the quality is good. There's an adjustable pricing scale whereby the printing/duplication cost is fixed and then Amazon takes their large percentage based on the profit above that, so it's less good value than having your copies pre-printed and selling them yourself (eg CDs if you are in a band), but being able to offload all your fulfillment and distribution to a retailer with very high brand integrity (ie that so many people trust with their payment info) is worth it in my view. If you have a niche market and know how to reach it, it may be a better deal than trying to interest a publishing company.

Incidentally, it's also a handy thing for cheap specialist printing, eg documentation or a pile of disparate research material that you'd like to have in book form but may not need that many copies of, for which a regular printing company would charge a ton in setup costs.

</comment><comment><USER12> With a physical book, since it (1) costs money to make the book, and (2) rapid iteration of content is difficult, there's a huge infrastructure (editors, agents, proofreaders) to select the "good" from the "bad".

With electronic publishing, you just let the crowd do the selection. And it costs virtually nothing to store each additional book.

I hope we move to a web-like world for e-books where an author can publish and charge for a book after eliminating the middleman.

Think about it: without the "Amazon tax", e-books would cost only 33% of what they do now (eliminating Amazon's cut).

Also the percentage-based commission makes no sense. It costs Amazon the same to store/tranfer a book that costs $100 and a book that costs $10. A $1/book "shipping fee" would be more reasonable.

The situation is ripe for an execution-oriented company like Google to move in and kick Amazon.

<comment><USER13> I think it's the perfect time for authors to organize and to do something to push the future book platform to their direction.

If they organize they would have a huge marketing clout , and combine that with some company that works with some business model that they like , and offers distribution etc... could make a very powerfull offer.

</comment></comment><comment><USER14> My guess is that book publishers will get roaylly pissed if ebooks got too disruptive (too cheap or too much oryalty going to authors) and then would strong-arm writers into not doing any digital sales at all.

It's better to wait till more books are sold in electronic form than dead-tree form and then dictate your own conditions to publishers.

At least that's what I want to think, Bezos seems like a nice fellow so I feel like finding a good reason for him keeping 65%.

<comment><USER15> Digital publication is going to kill the B&M industry, at least as it exists now, anyway.

The purpose served by the publishers, for the author, was to invest in a young, talented author's career. Publishing houses knew that they were losing money, but the purpose of doing so was to build a relationship so that, once the author had built a reputation and was a money-winner, the investment would pay off.

Now, advances are at McDonalds rates and publicity budgets are nonexistent. The only thing they have to offer is distribution, and that can be handled electronically.

<comment><USER16> I disagree the B&M's provide services that people like. Browsing, reading, social space. Been to an Barns & Noble lately, very much like Starbucks. In that they are selling a lifestyle and environment more than they are selling coffee. When books are distributed and produced digitally they will get POD and service the niche that still wants paper.

Publishers and distributors, they are Dodo's. They cost more and aren't as good as digital distribution/production.

<comment><USER17> > Been to an Barns & Noble lately, very much like Starbucks.

Question: why can't Starbucks replace them then? It's a serious question - <USER2> can't Starbucks' have a e-book kiosk, where you can browse and buy books for your Kindle/Sony Reader/Nook/etc? Seems like that would include the best of both worlds - the environment to socialize and read, and the efficiency of digital distribution.

<comment><USER18> Why on earth would I want an "e-book kiosk" when I can browse and instantly purchase books on my laptop, my phone, and my Kindle.

Effectively, the Kindle makes everywhere a bookstore.

</comment></comment></comment></comment></comment><comment><USER19> _And Amazon keeps 65 percent? That sounds like a lot. Does it? You're an author, what does your royalty check look like? Are your royalties 35 percent?_

I think it'd be incredible to allow more authors to self-publish on an entirely open e-book platform. We've started to see this move in the music industry (e.g. - Nine Inch Nails grossing $750k from their own music sales - <http://www.techdirt.com/articles/20080304/162842435.shtml> ) and I think it could be coming to publishing too.

</comment><comment><USER20> Is it possible to sell PDFs (or some other format) on your own website, and let the users download them onto their Kindles directly?

<comment><USER21> Sure. PDFs are natively supported in Kindle 2's and DXes. You can convert PDF's to a supported format for older Kindles. Also, you can sell .mobi files and they work just fine on any Kindle.

Once you have a file, you can put it on the Kindle over USB for free or you can send it to an email address Amazon gives you for file transfer (15 cents per some amount of file size...I forget how much). The Kindle store uses DRM, but the Kindle certainly doesn't require it on the files it will let you read. It's like an iPod in the pre-iTunes Plus era.

<comment><USER18> Just a note: PDF's are not natively supported on the Kindle 2, just the DX.

<comment><USER22> The latest firmware addresses that. Only the original kindle lacks PDF support now.

[http://www.amazon.com/gp/help/customer/display.html?nodeId=2...](http://www.amazon.com/gp/help/customer/display.html?nodeId=200324680)

<comment><USER18> Oh nice...I need to update :)

</comment></comment></comment></comment></comment><comment><USER23> The authors get the pure profit of 35% from "revenue", not "profit." That seems huge. That means the profit of those authors may be better than Amazon, which has to cover the expenses on development, distribution, marketing, maintenance, or any other costs relevant to Kindle business.

<comment><USER6> Authors usually have houses and bodies and cars to feed, educations to pay for, possibly children, and no social life for months at a time. Their creativity and life are invested in their work.

Amazon invests in a web page (form) for the author and supports that with the same software and hardware that sells diapers and plastic race cars. Anyone could do that, but Amazon's just _prominent_.

Repeat: _anyone_ could do that ... and giving Amazon a run for their money would make them underdog media darlings. I'm fairly sure you could open a new "DIY author" bookstore on _Twitter_ and make pretty decent money at it, depending on what authors you could get on board.

Bezos appears to be getting cocky. He's about due to become the Gates of online retailers.

<comment><USER23> Yes. You're right. Anyone can copy some webpages overnight and sell every kind of stuff tomorrow. That's the very nature of online retailers. However, because of that homogeneity, prominence is all that matters. People can remember only one or two places of a category as they're so similar to each other. That's why Amazon can charge that fee and authors and publishers are happy to bring their books in Kindle editions. Plus, it's distributing all the platforms necessary to read and purchase the books. In essence, it created a new market. Amazon definitely deserves its current margin and I don't think most of authors can be better off with "DIY" stuff even if that means 99% margin. If not, Kindle business is total nonsense and couldn't come into the current status at all.</comment></comment></comment>


Hello World for the Next Generation - <AUTHOR> http://gigasquidsoftware.com/blog/2016/07/03/hello-world/ <comment><USER2> It's ironic.

I grew up on a ZX Spectrum [1] and then a Commodore 64 [2]. In those days, one of the first things you would do after hooking up a new [type of] computer was to open up its physical manual and type some of the programs in it.

In order to wow you with the technical capabilities of your shiny new toy, those first few programs almost immediately showed you how to do graphics, sound and music.

Those things quickly captivated me and other children who grew up on these things. It never took long before a curious kid would change one number to another, and _instantly make different things HAPPEN._

Today the major operating systems don't even come with an IDE, let alone a graphics API that isn't convoluted or can be used without registering windows and creating contexts and whatnot first. The lack of a simple sound/music API (e.g. that will play tunes from a string of notes) is even more woeful.

It's ironic that in today's much superior (and more expensive) technology, there is such a static friction to overcome before you can Make Things Happen on a computer out-of-the-box.

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

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

<comment><USER3> I agree completely. Although they could make a HTML page, I don't think it's as good.

That may purely be a symptom of age though on my behalf.

I still remember the first time I tried visual basic and had a form display. I instantly wanted to display some characters from a game I as playing (ultima online I think), and I need up writing a script creation program for a free server a friend of mine was running.

I think I meandered off topic there :-p

Back to topic: I do wonder what I'll show my children if they express any interest.</comment></comment>