steam by andrea sutcliffe

Andrea Sutcliffe’s book Steam: The Untold Story of American’s First Great Invention was a pure joy to read. Being the second review I’m writing with my “new” system, I hope you find this book as interesting as I have.

In 1784, James Rumsey designed a boat that could, by purely mechanical means, move its way upstream. What he devised was truly brilliant: imagine a catamaran or pontoon boat with a platform across the two hulls. Anchored to the platform is a waterwheel. The waterwheel dips into the river, and is connected via a linkage to poles that push the boat against the current like a Venetian Gondola.

Why did he develop such a device? Because at the time, shipping by barge etc was incredibly simple downstream – you load-up the barge, give it a small crew, and float downriver. But because there was no way of mechanically returning the vessel upstream (without using sail power, which can be fickle to use, and uses a lot of otherwise-usable cargo area). So barges and shipping vessels tended to be crudely made so they would only ever go downstream – at their destination they’d be turned into building materials. And the crews would have to return on foot. To put this in perspective, it took about 4 weeks to float a barge from Pittsburg down the Ohio to the Mississippi to New Orleans. And it took about 6 months to get home.

Enter the need for reliable mechanical ship propulsion.

Beginning in his teens as a surveyor for the 6th Lord Fairfax, George Washington became enamored with the idea of inland navigation – that is, using streams, canals, rivers, and lakes to transport people and goods instead of the ocean. During his tenure as a surveyor, then an engineer, then a general, he never lost sight of what he viewed as the budding nation’s biggest hurdle to westward expansion – the overwhelmingly high cost of transporting goods from east to west, and vice versa. Along the coast, transport was simple and cheap. But to go far inland made prices exorbitantly high for both consumers and shippers – which made markets hard to tap.

The initial days of the steam wars are proof that ideas are worthless. Stationary steam engines, like those made by Boulton & Watt were too heavy and inefficient to possibly consider putting on a boat – at any scale. So while the idea of steam-powered travel had been running around folks’ minds for 20+ years by the time Rumsey built his simple mechanical boat, there was no way to practically use it.

What was needed were major improvements on steam engine design and implementation before wider applications for their power could be found. This is where the steamboat wars start to become exciting. Independently, Rumsey and a man named John Fitch (with his business partner) developed the pipe boiler which reduced the amount of water needed for operating an engine for the same power output, increased fuel efficiency, cut heating time, and lightened the engine itself. Traditional steam engines used a pot boiler – effectively a massive tank of water that would be heated in gestalt. As anyone who has ever timed how long it takes to start boiling water in a tea kettle vs a stock pot knows, water is very difficult to heat, and lots of energy is needed to move it even a couple degrees.

The fact is, that one new idea leads to another, that to a third, and so on through a course of time until someone, with whom none of these ideas was original, combines all together, and produces what is justly called a new invention. –Thomas Jefferson

Fascinatingly, Thomas Jefferson was against the idea of patents and copyright law, and likely would have campaigned heavily against it in the Constitutional process had he not been Minister to France. From a letter he wrote years after serving on the first Patent Commission Board:

He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me. That ideas should freely spread from one to another over the globe for the moral and mutual instruction of man, and improvement of his condition, seems to have been peculiarly and benevolently designed by nature… Inventions then cannot, in nature, be a subject of property. Society may give an exclusive right to the profits arising form them, as an encouragement to men to pursue ideas which may produce utility, but this may or may not be done, according to the will and convenience of the society.

Contrast this to the efforts of both Fitch and Rumsey who lobbied for patent boards of some kind (at both the state and federal levels) between the end of the Revolutionary War and the ratification of the Unites States Constitution.

Sutcliffe’s account of the first “steamboat wars” shows that intellectual property litigation is an expensive, time-consuming, and distracting effort – whose end may or may not have any value.

Progress is an illusion, it happens, but it is slow and invariably disappointing. –George Orwell

Thornton’s condenser is undoubtedly one of the best calculated to condense without a jet of water, but I conceive the difficulty of getting rid of the air insurmountable .. when [the air] is drove back again by the steam to the cold condenser, it becomes nearly equal to common air in density, and skulks into the bottom of the condenser for security. –John Fitch (describing a new condenser design in 1790)

