I don’t like Go

As long as I’m complaining …

I really don’t like Go. I mean, really, profoundly, strongly, whatever. I think it’s very bad and most of its proponents are so very, very wrong.

Here’s why.

I don’t write C programs. Go is often called things like “C for the 21st century”. Great! Cool! That’s awesome!

But I don’t write C programs. Why would I want a better C when I don’t need C to begin with?

To be sure: if I had to write a C program, I’d probably go straightaway to Go. And why not? It’s a better C, so picking it is obvious. I’d only pick C if the C program I needed to write is, like, a language interpreter or some embedded thing or something on a platform Go doesn’t exist on.

But I don’t have to write C programs. I get by just fine writing Python programs, and Javascript programs, and shell scripts, and whatever else random nonsense shows up in my TODO.

But fast, concurrent network servers! Go people are quick to point out. Yeah, yeah, yeah: I have a hand-motion for that. Your stupid app doesn’t have any users, and concurrency is not a simple magic incantation. You probably don’t even know where the bottlenecks in your app are, so your breathless yammering about concurrency is pointless. Blab about it at the next meetup; I don’t have time.

But strong typing!! Yeah, well. My life as a web programmer consists of ints and strings; I guess I am just lucky. Sometimes I group them into lists or maps, but really, ints and strings, dude. I don’t need typing enforced at compile-time for we date field of a web form.

Now, a quick point: I write a lot of intranet-type apps. They are for specific users and not exposed on the filthy internet. That means I rarely have to worry about fuzzing my stuff, malicious input, I can demand a specific browser if I want to employ some feature, etc. I have it good. If I couldn’t get away with all that, I’d be more in favor of strong typing.

And as long as we’re complaining about strong typing, point the second: I’ve been doing this long enough that I can spot a fad from a million miles away. 5 years ago we didn’t need strong typing, we just needed better tests and CI. Before that, we did (Java). Before that, we didn’t (Perl). And so on, and so on.

Go and strong-typing proponents are just another fad. Strong typing, like TDD and Agile and a zillion other programming methodologies, are great. Wonderful. Seen half a dozen come and go in my day (remember XP? We didn’t need tests OR strong typing back then!).

Telling me the only way to write correct programs is X is a big BFD from me. I suck, you suck, we all suck.

I could go on but dinner’s almost ready, so what better time than to end this little rant. I don’t like Go. The end.

Why I don’t like Emacs

For reference, see http://elephly.net/posts/2016-02-14-ilovefs-emacs.html

To hit a few points in no particular order:

All those modes and you allow 2. It is completely normal for me to be editing an HTML5 document that is in reality a Jinja2 template that might contain snippets of JavaScript, including new-fangled JS tools like Angular 2 and React.

Despite following dozens of tutorials about hacking together a dozen different major and minor modes and fiddling with hundreds of lines of elisp, I have never once gotten this to work correctly. God forbid one day I went back to something like PHP/Hacklang and that example above got yet another language thrown in.

This isn’t contrived, either. This works for me in Vim, this works for me in the Intellij family, this works for me in Komodo, this works for me in Atom, this works for me in Sublime. It works more-or-less out of the box in everything but Emacs.

I like my cigar but I take it out of my mouth every now and then. Because you can write some-app-client in elisp doesn’t mean that it’s the best at it.

So for example, I wouldn’t give up Tweetbot, which is a far better Twitter client than anything in Emacs, just so I could … I dunno, not command-tab over to Tweetbot? I’m unclear how that’s an onerous burden.

Similarly my email app is just … plain ol’ Gmail. It gets features ahead of IMAP clients, it’s pretty stable and predictable, and work pays for it (we have Apps). It’s one less thing to break. That gives me more time to do my job.

Pretty much everyone will admit `man` is horrible. I tend to read man pages in the browser.

And so on, and so on. I use the best app available for the task. I’m super glad Org Mode works for you. I tend to think it’s not the best tool around.

