Why I gave up social media and what I’m doing instead

Summers I get up early, walk the dog if he’s game, and then go water the garden. It’s a ritual that I observe perhaps not religiously, but I have spent an awful lot of early mornings doing it. This fine sunny Summer morning was no different. I was doomscrolling social media while filling up buckets of water to pour on the tomatoes when my wife came out- which surprised me- to tell me the burning I’ll smell when I come back inside is the pan I left on. Totally distracted, after making my breakfast with it, I just let it go.

We all see signs of how distracted society is around us. Since I commute to a job to another town one day a week, and am not within walking distance of essential services, driving is the example I see most often and glaringly. Now, when I approach a four-way stop and no one is taking a turn, I know why: at least one driver was filling that yawning chasm of nothing to do for 10 seconds with their phone. It happens every day at every intersection. It happens at street lights. it happens in exit and entrance ramps on highways. It happens in parking lots and driveways. No one is really paying all that much attention, anymore.

One of the most brilliant inventions, I’ve always thought, was the driving simulator. It’s apparently a relic of the past, from what my kids say. It let you preview the feeling of driving before even getting behind an actual steering wheel. Your job was simple: stop at stop signs, keep the car on the road, don’t hit a pedestrian or other car. And it was a challenge. Its most important role was to ingrain behavior. I think our phones and social media have broken this pattern for so much of our behavior. It’s making everyday experiences awkward, difficult, even dangerous.

There was nothing in particular I was distracted by this morning. That’s the scary part. i was not thinking “gotta get back to doomscrolling.” I just don’t have the concentration I used to have. And as someone who works in the IT field, that is very concerning. I speculate that it’s what Alzheimer’s or dementia might feel like. If I can’t maintain focus long enough to turn a burner off, what will I be forgetting to do next?

There is an area of study which seeks to improve how you engage with reality, here and now: that is mindfulness. Mindfulness is all about foregoing all else in favor of the one thing you are focused on. It could be reading a book, sewing a button- or cooking an egg on the stove. The key is daily practice.

I notice not many people are talking about mindfulness on social media. Is it even possible in a world on fast-forward, seeking to grab your eyeballs in a couple of seconds, literally as you can’t wait to swipe away and on to the next couple of seconds of entertainment?

I’ve read the highly recommended How to Break up With Your Phone by Catherine Price. I’ve taken the intial step of removing all social media from my phone. But I am still at the beginning of the process. Next comes the hard part of rebuilding my attention span. The laundry list, according to the article “How to Reclaim Your Attention Span” over at Experience Life, is daily meditation, body scan exercises, breathing exercises, and the bane of all IT workers- monotasking. The column also encourages “deep work-” like reading a book- and discourages “shallow work-” like mindlessly scrolling social media.

So join me, won’t you, as I try to rebuild my life, one book, one pan, one day at a time.

The Minimalist Online: Manifesto

Maybe it’s just nostalgia. I was a computer jockey at a public library when the concept of the “Freenet” was a hot topic of discussion. A state grant would bring the Internet to our facility via Ethernet cabling and a network switch installed in the building. Along with this would be actual PCs at public desks and, eventually, most employee’s desks. Suddenly we had a connection to the rest of the world.

Not that there was a lot to find out there. in 1992, the Internet was mainly universities connected via a text-only tool called Gopher. Since there was very little in the way of visual presentation, load times were very fast- stunningly fast to anyone who had used dialup to access online bulletin boards, as I had. It was possible to bookmark sites, and after a time, I had a full list of Gophers I could reference if a patron in particualar needed up-to-date or seasonal agricultural or horticultual information for different regions. (there was a lot more than this, but that was the reference desk question I would always turn to Gopher for.)

Then the world wide web appeared the next year, and all bets were off. It didn’t feel like a game changer at that moment, but within five years it absolutely did.