Based upon the extensive research Ms Sutcliffe has done into the early history and designs of steam engines and their associated mechanical conveyances, an old idea of mine has newly gained plausible validity: that of a steam-powered tank. Back in high school I postulated that both the power-to-weight and power-to-size ratio of steam engines had advanced sufficiently by the late 1850s that, in conjunction with a primitive form of caterpillar track design (which Fitch would have called an “endless chain of feet” (vs an early idea of his to use an “endless chain of paddles”)), that the first fully-mechanized war machines could have been built and sent into battle not in WWI, as the first tanks actually were, but instead during the Civil War – 50 years sooner. Leonardo Da Vinci has designed a human-powered armored car in the late 15th century. Replacing man power with steam power could have been a logical thing to have done – but no one ever did.

In the availability of men willing to persevere with a possibly “ridiculous” idea, America had an advantage. –Frank D Pager on the early successes of the Industrial Revolution in America.

Fitch and Rumsey took their war to the people in a series of “pamphlets” published over the course of many months. From Sutcliffe’s description of a “pamphlet” in this context, it seems they were the late 18th century version of a sourced blog or op-ed. Ranging from 20 to 50 (or more) pages in length, with affidavits, letters, and histories presented, the pamphlet was the common man’s research or position paper. I suppose they may have been used by others, too – but the context given in Steam shows them used as marketing and propaganda pieces.

He that studies and writes on the improvements of the arts and sciences labours to benefit generations unborn, for it is impossible that his contemporaries will pay any attention to him. –Oliver Evans

It’s the same each time with progress. First they ignore you, then they say you’re mad, then dangerous, then there’s a pause and then you can’t find anyone who disagrees with you. –Tony Benn (British Labour politician)

Seems that’s where Ghandi may have gotten the inspiration for this famous quotation:

First they ignore you, then they laugh at you, then they fight you, then you win.

Or perhaps it was Benn who was inspired by Ghandi. Or maybe they just realized the same thing independently.

April 27, 2015 · antipaucity · No Comments
Tags: , , , , , , , , , , ,  · Posted in: books, cool, engineering, firsts, history, ideas, review, trains

hey yahoo! sports – why not always post the magic number for every team?

Since the magic number (and I’ll take the example of baseball, because while I don’t get to watch them much, I do follow the Mets) is so easy to calculate, why not post it on the standings as soon as there have been games played?

This would be a good use of technology relative to baseball (or any sport).

In case you’re wondering, the math for the magic number is as follows:

G + 1 − WA − LB


  • G is the total number of games in the season
  • WA is the number of wins that Team A has in the season
  • LB is the number of losses that Team B has in the season

As of today, the magic number for the Mets is 162 + 1 – 12 – 6, or 145.

April 23, 2015 · antipaucity · No Comments
Tags: , ,  · Posted in: fun, personal

why do i use digital ocean?

Besides the fact that I have a referral code, I think Digital Ocean has done a great job of making an accessible, affordable, cloud environment for folks (like me) to spin-up and -down servers for trying new things out.

You can’t beat an average of 55 seconds to get a new server.

There are other great hosting options out there. I know folks who work at and/or use Rackspace. And AWS. Or Chunk Host.

They all have their time and place, but for me, DO has been the best option for much of what I want to do.

Their API is simple and easily-accessed, billing is straight-forward, and you can make your own templates to deploy servers from. For example, I could make a template for MooseFS Chunk servers so I could just add new ones whenever I need them to the cluster.

And I can expand/contract servers as needed, too.

April 21, 2015 · antipaucity · No Comments
Tags: ,  · Posted in: personal, technical

create your own clustered cloud storage system with moosefs and pydio

This started-off as a how-to on installing ownCloud. But their own installation procedures don’t work for the 8.0x release and CentOS 6.

Most of you know I’ve been interested in distributed / cloud storage for quite some time.

