HTC's Android dream in tatters as HTC One sales disappoint - <AUTHOR> http://wmpoweruser.com/htcs-android-dream-in-tatters-as-htc-one-sales-disappoint/ <comment><USER2> I've had four phones manufactured by HTC: Google dev phone, G1, Nexus One, and a Sensation 4G.

The first three were wonderful phones. Absolutely loved them. The Sensation just frustrates me. Sense makes no sense to me; it's obviously inferior to stock Android, and leads to inconsistencies and long waits before OS updates. T-Mobile has packed it full of their shovelware, which cannot be uninstalled, and was not present on the prior three phones (I guess Google provided the OS image on those).

The Sensation has _horrible_ battery life. If I use it heavily, it doesn't even last a whole work day. It also feels flimsier...I haven't had any issues with it, but I've also managed to avoid dropping it very often or very far, so it hasn't been tested.

I won't be buying another HTC device, and I won't be buying another device that has a custom Android image or is loaded with crapware. I had no idea the average Android experience was so poor; I thought all Android phones were as awesome as the Google-branded devices. I'm very frustrated that I paid $500 for a phone that is so disappointing (I paid full price, as I'll also never sign another two year contract), so I'm not too disappointed that HTC is taking a beating.

Maybe they'll stop wasting money on Sense, which is garbage, and instead focus on making phones as good as the G1 and Nexus One again. If they do, I might consider another HTC in a couple of years. If not, Samsung will get my next purchase (a friend's got a recent high end Motorola that's even worse than my HTC).

<comment><USER3> BTW The G2 was also an HTC phone, but without sense and only a tiny amount of carrierware. It too is a good HTC device.

My followup phone has been the GSM Galaxy Nexus which is pure Google, especially in the sense that updates come from Google and not Samsung or my carrier.

</comment></comment><comment><USER4> I think HTC is failing more because they've failed to understand what consumers want. The HTC One X was an incredible phone but they went with a non-removable battery that significantly held it back compared to the Galaxy S3. The locked bootloader on the ATT One X was just too bad. And for all their touting of the camera, the Galaxy S3 has the better one. The silly decision to implement aggressive process killing was just stupid. And for some people, no sdcard option didn't cut it.

And no these aren't just features geeks would want, even if they are, geeks influence buying decisions of a lot of people. So they're definitely important. Especially at a time when HTC wants to build up a strong brand with their One series. And for all their trumpeting that they would release only flagship devices, they keep releasing phones all the time. And they fail to release their devices with a consistent branding across all american carriers, or at the same time.

HTC Sense adds no features (like e.g. a notification power control widget like samsung's touchwiz has.) It's just too bloated.

Plus it's just be the fact that the mobile industry is incredibly competitive right now. I don't imagine HTC will have any better luck with WP7/8.

<comment><USER5> "And no these aren't just features geeks would want"

Yes they are. By and large no one cares about removable battery, locked bootloader, non-aggressive process killing or SD card option. You know how we know this? Because the iphone doesn't have any of that. The things these phones have that the iphone doesn't that non-Geek consumers care about are LTE, the big beautiful screen and perhaps the price.

The reasons the One isn't selling like the Galaxy S3 are pretty clear:

(1) bigger screen

(2) better battery

(3) walk into a Verizon store and see which phone get's shoved into your face.

<comment><USER4> The apple comparison can't really be made on the android side because the apple brand is a very strong one. iPhones can sell based on brand alone whereas HTC can't really rely on that.

I think for the first in a series like the HTC One to really take off, it has to appeal to the early adopters and those are the geeks surely. And then if they like it, they'll recommend it to their friends. If you build up some diehard fans, surely it will be better to iterate ensuring the relative success of a HTC One X successor.

<comment><USER5> I think the whole notion of customers weighing specs carefully and choosing one high end Android phone over the other is overblown. If the salesman really wants to sell you the EVO you'll probably end up with the EVO.

Of course some people do come in with their heart set on something they or a friend had so I'm sure the brand thing you're talking about is real. I don't think it's the reason for the magnitude of what's being claimed for it here. Intending to buy a Samsung phone only works if the store is selling Samsung phones and we saw a nice version of this math play out while the iphone was only on AT&T and at 17% US market share. It's a tribute to Samsung's marketing staff that pretty much every store has a bunch of Samsung phones at all price points in it.

In another post here I demonstrate even if demand were even for the two of them the absence of the HTC One at Verizon would result in a huge sales disparity.

There's an oft cited idea that I don't entirely agree with but seems useful here: the real customers for Android phones are the carriers.

</comment></comment></comment></comment><comment><USER6> Too bad, my One X is a great phone. Best camera I've had in a phone by a _wide_ margine, and has permanent nav buttons so it doesn't need to waste screen space on that. Also better battery life than the Galaxy Nexus I tried first.

<comment><USER7> The nav buttons are not a good thing, as evidenced by the menu button mess they've now gotten themselves into. Soft buttons don't waste space. They go away when you do things like watch a movie.

The One X is a great phone. But it's got that Sense garbage on it and the hardware buttons. Plus its tendency to close every app that's not in the foreground.

</comment></comment><comment><USER8> Almost every review I've read has made the case that the One X is superior to the Galaxy SIII, yet the Galaxy is outselling the One X by quite a huge margin.

I am unable to remember ever seeing a single One X commercial, but know I've seen quite a number of Galaxy SIII ones.

<comment><USER9> humans disproportionately weight the possibility of negative experiences over positive experiences. If people have no bad experience with one product they will purchase its sequels over the unknown. No one is going to shoulder the psychological costs of switching unless the expected benefit is really big.

This is why branding is so important, and why samsung is smart in their naming scheme. HTC will reap similar benefits by continuing to put out slightly better phones under the same moniker for several iterations, but it will take time for those benefits to accrue. (they should probably call the successors the HTC Two line or something similarly easy to understand).

<comment><USER10> This is so not true when comes to the biggest AAA video-games, and fan-boys never happy with them :) - like boycotting them months before the game is released, even making their avatar with a picture of the Boycott, and then later seeing them buying it with the avatar unchanged...

Or maybe even movies - well it might work - for Friday bad movie night :)

<comment><USER9> are you applying artistic taste standards rather than box office standards?

<comment><USER10> have you ever heard of a AAA indie movie?

</comment></comment></comment></comment></comment><comment><USER11> The One X is a very well designed phone. Distinct, yet familiar and instantly recognizable as a HTC phone.

Personally I wish they'd went with soft buttons rather than hardware ones, but even the hardware buttons look good compared with ones present on other phones.

Maybe Google will throw them a bone and hit them up for the Nexus One X...

<comment><USER7> I would sell a kidney to get my hands on a Nexus One X.

</comment></comment><comment><USER12> I've had the HTC Incredible for two years. Up until a few months ago I would have said it was a great phone with no problems. Then HTC pushed out a new release that broke it, such that it reboots itself randomly between 2:00AM and 6:00AM (some nights just once, other nights many times), and they still haven't pushed out a fix. And of course every time it boots you hear "Droooooooooiid".

I have to turn my phone off when I go to bed now, which is lame.

<comment><USER13> I think it's time you jailbreak that thing and install cyanogenmod on it.

I've done so on mine and it's solid, fast, no sense, and no annoying boot sequence.

</comment></comment><comment><USER14> I have a desire HD and I have to say Sense UI is poorly programmed garbage. I would really much rather have stock android UI. Maybe slapping an inferior memory eating solution to a non-problem on top of android is their problem? They could save money on dev and have a better product by getting rid of it.

<comment><USER15> I have a Desire HD and a week ago they announced they will not be releasing an ICS update for it, citing a lack of flash storage. It took them about a year to find that out, about the same amount of time that ICS has been running on my device through a custom firmware, and just a few days ago, I installed a jelly bean image.

It mostly works fine, but the biggest problem with custom firmware is the bad/unstable hardware support. You need the propietary driver blobs, and only HTC has the means to get them.