HTML is an elegant language. A lot can be achieved with very little burden on memory or processors. But over time, many piggyback technologies have added functionality, making sites more interactive, more slick, and, over time, rather uniform. Sure, CNN looks nothing like The Guardian. There are surface details that make the sites look and feel different. But look at the page components one at a time, and there is a great deal of uniformity. Generally, the reason for this consistency is a set of tools plugged into to work together according to a set of standards in increasingly what the web is made of. This blog is no exception. If I want, all the style choices and usability decisions can be completely automated. I just choose a theme, and start typing.

That’s pretty great if you are strictly a content person. It’s a way to just get your words on the web with little fuss. The problem is when you multiply all of the technologies making it happen by the number of tabs open in your browser, or browsers- in the end it takes a lot of memory. Plus these kinds of sites are full of plugins phoning phone at all times- meaning the modern web uses a lot of bandwidth, too. The other problem is the multitude of noise messages that bombard you constantly while you’re trying to grasp the signal. Sites with lots of ads may have some usability decisions baked into the design, but they undermine that effort by littering their pages with unrelated content. The problem is even worse when accessibility is considered- sites are increasingly a fragmented experience via adaptive technologies thanks to all the functionality plugged into it. Add to this our 24/7 connected world, the thousands of ways to get information, entertainment, and infotainment- message fatigue is paralyzing our minds. The medium has become the message. The medium is no longer the journey: endless scrolling is the destination.

I propose there is a way to stay connected, but with a focus on the content, taking the spotlight off the medium that delivers it. I’ve been experimenting with replacing all of my usual online information sources radically simpler ones. Sometimes text-only, to focus on the content. I hope in the end to filter out an awful lot of superfluous junk and focusing on the info I sought to begin with. It will require loading some interesting tools- on both PCs and phones.

Trying Brian Eno’s 3-channel “ambient speaker system” is a blast

I’ve been a Brian Eno fan for decades. There are lots of interesting bits from his album packaging that stuck in my memory- like the set of post cards by Peter Schmidt mentioned on the cover of Before and After Science (which apparently come with the 2-LP reissue- now I need to get that). But the most intriguing is the 3-channel “ambient speaker system” proposed on the back cover of Ambient 4: On Land. In the text and with accompanying diagram, he describes a system where in addition to a stereo pair of front speakers, a third speaker is added. The third speaker is wired strangely: one wire goes to the positive terminal of the left speaker connection, the second goes to the positive terminal of the right speaker connection. (I call them “one” and the “other” because it doesn’t seem to matter which is left and which is right.)

Eno doesn’t quite understand what’s happening, but he suspects what is common to both speakers cancels out, and what is played by the third speaker is only information unique to one channel or the other. Therefore, if you have a mono recording, nothing is reproduced to the third channel.

I finally decided the pandemic was a good time to mess around with this setup, so I bought a single speaker of the same type as my primary pair that happened to be on ebay. It arrived a few days ago.

On my amplifier, it didn’t work to use the positive terminals of the “B” set of speakers. So instead I wired the third speaker directly with the “A” set already connected to the amp. Sure enough, it worked. That is also how Eno indicates it should be connected- see http://music.hyperreal.org/artists/brian_eno/onland-txt.html. So I guess that’s the only way it can work.

I situated the third speaker behind the couch, similar again to his diagram.

The result is, it’s been a lot of fun experiencing this pseudo surround sound. For albums with a lot of things happening in different channels, it’s been a real blast. The Flaming Lips’ Soft Bulletin now spawns an infinite dimension behind my head. Tujiko Noriko’s self-titled celebration of electronic avant-pop whirrs and whizzes around in the room. Bitchin’ Bajas Baja Fresh imparts a feeling like floating in space, calming and slightly disorienting. And yeah, Eno’s On Land is infinitely more fun, offering secret nooks and corners buried in the mix that make you feel like wandering around an island in the dark stubbing toes on roots and rocks.

I also confirmed mono albums send nothing to the speaker. If a recording has extreme stereo separation, the opposite is true. If you listen to rough mixes of the Beatles’ early three-track recordings (as found on the Anthologies) or a stereo version of their first, Please Please Me, this setup adds basically a mono channel behind you.

