Seven years ago Steve Jobs heralded the aggressive move away from Adobe Flash. It killed the battery life of iPhones. Steve’s move came just five years after Songhay System (me) announced our Flash audio presentation player.

Seven years is the antithesis of agile development. There were several challenges in the way of today’s great news. I usually fail to remember them all:

  • I had other, day-job-ish software development projects on my plate.
  • I had to introduce myself to the Microsoft cloud platform, Azure to try to avoid obsoleting again.
  • After lengthy research, I had to finally adopt Google’s AngularJS (which will cost more time to move away from the 1.x version) and something that used to be called Twitter Bootstrap.
  • I rebuilt my company website,, and redesigned while trying to work on a new player at the same time.
  • I had off-the-chain family issues that are typical of African Americans.

Try the new player by, say, listening to Gerald Horne, Haroon Siddiqui: Gerald Horne on CKLN: 2008-03-01. Maybe Noam Chomsky: Propaganda and Control of the Public Mind? There are over 30 audio presentations that can be found by browsing around our Interviews and Documentary section Poetry in Streams or Digitized Art.

The social-media makeover of is based on new apps developed by Songhay System (which is me @BryanWilhite—which is another way of saying I am still too cheap to turn my company into a corporation). This years-large strategy approaches Twitter primarily as an extension of blogging and YouTube integration has always been a part of the content curation and presentation space of the kinté space. Facebook for the record is currently an extension of Twitter which totally fails to recognize that Facebook is way, way larger than Twitter (this ‘failure’ is by design kids).


For years, the rasx context (Blog) has been stuffed with “Tweeted Links” posts (again, twinks stands for “Twitter links”—I have no idea what this means elsewhere). From a technical view, this Tweeted Links project has been a way to archive my picks instead of “trusting” Twitter to preserve my data. I built a system (a lot of it on Windows Azure) to help me automate the process of turning my “tweets” back into Blog prose. From a personal point of view, I have always read the “morning paper” since I was a travel writer at the Automobile Club in the 1990s—90% of my Twitter activity is based on a modern rendition of this personal habit. From a historical point of view, is curating the “Black Twitter” phenomenon—again… curating…



Like Instagram, Snapchat and others, I deliberately ignored YouTube in the early years. Now I watch YouTube almost as much (sometimes more) as Netflix. So, from a personal point of view, I have been using my curated YouTube channels ‘player’ on a daily basis. I have one for and one for Songhay System—I consider myself sharing this experience with similarly interested visitors. Both of these players are leveraging Windows Azure and the YouTube Data API. The older folks that visit may find it extremely helpful to find some of the “black stuff” on YouTube curated all in one place.

I am very proud of the BookTuber collection now in the kinté space (many of the selections came from @mynameismarines via @rowenamonde). The younger (millennial) content makers that are doing their own “monetizing” thing with do-no-evil Google can be respectfully recognized in an “old” venue like the kinté space. It’s wonderful to have such continuity here at from simple static Web pages to cloud-hosted, API-driven apps.

Songhay B-Roll Player

Should you stumble upon you will find nothing serious (visually). The curated YouTube channels (and the new HTML 5 audio player that I have not formally announced) are all “powered” by assets at this .net address. This means to be the very, very humble beginnings of the Songhay B-Roll Player. This player will be a suite of apps that will replace almost all of the presentation engines here at More on this later (or bust)…

ХудожникTroy and Bryan speak!

Here are my talking points for the upcoming talk. I do not expect to hit even 5% of what’s written here but this may serve as guide for what I should have said. As always, when I send you something I welcome feedback—I’ve never expected to grandstand and perform alone. Just like any child at play, I have the traditional expectation that, whatsoever I do, others can do just as well and often better.

General Preamble

  • The “mainstream” is a polluted river, an unsustainable environment. Speaking “outside of the mainstream” often means you are investing in the future of universe—not your next paycheck.
  • Most technical people “of color” worked in cultural isolation and risk getting too comfortable with being alone or functioning in a social scene where they are the only person “of color.” The need to be collective is not just a pretty ideal from the 1960s. It is a mental health exercise.
  • The ethnic origin of my intellect is not European—this is not an outburst of irresponsible hatred but a carefully considered revelation that has taken decades for me to see.
  • Recommended reading Black Life in Corporate America. This book takes testimony from the previous generation.

