Who ordered the scrambled brains?

"Creamy. Indulgent. Chewy."

A new use for a blog!

I credit my decline in blog posting to the effect of social networking. You go where your audience is, and where the discussion is, and I must admit my blog couldn’t compete on those criteria with social networks. Hence, I have been writing, but mostly on social networks.

The drawback of social networks is two-fold (and well covered): 1) the format prefers superficiality, and 2) substantial content (as in content with substance) is indistinguishable from superficial content, especially as time goes on. Both have impacted me. I do tend to offer superficial analyses, but when I delve deeper, the content is essentially lost given time.

So I’m going to start repeating myself. Whenever I post something on a social network having substance, I’ll repost it on my blog. Kills two birds with one stone (the second bird death being the survival of my blog). My blog is now a consolidated compendium of deeper thoughts. This also applies to the many in-depth comments I’ve posted on other blogs over the years (which can be gleaned from my HackerNews and Disqus contributions).

This is probably motivated by the fact that I’m drawn to participate in these conversations, but that my time is extremely limited right now given my startup. Thus, to extract more value out of those conversations, I can at least preserve them here.

Full Circle

I dare say I miss blogging. I had, at one time, found a confident voice that toed that nefarious line between utter insanity and mindblowing genius. I’ve been accumulating ideas to blog about for the last–well ever since I stopped really blogging–with nary the actual impulse to stop what I’m doing and let loose. Loose and free. That’s how blogging made me feel: like a senile senior walking down the street sans body-coverings. But it was controlled freedom… Let the mind loosen up and see what random iota gets caught in my net, ponder it a moment, rotate it and think about it from another angle, then jam it through the language center of my brain like a pineapple through a Ronco juicer, pausing every once in a while either to pick out a chicken bone from the funnel or to give the whole contraption a solid whack to get the neural gears turning again.

I feel like I’ve lost something in the intervening years. I almost predicted it some time ago. I am different now. I feel my professional success is attributable to the struggle I’ve gone through; it has made me live up to my own standards rather than my employer’s, and to always consider my employer but a peer. But ironically my values and principles, being forged in strife, have lead me to seek a constant state of strife as a way to accelerate growth. Now I find myself drowning in aspirations: programming projects, books to read, music to compose, articles to blog. And I find myself constantly in jobs where I’m drowning in work. I can say I’ve maintained some M.O.R. sheep’s concept of good progress with annual salary increases of a certain percentage, but at what cost? I’ve traded the freedom and fun that I had found in life as a recovering failure for lopsided professional growth.

Anyway, I still do the constant-self-analysis-for-improvement bit. I think what that process is telling me now is to just build up momentum. Any good habit is all about momentum. Maybe I can utilize my subway time to get free and loose. I would merely be contributing to the subway’s heralded history of senile people and behavior, like the guy that sat next to me and started shouting out Looney Tunes characters, telling us all how much we’d like each one if we were ever able to watch an episode.

Time to get this snowball rolling. But for now, from this pre-tornado windstorm high in the Brooklyner, th-th-th-that’s all folks!

Credit debt management tip

Quick post. I’m constantly looking for ways to optimize my money management. I’ve carried some debt on multiple credit accounts since college days, and always wished for a way to transfer the balance from my higher interest account to the lower one without incurring transfer fees (usually 3%). I had been resigned to handling this merely by paying down the higher interest balance aggressively, while only paying the minimum on the lower interest balance. That is until recently when, like a 2000-ton meteor ejected from a supernova 50 billion miles away crashing at the speed of light into an ant at the pinnacle of Mount Everest, it hit me: the balance transfer can be done indirectly!

If you find yourself in the situation of having debt in multiple revolving credit accounts each with a different interest rate, here’s a fine and dandy way to minimize your interest liability that doesn’t cost anything.

  1. For all the normal everyday living expenses that come up which you would normally pay with your paycheck/trust fund allotment/education stipend, instead pay them with your low interest credit account.
  2. At the end of the month, this leaves you with a higher balance on your low interest account, but also with an equivalent surplus in your operating budget.
  3. Take that surplus and allocate all of it toward paying off your higher interest balance.
  4. Repeat until you will owe no more at the end of the month to your higher interest account.

It might take a couple months, but the end result is that you’ve moved your balance from the high interest account to the lower interest account. Kaboom!

Up to the minute stock reactions to iPad announcement

