<CharlieDigital/> Programming, Politics, and uhh…pineapples


Extraordinary Craftsmanship

Posted by Charles Chen




I think that's all I need to comment on these 🙂

Filed under: Miscellany 2 Comments

Speculating on the next Gameboy

Posted by Charles Chen

As I was laying down to sleep, I started to think about the next generation Gameboy (GBX, Gameboy Next).  Honestly, I don't remember the train of thought that lead me to thinking about it, but I was sooo engrossed, that I had to get out of bed to jot down ideas and what not.

The first thing that came to mind is what type of media would Nintendo choose to use?  I think that any sort of optical or magnetic disk type media would be way too inefficient from a power and loading time perspective.  Clearly, Nintendo has always placed a big emphasis on quick load times, which are essential for portable gaming systems.  In addition, Gameboys have a rich tradition of looong battery life.  Disk based media require spinup time, which negatively affect load times.  So the only thing that comes to my mind is flash media (or small format hard drives, if they're cheap enough and sufficiently durable).  It will likely be a proprietary format (for reasons that will be discussed below). 

But to distribute flash media with each game is inefficient and costly (as was always the main issue with cartridge based systems aside from the size limitation).  We have already been told by Nintendo that the Revolution will offer games for download.  It would seem like this would also be the obvious choice for the GBX, with one radical difference: the games will be download only

Yes, download only.  This may sound bad for stores that sell games, but consider the facts: 1) stores will have an advantage in that they can distribute game related materials (manuals, freebies, etc.), 2) not everyone will have access to an internet connection, so stores will still need to have download kiosks, 3) stores will allow users to validate copies of existing software titles so that users can download.  That last point is of particular interest as it means that the GBX will have backwards compatability by allowing users to download copies of their old games.  We have a precedence for this as Revolution will allow users to download old NES and SNES games (and who knows what else, maybe even Sega Genesis games?!).  On point 1, all manuals will be made available online in PDF format for download.  On point 2, an internet connection will not be required to play the game, only to download the game.

All downloaded games are portable across units, but not across media.  What this means is that you can download a game to a particular media and you can then use that media in another unit to play the game, but you cannot copy the media.

Flash memory is relativley cheap nowadays, with retail prices for 1GB of memory ranging from $40-50.  For comparisons sake, the Gamecube disks are 1.5GB in capacity.  Keeping in mind that this is a portable system meant to be played on a small screen and the fact that flash memory prices will drop significantly in the next 1.5 to 2 years (the timeline for the GBX), we can postulate that a 2-4GB flash unit at $40-50 could hold a good number of games considering that the current DS memory cards are only supported up to 128MB.  Of course, the games themselves will be cheaper as the overhead of distributing the games is significantly reduced.  The cost of printing the games is completely eliminated.

The advantages of using flash media and downloads is easily apparent in the cost savings for Nintendo and the convenience for the user.  Using solid state memory allows for significant power savings and reduced loading times compared to magnetic and optical media.  For game saves, the GBX can either reserve game save space on the download media (for example, if the game is 120MB, 10MB may be reserved for the game saves for a total footprint of 130MB) or perhaps use a seperate, more conventional (non-proprietary) media, for game saves.

So why is a proprietary media required for the downloaded games?  The reason is that it must support certain measures to ensure that games are not duplicated (or at least not easily duplicated) and/or pirated.  More specifically, it must contain a write only section that cannot be altered. How does this all work out?  I'm glad you asked 🙂

  • Each media will have a unique identifier (UIDMedia)
  • Each media will have a private key (KV,Media) and a public key (KU,Media)
  • Each GBX unit will have a global public key (KU,Global)
  • Nintendo servers will have a master database that contains the unique ID (UIDMedia) for every media manufactured along with the public key for the media (KU,Media)
  • Nintendo servers will also have a private key (KV,Global)

Certainly, there will be some sort of handshake procedure and what not to setup the connection for browsing game catalogs and initiating the download to ensure that only registered hardware (registered when manufactured) can connect to the servers, but I'm only going to cover how a theoretical download scenario could work after the handshake.

