Feed

  • Good News Everyone!

    The title here is what Professor Farnsworth says before every suicide mission on Futurama, one of my favorite television shows1. I’m using it sarcastically for those that are uninitiated. On the very rare occasion that Farnsworth has good news, he opens with “Bad news, everyone!”. Without further ado, I’m just going to briefly summarize a bit of what I’ve been thinking regarding some of our currently trending topics. Be forewarned in that, as much as I like to say or present otherwise, my opinions lean a bit towards a boring dystopia. The symbolism of a for profit billionaire owned company2 launching astronauts into space above the heads of thousands of people protesting oppression amid a global pandemic and economic turmoil should not be lost on anyone. 

    My last post made light of the quarantine simply due to the fact that I’ve always thought that if you can’t be positive about something, at least figure out a way to make light of it. I’m a big proponent of that strategy and the power of humor to deliver the unspoken. I think we’re all aware by now that comedians very much walk that high wire. My better half and I are still very much quarantining ourselves from the rest of the world. You should see our Animal Crossing island now3. I’m always telling folks first world problems, but rioting, looting, political unrest, and a viral pandemic are not. These are third world problems and let’s be real with ourselves in that they are very much right on our doorsteps. 

    I gotta confess that I happen to be in the minority in my neck of the woods regarding Covid-19. The top of the fold front page article from our local newspaper several weeks back was titled “Overreaction? Some say COVID-19 has been weaponized for political reasons4. The headlines recently show that South Carolina is leading the country in transmission rates and percent positive tests. Ah come on y’all, over 100,000 folks have died from it in the United States. The information war around it is a politicized mess. I’m not an epidemiologist, but I’m intelligent enough to understand the rates of transmission and the risks. My attitude has been from the start that you’ve got to consider what is worth the risk. I consider myself fortunate because I work from home and I’ve been able to adjust my leisure activities to suit. I think we all know who’s taking the risk and it’s mostly those that cannot afford to do otherwise. As for the other folks who would rather continue on in some sense of normalcy and expose others, I’ve just been writing that behavior off as ignorance and arrogance. I think that although some level heads are begging folks to take note, my guess is that the rates here in South Carolina will continue to rise and for the time being, I’ll be spending my time trying to isolate.

    In the last couple weeks, the National Guard was deployed in over 20 states and protests have occurred in over 120 cities. The part that really had an effect on me was the watching videos of protesting and riots areas that I am very familiar with. It’s all just some video until you know folks that have been impacted. I think it’s pretty clear now the amount of discontent and I think it’s about much more than just racial injustice. I believe that there are a powder keg of other factors involved. Here’s an obscure fact related exactly to Minneapolis in that area has the largest discrepancies of home ownership rates for minorities with a gap of 51.3%5,6. The socio-economic factors combined with the pandemic are underlying issues of discontent. I read this morning that as the unemployment benefits and social safety nets run out, it’ll likely charge up a new round of unrest. There are things that we can try to do to fix it. The first step I had to take was trying to explain to a board of mostly sixty-plus white males how spreading rumors originating from disinformation campaigns were espousing racists views to our neighborhood association. It wasn’t met with much reception, but several days later, I did get an email from one member who had obviously put a bit of thought into what I was trying to say. I got choked up a bit reading the email just thinking that I mighta help create a bit more unity and understanding.  I’ve been doing my little part by creating Wikipedia pages of more recent racial injustices that have happened around our state. It has a much more lasting effect than #hash-tagging some tweets or any other social media nonsense. I add the pages to their respected cities and towns as a historical reminders of the antiquated mindset that happened just a generation or two ago. 

    I’m very much a moderate sorta fella and I have empathy for the various opinions in this discussion. For instance, on the more conservative side, I’d think we have a better long term outcome by adding historical context to the monuments instead of removing them. I kinda like the way HBO handled Gone With the Wind with an introduction for historical context. I think we’re in a really dangerous era now because of our modern communication mediums and information silos they create. As much is being said otherwise, I wish I could assure folks that while yes, there are certainly agendas hidden in about every editorial room in the US, many honest to goodness journalist are being as objective and sincere as possible in their reporting. I remember one summer as a teenager, I went to a weeklong ‘journalism camp’ where this tough ole’ broad gave a lecture on objective reporting. I’m sure that every journalism student at every major university has heard something similar. I’ve since sat in on several editorial boardroom meetings at major newspapers. Traditionally they’ve been represented by a highly educated spectrum of opinions, but the so called democratization of internet publishing has given a megaphone to relatively obscure voices. I recently did a little forensic research into a couple online rumors and found two tweets insinuating that riots and a heavy response from law enforcement were coming to our community. Both accounts had virtually no way to fingerprint a the person(s) behind them and I found evidence that both accounts were disinformation campaigns. Although I expected them to be removed when the news announced that 170,000 Twitter accounts that had been removed7, I checked again this morning, and only one of them was removed. I’m not naming or linking to these tweets so as to not draw any unwelcome attention to my website.  I will however point you to some research that was done showing how these campaigns are effective in a piece done by NBC on the spread of racist rumors8.  These sort of disinformation campaigns are literally tearing apart the fabric of America. 

    I think the most dangerous aspect of everything going on is the idea of American exceptionalism9. I have Gravity’s Rainbow10 by Thomas Pynchon sitting on my nightstand right now and it continuously reminds me of a quote about the meaning of hit song from Devo. “Whip It” is a tongue-in-cheek pep talk satirizing hollow American optimism. “I had been reading Thomas Pynchon’s Gravity’s Rainbow, and he had these limericks and poems in there that really made me laugh, where he was making fun of all the American, can-do clichés—Horatio Alger—‘there’s nobody else like you,’ ‘you’re number one,’ ‘you can do it.’ And I was just trying my hand at it.”11 Don’t get me wrong on this, I do believe that America is exceptional in a number of ways, most importantly our founding democratic ideals.  However, I think that the dangerous part is assuming that we will always continue to be exceptional. I think that sort of arrogance is dangerous in any sport, profession, or personality.  

    The slogan of Make America Great Again has been rubbing me the wrong way since I first wrote about it. In November of 2016, I was correct when I wrote that “My guess is that the markets will take a joy ride on ideals of deregulation, but social and global issues will be agitated by him.”12 A Pew Research study conducted in January of this year concluded “Younger Americans more likely than older adults to say there are other countries that are better than the U.S.” Slightly more than a third (36%) of adults ages 18 to 29 say there are other countries that are better than the U.S.13  These policies of some of the countries who might rank higher in certain indexes aren’t some sort of foreign quasi new world order sort of ideas. These are just practical solutions to modern problems. Let’s look into them and give it a shot. It reminds me a clip that’s been circulating the internet taken from the series The Newsroom originally aired in 201214

    That video is pretty potent. I think that the editorial Please Stop Telling Me America is Great15 was influenced by the monologue and is also worth a watch. Personally, I think it’s fundamental to admit where you are in order to get better at anything. Calculate your strengths and weaknesses realistically. I think we’re in that stage now. I’ve been tinkering with the idea of a third moderate political party in the U.S. based on the fact that I think teachers and nurses are the real backbone of our country. Perhaps their new political slogan could be something more akin to Make America Better. Let’s just admit it to ourselves and then get on with it. 

    1. https://en.wikipedia.org/wiki/Professor_Farnsworth
    2. https://spacex.com 
    3. https://davidwindham.com/animal-crossing/
    4. http://www.indexjournal.com/news/covid-19/overreaction-some-say-covid-19-has-been-weaponized-for-political-reasons/article_593c465c-8dfc-5cd7-a3bf-9ba9b9044952.html
    5. https://www.zillow.com/research/black-homeownership-rate-2020-26526/
    6. https://www.census.gov/data/tables/2019/demo/income-poverty/p60-266.html
    7. https://www.bbc.com/news/business-53018455
    8. https://www.nbcnews.com/tech/tech-news/antifa-rumors-spread-local-social-media-no-evidence-n1222486
    9. https://en.wikipedia.org/wiki/American_exceptionalism
    10. https://en.wikipedia.org/wiki/Gravity%27s_Rainbow
    11. https://www.salon.com/2017/09/16/33-13-devo-excerpt/
    12. https://davidwindham.com/make-america-great-again/
    13. https://www.pewresearch.org/fact-tank/2020/01/08/younger-americans-more-likely-than-older-adults-to-say-there-are-other-countries-that-are-better-than-the-u-s/
    14. https://en.wikipedia.org/wiki/The_Newsroom_(American_TV_series)
    15. https://www.nytimes.com/2019/07/01/opinion/america-great.html
  • Animal Crossing

    Day 32 of the COVID-19 quarantine1 and my better half has left me some mail in Animal Crossing2 :

    “Have a little sip of this tea Lee, No need to check the insurance plan Stan, you just listen to me”3


    1. https://en.wikipedia.org/wiki/Quarantine
    2. https://en.wikipedia.org/wiki/Animal_Crossing
    3. https://en.wikipedia.org/wiki/50_Ways_to_Leave_Your_Lover
  • My Personal Website

    What is a personal web page1,or home page, or website? I recently read several articles recently that put me in the deep spin about what the web actually is and how I use it. It’s a forest from the trees2 sorta of thing for me where I don’t often consider the medium. The first article I read was The Web is Industrialized and I helped industrialize it3 by Dave Rupert. In it, he cites two other essays, Architects, gardeners, and design systems4 by  Jeremy Keith and Redesign: Gardening vs. Architecture5 by Frank Chimero. All three of those fellas are folks I respect. The essays were written in reverse order with responses to one another. Just read them since I’ll certainly fall short trying to summarize.

    I’ve also been thinking about it a bit recently because I’ve been considering the reason I first published this website. I’m going to be completely honest here, so please don’t hold it against me. I remember the first time I ‘Googled’ myself while sitting at a computer at my college library when some other ‘David Windham’ came up in the search results. I was thinking something along the lines of… ‘who does this fella think he is?’, I’ll fix that. I recently acquired the original domain that some other David Windham had used years ago. And so it goes, almost twenty years later I’m still building web sites and applications for a living. I’ve seen the ins and outs of the ‘business’ per se and somehow along the line, I’ve developed a kind of Zen and the Art of Motorcycle Maintenance6 approach to it.

    I’m very particular about how I do anything. And by anything I mean laundry, yard work, cleaning, eating, sleeping… etc. I try to remind myself, while ruining my vision going through thousands of lines of code, the parts that I really enjoy. Over the years, as the essays suggest, the design process is becoming automated and industrialized. I’ve mostly try to be involved in building feature rich software and web applications, likely because the pay is slightly better and maybe partly because I’ve gotten bored of design as it relates to web development. I’ve been studying design since an early age because I’m a visual learner. I have a way with pattern recognition. I used to have this ability to tell you the year and model car based on the headlights coming at you in the dark. It could be the reason I have degree in studio art and it’s likely the reason I started as a web ‘designer’.

    The coding part closely aligns to the part of me that wants to understand inner workings… vis-a-vis the motorcycle maintenance. I like to say now that “I’ve learned more from maintaining projects than I ever have from building them” and I’ve tried to develop an attitude towards my work wherein I find value in the day to day work and problem solving. I try to control all of the subtle things like matching all of my syntax highlighting between editors, following string naming conventions, making reusable blocks of code, standardizing my build systems, and automating anything possible.

    I’ve been tossing around what kind of value do I get with my website and I’ve come to the conclusion that the value I’ve made on this site is mostly personal. Sure, I’m pitching my abilities here and there and I’ve made it easy for others to find me, but the majority of it’s value is as a personal communication tool. After I had completed my first year or so of paying web projects, I decided that I needed business cards. I still use the same cards because I bought way too many of them and don’t hand out enough. A post from Matt Cutts entitled The Best Business Card Ever7 rolled into my reader in 2008 and that’s where the idea for this website design came from. He posted the original photo of a card he found in an old book he bought (the one in the bottom right below) and I found other similar versions online, but the tag lines just stuck with me and it’s still in the code of my homepage today. They’re hidden and you’d only read them if you’re using a screen reading device, but I use to just have them on the front page.

    personal website business card

    github.io site

    I’ve just found a live example of one of the first iterations @ http://windhamdavid.github.io/ and I just updated it after six years @ https://code.davidawindham.com/david/windhamdavid.github.com . Of course, I’ve added an interactive console with some embedded humor and a bunch of vector animations to it, but really the idea is still essentially the same as the front page of this website. Is a personal website just a business card, and am I’m a raconteur of sorts. What do I want from the internet? Sometimes, I think about the other David Windham’s out there wondering if I’ve accidentally stepped on their internet toes. It reminds me that my ability to essentially rent an address in cyberspace is somewhat an exercise in futility unless you have an objective.

    Although I’ve been through it hundreds of times with clients, I’ve been reminded of the amount of reflection involved when you publish something for the world to see, much less making decisions about how you see yourself and want others to see you. I’ve also been making some business decisions about where to focus my billable hours. I’m fairly critical. My father liked to say that “you’re part of the everything sucks generation” and my wife likes to call it “GOM (Grumpy Old Man) syndrome”. I’m going to figure out how to own it and capitalize that trait. Maybe I’ll make a critical review chat bot. I’m planning on using a bot for the new site that’ll handle phone, text, email, and chat communications which will give me even more breathing room from the machines. I’ve only had a couple folks ever tinker with the interactive front page of this site even though I remember spending countless hours figuring out how to build out responses and store info from the terminal.

    Anyway, I’m going to be doing a little motorcycle maintenance on this website to keep it running, but I don’t think I’ll ever really drastically change the design again. You can see the maintenance work @ https://code.davidawindham.com/david/daw . I’ve been hashing out some ideas about what to do with the new site. The primary concept is that I want it to be entirely functional. Ideally, I’d like to migrate over some of the functional bits of this site like the client portal, billing, project management and forms. I’ll put them all into one simple code base. I’d also like to automate some of my processes like communication and scheduling. I’d like it to be simple to understand and straightforward. I’m going to make it a little beast of burden working the interwebs to house and feed me. That’ll make more room for the more obscure fun stuff over here @ https://davidwindham.com and you can check my thought process on what is a personal website over at @ https://davidwindham.com.


    1. https://en.wikipedia.org/wiki/Personal_web_page
    2. https://en.wiktionary.org/wiki/see_the_forest_for_the_trees
    3. https://daverupert.com/2020/01/the-web-is-industrialized-and-i-helped-industrialize-it/
    4. https://adactio.com/journal/16369
    5. https://frankchimero.com/blog/2020/gardening-vs-architecture/
    6. https://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance
    7. https://www.mattcutts.com/blog/the-best-business-card-ever/

  • Coronavirus

    We’ve been in a self-imposed quarantine for several weeks now due to Covid-19 pandemic1. I think it’s day 20 for us. We had our groceries delivered yesterday. I’m used to this because I work from home, but my workload has picked up significantly because everyone else is also now at work on their home computers. My better half is adjusting fine and we consider ourselves lucky that both of us can work from home. I’ve certainly been very humble in my exchanges with others considering the situation and I was prompted to write a little note on this after watching the video2 from Queen Elizabeth this morning.

    I really enjoyed how the she mentions that it’s a good time to be introspective. I wish our leaders had that sort of grace in dealing with duress. Our governor hasn’t issued any stay at home orders, but we’ve been doing so anyway. I’m a better safe than sorry sorta guy and we’ve been avoiding others since the onset. A couple folks scoffed at my attitude early on. Aside from the virtual meetings, we’ve been spending our time cleaning, working in the yard, watching movies, browsing Reddit, cycling, walking, and playing tennis with one another. The outbreak is predicted to extend and peak in early May and that’s at least another month at home.

    There are a lot of implications regarding communication technology and the spread of Covid-19 that will likely reshape our work moving forward. I’ve been setting up custom video chatrooms, configuring electronic signatures, and transactional commerce web applications as fast as I am able. I welcome these changes and I’m lucky to have the work, but now is not the time for me to ramble on about it.

    I’ve tried to tone down some of my reading of the news because I realize how much longer we will be dealing with it. I’ve been making some friendly personal calls to cheer folks up and I’ve been making an effort to be a little more gentle with other folks. I really just want everyone to slow down a bit and stay at home for a while. I’ll close this out the same way Queen Elizabeth did… “You should take comfort, while we may have more still to endure, better days will return. We will be with our friends again. We will be with our family again. We will meet again. But for now, I send my thanks and warmest good wishes to you all.”


    1. https://en.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic
    2. The Queen’s Coronavirus broadcast: https://www.youtube.com/watch?v=2klmuggOElE
  • Shall We Play A Game?

    After the movie War Games1came out in 1983, I asked my parents for a computer. We got a Commodore 642 that year. It worked out well because my brother and I took over the living room television with it and in return we ended up getting our own little black and white televisions. Then we got another computer, an Apple IIc3 with a monitor that we set up on a desk in the dining room. I spent some time glued to that little green on green screen trying to figuring out if I could really change my grades like Matthew Broderick did in the movie and solve the game Hitchhikers Guide to the Galaxy4 .

    The reason I thought of this today is because I recently spent a little time IRL playing ‘war games’. One of my servers became the target of a DDOS5 attack. The IP6 addresses making the requests were from all over the world and they were making random GET7 requests all over the place. I noticed it after I discovered one of my web servers, Apache8, was down. There are all kinds of high scalability ways to avoid this, but this is a personal server and has no real need for them. It took me a bit to get to it because the requests weren’t immediately evident in the logs and I kinda suspected that I had broke a configuration with a recent series of upgrades. This particular server has gone through four major versions of Ubuntu9 and at least twenty versions of various languages and databases with all kinds of the old configurations and files stashed everywhere. When my wife asked me what I was doing up late on the computer, I used the expression “that this particular machine is like an indestructible 82 Toyota Tercel on steroids” while gathering some tactics to keep it running.

    Most of these type of attacks are just automated crap designed to find holes to use your resources, plant malware, spam links, or part of a larger network attack. This is about the fifth time I’ve had to deal with one on a server I manage. The IPs are dynamic and tend to rotate around so good luck going the block route if you still want your software accessible. Whole country level blocks of IP ranges are against my ethos. Occasionally, if I find a bad bot, I’ll block em from the server, but in the case there was no use and the last thing you want to do is motivate a trouble maker. For example, we used a clever solution to stop bad commenters in newspaper websites by allowing them to continue commenting but only showing the comment to the IP they were connecting from. After cranking up some monitoring software to automatically restart the processes when they got overloaded, I rerouted the proxy through Nginx10 to lessen the load and stopped the web server from running out of resources. I waited a day, and sure enough, they were still coming in at about 400-500 connections a minute. I installed mod_evasive and ngx_http_limit_req_module to limit the connections. On day three, the automated requests kept coming in so I decided to start redirecting all of the automated traffic to a page being served by Node.js11 because the concurrency12 is so high and the memory footprint13 is so low. In combination with the other efforts, this drastically lessened the load on my server. It’s this page:

    Shall We Play a Game of Chess?
    http://chess.davidwindham.com

    “How about a nice game of chess?” is a line read by the computer at the end of War Games. It’s when the computer decides that Thermal Nuclear War is a “Strange Game. The Only Winning Move is Not to Play”14. I left my logs up and watched em bounce in and out of that page for fun. Not once did any of those bots decide it was time for nice game of chess. There are some bad bots out there, but these just seemed intent on making as many requests as possible which indicates the intent was just general chaos. I’ll try and speculate what their intent was though. I suspect that the intent is to win a game… although the game in this realm is real. It’s an information war where the victors take the resources. My server isn’t hosting any disagreeable content that I’m aware of, it’s more likely that it’s just been caught in the ‘line of fire’ of a larger bot army. It’s perfect timing with the wild market swings, the oil spat, the coronavirus, and the US election cycle. Most folks have figured out by now that the backlash of the information age is turning out to be and abundance of dis-information. It’s no different than the average search engine or social media bots driving a case for a price. Just like in War Games, the modern ability to out-bot, out-spam, automate, or otherwise disrupt information is being weaponized. I first really caught onto this trend when I published https://davidwindham.com/news-war/ back in 2007. It’s gotten much worse in the sense that it’s now much easier to automate while everyone is glued to their screens.

    This type of information war has been going on for eons. Here in South Carolina, our largest newspaper was founded by Narciso Gonzales15 who was shot dead over an information campaign in 1903. Our modern information war is a bit more akin to Matthew Broderick changing his grades in War Games. Many of the earliest prosecuted cases against spam and hacking were simple pump and dump16 stock schemes operated by teenagers. Spam accounts for the vast majority of all email and is a negative externality17, taxing resources just like a DDOS attack. These brute force types of disruption and manipulation are endemic of information technologies. The economic effect of the loss in productivity due to internet is well studied18, but I don’t believe that, as much as we’ve tried to grapple with the disinformation campaigns as they relate to politics, the more lasting effects of a digital information game are not fully understood at this point.

    Some political and business strategist take pride in their ability to game the system in one way or another, be it digital or otherwise. Part of me is pessimistic about the ability of people to genuinely seek the truth, knowing our predisposition for cognitive biases, while part of me sympathises with those adhering to the populist rhetoric. For the most part, my concerns center around the actual facts and data and how easy those are to bend. I think that the lack of understanding of information technology is making it easier. Other more serious examples, aside from your relatives forwarding spam, would include how many people are becoming skeptics of science or radical in their belief system based on algorithmic siloing19. I learned at an early age how easy it is to fake data after winning a state science fair competition based on cooked results. The effects of an information war are more vague. Although I’m guilty of gaming the digital system for my own benefit, I’m genuinely concerned about how that is playing out on society as a whole. And while I’m sitting here enjoying winning my little game of bots vs. server, a real life game is playing out just like in War Games. In this case, I would argue that the epistemological20 implications of the information age are upon us and a misguided information war may be hacking our brains into thinking there is a winning move.


    1. https://en.wikipedia.org/wiki/WarGames
    2. https://en.wikipedia.org/wiki/Commodore_64
    3. https://en.wikipedia.org/wiki/Apple_IIc
    4. https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy_(video_game)
    5. https://en.wikipedia.org/wiki/Denial-of-service_attack
    6. https://en.wikipedia.org/wiki/IP_address
    7. https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
    8. https://en.wikipedia.org/wiki/Apache_HTTP_Server
    9. https://en.wikipedia.org/wiki/Ubuntu
    10. https://en.wikipedia.org/wiki/Nginx
    11. https://en.wikipedia.org/wiki/Node.js
    12. https://en.wikipedia.org/wiki/Concurrency_(computer_science)
    13. https://en.wikipedia.org/wiki/Memory_footprint
    14. https://vimeo.com/291483545
    15. https://en.wikipedia.org/wiki/Narciso_Gener_Gonzales
    16. https://en.wikipedia.org/wiki/Pump_and_dump
    17. https://en.wikipedia.org/wiki/Externality#Negative
    18. https://www.measuringtheeconomy.org/
    19. https://en.wikipedia.org/wiki/Filter_bubble
    20. https://en.wikipedia.org/wiki/Epistemology
  • FooBar Challenge Fail

    I managed to not only to waste a bunch of my, but also my programming confidence over the last couple days because Google sent me down the rabbit hole. I’ve really been digging on the Go1 language recently. One of the first Go applications I hosted was Gogs2 and it’s turned out to be extremely memory efficient and reliable over the years. I’ve been searching around for a good lightweight framework fit for a project I’ve got later this year when I ran into the Fiber3 framework. I’m very comfortable with Express4 so I thought it might be a good fit. There is a little small hurdle though. I haven’t spent enough time with Go to give me the 99% confident sorta feeling I really need to feel comfortable about maintaining a Golang project for years to come. So I’ve been spending some free time with Go.

    In doing so, I’ve been rummaging through the internet, (e.g. StackOverflow and Google) hitting up Golang issues like a newb5. Let’s face it, it’s how problems get solved. I’m at least 90% confident in my ability to find answers if I’m unable to solve them. I always tell folks it’s not rocket science, it’s really just about reading the instructions and being able to scan documentation. Read the Readme. It’s not some mystical mathematical or programming ability. I really believe it’s pretty simple stuff once you understand the fundamentals. I’ve sat through some coding challenges before and I’ve endured a couple whiteboard interviews. Well…

    Google FooBar

    Last weekend, I was googling around about garbage collection5 in Go and viola… The ever allusive Google Foobar Challenge appears. Google uses this as a secret hiring challenge to find developers. I use the word allusive, because after looking into it there are evidently bunch of folks who are desperate to give it a shot. They obscure links to it in source code and through various queries. I wasn’t looking for it and let this be my word of warning. It’s tough and it left me feeling like I shouldn’t use the word programmer in a description ever again even though I rarely do. I prefer to use the term developer because I’m realistic about my own skillset and I understand that what I’m capable of. I’m perfectly capable of developing reasonable programming logic and reading the documentation. I’m perfectly capable of maintaining a software stack end to end. I’m perfectly capable of finding the best solutions to problems. I’m capable of building software that works and is maintainable. I’m capable of… you can see my effort here in building my confidence back up.

    foobar fail

    Evidently, I’m not capable of solving the programming challenges in Google invited me to complete. In my defense, the coding challenges were in either Python or Java and I’m best with PHP, Ruby, and Javascript. They all translate though and after failing the first challenge four or five times, I was tempted to use my other skillset of reading the docs and finding a solution online. There are a couple out there if you go looking, but I really wanted to test myself. I managed to fumble through the first couple problems digging around, but I really got stumped on the third and gave in to hunger and reality that I was wasting my time trying to prove something to myself. I did give it a go and spent some time with the challenges. They’re not the type of programming you’ll need in the majority of development work, but the type of high level challenges that a company like Google is up against. The FooBar interface has a 48 hour timer on it. I left it up on a monitor just watching the timer count down thinking some stroke of genius might hit me. It never did.

    With that being said, let me just say that the IT world is full of bullshitters, just as I would imagine any other industry. I like to say this often… “you don’t know what you don’t know until you do”. When I look back at earlier work I’ve done, I’m often embarrassed. It’s just so true in programming and other software related businesses. Programmers, developers, cloud experts, system architects, analysts, security, consultants… all of have em. In many cases, the folks doing the hiring or writing the check don’t fully understand what is actually being built or how it operates. The skillsets change so rapidly and finding talent has developed into an industry. I once had an employer bring me into a meeting with the top brass where they proceeded to ask me “if I was some sort of hacker” simply because I pointed out a loophole that allowed me, or anyone else for that matter, unfettered access to a bunch of sensitive data. Sometimes I feel like folks don’t even know what their actual skill levels are. I’ve been guilty. I ended up in a gig one time where I was in over my head and I spent months trying to keep up with the rest of the team. It eventually wore me down to the point that I ended up physically ill from the workload. I recently interviewed a potential partner where I noted that although he listed his occupation on LinkedIn as “Software Developer” and he had a computer science degree from a local university, he had virtually no experience and really didn’t have the slightest of clues as to what he is doing. Some of his Github projects were littered with passwords and other evidence of operating on a thin veil of knowledge. I felt bad for him. That type of blind confidence can be dangerous.

    The team at Google does very much know what they’re doing. Even the fact that they managed to pick up on me delving into Golang error reporting and garbage collection is evidence. Their hiring process is likely even more challenging even if I had gotten through the FooBar tests. I also ran through a serious of tests years ago for Facebook too and I think I failed half of them. I’m Ok with that. I didn’t want to move to California anyway. The weather here is more suited to my taste. Part of me has become a little jaded on the ‘sell yourself’ economy where we’ve all become our own PR agents. I try very much to just let my work speak for itself. I’m not a dev-ops magician or ninja. I have the experience to know to read the documentation and test for errors. I have the years of practical application that gives me some insight. My best skill, and the one I enjoy the most, is solving problems. My little niche is a blend of programming, design, and development… where I’ll continue to excel even if Google doesn’t want me.

    1. https://golang.org/
    2. https://gogs.io/
    3. https://fiber.wiki/
    4. https://expressjs.com/
    5. https://en.wikipedia.org/wiki/Newbie
    6. https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
  • Gutenberg Sidebar Plugin

    I’ve been spending some free time with Gutenberg. The primary reason is that I’ve been digging into moving custom fields and post types into Gutenberg. This post started out as a testing post for doing so and I went ahead and made some notes about what I believe is a practical real world use case that I’ve used in this website for years. For those of you who’ve found this post from the title and want a quick deep dive, I’d recommend you head over to this article about “Managing Metadata in Gutenberg“.1 This essay is just my own little use case study and I tend to just write about my opinion. The analytics from this site show the majority of traffic are people trying to answer web development problems, so I try to save folks time by linking to relevant sources. Over the years, I’ve started noticed that the web is prejudiced to itself. This is another essay for another day… but put shortly: the internet has a lot of information about ‘the internet’ if you can imagine that.

    Many moons ago, WordPress began using a <!– more –>2 quick tag in order to create the excerpt from a post. It used the first 55 words of the post content which was too long for meta descriptions. My first attempt to modify the_excerpt3 function would cut off sentences and the resulting meta description in the header would end up having the search results sentences ending in the middle of sentences with ‘…’. In an effort to avoid this, I’d continually had to inform others how to add the short tag or use the ‘more’ wysiwyg button from the classic editor. I got around this for several years by creating a custom function to replace the_excerpt in themes I built. The functions I’ve used found the post_excerpt, filtered it, replaced it with the the_title if it’s under 15 characters, looks for a punctuation mark to end the excerpt if it’s longer, changed the link, limited it to 115 characters. etc… (src: https://code.davidawindham.com/david/dw/src/master/inc/template.php#L89 )

    function dw_good_excerpt($length) { 
    	global $post;
    	$text = $post->post_excerpt;
    	if ( '' == $text ) {
    		$text = get_the_content('');
    		$text = apply_filters('the_content', $text);
    		$text = str_replace(']]>', ']]>', $text);
    	}
    	$text = strip_shortcodes($text);
    	$text = strip_tags($text);
    	$text = substr($text,0,$length);
    	if ( strlen($text) < 15 ) {
    		$text = the_title('', ' - ', false);
    	}
    	$allowed_end = array('.', '!', '?', '...');
    	$excerpt = reverse_strrchr($text, '.', 2);
    	if( $excerpt ) {
    		echo apply_filters('get_the_excerpt',$excerpt);
    	} else {
    		echo apply_filters('get_the_excerpt',$text);
    	}
    }
    function reverse_strrchr($haystack, $needle, $trail) {
        return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) + $trail) : false;
    }
    function dw_meta_desc() {
    	global $post; 
    	$post = get_post( $post );
    	setup_postdata( $post );
    	if ( is_single() || is_page() ) {
    		$meta_desc_value = get_post_meta( $post->ID, 'meta_desc', true );
    		if ( $meta_desc_value !== '') {
    			echo $meta_desc_value; 
    		}
    		elseif ( $meta_desc_value == '') {
    			$meta_excerpt = dw_good_excerpt(115);
    			echo $meta_excerpt;
    		}
    	}
    }
    function dw_excerpt($count){
    	$permalink = get_permalink($post->ID);
    	$excerpt = get_the_content();
    	$excerpt = strip_tags($excerpt);
    	$excerpt = substr($excerpt, 0, $count);
    	$excerpt = $excerpt.'... more';
    	return $excerpt;
    }
    

    This function still didn’t have complete control over the excerpt. WordPress’ own meta box for a custom excerpt meta field was hidden by default and, at one time in an effort to make that more apparent, I used to move the meta field up above the content editing area. Other folks came up with all kinds of creative solutions and plugins to customize the excerpt. It became an important element to customize for because it was used by many default themes for archives, feeds, and search results. When the Open Graph protocol4 and Twitter Cards5 came along and I wanted the websites I built to have an exact control over the meta description, og:description, and twitter:description. My second method to get around the excerpt limitations were to just create a ‘custom field’6 to replace or give a second option to the_excerpt that could still be displayed elsewhere. This custom field stored a string in the postmeta table with the meta_key set as meta_desc. I’ve used this technique on bunches of websites and it’s still an effective technique with little overhead.

    Likewise, I also added a “Media URL” meta field for embedding video into into third party sites using meta fields. I remember when I original built this meta_key how I also needed to include a video container for the media which you can see in the repo in my aptly named inc/tweaks.php7. I also needed the function to be backwards compatible with any of my earlier posts containing media. Using just these two meta fields, I managed to gain more control over the output of the meta data of the website. To see this in action, take a look at the view-source meta output from one of the first things I ever posted online back in 20058, using WordPress version 1, long before Twitter existed or I rewrote the post_excerpt for the first time.

    Beginning with WordPress version 5, The Gutenberg editor’s ‘More Block’ now has similar functionality to the original <!– more –> short tag and it has an additional field for a manual excerpt. There is still quite a bit of chatter about the customizing the functionality of the block and more importantly to me, the custom fields UI now seems like a ‘second thought’ to the Gutenberg editor. Even their display is hidden in the Gutenberg->settings->options and the fields appear down under the editor unlike rest of the settings in the sidebar. This is just not the first class sorta of operation I’d like to have going on and I’ve taken the time to fix it using a Gutenberg sidebar plugin. I’ve managed to reconfigure my meta two custom fields into Gutenberg without having to use the clunky standard meta fields.

    Adding metadata fields in Gutenberg is a two step process. You’re basically using React9 to interact with the API10 using the @wordpress/data module11. I used the API before it landed in core and I had already started down the JavaScript path before Matt handed out the homework to “learn JavaScript Deeply” in 201512. You just load up some packages, enqueue up your Javascript along side of the editor, and viola.

    Gutenberg Sidebar Plugin

    Of course, it’s a little bit more than that. I’ve put up the entire git repo @ https://code.davidawindham.com/david/dw-guten13. In my case, I also bundled in my need to tackle the subscript that I use for citations. Those were pretty easy to plugin into the wp.editor field and can be found @ dw-guten.js. I now have a little bit more elegant solution using Gutenberg, without having to use the clunky custom meta fields UI. I’m glad I spent the time with the API early on and I’m comfortable with the Javascript build processes like NPM, Webpack, and React. I believe that overall, the Gutenberg editor will significantly improve the end user experience. I originally shared concerns about the React license14 and I do understand the future need of Automattic to capitalize the better built blocks15. And although there have been growing pains, I’m glad that Gutenberg is being built transparently with open source licensing in the tradition of WordPress to combat the proprietary page builders that had started to take over.

    When I first started into web development, I spent a lot of time trying to explain the WYSWYG16 editor to users and now I’m doing it again with Gutenberg. Although it’s quite a bit more complex than early rich text editors like TinyMCE or CKEditor17, it’s still primarily an abstraction layer to the HTML output. What makes it so much more powerful is the additional interaction with the API using packages. Part of me is really hesitant to see that functionality bundled (literally) into JavaScript packages, but I foresee a time when the mystery of development is broken down into the most simple terms of a programming language interacting with a database and spitting out results to the user. I think in WordPress, as I’ve previously mentioned14, we’ll see ‘full site’ editing in the near future where all of the previously built PHP template parts are abstracted to editable Gutenberg blocks. I also believe that other dynamic content management systems will use Gutenberg or something like it. I love the ‘cross-pollination’ of open source projects. I had a recent project where we included Gutenberg into Laravel using Laraberg16 and I’ve got an upcoming project where I intend to rewrite a host of features, including custom post types, into Gutenberg.

    1. https://css-tricks.com/managing-wordpress-metadata-in-gutenberg-using-a-sidebar-plugin/
    2. https://developer.wordpress.org/reference/functions/the_excerpt/
    3. https://wordpress.org/support/article/excerpt/
    4. https://ogp.me/
    5. https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards
    6. https://wordpress.org/support/article/custom-fields/
    7. https://code.davidawindham.com/david/dw/src/master/inc/tweaks.php#L248
    8. https://davidwindham.com/my-chair/
    9. https://reactjs.org/
    10. https://developer.wordpress.org/rest-api/
    11. https://developer.wordpress.org/block-editor/packages/packages-data/
    12. https://www.youtube.com/watch?v=KrZx4IY1IgU
    13. https://code.davidawindham.com/david/dw_guten
    14. https://ma.tt/2017/09/on-react-and-wordpress/
    15. https://github.com/Automattic/newspack-blocks
    16. https://en.wikipedia.org/wiki/WYSIWYG
    17. https://en.wikipedia.org/wiki/Online_rich-text_editor
    18. https://davidwindham.com/wordpress-5/
    19. https://github.com/VanOns/laraberg
  • Richard Ayoade: A Catcher in the Rye

    My wife and I just finished watching all of the seasons of Richard Ayoade’s1 Travel Man2. In one episode we were watching he mentions that he’s half Norwegian which peaked our curiosity and we asked “what’s her name” to “Wikipedia Richard Ayoade”. I’ve started the habit of referring to Alexa or Siri as “What’s her name” so as to not summon any additional eavesdropping. I’m a fan of Ayoade. Although I’d taken note of him in The Mighty Boosh3, I didn’t really pay particular attention to him until watching The IT Crowd4. I now go out of my way to find other work he’s involved in because of his dry wit, intelligence and self deprecation.  It’s a particular kind of personality I gravitate towards. He always looks at the camera with a bit of skepticism and it’s hard to find a photo or video of him in which he isn’t. 

    The article from which the image above was republished5, written by Ayoade is spot on for my interpretation of casting Ayoade as Holden Caulfield6. He includes Holden as a footnote and cites many of the best anti-heroes giving the most attention to my favorite – Max Fischer from Rushmore7. After having “what’s her name” solve our speculation about Ayode’s background, I got up this morning and started reading various things about him. I won’t rehash any biographical material because you can read the Wikipedia entry on him. Aside from the Cambridge education, the law degree, and a screenplay based on a Dostoyevsky novella…there’s a Radiohead tribute video he made back in 2016:

    ( via: https://www.instagram.com/p/BGwhZRbqyt-/ )

    I think the video above is really indicative of Ayoade’s attitude. It was made for the song “Tinker Tailor Soldier Sailor Rich Man Poor Man Beggar Man Thief8. The song lyrics explore a dark theme of based on children’s nursery rhyme Tinker Tailor9. Ayoade’s little vignette has businessmen all jump to the side of the road like startled deer. It reminds me of a darker version of something that John Cleese10 might have written for Monty Python11.  

    The one thing that really resonated with me, and the reason I was motivated to write this essay,  was this quote from an interview: “I was so obsessed with The Catcher In the Rye that I started to dress like Holden Caulfield”. It stuck with me because I continually run across references to J.D. Salinger’s A Catcher in the Rye12 where I try to remanence on exactly what it was about that book that I so deeply connected with. I’ve gotten in the habit of researching my past experiences to try and uncover clues about myself. My essay about E.T.13 several years back is a good example.  I can’t remember when I first read Catcher. Shortly thereafter I went to the bookstore and bought every book he wrote and read them all. I’m not an avid reader so it’s pretty rare incidences that I’ve done that. I’m still not sure why, which may be the primary motive for researching it this morning. Perhaps it may have just been my mindset during the years I read it and maybe I’ll have to read it again in an effort to understand.

    I’m not the only one. There are countless essays and research on A Catcher in the Rye. I think I’ve brushed through some of them in the past in attempt to explain my interest. If you want a deeper dive on it referencing other critical works, I’d suggest reading a piece by Gis Jen14 re-published in The New Republic15. A more recent piece from Dana Czapnik16 suggests that if I re-read it, I might “You might see Holden for who he really is. Not a stand-in for every single teenager that ever walked the Earth, but a lonely individual who finds the injustices of the world intolerable.” Alfred Kazin17, among other critics, took the harsh view, characterizing Salinger’s audience as “the vast number who have been released by our society to think of themselves as endlessly sensitive, spiritually alone, and gifted, and whose suffering lies in the narrowing of their consciousness to themselves.” Reading these other reviews morning has made me wonder about my supposed connection. I’m guessing that I most likely reminisced on something I had a previously only understood in a very narrow sense.  

    Richard Ayoade has accomplished exactly what he wanted. He is a modern version of Holden Caulfield. He is overly sensitive, self deprecating, doubtful, sarcastic, sardonic, alienated, crude, and implies that he may be misunderstood. At least he’s projecting that image. In interviews he seems to echo sentiments that Holden would have. He mentions that his parents did not approve of his theatrical studies. In a rare interview Salinger explained that Holden was semi-autobiographical. Don’t we all project a little bit of who we’d like to be. Why am I connecting and why do I find his character or personality so charming? It’s evident I’m not the only one considering the successes he’s having. I would argue that Ayoade unlike Holden, who some consider the ‘avatar of American authenticity’, has a personality more akin to our modern world. Is his tone symbolic of an undercurrent of a collective attitude that is changing with the times? Even if my take on Catcher in the Rye was somewhat narrow minded, I like Ayoade. I’m interested in ordering “Ayoade on Ayoade: A Cinematic Odyssey18 and I’ll continue to track down anything he’s involved with. In true Holden Caulfield fashion, he bored of Travel Man quickly, and he’s on to something else.


    1. https://en.wikipedia.org/wiki/Richard_Ayoade 
    2. https://en.wikipedia.org/wiki/Travel_Man 
    3. https://en.wikipedia.org/wiki/The_Mighty_Boosh 
    4. https://en.wikipedia.org/wiki/The_IT_Crowd 
    5. https://www.theguardian.com/film/2011/mar/12/richard-ayoade-submarine-antiheroes
    6. https://en.wikipedia.org/wiki/Holden_Caulfield
    7. https://davidwindham.com/rushmore/
    8. https://en.wikipedia.org/wiki/A_Moon_Shaped_Pool 
    9. https://en.wikipedia.org/wiki/Tinker,_Tailor
    10. https://en.wikipedia.org/wiki/John_Cleese
    11. https://en.wikipedia.org/wiki/Monty_Python
    12. https://en.wikipedia.org/wiki/The_Catcher_in_the_Rye 
    13. https://davidwindham.com/et-extra-terrestrial/ 
    14. https://en.wikipedia.org/wiki/Gish_Jen 
    15. https://newrepublic.com/article/72860/why-do-people-love-catcher-the-rye 
    16. https://www.theguardian.com/books/2019/aug/01/the-catcher-in-the-rye-fans-jd-salinger-holden-caulfield 
    17. https://en.wikipedia.org/wiki/Alfred_Kazin 
    18. https://www.amazon.com/Ayoade-Cinematic-Odyssey-Richard/dp/0571316530
  • Late Adopter

    I’ve gotten in the habit of taking a little time at the beginning of every year for general maintenance of the machines which I’ve written about several times. I’ve been reading a lot of other opinions on some various technologies recently and I’ve really started to consider why people decide to publishing anything. I’m really having to dig to sort the information from those who have lots of experience and enthusiasm from those who are either getting paid or trying to get paid in the form of self promotion by trying to show off their ‘knowledge’. There’s a lot of bad knowledge out there from the later and sometimes it gives me imposter syndrome as to why I’m publishing anything. Even though I tend to respect the opinions and efforts others, I generally try not to form my own opinion until I’ve had my own experiences by digging through it. As a kid, I liked to disassemble my electronics and either try and put them back together or, as was often the case, leave them in permanent states of disrepair.

    I like to tell folks I’m a late adopter. Let everyone one else be the guinea pigs. Sometimes I take it to the extreme like how I refuse to upgrade my smart phone until it’s absolutely dead. I’m currently six years behind on an iPhone 5 and I still use my original version 1 in a nightstand alarm clock. The book Diffusion of Innovations1 was first published in 1962 and first described the process by which an innovation is communicated over time among the participants in a social system. According to that theory, I’d fall into the 34% ‘late majority’ right at the midpoint of the distribution curb. This could explain why my brother liked to call me a poser2 when we first got into skateboarding or how he insisted that I immediately move to Ruby on Rails3 version 1 in 2005 when we first started web development. I’ve found that I’m very much OK being right in the middle of the distribution curve for most anything. It’s comfortable. This may seam counterintuitive for me considering that I’m often responsible for making technology recommendations, but I’ve found that it’s an effective strategy to save money, time, and labor.

    While running the annual updates on the machines I use for development, I’ve noticed how much less work was involved on the machines that aren’t configured manually and rely on Homebrew or Docker to create the development environments. With Homebrew4 and Docker5 I’m putting in three commands to spin up entire development environments, whereas I was previously spending countless hours of configuring the system manually and ‘googling’ through every error on Stack Overflow. One of the projects on my plate right now involves reconsidering the hosting for a relatively high volume client. I’m pretty well versed on the scalability and performance of various systems, but I haven’t yet dug too deep into containerization or container orchestration systems because I hadn’t had the need to. I’ve mostly been throwing money at additional hardware as a solution but the quote from a current vendor came back way too high. My proposal for alternatives ended up being services oriented around or managing hardware orchestrated6 by Kubernetes7 from the big three: Amazon Web Services, Microsoft Azure, and Google Cloud. I really don’t want to do any additional system administration or pay for managed services but I also want to avoid the technical debt8 of continually patching system and software upgrades. Although my bread and butter is in custom development, I still feel the need to disassemble these systems so that I have a solid understanding of the full stack.

    I’m a late adopter. The idea of Infrastructure as Code9 and cloud orchestration systems has been gaining traction for a long time. I first dabbled with Chef and Puppet quite a number of years ago, but I’ve been mostly constrained to solo DevOps10 and the lack of appropriate production experience with them to have any real solid opinion one way or the other. My upgrades this year are reflecting a change in that process. I maintain quite a number of servers and applications running an assortment of programming languages and databases, many of which are running on different infrastructure. Instead of just trying to keep everything on standard Long Term Support(LTS)11 versions, I’ve been maintaining separate versions of languages and databases on my machines. I’ve decided that the best path going forward is to mitigate the extraneous annual work by using Docker files to create the various environments I need on the fly. This will also give me the ability to keep those instances inline with the upstream12 providers. Because those instances are virtualized, I’ll still maintain a local core of languages and databases in my ‘wheelhouse’. The minimalist purest in me still wants a few moving parts as possible and is opposed to what is essentially server middleware13, but the practical reality is that aside from the fact that I end up spending too much time with configuration. This is really just an extenuation the meaning of ‘convention over configuration’14. And although I’m still kinda sold on Ansible15 because of how simple it is and the fact that it doesn’t consume any hardware resources, containerization orchestration with Docker and Kubernetes is truly helpful with systems of scale.

    I’ve now got at least a week of work invested into orchestration systems. I really enjoyed the ease of working with Rancher16. It’s just an outright impressive tool. These newfound skill sets are just enough for me to get what I need and I’m barely scraping the surface. It’s teaching me to focus on what I enjoy doing, which is building functional logic and features for applications. And although these skills really help me to fully understanding the stack, I don’t want to spend a quarter of my time with it because in the end, no one, especially the paying clients, cares how it’s running, just what it does and how well. I’ve been a loyal Linode customer for quite some time and I’m in on the beta of them spinning up a Kubernetes17 Engine. I’m sure to find some real world usage, learn some new skills, and gain a deeper understanding. I’m a bit skeptical of vendor lock in and I’ll wait another couple years to dive completely into the JamStack server-less computing18 trend. I see the value of a single language stack and infinite scaleability. I’m gearing up for it, but I’m still not entirely sold on the idea of purposely building software to capitalize on how the big cloud providers are dictating the use of dirt cheap CPUs or CDNs. Almost all of the ‘server-less’ vendors depend on Kubernetes to provide ‘Function as Service'(FasS)19. These hot ticket keywords are often misleading and confusing. There are still sysadmins in ‘server-less-land’. And although Rancher, Docker, and Kubernetes are essentially the current pinnacle of infrastructure technology, I’m not really in the business of providing cloud services. I’ll let everyone else work that out until a leading strategy emerges. I’m happy right here in the middle of the majority as a late adopter.


    1) https://en.wikipedia.org/wiki/Diffusion_of_innovations
    2) https://www.wikihow.com/Differentiate-Between-a-Real-Skater-and-a-Poser-Skater
    3) https://en.wikipedia.org/wiki/Ruby_on_Rails
    4) https://en.wikipedia.org/wiki/Homebrew_(package_management_software)
    5) https://en.wikipedia.org/wiki/Docker_(software)
    6) https://en.wikipedia.org/wiki/Orchestration_(computing)
    7) https://en.wikipedia.org/wiki/Kubernetes
    8) https://en.wikipedia.org/wiki/Technical_debt
    9) https://en.wikipedia.org/wiki/Infrastructure_as_code
    10) https://en.wikipedia.org/wiki/DevOps
    11) https://en.wikipedia.org/wiki/Long-term_support
    12) https://en.wikipedia.org/wiki/Upstream_(software_development)
    13) https://en.wikipedia.org/wiki/Middleware
    14) https://en.wikipedia.org/wiki/Convention_over_configuration
    15) https://en.wikipedia.org/wiki/Ansible_(software)
    16) https://en.wikipedia.org/wiki/Rancher_Labs
    17) https://www.linode.com/products/kubernetes/
    18) https://en.wikipedia.org/wiki/Serverless_computing
    19) https://en.wikipedia.org/wiki/Function_as_a_service

  • 2019 In Music

    Well… another year come and gone. I make a new playlist every month that you can find on @ https://open.spotify.com/user/windhamdavid . I try to use only new releases and some re-releases to make up the playlists. I keep track of all of my listening details over @ https://davidwindham.com/studio/music using the Last.fm API @ https://www.last.fm/user/windhamdavid. Year over year since I’ve begun tracking them in 2007, Bill Evans is taking the lead again. There’s a lot of it to go around. Just the Bill Evans recordings posthumously released (Fantasy, Verve, Riverside, Village Vangard, etc) would be about 50 CDs worth or recordings. I really don’t tire of him. There were a newly couple newly recorded albums that stuck out last year. The various ‘music year in review’ articles from other publishers have become a ‘wash’ for me mostly because my taste have gotten crotchety like an opinionated old man. I still like to browse through all kinds of new music, I pay some attention to other curators, and I like to listen to various shows. The music discovery mechanisms have gotten pretty good, but I feel like they suffer the same kind of ‘information silo’ ( https://en.wikipedia.org/wiki/Information_silo ) effect that plagues any other algorithmic driven data. There are some errors in my data because of the way single tracks are pre-released before the albums. I’m kinda weary of the ‘first to market’ approach to releasing single tracks for streaming because I miss the old days of being excited to hear an album in it’s entirety. I’m sure my tastes tend to lean towards my experience… after all I did wake up this morning trying to convince my better half how good the Bob Segar Live Bullet album I used to listen to as a teenager mowing grass is. Here’s what I was listening to in 2019:

    Artist

    • Bill Evans
    • Ahmad Jamal
    • Michael Kiwanuka
    • John Williams
    • Terry Allen
    • Brad Mehldau
    • Easy Star All-Stars
    • Merz
    • Duke Ellington
    • Kevin Hays
    • Jon Hassell
    • Talking Heads
    • First Aid Kit
    • Rayland Baxter
    • Destroyer
    • Steven Goldmund
    • Calexico
    • Hiss Golden Messenger
    • Quantic
    • Voyager
    • Deep Watch
    • Empty Space
    • Foxygen
    • James Taylor
    • Kevin Morby
    • Louis Armstrong
    • Steely Dan
    • Van Morrison
    • Wilco
    • Allah-Las
    • Beck
    • Ben Harper
    • Brittany Howard
    • Curtis Fuller Quintet
    • Frazey Ford
    • Iron & Wine
    • J.J. Cale
    • Jungle
    • Justin Townes Earle
    • Kraak & Smaak
    • Michael Nau
    • Momento
    • of Montreal
    • Paris Atmosphere
    • Poncho Sanchez
    • Sylvan Esso
    • Tejal Yann
    • Terry Riley
    • The National
    • Bill Evans
    • Ahmad Jamal
    • Michael Kiwanuka
    • John Williams
    • Terry Allen
    • Brad Mehldau
    • Easy Star All-Stars
    • Merz
    • Duke Ellington
    • Kevin Hays
    • Jon Hassell
    • Talking Heads
    • First Aid Kit
    • Rayland Baxter
    • Destroyer
    • Steven Goldmund
    • Calexico
    • Hiss Golden Messenger
    • Quantic
    • Voyager
    • Deep Watch
    • Empty Space
    • Foxygen
    • James Taylor
    • Kevin Morby
    • Louis Armstrong
    • Steely Dan
    • Van Morrison
    • Wilco
    • Allah-Las
    • Beck
    • Ben Harper
    • Brittany Howard
    • Curtis Fuller Quintet
    • Frazey Ford
    • Iron & Wine
    • J.J. Cale
    • Jungle
    • Justin Townes Earle
    • Kraak & Smaak
    • Michael Nau
    • Momento
    • of Montreal
    • Paris Atmosphere
    • Poncho Sanchez
    • Post Malone
    • Sylvan Esso
    • Tejal Yann
    • Terry Riley
    • The National

    Album

    Side TracksBob Dylan
    Mendelssohn: String Quartets Nos. 1 & 2Felix Mendelssohn
    Glenn Gould GatheringAlva Noto
    Stay AroundJ.J. Cale
    Some Other Time: The Lost Session from the Black ForestBill Evans
    BalladesAhmad Jamal
    Face The FactsFoxygen
    Rated PGPeter Gabriel
    Grateful Dead Records Collection (Remastered)Grateful Dead
    The BalanceAbdullah Ibrahim
    Father MountainCalexico
    Star Wars: The Rise of Skywalker (Original Motion Picture Soundtrack)John Williams
    Tenderly (An Informal Session)Bill Evans
    Dreams of Sleep and Wakes of SoundMerz
    Just Like Moby DickTerry Allen
    KiwanukaMichael Kiwanuka
    WHEN WE ALL FALL ASLEEP, WHERE DO WE GO?Billie Eilish
    RadiodreadEasy Star All-Stars
    Liszt: Piano Concertos Nos. 1 & 2 (Remastered)Franz Liszt
    In the Key of the UniverseJoey DeFrancesco
    Oh My GodKevin Morby
    Tracks (Remastered Anniversary Edition)Oscar Peterson
    Money JungleDuke Ellington
    The Saint Of Lost CausesJustin Townes Earle
    Spotify SinglesKurt Vile
    All Of Our YesterdaysMac DeMarco
    Motivic RetrogradeQuantic
    Come On Up To The House: Women Sing WaitsTom Waits Tribute
    Another Time: The Hilversum ConcertBill Evans
    Years to BurnCalexico
    Daddi (Reggie Watts Remix)Cherry Glazerr
    Seeing Other PeopleFoxygen
    Listening To Pictures (Pentimento Volume One)Jon Hassell
    Light YearsThe National
    Ride Me Back HomeWillie Nelson
    Simple Twist of FateJerry Garcia Band
    VioletaKevin Hays
    Pino EuropeoPino Europeo
    Blue TrainPoncho Sanchez
    That’s Not TrueSkip Marley
    RelaxamentoVarious Artists
    WhisperingsAhmad Jamal
    Finding GabrielBrad Mehldau
    FlashbackFujiya & Miyagi
    HopeKevin Hays
    Rides Through The MorningMichael Nau
    Santa Cruz de la Sierranico landa
    Good MmorninRayland Baxter
    Saw LightningBeck
    Uneven DaysBen Harper
    LargoBrad Mehldau
    KaputtDestroyer
    Strange Beauty – SingleFirst Aid Kit
    Jenny of Oldstones (Game of Thrones)Florence + the Machine
    Se Eu Quiser Falar Com DeusGilberto Gil
    California Voodoo, Pt. IIHoundmouth
    LEGACY! LEGACY!Jamila Woods
    Nothing Sacred / All Things WildKevin Morby
    Wide AwakeRayland Baxter
    I’m Comin’ OutShovels & Rope
    Take The Money And Run / Love Is Strange / Swingtown / Killing Floor / Rock’n MeSteve Miller Band
    True Stories (Deluxe Version)Talking Heads
    Go / Eagle Birds / Lo/HiThe Black Keys
    General StrikeThe Souljazz Orchestra
    Side EffectsWhite Denim
    JabulaAbdullah Ibrahim
    Portrait In Jazz [Keepnews Collection]Bill Evans
    UndercurrentBill Evans
    Bring It to MamaBoyfriend
    Midnight MagicCommodores
    GhostrideCrumb
    Not Ready To GoDiane Coffee
    Stay GoldFirst Aid Kit
    An AnthologyHank Jones
    Everybody Needs SomebodyHiss Golden Messenger
    Rolling into OneJordan Rakei
    Invocations / ConversationsJr Jr
    It Rains LoveLee Fields & The Expressions
    Hot TearsLeif Vollebekk
    The Great ReunionLouis Armstrong
    Poison The WellModest Mouse
    As Far as I Can SeePhil Cook
    Come Back to EarthRayland Baxter
    I Hear You Paint HousesRobbie Robertson
    They Want My SoulSpoon
    Can’t Buy A ThrillSteely Dan
    Spotify SinglesToots & The Maytals
    Valleys (My Love)Whitney
    Automatic YouthAlex Ebert
    LAHSAllah-Las
    Everybody Digs Bill EvansBill Evans
    You Must Believe in SpringBill Evans
    The Rolling Thunder Revue: The 1975 Live Recordings (Sampler)Bob Dylan
    Can’t Find My HeartBroken Social Scene
    Hello SunshineBruce Springsteen
    The Great Pixley Train RobberyCass McCombs
    AntidoteChick Corea
    Blues-etteCurtis Fuller Quintet
    Why Hasn’t Everything Already Disappeared?Deerhunter
    A Fool Like Me (feat. Self-Made Men)Delbert McClinton

    Track

    • Ahmad Jamal – Poinciana
    • First Aid Kit – Strange Beauty
    • Ahmad Jamal – Whisperings
    • Ahmad Jamal – Because I Love You
    • Bill Evans – Baubles, Bangles and Beads – Trio
    • Bill Evans – What Kind Of Fool Am I?
    • Brad Mehldau – Dear Prudence
    • Curtis Fuller Quintet – ファイヴ・スポット・アフター・ダーク
    • Kevin Hays – Violeta
    • Michael Nau – Rides Through The Morning
    • Poncho Sanchez – Blue Train3
    • Wilco – Love Is Everywhere (Beware)
    • Ahmad Jamal – I Should Care
    • Ahmad Jamal – Land of Dreams
    • Ahmad Jamal – Marseille
    • Ahmad Jamal – Spring is Here / Your Story
    • Ahmad Jamal – What’s New
    • Allah-Las – Holding Pattern
    • Allana Johnson – Second Level
    • Angie McMahon – Take It With Me
    • Antologie – Time Travel
    • Barcelona Atmosphere – Parc Güell
    • Beck – Star
    • Bill Evans – Alfie
    • Bill Evans – How About You?
    • Bill Evans – It Could Happen To You
    • Bill Evans – Very Early
    • Bill Evans – You’re Gonna Hear From Me
    • Bill Evans – You’re Gonna Hear From Me – Alternate Take
    • Binary One – Tunnel Traveller
    • Binaural Landscapes – Skyline
    • Bing Crosby – It’S Been A Long, Long Time
    • Brad Mehldau – Paranoid Android I
    • Brittany Howard – Georgia
    • Calexico – Father Mountain
    • Calexico – Years to Burn
    • Deep Watch – Moments
    • Deep Watch – Reasons For Being
    • Duke Ellington – Switch Blade – Remastered
    • Earl St. Clair – Fed Up
    • Eleanor Arroway – Trancendent Sleep
    • Emblemic X – Pondering Life
    • Empty Space – Paranormal
    • Empty Space – Storyteller
    • Erik Wøllo – Ody At Sea
    • EverLight – Breath, Your Journey Begins
    • Frazey Ford – The Kids Are Having None of It
    • Gavin Luke – Gone
    • Gilberto Gil – Se Eu Quiser Falar Com Deus
    • Glen Hansard – I’ll Be You, Be Me