And that I find MooseFS to be fascinating. As of 2.0, MooseFS comes in two flavors – the Community Edition, and the Professional Edition. This how-to uses the CE flavor, but it’d work with the Pro version, too.

I started with the MooseFS install guide (pdf) and the Pydio quick start steps. And, as usual, I used Digital Ocean to host the cluster while I built it out. Of course, this will work with any hosting provider (even internal to your data center using something like Backblaze storage pods – I chose Digital Ocean because they have hourly pricing; Chunk Host is a “better” deal if you don’t care about hourly pricing). In many ways, this how-to is in response to my rather hackish (though quite functional) need to offer file storage in an otherwise-overloaded lab several years back. Make sure you have “private networking” (or equivalent) enabled for your VMs – don’t want to be sharing-out your MooseFS storage to just anyone :)

Also, as I’ve done in other how-tos on this blog, I’m using CentOS Linux for my distro of choice (because I’m an RHEL guy, and it shortens my learning curve).

With the introduction out of the way, here’s what I did – and what you can do, too:


  • spin-up at least 3 (4 would be better) systems (for purposes of the how-to, low-resource (512M RAM, 20G storage) machines were used; use the biggest [storage] machines you can for Chunk Servers, and the biggest [RAM] machine(s) you can for the Master(s))
    • 1 for the MooseFS Master Server (if using Pro, you want at least 2)
    • (1 or more for metaloggers – only for the Community edition, and not required)
    • 2+ for MooseFS Chunk Servers (minimum required to ensure data is available in the event of a Chunk failure)
    • 1 for ownCloud (this might be able to co-reside with the MooseFS Master – this tutorial uses a fully-separate / tiered approach)
  • make sure the servers are either all in the same data center, or that you’re not paying for inter-DC traffic
  • make sure you have “private networking” (or equivalent) enabled so you do not share your MooseFS mounts to the world
  • make sure you have some swap space on every server (may not matter, but I prefer “safe” to “sorry”) – I covered how to do this in the etherpad tutorial

MooseFS Master

  • install MooseFS master
    • curl “” > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS && curl “” > /etc/yum.repos.d/MooseFS.repo && yum -y install moosefs-master moosefs-cli
  • make changes to /etc/mfs/mfsexports.cfg
    • # Allow everything but “meta”.
    • #* / rw,alldirs,maproot=0
    • / rw,alldirs,maproot=0
  • add hostname entry to /etc/hosts
    • mfsmaster
  • start master
    • service moosefs-master start
  • see how much space is available to you (none to start)
    • mfscli -SIN

MooseFS Chunk(s)

  • install MooseFS chunk
    • curl “” > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS && curl “” > /etc/yum.repos.d/MooseFS.repo && yum -y install moosefs-chunkserver
  • add the mfsmaster line from previous steps to /etc/hosts
    • cat >> /etc/hosts
    • mfsmaster
    • <ctrl>-d
  • make your share directory
    • mkdir /mnt/mfschunks
  • add your freshly-made directory to the end of /etc/mfshdd.cfg, with a size you want to share
    • /mnt/mfschunks 15GiB
  • start the chunk
    • service moosefs-chunkserver start
  • on the MooseFS master, make sure your new space has become available
    • mfscli -SIN
  • repeat for as many chunks as you want to have

