18F and Federal Beaurocracy

Whatever your opinion is of the current administration, the current Congress, or the current state of the federal government, I don’t think it’s even debatable that the tech changes happening at the federal level of government in recent years are heading in the right direction and absolutely necessary. Having a group in there that’s helping to modernize technology and websites that are total cluster&^%$s with strong guidance, modern standards, and energetic people who want to help is a good thing. A very good thing.

Unless, of course, you’re a federal contractor who relies on the horrible old way to handle business for fat profits while getting nothing done. Then you make claims about opaqueness, which is hilarious.

This story sums up neatly why this protest is laughable:

A report from the Government Accountability Office (GAO) noted that in 2015, U.S. agencies spent more than $80 billion on IT expenditures. Out of this sum, about $60 billion — or 75 percent — went to maintain outdated IT systems. Since many of these are supported by established vendors, logic seems to dictate that if modernization continues and groups like 18F increase accessibility to federal contracts, agencies may opt for different vendors. Federal tech procurement processes could see bids from new entrants that not only improve the quantity and diversity of offerings, but also come at lower price points.

Emphasis mine.

Let’s hope these protests are just the gasps of a dying beast that’s been put on its back.

One last non-surprise: One of the corporate members of the group that’s protesting is Microsoft.

Inevitable, But That Doesn’t Mean I Have to Like It

I was right — Adobe has doomed us all.

Now the Apple App Stores are going subscription model.

It’s over. It was fun while it lasted, though.

If nothing else, this will dramatically cut down on the number of apps I use from month to month, just to avoid that nickel and diming.

I hope that the developers choose six month or annual subscription plans. That’s about the only way I’ll feel OK with this. It’ll feel like natural upgrade pricing that way. Monthly just feels desperate.

Rooting for Google

My first job out of college was as an Oracle database programmer. I love me a good multidimensional database design, where you can slice values off the cube to get what you want.

That has nothing to do with the Oracle vs. Google lawsuit, but I felt like mentioning it.

Larry Page testified yesterday. I loved this back-and-forth:

[Oracle’s lawyer] Bicks asked Page if Google paid Oracle for the use of Java, which was developed by Sun Micro systems in the early 1990s and acquired by Oracle in 2010.

“I think when Sun established Java it was established as an open source thing,” Page said.

Bicks repeated the question.

“No we didn’t pay for the free and open things,” Page said.

Apple’s New Tables

Apple’s new campus is large that it requires super long tables. 500 of them. 18′ each. The Apple Store tables are nice, but the Apple Campus tables are nice and suitable for a game of shuffleboard.

They’re being made in Europe, with wood from Belgium and German. And then shipped to California, which is what turned out to be the most fascinating part of the story for me:

The order of Pod Island Tables is currently in transit inside capacious 40′ x 40′ shipping containers, each piece carefully protected within large aluminum wrap, each piece vacuum sealed to keep the wood protected as they journey across the Atlantic. Eventually each of the 500 tables—alongside 300 Essenza tables, and 200 other benches—will be installed by crane and dolly within Apple Campus 2, where the company’s nearly 13,000 employees will come into contact with a table that began its life nearly 6,000 miles away, each as unique as the towering trees with which each was made.

The mind boggles… I just love the picture of something being vacuum sealed inside of aluminum foil, too. I never buy bigger than the 75′ roll when it’s on sale. I can’t imagine the size of the box they use for these tables. Maybe they’re available at CostCo?

Also, it would likely drive me nuts to work at a place like Apple or Pixar which they design to make sure more social interactions are forced to happen. Ick. I hate cubicles as much as the next guy, but I hate those rows of computers in open planned offices that Silicon Valley seems to love so much, even more

Fix Elixir

Elixir is too complicated.

Elixir needs to be fixed.

I think we can all agree with these notions. Have you seen the Elixir-lang mailing list lately?

Having used it for a couple or three weeks, you realize it requires far too much typing — that is, pounding away on the keyboard with your fingers. What it truly lacks is typing — the kind that pre-defines a variable’s content type. We’re going to talk about fixing that shortly.

In this article, I hope to make a few suggestions to fix Elixir to make it better for future generations.

Steel Workers on a construction site to fix Elixir
If you need a change in your infrastructure, try a steel worker. Or three. They can fix Elixir for you.

Elixir Needs Types

For starters, we need to differentiate between data types. But we need to keep this simple so people will use it. I propose three types: Strings, Associative Arrays, and Lists. For simplicity’s sake, we’ll define numbers as strings, also. This doesn’t make sense, but it’s convenient and quick. Also, these types are more about the structure of the data than the contents of them. A string, thus, is a single unit of data without any sort of structure around it.

