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 “Twinks” posts (again, twinks stands for “Twitter links”—I have no idea what this means elsewhere). From a technical view, this Twinks 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)…

So it’s my birthday here on Earth as it is in the kinté space. The kinté space? Yes. This website is the very, very likely oldest, continually-running, Black/African cultural force on the Internet. I think there are about two ways to look into this: my kinté hits page and the Internet archive, its Wayback Machine. Wayback Machine for

The Blog in which these words appear, the rasx() context, dates back to 2005—so, again, one of the oldest Black/African voices on the Internet. —Why all of this “bragging” when my attendance at the last Blogging While Brown conference in Los Angeles went completely unnoticed?

When I turned 21 (in the 1990s), I was “bragging” about how the LAPD—or some other gang—had not murdered me. I knew the stats—the leading cause of death for Black men—and I was openly proud that all the wise ancestors that produced me survived all of the obstacles deliberately put in place.

My people perish for lack of knowledge. We all need to know the stats and we need to “brag” more and more about how we survive and sometimes thrive in what Chuck D called the “anti-nigger machine” or deeper still “intellectual Vietnam.”

The reason why a project like the kinté space would go unnoticed (especially here in the Americas) is because it is not a business. In Black Enterprise terms, the kinté space is like a very, very badly run 1980s bookstore with a dusty display in the shop window that looks abandoned but every now and then the neighborhood kids noticed a few display items moved around on the slatwall as they skateboard to the bus stop (okay, to be fair: lately, it’s been about 50,000 “neighborhood kids” a month).

Another way to look at the kinté space is like a really, really obscure house of couture. The house is run by seamstress that does work-for-hire sewing for other people—other more famous, financially wealthy people. Yes, I am that couture seamstress. I even have my own website with notes about threads. But I don’t own an overpriced fragrance that can make up for the money spent on runway shows. product


“What is he talking about?”

Here’s my point: yes, it’s my birthday and I am older than most Black people who care to use the Internet properly. I understand that sometimes I am treated like “the old man at the club” in that Chris Rock joke. Instead of staying in my little world I research what is going on in other worlds. My research encourages me to continue badly-running until I am unable to do so. I have a few new ideas on the way and would like to try them out in near future.

When the is as popular as was or has recently been then you know there has been foundational shift in Black world culture. The balance of power between the political/aesthetical poles of Haiti and the Dominican Republic has shifted back to Haiti, you dig?


Next stop: Kwame Turé. He died when he was 57. I look forward to my 57th year, “bragging” about not being murdered by kale stalks in a kinté space future…

I’ve been reading the work of @shanley—work like “What’s Wrong With @antirez’s Post on Sexism in IT”—and I can immediately tell that I don’t need to be writing carefully around her thinking. I sense an authenticity in her strength of character—whether the character is one designed for writing publically or actually hers in “real” life.

I wrote in “Why I failed to talk to Carl Franklin about “Race” in the IT (Information Technology) World…” that the prejudice against women in the IT workplace is almost identical to that of the racist aesthetic used to poison “minorities.” In “What Your Culture Really Says,” @shanley makes my point without really trying:

What your culture might actually be saying is… We have implemented a loosely coordinated social policy to ensure homogeneity in our workforce. We are able to reject qualified, diverse candidates on the grounds that they “aren’t a culture fit” while not having to examine what that means – and it might mean that we’re all white, mostly male, mostly college-educated, mostly young/unmarried, mostly binge drinkers, mostly from a similar work background. We tend to hire within our employees’ friend and social groups.

I am embarrassed for the self-described Black women and men of tech that I’ve encountered digitally over the years because I know that too many of these folks would not only fail to write like this in public—even under an assumed name like “The Corporate Negro”—but off the record they would fail to write or speak like this in relative privacy. How do I know that @shanley is not Black? Surprise me. I dare you.

Anyway, I’m pretty sure that @shanley is not Black.