Since low frequencies are rarely confined to one channel or the other, your third speaker doesn’t have to be a big, full-ranged one. A satellite will do. for the most part you’ll hear mids and highs in the third speaker.

Anyway, it’s been a fun, cheap way to hear familiar albums like new again, something you might enjoy doing with your old gear while in lockdown.

Winter project: daap radio station

In late October of last year, I had a tangle with gift wrap and a set of stairs, and I lost, breaking and dislocating my right ankle in the process. Ever since I’ve been stuck at home for the most part. First there was a the trip to the emergency room, where my broken, dislocated ankle was put back in proper position and put in a splint and cast. Next there was the surgery- added to my natural arsenal was a plate and some screws. Re-splint, re-cast. Finally, after enough time, I was told to wear a CAM boot, which incidentally weighs at least twice as much as a cast. So I’ve had a lot of time to consider my situation. (Actually not a lot of time- I made arrangements to work from home once I could sit in a chair and access a laptop.)

One thing I had wanted to experiment with was finding a way to improve my “radio station-” really just an FM transmitter connected to whatever was handy. I have a bit of a reputation in the neighborhood for providing a Christmas radio station. Being near the crest of a bluff, the reach of this little box is remarkably good, spanning the immediate area, neighborhoods downhill from us and even on the ridge across from us. So I feel a bit of pride and an obligation to maintain and improve.

Two Christmases ago I moved from Windows- basically an m3u playlist dragged and dropped onto Winamp and shuffled and looped from December through January. During that time, Winamp needed at least three restarts, and Windows 8 would cough up a hairball and die about once every two weeks. I had grown tired of tuning into the station only to hear dead air and realized it was time to up my tech game. I had this windows laptop around when I got the wild hair to play radio Santa and spent enough time compiling music for this project, let alone tweaking the setup. But I’d had enough.

At first it was a simple alternative. I wanted to use the same machine of limited capabilities, so it had to be very low resource. I installed Ubuntu and booted it straight into the console. I used a simple console player- MP3123- and invoked one command on startup, for MP3123 to play all of the files it found in a certain subdirectory. And it worked pretty well. No dead air. No restarts. But there was zero flexibility. playlist management consisted of adding and deleting files. And while I do have a few radios and even an FM tuner in my stereo, I really wanted to access the station in more modern ways.

Enter DAAP- Digital Audio Access Protocol. It’s most commonly known as the transport protocol used by iTunes. Fortunately, it also has wide platform adoption beyond Apple. What really sold it was finding a Linux daemon called daapd that supports MTP clients. One example of that is my ten-year old Roku Soundbridge, which has been gathering dust in a cabinet for a few years now. Another is an app in the play store. Yet others are a couple of Linux programs. So I could set up a server to make the playlist available via several devices; one of the less mobile ones can be the dedicated radio station device that will output right to the FM transmitter. So many bases covered!

forked-daapd supports these kinds of clients:

DAAP clients, like iTunes or Rhythmbox
Remote clients, like Apple Remote or compatibles for Android/Windows Phone
AirPlay devices, like AirPort Express, Shairport and various AirPlay speakers
Chromecast devices
MPD clients, like mpc (see mpd-clients)
MP3 network stream clients, like VLC and almost any other music player
RSP clients, like Roku Soundbridge

Here is a list of working and non-working DAAP and Remote clients. The list is probably obsolete when you read it 🙂