A simple correlation of Apple’s stock chart (AAPL) with the NYTimes live-blog of the announcement yields the following analysis.

1:00pm: AAPL trading around 204.6.
1:10pm: Image of the new device is shown and name is announced: iPad. Within 4 minutes, AAPL falls 2% to 200.43.
1:30pm: Features and specs are detailed. Within 10 minutes, AAPL rises 1.1% to about 202.8.
2:16pm: 3G connectivity and data rates are announced. Within 2 minutes, AAPL rises another 3% to 209.14.

Conclusion: Investors aren’t fond of the name, but they sure do like subscription models.

Seeing Their World

When I stepped out of the dimly-lit theater after seeing Avatar and entered the bright lobby, I gasped a deep breath and joked that I just separated from my avatar. As had everyone I’ve talked to about it, I was sucked into Pandora for three hours and found myself hating the human corporate mercenaries and rooting for the Na’vi. After months of hype (more than most given my delay in seeing it compared to many others) I was convinced I would be underwhelmed; nothing could possibly live up to what had been said about it. Despite this mindset, I found my emotions being manipulated adroitly by the film, to the extent that the beginning of the final battle scene gave me chills.

How did this happen? For months I had set myself up to be disappointed, and yet in less than three hours my skepticism had acquiesced. The acting was satisfactory, but not perfect. The characters were stereotypical, and the plot was predictable. The three-dimensionalism and special effects were executed with enough precision so as to not be overly-sensational and to have only a subtle effect on your emotions. While watching the movie, one quickly forgets about both. Was it the exploration of the relationship between man and nature? Or the destruction of greed? Those are significant topics, but alone can’t be credited for the movie’s psychological and emotional domination.

The background to the story is a group of people who had developed a way of life that was completely harmonious with nature. To their native planet comes people of a society based on competition and short-term, selfish solutions to social problems. Interpreting this is James Cameron’s job as a storyteller. He could have chosen to model the Na’vi after any group in human history that didn’t directly totally destroy their environment: the ancient Greeks, the Egyptians, medieval Europeans, feudal Japan. Each of those depended on nature directly for survival—at least more so than the indirect manner contemporary industrialized nations do today—and survived only by having reverence toward nature. And he could have modeled the invaders after any other technologically-powerful, self-serving force in our history; the Conquistadors spring to mind, but the United Nations could have also fit the mold. Or he could have made both groups foreign to us, Alien Versus Predator style.

But he chose to model the indigenous after the Native Americans, thereby immediately tapping into a reservoir of sympathy in American culture. Specifically, he taps into a tradition of films about Native Americans that present them sympathetically as an enlightened, noble people (Last of the Mohicans, Dances with Wolves). He then follows through by casting Americans as the invaders. This completes his application of the metaphor, and draws on one of the greatest hypocrisies of modern history: the oppression of an outside group by a group that had identified themselves as outsiders. Not only does he enlist American sympathy, but also feelings of guilt and shame that have come to characterize popular sentiment toward the treatment of Native Americans over time. Using such big emotional touchstones immediately give his story timelessness and raw power.

I think it’s interesting to note something else. The Na’vi have a bio-electrical link with each other, other animals, and plant life. This effectively roots (no pun intended) the mystical components of the culture in something scientific. Cameron recognizes the contemporary reliance and faith in science (primarily through technology), and uses this to subtly remove any hesitance we have in appreciating the Na’vi culture. In fact, this scientific explanation inspires identification with them as living in the same scientific world as ours, but also inspires awe and even envy, for being even more interconnected than our iPhone-carrying selves. Cameron removes the need for us to take a spiritual leap and accept a complex foreign religion. He commandeers our faith in science and effectively repurposes it as faith in Native American beliefs and values. (Not to mention, he purifies the Native American symbolism by having all Na’vi clans coexist peacefully—an arrangement that is credited to a disaster of global proportions. Hrm, wonder what that alludes to…) His trickery boldly puts us in the minds of the Native Americans, just as genetics and advanced technology put Americans in the minds of the Na’vi.

Avatar is an enthralling film on multiple levels, the most significant of which being the memorable imagery created with engrossing technology used in measured amounts, and the cultural symbolism that sets up a sort of justice and redemption for Native Americans (in the Na’vi victory over the Americans). Upon leaving the theater, we won’t find an Eywa to make our identification with Native American values permanent, but we may find a renewed sense of human hope and imagination.

