See the thing I made

I wrote an article for the Red Hat Developers Blog. I haven’t felt much like blogging this year, but there’s one thing at least. If I have articles I think would be of outside interest, I’ll probably post them over there. This blog should return to its original purpose, which was for me to blather about my frustrations and solutions in a kind of stream of consciousness.

The 7 easy steps TIME VAMPIRES hope you won’t use. #6 changed my life!

Vampire Kitty

Picture by Faris Algosaibi, under CC by 2.0 license ( Cropped from original.

You sit down after dinner to research a few home improvement ideas on the web. A funny picture with a link catches your eye and… when bed time rolls around you’ve read fourteen motivational stories, watched a series of skateboarding turkey videos, grumbled on Facebook about obviously corrupt politicians in another state, shared some really pretty pictures of Antarctica you found, and not done any research! How did this happen? How does this keep happening?

How well you adapt for the rest of the 21st century will depend mainly on how well you defend against the distractions and outright manipulation in the increasing stream of available information. With the rise of social media, the voices screaming “look at me!” have shifted tactics – not only are they trying to get your attention, they’re trying to hijack your friends list. It didn’t take long to discover how to push our buttons; the psychological techniques are becoming well-known and ubiquitous. Every social media whore dreams of “going viral” and will post any outrageous thing if it gets a few million hits to their crappy ad farm.

“Go viral” is a good term for it; these are attention viruses spread via social media, using your resources as a host body to spread themselves. In addition to wasting your time, they tend to be inflammatory, misleading, and low in information. They make the internet a worse place. And I, for one, have gotten sick of seeing the same kinds of headlines trying to suck me in, the same kind of misdirection and manipulation stirring the internet’s collective psyche.

The good news is that you can fight back. The enemy may have your number, but you can learn to recognize the manipulation and avoid it. Here are some current ways – but rest assured that their bag of tricks will continue to adapt (you might want to run a search every so often for the latest).

1. Avoid posts with numbers in the title

Perhaps it’s the sense of accomplishment we feel as we tick through the list. Perhaps it’s the curiosity to see “are there *really* (only) that many?” Perhaps it’s just to see if we’re already smart enough to know the whole list. Maybe numbers are inherently more credible. Whatever the reason, social media experts have figured out that we will pretty much click on (and share) any damn thing presented as a numbered list. Even if you know it will probably tell you nothing new. (Numbered lists aren’t the only offenders; consider, for example, the trend of “99% will fail this simple test!” articles.)

Actual news is not presented as “25 things you didn’t know about XYZ”. Useful advice is not presented as “4 easy steps”. In fact, it’s incredibly rare for it to have any number at all in the title. So if it does, that’s a red flag: you can feel simultaneously smug and smarter about skipping this link because it is undoubtedly an attention virus.

Especially with an addendum like “Number X blew my mind!”

2. Avoid titles with emotionally charged words

“Shocking!” “Amazing!” “You won’t believe…” “Blown away” “Can’t stop laughing/crying” “Epic” ALL CAPS!

These and other attention-seeking techniques are used exclusively by attention-desperate social media whores. Not by actually informative articles. Not by people who have a purpose for writing other than maximizing clicks and shares. It is manipulation, pure and simple. The more prevalent this sort of thing becomes, the more it drowns out balanced, informative writing on the internet. And the more you read it, the more often your blood pressure and cortisol levels will rise needlessly. Don’t click that link! Don’t do it!

3. Avoid posts that you react to with “no way!” or “oh yeah?”

If you can feel your eyebrows rising just from reading the headline (police brutality, stupid politician tricks, “you’ll never guess”), you can bet it’s deliberately misleading in order to shock you and draw you in. Resist. And for the love of Bog, don’t get drawn into threads 100 comments long by people who didn’t even read the article. You will accomplish nothing but making yourself and perhaps a few others angry. Don’t bother unless you’re a troll and that’s how you get your lulz.

4. If you find yourself reading an attention virus, at least avoid sharing it

So you might enjoy following Facebook links for some meaningless entertainment from time to time. I get it. But… do you have to infect your friends too? Do you have to reward these time vampires?

No. You don’t. In fact, with the Information Deluge unfolding this century, it’s your responsibility not to.

If (perhaps by accident) you find yourself visiting one of these, at least keep it to yourself. You cover your mouth when you cough and sneeze, right? Have the same courtesy for your readers’ brains. Or are you one of those people still forwarding stupid chain letters?

5. Use ad-blocking browser plugins

The push for sensationalizing the internet is all about displaying ads. More clicks mean more ad views and more revenue. If you kill the ad revenue, you stop rewarding the behavior.

Also, you don’t need to waste your attention on ads. I have basically never seen an ad on Facebook. I don’t really see any ads on the web other than the occasional text ad or YouTube intro. How? I’ve been using ad-blocking software since it was an esoteric art requiring running a local proxy and manually tweaking browser settings and blacklist entries.

It’s a lot easier now. For years it’s been as easy as searching for browser plugins and clicking a few buttons to install them. I know about AdBlock+ for FireFox and AdBlock+ for Chrome. If you’re using something else there’s probably a plugin for that too (even for mobile).

Personally, I think advertising funding is a blight on the internet (“you won’t believe” I once worked for an advertising startup) and would like to see it destroyed in favor of other models. If you disagree and feel morally obliged to allow websites to manipulate your mind in return for the benefit they bring you (or even find targeted ads actually – choke! – informative), you can usually configure an ad-blocker to allow ads selectively, and still starve the time vampires you stumble upon.

6. Use site-blocking browser plugins

Self-restraint is a great thing to cultivate, but most of us would admit to needing a little help. And the wonderful thing about the information age is that there are tools to help you… automatically.

You can use site-blocker plugins to block whole sites that you know are full of trash, or just to restrict the amount of time that you waste at them. For example, BlockSite for Chrome and BlockSite for Firefox can block sites at specified times and days of the week. Also consider StayFocusd for Chrome, which tracks and limits the time you waste as well as providing a “nuclear option” to block all “bad” sites or allow only “good” sites for a few hours to help you concentrate. LeechBlock for Firefox appears similar. These double as procrastination-blockers, useful beyond simple avoidance of attention viruses.

Consider blocking all of the most addictive sites on the internet or pretty much anything linked from Buzzfeed (they recommend blocking themselves!). Or just look through your browser history to see where the time goes.

7. Filter your news sources

The easiest way to save money is to have it automatically deducted from your paycheck. You don’t miss the money you never see. Similarly, the easiest way to reserve your attention for worthy topics is to block ones you know tend to be trash. You don’t have to decide to ignore the tripe you never see.

Spam, trolls, and general “noise” have all been with us since the dawn of the internet. News-readers on usenet used killfiles to automatically ignore posts. Once email became a cesspool of spam and phishing, filtering became a standard tool there too (some services automating it with great sophistication). Social networking may take a little longer because frankly, Facebook’s profits are built on sucking you in and using your friends list and interests to advertise to you. It’s unlikely they’ll be providing useful automated filters of any variety soon.

Sick of the clutter on Facebook? Try F.B. Purity. It’s a browser plugin that essentially rewrites the Facebook interface, allowing you to filter out what you don’t want (hopefully this post has given you some good ideas). It’s pretty easy to install; just be aware that Facebook’s interface is changing all the time, and when it does you may experience bizarre glitches due to a mismatch between what Facebook provides and what F.B. Purity expects, at which point you’ll need to (1) recognize what’s going on (2) possibly wait for an update from FBP or just disable it for a while, and (3) update FBP. So this isn’t for everyone, but it’s what’s available right now. Perhaps other social networks that aren’t as invested in cramming junk in your face will lead the way in enabling filtering, forcing Facebook to do the same. Or perhaps Facebook will become irrelevant. I don’t know what will happen, but if users don’t start valuing the ability, it won’t appear of its own accord. I suggest taking matters into your own hands.

Other sources often do provide methods of filtering, or there may be a browser plugin to enable it. Search for these and use them.


Am I aware of the irony/hypocrisy inherent in this post at multiple levels? Yes; yes, I am.

But now you know. If you make this post the last time you’re ever roped in by these tactics, I can die happy.

Now share this with all your friends, and leave some comments below!

Break explained, more posts coming

The blog has been pretty quiet lately. It’s not just because I rejoined Red Hat in May and began working on OpenShift Enterprise. I mean, that does keep me busy, but actually I have to work that in around the edges sometimes. My wife and I had our second child in June. The child is fine, but the wife has not been fine at all, so in addition to juggling a toddler and an infant (and childcare for same), I’ve been going to doctors visits, ER visits, hospital visits, caretaking, and so forth. And when I had a spare minute where nobody needed me, like at 2am, I’d actually try to get some work done. Needless to say, blogging didn’t come high on the list of priorities.

I think this is slowly changing, and I hope I’ll have time soon to talk about some of the things I’ve discovered while working on OpenShift. It’s been fun and educational.

Fiddling around on Apr. 3rd

The “New Post” link at the top of WordPress goes to a new post form devoid of useful options. Now why would WordPress want to make that the standard?

Discovered today that some versions of Spring Insight (even developer version) wouldn’t deploy if the hostname it’s on doesn’t resolve properly in DNS. Doesn’t that describe most developer workstations? Version 1.5.1 doesn’t seem to have this problem though.

Discovered Eclipse/STS Window->Customize Perspective today. It lets me choose which things go on the top toolbar and the top menubars. It doesn’t let me re-order them, and it doesn’t seem to change the right-click context menus, but this does help clear up a lot of clutter. I don’t really use the toolbar – I should probably either remove it (can I do that?) or put really useful stuff on there. And now I kind of want to go through the list of items and find out what they all do…

I also got seriously derailed trying to change system appearance settings in Fedora. It really needs an “undo” button.

And I spent a bit of time fiddling with STS trying to bend the tc Server instances to my will. There doesn’t seem to be a guide anywhere to what all the terms mean. I think I’ll write one up tomorrow or sometime.

What does a tech support geek do all day anyway?

I hate to let a calendar month go by with no post.

Though hey, I’m so far behind on reading my web comics, I don’t even know how far behind I am anymore. That’s when you know it’s serious.

Being a parent and keeping things from falling apart has pretty much taken up all my energy outside work at this point. It takes up a lot of time, too, but the real constraint is energy and enthusiasm. It’s hard to really get into anything significant that you know will probably be interrupted soon. Thus I haven’t even gotten around to checking out the Android-friendly ORMlite updates. Someday!

At least some of the arcane stuff I’ve been working on for my day job is publicly visible! Too bad VMware doesn’t really have a way for KB authors to sign our work, but here are a few bits of interest in the web server / application server world…

I have some in the pipeline to attempt to finally explain Tomcat auto-deployment and logging in a way that a non-expert can follow and use (I dare say the engineers are too close to their work). I should work on the official docs, but that’s not officially part of my goals… if I could get someone to pay me for it, I probably would. I think I have something of a gift for technical docs. It just takes me such a long time, I doubt anyone would consider it worth funding. At the same time, I don’t want to quit doing actual technical work in order to document it.

Maybe soon I’ll document my journey of trying to use Fedora 16 for my workstation (VPNs… virtualization… and dual monitors, oh my!)

Is this thing on? ::feedback:: ouch…

Well – I don’t want to let the *entire* month of March go by without a post. I just haven’t done much with tech this month, though. It sucked. But evidently my absence has caused a surge in popularity, according to my stats. Less is more?

If I remember correctly – is Honeycomb the first version of Android where we actually saw a preview, got to fiddle with the SDK platform preview before it was actually embodied in a device? If so, better late than never, and let’s hope it means we’re on the way to seeing more of a community effort. Hey, it took a while for Red Hat to learn with Fedora, too, and they didn’t have voracious proprietary partners to contend with.

I have a meetup or two to arrange, but I hope I get some time to work further with ORMlite shortly.

Happy April Fools Day tomorrow!

Exploring ApiDemos; misc Android

Android 1.5 is down below 8% market share. If my wife’s Cliq ever gets an upgrade I’m dropping that platform like a hot potato. What’s interesting is that Eclair is actually still more common than Froyo (40%) – you’d think if they’ve done the work to get the device to 2.1, and seen how quickly versions change, it shouldn’t be too big a step to 2.2. Oh well.

I’ve been looking through ApiDemos to learn. While most of the demo classes seem well-commented, amusingly the file itself is not, and it does some non-obvious things involving searching the package manager for intents to dynamically create the lists being browsed. The upshot is it’s less than obvious how to find the sample code that matches the sample functionality you browse to – nothing tells you how to make the mapping, and it’s not always obvious. The actual mapping is between the label listed in the AndroidManifest.xml file for the activity (which is what you see in the app’s list browser, except that in many cases the actual text is in the strings.xml file) and the class name listed with it, e.g.:

<activity android:name=".view.Tabs1" android:label="Views/Tabs/Content By Id">

I would argue that the mapping between what you see (Views/Tabs/Content By Id – which again is often in strings.xml for no good reason I can see) and the class ( is far from obvious. Call me crazy, I think a README or at least a couple lines of comments in the main class would be in order. I should submit a patch.

Found a little nugget in (which is otherwise empty):

PreferenceManager.setDefaultValues(this, R.xml.default_values, false);

This is a one-time setting of default prefs. Now of course, default_values.xml couldn’t be something simple like key-value pairs. It’s a PreferenceScreen like you would use for defining a PreferenceActivity. You wouldn’t know about those from the dev guide, unless you like decyphering reference docs. But as it happens I learned about these at some point and created a prefs screen with them in LogMyLife… which currently has no effect, so I need to do something about that.

I finally got around to gathering sources for the 2.2 platform to attach in Eclipse. I’ll have to update my article one of these days. Aside from the new sources, I should include the Apache license files in order to be proper.

I’m looking at migrating this blog to Blogspot. WordPress has neat themes but it deliberately blocks integration with tools like Adsense and Google Analytics. Also this editor drives me nuts. We’ll see.

Android UI – making the simple things virtually impossible

Know what I need? A “Stupid Android UI Tricks” book. I swear, there’s just so much about programming the native UI that just seems completely random and ass-backward. Are all UI APIs this bad?

Here’s the latest fun: I created a dialog where you can enter something in a text editor field. Only, you can’t on my Nexus, because the soft keyboard won’t come up. I don’t know if that’s normal behavior or if I attached something to the field that gets in the way of the keyboard showing up. I thought maybe it was the OnFocusChangeListener I’d set, but I commented that bit out and it still won’t come up. As an aside, sort of, it’s stupid that you can only add one listener for any given event. I have a dialog where I attach a listener in the generic superclass, and then I want to add to that event’s behavior in a subclass. Can’t  do it. I’d have to duplicate or proxy all of the behavior from the parent listener. Where’s the reuse of code? Why aren’t listeners all implemented as daisy chains?

While I’m ranting, why do I even bother creating dialogs? Every time I do, I find something about its intended behavior that requires an Activity to be in play. The latest: I have a dialog where I want to let the user pick a ringtone. Problem is, the only API exposed for this involves a call to startActivityForResult, and how is that result returned? By the onActivityResult callback on the calling Activity. So if you have a dialog and want the user to pick a ringtone, you have to get the Activity to relay the result to the dialog, which means recording the current dialog in a field somewhere in the activity, and adding a callback method on the activity that could have been totally avoided just by adding an implementation of startActivityForResult that accepted a listener for the result. Would that be so hard? Anyway I think the lesson is to create all non-trivial dialogs as Activities that are just styled as dialogs.

Back to the problem at hand. What else might be going on with my missing keyboard? Here’s someone with a similar problem, (and a long thread on the same topic), though I think they’re just not getting the keyboard at dialog start, not failing to get it ever. Anyway I shouldn’t have to add a listener just to get a keyboard. That’s ridiculous. Android should handle this automatically. What could I be doing that’s interfering?

BTW, its layout looks like this:

 android:layout_width="wrap_content" />

I created a completely unattached text editor (no listeners or anything) in my dialog and also couldn’t get a keyboard to come up for that.

Another random ranty aside: seriously, WordPress, why is the post input text area so small by default? The post is the center of attention; it should be as big as possible without crowding out the editing icons. Yeah, I know I can drag around the corner to resize, but I don’t wanna, ok?

back after a break

It’s kind of gratifying to check the logs and see that people are still ending up at my little blog here even when I’m away having a baby for a month! Hope visitors found something useful.

I’ve had some troubles with DD-WRT since trying it out, just thought I’d note them. The first, major one was that all of the sudden the DHCP server stopped working. It just wouldn’t hand out IPs anymore – existing ones worked fine. I ended up resetting the router and losing configuration over that one. Then one day in the middle of a Skype session I simply lost connectivity. The router was up but I couldn’t ping the gateway for my ISP. I cursed the ISP at first but eventually figured out it wasn’t them, and a quick router reboot actually solved it. But this is disconcerting. Maybe I need a firmware upgrade, haven’t been paying attention.

Demoed WhenDidI at my Android meetup on Wednesday, and folks seemed to think it had good potential and were interested in how it worked. We started talking about the future log analysis capabilities, adding geotags to entries, sharing trackers between multiple people, etc. – stuff that’s mostly way in the future unfortunately, but interesting.

Twitter-turfing? Astro-Twurfing? Need a good name

I often post a link to my blog entries via my Twitter account, and I’m getting a number of “comments” on the posts from automated services that apparently track tweets (so far, all mine) linking blog posts and try to submit them as comments back to the post, linking to themselves of course. This could be a useful service maybe, if someone wanted to see who was Tweeting about their post. But it strikes me that it’s more an attempt to get lots of posts linking to their service and increase their rank in search engines, basically little different from the more obvious spam comments. Is there a name for this?