Pydio / MooseFS Client

  • install MooseFS client
    • curl “” > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS && curl “” > /etc/yum.repos.d/MooseFS.repo && yum -y install moosefs-client
  • add the mfsmaster line from previous steps to /etc/hosts
    • cat >> /etc/hosts
    • mfsmaster
    • <ctrl>-d
  • mount MooseFS share somewhere where Pydio will be able to get to it later (we’ll use a bind mount for that in a while)
    • mfsmount /mnt/mfs -H mfsmaster
  • install Apache and PHP
    • yum -y install httpd
    • yum -y install php-common
      • you need more than this, and hopefully Apache grabs it for you – I installed Nginx then uninstalled it, which brought-in all the PHP stuff I needed (and probably stuff I didn’t)
  • modify php.ini to support large files (Pydio is exclusively a webapp for now)
    • memory_limit = 384M
    • post_max_size = 256M
    • upload_max_filesize = 200M
  • grab Pydio
    • you can use either the yum method, or the manual – I picked manual
    • curl
      • URL correct as of publish date of this blog post
  • extract Pydio tgz to /var/www/html
  • move everything in /var/www/html/data to /mnt/moosefs
  • bind mount /mnt/moosefs to /var/www/html/data
    • mount –bind /mnt/moosefs /var/www/html/data
  • set ownership of all Pydio files to apache:apache
    • cd /var/www/html && chown -R apache:apache *
    • note – this will give an error such as the following screen:
    • Screen Shot 2015-04-20 at 16.32.48this is “ok” – but don’t leave it like this (good enough for a how-to, not production)
  • start Pydio wizard
  • fill-in forms as they say they should be (admin, etc)
    • I picked “No DB” for this tutorial – you should use a database if you want to roll this out “for real”
  • login and starting using it

Screen Shot 2015-04-20 at 17.07.51

Now what?

Why would you want to do this? Maybe you need an in-house shared/shareable storage environment for your company / organization / school / etc. Maybe you’re just a geek who likes to play with new things. Or maybe you want to get into the reselling business, and being able to offer a redundant, clustered, cloud, on-demand type storage service is something you, or your customers, would find profitable.

Caveats of the above how-to:

  • nothing about this example is “production-level” in any manner (I used Digital Ocean droplets at the very small end of the spectrum (512M memory, 20G storage, 1 CPU))
    • there is a [somewhat outdated] sizing guide for ownCloud (pdf) that shows just how much it wants for resources in anything other than a toy deployment
    • Pydio is pretty light on its basic requirements – which also helped this how-to out
    • while MooseFS is leaner when it comes to system requirements, it still shouldn’t be nerfed by being stuck on small machines
  • you shouldn’t be managing hostnames via /etc/hosts – you should be using DNS
    • DNS settings are far more than I wanted to deal with in this tutorial
  • security has, intentionally, been ignored in this how-to
    • just like verifying your inputs is ignored in the vast majority of programming classes, I ignored security considerations (other than putting the MooseFS servers on non-public-facing IPs)
    • don’t be dumb about security – it’s a real issue, and one you need to plan-in from the very start
      • DO encrypt your file systems
      • DO ensure your passwords are complex (and used rarely)
      • DO use key-based authentication wherever possible
      • DON’T be naive
  • you should be on the mailing list for MooseFS and Pydio forum.
    • the communities are excellent, and have been extremely helpful to me, even as a lurker
  • I cannot answer more than basic questions about any of the tools used herein
  • why I picked what I picked and did it the way I did
    • I picked MooseFS because it seems the easiest to run
    • I picked Pydio because the ownCloud docs were borked for the 8.0x release on CentOS 6 – and it seems better than alternatives I could find (Seafile, etc) for this tutorial
    • I wanted to use ownCloud because it has clients for everywhere (iOS, Android, web, etc)
    • I have no affiliation with either MooseFS or Pydio beyond thinking they’re cool
    • I like learning new things and showing them off to others

Final thoughts

Please go make this better and show-off what you did that was smarter, more efficient, cheaper, faster, etc. Turn it into something you could deploy as an AMID on AWS. Or Docker containers. Or something I couldn’t imagine. Everything on this site is licensed under the CC BY 3.0 – have fun with what you find, make it awesomer, and then tell everyone else about it.

I think I’ll give LizardFS a try next time – their architecture is, diagrammatically, identical to the “pro” edition of MooseFS. And it’d be fun to have experience with more than one solution.

April 21, 2015 · antipaucity · One Comment
Tags: , , , , , , , ,  · Posted in: personal, technical, tutorial

keep your wordpress installs up-to-date

I run several websites on my server – nothing heavy, just some various vhosts for Apache.

Many (but not all) of them run WordPress.

At some unknown point (and I haven’t kept the crap that was being used around), over 100,000 files were uploaded to the root directory of one of the websites (the only one, apparently, I did not have cron’d to keep up-to-date with the latest-and-greatest version of WordPress) – most of these were random-named HTML or JavaScript files. Sometime late Thursday night / early Friday morning of last week, some number of those were triggered which launched a DDoS (distributed denial-of-service) attack against a hosting company in England.