Client Developer Type Platform Working (vers.)
iTunes Apple DAAP Win, OSX Yes (12.1)
Rhythmbox Gnome DAAP Linux Yes
WinAmp DAAPClient WardFamily DAAP WinAmp Yes
Banshee DAAP Linux/Win/OSX No (2.6.2)
jtunes4 DAAP Java No
Firefly Client (DAAP) Java No
Remote Apple Remote iOS Yes (4.2.1)
Retune SquallyDoc Remote Android Yes (3.5.23)
TunesRemote+ Melloware Remote Android Yes (2.5.3)
Remote for iTunes Hyperfine Remote Android Yes
Remote for Windows Phone Komodex Remote Windows Phone Yes (2.2.1.0)
TunesRemote SE Remote Java Yes (r108)
(https://github.com/feihugao/forked-daapd)

I even had the closest I could imagine ME having for a host computer- a fresh install of Ubuntu Server 17.04 on a headless IBM desktop. I had already set up SSH and was working on it remotely to set it up. It was ready to be used for something fun. The only problem was it was in the basement on my bench. I was upstairs in a cast. So however I did this, it had to be completely remotely. A challenge!

The first challenge was how to copy files. I could set up an rsync command to clone the collection over to the remote machine. But I wanted to pick and choose as I went, and a facility for moving things around on the remote machine quickly if needed. So I installed an FTP server. All I had to do was install:

$ sudo apt-get install vsftpd

Installing forked-daapd

https://github.com/ejurgensen/forked-daapd/blob/master/INSTALL

If you are the lucky kind, this should get you all the required tools and
libraries:

sudo apt-get install \
build-essential git autotools-dev autoconf libtool gettext gawk gperf \
antlr3 libantlr3c-dev libconfuse-dev libunistring-dev libsqlite3-dev \
libavcodec-dev libavformat-dev libavfilter-dev libswscale-dev libavutil-dev \
libasound2-dev libmxml-dev libgcrypt11-dev libavahi-client-dev zlib1g-dev \
libevent-dev libplist-dev libsodium-dev libjson-c-dev libwebsockets-dev

Optional packages:

Feature | Configure argument | Packages
--------------------|------------------------|---------------------------------------------
Chromecast | --enable-chromecast | libgnutls-dev libprotobuf-c-dev
LastFM | --enable-lastfm | libcurl4-gnutls-dev OR libcurl4-openssl-dev
iTunes XML | --disable-itunes | libplist-dev
Device verification | --disable-verification | libplist-dev libsodium-dev
Live web UI | --with-libwebsockets | libwebsockets-dev
Pulseaudio | --with-pulseaudio | libpulse-dev

After installation, edit the configuration file, /etc/forked-daapd.conf.

Note that ‘sudo make install’ will not install any system files to start the
service after boot, and it will not setup a system user.

forked-daapd will drop privileges to any user you’ll specify in the
configuration file if it’s started as root.

This user must have read permission on your library (you can create a group for this and make the user a member of the group, for instance) and read/write permissions on the database location ($localstatedir/cache/forked-daapd by default).

If your system uses systemd then you might be able to use the service file
included, see forked-daapd.service.

Otherwise you might need an init script to start forked-daapd at boot. A simple init script will do, forked-daapd daemonizes all by itself and creates a pidfile under /var/run. Different distributions have different standards for
init scripts and some do not use init scripts anymore; check the documentation for your distribution.

For dependency-based boot systems, here are the forked-daapd dependencies:
– local filesystems
– network filesystems, if needed in your setup (library on NFS, …)
– networking
– NTP
– Avahi daemon

The LSB header below sums it up:

### BEGIN INIT INFO
# Provides: forked-daapd
# Required-Start: $local_fs $remote_fs $network $time
# Required-Stop: $local_fs $remote_fs $network $time
# Should-Start: avahi
# Should-Stop: avahi
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: DAAP/DACP (iTunes) server, support for AirPlay and Spotify
# Description: forked-daapd is an iTunes-compatible media server for
# sharing your media library over the local network with DAAP
# clients like iTunes. Like iTunes, it can be controlled by
# Apple Remote (and compatibles) and stream music directly to
# AirPlay devices. It also supports streaming to RSP clients
# (Roku devices) and streaming from Spotify.
### END INIT INFO

after starting play, press the “*” button. Options will come up. This works for photos and music

#!/bin/sh

# save new source playlist

#grab date
now=$(date +"%m_%d_%Y")

# check for new items by building new playlist based on date
find /srv/Music/ -iname "*.mp3" > playlist$now.m3u

# shuffle the playlist
shuf playlist$now.m3u -o stationlist.m3u
#reset perms
chmod 777 stationlist.m3u

add a cronjob to to the daapd user:

30 00 * * * /srv/Music/newplaylist.sh

Make sure the daapd user has access to the cache folder:

chown -R daapd:nogroup /var/cache/forked-daapd/

For this distro, I can just restart Cron and it will pick up the script schedule:

# service crond restart

That’s it! Now just find your server on your daap player and let it play!

This was a fun project, though I have subsequently moved on to another project with more radio station-type automation, but the daap server project saw me through that Christmas season with no hiccups at all.

Fun with Python- Pivot table to csv

I recently had the need to enumerate all of the filespace being used on a server. I needed it broken down by folders, and within those folders, the space consumed by popular file formats, mainly, image formats and PDFs. The server OS is Windows Server and I had to use Windows 10 as the platform to do it from.

I have played a bit with Powershell and appreciate how sophisticated programming techniques are available right there in the command line. I googled a bit and found some bits and pieces to guide to my goal, which was basically to iterate over all the folders and spit out filenames and filesizes if the filename matched a variety of necessary patterns (.jpg, .gif, etc.). This is what I came up with:

 get-childitem -path w:\wwwroot -Include *.jpg,*.png,*.pdf,*.bmp,*.gif -Recurse | where {!$_.PSIsCo
ntainer} | select-object FullName, LastWriteTime, Length, Extension | export-csv -notypeinformation -path c:\local\allfi
les.csv | % {$_.Replace('"','')}

In a nutshell, this command does this:

  • get-childitem- used to look at a folder’s subfolders
  • path- searches over a certain path
  • Include- looks for that list of filetypes
  • Recurse- look through all subfolders
  • PSIsContainer- looks for items that match filters
  • select-object- used to select the various properties of objects. Here I’ve included Fullname (something like “w:\wwwroot\folder\yadda.jpg”), LastWriteTime (a date/time stamp), Length (the size of the file in bytes) and Extension (.jpg, .pdf, etc.) That last one pretty much makes this whole thing possible, as now I can sort and report totals by filetype.
  • export-csv- yep! I am exporting the results to a csv so I can monkey with it in Excel.

After running the command, it yields a file which looks like this:

site1,documents,9352,.pdf,W:\wwwroot\site1\documents\GreatFile.pdf
site1,documents,44567,.pdf,W:\wwwroot\site1\documents\BiggerFile.pdf

This can be put right in Excel and sorted, culled, summarized, etc. However… this document has 221,000 rows. It would take a long, long time to wrangle that by hand. And sure, some of it Excel can do out of the box, and for other things, there are macros… I might have been able to piece together various tools and code and get it done.

That’s when I thought of Python. I had already used Python to transmogrify text to do my bidding. Surely there was a way I could auto-magically achieve what I needed in a couple of steps or so. And indeed after some digging, I found some fun things using pandas (as pandas.pydata.org describes it, “pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language”). I already have Python 3 and pandas on my machine to do some things with analytics.

From my days as a trainer what seemed to be needed here was a pivot table, and sure enough, there is a pivot table dataframe for pandas that will do the job. This is the script I settled on eventually- it took all of four lines.

import pandas as pd
df = pd.read_csv (r'C:\local\allfiles.csv')
print (df.pivot_table(index='Site',columns='Extension',aggfunc=sum))
df.pivot_table(index='Site',columns='Extension',aggfunc=sum).to_csv('newoutput.csv')

Important parts:

  • df means dataframe. In the second line (after including pandas in our recipe), a dataframe for reading the generated csv file is invoked.
  • I started with the print line just to get visual confirmation it was working. I just kept it to serve the same purpose in the final version.
  • then the pivot table dataframe is created. the “Site” column is the index, and the contents of the “Extension” column are aggregated and summed for the output table- the filename of which is then specified.

Pandas is a powerful library. But what I find interesting is how it distills what is a bit of brainteaser of a concept into some clear directives, thus yielding a bit of insight into how a pivot table is structured. I guess that’s obvious, still I find it- informative? Fun? something.

But we’re not quite done here. it does output a lovely product:

pivot table printing to screen

What the heck is “4.094785e+08?” That is scientific notation. Excel will do with exceptionally large numbers if no specific format is selected. Since what’s happening here is a decrease of significant digits for the sake of brevity. I think this is a standard way of depicting these numbers when the format- in this case, the rows and columns of a pivot table- matter.

NaN means Not a Number- in this case the value is zero- nothing there.

The scientific notation bit threw me for a loop at first. I googled my fingers off looking for a way to convert the numbers to a specific format before exporting. There are some ways to do it, but I had a lightbulb moment, realizing unlike all the sorting and summing, changing number formats for a range of values is no problem at all in Excel. So I went ahead and imported it. I changed the format from General to number, and things started looking a lot more normal.

But it still didn’t strike me as being as “at-a-glance” as my needs dictated. On a Stack Overflow discussion I found several helpful tips about converting number formats to common filesize units- kilobytes, megabytes, gigabytes, etc. I decided MB was good enough for my purposes, though there are some elaborate solutions that take into account everything from bytes to petabytes- I highly recommend it. This example was what I needed:

[<1000]##0.00"  B";[<1000000]##0.00," KB";##0.00,," MB"

This will help all the numbers in this format to express themselves in terms of MBs.

After removing some extraneous bits- the filename and subfolders past the main site folders really weren’t of any use in this report; consolidating the “JPG” figure with the “Jpg” figures and “jpg” figures; click-dragging a few autosums; then setting the format of the numbers, I produced a pretty nice report of the filespace in several server folders taken up either by images or PDFs.

Not bad!

Dusty Grooves 45: Electronic Pioneers, pt.2

Part two of a two-part series. Non-definitive dip into the history of electronic music. Featuring Finnish sound surfers of the unconscious Kemialliset Ystävät, Italian electronic composer Pietro Grossi, German electronic band Popol Vuh, Prog rock icon Robert Fripp, Yellow Magic Orchestra alum Ryuichi Sakamoto, Star Trek original series soundtrack composer Alexander Courage, post-punk innovators Suicide, abstract Krautrockers Tangerine Dream, Swedish electronic duo the knife, mysterious strangers The Residents, legend Todd Rundgren, BBC Radiophonic workshop veteran Delia Derbyshire, dark overlords Zoviet France, psychedelic minimalists spacemen 3, with Raymond Scott ad spots scattered throughout.

For more information, follow us on twitter- @GrooverDusty.

Dusty Grooves 44: Electronic Pioneers, pt. 1

Part one of a two-part series. Non-definitive dip into the history of electronic music. Featuring mad scientist of experimental music, Daphne Oram; Mad Men meets synthesizers in the work of Raymond Scott; modern master David Sylvian; German noise outfit Der Plan; elegant works of Orchestral Manoeuvres in the Dark.

Playlist

The Little Orchestra in Sonovox- Pop Goes the Weasel/Mary Had a Little Lamb, from

Little People’s Band in Forestland

Daphne Oram- Studio Experiment No.1, from Oramics

Daphne Oram- Lego Builds it,  from Oramics

Kemialliset Ystavat- Hyppivat saaret, from Kultaista Kaupunkia Etsimassa

Der Plan- San Jose Car Muzak from Geri Reig

Jean Jacques Perrey- Gossipo Perpetuo 7”

Charles Dodge- He Destroyed her Image, from OHM: The Early Gurus of Electronic Music, 1948-1980

Kraftwerk- Kristallo, from Ralf und Florian
György Ligeti- Artikulation, from Ligeti

New Order- Truth, from Peel Sessions

Michael Salmons- Dawn Chorus, self-released

David Sylvian- the Only Daughter, from Blemish

Kraftwerk- The Model, from The Man-Machine

Hugh le Caine- Dripsody, from Various- Electronic Music

Raymond Scott- Cindy Electronium, from Manhattan Research, Inc.

Orchestral Manoeuvres in the Dark- Architecture and Morality, from Architecture and Morality

Orchestral Manoeuvres in the Dark- Time Zones, from Dazzle Ships