Original at truthdig.com
In the wake of Donald Trump’s victory in the U.S. presidential election, Republicans are taking the opportunity to scold progressives about living in an echo chamber and failing to take a moment to sample thought patterns of the Right.
Well I did, but I came to the conclusion that most is still complete rubbish. In fact, according to Sturgeon’s Law, 90% of everything is crap. So don’t take it personally.
There are two problems with echo chambers. First they are chambers. Big walled-off areas that make it hard to hear the echoes from the adjacent chambers. To come to my own defence, I’ve peeked into the streams of my conservative friends. Sorry, you’re all great, but I don’t like what I see. One step beyond my immediate friends, I see rudeness, crudeness, profanity and little thoughtful analysis. Make a logical argument, bring evidence and I’ll listen. But “Lock that bitch up!”? What am I to do with that? Of course, the progressives have their own versions of the echo. But then there are the echoes themselves.
It’s the echoes that are bothering me mostly now.
The echoes have become a cacophony. Thoughts colliding against the walls, amplifying and distorting one another. It’s exhausting and anxiety provoking.
I’m trying something new. I’m dipping into the information stream on a need-to-know basis. Someone asks my opinion about the election of the U.S. president once every four years. And they ask about legislators on their own cycles. So I’ll check back on U.S. politics then. Seriously. Who is Trump going to pick for his Cabinet? Who will he nominate for the Supreme Court? I’m sure it’s all very fascinating. But I can’t do anything about it. And neither can you. Posting it on your FB feed. Liking this, liking that. It’s nothing. I’ll dip back into politics when I’m asked to vote. Otherwise what’s the point. Being informed? Being informed so that you can do what, exactly? So you participate in the Internet outrage du jour? FOMO?
Here’s my program:
- I’m taking a week off all news and social media. Pushing the reset button.
- I’ve deleted FB and Twitter from my phone. I’m not going anywhere. I haven’t resigned in protest. It’s just not helping me make better decisions.
- I’ve deleted all bookmarks to news sites.
- After a week, I’ll check back with FB. But my resolutions are:
- To spend no more that 10 minutes a day looking at FB.
- To log in to FB no more than once a day.
- To post something no more than once a week. Probably pictures of dogs, children, that sort of thing.
- To not post, like, or otherwise react to items of a political nature. Just to be clear, I still think Donald Trump is a neurotic pussy-grabbing clown, but now that you know that, we’re good.
- For news sites, I’ll check back when I need to act on something and when I need more information in order to act. It’s all very interesting but I’m not sure what I’ll do with it.
I’m calling it goal-oriented news gathering.
As I’ve mentioned before I use Anki extensively to memorize and practice Russian vocabulary. With language learning in particular, adding spoken pronunciations to the cards makes an enormous difference. Since I use Open Russian extensively to provide information to built my Anki cards, it’s a natural source of audio data, too. To optimize my learning time, I built two small scripts to grab and rename the audio files from the Open Russian site. First, I’ll describe my workflow.
My vocabulary workflow
Each morning, I pull 6 words from the a Russian word frequency list to add to my Anki deck. With each word, I use Open Russian to look up the complete definition, example sentences, syllabic stress, and other pieces of information that go on the flashcard. To facilitate OpenRussian.org opening in its own dedicate browser window, I built a Fluid application out of it. Having common workflow-related sites like this in their own dedication applications makes a lot of sense for task isolation.
Finally, for many words, I like to extract the audio from the site and add it to the card that I’m building. It turns out to be a cumbersome step because the audio doesn’t play in a QuickTime or other player that allows me to save the file. The source sound files can be downloaded from Shtooka but this is yet another step. This is where my enhanced workflow comes in.
What should the enhanced workflow do?
Optimally, I should be able to grab the URL that is displayed in the Open Russian Fluid application. Using the content of that page, I should be able to obtain the URL of the mp3 file for that word and save it to the desktop using the Russian word as the filename.
First is a Python application that grabs the URL from the Fluid app, extracts the audio file URL, and downloads it to the desktop.
To make this even faster, I assigned the script to a Quicksilver keystroke trigger. It’s that simple. Once little twist that I discovered was that difficulty in launching a Python application from a Quicksilver trigger. Although there must be an easier way, I haven’t found it. Instead, I just wrote an AppleScript that runs the application in question and I used that as the triggered script in Quicksilver:
There may be a way to finish the process and add this to the Anki card in one step. I’ll have to work on that.
You might be the subject of political pandering if:
Fear, uncertainty, and doubt are the main tricks in the politician’s kit.
A politician who never tires of scapegoating a feared group, or a feared outcome is undoubtedly pandering. Or a demagogue. Or both. Whether it’s Mexicans, or Jews, or Muslims, or gay people, they never seem to stop talking about why you should be afraid of someone or something.
Or they intentionally raise doubts around the edges of established facts. Donald Trump, for example, continues to plant seeds of doubt about President Obama’s birthplace, years after proof has been established.
The cure, of course, is to turn the doubt around 180° and ask for data and context. You aren’t likely to be mowed down by a Islamic extremist. You’re more likely to succumb to cardiovascular disease because you’re inactive, smoke, and don’t eat a proper diet. If a politician makes a claim without citing data, you should disregard what they say and look it up. Recently a jetliner crashed in the Mediterranean Sea enroute from Paris to Cairo. Within 24 hours, Trump was on record as saying the crash was an act of terror. Anyone with an ounce of sense knows that accident investigations are lengthy fact-gathering, hypothesis-testing, and data-analyzing procedures. Short-circuiting these fact-checking exercises is a timely and convenient tool of the panderer.
The vaccine against pandering is readily available. It’s a vaccine of the mind. Read opposing points of view. Seek primary data. Understand how the branches of government work. Look for sources of bias. Be skeptical about everything. Every. Single. Thing.
The politician appeals to commonality of religious belief
Indisputably one of the foundational principles of the U.S. is religious liberty. The First Amendment explicitly protects free exercise of religious belief. But it also protects the integrity of government by ensuring that the government is not a tool of religion. The Establishment Clause is widely-understood to prevent the use of government through its authority to promote religious belief and practice.
Religious belief is a private affair. Most religious groups gather in a communal practice but in an official sense, they are private, not public groups. Politicians who go out of their way to emphasize their religious affiliations are almost certainly pandering. Adherence to many different creeds brings people to do good things. We’re better off demanding to know exactly what a politician has done in the public sphere and what he or she intends to do in the future than about what church they attend.
The panderer can also turn this sort of pandering around in the ugliest sort of way by scapegoating and denigrating particular religious groups. Sometimes, though, this isn’t pandering but honest hateful demagoguery.
We should demand that politicians base their arguments in the broadest, most foundational terms. The proscription against baseless harm to others, for example, is common to practically all cultures. Let’s make sure that our appeals to goodness, fairness, and justice appeal to those ideals in human terms.
There is an incoherence between stated positions and documented actions
Honest people exhibit a coherence between what they say and what they do. They don’t go out of their way to create an image, let alone one that differs wildly from their easily observed actions. But panderers are crafty. With some, the gulf between their public works and their language is vast. Often there is even an incoherence between statements they make. Most of us in day-to-day conversation use language in such a way that our stated principles pervade our speech. Not so with the panderer where inconsistencies of all sorts abound.
The politician claims to be misunderstood
Occasionally the panderer is caught in an inconsistency. That’s the way deception works. The internet has a long memory. A common escape is to claim that he was misunderstood. It is more likely, however, that the message was simply shifting to suit the audience.
If you really, really like a candidate
There are some political candidates with whom we identify because of ideological similarities, or some other factor. Before committing to a candidate we should look again for opposing data-driven viewpoints, sources of bias, and other ways in which we might be influenced through personal appeal.
Pandering is a pervasive tool of the political trade. There’s also a fine line separating the genuine effort to put language into the right context for the audience from the purposeful manipulation of group through deception. By applying a few heuristics, panderers aren’t hard to uncover.
The U.S. has become well-rehearsed in its response to mass shootings. An event. The pondering over terrorism vs. generalized craziness. The outpouring of prayers and support. Then the internet outrage. And more internet outrage. More meme pictures about guns and love. More color-your-profile picture trends. Empty scripted responses from pious politicians. A week or two, then back to our regularly scheduled programming.
News flash: this isn’t getting better. It’s not going to get better.
We focus on single causal factors.
It’s the guns. No, it’s evil people/crazy people/bad guys with guns. Stop with it. Just stop. Have you people never heard of the fallacy of the excluded middle? The false dilemma?
Only a hair-splitting fool would claim that guns have nothing to do with a crime in which a gun was used to kill people. Likewise it takes a different kind of fool to claim that guns have everything to do with it. (Fortunately, there aren’t too many of the latter. But of the former…)
We’re stand no chance of reducing these incidents if we don’t think systemically. (See, I didn’t say stopping these incidents.)
As a species, our default programming seems to make us conflate mythology with truth.
This is the part that everyone is too polite to do. The simpleton nationalists grab their giant brush and paint every Muslim a terrorist. The liberals claim make the equally ridiculous claim that Islam is the religion of peace. Remember that fallacy of the excluded middle? How about Islam is the religion of both peace and violence?
The problem isn’t Islam. It’s the conflation of mythology with truth. Remember there was a time when people were dead serious about Zeus up there on Mt. Olympus hurling lightning bolts? It wasn’t a mythology back then. It was the real deal. Now it’s a new “real deal.” It’s a new improved monotheistic flavor of Zeus and his buddies toying with us.
Most of us are too polite to say it. Here’s the questions we should be asking: “What do you claim?”, “How, exactly do you know that?”, “Do you have any corroborating evidence?”, “On what grounds do your claims create an exception to the general prohibition against harm to others?” We ought to be willing to say: “Gee, that sounds an awful lot like nonsense to me. Perhaps you’d be willing to explain that logically to me.” The Trumpsters go astray by attacking people. People are just instances of a bigger problem.
Our recorded history is just too short to see a lot of evolution on this front. Maybe in another 10,000 years or so.
Gun ownership is baked into the U.S. Constitution.
This is a tough nut to crack because the weapons of choice for mass killers are a coddled, protected entity in the U.S. And for some reason, we can’t admit in large enough numbers that like the entire Constitution, the Second Amendment is purposely ambiguous. It’s ambiguous because the authors of the Constitution imagined we would sit down and have reasonable debates and compromise over some foundational principle. But we can’t get beyond “Ban all guns.” and “There should be no restrictions on gun ownership.”
We worship the Founders like secular heroes. But I’m calling the Second Amendment a bone-head move on their part. No, I’m not for banning guns in the U.S. There’s a giant middle ground here. And no, dear conspiracy theorists, High Priests of the NRA, and other lunatics, Obama’s not coming for your guns.
So let the grief turn to internet outrage. Let the impotent internet outrage turn to nothing. I’ve lost my idealism about any of this. I’m not changing my Facebook picture. I’m not posting any meme pictures of politicians saying stuff about guns or terrorists. It’s all empty.
Perhaps you don't agree that it's ambiguous. Then what does the "a well-regulated militia" have to do with private gun ownership? ↩
Indigo is a well-known home automation controller software package for Mac OS X. I’ve written a plugin for Indigo 6 that allows you to create a virtual weather station from Environment Canada data. If you live in Canada, this will be a useful way of using weather data in your Indigo rules. For example, you could use wind and temperature data to adjust your irrigation schedule.
You can download the plugin from its git repo. After downloading the files, you’ll just need to configure them as a plugin. To do this, create a new folder and rename it EC.indigoPlugin. Copy the Contents folder that you just downloaded. Right-click on the EC.indigoPlugin bundle and Show Package Contents. Paste the Contents folder here. To install in Indigo, double-click the bundle file.
I manage a handful of websites, like this one. Having built a few on other platforms, such as Drupal, I’m familiar with the dreaded error “The website encountered an unexpected error. Please try again later.” On sites that I don’t check on frequently, it can be an embarrassment when people begin emailing you with questions about the site being down.
I wrote the following Python script to deal with the problem:
I run this as a scheduled job using
launchd and as long as I have a Messages-capable device with me, I’ll get notifications of issues with the site.
Indigo 6 is a popular home automation controller software package on the Mac. Extensibility is one of its main features and it allows users to add a range of features to suit their needs.
Using Python scripting, users can create plugins that provide extended functionality. These plugins can provide a custom configuration UI to the user. Since the documentation around a particular feature - dynamic lists was lacking, I’ve written up my approach here.
Since I live in Canada, the excellent NOAA plugin doesn’t work for me. However Environment Canada provides an XML-based weather data API that we could package into an Indigo plugin. Since the number of Environment Canada station locations is large, I would like the user to select a province first then select locations within that province. This means that I must use a dynamic list for the locations and reload the location list dynamically when the province changes. The solution turned out to be simple. Perhaps it could be even simpler. This is just what I came up with.
In the device configuration I’ve specified a
province field and a
location field. The former provides a callback method
provinceChanged where I can deal with filtering the locations based on the province selection. The other key here is to make the location field dynamically-reloadable (
dynamicReload="true".) By doing this, we get another call to the list generator method
listStations when the province is selected.
Province selection callback
In plugin.py, I must provide a callback method
provinceChanged to save my selection:
def provinceChanged(self, valuesDict, typeId, devId):
Here’s where the solution might be simpler. The documentation is ambiguous about the status of
valuesDict if the device hasn’t been saved yet. Based on that ambiguity, I decided to save the selected province as an instance variable of my Plugin class.
Providing a filtered location list
My dynamic list generator for the locations takes the selected province instance variable into consideration so that when the list is dynamically reloaded, I get a chance to filter the list by province.
def listStations(self, filter="", valuesDict=None, typeId="", targetId=0):
I have a suspicion there’s an easier way. If you know of one, let me know and I’ll share it.
I download a lot of mp3 files containing pronunciation of words in a language I’ve been learning. I keep a record of these words and tag them appropriately using my hierarchical tagging system.
I’d like to download the files to a directory on the desktop. Keep them there for a few minutes until I’m done working with them, then import the file to DEVONthink Pro Office, tag the file there and delete the original.
Read on to see how the Hazel rule is written, including the AppleScript to make it happen.
I’m a fan of using metadata to classify and file things rather than declarative systems of nested folders. Most of the documents and data that I store for personal use are in DEVONthink which has robust support for metadata. On the email side, there’s MailTags which lets you apply metadata to emails. Since MailTags also supports AppleScript, I began to wonder whether it might be possible to script workflows around email processing. Indeed it is, once you discover the trick of what dictionary to use.
The key is to use
MailTagsHelper for the dictionary. To access the terms from that dictionary, you need to embed the code in the following block:
using terms from application "MailTagsHelper"