After a relatively short period of time (on the order of a couple hours at most), this otherwise-low-traffic site generated 48MB in Apache httpd logs (normal for a given day is on the order of a few dozen to couple hundred kilobytes).

My hosting provider, with no warning, “locked” my server, and sent me an administrative message with the following cryptic email:

Your server with the above-mentioned IP address has carried out an attack on another server on the Internet.

This has placed a considerable strain on network resources and, as a result, a segment of our network has been adversely affected.

Your server has therefore been deactivated as a precautionary measure.

A corresponding log history is attached at the end of this email.

10:00:21.645887 14:da:e9:b3:97:dc > 28:c0:da:46:26:0d, ethertype IPv4 (0x0800), length 1514: > ip-proto-17
10:00:21.646166 14:da:e9:b3:97:dc > 28:c0:da:46:26:0d, ethertype IPv4 (0x0800), length 1514: > ip-proto-17
10:00:21.649166 14:da:e9:b3:97:dc > 28:c0:da:46:26:0d, ethertype IPv4 (0x0800), length 1514: > ip-proto-17
10:00:21.649416 14:da:e9:b3:97:dc > 28:c0:da:46:26:0d, ethertype IPv4 (0x0800), length 1514: > ip-proto-17
10:00:21.649421 14:da:e9:b3:97:dc > 28:c0:da:46:26:0d, ethertype IPv4 (0x0800), length 1514: > UDP, length 8192

Gee, thanks, hosting company – that was informative.

After several hours of back-and-forth with their support group, I was finally able to get a rescue boot environment enabled, a KVM session to that environment, and could start diagnosing the problem(s). First, of course, were the normal checks of dmesg, /var/log/messages, and the like. there was running dig to find out who was being attacked (how I found the target IP belonged to a hosting provider in the UK). Nothing. I was also Googling similar error messages, and finally found a clue (though cannot recall where) that malicious JavaScript can cause messages like those provided to me to be trapped by external logging systems.

This led me to look in /var/log/httpd instead of just /var/log. And there is where I found the unusual log file for my LUG’s website here in Kentucky – bglug-access_log was 48 megabytes. And bglug-error_log was 4.3 MB. As I mentioned above, a typical access_log for that site is closer to ~100 KB.

Opening the ginormous log file showed a host of HTTP 200 response codes for things that looked nothing like WordPress files (things like “qdlrdi-casio-parliament-90treaty.html”). There shouldn’t be HTTP 200 (OK) response codes for non-WordPress files, because it’s a WordPress-powered website.

Running a file listing to screen failed (in the rescue boot environment) – but doing an ls -l > files.out, and then a wc -l files.out showed over 105,000 files in the root directory of the BGLUG website.

To get my server back up and online as quickly as possible, I edited the Apache vhosts.conf and disabled the Blue Grass Linux User Group site and contacted my hosting company as to what the root cause of the issue was, and what I had done to fix it (both needed for them to reenable my system).

After getting the server back online normally, I was able to clear-out all the junk that had been transparently uploaded into the LUG’s site.

One of the biggest annoyances of the whole process (after not having been given any warning from my hosting provider, but just a summary disconnect) was that permissions on the directory for the website were “correct” to have disallowed uploading random junk to the server:
drwxr-xr-x 6 bglug apache 5611520 Apr 11 13:24 bglug

The user bglug had not been compromised (it hasn’t even logged-in in a few months) – and neither was the apache group (which, of course, cannot login, but still).

Apparently, some part of the version of WordPress the site was running (or a plugin) was compromised, and allowed a malicious attacker to upload junk to the server, and spawn this DDoS on my server.

Moral of the story? Keep all your software up-to-date, and monitor your logs for suspicious activity – not sure monitoring would’ve done me good in this case, but it’s a Good Practice™ anyway.

April 13, 2015 · antipaucity · 2 Comments
Tags: , , , , , ,  · Posted in: bglug, technical, warning