Personally, I hope they go bankrupt. I would never buy another HTC product, from the complete lack of software support for what is supposed to be a smartphone, the defective included SD card to the completely closed down bootloader and inane protection measures. It has been a complete disaster.

</comment></comment><comment><USER16> I _really_ hope there is an HTC nexus phone in the pipeline. It seems to me that their Sense skin is what strays people away from their phones. Their hardware, on the other hand, is incredibly beautiful and well built.

Another Nexus One might be exactly what they need.

<comment><USER17> Yes, for the love of god yes

If HTC (or someone) would make a line of phones that offered vanilla Android, OTA updates within 30 days of google releasing them, and a two year update guarantee, I think they'd find themselves selling a a lot of phones. Compete on hardware and service and sell skins as a premium upgrade if you really want to be in that market

Building a UI just to have a brand is just fail

</comment></comment><comment><USER5> The Verizon Factor:

Assume that if a user walks into a store he has an equally likely chance of buying the HTC One and Galaxy S3 if both are present. If neither is present give half the missing sales to the other.

Assume Verizon, ATT, Sprint and T-Mobile have 40%, 34%, 14% and 10% of the US market respectively.

Observe that HTC One is not available at Verizon.

Now in our admittedly simplified marketplace we find the HTC phone is outsold by a 2 to 1 margin.

</comment><comment><USER7> If they would just put AOSP Jelly Bean on a phone like the One X, it would probably fly out the door. Instead they put all this effort into hardware, then make it all worthless with horrible software. But you have to "differentiate your brand!" I like Samsung just because their shitty Android modifications are less intrusive and heavy handed than HTC's even shittier modifications.

<comment><USER18> I strongly disagree. I actually owned an HTC One X briefly. The sense UI was perfectly fine, and I don't think the average consumer would care one whit about the AOSP interface differences.

The things that ultimately made me return it were:

      * camera inferior to Galaxy SIII
      * bluetooth caused my car's bluetooth module to crash
        and reset constantly rendering hands-free mode useless

Now with that said, I haven't tested the Galaxy SIII's bluetooth yet. It could have the same issue, but the two above were enough to make me return it. For now, I'm just waiting until my old phone dies before I bother getting another Android phone.

</comment></comment><comment><USER19> HTC is dead in the water. They don't control any part of the supply chain (like samsung) and don't have an ecosystem to monetize (like amazon, apple). HTC is not going to survive another two years in a market where these devices are becoming more and more commoditized.

<comment><USER20> They just closed the NC office, too. Rather abruptly to my surprise friend employed there.

</comment></comment><comment><USER21> HTC is nice, but my last phone HTC Desire S has some bugs that will make not buy from this brand again: the GPS takes 10min to get a signal, I have random reboots from time to time , and sometimes it gets frozen when updating software through the google store.

</comment><comment><USER22> Blog spam? Original story: <http://www.digitimes.com/news/a20120803VL204.html>

</comment><comment><USER23> This is really too bad. By far, HTC produces some of the nicest Android and WP7 hardware out there.

</comment><comment><USER24> MARKETING

</comment><comment><USER25> wonder if this will lead to more focus on WP?

i mean, Android just looks like an incredibly crowded market and it seems even if you put out a great device (One X) it's hard to compete.

in this context i think, despite all the criticisms, Nokia was probably better-off going with WP, despite all the challenges

</comment><comment><USER26> HTC was one of the first to manufacture smartphones. Their old windows phones were nice but the new HTC surround and a couple other android phones too don't really stand out.</comment>


Web design is now completely boring - <AUTHOR> http://thenextweb.com/opinion/2015/09/23/zzzzzz/ <comment><USER2> That's exactly what happened to the UI when Windows 95 came out. The guidelines and frameworks made all Windows apps look similar, and for nearly 20 years this stays the same, just improving here and there but in line with the rules.

This is great for 'normal' people when they try to use everyday apps. I've never heard anyone to complain that desktop apps are boring. If they work - everyone's happy.

What the article is describing is the birth of the everyday web, where people go to do stuff. I still struggle on many websites and I'd like more standartization, not less!

Make every mail app be alike, with some unimportant differences, please.</comment>


Hugo Deployment via Codeship - <AUTHOR> http://jice.lavocat.name/blog/2015/hugo-deployment-via-codeship/

<comment><AUTHOR> Hugo is static website generator built with Go. Codeship is a continuous delivery platform. I wrote a tutorial on how to deploy your hugo websites with Codeship, to have a "lean blog" ;-)</comment>