Current maps are far too complicated with far too many ways to do the same thing. Aren’t we all tired of looking for a value for a particular key by typing in this mess:

iex> example_value = Map.fetch(example_map, example_key)


Why not just have:

iex> example_value = example_map{example_key}

It’s so much more direct.

Fixing Strings

Strings are too complicated. I think we’re all tired of typing in “Hello” and getting back a result like:

iex> "Hello"
[67, 63, 70, 70, 72]

(No, it doesn’t actually do that in iex. This is a dramatization, like that time Dateline NBC blew up pick-up trucks, OK?)

Why not just learn Assembler at this point?

Let’s Unicode all the things and make them all just plain strings, composed of lists of characters.

Separating the Data Types

We need something short and pithy that gives us an easy visual reference to a variable’s data type. Because, right now, in Elixir, map_example could just as easily be a valid map, string, integer, or process id. MADNESS! We all know you can’t trust programmers to name things.

The solution is simple. Use a sigil. Elixir has a few leftover, but I say we just need to go all the way and use whatever we can. Let’s stick with an “S” for a string, an “A” for a list since it’s so similar to an array, and, er, we’ll use an “H” for an Associate Array, which is the same thing as a Hash.

Now, it might be confusing to use letters, so let’s use special characters. The “S” looks a lot like a “$”. The “A” can be an “@”. The “H” can be “%”, which is a bit of a stretch, but I’m running out of options here already. Prefixing with “|-|” wouldn’t work as it looks a bit like a pipe, and we might need that for all the multitudes of changes the pipeline operator needs. (That’ll be a future post.)

This also makes string interpolations simpler. We don’t need that ridiculous #{} muddying up our beautiful list of Unicode characters anymore. "Hello #{variable_for_world}" is now the much simpler "Hello $variable_for_world". Plus, your left pinky finger hits shift two less times now.

More Minor Changes

Using “<>” to concatenate strings is the most baffling design decision in the history of computer programming. They don’t do that in C, so why would any language do anything different? Everything should be based on C, just like every command line should look like it comes out of a Unix box. Even Microsoft is using Gnu BASH now…

We’re not going to use “+” for that, because we’re better than Javascript and we’re working on clearing up the differences between strings and integers here. I don’t want to overload the operators. Just the variables.

We’ll pick something sane here. In fact, I’ll give you a couple of options: “.” and “,”. Those make sense.

Tuples are dead. They are replaced with arrays/lists. If you like {:ok, “All is good”}, you’re going to love a two element array with those values. If you want to know if the function was successful, just ask for the first element of your list:

iex> @results = ("ok", "All is good")
iex> List.first(@results)

Or, just plain old:

iex> @results[0]

Everything in life should be zero based. You can’t spell foist without an 0, amIrite?

Summing It Up (So Far)

In these three short steps, we’ve already fixed strings, typing, and visual identification of types. We’ve cleaned up Elixir for the programmer, not touching on OTP at all.

I’ll be submitting pull requests on all of these items momentarily.

M. Night Shyamalan, The Programmer

Congratulations, you’ve just fixed Elixir by turning it into Perl.

Kinda almost like Perl6, actually. Perl has a couple of web frameworks, too, you know. Perl Dancer and Mojolicious can help.

You’re welcome.

Is Next Year the Year of Linux on the Desktop?

Pigs without wings
Quick Check: Nope. Still no wings.

Probably not, but this year is The Year of Linux on the Command Line, finally. The last hold out, Windows, is bringing the BASH shell to Windows.

Yeah, I know. I had to read the headline of this story three times before I could begin to believe it.

Here is an announcement from Microsoft Build you probably didn’t see coming: Microsoft today announced that it is bringing the GNU project’s Bash shell to Windows. Bash (Bourne Again SHell) has long been a standard on OS X and many Linux distribution systems, while the default terminal for developers on Windows is Microsoft’s own PowerShell.

More importantly than bringing the shell over to Windows, developers will now be able to write their .sh Bash scripts on Windows, as well (or use Emacs to edit their code). Microsoft noted that this will work through a new Linux subsystem in Windows 10 that Microsoft worked on with Canonical.

It won’t fix the operating system, but at least interacting with it will make slightly more sense now.

No System Goes Un-Gamed

And if you change the rules, you change the games people play.

In Angola, Wikipedia is free to visit on people’s cellular plans. Visits there won’t count against their relatively small data limits. This seems like such a nice idea, doesn’t it? Information can truly be free.


Angolans started swapping pirated movies over Wikipedia. Because, hey, it’s free.

I think I’m impressed by the creativity, but it does show once again that we just can’t have nice things anymore. Someone will always destroy it purposefully. Sad.