(I aplogize for the unconventional notation, as I'm too lazy to go in and format the HTML properly, so just follow along.  Also bear in mind that this is a very high level overview.)

  1. <Unit> M0 = Encrypt(KU,Global(UIDMedia)).  The first step is to create a message by encrypting the unique ID of the media using the public key of the Nintendo servers.  This ensures that only Nintendo servers, which have the private key, can decrypt the message and map the unique ID of the media to the public key of the media.  The message is sent to a Nintendo server.
  2. <Server> UIDMedia = Decrypt(KV,Global(M0)).  The server decrypts the message from the unit using the server's private key.  This results in the unique ID of the media.  The Nintendo servers contain a key map of media unique ID to media public key.
  3. <Server> M1 = Encrypt(KU,Media(KShared)).  Using the public key of the media, a shared key is encrypted to create one part of a message.
  4. <Server> M2 = Encrypt(KShared(FileGame)).  The game binaries are then encrypted using the shared key.
  5. <Server> MF = M1 + M2.  A final message is created by encapsulating the encrypted shared key and the encrypted game file.  This composite message is then returned to the GBX unit.
  6. <Unit> KShared = Decrypt(KV,Media(M1)).  The GBX unit obtains the shared key by decrypting the first part of the return message using the private key of the media (remember, it was encrypted using the public key of the media which is stored at the server).  The shared key is never stored in an unencrypted form.  Each time a player loads a game, the shared key is decrypted again.  Only the encrypted form of the shared key is stored (perhaps the unique ID of the media is also stored in the message as an added measure).  Because the shared key is encrypted with the public key of the media, only the private key of the media, contained in a read only region of the media, can be used to obtain the shared key.
  7. <Unit> FileGame = Decrypt(KShared(M2)).  The game file is read using the shared key.  Decryption is done in real time using hardware level decryption for performance reasons.

Essentially, this would be a form of DRM where the rights are associated with the media, not with the unit.

Bill Gates was straight on in commenting that the HD-DVD vs Blu-ray format war is insignificant due to the fact that this will be the last significant physical media (from a distribution perspective) for quite a while (at least when it comes to consumer electronics; holographic storage will eventually become the standard in ultra high capacity data storage).  Nintendo, I think, will be the first gaming company to move away from distributing physical media altogether by switching to a download only type of service for its next gen portable console.

Other random thoughts on the console are:

  • The DS screen resolution is currently 256x192 (for each screen).  PSP is 480x272.  I expect that, with the improvements in LCD and processor technology in the next two years, the GBX will have a resolution higher than the PSP (although we all know that Nintendo has a habit of undervaluing graphics capabilities).
  • It will have a 6 button design similar to the DS.  The current GBA has a 4 button design (A,B,L,R).  I picture a setup more like the GCN's, however, in that it will be three smaller buttons surrounding one large action button.
  • The unit will have a built in gyroscope.  This ties into the Revolution and some of the experimental games on the GBA which have built in motion sensors (WarioWare Twisted!).  Racing games, flight sims, etc. will be totally sick on this machine.  In addition, it may also connect to the Revolution as a wireless controller.
  • Following in the vein of the SP and the Micro, it will be slickIt will be sexy.  I picture it somewhat like an iPod Nano in terms of finish (except it'll be more resistent to scratches).
  • It will have built in wireless capabilities.  We see that Nintendo is finally coming around to all of this 'Net gaming and really embracing it (Mario Kart DS).
  • To enforce a kid-safe environment, as each unit will have a unique ID, Nintendo can create an architecture whereby each conversation and each exchange of text is logged and scanned in an asynchronous fashion.  Other users in a conversation may also choose to explicitly tag a conversation as breaching the terms of service.  Essentially, it would require a massive grid of computers to scrub recorded voice and text data for abuse.  In turn, Nintendo can punish those users by disabling voice and text capabilities (on the Nintendo network) for an increasing period of time with each infraction.
  • There is a very distinct possibility that we will be seeing an emergence of large capacity, small format hard drives in the next year.  This is related to the recent developments in storage design.  Specifically, perpendicular storage technology, which promises to increase disk density significantly.  Anywhere I've used "flash memory", it may very well be replaced with a micro harddrive boasting 20-40GB.
  • I think it'll look like the OQO ultraportable in terms of layout (the screen slides up to reveal the input buttons), except not as wide.  This would be inline with the design of the Gameboy Advance SP "clamshell" and would be great for viewing media when not gaming.  Which leads me to...
  • The GBX, contrary to Nintendo's typical stance on building pure gaming machines, will be a multimedia platform as well.  With the emergence of cheap, large capacity storage and the competition (Sony), it will be hard for Nintendo to ignore this functionality.
  • And finally, this being Nintendo, we know that there is going to be some sort of innovation that hasn't been done before on a handheld gaming system.  I predict that this will be stereoscopic 3D.  Yes, you read that correctly.  Sharp has already developed an LCD for cellphones which has this technology.  What's great is that the effect can be turned off in case it causes headaches and what not for certain users.

Okay, that's enough babbling and speculation from me.  Time to sleep damnit!  I dunno, I've somehow managed to hype myself up over my totally fabricated speculation 😀

But mark my words, I think what I've outlined here will come to be in the form of the next generation "Gameboy".


The Dangers of Prototyping

Posted by Charles Chen

I came across a good article on prototyping
as I was reading about some of the reactions to the rumors that the
Nintendo Revolution hardware will not be capable of much more than the
current Gamecube hardware.

In my senior level software engineering course, my professor
discussed that one of the pitfalls that was associated with building
prototypes is that different audiences have vastly different
expectations and draw different conclusions from prototypes.  For
example, an architect that builds a prototype to demonstrate a new
portal architecture doesn't necessarily have to make the UI look
pretty.  Other developers can appreciate the architectural design
elements such as how requests are handled, how state is handled, how
communication is handled between different components and so on. 
But show it marketing or sales in the same state, and the project could
be dead in the water before it even starts, even though it may be the
best portal architecture ever designed.

I think Nintendo took a big risk by showing demos of the new
controllers in actions so early.  While it was necessary to prove
that the new control schemes could work and work well, there is a
(mis)perception around the gaming community that the early prototypes
represent the final product in terms of graphical quality, even though
we currently have no idea what kind of hardware the demos were running
on.  The average Joe looks at the graphics of the current gen.
hardware and then looks at the demos and will promptly proclaim that
the Revolution sucks without realizing the true level of innovation and
potential of the Revolution.

The article raises the question: "Is the Prototype the Production
System’s Ugly Sister?"  Most of the time, yes.  But in some
very special cases, the visual elements of the prototype, while they
may have no significant impact from a software engineering perspective,
become deal breakers:

The prototype does tend to be pretty ugly, and
deliberately so. Absolutely zero time should be spent trying to make it
look appealing. There are, however, a few notable exceptions to this:

  • The prototype’s goal is to prove that a particular technology can be made to look good
    (e.g. writing a GUI client with Java Swing). In this case, the
    prototype would be more of a proof-of-concept, and would consist
    primarily of GUI tricks and best practices to get the best out of the
    platform and widget toolkit being used. In fact, you would spend less time concentrating on actual functionality, because that’s not the point of the prototype!
  • The customer has difficulty distinguishing between form and function.
    If this is the case, it sometimes pays dividends to spend a little
    extra time making the prototype look good. Don’t go overboard
    though—remember what you’re creating is going to be abandoned pretty
    soon, in favor of a brand spanking new, shiny version with all mistakes
    learnt (at least that’s the plan!)
  • The prototype will also be used by Sales & Marketing, as an early sales pitch for your upcoming new product.
    In this case, looks and shininess (the “ooh” factor) probably take
    priority over real demonstrable functionality. Showing the customer
    your impressive 20-megabyte auto-generated comma-delimited invoice file
    might bore them faster than you think.

These are the exceptions, though. Most of the time, the prototype is
intended primarily as a means of gaining insight into the ideal
architecture, and is written in tandem with the design—before any
production code gets written.

I've bolded the portions that I found to apply to Nintendo's current
situation.  While I think that most people can understand that
those demos were really designed to show off the controller, they have,
nonetheless, inadvertantly relegated the Revolution to "has been" in
the minds of many gamers that have associated improved visuals with
"Next Gen".  So Nintendo has made the unfortunate mistake of not
making the demonstrations "pretty" enough, even though they were mainly
meant to demonstrate that the control scheme could work.  Of
course, Nintendo can still blow us all away with XBox 360 level
graphics, but they've already lost the attention of a percentage of
hardcore gamers for whom graphical prowess is king.

The one thing to remember is that Nintendo has been working on this
next gen. hardware for quite some time now.  There will be a new
CPU from IBM and a new GPU from ATI.  I think the reasonable
conclusion is that the graphics for the Revolution will be significantly better than those on the Gamecube and first gen. games will likely be on par with first gen. XBox 360 games.

Filed under: Gaming, Technology No Comments

On Leadership

Posted by Charles Chen

I came across an editorial on CNNSI.com
on, among other things, the play of Baron Davis and how he's helped
turn the perpetually bad Warriors around and get them off to their best
start in the franchise's history.

While the editorial relates to basketball, I think it serves as a great analogy to anything in life that requires leadership and teamwork.

"No disrespect to the point guards who were here in the past, but
Baron's the type of point guard that makes everybody better," says
backcourt mate Jason Richardson. "He gets in the lane and just finds
guys. I been waiting for a guy like him to come and he took my game to
another level."

This is not, incidentally, the type of quote one reads about Marbury,
despite his career averages of 20 points per game and 8 assists. But
this type of appraisal, I would argue, is a simple, but fail-safe way
to assess any point guard: do his teammates like playing with him?

So how, exactly, does one make teammates speak of you with the enthusiasm of Rex Reed
reviewing a big studio film likely to quote him in its print ads? "Everybody
needs special attention, especially from a point guard
," Davis
explained. "It's about learning my teammates and their personalities.
Being a point guard is about making the guys around you confident to
where they feel like they want to play with you because they know that
you're looking out for them.

I study guys and know where they like the
ball and where they are effective. When I played with David Wesley and
P.J. Brown, I knew where they liked it and tried to get it to them in
those areas."

Great lesson to learn on leadership, I think.

Filed under: Life No Comments

Gaming News Galore

Posted by Charles Chen

Yes, while I have absolutely no time for gaming these days
(especially console gaming),  I still constantly trawl through the
'Net looking for news and info on the next gen. consoles.  I don't
know why, as I don't seem to have much time to play console games

But in any case, today marks the official start of the Next
Generation in the console wars.  Microsoft's XBox 360 officially releases
today.  In addition, Sony announces that the price of the PS3 will debut at about $300-400,
contrary to the earlier rumors that the pricepoint would be closer to
$500+.  At $500+, I definitely wouldn't get one.  At
$300-400, for a Blu-ray player, I'd probably pick one up.

I've been debating on whether it's worth it to get an XBox
360.  I didn't get the first XBox, even though there were some
great games on it.  But I've got a nice, big HD set at home just yearning for the Next Gen. systems.  Oh who am I kidding, I don't have the funds for it in any case :P.

Meanwhile, I've also been reading about the poor manufacturing quality control for the first batch of XBox 360's. 
Apparently, there have already been some "casualties" with the XBox
360's in circulation.  From what I've read, it's primarily a heat
issue.  This makes me worry somewhat as the Nintendo Revolution's
CPU is also being produced by IBM and the Rev. will be in a much
smaller form factor.  If it's using a similar architecture, then
it could be an issue.

Speaking of the Revolution, news on that front has been pretty
mum.  My wife was playing Monkey Ball on the GC last night (I
dunno what would compel her to suddenly want to play it, but she hooked
up the GC and sat there basically all night playing it).  I sat
there watching her twisting and turning her whole body (to no avail) as
she guided here little monkey around the course.  Man, Rev. is
going to rock sooooooooooo hard.

Filed under: Gaming, Technology 4 Comments

Fun in Philly

Posted by Charles Chen

Wow, I had a lot more fun in Philly than I thought I would have.

Back up a bit.  I had originally registered for the Microsoft launch event in Philly as a participant a few weeks back.  Last week, Rich, my new manager, got 4 of us together, the only 4 that had really played around with SQL Server 2005, and asked if we could come up with a demo for the show as, apparently, we had a presence at the show. 

Long story short, I ended up taking up part of the responsibility of building the demo and also working the booth at the show.  Somehow, we ended up building a database mirroring demo which featured an ASP.Net 2.0 and Atlas frontend.

I also ended up with the responsibility of creating some posters and datasheets that we could hand out along with our demo.  Keep in mind that all of this came up last Thursday.  Having technical and graphical skills is both a curse and a blessing I guess.

Well, in any case, the show was a huge success.  We had people lining up to look at the demo and to talk to Igor and myself.  For an app that was put together in 10-12 hours, it was surprisingly stable.  We only had one major issue and that was a networking issue (dropped IP addresses).  It was so good that we had people coming back to the booth after seeing the datasheet from other people.  We had people coming back with their friends because they were so impressed.  It was quite amazing.  We ran out of the datasheets for the demo in the first 90 minutes of the show (maybe the first 60).  Fortunately, we also had it in poster form (which we didn't give away).  It drew quite a bit of attention and there were a lot of people who just stopped in their tracks to check it out.  The funny story regarding that is I almost didn't have the poster printed.  I was originally only going to print 8.5x11 copies, but Frank, another consultant, suggested that I go with the poster.


Believe it or not, I put it together in ~3-4 hours Tuesday night after I got back from a client site.  Everything on this sheet was created from scratch (Except for the computer graphic, which came from Visio).  I swear I was half asleep when I put it all together 😀

I actually heard a lot of comments on the poster, even one from a professor who said she really loved the layout and colors.  Even my wife was impressed that I put this together when I did/in the amount of time that I did it in.

So all in all, a fun but tiring day.  Man, I just love building cool stuff and I love connecting with other developers.  Hopefully, I'll have more opportunities like this in the future.


SQL, VS.Net, and BizTalk 2005 Release Event

Posted by Charles Chen

I'll be in Philly next week for the Microsoft release event for SQL Server 2005, Visual Studio.Net 2005, and BizTalk 2006 next week (11/17).

I'm not only going as a participant, but a small group of us will be there representing EMC, one of Microsoft's partners for the event.  Rich Millman, my current MC, will be on some speaking panel and a couple of us will be manning a booth on the floor.

As there were only 4 of us in the group at INS Piscataway that have played around with and read up on SQL Server 2005, I was invited into a brainstorming session on what type of demo that we could put together that would draw people in and hopefully get some new contacts.

My first thought was to create a failover cluster using 4 spare PCs that we had.  Not that it's a great demo of the new features of SQL Server 2005, but I figured that it would draw people's attention and since most developers probably very rarely interact with failover clusters.  It would have been cool to let people walk up and plug/unplug indivitual nodes and watch it failover automatically.  Alas, we didn't have any spare hardware sitting around to build the disk array and it was probably too late to borrow anything from EMC.

My second idea was a little better.  Even though database mirroring isn't officially supported in this release of SQL Server 2005, I figured it would be cool to demonstrate it as it's much more likely to be used than failover clustering due to the low cost of implementation.  And so, myself and Igor went about building a demo setup for database mirroring.

One of the first challenges we had to overcome was to figure out why it's not officially supported in this release.  Obviously, it would have sucked to spend hours working on the architecture and UI only to realize that mirroring was buggy and unstable.  After some research, it turns out that the primary reason for not supporting it in this release is because of the fact that Microsoft couldn't find enough beta testers to fully test the new feature.  With that in mind, we decided we could probably pull it off and Igor and I started to dig in.

It's actually fairly cool and takes advantage of a lot of the new features of the 2005 suite.  The UI is an ASP.Net application that utilizes Atlas to retrieve data from a web service.  Another web service was written to interact with the host machine services to stop and start the individual SQL Server instances.  Very cool.  I'm hoping I can talk them into letting me post the code and walkthrough here for anyone that wants to try to set up mirroing.


So if you're going to be in Philly at the launch event, look for INS there!  The demo is very cool.


All Hail Flying Spaghetti Monster!

Posted by Charles Chen

Yesterday, news spread that the Kansas school board passed legislation to include intelligent design into the school curriculum.

As expected, there was some colorful discussion on Fark.

In an opinion piece in Time this week (11/14/2005), Eric Cornell, the Nobel Prize winner for Physics in 2001, brings up
some good points with regards to an unrelated case in Dover, PA.  He states that:

"The central idea of intelligent design is that nature is the way it
is because God wants it to be that way.  This is not an assertion
that can be tested in a scientific way, but studied in the right
context, it is an interesting notion.  As a theological idea,
intelligent design is exciting."

That's the key right there.  At the core of all sciences is a
process of exhaustive, systematic testing to draw a conclusion based on
what can be observed.  No such systematic testing can be applied
to the notion of intelligent design.  How can you test the
idea that, because some beings are so complex, they must be born of
some higher order being?  At best, the discussion should be
relegated to some philosophy or theological course and have nothing to
do with the sciences.

Notice how Cornell uses the term "God".  While ID activists
will attempt to convince us that this isn't about Christianity and
creationism, it is quite clear, based on the main leaders of this
movement, that this is simply a cloak for injecting the creationist
agenda into out public school systems.  Otherwise, we may as well
teach Flying Spaghetti Monster
as well, right?  It's frightening to think that certain parts of
the coutnry are really not that far off from the fundamentalists and
extremists that we so detest.

I think that the most important point that Cornell makes is that to
use "The Will of God" to answer questions that science has no solution
for yet, is dangerous to the progress of mankind.  It's dangerous
in the sense that all science is driven by the knowledge to understand
that which still remains a mystery. 

"The thrill is that our ignorance exceeds our knowledge; the exciting part is what we don't understand yet."

To use "The Will of God" as a blanket statement to answer questions
that which we do not know the scientific answers to, is to say:

"Everything outside this box we can only explain only by invoking God's Will."

It creates an artificial constraint on the growth of our collective
knowledge.  It hinders a generation of scientists and discovery by
drawing a bounds.  In a sense, it's no different than those that
claimed (and believed) that the world was flat.  If no man had the
audacity to challenge this thought, if we had accepted such "facts",
then it would surely be a very, very different world today.

Filed under: Life, Rants 4 Comments

Insight into French Unrest

Posted by Charles Chen

I haven't been following the riots in France with any particular interest, but a blog post by a journalist in France caught my attention.   A little snippet, if I may:

The rebellion is spreading spontaneously -- driven especially by
racist police conduct that is the daily lot of these youths. It's
incredible the level of police racism -- these young are arrested or
controlled by the police, shaken down, pushed around, and have their
papers checked simply because they have dark sins, and the police are
verbally brutal, calling them 'bougnoules' [a racist insult, something
like the American "towel-heads", only worse], 'dirty Arabs' and more.
The police bark, 'Lower your eyes! Lower your eyes!' as if they had no
right even to look a policeman in the face. It's utterly dehumanizing.
No wonder these kids feel so divorced from authority.

Wow.  Certainly, there are better ways to voice your
dissatisfaction with goverment policy, but I can't blame the youth if
the picture is really as dark as the blog paints it to be.

For me, I think the most distrubing thing is that I don't see how an
resolution can be reached easily as the core issues are not ones that
can be changed overnight or through words alone.  I simply cannot
answer what the proper course of action is on behalf of the goverment
as there is no central figure with whom to negotiate terms of
peace.  Further martial action will surely only be met by more
resistence and increased unrest amoung the youth.

Could we be seeing the early stages of a modern day revolution?

Perhaps what's most frightening is that, for the most part, none of
the current activity has been organized on any large scale.  I
think everyone would fear the invovlment of an organized Islamic
uprising which may draw upon the vast network of European Islamic
extremists.  Aye, this is a Jihadist's dream in the making.

Filed under: News 2 Comments

.Net Roundup

Posted by Charles Chen

I hate to just link to pages, but there's a lot of stuff to catch up
on today, so allow me to indulge myself by placing a little reminder
here 😉

Dino Esposito has a nice little write-up on authoring custom controls in .Net 2.0. Hop on over and check it out.

Jesse Ezell has a post on why Visual Studio Team System is just craziness (in a bad way).

Lance offers a small take on the ever present challenge of staying relevant and educated.

Wally links to a post listing various AJAX frameworks.

That's it for now; got lots of reading to do tonight.