What’s deeper here is that I am almost certain that @shanley and I would agree that most IT “cultures” are Lord-of-the-Flies boy’s clubs (you can even have a “diverse” boy’s club but everyone speaks with the same Valley-Girl, posh American, Metro-sexual accent, wearing that same Star Trek uniform with a goatee) and we would also agree that there is nothing “evil” about these clubs—until they start telling lies to themselves and others that they represent a “universal” view. They should be honest and self-realized about their cave-man frat-boy, ethnic, provincial shit. Who am I to say this? These are the words coming from a physics student out of UCSB. I’ve worked in astrophysics labs and some of the first personal computer labs for institutional education in the country. I’ve worked in multi-billion-dollar finance, pharmaceutical and entertainment companies. I’m not talking out of ignorance. I don’t have an Al-Sharpton perm cascading split ends over my eyes, giving me an over-simplified black-plastic view of the world.

I know that I am dealing with a bunch of assholes (regardless of color-of-skin) when it becomes clear to me that the bunch has no accurate, well-researched idea of how they are perceived by outsiders. When a group can respectfully and almost-joyfully imagine why people would not want to be in their group then that group has something actually going on in the realm of reality-touching… The key is that imaginative respect. In the world of IT we often prioritize artificial intelligence over organic intellection. When I strongly suspect that my “team leader” used to openly call his mother a “bitch”—to her face—then I know it’s only a matter of time before I’m no longer a “cultural fit” for the “universal” business team of hurray-for-everything…

Related Links

First of all it was not Carl Franklin’s fault. In fact, it was Carl that brought up the topic—“something we should get into”—during the pre-show warm-up for .NET Rocks! #416, recorded in 2009. Second of all, the fact that it has taken me three years to respond to this issue is an indicator of not how little talking about “race” means to me but how many obstacles have been holding me back from addressing this issue properly.

Hanselminutes on 9 - ASP.NET 4 and David Fowler on LinqExtender

In fact, for those who are left alive who claim to know me well—my negligence to bring up the “race issue” in detail on a popular show like .NET Rocks! would be considered yet another “contradiction” about my supposed personality. You mean to tell me Bryan did not pull the “race card” on a talk show that gets over 20 million downloads a month? What’s wrong with Bryan? Is he scared to lose his job or something? How can he look down on Microsoft and Telerik employees—and their golden muzzles when clearly he is muzzling himself with some nasty twine he found in a back alley—right?

The short response to all of these “questions” is that Carl wanted to bring up the topic. Once we got talking it was clear that I was not going to find the opportunity to get into the topic—and it would be too much of a risk to suddenly question me about it “for no reason”—surely more than one listener would accuse Carl of going way, waaay off topic.

In 2009, I was still struggling with XSLT and XML—two very, very unpopular technologies in the Microsoft world. I remember talking about the importance of the obscure System.Data.Common namespace in the .NET Framework—which is now applied in the famous Entity Framework. My struggles show up in my voice. I have a speech impediment—very similar to the one the awesome David Fowler of Microsoft has. But unlike David Fowler, I do not have Damian Edwards to stand in for me when things get a little tight and I begin to stutter.

—And for those of you who are “clever” you may now assume that I am talking about “race”… (as a reminder, I put words like “race” in quotes because this is current vernacular of the time—not my time…)

In the-history-according-to-me, David Fowler is the first Microsoft personality that is a day-to-day, social-networking power player being continually recognized for his excellence by self-described “white” people (—this is quite different from simply having one’s existence recognized, by the way). Now for the complexity: Dare Obasanjo is a Microsoft employee—what about him? There are hundreds of thousands of corporate colored folk like Dare Obasanjo—but the following is not flattery: Dare is too “high up” (or “long gone”) to be as accessible as David Fowler. I consider Dare Obasanjo to be senior—he was there before Twitter. He was there, like me, when blogging first came out—he has developed patterns and practices that do not include the activities that a young cat like David Fowler does every day. It follows that:

One of the reasons why you see so few qualified African-descended people in the usual nerd social circles is that they have no time for it. They have been so successful their lifestyle shows no need for it.

Let’s take an extreme case. Think about the Indian-descended Om Malik in the nerd circles of Leo Laporte. Om showed up on Leo’s shows a few times and then started sending his employees to appear on Leo’s shows. So what we have is a tech elite that seriously have no time to be playing around with all due respect. (What of course is subtly racist is to be angry with Om—or to accuse Om of being “arrogant” for not having time for Leo—but Leo strikes me as not being that type of guy…)