Power of the Wordpress!

According to this, I’d say Obama must have seen my last post about Democratic issues marketing! Suh-weet!!

Mass Health Care

I just finished reading The Democrats’ Day After and had some quick thoughts on yesterday’s Massachusetts Senate victory for the Republicans. I had’t been following the race closely, but clearly health care was the central factor. On the surface, the Democrats have failed in making the case for health care reform to Americans. Sure, there are many out there, Republican and Democrat alike, that support the bill(s) passed by the Congressional houses. However, I imagine the vast majority of these people base their support on personal experiences of difficulty or hardship in the existing health care system, and little on what has been argued by the Democrats. I say this because, as 1) a liberal-leaning individual with a strong sense of human compassion, 2) a political theory and sociology enthusiast, and 3) a news junkie, even I don’t feel like I have a complete and deep understanding of the debate. I’ve had the Wikipedia article on U.S. Health Care open in a tab on my desktop for about three months, waiting to be read when I find the time. Anecdotally, I’d say that most Americans, including and especially the young, have not had trouble with health insurance. For the young, the current state of health care is the reality of health care: under the covers it might not be ideal, but so are many things in the world.

For these ambivalent people, what really stands out about health care reform is the financial cost during a time of economic crisis. Against that, they can only weigh the abstract moral arguments that the Democrats have largely rested upon. And this is the crux of the problem regarding their handling of the debate: they have attempted to cast the issue as a moral one, when the contemporary constituent cares more about concrete ideas. These Americans need to understand the problems before we can feel the moral weight and identify with those that experience the problems. Not adequately informing this majority population is a critical mistake. As impassioned as the Democrats can be on the moral issue (and they are rarely impassioned), the Republicans can fire back hard, concrete bullets of concern over increased taxes. The Democrats would have been much better served by a sharp, directed, and anthropomorphic assault on the varied institutions (and individuals) who are benefiting from the current mess. This is a hardball psychological tactic that is fair game and that the Republicans, as influencers, have admirably mastered. And for the youth specifically (whose apathy prevents them from forming the party base, but are largely sympathetic to liberal ideas) to remain ambivalent to this issue is a massive lost opportunity.

Poorly arguing the case is only part of the problem. The Democrats, over the last four years, have campaigned on the promise of changing the tone in Washington. I would say that their intent was good, but their strategy was pitiful. To these Democrats, changing the tone meant playing nice with Republicans, and not aggressively using every tactic available to them. Primarily, they failed to alter Senate rules to limit minority power, in particular with regard to “individual holds” and filibuster requirements (see the article above). These are procedures that the Constitution authorizes them to perform, and that they had the voting power to enact. Instead, they left them open and preferred a strategy of compromise and bipartisanship. But why not do both? Just because you tighten the wiggle room of the minority does not mean you cannot listen to them, compromise with them, and respect their constituents. To me, this strategy reflects Democratic cultural recognition that the only way they can listen to opposing external viewpoints is by providing or maintaining procedural structures that force them to listen. This is disappointing, and proves itself to be a grave disservice to compassionate policymaking.

Leaving this hole open provides a foothold for an opponent who, unlike the Democrats, will in fact exercise every power at their disposal: Senatorial procedures, compromise, as well as cunning “consumer” marketing. This is the culture of the Republican party. Hence we hear of constant threats of filibuster. Democrats complain that they didn’t behave this way during the Bush years, so the respect should be reciprocated. Unfortunately, those passive acts of collegiality mean little to a populous that receives its political updates from sensational local and cable news shows. The Republicans, however, are very much in tune with the current cultural climate, which is one of fierce individualism (how many reality contest shows are on TV nowadays) where “anything goes” in order to win. Broadcasts of Republican ruthlessness resonate strongly with conservatives, just as Democratic ruthlessness would, if ever there were some to broadcast. For example, I think the Democrats have done a decent job of compromising with Republicans on the issue, but have utterly failed to capitalize on these acts as “tone-changing.” The unity of Republicans was ruthlessly successful in slowing down the bill, and now those Democratic concessions have become ancient history. The Republicans have capitalized by effectively recasting the situation, and all America sees now is a Dem party apparently hellbent on suppressing debate and passing their bill. Instead of acknowledging compromise, the populous see the Democratic party as close-minded and self-righteous; the Republicans have effectively caused the entire “change of tone” promise to appear to be a hypocritical lie. The Democrats should have recognized the longevity of the process of passing this bill, given the razor-thin supermajority, and therefore highlighted the need to act urgently while letting the issues that were contentious early on come to a filibuster. The country would have little tolerance for more than two protracted filibusters before the constant incantation of urgency from the Democrats would feed the image that it was the Republicans who were poisoning the tone in Washington.