Answering Dr. Shani

  • My current title is “Silverlight Consultant”—I’m a contractor for 20th Century Fox Filmed Entertainment. I am not a permanent employee—this means that I have to pay for medical insurance with my own money. This also leads me to the topic of “at will employment”—which means that I can walk in to the office on any work day and be told that my contract is cancelled. Since the end of legal slavery in the United States, it’s an American tradition to find me early and often to tell me that my contract is cancelled!
  • My educational journey—and my professional career—are dominated by Black women. This means that—as far as I am concerned—I have a classical African education. When I went to UCSB, I knew I was there because they had all of the material equipment—access to physical resources. All of the metaphysical came from deliberate preparation and attention from my family and the Black activist educational community of that time. When crack cocaine hit hard during my teens in the 1980s all of this went away—and the extreme isolation began which has never ended to this very day.
  • The first person to help me was my mother. All people come through women so it is natural that women should know all people—this is fundamental theme of traditional, pre-Columbian Black Africa—and this ancient ideal was glimmering faintly and brightly in my mother. My mother taught me personally how to read. As far as I am concerned, it is a sign of wealth and prestige for a child to be taught directly by his parents—this working class American tradition of parents leaving their children with strangers for hours per day for years is the greatest rip off of “modern” humanity. My father made it possible for my mother to teach me because he went to work to provide a home for my older brother, me and my mother. My father was an aircraft mechanic for Western Airlines—so as a child I could look up at the sky, see a huge airplane and know that my father worked on it to make fly. We often forget that Compton has an airport—my father was flight instructor there for years (my father’s teacher, by the way, was taught by one of the Tuskegee Airmen). My father built a train set that took up half the garage for me and my brother—so I was motivated to become technical at an early age. I used to sit out by myself there in that garage in my robe and pajamas trying to get the trains to run—this is the earliest stage in my life where having technical skills became important to me. My father is also a Bible scholar and he unintentionally introduced me to critical thinking and literary criticism by going over scripture with me. But then my mother and father divorced—my brother flipped out and became “the man of the house” which led him to gangs and then crack cocaine hit… My mother and father were both teachers. My mother got her teaching credentials and masters so she was very involved in the K-through-12 educational scene of the 1970s and 1980s. My mother became a nerd of sorts about finding often very exotic educational programs for children—she even barged her way into getting me into the Korean YMCA one summer! There were two very important institutions she got me into: The Museum of Science and Industry and the King/Drew Medical Magnet—both of these environments exposed me formally to the world of computers.
  • The traditions of the place we now call Africa are the key to my personal sanity—my personal mental health—and the deep reservoir of biofuel that powers my intellect. This power allows me view the Western world from outside of its worldview—and inside of it simultaneously. To give you an example of how far you can fly with such personal, internal freedom I remind us of the name Kwabena Boahen of Stanford University. He says plainly, “there is not enough Africa in the computer.” See his TED Talk that took place in 2007 in Arusha, Tanzania.

Simplify, simplify, simplify… feels great… my local development server and my public site, are using the same ASP.NET MVC site now. This site is my “Studio Index”—a centralizing list of projects underway. Certainly, a posh visual artist with an art dealer on speed dial has the same sort of thing going on—but surely they can leave the “indexing” to the “assistants.” My assistant is digital.

Tracking “private” projects/sites in my local environment was one of the challenges in front of getting this chore done. These entries had to be hidden from the public Studio index for security reasons. My present response to this challenge adds a category called “private” to my OPML file driving the index system. My MVC controller can now see this new category and ignore and OPML outline marked private.

So here’s the private index display (with my local server info scrambled):

Songhay Studio Index (Private)

And here’s the public version:

Songhay Studio Index (Public)

I’m sure there’s room for improvement here but since I don’t have an assistant I have to move on to actually work on projects—instead of working on something to help track projects! Argh! The comedy!

Making this small change revealed to me one of my typical silly mistakes: I found out that I wasn’t supporting the OPML private attribute of the outline element. What’s cool is fixing this issue without spending hours—or days—away from the original issue. Feels great…

As of today I’m sticking with Windows Azure. Besides the obvious Mark-Russinovich-in-the-cloud-thing, two features of Azure keep me interested: (i) Table Storage as the scalable data source driving OData feeds for all Songhay System web sites and (ii) Blob Storage of Silverlight (and Flex) sites for all Songhay System rich-media experiences.

Maybe a month ago I was very excited about Azure Web roles. However, when the first bill for having an idle Microsoft cloud web site came in, my excitement faded fast and I sent wild Twitter messages to Steve Marx. I should have done my research but I was more into the coding than into the penny pinching. I was not the only one. Take Paul Mehner:

To give you some idea, my Windows Azure bill has been running over $500 per month for four hosted services and four storage services (plus a few extra instances in staging environments). This is for mostly idle instances (used for demo and training purposes). There are many variables in pricing outside the scope of this short blog post, so your costs could be much different. My purpose in drawing your attention to it here is to give you some financial sense as to why I view the information in this blog post important.

Chris Pietschmann hits closer to home:

If your application is racking up “Compute” time whenever it is “live”, then that equals a total of approximately 720 hours of “compute” time for a total of $86.40 per month.

In “What I Would Change about Microsoft Windows Azure” the problem I’m having with Azure is excellently summarized:

The Windows Azure deployment model works for big businesses with large numbers of users, or for Web sites which huge spikes in demand. For small businesses though, we would end up paying for a lot hardware that is completely under-utilized. I thought the cloud was supposed to allow me to pay for only the hardware I needed at any moment in time.

I was wondering why, say, Carl Franklin—and Netflix for that matter—passed on Windows Azure. Many dismiss it with, “The conclusion for Windows Azure is that it’s too expensive…” My flippant response to this reality, in spite of me charge-carding upwards of $200 bucks (over the last two months) comes in these points:

  • I think we all have underestimated Windows Azure Table Storage as a complete replacement for SQL Azure (which costs ~$9/month per instance). Yes, I know this can sound crazy—and actually be crazy.
  • I’ve just joined the Extra Small Compute Instance beta program. Which is supposed to cut my Web role costs over 50% (from 12¢/hour to 5¢/hour).

Flippant Remarks about Windows Azure Table Storage

In “Azure Table Storage, what a pain in the ass,” Oliver Jones writes:

Microsoft have wrapped this in the ADO.NET Data Services API. So it looks fairly full featured. However it is not. At almost every turn I have ended up bashing my head against a Table Storage limitation. Debuging these problems has been a bit of a nightmare.

My chief problem is that Windows Azure Table Storage does not let you store data of “any type you want” (which is what I swear I heard somewhere). There are a limited number of types supported in Azure Table Storage name-value pairs. The list of supported types in Jim White’s “Windows Azure Table Storage vs. Windows SQL Azure” does not include Nullable types as of this writing—I appear to be using Nullable types just fine as of this writing.

I was fully expecting to persist POCO Entity Framework types as Azure Table Storage objects. Expectations like these are less frequent but they can still sting quite a bit. So what has actually happened is a situation that makes Ruby people scoff: for every POCO type Foo, I’m going through the “ceremony” of defining a corresponding type, TableStorageFoo. For example, here is the “noise” for my TableStorageDocument:

public class TableStorageDocument : TableServiceEntity, IDocument
    //more noise, noise, noise…

What is implied here is that IDocument is an interface extracted from my POCO Entity Framework type Document. This implication reveals yet another stinging expectation that the latest version of Entity Framework should prevent me from needing an interface this way.

(Hold on. Let me get seriously incoherent for a moment: It is possible to persist POCO entities in Azure Table Storage as serialized strings (XML). However, this .NET serialization process would require a .NET-aware deserialization layer—this adds complexity and makes the whole OData/JSON access story slightly miserable but not impossible.)

(By the way: I have written a little utility, FrameworkTypeUtility.SetProperties, which uses reflection to set properties of the same name. This means that passing in an instance of IDocument into the constructor of TableStorageDocument does not force me to set properties ‘manually’:

public TableStorageDocument(IDocument baseDocument)
    FrameworkTypeUtility.SetProperties(baseDocument, this);
    //noise, ceremony, syntactic sugar, etc.

I am sure I’m not the first dude on the planet to “discover” this use of Reflection and there are surely a couple of open source .NET projects based on this use of Reflection.)

All of this work I’m doing to get Azure Table Storage to ‘work’ might be a symptom of what Rockford Lhotka writes about in “Some thoughts on Windows Azure”:

But there’s also the lock-in question. If I built my application for Azure, Microsoft has made it very clear that I will not be able to run my app on my servers. If I need to downsize, or scale back, I really can’t. Once you go to Azure, you are there permanently. I suspect this will be a major sticking point for many organizations. I’ve seen quotes by Microsoft people suggesting that we should all factor our applications into “the part we host” and “the part they host”. But even assuming we’re all willing to go to that work, and introduce that complexity, this still means that part of my app can never run anywhere but on Microsoft’s servers.

So it’s clear that what Rocky—or someone else just as cool as Rocky—has to do for me is build a conventions/attributes/magic-based persistence layer between my server-independent POCOs and Azure Table Storage. This is far from impossible and it may actually come from Microsoft (because the Entity Framework team might find this useful). I’ll be looking out for it. Until then, I am literally writing two sets of classes for one data access object.

But this situation is not terrible because I use less than ten data access objects for all of my personal projects—and I currently have no clients/jobs demanding custom Azure-based solutions.

The reason why I use so few data objects is because my data, Songhay System data, model the document concept. Modeling around the document is quite open as documents are inherently free flowing. It is my document-centric bias that makes Azure Table Storage so attractive to me. I have the expectation that I can store relatively static documents in the cloud, based on a single OData-based access solution. This single document-storage solution should drive all of my document-based projects. This is one of many reasons why my little company is called Songhay System—the word system is singular.

DAR and GenericWeb Documents 12-3-2010 12-16-28 AM

Single point failure for a single cloud owned by a single company is not impossible but hardly individual—more conspiratorial…