the loss of the shared social experience

On a recent trip I met up with an old friend and his wife for dinner. As conversation progressed, I mentioned my wife and I have been watching M*A*S*H on Netflix. Waxing nostalgic for a moment, he told me that his parents let him stay up to watch the series finale in 1983.

And then he said something that I found fascinating: “you know, there’s nothing like that today – there’s no shared social experience you can expect to talk about the next day with your coworkers, friends, etc.”

And it’s true – sure, there are local shared experiences (NCAA games, etc), but there is nothing in today’s society that brings us all to the same place (even separately) like TV did in the pre-streaming and -DVR era.

There used to be top-rated programs that you could reasonably expect that a high percentage of your coworkers watched (M*A*S*H, The Cosby Show, ER, Friends, Cheers, All in the Family, Family Matters, etc). There still are highly-rated programs – but they’re very very different from what they used to be. Some of this, of course, comes from the rise of cable networks’ programming efforts (The Sopranos, Mythbusters, Mad Men, Breaking Bad, Game of Thrones, Stargate SG1, The Walking Dead, Switched at Birth, Secret Life of the American Teenager, Outlander, and more). Some of this comes from the efforts of streaming providers (House of Cards, Orange is the new Black, Farmed and Dangerous, etc). And there are still great shows on broadcast TV (Once Upon a time, CSI, Person of Interest, etc). But they’re different than what they used to be.

Not different merely because of better acting (sometimes it’s worse), better writing (same critique applies), better filming (Revolution – I’m looking at you as the antiexample of good filming, and why you got canceled after just two seasons), better marketing, or better special effects.

But mostly they’re different it’s because we, as a culture, have decided we do not want to be tied to an arbitrary time-table dictated to us by the Powers That Be™ at The Networks™. With the rise in un-tie-ability given to consumers, first with VCRs, then VCR+, then TiVo, and now DVRs and streaming options everywhere, even though we’ve been getting bilked on film time (an “hour long” program in the early 80s was 48-49 minutes of screen time, today it’s ~42 minutes – that’s a huge amount of added advertising time) from our programs, we have ways of compressing and massaging our watching to our personal schedules. Can’t be home in time to catch insert-name-of-series-here? No problem! It’ll be on Hulu or Amazon Prime tomorrow, or your DVR will catch it for you. Or it’ll be on Netflix in a few months.

And if you get it on Amazon Prime or Netflix, there’ll be no ads. Hulu may have a few, but they’re still shorter than what was shown on ABC the night before.

It used to be that the Superbowl was a major sporting event at the beginning of each year when the culmination of 17 weeks of regular season play, and a few playoff games, showed us just who was the best football team out there.

No more.

Now the Superbowl is a chance to see new commercials from scores of companies – each of whom has spent millions just to get the ad on TV, let alone film it – and maybe catch a little bit of a game on the side. (Unless you happen to care about the Seattle Seahawks – but I digress.)

Before widespread adoption of TV, the shared social experience would’ve had to have surrounded radio programs (perhaps The Lone Ranger, or Orson Welles’ production of The War of the Worlds).

And prior to widespread radio, what shared social experiences did society (not just little pockets) have? Gladiatorial combat in ancient Rome? The Olympic Games?

Which really means that shared social experiences a la the M*A*S*H finale are an historical aberration – something that came to be less than a century ago, and which lasted less than a century. Something as fleeting as the reign of clipper ships in transport, from a grand historical perspective.

And maybe that’s a Good Thing™ – society being drawn together over common experiences isn’t, necessarily, bad: but is it necessarily good? That’s the question that has been bugging me these last couple weeks – and which probably will for some time to come.

What say you – is it a loss, a gain, or just a fact that these shared social experiences are no more?

April 8, 2015 · antipaucity · No Comments
Tags: , ,  · Posted in: commentary

please reply at top

There is a constant war over top-repliers, bottom-repliers, and inline-repliers.

If you’re replying to an email, reply at the top. Unless there is some overarching need to reply inline (hint – it is very very rare).