In my opinion, Democratic politicians simply have little conviction. When I watch a Democrat speak, I don’t feel like I’m watching someone that has the image of a middle-class hard-working individual planted squarely in the mind. I don’t see passion or recognition of what’s on the line for their constituents. I merely see one who is constantly recalculating their position from an intellectual vantage point, i.e. an intellectual politician. I want to see an intellectual fighter. Someone who has enough conviction in their vision, that they will do the un-intellectual thing and mass market their ideas. Someone who has the intellectual strength to deeply consider the viewpoints of the opponents, to get in the minds of their constituents to understand life as they see it, and then market to them. I want to see a whole party of these fighters, shouting the injustices imposed upon the hard-working, and ruthlessly utilizing every backdoor the Constitution provides, because he is aware of everything that’s on the line and it drives him from within.

Now the health care bill can take two routes: 1) the usual reconciliation process for differences in the House bill and the Senate bill, and have each house go through the voting process again to pass it so that it can move to the President’s desk with both houses’ approval, or 2) have the House accept the Senate bill (which is smaller in scope), move that to the President, and then the House can attempt to start the entire process over to address the issues that weren’t in the Senate bill. The second approach fundamentally makes the House subservient to the Senate, and can upset the constituents of the Representatives (as well as their egos), but I think it is the correct move for the long-term. Starting the process over would give Republicans more momentum and would result in a significantly smaller plan than either Congressional house wants. Further, it would be disastrous for Obama. His Presidency would have lost tremendous steam and whether the Senate bill is affirmed or not, his re-election is already uncertain. The bill is full of very important beneficial policies, and they need to be enacted as soon as possible.

SMS to donate to Haiti relief

Text “HAITI” to 90999 to donate $10 to Red Cross Haiti relief. Charges appear on your cell bill. Cell carrier retains nothing, 100% goes to Red Cross Haiti relief. (Shortcode setup by U.S. State Dept.) See Red Cross announcement and State Dept announcement.

A tip o’ the hat, to ye.

Two thousand nine is finally drawing it’s last wretched gasps before collapsing into a maggot-ridden mess of rotting flesh on my porch. The year that held so much promise is finally retiring, it’s unmovable presence yielding to the unstoppable passage of time. (I believe in China it’s known as the Year of the Wicked Headmistress. “Enrichment through Punishment.”) I’m spending these final reflective, relatively serene hours of 2009 with some Kirin Light. It’s a beverage that I once thought to be a delectable harbinger of good times, but now see it as a premonition of impending metallic aftertaste. Indeed, it leaves you with no more than headache. In doing so it’s the physical analog to the emotional heartache with which 2009 has only left me. Yes, it’s a striking analogy: grand, nuanced, insightful… at least until I concede that after about 2-3 years away from my blog’s admin screen, I’m about as deft rhetorically as a stowaway returning from a fruitless journey at sea is ambulatorily. (That sentence: case in point.)

I’m ending the Year of Kirin Light by jumping back into this blog for another whirl. I feel like I’ve lost something without it. The sense of connection I experience when I project my thoughts to the imagined Reader, with his/her skeptical eye for authenticity, her/his desire to be challenged but respected, and its own wealth of experiences against which mine are measured. That sense, false or not, drives me to explore my thoughts and make sense of those things that stir me, that I may not be stirred but guided by them. So hopefully, we’ll be in each other’s presence more during 2010, Reader.

And that’s all I’ve got for now.

PlaceHolders and UserControls (i.e. Template-Lite UserControls)

Most of you will want to skip this technical addition to my otherwise prolific and interesting personal chronicles. (Ok ok I admit I’ve been way too consumed with professional goals over the last two years to blog. I’m motivated, almost desperately so, to strike while the iron’s hot and thus have had to reallocate my time. Short-terms goals are roughly: finish my programming reading list, crank out a couple learning programming projects, revolutionize digital information, then get back to the business of documenting the incoherent musings of my scrambled brains.)