And so on, and so on.

Do one thing well. I think Emacs – as a creation of GNU, steeped in Lisp Machine tradition – is in fact anti-Unix. It does lots and lots and lots of things. It’s in no way a Unix tool; it’s a Lisp Machine tool someone ported to Unix after the Lisp Machine renaissance faded.

Instead of doing one thing well, it tries to model itself after the MIT AI lab model of thinking, that begat the Lisp machines: be completely programmable.

That’s not a sin per se but to uphold it as somehow Unixy is. vi – and not Vim, which in this regard bears a certain amount of sin as well – is a “proper” Unix text editor. It barely does anything because you can just pipe your file through 86 different command line tools to get the output you want – compiled software, a web page, whatever.

That’s Unix.

Your stupid TODO list app is not “world changing”. Stop saying that.

One of the classics in the stream of unending stupid that comprises the standard-issue Silicon Valley groupthink is that a product or service is “world changing”. No it is not. By the time your revolutionary service-as-a-platform-as-a-service micro-macro-blog mashup has started looking for Series A, everything world-changing has already happened. I assume that people say this dumb shit because, as they are standing on the shoulders of giants, they’re suffering from hypoxia.

Consider Twitter. Twitter is held as yet another example in Silicon Valley lore of “small thing changes world”. Given as examples are how the term “hashtag” has deeply permeated pop culture, or its role in actual revolutions (Iran student uprising, Arab Spring, Libya). “Obviously”, the thinking goes, “if it gets used in something that literally changes the world, then it is by definition world-changing!”

Nope. You’re confusing things.

To continue to pick on Twitter, it is the end result of a very long, very un-sexy relentless march of progress. To make Twitter happen, we had to have a lot of things in place: a supply chain that puts hand-held radios in everyone’s hand. They have to be built in places where governments force wages down and keep regulation low. Raw materials have to be moved across the planet on cargo containers and by air. These assets have to be obsessively tracked and managed; even a small loss of raw materials or components can disrupt production. Once produced, we need to get them into the hands of users with the capital to buy them. We have to maintain the radio and telephony networks. We need bandwidth, peering, data centers. Data centers mean innovation in cooling and other physical-plant stuff. And on, and on. 

Without all that in place and working effectively, then Twitter wouldn’t work. Twitter is a side effect of the rest of “modern information society” or whatever you want to call it. Twitter – cleverly, no argument there – exploits a tiny niche at the very tail end of a massive amount of work.

No one ever really wants to do a startup to better improve supply chain performance. Why would they? It takes years to understand what a supply chain even is. It takes years to do lots of hard work to figure out what’s wrong, and testing your ideas can take a long time. It’s very hard work. Better to do a TODO list.

Better and easier to make predatory license agreements, or talk about your “incredible journey” after you’ve been acquihired by Google.

A companion piece, in no particular order, to the excellent http://squarism.com/2014/06/06/default-dc-tech-is-just-bad/

Even if you aren’t in the cloak-and-dagger space, chances are you will be near it and that means a truck-load of issues that will decay your soul.

Let me tell you about the 3 dumbest words you’ll ever hear: “Sensitive but unclassified”. Now, I’m sure you know what classified material is: secret stuff. You can’t look at it without a clearance, you can’t have it stored in a room that’s not protected, etc.

Sensitive but unclassified means, “this must be treated like classified data, mostly, even though it’s not”. So, anyone can look at it, right? Because it’s not actually classified? No. Only certain people can. Who? It depends. Uh, on what? It depends. OK on … ? Lots of factors.

So what we have here is, placing a large neon pink dildo on the table in a room full of people, and stating very loudly, “Only certain people in this room may discuss certain objects placed on specific tables. No one else should look at this specific object.”

But it’s right there in the open. How do you not.

It is important to note that breaking whatever rules might happen to apply to the data – which you may not know about in advance, unlike actually classified data – carries the full weight of law. Meaning you can go to jail if Asok the Intern admits to the Defense Security Service he looked at the big pink dildo.