Bottom-replying makes me have to reread all the crap that has been left from previous messages before I get to what you wrote – what a phenomenal waste of time*!

Just reply at the top. Like every sane person does.


*Yes, you should also trim whatever you don’t need when you reply – but that’s another story.

April 1, 2015 · antipaucity · No Comments
Tags:  · Posted in: commentary, complaint, rant, technical

ifttt & box drive my desktop backgrounds … with a little cron happiness

I love that OS X lets me change my background on a schedule (I use every 30 minutes now).

But I don’t like having to find pictures to populate my desktop menagerie with.

Enter completely SFW backgrounds via RSS feeds!

Using IFTTT, I watch for new items from a variety of daily photo feeds, and upload the new items to a folder in my Box account. I have that folder set to be the source for my desktop backgrounds, and bingo bango we have automated new images coming to enjoy!

The recipe I’m using is available for you to grab here. (I have several running, but you can use any RSS feed you’d like.)

Also, to ensure I don’t end up with duplicate images (eg from the Bing images feed), I have the following running as a cron job (thanks to Unix.SE for helping me figure it out):

md5 -r * | sort | awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' | xargs rm

That script removes any files with duplicate MD5 sums from the folder I keep the images in (note – you should put the actual path to your folder in your cron job).

March 26, 2015 · antipaucity · No Comments
Tags: , , , ,  · Posted in: fun, technical

seems i’m not the only one who thinks apple could make cars

Dallas News ran a story recently on Apple being positioned to be a car maker.

Their reasoning:

  1. Cash (~$180B)
  2. It’s “ultimately” mobile
  3. They have “car guys” already
  4. Strong retail network
  5. They’re already global

I think it more likely they’d buy an existing manufacturer, and then Apple-ify them – but the arguments are strong that an Apple Car will be here sooner rather than later.

March 16, 2015 · antipaucity · No Comments
Tags: ,  · Posted in: commentary

my tech predictions for 2015

I put these up as a comment on – but they deserve sharing here, too.

In no particular order:
HP-UX retired
Itanium EoL’d (perhaps on an accelerated schedule)
– Solaris truly open-sourced / abandoned by Oracle in favor of OEL
– HP spins-off more business units
– IBM loses 25-35% of its value – and spins-off / sells more business units to make Wall Street happy
– POWER continues to slow; IBM doesn’t understand it needs to stop putting so much money into it until all the engineers have been fired
Z/OS systems grow dramatically – the only place IBM makes *more* money
– people finally realize “cloud” isn’t a “thing” – it’s just renting crap when you need it (perhaps from yourself (private cloud)) and giving it back when you don’t
cloud hosting providers cut prices so things like AWS instances are no longer more expensive than dedicated hardware (see eg
– enough of the Old Guard hits retirement age that New School tech can finally make big inroads into stodgy businesses and government (automation, cloud, *aaS, etc)
– buzzword-compliance becomes necessary even for mom-and-pop shops who don’t have computers
Android 6 brings native, “real” 3D to cell phones
– … and iOS 9 makes it look “good”
– there’s a new MacBook Flex that offers touchscreen, a fold-flat-reverse form factor, and 12 hours of battery life; the iPad 5 is the first 5K resolution tablet, with a full day of battery life
– Max OS 10.11, aka Denali, allows users to run iOS apps via a “fat binary” model (harking back to the shift to PowerPC from 68k and then again x86 from PowerPC)
– Apple announces the first non-x86 Macs (starting with the Flex)
Apple buys a car company in cashPorsche or Hyundai (Hyundai would be the smart move – get more electronics manufacturing capability in-house; spin-off heavy industry wing)
Tesla introduces a model that non-millionaires can afford – bringing snazzy competition to the Volt price point
SpaceX sends a mission to Venus, and another to Mars
Square opens an online bank
Uber and Lyft grow, win cases against taxi companies – and local competition pops-up all over the country
– several major metro areas across the US all enter the “gigacity” club
– … but it’s led with smaller metro areas (like Chattanooga has already done)

February 12, 2015 · antipaucity · One Comment
Tags:  · Posted in: commentary