Anyway, back to my technical article. I’ve been experimenting lately with increasingly complex browser look-and-feel, and encapsulating that into generic UserControls (I know. I’m still using WebForms. Ugh.) I’ve always believed my only recourse was to develop a custom control for this. I prefer to derive from WebControl, and went down the path of building full-on, by-the-books templated datasource controls (exposing ITemplates qualified with PersistenceMode.InnerProperty, and insantiating them in CreateChildControls, and rejiggering DataBind to fire <template>Created and <template>DataBound events so the consumer can FindControls in his content).

Worked fine, but for the consuming code to have to rely on Created and DataBound events to get visibility into his content was totally cumbersome and counterproductive to the original goal of creating something like a Panel that didn’t parse child controls (i.e. was qualified with ParseChildren(false)). Furthermore, I wasn’t doing anything data-related in the controls themselves, since they’re generic. In fact, my TemplateContainers were glorified objects.

So I realized the data templating is beyond what I need, and I refactored back to exposing mere setter PlaceHolder properties, with PersistenceMode.InnerProperty. The setter would merely add the value (which was also a PlaceHolder) to the Controls collection, and keep a handle around for optimized rendering in an overridden RenderContents. This was much nicer because it could be used like a plain old Panel. The drawback, however, was that that complex look and feel that the control encapsulated was still baked into a custom control, without the declarative manageability (and dynamic recompilation) of UserControls. As I pondered this the other night, I wondered if an actual UserControl could expose a setter PlaceHolder property qualified with PersistenceMode.InnerProperty. Such a setter would add the value not to the Controls collection, but to a PlaceHolder persisted in the declarative portion of the control.

I fired up VisualStudio this morning and put finger to keyboard. And the technique worked!

Example UserControl:

    1 <%@ Control Language="C#" AutoEventWireup="true" ClassName="WebUserControl" %>

    2 <script runat="server">

    3     [PersistenceMode(PersistenceMode.InnerProperty)]

    4     public PlaceHolder Bah

    5     {

    6         set { bah.Controls.Clear(); bah.Controls.Add(value); }

    7     }

    8 </script>

    9 <asp:Label runat="server" ID="before">fancy complicated preceeding content</asp:Label>

   10 <asp:PlaceHolder runat="server" ID="bah"></asp:PlaceHolder>

   11 fancy complicated succeeding content

Example consumer:

    1 <%@ Page Language="C#" AutoEventWireup="true" ClassName="Default" %>

    2 <%@ Register Src="~/WebUserControl.ascx" TagName="WebUserControl" TagPrefix="test" %>

    3 <script type="text/C#" runat="SErver">

    4     protected void Page_Load (object sender, EventArgs e)

    5     {

    6         dynamic.Text = DateTime.Now.Ticks.ToString();  

    7     }

    8 </script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    9 

   10 <html xmlns="http://www.w3.org/1999/xhtml">

   11 <head runat="server">

   12     <title>Persist as InnerProperty on UserControl test</title>

   13 </head>

   14 <body>

   15     <form id="form1" runat="server">

   16         <test:WebUserControl runat="Server">

   17             <bah>test <asp:Label runat="server" ID="dynamic"></asp:Label></bah>

   18         </test:WebUserControl>

   19     </form>

   20 </body>

   21 </html>

Example output:

    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    2 

    3 <html xmlns="http://www.w3.org/1999/xhtml">

    4 <head><title>

    5     Persist as InnerProperty on UserControl test

    6 </title></head>

    7 <body>

    8     <form name="form1" method="post" action="default.aspx" id="form1">

    9 <div>

   10 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE4NzM3NDU2NjcPZBYCAgMPZBYCAgEPZBYCAgIPZBYCZg9kFgICAQ8PFgIeBFRleHQFEjYzMzczMTUyMTk3MDA3NTk0MmRkZIkdLkHRWXYFy657lSmO9z5WqoSr" />

   11 </div>

   12 

   13         <span id="ctl02_before">before</span>

   14 test <span id="ctl02_dynamic">633731521970075942</span>

   15 after

   16     </form>

   17 </body>

   18 </html>

Perfect ID namespacing, content visibility (no need to FindControls) from the consumer, *and* the manageability of UserControls. This is a solution to a problem I’ve faced since I started with WebForms, and I am absolutely stupified that I have not come across this anywhere before. (Maybe in a few days I’ll be back to describe some fatal flaw I found with it.) But so far, it seems like the holy grail of complex UserControls.

1