“But why don’t they just classify it?”, you might ask. Because people need to see it, that aren’t cleared, and in the post-9/11 DC classifying everything they actually want to would make it impossible for anyone to have a job; you’d have to classify everyone, down to the 7-11 cashiers.

On the topic if “Sharepoint Architect” jobs, or just finding a jobby-job with ease: oh yeah. If you are going to live in NoVA/DC and maintain some sort of casual LinkedIn-type job-hunting presence – even if you’re totally happy and not intending to job-hunt at all – prepare for a literal fuckton of emails from recruiters who use the same cookie-cutter “I really like your skills in … ” BS. You can probably sail into a job here, if you don’t really care much about it.

Technologies get embedded in DC tech life. It’s scary-easy to get a job if you’re good at Sharepoint, or Drupal. There are going to be Sharepoint and Drupal jobs in DC for millennia.

This also means, you can end up as the COBOL guy. There are companies running HPUX data warehouses, because HP gave them some 500-year-long support contract, and by-god they’re going to run that goddamn thing out. There’s guys who missed the entire Linux revolution, because they tend – possibly lovingly – to a decades-old dinosaur.

(I’m being sort-of unfair, since HPUX is actually a pretty modern, high-performance proprietary Unix and still actively maintained, but you get my point.)

Another great point:

Politics matter. Congressional BS will impact you. I have friends who have lost “stable” jobs because of some really weird contract expiring or the “wrong type” of money being in the “wrong bucket”.

YUP. You have to get used to this. Congress will kill your company – or the economy – to make a (political) point. Government shutdowns harm lots of people in the area, and I’m pretty sure they’re the new normal, so get used to it. Even if you are a 100% private company, odds are you’ll have government customers or users, and when they’re fucked over, you get fucked over.

Things are getting better. Out in the ‘burbs, there’s some people trying to introduce better tech, sneaking in AngularJS and Golang into staid, boring jobby-jobs. There’s some venture-funded startups downtown, with hip offices and regular hackathons. We’re becoming the “big data” capital, thanks to AWS-East and other huge-ass data centers (most a few miles from my house!). Healthcare.gov was a debacle, but overall this administration has been far more forward-thinking than any before it – there’s even a hip “incubator“!

Things in DC are shitty, and it’s easy to just find a job and hide in the vast negative space that occupies 99% of the government sector. But, there’s good things happening. DC wants to have a hip startup-style scene. DC wants to use the not-insignificant amount of brain power and money in this region to do more than maintain decade-old Cold Fusion apps. DC wants to create a technology economy independent of the Federal Government, or failing that, one that is sleek, agile, and modern; a better government helps us all.

But I’m not sure DC can and so I think about leaving a lot. And if I wasn’t underwater on my house, I’d probably be looking at Portland, too.

Why we can’t have nice things: an ongoing series

Today’s edition brought to you by http://beranger.org/2014/06/01/android-4-5-end-of-road/

I strongly need rooting at least to remove the ads from individual apps — most of which don’t even have a paid, ad-free version.  I also need rooting … to really clean my system every now and then. With almost 300 installed apps, I need to be in tight control of my phone — it’s my phone, not Google’s, dammit!

So much to dissect here. So much.

“I strongly need rooting to at least remove the ads from individual apps – most of which don’t even have a paid, ad-free version.” OK right out of the gate, I need to say: I know that feel, bro. One of the biggest things to turn me off from an app is intrusive advertising I can’t get rid of.

However! The developer has made a choice. It’s kind of a take on Gnu’s “Freedom 0”: the “right” to monetize the app as they see fit. 

Here is another way to phrase that sentence: “I strongly need rooting to remove ads from apps, because fuck that guy who wants to be compensated for his effort. I don’t agree with his decision, so fuck him.”

Since the OP notes that he wants to pay for things, I am going to assume that he’s not one of those fucking parasites that sees there’s an ad-free or fully-enabled version and just pirates it. 