But this observation should beg the question, “Where is African-descended ‘middle-class’ of tech in this brave-new Twitter world?” I’ve got four names: David Fowler (and he’s getting richer every day so his time is running out), Tiffany B. Brown, Denise Jacobs and the super-fine network-administration geek, Adria Richards. Yes, I’m sure there’s more but few (including the people aforementioned) would want to be in my little list.

When I’ve walked into a “blacks of tech” meeting here in Southern California over the years, I have rarely run across a straight-up, hard-core software developer with strong African features. Too many (for my taste) are managers or “entrepreneurs.” It’s like being a musician with a love for the music continually trying to socialize with (and being disrespected by) predators of the music—exploiters of the music—dudes who don’t give a f’ about the music—dudes pretending to know how to play but you never see them get down.

The first hard-core software developer I ever met was a super-fine, super-model-looking database programmer from Sierra Leone. I was so excited to talk to her about tech and she was so not interested in talking about her “day job” (granted: this was before the Internet as we knew it and we were at a 20-something house party). The second hard-core software developer I met was another super-fine sister, Kathy Lott. She hired me for a while to run a program she called “Kids 2000”—using computers to teach literacy to children. The third hard-core software developer I met at a “Blacks in tech” meeting was an older brother that did work for the government. His grasp over the concepts of computer science were sage like—he was a Thelonious-Monk character, kept in the shadows like a freak while the other mediocre manager-types dominated the show.

So the previous paragraph sounds like my talk about “race” and IT has nothing to do self-described “white” folks being total assholes. No. Not so… But my point would be that I have less control over self-described “white” folks being assholes. I still assume that I have more control (and resources better spent) when talking about the deep, deep flaws in the so-called Black “community” that fails to serve/revere/encourage/respect women and men with a technical background. However, I am not going to talk about these deep, deep flaws in forum like .NET Rocks.

Now I’m going to throw out a few flippant remarks within this context constructed by me:

  • Many of the issues facing women in tech are identical to those faced by people of color in tech—especially African-descended peoples. So any new-media show about women in tech is (for me) a show about African-descended peoples in tech. …And many of these shows suck.
  • The research skills that I used to study Black History are the same skills I use to study technology. And these are quite effective. So my habit of quoting sources and providing references comes from an “unexpected place.” Thank you Dr. Gerald Horne!
  • The challenges that I face in the corporate-American IT world are largely amplifications of the same problems everyone of any skin color might have in the workplace. Think about an agile convert trying to survive in a waterfall world.
  • What is rarely explored in the context of “race” talk is something we took for granted at the beginning of our Black education: that the world as it exists today is based on foundations that are fundamentally incorrect—and this why many actual “Blacks in tech” embrace new technologies faster than their “mainstream” counterparts because we are always looking for better technical tools in this wickedly wack bullshit called “the developed world.” You think the relationship between Stevie Wonder and Ray Kurzweil was a freak accident?
  • My relationship with the concept of “correctness” is independent of any contemporary organization in the existence of my awareness. These ancient connotations—timeless connotations (after the first three minutes of the universe)—with “correctness” should be a well-known “ethnic trait” among us African descended people. It is my relationship with the sacredness of “correctness” that is the root of any conflict I may have had—and, sadly, will have—with self-described “normal” people.

I’ve heard Carl Franklin on a few rare occasions on .NET Rocks assert with a hint of irritation that he understands what is being said to him. The person talking at him is usually an asshole-like guy laying down some condescending, sophomoric “intellectual framework”—and Carl will interrupt this guy with the words, “I understand!” The world of Information Technology is full of these condescending, sophomoric characters—many of these minions are middle managers. You notice how “race” has nothing to do with this asshole situation? “Race” merely amplifies this situation. What racism does is help me find these assholes (and often unemployment) faster.

There is no need to slay the wicked.

Just leave them to themselves.

And they will perish…

Related Links

Flippantly, here they are:

  • One: Silverlight-enabled WCF Service (backing View Model collections with ObservableCollection<T> by default)
  • Two: WCF Data Service (OData, backing View Model collections with DataServiceCollection<T>)
  • Three: Domain Service Class (RIA Services, backing View Model collections with LoadOperation<T>)

ServiceReferences.ClientConfig Is Useless in a XAP That Is Loaded by Another XAP.