Ask HN: Can you recommend a savvy patent attorney? - <AUTHOR> I'm on the hunt for a patent attorney who a) doesn't charge $850/hr, b) is tech savvy, c) is at home in google docs or even(!) git for pre-formatting changes. (I've just gone through a pretty painful experience which mostly consisted of lots of .docs being emailed back and forth, which was more than frustrating, and which seemed overall to have a deleterious effect on the quality of the end document.) <comment><USER2> Greetings, I'm Kenneth Stein, a registered patent attorney located on the California Central Coast. I specialize in electrical, photonic, computer, and medical related inventions. Feel free to email me at email@example.com. Provide your name, phone number, and a time you are available to discuss. I will call you.

Regards,

Ken</comment>


The traits of a proficient programmer - <AUTHOR> https://www.oreilly.com/ideas/the-traits-of-a-proficient-programmer <comment><USER2> Probably the most important bit of the entire article, which you can probably get from many self help career books (applies to all, not just programmers): "Ask others to explain why they do things, but don't just accept dogmatic reasoning. Demand examples and inquire about context, so that you can try to imagine what it is like to be in their shoes. Doing this is tremendously valuable because it allows you to see the strengths and weaknesses of ideas in their natural habitats."

One thing I can add is always question. There's a reason kids ask tons of questions, they want to know. Asking questions not only increases your own knowledge, and that of the person answering, but it also creates a culture where complacency is extinct. The one thing I hate more than people that litter are people that say "oh, well, that's the way I've always done it." There's lots more I dislike above that, but...complacency is the death of innovation. Then again, sometimes things just work....but that shouldn't stop you from trying to improve it.

<comment><USER3> Sure. Sometimes. Othertimes, you have to recognize that you aren't an expert, and that the real "why" is beyond your reach. If you're in this situation, you're probably better going with the herd.

I run across this sometimes with my boss. He asks why we do X, can't we do Y? I respond: X is common and a well vetted practice, I don't know the security implications of Y. Then he says: lets use Y unless you can think of a concrete reason not to.

In the meantime, I'm not really qualified to analyze Y in the way X has been analyzed. I would rather stick with X, even if my reason is dogmatic.

<comment><USER4> > _Othertimes, you have to recognize that you aren 't an expert, and that the > real "why" is beyond your reach. If you're in this situation, you're > probably better going with the herd._

Yep. And as a society we are _great_ at this, which makes it almost impossible to improve any part of our culture basic enough to be taken for granted.

That's how we end up with a base ten number system, a weird irregular calendar, really silly spelling rules, suboptimal mathematical abstractions, inflexible shoes, office furniture and computer input devices which cause serious injuries, roughly the same computer architecture since the 60s, or the marvelous absurdity that is the modern web software stack, not to mention bloody centuries-old feuds between neighboring tribes.

Also the main reason advertising and propaganda work so well. "Everyone else does it, so you should too" is an incredibly effective way to shortcut reasoning.

<comment><USER5> I think you're conflating cargo culting with pragmatism though. The generalized reason that everything is messy is because it's too much work to gather all the knowledge and consider all the angles and do a big reset, and even when you do, you run into unforeseen issues that may end up being just as bad (see Gall's Law).

Consider a pet peeve of mine: The Turkish Problem. Specifically, when Turkish was latinized almost a century ago, they had the brilliant idea to use lowercase i and capital I as separate letters, and then introduce their counterparts İ and ı as new letters. This now means you can't upcase or downcase the letter i/I unless you know the language. Note that it took 11 years for Firefox to handle this correctly ([https://bugzilla.mozilla.org/show_bug.cgi?id=231162](https://bugzilla.mozilla.org/show_bug.cgi?id=231162)), and even then you have fractal complexity if you're dealing with an internationalized site. I had the pleasure of working on a film site that was localized to Turkish, where I realized that it is not enough to know the language of the document, you must indeed know the language of every string in the site. In the case of film titles for instance, many films in Turkey are known by their English title, and in that case you must use normal capitalization rules, so now every film title has to have the original language flagged. This is not a small issue because if you are a Turkish speaker it _just looks wrong_ if you don't get it right.

Why do I go into this digression? Because from a programmers perspective, this is insane. In retrospect it would have been infinitely better just to invent a new letter or use an accent or something that fit the alphabetical semantics of other latin languages. But they didn't. This decision went into effect in 1929 when the concept of character encodings was something only maybe a handful of engineers and mathematicians had even considered, and the concept of Unicode would have been beyond science fiction; it probably seemed a perfectly reasonable hack at the time. If we were to reverse it now in order to ease technical concerns think about all the fallout with all the existing documents and printed materials. It's just too big a price to pay. The world is full of these things, there's just not a big enough ROI to justify overhauling these old systems.

That's very different from the more actionable problem of people who go through the motions without ever questioning how they do things.

</comment></comment></comment></comment><comment><USER6> A competent programmer knows that tomatoes are fruits. A proficient programmer doesn't put tomatoes in a fruit salad. :)

<comment><USER7> I like this. It can be applied in a much broader range of professions than just programming, but it's a nice, memorable analogy.

<comment><USER8> I'm missing an option for the guy who could not care less whether or not a tomato is a fruit or not, because he knows it does not matter at all for his purposes. IMHO the _real_ expert knows what knowledge is relevant and what knowledge is for forum discussions that are just used to kill time.

<comment><USER9> How does it not? When making a fruit salad, the knowledge that tomatoes don't go in fruit salad seems pretty relevant.

<comment><USER8> If you don't have any arguments you downvote, you stupid troll?

You don't have to know that tomatoes are fruit for that? Your reply makes no sense at all. I say "you don't need to know H" and your reply is "but you do need to know Y"! Not to mention that specifically your reply is something only worth knowing when when does know that tomatoes are fruit, and not when one doesn't.

</comment></comment></comment></comment></comment><comment><USER10> I'm maybe too cynical but I always think the main motivation of such articles is to pretend the author is a very good programmer with the implicit assumption that "if you have an opinion about what make a good programmer, you necessarily should be a very good programmer".

<comment><USER11> My criticism of the article would be that there isn't really anything to disagree with. Most STEM people already understand that analytical ability is more important than knowledge; and the people struggling with this are unlikely to gain that understanding from an article.

From that perspective, I think you might be right. The article won't accomplish much except make the writer look good. But you're also right that this is cynical. If we're optimistic, this article could serve to give people already possessing some analytical ability a friendly nudge to learn and dissect a new concept.

<comment><USER12> Most STEM people should know, that analytical ability relies a lot on knowledge. You cannot analyse how something is made up unless you are able to recognise parts, their relationships and dependences. You need those chunks, patterns in your brain only then you can see them elsewhere and understand the working of the whole.

</comment></comment></comment><comment><USER13> This is where the use of "Older" IT people would help. Take all the new ideas and innervation and filter it through the 60 year old IT guy (Knowledge experts).

Explain your ideas well with examples. Lesson how that problem has been solved before. Don't build new ideas on old code. Find shortcuts to the results.

Don't be naive. Ignorant is better.

Naive is not knowing your don't know.

Ignorant is knowing your don't know.

<comment><USER14> I've worked with some older folks with a ton of experience (think: programmed in the 80s or earlier) before, and I have huge respect for those folks who can see a disaster coming miles away, or have been around the block enough times to have formed solid opinions on many subjects.

\---

Although, while more often than not true (perhaps partly due to survivor bias), I do think that it's not a given that old programmers are wonderful. Some older folks do seem very set in their ways and unwilling to experiment in a way newer programmers aren't.

The natural example is that you hear a lot of "ah it's like <blah> all over again" where blah is something like winforms or activeX or CORBA or lisp or OSGI or what have you, but it's frustrating to come into everything with that baggage.

Yes it might be the same idea, but it might be executed quite a bit better! Perhaps much wider platform support, perhaps lower total cost of ownership, perhaps increased viability under current conditions, perhaps much larger community of people and tools!

The cycle turns much quicker than it used to, and using older, more mature but inferior technology sometimes does have a big effect on the bottom line or provides a disadvantage over competitors in a way that I don't think it did as much earlier on. Granted, this isn't always the case and knowing when it is also matters.

I think "strong opinions loosely held" is a great motto, and a lot of these folks follow that motto to wonderful effect.

\---

It is also entirely possible do essentially the same project over and over in a multi-decade long career, and learn nothing material from it all, and I've seen that happen too.

\---

In conclusion, I think older programmers can be a great asset to your team, and are often overlooked for no good reason. But they're also people like everyone else.

<comment><USER15> An historical perspective, which older programmers at their best bring to a project, is important in my view. When you look at the history of software systems you see that the better technology rarely wins in the marketplace. A lot of things contribute to the success of one system over another--technical excellence is not one of them.

Also, the significance of fad and novelty cannot be underestimated. When I see yet another new language or framework that is only trivially different from the existing ones, yet touted as the next big thing I can only grumpily roll my eyes.

<comment><USER13> We all have hopes that new things like languages will make things better or easier. Mostly it does. Today's hardware beats the 4004 CPU I started with.

Technology will move forward but building tech on back tech is a bad idea.

</comment></comment></comment></comment><comment><USER16> I used a simpler analogy in a c++ class I used to teach.

Some people might argue that setting a variable to 0 or something is pointless if you now your about to use it. But while technically it could add overhead. The chance of bugs forming from a future refactor is decreased. And those who track down sporadic uninitialized value bugs should know why it's almost always better to just initialize values. And not implicitly always trust the compiler will catch complain and or a future less knowledged developer won't accidentally do something silly.

Many habits in programming are formed from habits and we're told to not do thibgs(1 entry and 1 exit. No goto. Etc..) but few can back it up with why and when it might be a worthy edge case

<comment><USER17> I dislike that for another reason: It prevents the compiler from telling you that you're using an undefined value. Just setting vars to 0 doesn't mean that that's the right value.

<comment><USER18> There's a worse problem, which I've seen in the wild:

        int some_function(...);

        int some_other_function(...)
        {
           int r = -1;
           /* imagine a bunch of other locals defined here */

           r = some_function(...);
           if (-1 == r)
           {
               return -1;
           }

           ...
        }

Now imagine someone changes the return type of some_function():

        char *some_function(...);

        int some_other_function(...)
        {
           int r = -1;
           /* imagine a bunch of other locals defined here */
           char *s;

           s = some_function(...);
           if (-1 == r)
           {
               return -1;
           }

           ...
        }

Oops! Every other reference to r has been removed except the declaration and the test. Now some_other_function() will always take the early exit, and because r is initialized in its definition the compiler does not complain. (In real life, hilarity ensued.) If it was 'int r;' with no initializer this would have been caught by the compiler.

Modern gcc is great at finding uninitialized and unused variables. -Wall -Wextra -Werror FTW.

EDIT: referred to some_function() where it should have been some_other_function().

<comment><USER19> I'm pretty sure static analysis like Clang would warn you about such a thing too... So maybe proficient programmers just need to keep their linters and tools up to date! ;-)

</comment></comment></comment></comment><comment><USER20> Here's the supporting "A Five-Stage Model of the Mental Activities Involved in Directed Skill Acquisition" reference link for anyone interested.

[http://www.dtic.mil/get-tr-doc/pdf?AD=ADA084551](http://www.dtic.mil/get-tr- doc/pdf?AD=ADA084551)

</comment><comment><USER21> Despite the reception this article seems to be getting here I find it speaks to me pretty directly and summarizes some observations I've been making lately.

I consider myself an intermediate developer (at just under 3 years out of school at my first job) and I feel like for the first year or two I increased my competence rapidly (and with it, salary thankfully) but I'm at a point where without branching out into other areas it will be more difficult to continue acquiring pure competence or I will do so at a flat or decreasing rate because of the increasing complexity of concepts left to improve upon (within my day-to-day work, not including side projects and academic pursuits).

On top of that I work with a small team of other developers who are all highly competent but only some of whom fit the description of proficient developers in the article. I think the article describes really well the differences between the two types, and I have tried to nail down what the proficient developers do and how I can acquire the same skills and instincts they have.

The main things I have noticed are a) as the article discussed, always being able to debate the pros and cons of an approach beyond just best practices and without regurgitating things that renowned developers have espoused and b) being able to be able to drill into problems in the code-base or our process even if its due to technical debt that other competent developers are willing to work around, but more importantly knowing when it is appropriate to down a rabbit hole and when it isn't.

I'm lucky to be able to see the distinction in action and overall I think the article helps to describe a distinction that I haven't been able to verbalize.

</comment><comment><USER22> > But the place where the intermediate programmer tends to get stuck ... is > thinking that the difference between a beginner and an expert can be > measured in how much stuff you know.

> And at its essence, proficiency is about "why you do things a certain > way"—It's the difference between understanding each of the parts of a > problem individually, and understanding how the parts fit into the whole.

So I guess it _is_ about stuff you know.

The article then goes into further specifics about how you have to know when to apply what you know.

<comment><USER23> I'm sure everyone has worked with someone who has memorized a lot, but doesn't know how to do much. Their productivity is limited.

There are also people with innate "know how", who can get things done without much background knowledge. They just know how things work.

My $0.02 is that experts have both of the above skills. They know a lot more than average people, and have better techniques for doing things.

My experience has been that once you reach a certain level of expertise, it's better to "know how", than to know things. For the software I've written, I just forget about the minor details, and have to look them up again. The details aren't important, and just aren't worth remembering.

In contrast, remembering the problems and solutions is much more important. The solutions can be applied to multiple problems in a way that simple "memorization of facts" cannot.

<comment> Digit-Al Yeah. I used to work with a guy who mainly knew databases, but also had to do some C# as part of his job. He did loads of MS certifications, just to have them on his CV, but was clueless and usually had to ask me how to do anything more than the most simple programming tasks.

</comment></comment></comment><comment><USER24> As a programmer I always write code considering if a new guy wants to take over my code, he should be able to understand it and use my code with as little complication as possible. Things should be simple enough that when a new guy takes over your code he can be onboarded soon and doesn't have to ask someone to explain him the magic pattern or secret sauce to under teams code.

<comment><USER25> I am some what the opposite. The person that comes after me should be able to read and understand what I wrote without line by line documentation. If they can't, they are not fit for the position. Although, if there is a quirk within the code where something needs to be explained, it will have documentation.

<comment><USER26> I think you're agreeing with each other. Parent never specifically mentioned writing documentation. I took their post to mean that the code should be easy to understand.

<comment><USER25> You are right, I jumped the gun and read the opposite. Cheers. Sorry Parent.

</comment></comment></comment></comment><comment><USER27> What the article describes as "competence" sounds like total incompetence to me.

If you learn a pattern from a book or a class or a blog post, and then you apply it in a project just because "the book said so" you are not a competent programmer.

This might be an artifact of English not being my first language, but I would reverse the definitions.

Proficiency means knowing how to use something.

Competence is knowing how to do something properly, which implies having a deep _understanding_ about what is going on.

That seems to be how people use these terms anyway (regardless of the dictionary definition).

Proficient in jQuery: knows the ins and outs of most jQuery functions and plugins.

Competent in jQuery: non-sensical statement.

Proficient in git: knows most useful commands and arguments.

Competent in git: almost a non-sensical statement.

On the other hand:

Competent front end developer: understands how to develop a web based application UI from scratch without being tied to a specific product domain.

At least that's how I understand these terms.

<comment><USER28> I agree that better terminology would be something like competent and master.

<comment><USER29> This is roughly the full Dreyfus model:

(1) Novice... does not understand anything but basic knowledge in the abstract sense

(2) Competent... knows how to apply knowledge to solve concrete problems

(3) Proficient... sees how particular solutions fit into the context of different problems (i.e. what tools to use, when, and why)

(4) Expert... picks the right tool for the job without having to do careful analysis... works from intuition by pattern matching against fundamental concepts combined with past experiences.

(5) Master... picks the right tool for the job without even being consciously aware of the fact that they're "doing work" at all.

It's important to remember that all of these levels apply within specific contexts... you can be master one thing while being a novice at many other things.

But each step along the path is a gate of sorts: in that you can't really understand what it's like to be an expert in anything until you're an expert in at least one thing, and building expertise is easier when you have done it at least once.

But a big problem (which we're mentally hard wired to be biased about) is evaluating our own skills, as well as the scope of experience of others.

This is why someone with local expertise often thinks they can speak on topics outside of their actual expertise, and why people tend to believe them when they do.

"Thinking, Fast and Slow" by Daniel Kahneman is the best book I know on that topic. Totally worth reading.

</comment></comment></comment><comment><USER30> Some of these remind me of Ed Kmett's YOW talk: "Stop Treading Water: Learning to Learn"

[https://yow.eventer.com/yow-2014-1222/stop-treading-water- le...](https://yow.eventer.com/yow-2014-1222/stop-treading-water-learning-to- learn-by-edward-kmett-1750)

</comment><comment><USER31> > Patterns, principles, idioms, libraries, language features—these are all > tools. But a truly proficient programmer fits the tool to the job, not the > other way around.

This isn't a unique statement but many people forget it.

We all have our favorite tools and we criticize others that don't have complete parity. Picking a tool to use is often the hardest part considering there are so many nowadays. It's easy to rule out a hammer when you want to tighten a screw but in order to build a skyscraper you need to start with something.

</comment><comment><USER32> "so many people struggle with high level programming ideas, like design patterns"

That sounds more like the movement from "apprentice" to "journeyman." Is it really expected that professional, experienced programmers should struggle with the appropriate application of known techniques?

</comment><comment><USER33> As a budding programmer I like the ideas here, but I want to take it with a grain of salt and figure it's best to have a wide breadth of knowledge before going deep. Or rather, gain competence before striving for mastery.

</comment><comment><USER34> > Pick a small number of specific skills you're simply good but not great at.

I am struggling with this one since forever, what are the skills-set a programmer should enumerate through ? like how good they can connect to a DB provider ? or how quickly they can set up a web server ? what qualifies as a skill in this context ?

<comment><USER35> Ultimately, it doesn't matter. The point of the exercise isn't to get better at those specific skills, but to develop an understanding of high-end proficiency, which you can later apply to other subjects.

Like many (proper) learning sets, the content of the exercise is irrelevant compared to the deeper lesson.

<comment><USER34> Yes I can see the deeper meaning of the exercise, yet, it helps to know what we're talking about specifically.

I am not proficient yet, and I would like to be, and I don't think it's one of those (When it happens you'll know it) moments, I believe there is a clear set of skills we need to work through first in order to see the forest for the trees.

My question therefore is, what are those skills exactly ?

<comment><USER29> The web of foundational skills for software development is vast enough that you can't really build it out from the bottom up.

What you can do though, is start with small projects and try to understand every piece involved in them, and why you did things the way you did.

Repeat this with increasingly complicated projects, testing and synthesizing what you learned.

<comment><USER34> So cross reference the common experiences from different small projects. That does make sense.

Have you done that ? Or are you doing it at the moment ? because some hints of those projects ideas will be awesome.

<comment><USER29> I am the author of the essay, so... yes!

The context I currently apply this in is that in the apprenticeship I'm running.

So for example, we work on business applications and some amount of complex analysis is needed because we work with raw problems (i.e. it's necessary to interview the users/customers directly, collect raw data, etc... collect and transform raw data from many sources before we can even start on a project, etc)

I would start by trying to give my apprentice small chunks of the work we were doing, at a task-based level. She would do fine when I could break it down into well-defined tasks, but not do as well if I just gave her some raw materials and said "OK, implement something that will solve <HIGH_LEVEL_GOAL>"

So we circled around that a lot, and realized part of the issue was the challenge of thinking rigorously and synthesizing lots of details. We dug into Gilded Rose kata together to practice that a bit...

( [https://github.com/NotMyself/GildedRose](https://github.com/NotMyself/GildedRose) )

Then after that, we went back to some more realistic work, talking things through... taking notes... etc. It helped for a little while, but then we were still hitting issues related to rigorous problem solving / analysis.

So then we went back and did some more exercises. This book chapter gives some examples of the sort of "fundamental lessons" that can be pulled from specific exercises, so long as you're looking at them with the goal of seeing the deeper ideas behind the work you're doing:

[http://tinyurl.com/pbp-rigor](http://tinyurl.com/pbp-rigor) (PDF)

This is the sort of stuff I've been working on lately, because I don't think there's a direct path towards getting the big picture if you don't have someone guiding you, aside from a ton of hard work and patience combined with continuous practice.

That said... keeping a journal does help. My apprentice has been working with me since the beginning of the year, and she writes notes _daily_ on what she does, what she studies, what she struggles with, etc. Periodically going back through those is how we figure out what to do in practice and study sessions, and I imagine even if working solo... you could try that.

Hope that helps!

</comment></comment></comment></comment></comment></comment><comment><USER36> This article is way too long and without a proper table of contents. I don't know what's important or not, so at a first glance I could not gauge opportunity costs.

And also lists are meant for small items, not paragraphs.

Readability is respect for the reader.

</comment><comment><USER37> It isn't often that you click on a link to the book referred to and it is the pdf, sweet!

</comment><comment><USER38> Nobody knows everything, so I must admit I don't see the point of the article. Maybe sometimes you get lucky and have the relevant knowledge for seeing the big picture. At other times you won't have that knowledge. Are you proficient?

</comment><comment><USER39> >> But a truly proficient programmer fits the tool to the job, not the other way around.

A truly proficient programmer finds the right tool for the job, learns best practices on how to use that tool; makes mistakes, learns and improves.

</comment><comment><USER40> Nice article, learned a new design pattern today. Wondering what are some practical use cases of memento design pattern ?

<comment><USER41> If you like design patterns checkout my articles [https://shirazian.wordpress.com/2016/04/11/design- patterns-i...](https://shirazian.wordpress.com/2016/04/11/design-patterns-in- swift/)

It's a compilation of design patterns implemented in Swift, solving a real world problem.

</comment></comment><comment><USER42> Seriously, I misread the title as "Traits of a(n) ancient programmer"

My first thought was "proficient"

<comment><USER42> and the correct answer to the original title is 'ancient.'

</comment></comment><comment><USER43> In short: if you have done it before, you are now an professional who can implement a very similar thing again. For everything else, you are not a professional. Thats how I understand the article.

</comment><comment><USER44> No mention of testing?

<comment><USER12> No mention of scrum, agile and pair programming either. Strange, huh? I'd say *DD is nice-to-have but orthogonal to being proficient. Or sometimes just counter-productive, if all it is is cargo-culting with zero understanding.

<comment><USER45> I think testing has inherent benefits regardless of understanding.

<comment><USER46> Are you talking about some specific testing methodology, or does "running your code and seeing if it works" count?

<comment><USER45> Seeing if it runs is probably the absolute minimum of any testing methodology, but my point is that (passing) tests are always good.</comment></comment></comment></comment></comment>


Ask HN: Switch to Java as Senior JavaScript Dev? - <AUTHOR> I'm a technical lead working on a large Node.js monolith that helps power a very profitable software platform.
I'm starting to feel that I really need to start learning the Java platform to grow my career. For one, Node.js jobs are not really popular in my area. The ratio of backend Node.js to Java jobs is probably 1 to 50. Two, it seems like to get a FAANG type job then Node.js probably won't cut it. Three, I make 130k+ in Raleigh, NC. Most Node.js roles can't leverage my experience running highly available services and subsequently can't or won't match this salary level. Most teams needing five 9s are not looking at JS first. Even at my company, JS is a 2nd class citizen. Most of the companies reaching out to me on LinkedIn looking for somebody my level are looking for serious Java chops.
I have a master's degree and have coded in a variety of other languages (TypeScript, Go, Python, etc) including some Java servlets in the past. I don't know frameworks like Spring or Hibernate, so I think I should be invest some serious time into learning these frameworks and more idiomatic Java since it's been almost a decade since I've touched Java.
Is this a case of the grass being greener, or does JavaScript just have a lower ceiling professionally than Java? <comment><USER2> In my personal experience I'd say there still is a widespread mindset in our industry that all "real" web development needs to be done in Java. I'd also say that whenever someone says that they usually mean "I'm most comfortable in Java so let's use that so I don't have to learn new things."

I've used both Java and Node professionally, and have in the past few years made recommendations for new projects to be started in both Java and Node depending on their unique requirements. I've even worked on projects migrating existing systems both from Java to Node, and Node to Java.

That said, I do strongly believe that Node is better suited as a language for web-scale projects that deal more with asynchronous requests (such as to DBs and APIs) than doing heavy data crunching themselves. If you need heavy data crunching, Java might be better for you, and there are a lot more available frameworks.

If you're looking for a job specific recommendation, it sounds like that might be partly regional. If you can't find Node jobs in your area, then maybe picking up Java is the right answer for you.

<comment><USER3> If you are looking for decent paying jobs then Java is probably one of best languages to choose. The JVM eco system is huge and tools are less to none. There are some comments mentioning web development, I would say that is not Java's strongest area. There are 10x(just a guess) more backend work API, integration etc done in Java today. From what I see there still lot of new Java work being done, while the share has come down recently it is still quite large.

At least in finance domain Java has a quite a large presence and it is growing

<comment><USER4> Do you sense the JVM ecosystem slowly adopting Kotlin language as a first class language, especially finance domain?

Also, which companies do you mean by finance domain

</comment></comment></comment><comment><USER5> Brushing up or learning new skills is generally a good idea. There's lots of money in Java. C#/.Net is in a similar position, and might be worth looking into, depending on where you want your career to go.

</comment><comment><USER6> I've been doing Java for almost a decade but JS for the last 3 years. I still get good work on Java but it went from about 80% of my work to 5%. It does sound like the grass is greener.

And my salary was never near as high as yours, even after purchasing power conversion. The only companies that pay that well here are, surprise, hiring Node.js developers.

<comment><USER7> In my experience, a lot of shops with Java in their tech stack usually get devs from Infosys or other consulting companies. So you are competing with super cheap labor.

<comment><USER6> Yeah, I live in one of those countries that consulting companies outsource to. PHP is quite cheap too, about 1/3 to 1/2 a Node.js salary.

</comment></comment></comment><comment><USER8> 'patio11 who is also a member of HN has written a blog post that IMHO is worth a read: [https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a- pr...](https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/)

It touches on this subject.

<comment><USER9> That doesn't seem to work in the real world when the job description is:

Engineer with 7+ years of exp with Java

</comment></comment><comment><USER10> NC has a lot of enterprises there which would lead me to assume their infrastructure was built out 10 years ago in Java which is why a lot of stuff in the enterprise space is still Java, enterprises continue to choose Java because there are millions of devs who know basic Java and basics about the Springboot/spring frameworks.

You don't really need to become a Java champion or study to pass the spring exams to get a great Java dev job at an enterprise, as your previous experience will translate,

I would recommend checking out springboot's official tutorials as they are very approachable, or don't, sounds like you'll be okay either way :)

</comment><comment><USER11> Are people doing anything complex or performant with Node? Isn't it just good for non-block ops, like a proxy or something?

Usually the more complex systems that use Java are going to hire more experienced/better devs. So higher pay.

<comment><USER2> I wrote a quick Node Proof of Concept for a high-throughput data processing pipeline before the "real" team came in and rewrote it in Java.

Not only did the "real" team try and gaslight me into thinking my implementation didn't work (It did, they copied it wrong), but it took 3 engineers twice the time it took to copy my work into Java as it did for me to do the original development. The kicker: The Java process was so bloated it took nearly 2x the compute resources to get the same throughput.

TL;DR I challenge every time someone says "This is complex/high throughput, so let's use Java instead of Node"

<comment><USER3> Yes, like you said for PoC node is perfectly capable. When people say complex and high throughput then things like say Kafka or ERPs, banking software come into my mind. What are some of the biggest systems running on node? Sorry not challenging but curious to know. I have not heard of any popular big systems written in node.

<comment><USER11> Yeah I work on a complex and scalable system for a bank using Java with Akka.

Could Node be as scalable in this regard?

</comment></comment></comment></comment><comment><USER12> JavaScript -> Startups that hire young, "dynamic" people doing what usually no one cares about (most of them must bankrupt by definition).

Java / C# -> The whole enterprise sector. Which is much, much bigger and people tend to know very little about it.

A lot of devs are funny I think. I come entirely from the enterprise sector where I have been working my whole life. Looking at a "startup lifestyle" it's hard for me to think about it seriously. Yes, there's FANG, but who'd like to work there knowing that there are more healthy options. Oh, yes - the people who think that kind of work is a paramount of what's possible ;) I'd prefer to work with people who think clearly, know their options, can assess risks for instance related with an inherent exotic approach of the JavaScript world. There's no place in enterprise for unproven methods like that. Corporations are like military. They must rely on what they use to support themselves. Therefore, what you prefer to do also depends on which people you like better - yuppies or older engineers, thinking a little bit more seriously about themselves. I'm a junior dev, I'm 34 though, and from the very start I had a feeling that there's something very, very wrong with those JavaScript young crowds out there. I went to a couple of meetups in my city, and it occurs that majority of them are the JavaScript ones... There's one serious C# group (I'm into that stack) and probably 100 JavaScript-ish ones. The quality of the people in the first one, their maturity plus how they think about technology, I consider fairly more reasonable for my personal taste. Hence, I won't get into the JS camp until there's no other choice. Years passed since my first epiphany of "There's something wrong with those JS people" and the feeling is only getting stronger. I can't argue about it logically, so I'm not going to claim that kind of approach is universal in any way, bu I must also say that after countless hours of discussions with the C# (and Java too) people, a lot of them shares that feelings. It's about philosophy, about how one think things should be done on the most fundamental level. I've seen in my life maybe a handful of really reasonable JS devs, which isn't the case in the C# or Java world at all...

I didn't refer to most of your questions, @Op. I just want you to consider which kind of people are your people. I also wonder how do you deal in your workplace with your specific mindset, which honestly seems like the one often found among Java devs, not the JS ones.

Myself, I prefer to work on big scale, important, enterprise projects. Startups are just not for me. But I also like to do my own stuff after work, and both Java and C# are very comfortable for doing that too. I just feel very hesitant with using technologies that seem to be better suited for building let's say prototypes. I'd rather prefer to start with a real thing.

For the rest of the people reading this post - try not to hate me. I'm not claiming who's a better individual because which language is being used. I'm purely referring to my own experiences as someone who's having I think a rather different background than most people in web development. I'd really like to better understand why I'm having the impressions I've been writing about.

On the other hand there's a ton of people swearing that JS is the one for them. And they usually too can't help me understand why it's so obvious for them, like I don't know how to make them understand that the existence of JS in an abomination... And that I can't wait when WebAssembly is going to be a standard ;)

So, the question remains - are we really that different in how we understand what technology is and how it should be done, or maybe we all have a big lesson to learn here that's going to come later in our professional endeavors? Maybe someone with A LOT of real world experience could help with answering it.

<comment><USER13> I know quite a few banks that heavily invest in node.js. Velocity of full- stack JavaScript team is something that is hard to replicate. With node.js and Typescript you can get reasonable performance and decent safety/maintenance.

JavaScript's community is just bigger, there are people with different level of skill but as a whole it is more welcoming and progressive.

<comment><USER11> Yeah but what are the banks doing with Node JS? Also, is the single language that beneficial? There are all sorts of differences between typescript and node no?

<comment><USER13> Building services for user facing applications. Banks have multi tiered architecture. They have back-end services (transactions, batch jobs, risk, calculations, analytics etc) these would be written in mostly in Java/Python/Scala/C#/C++. You might have situation where there is multiple systems processing same transactions overnight. Banks also have quite a lot of user facing applications, most of these now use React/Angular but data fed to it will not be coming from same services that process transactions(security and ease of maintenance). You will but another service just for frontend application that access back-end services via limited API or event queue.

Keep in mind that there is also plenty of systems that are older than me and have massive teams. Banks are mixed bag. You can work in amazing cutting edge project or maintain project in dead language.</comment></comment></comment></comment>


The Javascript programming language should be taught in public schools - <AUTHOR> https://petitions.whitehouse.gov/petition/javascript-programming-language-should-be-taught-public-schools-1st-grade-encourage-technology/fDtYxbLb?utm_source=wh.gov&utm_medium=shorturl&utm_campaign=shorturl <comment><USER2> Targeting which browser?

<comment><AUTHOR> These days they all pretty much work the same for the basics.

<comment><USER2> The devil is in the details. Will children be able to create and use, load and write proper data structures without hunting down some extension that works with all browsers? Will they be able to create networking protocols or reading and writing serial ports when robotics is becoming so much more important right now? The answer is no.</comment></comment></comment>


Why leaks are so toxic to secretive entities - <AUTHOR> http://zunguzungu.wordpress.com/2010/11/29/julian-assange-and-the-computer-conspiracy-%E2%80%9Cto-destroy-this-invisible-government%E2%80%9D/

<comment><USER2> Excellent read; thanks for posting this blog!</comment>


Learn You a Haskell for Great Good - <AUTHOR> http://learnyouahaskell.com/ <comment><USER2> This looks great! I'm thinking the author was inspired by Conrad Briski of <http://lisperati.com> fame?

<comment><USER3> Or Why's (Poignant) Guide to Ruby? <http://poignantguide.net/ruby/>

Personally I don't find these artsy trendy programming guides that appealing, but if it gets the job done...

<comment><USER4> Technical writing is boring. But having an artsy trendy programming guide as part of a set of introductory materials is a way to "take a break" mentally without having to go off-topic.

(At least, that's why they appeal to me...)

</comment></comment></comment><comment><USER5> Between the first glance at the tutorial and the twitter feed I get 40% why the lucky stiff and 60% Borat. Should be interesting.

I haven't attempted Haskell enough times for the Monads thing to click, this looks like it might be different enough to jolt it into me. :)

<comment><USER6> Monads are not as hard as you think - it honestly helps if you stop thinking of them as a completely new concept with a scary name. I'm sure it wouldn't do people learning functional programming any favors to refer to the fold operator as a catamorphism all the time. (The syntax is also pretty funky, at first, with >>= and whatnot.)

I found it most helpful to think of monads as being similar to the pipe operator in Unix, but one that has a hook function it calls as it passes results along.

Also, the IO monad is probably the worst to start with; it's one of the most complicated. The Maybe monad is much simpler -- Think of a function that takes a function, f, and a second function, next_f. It calls f and grabs the result: if it's an error, then don't bother calling next_f, just return the error; otherwise, call next_f with the result as its argument. You can chain a bunch of Maybes together, and if any of them return an error, the whole chain immediately passes the error to the end. It's like how || (or) short-circuits in other languages, but much more general.

A similar Countdown monad could start with a time and a list of functions to call, then call them in succession, passing along the results, but immediately aborting and returning an error if the chain has exceeded the specified time to run.

The monad is the chaining construct, but you define what it does with the results it passes along.

<comment><USER6> Oh, and I forgot to say --

Because of Haskell's type classes, it's able to _recognize_ that any construct that supports that kind of chaining behavior (among other things) is an instance of _the same general construct_ , and is therefore able to work with them in a common way. That's surprisingly useful, much like when an object's class is a Class object that supports various interfaces for interacting with the OO system itself (A "meta-object protocol").

Haskell makes a big deal of monads because it needs them to do some things in a functionally pure manner, of course. Still, they shouldn't be considered some completely alien by-PhDs-for-PhDs concept. (I remember Simon Peyton-Jones saying he wishes he'd instead named monads "warm fuzzy things"... :) )

<comment><USER7> This is, arguably, the biggest reason to use Monads in the first place, the typeclass thing.

You don't even need Monads to have completely functional IO code. Clean's uniqueness types are another method, but you can actually do it with just plain types if you're dedicated.

Oddly, monads just make things easier. Really.

</comment></comment></comment></comment><comment><USER8> Could someone explain the purpose of this odd grammar?

</comment><comment><USER9> I think we've slashdotted it...</comment>


Show HN: Poor Man's VPN With a Cheap VPS - <AUTHOR> http://longren.io/poor-mans-vpn-with-a-cheap-vps/ <comment><USER3> Or just

 _ssh -D localport -fN user@vps_

Then for chrome/chromium:

 _chromium --proxy-server= "socks5:localhost:localport"_

If you need multiple instances running different proxy connections use different data directories like:

 _chromium --user-data-dir= "other-dir" \--proxy- server="socks5:localhost:localport"_

Edit: sshuttle covers more than port forwarding but the article was geared at browsing the web through a vps hence my comment.

<comment><USER4> GUI version of doing the same thing:

[https://calomel.org/firefox_ssh_proxy.html](https://calomel.org/firefox_ssh_proxy.html)

<comment><AUTHOR> Where's the GUI?

</comment></comment></comment><comment><USER5> For $20 LESS per year than this "poor man's VPN", I can get an actual VPN that I don't have to maintain, has multiple world-wide POP's, and doesn't log customer usage: [https://www.privateinternetaccess.com](https://www.privateinternetaccess.com)

<comment><USER6> True. However, the idea with this is that you probably have a spare low-end VPS that you can use for VPN also.

<comment><USER7> You can get a low-end VPS for even less if you look at some VPS companies special offers, like $15/year for 1GB RAM, 20GB disk, 1TB transfer/month. Yes, low-end and most likely overbooked servers, but still decent enough for a proxy.

<comment><USER8> You don't need so much RAM for a VPN sever with a few users. You can get by with 128MB (or even less if you're ruthless), and get such servers for $7.50-$15.00 per year.

Check out: [http://www.lowendstock.com/](http://www.lowendstock.com/) [http://www.lowendbox.com/](http://www.lowendbox.com/) [http://www.lowendtalk.com/categories/offers](http://www.lowendtalk.com/categories/offers)

<comment><USER9> wow, I never knew you could get a vps for that cheap, thanks.

</comment></comment></comment></comment></comment><comment><USER10> We built an incredibly easy single click OpenVPN setup tool for DigitalOcean and Rackspace during Sochi: [http://www.tinfoilsecurity.com/vpn](http://www.tinfoilsecurity.com/vpn)

Enter API key creds, it makes the box for you, sets it up, and hands you a config you can use for your client of choice. (The script is open source for those of you that don't want to enter creds - we don't store them, and actually remove access whenever we can; for example, we delete our own SSH key from DO because they let us).

<comment><USER11> That's brilliant! Does it really work? How would one connect to it?

<comment><USER10> Works great. :) we give you, at the end, a config file you can use for your OpenVPN client of choice. We like viscosity on win/Mac: [https://www.sparklabs.com/viscosity/](https://www.sparklabs.com/viscosity/)

<comment><USER8> Out of curiosity - why not TunnelBlick on Mac?

<comment><USER10> Have you used it? The Viscosity UI is, in my opinion, bounds better - <USER2> to use, more obvious configuration options, etc.

<comment><USER8> I started using TunnelBlick before I had heard of Viscosity. The UI isn't great but it was easy enough to install and configure.

I will check out Viscosity, as I don't particularly like having to use the config files directly each time I want to make a small change. Do you know whether the performance (throughput, latency) differs between the two?

<comment><USER10> I haven't noticed any difference, but I don't have any statistics for that. Just "feel."

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> Always wonder how come _tinc_ is not as popular as other VPN solutions. Peer to peer network routing via tun/tap interfaces, all traffic encrypted, each host has a public/private key pair.

I have been using it to build an VPN network with cheap VPS from different providers and found it really reliable and easy to set up. Besides that, once used it to watch some south park at UK and also worked wonders, no need to even setup a proxy, just route your traffic through the interface.

Link for the interested: [http://www.tinc-vpn.org/](http://www.tinc-vpn.org/)

<comment><USER13> Tinc is difficult to setup and uses a custom protocol which may not be thoroughly vetted.

<comment><USER14> I can't comment on the protocol, but tinc is very easy to set up. You just need to generate pub/priv keys and then add your routes in /etc/tinc/vpn/tinc- up. We're running it in production with ~30 nodes worldwide and using puppet to dynamically add/remove nodes on the fly.

What is great is it's able to re-route around any peering issues suffered by local ISPs. Say you have three nodes in the US, UK, JP and your JP ISP loses routing to your US ISP. If both can still route to the UK then tinc will automatically keep traffic flowing.

<comment><USER13> Of course if you manage to get a template setup it is easy.

But now that I haven't setup tinc for awhile I have no idea how to do it again and the examples are horrible.

Every node needs to have a copy of every other node's configuration file and it is annoying to add a file to N servers when you are adding the N+1th server.

<comment><USER12> For the setup I will say it is on the same level of difficulty as it would be to setup iptables and routes manually. Yes, tinc does not abstract any of these things from you. But if you know what you are doing (not saying I always know what I am doing) it can be a powerful tool to build the exact network you want without any provider lock-in.

Now, I must agree on that, it might not be a friendly solution for dead easy routing to an exit node as a proxy with dns-tunneling built in. I just wanted to know why tinc does not get enough love, and you answered accordingly. But if you are building a serious network I do think tinc hits the sweet spot between being easy and allowing for any network you can think of without being tied to a particular server provider that might offer private IPs.

As for the configuration I use git, which makes it super easy to setup the N+1th server. None of the private keys are committed to the repo, of course. My infrastructure is not that big so I am still doing some things by hand, but it should be easy to automate some parts by using git hooks + puppet|ansible|chef.

About the protocol I do not understand why it would be a problem, other than not being ssh or the possibility of being filtered over the network. Doesn't most VPN solutions have their own protocol?

<comment><USER13> If you put your configuration files on github then someone can figure out which IPs they can ddos.

The problem with a non-vetted protocol is that it could have flaws.

<comment><USER12> s/github/git/

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> Like everyone else here, I've been using ssh -D. Which is awesome especially because I have my hosts organized into my ~/.ssh/config file, so if I need a connection in the USA, I'll just type "ssh -D 4444 us".

I have a similar setup on my Android phone, by using Vx ConnectBot ([http://connectbot.vx.sk/](http://connectbot.vx.sk/)) plus ProxyDroid ([https://github.com/madeye/proxydroid](https://github.com/madeye/proxydroid)).

If anyone need some of the advanced features provided by OpenVPN, I can suggest this script: [https://github.com/Nyr/openvpn- install](https://github.com/Nyr/openvpn-install) I've successfully used it to install OpenVPN several times, and it's mostly effortless.

As for the VPSs, I can suggest [http://lowendspirit.com/](http://lowendspirit.com/), awesome owner and can't beat the 3€/year (yes, year) price. You don't get a public dedicate ipv4, but if you need only a VPN then it's not really needed.

<comment><USER16> You can actually specify the -D in your .ssh/config with "Dynamic Forward 1234". Now whenever you connect, it'll also open up a proxy to which you can optionally connect.

Another neat trick is having a wildcard for a host to set global options, like compression.

Here's a little sample of what my ~/.ssh/config looks like: [https://gist.github.com/jzelinskie/10675197](https://gist.github.com/jzelinskie/10675197)

</comment></comment><comment><USER17> This should be called a lazy man's VPN, not poor. You can run a VPN on the same $5/m VPS.

<comment><USER18> Or lazy man's ssh tunnel. :)

<comment><AUTHOR> I think that's the most succinct name so far. Like it. Maybe I should re-title the post.

</comment></comment></comment><comment><USER19> OpenVPN is nice too and will work on the same cheap VPS. They have a command line version, and a paid product, Connect, which has a web UI for configuration.

It's free for a low number of users, though. And it also has clients for Android.

I find that I get better speeds through OVPN than through an SSH tunnel. YMMV :)

<comment><USER20> OpenVPN defaults to tunneling over UDP, but optionally supports TCP. SSH is always over TCP. Here's a bit of info from the man page [1] for anyone who's curious:

" OpenVPN is designed to operate optimally over UDP, but TCP capability is provided for situations where UDP cannot be used. In comparison with UDP, TCP will usually be somewhat less efficient and less robust when used over unreliable or congested networks."

[1] [https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage](https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage)

More detailed info: [http://sites.inka.de/sites/bigred/devel/tcp- tcp.html](http://sites.inka.de/sites/bigred/devel/tcp-tcp.html)

</comment></comment><comment><USER21> SoftEther is really simple to configure and works very well using normal VPN clients, which is easier for non-tech friends/colleagues to access vs SSH.

<comment><USER22> +1 to SoftEther. I've been using it as a replacement for Hamachi (which recently went pay-only), allowing my godsons to log into my Minecraft server. I have it set up with a server running on a DigitalOcean VPS and the bridge to my internal network running on a Raspberry Pi.

<comment><USER23> +1 for SoftEther, also works better in China because of the protocols supported.

Another noteworthy script for instantiating an openvpn server quickly is this:

[http://scramblevpn.wordpress.com/2013/09/22/raspberry-pi- and...](http://scramblevpn.wordpress.com/2013/09/22/raspberry-pi-and-patched- openvpn-server/)

Again, this has emphasis on scrambled connections (ie china)

</comment></comment></comment><comment><USER24> I can also recommend Docker + joyent/digital ocean with Openvpn. [0] Just paste a few commands, install tunnelblick and you are ready to go.

[0] [http://blog.docker.io/2013/09/docker-joyent-openvpn- bliss/](http://blog.docker.io/2013/09/docker-joyent-openvpn-bliss/)

</comment><comment><USER25> Am I crazy for using PPP over SSH for this?

I enabled masquerading on the server for ppp0 interface and then I'm doing this on the client:

        route del default
        route add -host vps.host gw my_local_gateway eth0

        pppd pty "ssh vps.host -t -e none -o 'Batchmode yes' sudo /usr/sbin/pppd" 192.168.16.1:192.168.16.254 local nodetach silent

        route add default ppp0

I guess some of this could be automated in ppp-options but I never bothered as it's a simple script I can run at any time.

<comment><USER26> >Am I crazy for using PPP over SSH for this?

Yes. You'll get all kinds of performance weirdness running TCP-over-TCP[1]

[1] [http://sites.inka.de/~W1011/devel/tcp- tcp.html](http://sites.inka.de/~W1011/devel/tcp-tcp.html)

<comment><USER25> Interesting. I guess I do not use it often enough to encounter those issues.

Thanks for the link, it's really useful to know this.

</comment></comment></comment><comment><USER27> This sort of VPN is useful for getting around filtering and blockades but is not good for deniability. Tor and or a commercial VPN that doesn't keep logs is for being more anonymous.

<comment><USER28> How is a commercial VPN that _claims_ not to keep logs more deniable than running your own VPS that definitely doesn't keep logs?

<comment><USER29> Well, the commercial VPN may or may not log traffic, so let's say it's 50/50.

Your VPS, on the other hand, is _your_ VPS. If the police comes to your server, the company has no reason to hide who you are. That's 0% deniability, they'll come straight to you as the owner of the server. You'll then have to prove somehow it wasn't you (and you were, so it's a tough one). At the very least you'll get lawyers involved.

</comment></comment></comment><comment><USER30> Seems like an easier solution would be to run Tor on the VPS instead of via his home internet connection. Nice to learn about sshuttle though.

<comment><AUTHOR> I have a VPS specifically setup for a Tor relay, as well. :) We're moving soon and will likely retire the "home" Tor relay.

Not poor yet, but on my way to being there it'd seem.

<comment><USER31> I'm pretty sure most VPS hosts wouldn't be too happy with that

</comment></comment></comment><comment><USER8> I thought this would be an article about setting up PPTP and/or OpenVPN on a low end VPS. For anyone doing this for the first time, these shell scripts may be helpful:

[https://github.com/cwaffles/ezpptp](https://github.com/cwaffles/ezpptp)

[https://github.com/cwaffles/ezopenvpn](https://github.com/cwaffles/ezopenvpn)

</comment><comment><USER32> I was setting up my connections before going to China. I found this guide useful: [https://blog.ls20.com/ipsec-l2tp-vpn-auto-setup-for- ubuntu-1...](https://blog.ls20.com/ipsec-l2tp-vpn-auto-setup-for- ubuntu-12-04-on-amazon-ec2/)

</comment><comment><USER33> There are top cheap VPN providers, to find a decent one check out list of [http://vpnwebsites.com/](http://vpnwebsites.com/).

</comment><comment><AUTHOR> Thank you for all the responses. It's apparent there's MANY other options, and probably much cheaper options.

Given me a LOT to think about. Thank you all. :)

</comment><comment><USER34> openvpn access server takes only a few minutes to setup. Digitalocean has an article on how to as well. [https://www.digitalocean.com/community/articles/how-to- insta...](https://www.digitalocean.com/community/articles/how-to-install- openvpn-access-server-on-ubuntu-12-04)

</comment><comment><USER35> Ssh -d along with proxy chains - been doing this for ages.</comment>


Famous Aging Researcher Doesn't Want Us to Live Forever - <AUTHOR> http://nautil.us/blog/-this-famous-aging-researcher-doesnt-want-us-to-live-forever <comment><USER2> Unpopular tyrants would be overthrown regardless of their immortality. I'm more worried about increased demand for resources as population goes up.</comment>


Ask HN: Alternatives to Wordpress for Blogging? - <AUTHOR> Hi HN,
I want to start blogging again but don't want to use Wordpress. It seems so bloated with functionality that I don't need.
I'm looking for a solution, self-hosted if possible, that is really focussed on making writing blog posts nice and easy. Static page generators not really preferred because lack of mobile support.
Any suggestions? I don't want to reinvent the wheel and write something my self.
Thank, Sebastian <comment><USER2> Hello, my Namesake,

my recommendation is Jekyll, I love Jekyll for freedom and simplicity. I posted on my blog about Jekyll: [http://sebastian.korotkiewicz.eu/techlog/deploy-jekyll- blog-...](http://sebastian.korotkiewicz.eu/techlog/deploy-jekyll-blog-with- git/)

And if you are looking for a cool CMS for blogging, I recommend:

\- Textpattern [self-hosted] PHP ([https://textpattern.com/](https://textpattern.com/))

\- Ghost [self-hosted] NodeJS ([https://github.com/TryGhost/Ghost](https://github.com/TryGhost/Ghost))

And this is my side-project created in one day in nodejs, everyone can write their article: \- [https://pbsapi.now.sh/](https://pbsapi.now.sh/)</comment>


Filter4: you may be surprised with the recommendations - <AUTHOR> http://filter4.com/

<comment><USER2> Cool! I like it, we need even more sites like this!

Digg, reddit, mixx, stumbleupon, and hacker news is not enough in this crazy world of abundance of choices.

How about adding some real-time tuning options?

<comment><AUTHOR> real-time tune jaanix like?

none of that sites recommendation system have worked well for me...</comment></comment>