An Experiment on Code Structure - <AUTHOR> https://pboyd.io/posts/code-structure-experiment/ <comment><USER2> According to GitHub, the totals are:

backendA: 11 files, 1 directory, 799 lines (676 sloc), 23.56KB

backendB: 23 files, 5 directories, 1578 lines (1306 sloc), 42.26KB

It's approximately twice as big for the same functionality, and I had to spend a lot more time "digging" through the second one to get an overall idea of how everything works. Jumping around between lots of tiny files is a big waste of time and overhead, and one of the pet peeves I have with a lot of how "modern" software is organised. If you believe that the number of bugs is directly proportional to the number of lines of code, thus "less code, fewer bugs", then backendA is far superior.

 _backendB required a bit more work_

I'm not surprised that it did. This experiment reminds me of the "enterprise Hello World" parodies, and although backendB isn't quite as extreme, it has some indications of going in that direction. The excessive bureaucracy of Enterprise Java (and to a lesser extent, C#) leads to even simple changes requiring lots of "threading the data" through many layers. I've worked with codebases like that before, many years ago, and don't ever wish to do it again.

I really don't get this fetish for lots of tiny files and nested directories, which seems to be a recent trend; "maintainability" is often dogmatically quoted as the reason, but when it comes time to actually do something to the code, I much prefer a few larger files in a flat structure, where I can scroll through and search, instead of jumping around lots of tiny files nested several directories deep. It might look simpler at the _micro_ level if each file is tiny, or the functions in them are also very short, but all that means is the complexity of the system has increased at the _macro_ level and largely become hidden in the interaction of the parts.

<comment><USER3> _I really don 't get this fetish for lots of tiny files and nested directories, which seems to be a recent trend;_

I suspect it is the same kind of thinking that says all functions should be very small (without reference to whether each function provides a single meaningful behaviour). Locally, this keeps things relatively simple, but it ignores the global issue that now there are potentially many more connections to follow around and everything becomes less cohesive. As far as I'm aware, such research as we have available on this still tends to show worse results (in particular, higher bug frequencies) in very short and very long functions, but that doesn't stop a lot of people from making an intuitive argument for keeping individual elements very small.

A similar issue comes up once again in designing APIs: do you go for minimal but complete, or do you also provide extra help in common cases even if it is technically redundant? The former is "cleaner", but in practice the latter is often easier to use for those writing a client for that API. Smaller isn't automatically better.

<comment><USER4> The book "A Philosophy of Software Design" should interest you then: [https://www.amazon.com/t/dp/1732102201](https://www.amazon.com/t/dp/1732102201) It argues, among other things, that deep interfaces matter more than code complexity inside a module.

<comment><USER3> That one was the first software book I read in a while where I got to the end and felt like if I wrote a book myself then that is very close to what I would want it to say. I highly recommend it to anyone who has built up a bit of practical programming experience and wants to improve further.

</comment></comment></comment></comment><comment><USER5> Even though the results weren't terribly illuminating, I have to give the author a lot of credit for even attempting to do a proper experiment like this. So much of our programming dogma is based on gut feelings ("it looks cleaner") rather than empirical data and peer-reviewed studies. We have very vague notions of what works, and even vaguer notions of _why_ those things work.

<comment><USER6> I've come to the conclusion that half or more of the rules we have about "clean" are about avoiding merge conflicts. Few things have been consistently disappointing to me as the inability of coworkers and myself to reason about merges correctly. There are three hard things in software and merges are #3.

If anyone ever figures out how to make merges Just Work, then I expect a _lot_ of pressure toward decomposition over locality would be reduced, and much of the rest would be to facilitate testing.

<comment><USER7> Can you elaborate a little please? It's unclear to me if you are taking about merging data, code changes, or something else

<comment><USER3> I'm assuming it was a reference to merging in source control. A lot of "noise" in diffs, and by extension in merges and the sometimes awkward job of resolving merge conflicts, comes from little details like whitespace and punctuation rather than substantial semantic changes in the code. Many a coding standard, and even a language change from time to time, has been made with this in mind, sometimes to the point of putting punctuation in odd places or avoiding aligning items using extra whitespace just to minimise the number and/or size of diffs to check.

</comment></comment></comment></comment><comment><USER8> I wish for a future where we can have more than one concurrent view of the same code. Structure need not be derived from from mere files and newlines and a handful of semantic organizational elements (function, class, module).

The current way of doing things forces us to make a compromise between prioritizing the forest over the trees, or vice versa. Programming languages are largely concerned with the trees' bark. But to make good software, you need to see and understand both, so the compromise is always a problem.

The solution probably needs large-scale re-imagining of how compilers, languages, version control, and editors/ides work (which also requires one to accept that working with a simple flat-file text editor won't work -- a bitter pill to swallow for someone like me who likes the simplicity of simple text editors).

I have some (very vague) ideas, but gosh, how do I find the time to experiment and refine or reject them...

<comment><USER9> I love this. Currently working on a file storage system that gets away from folders, and that's hard because everyone has folders hard-wired into their brains because history.

Functions shouldn't live in files, for a start. Files are an artefact of storing code in a file-based storage system, and have nothing to do with code architecture. Creating a code editor that stopped working with files and only worked with functions would be interesting as a start on this, I think...

<comment><USER10> File systems aren't without their advantages. One huge advantage is that text files are extremely un-opinionated about how they're used. If my project exists as a tree of directories with text files inside, there are a ton of tools which can operate on them without any knowledge of my program or even programming language. I can open them in vim or my favorite IDE, dump them to the console with cat, manage versions with git and so on. Basically text files are one of the fundamental building blocks of *nix so having my project represented as files means I can leverage decades of tooling.

It's not to say that it couldn't work to have a program represented as some kind of a database or API, but that would imply much tighter binding between tools and their storage representation.

<comment><USER9> interesting. But if you assume functions don't intrinsically live in files, they just do that because we have a file-based storage system, and that functions actually live in, say, scopes, then what does that do to your tools?

Can we have a Vim that understands (e.g) scopes natively rather than files?

<comment><USER10> > Can we have a Vim that understands (e.g) scopes natively rather than files?

Sure we can have a vim that does that. But as I say, it would require tighter binding between the tooling and the code representation.

Right now vim only has to understand code as lines of text separated by spaces, newlines, and tabs. The semantics of that code are the business of the build system and the compiler. The same goes for git. As a result, tools like git and vim can operate on code of _any_ language which is represented as text. That could be an popular language like Java or Go, or some weird experimental language you dream up yourself.

If, as you suggest, the storage representation of the language were tied to the semantics of the language, rather than some external format, then all the tools need to have a deeper understanding of the language itself in order to operate on that storage.

You could try to make it general: i.e. design an organizational structure based on "scopes" which should apply to all languages, but then what if a language comes along which doesn't fit neatly into the "scopes" paradigm? Now you put yourself into a position where you might be making language design decisions which are based on what's possible with the tooling, rather than what's the best possible choice for the language?

Decoupling the storage method from the semantics of the language obviates these problems.

<comment><USER9> thanks for the answer, that's interesting.

We do have this to a certain extent now, though - file scope is a thing in some languages.

I'll give up my plan to write a neovim plugin for scope management, though ;)

</comment></comment></comment></comment></comment></comment><comment><USER9> I've become a big fan of not worrying about architecture until the rewrite. The first version is always an exploration of the problem domain, and treating it as that has always made my projects go quicker.

This is going to trigger some people, so here's some caveats:

\- there's always a rewrite. Even with perfect architecture. Usually because nobody understands the problem domain until there's been an exploration of it with a first attempt (occasionally for other reasons). A few have two rewrites. And that's not a bad thing. Starting again with better knowledge can make the whole project go quicker, because there's less chance of ending up in the situation TFA talks about ("we have to refactor because tech debt").

\- architecture needs to be shaped by the problem domain. There isn't a "best" architecture, so picking one requires knowledge of what the code needs to do. And that needs an understanding of the problem. No-one understands the problem from a technical point of view until/unless they've tried writing a program to solve it.

\- a lot of features of architecture (like choosing to DI the database engine, instead of picking an engine because it's clearly the right choice) are made because the devs don't have enough knowledge to make an architectural decision when they write the code. It's interesting to see how many of these disappear on the rewrite. It's always more efficient (both performance and development time) to make these decisions, but making them is difficult without enough problem information.

\- never underestimate the power of a monolith with good file structure.

<comment><USER11> The issue that I see with this is that, even if they say otherwise during the first version, when it comes time for the rewrite the powers that be often (usually?) aren't willing to support it.

<comment><USER9> The "powers that be" are non-tech-aware. They care about results, not nerds pushing the nerd buttons (I paraphrase).

They literally have no clue about what they're asking for, and just have to hope that the people doing the coding can deliver what they want. There's no backup, no "plan B", no way of delivering this without relying on the devs to deliver. So, who cares what they think?

You can literally say to them "we can continue like this, but because of tech debt it'll take 6 months, or we can rewrite in 3 months". And who's to say you're wrong? I've had more than one project do that.

The truth is that no-one knows how long any of this takes. Not the devs, not the project manager, not the CEO. It's always a rough guesstimate, and the estimates only get better with more information. Smart non-tech managers get this, and deal with it. Stupid non-tech managers try to control it and create deterministic outcomes from the non-deterministic process that is software dev. That always fails.

So, yeah, the "powers that be" need to grok the nature of the thing they're trying to do before saying "you can't do a rewrite even if you think that'll be quicker"

</comment></comment></comment><comment><USER11> I have a pet theory that there are two different ways that people think about and approach programs.

Group 1 likes highly decomposed programs which they feel results have clearer code since hiding the details makes it easier to focus on the behavior.

Group 2 likes to keep code together which they feel results in clearer code since the details of the implementation are readily apparent.

I suspect that these groups may correspond to the Artist versus Hacker groups in this article [https://josephg.com/blog/3-tribes/](https://josephg.com/blog/3-tribes/). I.e. do you view writing code as primarily about expressing intent or primarily about controlling technology?

The conclusion that I draw from all of this is that these are likely fundamental differences that may even result from how different people are genetically wired to think. Therefore, I think that any solution should find a way to satisfy both groups. On the other hand, problems arise when, for example, people in group 2 dismiss the needs of people in group 1 by declaring that organizing the code is premature optimization and YAGNI.

<comment><USER12> I am not so sure that pitting to tendencies against each other is such a good idea. The thing is that the good programming is somewhere in the middle of all of these things because if any of these tendencies goes too far we run into problems. I think we should all be able to belong to each of these three tribes depending on the circumstances.

<comment><USER11> I definitely agree! Going too far in one direction or the other is likely to both result in poorer code and to antagonize whichever side isn't compatible with that approach.

I think what I was trying to get at is that one of the reasons that teams often don't find balance is because the differences are dismissed as being just differences of opinion. I was trying to show that they are often much more significant than that since they can make it difficult for one side or the other to understand and work with the codebase.

</comment></comment></comment><comment><USER13> Not everyone has a master craftsman in them. Some people will show up in a new code base and need to do something; their first instinct will be to look around and try to fit their change in with the established conventions.

They are the minority.

Most will show up and handjam their change in the only way they know how. There will be no concern for the forest. Their job is processing trees after all.

This is something that was on my mind in the Google PR review thread. Not everyone is a "peer" in code reviews. There will be a certain cabal on equal footing, but there will be many more people who are simply contributors.

This is where people like the author come in; Project leads.

<comment><USER6> What gets me is that people are willing to write the same code dozens of times. It's just a tool in their toolbox. It never seems to occur to them that our job is substantially about automating predicable things.

</comment></comment><comment><USER14> These days, when I start a new project, I think of my code as a tree. I start at the trunk and write the branches.

Each kind of state change needs to flow through the code in a consistent direction to avoid unexpected state mutations (like sap flows through a tree).

Another developer should be able to understand all the main parts of my program just by looking at the main entry point/file (the trunk of the tree).

Also, no dependency injection should be used; all dependencies need to be listed explicitly and be trackable to its source file. Dependencies need to either be explicitly imported where they are used or passed down through the branches explicitly via method or constructor arguments. Traceability is very important.

About classes/abstractions, they should be easy to explain to a non-technical person. If you can't explain a class or module to a non-technical person, it shouldn't exist because it is a poor abstraction.

<comment><USER15> > Also, no dependency injection should be used; all dependencies need to be > listed explicitly and be trackable to its source file. Dependencies need to > either be explicitly imported where they are used or passed down through the > branches explicitly via method or constructor arguments.

Isn't the latter precisely dependency injection?

[https://en.wikipedia.org/wiki/Dependency_injection#Construct...](https://en.wikipedia.org/wiki/Dependency_injection#Constructor_injection)

<comment><USER16> Yep, I think GP meant DI frameworks.

</comment></comment></comment><comment><USER17> "I'd really like to get away from the opinions and be able to say with confidence that one design is better than another. Or, at the very least, understand the trade-offs being made." As I've taken more leadership in architectural decisions, this is one of the skills thats helped the most. Having most of the data regarding tradeoffs before making a commitment has steered projects from disaster.

</comment><comment><USER18> How does your code structure help you against these situations:

\- Version control conflicts: if developers are editing the same files all the time, there will be more conflicts and therefore more tasks related to resolve them, such as merging, re-testing, fixing bugs related to a bad merge, re- attempting the merge, etc.

\- Code so complicated that becomes easy to misunderstand, and a source of an unusually large amount of bugs.

\- Code so complicated that cannot be reliably tested without spending an unreasonable amount of time or relying on opaque testing methods.

\- Code so complicated that increases the dependency on specific team members, usually the authors, so that the team cannot function optimally if they're unavailable or unwilling to collaborate.

\- Code so complex that is impossible for an engineer to determine if the system is in a healthy state, diagnose a problem, obtain a reproduction step from a bug report...

\- Code so poorly organized that developers fail to find implementations for a particular problem, causing them to implement the same thing again.

\- Having multiple variations of the same code, so when a bug is found you may have to refactor multiple versions of the same code to fix the problem, if you manage to find them all.

And the list goes on and on. And a solution to these problems can have to do with how code is structured, and conventions/good practices.

If I see a piece of code that needs to know about 40 classes and 50 methods to produce a result, I know that it is likely going to be a pain to maintain. It's not subjective.

If I see a function with 1000 lines of code and a cyclomatic complexity of 500, I know that it may take at least 500 test cases to test it and will be a pain to maintain in a way that doesn't break. That is not subjective.

</comment><comment><USER19> There is a huge amount of artisan streak to programming, vanity even.

Betting incredible amounts of effort and time, we tend to double-down as long as we can before considering alternatives.

There's also the tendency to choose our favourite hammer, it worked so well in the past!

</comment><comment> joatmon-snoo One thing that I've noticed in my time working in large Java server codebases is that there seem to be a number of broad categories of code (not mutually exclusive, just one breakdown, and not exhaustive):

* framework - dictating how people should do things like request handlers, how work is scheduled * feature - making something new work * wiring - the binary had this information in it in this codepath, but we also need it in this other place...

And I have found that DI tends to be the magical "will write code for you" thing that mostly replaces the third one.</comment>


Ask HN: Releasing your business plan into the public? - <AUTHOR>

I'm currently taking a part in a student business plan contest where the best 3 plans chosen by a jury will get a symbolic funding and I have a doubt I need you to help me with.
I was asked to give a version (even though it can be the version the jury will get) of my plan for release to the public. At that moment it occurred to me I was so obsessed with development of my idea that I missed to notice that jury apparently won't be signing any NDAs so that's got me a little bit worried.
Probably the only good thing here is that I'm at least aware that my business plan contains a non-revolutionary idea that isn't worth much. In a sense that if somebody had all the ingredients to pull of the plan they wouldn't really need me all that much me at that point. And from a point of view of somebody looking for an investor I get it that I shouldn't expect a big stake in the business if I come up with just this idea.
But talking with private investors is one thing.
What are your thoughts about giving your business plan to the public? <comment><USER2> Many entrepreneurs have a fear of sharing their new venture ideas with others and I think this is a big mistake. First, it's very unlikely that someone will take your idea and implement. Other people rarely share the same passion for the idea as the originator of the idea. Second, even if someone does take the idea and runs with it (which is very unlikely) they will implement the concept in a fundamentally different way, given all the changes that usually take place from formulating a venture idea to commercializing. Third, the more people you share the venture idea with (a) the more constructive feedback you will get to make improvements to your idea, (b) the more you can practice and tweak your pitch, (c) the greater chance you will find great people to work with, etc.

In short, I suggest sharing your venture idea with as many people as possible. Build a quick prototype and get it into the hands of users for user feedback. If you do have a secret sauce, which affords you a competitive advantage (e.g., Google's PageRank algorithm before it was patented), then you might want to keep this small piece of the plan secret until you can erect other barriers to imitation.

Good luck with your venture!

<comment><AUTHOR> Thanks. That makes a lot of sense. And I knew about that fear but didn't know I still have it. Apparently jury and friends are only the first step towards getting rid of it.

</comment></comment><comment><USER3> Let me tell you an interesting true story.

Last weekend I was at a friends place, and there were a few people there. One of them asked me what I did, and I told him about an idea I had for a new way of doing business online. It's pretty revolutionary, I've thought long and hard about it for a long time, and it can probably be easily copied by someone else. I told him about it anyway. Pretty detailed too.

It just happened that he was finishing up a PHD thesis on a subject very close to what I was thinking about, and we started talking. This conversation gave me some great insights I didn't have before, access to his large network, a serious ambassador and maybe a friend.

Will he steal the idea? I don't think so. Empirically it is very very rare. Did I gain something from it? Absolutely.

Answer enough?

<comment><AUTHOR> Definitely. That's pretty reassuring story. Encouraging me even more to act differently from now on. Thanks.

And good luck with the realization of your idea!

<comment><USER3> Thanks :-)

</comment></comment></comment><comment><USER4> If I described Google to you before they launched, could you have built it? Would you have? How about Digg? The iPhone? WordPress? Facebook? Amazon? Name 10 amazing startups and try to imagine how it could have hurt them if their biz plans were public.

Almost anyone who could possibly be a threat to you if they had your idea ALREADY HAS THEIR OWN IDEAS. Even if they don't, presumably you have dozens of competitors-- 1 or 2 more isn't going to change your shot at success. If you don't think you have ANY competitors, you are either stupid about your market or you truly have an invention on your hands and you should keep quiet.

Talking about your idea a LOT will make you smarter about your market and increase you shot at success. Do it, and do it a lot.

<comment><AUTHOR> Thanks for your input. Actually, reading [http://www.userscape.com/blog/index.php/site/comments/starti...](http://www.userscape.com/blog/index.php/site/comments/starting_a_micro_isv_in_the_beginning_there_was_nothing/) made me decide to start blogging again, and to blog mainly about my project, even before I startup.

</comment></comment><comment><USER5> If anything, exposing your business plan will allow others to give you feedback on it. You'll get to hear wonderful things like "your plan sucks, you need to x and y or you'll never succeed, etc...". Hope you have a tough skin and can take criticism.

Seriously though, unless it is a really innovative idea that will revolutionize the world, then it's probably best to let others in on it. Who knows, maybe you'll get some positive feedback too. It may also prevent you from wasting time on something that won't work or just isn't feasible or may have already been done exactly how you want to do it.

<comment><AUTHOR> Thanks for your input. I know one should expose a business plan for feedback from others and I was about to do that, mainly to friends who I trust could give me as objective opinion as possible. It's just that I never thought of releasing it to the whole public, nor have I heard anyone do that before but then again, I don't have any experience with that kind of stuff, so it might as well be an ordinary thing.

<comment><USER6> You honestly think friends would give you an objective opinion? Giving it to friends is a pretty much guaranteed way to get biased results

<comment><AUTHOR> Not completely objective, no. Some I think would try really hard but I wouldn't expect them to be completely objective. I will definitely choose carefully the ones who I believe can give me the _most_ objective opinion. And I said friends but these wouldn't necessarily have to be the closest friends, even mere acquaintances could suffice.

Can you suggest to whom I should then give my plan for an objective opinion, prior to talking with investors? Would giving it to someone who isn't a 'friend' guarantee a non-biased opinion? I'm not so sure. I'm thinking even complete strangers could have a biased opinion. That just depends from a person to person. I was thus hoping I could be able to choose the right people from the ones I know. And let me assure you, I'm not looking for somebody to tell me how good my plan is. Thank you for you input.

</comment></comment></comment></comment><comment><USER7> I don't think you should participate in a business plan contest if you are really serious about that start up.

The whole process is a distraction and doesn't bring any value. The downside is that you'll waste a lot of time filling templates and doing stuff that doesn't matter at this stage. You may also get demoralized if jury/public doesn't get it and thinks its trash. For all you know, they might not be the segment you plan to target..

If you are serious - Move forward and build the product and show it to real customers that you plan to target. That's probably the only way to know if it'll work or not.

<comment><AUTHOR> I actually thought about that before. I mean, if you're really serious about a project, do you really need some jury that, as you say, may just distract you? If you're really serious you'll find a way. BTW, same goes for that talent reality shows: if you really have talent and really want to sing for example, it's pretty sad that you waited until a show appeared. If it's really something you _always_ wanted to do, how come you weren't actually doing it seriously?

But I applied for different reasons. Not only was I awaken from my no-idea- where-I'm-going state but I benefited also from various people coming to workshops to talk about different business subjects and how to write a business plan for investors. Some of this stuff was very beneficial to me at this point.

Now I know I will continue pursuing my plan no matter what happens on this contest (although the prize would be nice to get me started on my plan so I have something more than an idea to show to the investors).

<comment><USER7> At this stage - building the first version of the product is more important than writing a business plan. You don't want to change priorities because of some contest. Successful start up is more important than wining a beauty contest.

If you can build something that a few people find valuable then you can start thinking about business plan to scale it further... Without the basic product, there is no business and there is no need for a plan.

Of course, all this is based on the assumption that the first version can be built very fast without incurring any significant cost.

</comment></comment></comment><comment><USER6> Don't worry about it. Most #s in the business plan are usually made up so noone really takes them that seriously.

The business plan is mostly there for you, to think through things

<comment><AUTHOR> Yea, from a talk with a local business angel I found out the business plan intended for investors does not have to be as detailed as I would think it should. For example, you don't really have to write how you'd solve a problem, just acknowledge you know it exists and you know how to deal with it. I have to be honest and say I was a bit surprised and somewhat relieved with that realization.</comment></comment>


Ask HN: What systems or tech do you use to speed up your development process? - <AUTHOR> <comment><USER2> Docker is great. I wouldn't say that I am a Docker expert, or a power user even, but being able to spin up a PostgreSQL, nginx, etc. nearly instantly and without lots of configuration is awesome. It keeps me focused on writing code, not configuring programs.

</comment><comment><USER3> I use docker, visual studio, a lot of custom powershell functions, git and gitlab.</comment>


Cutting-edge IT firms need experts in 'dead' languages - g-garron http://thescotsman.scotsman.com/business/Karen-Scott-Cuttingedge-IT-firms.6819935.jp

<comment><AUTHOR> I have discovered, a couple weeks back, that the master's thesis of a guy, who was presenting it on a Google-sponsored event, is about the tools for gradually porting the still-running, still-mission-critical Dataflex application I helped write 25 years ago.

It's used by a good couple hundred municipalities in Brazil to balance their books and help adhere to their required accounting practices.

<comment><USER2> Bah, financial apps. My current company frequently hires a FoxPro 'expert' to do customization of a horrible financial app. It worries me deeply that there is a company marketing "new" accounting software based on tech this old, and that people buy it.

It doesn't bother too much that we pay the consultant a lot to customize it, because it seems like hell.

<comment><AUTHOR> I don't know how the code evolved in the past 25 years, but Datafles, the version 2 in particular, was a very nice and productive language to use. I use to say it was like Rails for the VT-100 ;-)

</comment></comment></comment><comment><USER3> Sounds like they need to realize that some programmers can learn a language as they go... At least, well enough to fix problems and do minor changes. You don't need someone fluent in the language for every problem.

They also need to realize that sometimes it really is cheaper/better to start from scratch than to try to prop up a dying system.

Complaining about the cost of programmers while refusing to do a rewrite is pointless. You've picked your path.

<comment><USER4> Doing a rewrite of, say, an APL system without programmers with a really deep understanding of APL on the team will most likely end in failure and misery. So you're still faced with the problem of finding and hiring people who know APL. Also letting some RoR hacker, who heard about APL for the first time 3 days ago, loose on your super critical production code, probably isn't that great an idea either

<comment><USER5> Provided you still have source code and development tools available, the problem in cases like this usually isn't the language. Even APL is pretty easy to pick up if you have a book or someone to teach you.

The bigger issue is that the application you need to fix is mission critical, undocumented and contains massive amounts of spaghetti code. There usually aren't any tests, source control might not be used and it's far from certain there are automated builds or deploy scripts.

In some cases you might not even have source or the tools to use it, and then you have much bigger problems. But the language usually isn't the main problem.

</comment></comment></comment><comment><USER6> Summary: "We want to fill positions using ancient and obsolete systems that nobody would like to touch, BUT we are not going to pay any premium for it. We wonder why developers are not falling over themselves to come work for us."

<comment><USER7> Indeed. I recently saw a US job posting located in a major city that wanted a COBOL programmer to update a legacy system. I know I've read articles in the past about how much of a need there is for COBOL programmers, so I was kind of curious what someone would pay for one. They advertised that the pay would be $30/hour. You could make far more writing horrid J2EE code for practically any big company.

<comment><USER8> However, if you have the requisite skills, you can often contact these folks and say "Sure I'll help, but my rate is actually $500/hr, is that a problem?" and see what they say.

When you ask HR to run an advertisment like this they don't have any idea what they are asking, they hear "computer consultant for this program" and look in their book of "What do we normally pay consultants?" Oh yes, here it is $30/hr, put that in there. So when you contact them and tell them $500/hr they will initially tell you "No thanks."

Then they will tell the person who asked them to write the ad that some "Kook" said they would do it but for $500/hr and the manager will say "Did you get their number? Are they local?" and the HR person will fall off their chair, then pick them selves up and sheepishly call you back :-)

</comment></comment></comment><comment><USER9> Jobserve has 4 pages of Java jobs in Scotland but zero pages of Cobol jobs.

So this story isn't that plausible.

Ok, so maybe there are fewer jobs but harder to fill? Well, when you look at Cobol roles across the whole of the UK they are paying below equivalent java developer rates.

So yeah, not worth learning Cobol just yet.

<comment><USER10> The demand is expressed not by heavy monetary compensation of new hires, but by retention of low-performing, overpaid employees with extensive domain knowledge but few other marketable skills. It's less visible, but equally expensive.

</comment></comment><comment><USER11> Given the spate of recent pre-2000 news articles that have been posted on HN lately, I was astonished to see (after skimming this) that it's dated August 2011.

"While our universities are turning out very able graduates, well versed in the sexy new languages of Java, .Net and the like..."

I chuckled.

</comment><comment><USER12> "So, how do we reskill a workforce to adapt not only to challenges of the new but also to cope with the legacy of the old? Universities in conjunction with major employers should work together to address this issue."

I think the market will take care of this, rather than universities. It is simple supply and demand. If COBOL programmers get paid enough of a premium, people will learn COBOL. This is an order of magnitude more likely than finding professors to teach a language they dislike. Even 20 years ago few students were lining up for university COBOL courses.

<comment><USER13> "If COBOL programmers get paid enough of a premium, people will learn COBOL"

I've never understood why it is always presented as a bad thing for free market economics to apply to hiring people to do shitty jobs.

<comment><USER14> Its hard enough to get good programmers to write in cool languages - tried to hire some lately?

It seems obvious, in a programmer shortage, that nobody good is going to go work for this cutting-edge(!?) IT company.

<comment><USER13> Pay me £500K a year and I'd learn Cobol and I'm in Edinburgh :-)

Pay me £600K a year and I'd even wear a suit and tie.

Actually, I suspect that I'd probably start writing something to convert COBOL to/from s-expressions and automate any changes to be made.

<comment><USER14> ...now to get suits to pay that much for a COBOL programmer! They probably would rather die.

Maybe by marketing it right - you're a C2D (COBOL to Die) conversion consultant, ready to do the heavy lifting to modernize their obsolete codebase...

<comment><USER14> Oh, they already exist. ateras.com, cobol-conversions.com, datatek-net.com, coboltojava.com and on and on.

<comment><USER13> Aren't those just direct translations? I imagine the resulting Java must look _lovely_!

Whereas if you had a COBOL parse tree as an s-expression it might be much easier to write "smart" code to do the changes and then write out the results back to COBOL.

</comment></comment></comment></comment></comment></comment></comment><comment><USER15>
        While our universities are turning out very
        able graduates, well versed in the sexy new
        languages of Java, .Net and the like...

...BUWAHAHAHAHHA. The number of serious problems with this statement gave me a good chuckle.

</comment><comment><USER16> _Although a perfect world option would be for organisations to move their entire systems to a new platform, this would prove extremely costly at a time when the sector has seen its capital expenditure come under pressure._

Given that many banks are reporting record profits, I'm not sure I buy the 'it costs too much' argument.

 _There are also enormous business risks associated with a transfer from one system to another_

Yes, there are risks, but there are also large business risks in finding out that there's no one left who can keep your systems running either. Or, there's only 2, and each person charges $2k/hour (remember, you can't switch because it costs too much!).

<comment><USER17> > Given that many banks are reporting record profits

What??? UK banks, including RBS which is the biggest in Scotland - the source of this report - are having a disastrous time. They're still reeling from the 2008 meltdown, are facing huge costs re mis-selling of PPI and to cap it all are now suffering from the Eurozone crisis. Their share prices are collapsing and they're sacking 10s of 1000s of people. They do not have money for massive capital infrastructure investment.

<comment><USER16> I thought of that afterwards. Yes, some banks and having trouble. But... when business was _great_ they didn't do it either. Banks shouldn't even bother mentioning "it's too expensive" because they've proved that even when profits are great, they still won't quickly move away from 60s legacy cobol systems.

<comment><USER17> Depends what you mean by "profits are great". When Goldman or Lloyds report profits of $10bn they get slated for massive profiteering. But a profit figure alone is meaningless. The number you're after is profit divided by market cap. Investors want a return on their shareholding: they want dividends. If a company has a market cap of $200bn a $10bn profit is 5% return. And not all that will be paid as dividends, much WILL be re-invested. So maybe the investor earns a return of just 2%. And if investors don't make a return, they'll bail out. Stock will fall, the bank will suffer, jobs will be lost. So it's important a bank does make these "big" profits.

It's all very well to wring your hands and demand investment in an area that you think is worthwhile, but that profit has got to feed a lot of mouths. Relatively speaking the profits are NOT that big. Perhaps bank leaders _are_ being short-sighted about this, but it's a whole lot more complex than bankers filling their pockets to get rich in the short term.

And from personal experience I can assure you one thing: they will invest wherever they think they'll get the best return. Perhaps that isn't aging IT systems.

</comment></comment></comment></comment><comment><USER18> > While our universities are turning out very able graduates, well versed in > the sexy new languages of Java, .net and the like

I have been flirting recently with a return home to Scotland (from Berlin) recently, and have found it extremely difficult to find any interesting opportunities on par with what I'm doing right now. The quote above reminds me why I had to leave to stay sane.

<comment><AUTHOR> > sexy new languages of Java, .net and the like

The author has a very strange notion of sexiness. Or a very strange sense of humor.

<comment><USER19> It's all relative.

<comment><AUTHOR> I consider 3270's sexy. The real thing, not an emulator.

That 60's design is a killer.

</comment></comment></comment></comment><comment><USER20> I really don't see the problem here, you can just hire people and have them learn Cobol right? Sure it will take some adjusting for someone who's never used it but after a month or so they should be fine.

<comment><USER21> It takes 6-12 months to become competent in a language. You could maybe be at the level to make modifications in 1 month. Remember that it's not about a language really, but a platform.

</comment></comment><comment><USER22> > Instead, the sector faces the real threat of a shortage of one of its most > crucial resources: programmers who possess legacy skills in older > programming languages, such as Cobol and Assembler.

Saying "assembler" is a language is like saying that "Romantic" is a language. Are you talking about PDP-8, x86, ARM, MIPS, SPARC, ... ? Also, having spent the previous night doing nothing but writing assembly (to patch machine code, no less), I suddenly feel very old.

<comment><USER23> You're right, of course, but this is not a tech site. In this case, I think it's reasonable to use the more familiar term. It's a bit like Lisp; it's not _technically_ a language, but everyone knows what you mean.

[edit]Or seanstickle could be right. COBOL was invented before my mother was even born, so this isn't exactly my area of expertise. ;)

</comment></comment><comment><USER24> To have got into this issue there must have been an attitude for a long time to spend the bare minimum on programming and patch things rather than refactor and overhaul.

</comment><comment><USER13> Interesting - I tried three different recruiting sites (including s1jobs - which is local to Scotland) and I can't find _any_ posts mentioning Cobol.

</comment><comment><USER25> I agree to the point that colleges are shifting their curriculums. But to think its not the legacy giants (IBM, Oracle, etc) not pushing on colleges for "java hires" could be causing it?

Not saying any intention is that sinister, but the general CS job market is a different market than administering legacy systems mostly. These guys will be able to sit on that job for years.

</comment><comment><USER26> So, how about gradually migriting the systems to newer languages/platforms? The longer they wait, the higher the overall costs will be in the end.

</comment><comment><USER27> They don't need a whole bunch of people who write Cobol. They need someone to write a Cobol to (insert language) compiler.

<comment><USER8> Oh absolutely, and surprising there should be a reasonable consultancy in it. But the trick is you need someone who understands both their domain (be it billing / accounting / catalog management) and legacy systems and can express that in a more modern system.

These people DO NOT WANT PROGRAMMERS, they want tools that help them do their job. So they see programmers like the masons who laid the brickwork of their headquarters, indespensible when it was built, but never to be seen again. So they build their business logic 'tool' and they run it, for ever, and ever, and ever. Sometimes on really cool old hardware like DECSystem 10's or PR1ME machines.

</comment></comment><comment><USER28> There are some other advantages of having someone who knows assembly and the likes as well. First, lets face it, if they can program well in that language they can probably program well in any other higher level languages. Second, not very many people at all even know what a CPU's register is, or what the difference between big endian and little endian is, or why we should be really really happy that we were brought Protected Mode Flat Model. Meaning that if your one of those people that do bother to learn it then you'll have a much higher "edge" factor for any company willing to admit they need those skills around still. And finally, to see how bits turn to hexadecimal. How hexadecimal matches with CPU's registers and all you really do is move or push data from one piece of memory to another. It all gives you a perspective on how programs work underneath it all, how the operating system works, and lets you see things like the code beneath something in front of you. You get a good foundation of a core technology which may one day be needed again very badly. (Hasn't anyone figured out that quantum computers will need someone to create a new assembly language/architecture for that matter?)

</comment><comment><USER29> I see utter incompetency in the management lack of planning and leadership. Though the hacker inside me find it a good opportunity to practice compiler theories, say, write a compiler to translate modern languages to Cobol, just like CoffeeScript to Javascript.

<comment><USER30> Wouldn't the opposite solution be better? Write a compiler from Cobol to another language? Perhaps C, because C can be called from any other language and can do gotos, etc to emulate legacy control flow and other oddities.

After you have your legacy Cobol code running in a modern environment and the frontend can interface with it, you can start gutting it piece by piece to get rid of the legacy codebase.

I fear that in 50 years, there will be a tremendous need for programmers that can deal with a horrible 1990's language called Java and fucked up non- paradigm called object oriented programming.

I also see this as a problem with the companies who still want to maintain code from decades ago. It will become more expensive day by day. Of course, to a banker, computer programming and it maintenance is nothing but a cost. However, at some point it will become more affordable in the long term to just scrap the old legacy systems.</comment></comment>


bitluni has generated color TV graphics from $5 esp32 Internet of Things chip - <AUTHOR> http://bitluni.net/esp32-color-pal/ <comment><AUTHOR> You can buy an esp32 here if you're wanting to explore the esp32's capabilities

[http://s.click.aliexpress.com/e/jYvJIEi](http://s.click.aliexpress.com/e/jYvJIEi)

Or if you want to get wild, for about $40 buy a pair of esp32 boards that have LoRa (the new Long Range Wifi standard) and an oled display built int [https://www.banggood.com/2Pcs-Wemos-TTGO-LORA32-868915Mhz- ES...](https://www.banggood.com/2Pcs-Wemos-TTGO-LORA32-868915Mhz-ESP32-LoRa- OLED-0_96-Inch-Blue-Display-p-1239769.html)</comment>


Ask HN:is it worth building a Mac app that can't be sold in the App Store? - <AUTHOR>

I know that there are applications on OSX that are successful even without appearing on the App Store. However all those I can think of have been made before the coming of the App Store.<p>With more and more users shifting to the App Store, I fear that I would only waste my time developing an application that I know won't be approved because its functionality doesn't comply with Apple guidelines. What do you think ? Is there a way and is it worth to commercialise a Mac app outside the App Store nowadays ? <comment><USER2> Check out what Panic had to say on the subject: [http://www.panic.com/blog/2011/01/panic-on-the-mac-app- store...](http://www.panic.com/blog/2011/01/panic-on-the-mac-app-store/)

I'm extremely skeptical about the long-term viability of the app store model, just as I was about trying to build on top of other people's platforms (Twitter, Facebook). But, that doesn't mean it can't work for you for a while, and if a company like Panic thinks that they should be in the app store, then that's probably worth considering.

<comment><AUTHOR> very helpful link, thanks.

"there's no question this will become the way new Mac users will find Mac software".

It's true, and you have to be there if you want to be found.

</comment></comment><comment><USER3> I'd say probably niche apps would be worthwhile selling outside of the store as you will need to go and sell the apps to potential users and while doing that you can tell them where to download it.

</comment><comment><USER4> Consumer apps might be a hard sell, although Steam might soon have its own app store. If you're selling a business app, then yes, you can easily succeed outside the app store.</comment>


Amazon Simple Workflow - Cloud-Based Workflow Management - <AUTHOR> http://aws.typepad.com/aws/2012/02/amazon-simple-workflow-cloud-based-workflow-management.html <comment><USER2> First thought: D'oh, why didn't I think of this?

New resolution: consider everything I do from a cloud based perspective.

My Experience: A few years ago I considered windows workflow and built my own simplified version for a project. WF tooling at that time was still evolving. The requirements were all over the place and I thought it might be prudent in this case to build something to expect the worst.

As Murphy usually does, the worst never came almost 5 years later. The workflow engine works well, and simply enough for a simple event based system. It's more of a routing system and I'm fine with it.

Where ASW catches my eye is the admin tools. Like most apps the admin tools are among the most complex parts of the app. In ASW, so far I'm recognizing a certain simplicity.. in a generalized sense for a workflow system.

If I tried to do the same in another workflow technology, I would almost certainly be running into more configuration upfront, and the admin tooling to create and manage workflows from a UI perspective would likely be either too basic or to overkill for what I needed.

That's the crux of generalizing a solution to a problem, it risks being so much bigger than we need that it adds overhead to what we were liking to simplify.

ASW initially strikes me as being much simpler. It could be useful to managing state simply across distributed applications, specifically in the cloud. Not sure how the pricing would work though, that seems like a lot of money to pay for logic gates and a state machine, but I could be trivializing.

Now.. just to think up a simple fun utility or project to try this out with.. :)

</comment><comment><USER3> Using (and even researching) new AWS services has always been surprisingly frustrating to me.

You have to sift through buzzword-filled ad copy and corporate-speak to find any explanation of what the product is or how to use it.

</comment><comment><USER4> At the risk of sounding like a Microsoft shill (I'm not), you can already have your cake and eat it if you use Windows Workflow on top of AppFabric.

It has an arguably better feature set (including extensive transaction, correlation, failover, load balancing support), is extremely robust and can be deployed on EC2 or your own infrastructure (or both at the same time - you can scale your workers up on EC2 for example). The learning curve to do something useful is about 2 days.

It's pretty cool actually.

<comment><USER5> _> At the risk of sounding like a Microsoft shill (I'm not), you can already have your cake and eat it if you use Windows Workflow on top of AppFabric._

I've been researching/demoing App Fabric at my job for a few weeks now to possibly use for our new SOA layer, and that was the first thing I thought when I saw the SWF email from Amazon this morning. Of course anyone not working in IIS or Azure (ie Linux or AWS) would get no benefit out of App Fabric, and this could be an excellent alternative regardless (judging by the high quality of Amazon's other services I mean).

</comment></comment><comment><USER6> I really love this new tool. I think Amazon has some amazing technologies and services.

Why don't they hire a designer and awesome UX guy and fix their terrible interfaces?

I know most people use the API's, and I realise it's not really stifling their business, but I still don't see why a little more effort can't go there. I am sure there are a lot of people around the world that would be very happy for the console to have some more features and be a bit easier to use.

<comment><USER7> This has puzzled me for quite a while as well. The AWS Console isn't just awkward, it's lacking some of the features the API exposes if I recall.

<comment><USER8> Yep. It seems to be impossible to delete an SSL certificate for an ELB via the console, for example. You can set one up, but not remove it - for that you need the CLI tools.

</comment></comment></comment><comment><USER9> This really sounds too enterprisey. It's unclear to me what the benefit is of using SWF, and lost my interest when it started listing business definitions.

<comment><USER10> "too enterprisey" = a service that large businesses can integrate deeply into their existing applications, Amazon can bill them for, and yet another compelling reason for companies with obscene amounts of money to dip their toes into AWS.

Look at this feature next to the AWS Storage Gateway, recently announced: these are features to get businesses using portions of AWS so that they demonstrate their reliability and cost effectiveness at a small scale. Once a business is comfortable dealing with Amazon then they provide compelling reasons to expand into more of their services (EBS booting + attaching Storage Gateway volumes to EC2 instances for braindead simple cloud compute migrations away from expensive, inflexible on-premises datacenters, SES, SQS, SNS integration with SWF, etc)

Never forget that Amazon is playing the long game.

</comment></comment><comment><USER11> Depends on your volume, of course, but seems expensive. 1 million jobs scheduled, 4 steps per job? $200. And you're locked into their API.

You can have 8 workers each polling an Amazon SQS queue once a second for $19/month.

Having had huge problems with their queues (3 minute lags, spurious duplicates) I'm wary of Amazon's polling-based API. SWF's long-poll feature is smart versus SQS, however.

</comment><comment><USER12> I think this is meant to be a parallel to things like celery and gearman, i.e. a task queue. A table mapping between AWS services and what components they replace in a typical DIY stack would be helpful for a lot of people (i.e. SQS = RabbitMQ, SWF = celery, ELB = nginx, DynamoDB = Cassandra(?)).

<comment><USER13> Cerery doesn't do workflows with dependencies, just tasks. This is more like Storm: <https://github.com/nathanmarz/storm>

<comment><USER12> Well celery does have subtasks that it can wait and join on (see <http://ask.github.com/celery/userguide/tasksets.html>), but I suppose that the logic to do such things would have to occur within a running task as opposed to SWF where such things are handled by the platform itself.

</comment></comment></comment><comment><USER14> I'm actually in the middle of designing a Workflow-as-a-service for my current employer (based on jBPM 5).

However, this isn't Workflow-with-a-capital-W. It's not even a state machine. SWF is actually a distributed-processing task queue with persistent state and execution history. Which is pretty cool.

</comment><comment><USER15> This is a great idea! Actually this may have just saved me a bunch of coding.

Amazon you're starting to rule the world and its a bit scary...but for now i'm ok with it.

<comment><AUTHOR> Have fun with it, and let me know what you come up with.

</comment></comment><comment><USER16> This is Amazon's attempt at next gen PaaS. You can find more details here [http://www.cloudave.com/17315/remember-next-gen-paas-and- aws...](http://www.cloudave.com/17315/remember-next-gen-paas-and-aws-here-is- the-second-piece-to-the-puzzle/)

<comment><USER17> Yep, your analysis is spot on. Good article

</comment></comment><comment><USER18> This looks very applicable to what I'm working on right now. I've built my own naive implementation of a distributed worker queue, using redis as the basic centralized queue. There are many edge cases where redis lpush and rpop will let me down, so as I build my tool, I know that I'll eventually have to move to an actual message queue.

I've stayed away from RabbitMQ, or even something like ASW, while developing this project of mine because they're a lot of work to integrate, on their own. ASW looks awesome but it looks as though it'd take all of my focus to integrate it. It's something I wish I could use right now but don't think I'll be able to until I've finished most of my development.

I guess I'm just saying that ASW looks complex.

</comment><comment><USER19> I don't get it, can someone explain what problem it is trying to solve? By means of an example?

</comment><comment><USER20> This is very cool. We are working on a website for a complex workflow. This could take all of the business logic out of the web application (done via rails state plugins) and move it to the amazon service. Then just make semi- dumb forms to accomplish each state. I think that is the goal of this, you just have to code individual pages which coordinate with your database models and hit the API as the business layer.

</comment><comment><USER21> Looks cool, but the link to the API reference is missing. I'd like to see some code examples and how you write non-java workflows.

<comment><USER22> From the product page: <http://aws.amazon.com/documentation/swf/>

</comment></comment><comment><USER23> It sounds scary to me to have something that core to your business be running on a rented platform.

<comment><USER24> Have you mapped out what services your business consumes and the relationships? e.g. Your bank accounts, payment systems, deliveries, suppliers. I think you'd be surprised.

</comment></comment><comment><USER25> Interesting. I just implemented a workflow thing for LiberWriter. It's a little unclear how the Amazon system might integrate with, say, an open ended comment system. Definitely something I'll be keeping an eye on though.

</comment><comment><USER26> I didn't see it linked from the blog post, so here's the official SWF page: <http://aws.amazon.com/swf/></comment>


A Strategic Point of View for VM - <AUTHOR> https://archive.org/details/AStrategicPointOfViewForVm <comment><AUTHOR> There's an associated text version of a lot of the main ideas in [http://www2.marist.edu/~mvmuajs/vmoutlook/](http://www2.marist.edu/~mvmuajs/vmoutlook/) but the video is actually quite funny even if you don't know what VM is. Reminds me of Bryan Cantrill's illumos talks in sheer entertainment value.

There are some interesting things to discuss on missing markets, and product management around this. Although z/VM is still a billions dollar business.</comment>


Show HN: ShopSleuth – Get notified when an item is ready to buy - <AUTHOR> https://www.shopsleuth.io/ <comment><AUTHOR> Hi guys,

I recently built a PC for the first time. I found that one of my favorite parts was looking for the best deal for each part. I spent a lot of time lurking on different deal sites and buying the build piece by piece. To save some time, I ended up coding a script to watch items that I was interested in, and notify me when they fell below a certain price. I've saved a fair amount of time and money using it, so I thought this is a tool that some of you could get some use out of too.

Right now it's meant mostly for electronics, but it should work for any item that can be gotten just from the URL. I only have a couple of the big sites at the moment, but have plans to add a lot more.

Let me know if there's anything you all would find helpful to add!

</comment><comment><USER2> Don't price comparison sites already do this, while pulling in prices from all available shops? How is this better?</comment>


Mozilla releases massive crawl data dump and announces data challenge - <AUTHOR> https://medium.com/firefox-context-graph/overscripted-digging-into-javascript-execution-at-scale-2ed508f21862 <comment><AUTHOR> The "contest" repo where the data can be accessed is here: [https://github.com/mozilla/Overscripted-Data-Analysis- Challe...](https://github.com/mozilla/Overscripted-Data-Analysis-Challenge)</comment>


Ask HN: What should be my hourly compensation? what is yours? - <AUTHOR>

I've been working as freelance web designer/developer in an Asian country. I primarily get projects through referrals. My current clients have very low budgets. Since, small businesses here are not comfortable with variable (hourly) pricing. I've been doing fixed rate projects only.
I consider myself decent at front end design, front end coding and ruby on rails. I have few finished rails applications I've developed, which I haven't hosted because I don't have a server with good rails support.
Enough about my background. Now I get approached by people from countries like US for freelancing, after checking my github or stackoverflow profile.
Now, since I haven't worked on hourly rate basis, and I'm working for incredibly low price for clients here(recently finished an ecommerce website design and front end coding for $300). I don't know what should be my hourly compensation in respect to the work I deliver.
So, I seek you guys/gals help. What should be my hourly rate for doing rails work? and for doing front end coding?
If you are comfortable, please share your hourly compensation and some insights regarding this subject matter.
Thanks <comment><USER2> I supposed it depends where your client is located. In the US northeast, a senior developer makes around $50-80/hr. I've done a few fix rate Rails projects that took about 20-30 hours in all for about $5k, so around $25/hr.

<comment><AUTHOR> The client is New York based. BTW do you mean $250/hr for fixed projects?

<comment><USER3> Pretty sure he said $25 and not $250..

<comment><USER4> $5000/20 hours = $250/hr

<comment><USER5> Your math is right, but his suggestion is wrong. No way should he charge $250. That's crazy, unless you are in the top 1% in mobile apps. Even then is sounds a little high.

<comment><USER4> Completely agree - but it does bring up an interesting point: bidding on projects at a fixed rate _can_ lead to higher hourly rates (although definitely not always, especially for someone just starting).

</comment></comment></comment></comment></comment></comment><comment><USER6> I'm based in the UK, but work with American clients, my rate is £45 / hour, which is currently about $68 / hour.

To give some perspective, I do Rails, PHP, JavaScript, and front end, and I've got around 6 years experience.</comment>


The Slash Factor: The Secret Sauce To A Hackathon That Rocks - <AUTHOR> http://www.rackspace.com/blog/the-slash-factor-the-secret-sauce-to-a-hackathon-that-rocks/

<comment><USER2> No mention of the actual organizers? Geeklist didn't organize this The Collective did.

<comment><AUTHOR> Thanks for pointing that out. It's been updated to recognize The Collective.</comment></comment>


Google Faces Enormous Forces in Fight Over the Future of Android - <AUTHOR> http://www.wired.com/2015/04/google-faces-enormous-forces-fight-future-android/ <comment><USER2> I can't fathom why Google is named in this, but not Apple? Android can be released with whatever software you want on it... see chinese phones, or the kindles... You just cant bundle it with google services or play store if you also try to bundle third party services. Its a choice, not a forced decision, and users can install those later if they want. On iOS, apple tells you what you can install, how it can be used, and they can change those rules on a whim and destroy businesses - and a core value of their app ecosystem is that you are not allowed to create apps that compete with them, see the new removal of Pebble apps since the release of the Apple Watch....

The EU is backwards as hell...

<comment><USER3> My understanding is Google also blocks hardware vendors from working with alternative android based OSes. They accomplish this by threatening the hardware vendors with not licensing Google's android version with Google's apps if they release another android phone with say Kindle OS.

That seems to fall under anti-trust behavior to me. (I'm not a legal expert). Using your strength in one market (search, email, youtube...) gain and protect market share in another (Mobile OS).

<comment><USER4> Is that really the case? HTC is releasing Nexus devices and Windows phone at the same time, and they also released the "Facebook phone." I can't imagine they'd be jeopardizing their Android business over Windows phone or FB Home if that were a real concern.

<comment><USER5> I'm no expert on this, but from what I remember, if you produce an android phone running normal stock android, then you cannot make another phone and fork the OS. So while HTC can make Nexus and windows phones, they cannot make Nexus and their own phone running their own port of android that ditches all of Googles apps. It's Googles way of locking Hardware manufactures in and preventing competition. Hence lawsuits.

<comment><USER6> You are correct.

Good stuff from Ben Evans about this [http://ben- evans.com/benedictevans/2015/3/15/android-taxonom...](http://ben- evans.com/benedictevans/2015/3/15/android-taxonomies)

</comment></comment></comment></comment></comment><comment><USER7> "Anyone can use Android without Google"

Really? Then why can't I uninstall Google Plus, Play Music, Play Newstand, etc? These are "system" apps. Remember when Microsoft made IE a system app? That didn't end well.

<comment><USER8> By "anyone" here, they mean manufacturers. And even you could flash your phone if you wanted to, unless restrictions have been placed (which is done by the carriers, not by Google).

<comment><USER7> OK that makes a lot more sense, thanks for clarification.

</comment></comment></comment><comment><USER9> > _It's the EU's biggest antitrust action against an American tech company > since it levied charged against Microsoft and its Windows operating system > in 2000, which eventually resulted in huge fines for the company and notable > changes to its technology. This time, the tables have turned, but the case > is playing out in similar ways._

Er, the investigation they just announced is the biggest antitrust "action" since Microsoft? Oh Wired, you remain as lazy as ever.

It'll be interesting to see how this plays out. It's been over 5 years since the Google search investigation first became public knowledge[1], and it'll be another few years before it's resolved. Compared to web search, the mobile market is going to be changing far, far faster over the next 5 to 7 years.

[1] [http://www.nytimes.com/2010/01/19/technology/19antitrust.htm...](http://www.nytimes.com/2010/01/19/technology/19antitrust.html?_r=0)

<comment><USER10> There is no mention of Android in that 2010 article. The Android issue is the new announcement. Scale claims are Wired's.

<comment><USER9> > _There is no mention of Android in that 2010 article_

That's what I said?

> It's been over 5 years since the Google _search_ investigation first became > public knowledge[1]

</comment></comment></comment><comment><USER11> What comes around goes around.

[http://www.nytimes.com/2009/02/25/technology/companies/25goo...](http://www.nytimes.com/2009/02/25/technology/companies/25google.html)

</comment><comment><USER12> Google should be thinking in terms of switching android away from Java toward either Objective-C, which is very popular, or C++. This would be a very large and costly change but the longer they wait the higher the costs rise. Furthermore the fact that Google is not using Objective-C means that two teams are always needed for mobile development in most companies... Whereas if they use Objective-C one team could code for both android and iOS.

Alas like most people who work in tech Googlers have trouble questioning assumptions.

<comment><USER6> More likely Google is going to push toward Chromium and web-as-platform. This can be somewhat timed as hardware vendors switch over to Google-free Android. This will be the second move to undermine Apple.

This should work for most everything short of things that must have very low latency like VR. Keep an eye on Google's continued expansion in to telecom.

<comment><USER13> Chrome as a platform, yes. Web as a platform, no. The come from the latter and are going to the former.

<comment><USER6> This sounds plausible. Has there been any examples of Google pushing against comparability standards with other browsers?

</comment></comment></comment></comment><comment><USER14> After having stiffed Microsoft, the EU has turned its attention to Google. Business as usual. You are talking about an organization that can't even balance its own budget, going about left and right extorting money from whoever seems to have a lot of it. Sooner or later Appple will be next.

<comment><USER15> > You are talking about an organization that can't even balance its own > budget, going about left and right extorting money from whoever seems to > have a lot of it.

What are you talking about?

<comment><USER14> The EU are simply going after a business with lots of money. Most of the organizations complaining about Google are big companies most of which have been targetted and fined, or will be fined by the EU at one time or the other. The EU takes its turn extorting them one after the other.

It isn't as though in all these complaints it is just business as usual. In the form of Oracle you are talking about a company with feels APIs should be copyrighted, and in Microsoft you are talking about a business which gobbles up patents for licensing like there is no tomorrow. None of the major complainers are boy scouts themselves, and neither is the EU for that matter.

<comment><USER15> Ah, you're just talking nonsense</comment></comment></comment></comment>


A flag for the Earth - <AUTHOR> https://github.com/stephanerangaya/earthflag There is no internationally agreed upon flag to represent the whole planet so I decided to create a new Github collaborative project where anyone could help create a flag of the Earth.<p>I've made a first attempt, based on the Pioneer plaque sent to the space 40 years ago. Feel free to fork it! <comment><USER2> This one seems more authoritative: <http://i.imgur.com/xDLKS.gif>

<comment><USER3> Yeah, I'm partial to "Old Freebie"

</comment></comment><comment><USER4> Very nice, I believe that's the image that shipped with Voyager-I 30 years ago. It's actually a map that you can use to locate Earth based on known pulsar distances, sort of a galactic GPS coordinates.

</comment><comment><USER5> Some earlier efforts: <http://en.wikipedia.org/wiki/Flag_of_the_Earth>

</comment><comment><USER6> Looks good to me, somebody fly it up

</comment><comment><USER7> I accept this flag.</comment>


Heroku down? - <AUTHOR> https://status.heroku.com/?today

<comment><USER3> This is a more widespread EC2/EBS issue: <http://status.aws.amazon.com/>

<comment><USER4> I couldn't see any red circles indicating an issue with EC2/EBS.

<comment><USER3> The circle is green with a little "note" on it.

"8:50 PM PDT We are investigating degraded performance for some volumes in a single AZ in the us-east-1 region."

<comment><USER4> Wouldn't that only affect a small subset of visitors. For example why would I be seeing any issues if I'd be hitting an Asia-pacific volume instead of a us- east region one? Seems like it goes deeper than that.

<comment><USER5> One problem which we've seen before is: If a large percentage of AWS infrastructure goes down, the customers don't just quietly suffer. Instead they scramble to try and launch infrastructure in other zones or regions, which creates a cascading series of load spikes throughout the AWS system.

AWS is a fascinating science experiment. Pity about the websites, though.

</comment></comment></comment></comment></comment><comment><USER6> Is Heroku still in beta? The name has been around for a while. I would have thought the platform would have stabilized and complete outages were very unlikely.

In the past 30 days they have had 2 outages which have lasted more than 2 hours. That's a lot of down time.

<comment><USER7> This is an Amazon outage.

<comment><USER8> Not very interesting for a customer of Heroku.

<comment><USER9> Any customer of Heroku who didn't weigh the cost/benefit of Cloud hosting is a fool and deserves to watch their app have downtime.

Cloud hosting is fantastic but it's a trade off. There are so many layers of abstraction between you and the hardware that you are completely at the mercy of one, two or (more!) technical organizations, each with their own support systems and varying levels of opacity into their infrastructure.

The fact that Amazon went down IS VERY interesting for a customer of Heroku.

And if it isn't, than that customer is a fool for outsourcing so much of their system without even understanding the risks involved.

<comment><USER10> I don't know, I think heroku should provide the value proposition that - <USER2> we have it covered, if we rely on another cloud it's on use to build in redundancy and reliability atop it so as not to burden you, the app developer who is paying us to take care of operations and scaling.

What would be interesting to me about an Amazon outage being behind a heroku outage would be to keep a tally, and if heroku didn't manage to build in more reliability to be resilient to even an amazon outage in a particular region, to question whether they were a good fit.

</comment></comment></comment></comment></comment><comment><USER11> Dear competitors,

Please take this outage as proof that you need to build our your own infrastructure and hire your own operations team in multiple geographic locations.

In the mean time, we will continue to focus on building new features and products that our customers love on our EC2, Heroku, and cloud based system.

<comment><USER12> Nah, I'm going to pick dedicated hardware with SSDs for IO consistency that beats the pants off of AWS for a fraction of the price and not much more time commitment, rather than for the potentially better uptime.

<comment><USER13> _not much more time commitment_

This is fiction.

<comment><USER14> How much time commitment do you figure on when your site is down and paying customers are calling and emailing you?

<comment><USER13> If reliability is that critical, you need multiple data centers. This is far easier to implement with EC2 than by building out hardware.

Also: Most downtime is caused by bad code deployment, poorly-conceived network or system configuration changes, and sysadmins with fat fingers. Do you really think your hired talent is going to be better than Amazon's hired talent?

<comment><USER14> Sorry to be rude, but that is a bit incendiary of a comment. However, given stats for the past 12 months, I can show that my availability for the 2 racks I manage, is in fact, higher than AWS. Thanks for the compliment!

</comment></comment></comment></comment></comment></comment><comment><USER15> Dear Heroku -- I know it's my job to make sure my site is available (/thread). However, I think I speak for most enterprise customers when I say I will throw money at your company the second you come up with a multi-zone/highly- available offering.

<comment><USER16> Throw money at <http://appfog.com/> they have multi datacenters already

<comment><USER15> It's an open offer. Do they support python? edit: they do, but it's not clear how to easily deploy a multi-zone application. Could you point me towards some docs?

<comment><USER16> Right now any single app can be deployed from any one of a bunch of infrastructures, AppFog is working on the ability to run one app in multiple infrastructures simultaneously too.

</comment></comment></comment></comment><comment><USER17> <http://quora.com> is down, too. Seems like an AWS outage.

</comment><comment><USER4> Once again proof that "the cloud" isn't always the best solution. I am amazed that a cloud provider like Amazon can still suffer from outages considering the size of their cloud infrastructure and supposedly being decoupled, obviously not decoupled enough. Perhaps it's my lack of understanding of cloud hosting, but when issues like this present themselves it obviously shows that cloud hosting has a long way to go.

<comment><USER18> We've distributed our machines between availability zones. We lost a machine with the latest outage. Application impact to our users? None.

No point bemoaning a lack of decoupling, if you don't actually use it.

<comment><USER19> It's not like Amazon haven't had multizone outages though.

</comment></comment></comment><comment><USER20> Is anyone else getting a message that "email@example.com has been unsubscribed from future notifications."? (Redacted just in case.)

There's a notification at the top of the page for me with that message, but it didn't appear in Chrome. Session collision maybe?

<comment><USER21> I also received that message.

</comment></comment><comment><USER22> Their current status is that they are investigating issues with their infrastructure provider: <https://status.heroku.com/>

</comment><comment><USER23> Very cool new status page look. Timeline style! kudos to Heroku's team. Too bad I'm such in a bad mood when I visit it.

</comment><comment><USER24> It seems that Heroku has been down for at least 4 hours in June. This makes the June uptime less than 99.5%.

<comment><USER25> between this (now 8 hour!?!?) stretch and the 2 hour outage last week, June uptime is down in the mid 98's

<comment><USER26> There was ~12.5 hours of downtime in june. That means their uptime for june is now 96.5%. No wonder why they have decided to show May uptime instead.

</comment></comment></comment><comment><USER27> Yup. Serving up error messages for me. Let's hope things are resolved a bit quicker than last time.

</comment><comment><USER28> <http://hootsuite.com> is offline as well.

</comment><comment><USER29> I've only been using Heroku as we're working with a client who's managing it themselves for the last month or so. I'm surprised at how much downtime there's been. Is this typical or is it just an unlucky spot?

</comment><comment><USER16> This is why <http://AppFog.com/> is investing in multiple IaaS and is not being hit nearly as hard. You can still sign up and even create apps.

</comment><comment><USER30> Looks like they are back. Now the fun part starts for the rest of us. Time to make sure that everything started and that the apps are running.

</comment><comment><USER22> My apps are down, and so is the heroku.com homepage.

</comment><comment><USER31> Yes it is. Again. Damn it.

</comment><comment><USER32> Heroku is back up.</comment>


Show HN: Musi for iOS Lets You Stream Audio From Youtube - <AUTHOR>

Hey HN!
Just thought I'd let you all know about my application that's been months in the making and was just released on the iOS platform called "Musi".
Musi is an iOS application that allows you to stream audio content directly from the popular video sharing site, YouTube. With Musi, you can stream your music even when your device is locked or closed. Managing your music is also simple with infinite playlists and simple reorder and delete controls.
Here's a link to download it: https://itunes.apple.com/us/app/musi/id584593128
Here's our website: http://feelthemusi.com <comment><USER2> The website has a pre-5 image. The app name is not search friendly (but then nor is the app store), found it with musi roklor.

Re-searches too soon, I had to type quick to not see it flash something for a split second. No indication if the video is HD, or if I'm streaming the whole video and just getting audio.

Feature requests: Youtube personal playlists, hd icon, make it obvious what is being streamed. Possibly an option to stream hd on wifi and lower on 3G. Certainly an option to only use wifi.

Something that probably requires investigation: Does pause mean stop streaming, or continue streaming the rest of the song?

<comment><AUTHOR> Hey! Thanks for the feedback :)

> The website has a pre-5 image

Will fix :)

> The app name is not search friendly

Anyone have any idea how to fix this one? It baffles me that it's impossible to find it by searching its name. Never had this issue before with other apps, but then again, those were all released before iOS6 and the new search rankings.

> Re-searches too soon

Will fix.

> Video quality

Always picks the lowest quality video for streaming speed.

> Feature requests

I hope to add support for YouTube playlist integration as well as at least a warning when one goes to 3G.

> Pause/stop

Pause will buffer the song that's currently playing. Long pressing on the pause button lets you stop a song fully.

</comment></comment><comment><AUTHOR> Clickable:

Here's a link to download it: <https://itunes.apple.com/us/app/musi/id584593128>

Here's our website: <http://feelthemusi.com></comment>


Google cuts off free apps in same week Bermuda tax dodging scheme exposed - <AUTHOR> http://limegreenscream.com

<comment><USER2> Tax avoidance is not tax evasion. One has no legal or moral obligation to pay more than the minimum tax that is due. Google spent probably 10mm putting this tax strategy in place. Among the necessary steps they would have taken would be to get private tax rulings from the various tax jurisdictions stating that their plan was legal and conformed to the tax code.

Google is not the only company to employ this strategy. Nearly every large American company does it also.</comment>


Google Wifi and OnHub Devices Experiencing Issues - <AUTHOR> https://productforums.google.com/forum/#!topic/googlewifi/38Q-v9lBDRg <comment><USER2> "Experiencing Issues" is way understating this.

I had two OnHub devices (different models) do this during business hours at two different places that ran on WiFi today.

The first I took as a complete fluke, but the second made me realize _this was a Google issue_.

They say it wasn't related to a software update, so what the hell resets a device into setup mode?

Power cycling did nothing, I had to re-configure the devices from scratch: switch to its setup network, use the Google WiFi (renamed from OnHub) app to set network name password, reset to bridge mode etc.

<comment><USER3> Latent issues can get exposed when something in the environment changes. Probably an interaction with some other piece of software that changed what it was doing.

Looks like the factory reset process is a little flakey but works to fix this, which seems typical for dealing with routers.

</comment></comment><comment><USER4> It's pretty remarkable that a remote process could brick everyone's wifi. (Wired ethernet works fine.) Just a very bad thing to allow.

<comment><USER5> Not technically bricked bit needed hard reset. It is pretty interesting that what seems like a false positive integrity signal on your Google account appears related.

I am sure some will hate this but the elephant in the room is embedded devices including network device are incredibly insecure and do not get updates.

Google appears to be taking security and home networking to a new level. But most "techies" know far easier to do insecure then secure. Nobody complains when internet works even if insecure. Seems like a bump in the road for Google in pressing forward with this.

Some will think crazy for a Corp to be basically running my home network but for me I have better things to play with so go at it. But last night glitch needs to be a one time thing.

</comment></comment><comment><USER6> Weird things going on with Google today.</comment>


New evidence of Android apps running on BlackBerry phones emerges - <AUTHOR> http://www.bgr.com/2011/02/24/new-evidence-of-android-apps-running-on-blackberry-phones-emerges/ <comment><USER3> That would be very clever of RIM and they have enough Java roots to feel right at home with Android. How well it integrates with the system is another story though.

If Android becomes a mobile app standard that J2ME could only dream of - <USER2> would be a really good achievement.

<comment><USER4> You know, I was just thinking that I'm colored very unimpressed by this and that it reeked of a desperation move, and then your comment completely flipped me around.

Great perspective!

</comment></comment><comment><USER5> If this is true, then the Android app structure is potentially becoming a defacto standard. Not sure if I believe it, but it would be cool.

</comment><comment><USER6> If this means what I think it means, I'll be more than happy to buy a new Blackberry!

</comment><comment><USER7> If this is true then what value add does RIM bring to the tablet world? Why not just get a pure Android tablet instead?

If I was going to buy a tablet because it could run Android apps then I'd much rather buy an Android device directly and avoid any potential and inevitable compatibility issues.

<comment><USER8> If people see you're using a BlackBerry then they'll think you're in the upper class. It's like wearing a good suit.

<comment><USER9> Either that, or you're still in school. (Not kidding, BB is very popular with teens, at least here in the Netherlands.)</comment></comment></comment>


DeviantArt Muro: An Awesome New HTML5 Drawing App - <AUTHOR> http://badassjs.com/post/937292518/deviantart-muro-an-awesome-new-html5-drawing-app

<comment><USER2> Curious: How easy is it to draw in iPad compared to a tablet? (leaving the pressure sensitivity aside that is)

</comment><comment><USER3> "Login to buy brushes." Clever. I wonder how well this is going to work.</comment>


Ask HN: What kind of legal precautions I should take when doing freelance work? - <AUTHOR>

I am working on a freelance project for a client and it is my first time doing it in a professional setting. I want to invoice the client via my registered corp.
I was thinking if anyone can share any best practices for putting together contract, invoices, and any other legalese. Should I have a contract signed before beginning the work? I put together a list of milestones and had the client signed off on them via email. But should I put them in a contract of some sort?
This client and I agreed that half of the payment will be delivered after a certain number of milestones are met. And the other half of payment will be delivered after project completion. Should this be part of the contract?
Would appreciate if anyone can share some thoughts from their experience and perhaps any templates you have used before! My email is in my profile. Thanks! <comment><USER2> yes the milestones should definitely be part of the contract. It's usually spelled out in an attachment to the contract, but an attorney once explained to me that the entire contract includes all those exhibits.

If it's a big contract I recommend getting more than two paychecks. If it's small then that's OK. Consider what would happen to you if it took three extra months to satisfy that first deliverable; you might wind up on the street. But with more and smaller milestones, you at least have some money, even if you still underbid by three months.

Most of my experience has mostly been that a verbal agreement is completely cool, but I did get screwed a couple of times as a result. Note that a verbal agreement is still a contract, you could sue your client for failing to abide by it. The real problem with verbal agreements comes when you and your client don't agree as to what you verbal agreement actually was.

Don't ever sign a contract someone has just put in front of you. There are all manner of little ways you can get screwed. If someone just hands you a contract with the expectation that you're going to sign it on the spot, tell them that you're going to run it by your attorney - even if you don't really intend to - and that you'll make the decision later whether to sign it, or to offer an alternative.

If you disagree with specific portions of a contract, draw a rectangle around them, cross them out with a big "X" then initial next to the portion that you just crossed out. If you want to exhibit real bravado, if you are then satisfied, sign the contract then ask your client to sign as well.

Quite commonly they will sign without noticing what you just struck out.</comment>


BMW invests in technology to pull gasoline out of the air - <AUTHOR> https://newatlas.com/environment/bmw-prometheus-fuels-investment/ <comment><AUTHOR> The Prometheus home page does little to reduce the carbon footprint. My laptop fans are about to take off.</comment>


Who Feels Satisfied About Money? - <AUTHOR> https://www.theatlantic.com/family/archive/2019/07/who-feels-rich/594439/ <comment><USER2> I've spent way too much time thinking about how to sate desire and I've come to the conclusion that you simply cannot satisfy most desires by feeding them. You can see this food, money, sex, drugs, travel, etc... the more you feed a desire the stronger it gets. You may satisfy it temporally but eventually it comes back. Eventually you have to learn how to temper and control your passions otherwise they'll eventually come to control you. And happiness comes from being in control not by being controlled.

<comment><USER3> The buddha came to more or less the same conclusion. And he had to sit in a cave for 7 years to do it!</comment></comment>