My Songhay.Silverlight.ApplicationLoader compiles into an 8KB XAP file and is designed to load a bigger XAP file—which in turn uses MEF to load even bigger XAP files. One of these MEF-composed XAP files may contain a Service Reference, which, by default, generates ServiceReferences.ClientConfig. This file is designed to be used by the initial XAP declared in the HTML markup used to call Silverlight. My initial XAP is only 8KB and has no room for one or more Service Reference entries.

My way around this issue is to replicate the ServiceReferences.ClientConfig declarations imperatively. I have written an extension method to System.Windows.Application that accomplishes this:

public static BasicHttpBinaryBinding GetServiceClientBinding(this Application app)
    var mode = app.Host.Source.Scheme.Equals("https",
        StringComparison.InvariantCultureIgnoreCase) ?
        BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None;
    var binding = new BasicHttpBinaryBinding(mode);
    binding.MaxReceivedMessageSize = int.MaxValue;
    binding.MaxBufferSize = int.MaxValue;
    return binding;

For more details, see “Silverlight ServiceReferences.ClientConfig Alternatives” by Manish Dalal. Notice the my extension method returns a binary HTTP binding—Silverlight requires this more payload-efficient binding, which is the chief characteristic of a Silverlight-enabled WCF service.

IEditableObject Moves CRUD Eventing into the View Model

Controls like the DataForm use IEditableObject by convention, defining three methods BeginEdit, CancelEdit and EndEdit. The “begin” method is an opportunity to cache the instance implementing IEditableObject such that the “cancel” method can be used to restore data from this cache. The “end” method passes the instance implementing IEditableObject to the data layer.

Based on my current level of experience with this IEditableObject pattern, I am recklessly confident that my “end” method will not need to distinguish between Insert and Update. This suggests that I am rather foolish and/or I am setting a default value for the primary key associated with my instance implementing IEditableObject—like this:

[Display(Name = "Primary Key", Order = 0)]
[Key, Editable(false)]
public int? PrimaryKey
    get { return this.GetPrimaryKey(ref this._key); }
        this._key = value;

My private method GetPrimaryKey() passes the key field by reference and should be able to derive a valid key for the real-world underlying database. In fact, it can actually perform an Insert operation and have an “empty” record persisted before the user begins an edit session. This technique strongly suggests that the “cancel” method in the IEditableObject contract needs a cleanup procedure to ensure that the underlying database is not littered with “empty” records. I may need to study how more experienced developers address these issues.

What I do notice is that there appears to be no way to use IEditableObject with Delete operations. I assume that one would have to fall back on control eventing to handle any ceremony around deletes. The DataForm, for example, has a DeletingItem event, described by Tim Heuer in “Silverlight DataForm and confirming deleting an item.” Another DataForm event to consider is the EditEnded event, covered by Dino Esposito in “The DataForm Control in Silverlight 3—Revisited.”

My Scroll-into-View Strategy for the DataGrid

As of this writing this is my scroll-into-view strategy for the DataGrid:

this.DataGridOne.SelectionChanged += (s, args) =>
    if(this.DataGridOne.SelectedIndex == this._previousSelectedIndex) return;
    this._previousSelectedIndex = this.DataGridOne.SelectedIndex;

This approach requires declaring an x:Name on the DataGrid.

PagedCollectionView Swallows Collections Whole!

As of this writing, I know of only ways to implement the classic Master-Detail relationship between, say, the DataGrid and DataForm: with a PagedCollectionView and with the simpler CollectionViewSource. Both of these types implement ICollectionView (for details, see the 2008 article “ICollectionView explained”).

Because the PagedCollectionView supports client-side paging (and the DataPager), I prefer the CollectionViewSource (however, when server-side paging is in effect the CollectionViewSource might be useful when a more lightweight design is required). With the PagedCollectionView, the initial problem for me was getting synchronization to work between the Master control and the Detail control—the ObservableCollection<T> was not working out of the box. However, passing an instance of ObservableCollection<T> into the constructor of PagedCollectionView did the trick!

DataServiceCollection<T> is not “Blendable”

Because DataServiceCollection<T> has a dependency on some data-service “context,” DataServiceCollection<T> is not “Blendable” because mocking up design-time data is non-trivial (it may require a live, local OData service always running). However, because DataServiceCollection<T> is a subclass of ObservableCollection<T>, the recommendation here is to use ObservableCollection<T> in View Models.