The point is, software developers make choices on how, if at all, they’re going to monetize their work. Disagreeing with that choice does not give you the right to continue to use their apps.

Moving on: “I also need rooting to really clean my system”. Uh, what sort of shit is Android that it can’t manage itself effectively and needs me to fucking sysadmin my phone. God, is every Android user having to do this? Or just the massively OCD nerds who think that every last disk block must be personally inspected for freshness?

If your phone needs that much effort, maybe just maybe it’s a piece of shit? Just saying. Most desktop operating systems need that level of effort and they’re complete shit.

Lastly, a fine 2-parter: “With almost 300 installed apps”. Sweet tap-dancing Moses, what the fuck do you do? I don’t have 300 apps installed on my computer that I use to develop software (a notoriously software-heavy process)! 

(Sidebar: Obviously, as a developer, I’m not counting stuff like /usr/bin, which on my Mac has 1047 items. But I have all of 106 apps in /Applications, and honestly I haven’t launched some of those as long as I’ve been using a Mac – I mean, Chess.app?)

And that last wonderful line: “I need to be in tight control of my phone”. Just curious, do you ever use to make phone calls? Because it certainly doesn’t read like you do. 

“It’s my phone, not Google’s, dammit!” AH, yes, the first time you fall off the turnip truck it does hurt a little.

The bulk of high-end smartphones on the market are essentially owned by their software maker and telco. If you want to “own” your phone, buy a burner, full stop. 

A brief and uninteresting review of ReactJS

You might have heard of React (or ReactJS) lately. It’s a Facebook JS platform thing. You can find lots on it: here, here, or here, or perhaps this well-reasoned discussion. And probably other places: it’s starting to really get talked about a lot.

Naturally I did the obvious thing, and found the smallest possible project I could lever it in to, and implemented it. I wrote a mailing-list-and-whatever-else email system for work (using Lamson and Redis). Me being me, the “user interface” is a bunch of scripts in bash and Python, and `redis-cli`, along with a giant README on just what the hell is going on. 

Once I took it live, I decided “phase 2” was to at least put up a read-only view of things like “who is on what mailing list”. Obvious first choices here are Express or Flask, and a little AngularJS front-end; so React will work nicely. 

The server-side code itself is unremarkable: get a Redis key, then `res.json(result)`. Nothing special, so I won’t bore you with the details.

React itself was somewhat uninteresting. A somewhat dismissive but also not entirely inaccurate description is, “it’s just a thing for making directives”, a directive being what Angular calls its template/view/DOM-manipulation mashup; in other words, UI.

It relies on hierarchy, and at the higher levels all elements are new/non-standard; so in the tutorial it uses a “CommentBox” top-level element which contains a “CommentList” element, which contains a list of “Comment” elements, and so on. If you’ve ever done programming in something like GTK, this should be familiar. Only at the lowest level do you start dealing with HTML. 

Since it’s just “directives”, React contains no methods for talking HTTP, and it has no 2-way data binding. This is not entirely awful, because not every single element benefits from 2-way. It’s also not entirely great, because now you’re back at least partly in jQuery-land. I’ll always have affection for jQuery and will never say bad things about it, but I don’t think it’s a truly unfair statement to say sometimes larger applications can get unwieldy or difficult to manage.

For large projects, then, it seems like you’re just trading one hard-to-maintain method (a twisty maze of selectors and bespoke events in jQuery) to another (just what the fuck is a TopLevelStructuredListElementClass, anyway?). You can look at any “standard” AngularJS app and immediately understand how it gets JSON from a remote service, and with a few minutes of noodling you can probably reason where the Angular service code is and how it works. I don’t see that at all in React. 

I will probably deploy it (instead of rewriting in Angular), because it’s a very small app that does exactly 1 thing and will almost certainly not be changed for years, and maybe I’ll open-source it if I can. That said, I’m sticking with Angular for now.