Monday, July 21, 2008

Adam Kinney has post some articles in the past showing a Silverlight application for displaying gamer cards.  When the Playstation 3 finally caught up and created a "Portable ID", I thought this would be a decent chance to demonstrate some Silverlight chops. Yes, I have a PS3 and not an XBox360.  I thought maybe I'd make an application with unnecessary animations and sounds for fun, perhaps allow you to sort friends and setup notifcations that are not available from the PSN.  Here's my Playstation portable ID:

The gist of the online status is simply a JPG, in my case http://pid.us.playstation.com/user/drpayne.jpg , that gets updated when your status changes via the console.  Excited to run off and write code I created a Silverlight 2 app and set about downloading this JPG.  Except that it doesn't work because of Silverlight's cross domain security policies.  I'm not a genious in TCP/IP or DNS/BIND, but the policies used by Silverlight (mimicing those used by Flash) seem overly restrictive and make some scenarios that should be common and easy difficult or un-doable.  There may be a reverse-tunnel situation or similar DNS trickery that is capable with this type of application, but denial of service?  Check out what I just did in this blog posting:

<img border=0 src="http://pid.us.playstation.com/user/drpayne.jpg"/

When the markup for this page is downloaded to your browser, the browser then issues seperate http requests for content that lives on other servers.  That content comes from us.playstation.com, and Google analytics, and Blogged, and others.  This is, seemingly, not a security or denial of service risk in this particular situation.  The PS3 network site shown above did not need to place a client policy XML file in the server root, and in fact they would need to do work to prevent cross domain access of this type.  Sure, Silverlight has more than just HTTP networking capabilities, in fact for a future article I have a full blown instant messanger application implemented in Silverlight using Sockets.  In terms of being a good Technology Citizen, I can see Microsoft wanting to be very careful concerning what it allows devlopers to do with more general socket programming.  But HTTP?  Isn't this part of what the web is "about" ?

What do you think?  Is the cross domain policy employed by Silverlight too restrictive?  Does it not go far enough?  Just right?

Monday, July 21, 2008 12:20:51 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, July 08, 2008

I made reference a few times last year to some big things being in the works but that it was hush hush.

Our company, called CarSpot.com since 1995, was acquired by AutoTrader.com, the biggest player in the online automotive space with an overwhelming market share.  CarSpot was picked up for our innovative online, mobile, and desktop solutions to pervasive data aquisition, aggregation, and distribution problems.  To AutoTrader, having a small satellite office that is much more agile than a multi-billion dollar entity was an attractive proposition.  Let's face it, some large companies couldn't change the font of a paragraph burried in an obscure section of their website without a 50 person team of project managers, business analysts, marketing, managers, designers, and developers.  Here at CarSpot, though, an impressive amount of functionality was written and supported by basically four technical people.

CarSpot traditionally was very casual.  Developers have always been trusted to get their work done, a simple practice that's practically unheard of out there.  People came and went as they pleased, a lot of beer was purchased on the company credit cards.  There was no internet monitoring, we played a game of Quake III at work sometimes, almost any link you might get from a friend marked "NSFW" was really just fine at CarSpot.  We had power and freedom and we did some good work; we were encouraged to goof off on things that might turn into good things for the company.  What we didn't have was tons of money to buy all the servers we should have had for redundancy and there were sometimes some tools it obviously made sense to have that we just couldn't buy.  I had been consulting with CarSpot for years, but when I joined full time in August of 2006 I was the only spouse/kids/mortgage employee in the shop; benefits weren't all that family friendly.

In the post-purchase world, the former owner is still the President of this division.  We have all the upside of a large company like HR, benefits, money, and infrastructure, and AutoTrader is making sure we keep our culture.  We are considered the "R&D Division" and are expected to keep AutoTrader.com ahead of the technology adoption curve.  With a mix of more traditional projects and products with lists of enhancements for sales and "mess with this to see what works and what could be better" type mandates this is shaping up to be an ideal place for geeks to work.  Hopefully the two employees I've added to my group this year are enjoying themselves. 

For the longest time, we were forbidden from publicly mentioning this pending an "Official corporate communication strategy".  This never happened, so its high time I made a public announcement to the geek community.

Tuesday, July 08, 2008 11:39:16 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Monday, July 07, 2008

After debating for at least 6 months I pulled the trigger on a new dSLR which showed up today.  The Canon Rebel XTi, 10 megapixel; it ships with a 18-55mm f/3.5-5.6 lens.

I take absolutely terrible photos with any camera, and this camera is (among other things) a means to learning how to do it right.  I've been meaning to take more pictures of the kids and various other things and this will be a big help.  Plus, it's cool.  I ran around taking pics of everyone and  everything at Carspot today.  Watch my flickr stream in the coming days.

Monday, July 07, 2008 2:45:50 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback

Pardon me while I scratch my head and try to decipher this paradox:

 

This is one seriously confused program.

Monday, July 07, 2008 9:53:14 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Thursday, July 03, 2008

Ethan is one handsome devil!  He's actual been able to sleep several hours in a row now, making things much easier on Jen and I.  Speaking of my wife, she's recently gotten Scuba certified and I'm trying to convince her she shouldn't ditch me to go diving every remaining summer weekend.  I have some interest in diving but too many other things going on right now to pursue it.  Having two kids is far more different from having one than I expected.  I'm used to getting extra work done from home 3-4 nights a week and that just hasn't been in the cards lately.  Brooke, after having been the most awesome big sister for quite a while, has finally started to miss getting all our attention and so some rebalancing has been going on. 

I've not been keeping up with photos like I would like, but I have a new toy coming on Monday to help remedy that...

Thursday, July 03, 2008 12:31:36 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Wednesday, July 02, 2008

http://arstechnica.com/news.ars/post/20080702-intel-an-expensive-many-core-future-is-ahead-of-us.html

Expensive for who?  For software developers of course.  It seems to me that the silicon industry is trying very hard to obscure a basic fact: even if new technologies such as Software Transactional Memory become common, even if you give us 100 cores to play with, even if things like the Parallel Extensions from Microsoft are elegant and easy to use, even if Intel's compiler research turns out to be a huge help,  not all problems can benefit from parallelism.  In many cases, programmers can go against what would today be considered good practices and make copies of huge shared data structures, (at least we're not being told that we're never going to have more than 4GB of memory) in order to reduce data sharing between threads.  However, there are many problems that need shared read-write data.  Throwing massive numbers of cores at these problems will result in performance slower than single-core performance as resources are eaten up acquiring locks.  On the Windows platform, all of our GUI technologies still use a "compartment" model whereby objects are owned by a single very special thread and we are not alowed to touch them except by marshaling onto this Special message pump.  What good are these 100 core systems going to do my WPF applications? 

Wednesday, July 02, 2008 12:28:46 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Saturday, June 28, 2008
Saturday, June 28, 2008 9:19:46 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, June 26, 2008

Anyone who's read this blog long enough to see some of the larger articles can tell that I am carrying the torch for UML.  I know a lot of people who model things, but not a lot who use what I consider to be the canonical real-deal modeling language: UML.  Even when I'm whitboarding, I'm drawing actual UML constructs for classes, interfaces, packages, and components.  If you draw boxes with lines connecting them to other boxes, people will often get the idea you are trying to convey, but there's something compelling about an industry standard modeling dialect with the ability to express some more subtle semantics than "this thing somethings with this thing".  Why don't we hear that much about UML in the blogosphere?  Why is Microsoft developing its own modeling language?  To some degree I blame the round-trip engineering folks who want to keep code and models in perfect sync, and there are some idioms in CLR languages that just don't succinctly map to UML: The Terski brought up the example of delegats.  My response is and has always been that I'm not interested in modeling at the implementation level: that's what code is for.

I still keep tabs on the DSL tools team at MSFT, so it was nice to hear from Steve Cook that UML tools are going to find their way into Architecture Edition.

http://blogs.msdn.com/stevecook/archive/2008/06/25/i-ve-got-a-new-job-working-on-dsls-and-uml.aspx

Thursday, June 26, 2008 9:42:13 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, June 25, 2008

So, I am building a Silverlight 2 application related to my trip to Klipsch in Indianapolis this year, and found what seems to be to be a terrible bug in Silverlight 2 beta 2.  Multiple UIElements  cannot share event handlers.  What do I mean?  In my case, I have varous Paths inside a canvas and I'm creating hotspots.  When the mouse enters a given region, something slightly different will happen, however the exact same method is called for every single region when the mouse exits that Path.  So, suppose I have a Path called Damon, which happens to have some Damon-y things inside it and I'm going to display my name:

private void _damonPayne_MouseEnter(object sender, MouseEventArgs e)

{

AddCallout("D.R. Payne", "damonrpayne", "Hartford, WI", e);

}

When the mouse exists, I simply remove the UIElement representing the callout, which is the same for all regions on the page:

private void _damonPayne_MouseLeave(object sender, MouseEventArgs e)

{

RemoveOldCallout();

}

Now, it would seem that I could make the functionality in RemoveOldCallout a MouseEventHandler and share the same method among the various paths:

protected void RemoveOldCallout(object sender, MouseEventArgs e)

{

RemoveOldCallout();

}

Now, if I have another Path, I should be able to write code like _someOtherPath.MouseLeave += new MouseEventHandler(RemoveOldCallout);  This code, however, bombs with the following BadPropertyValue error:

 

Now, I have to write a different MouseLeave event for every single path on my page, and there's a lot of them.  I'll submit to Connect and hope this issue is fixed!

Wednesday, June 25, 2008 11:54:43 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback

I went to a Geek Dinner last night at Botanas restaurant in Milwaukee.  This was different than the Nerd Dinners that we used to have.  The Nerd Dinners boiled down to people from the User Group socializing in a more free-form fashion than is practical before/after user group presentations.  The Geek Dinner we did last night was different.  The goal here was to bring together technologists, business people/entrepenuers, and people looking to invest/veture capitalists.  The result was a very cool time, for me at least.  There were several "idea" people there with something they were trying to accomplish.  It was fun (and I hope useful for them) to bring up potential pitfalls in the ventures they are trying; I believe I may now be a tech advisor for some neat things going on in Milwaukee.  I hope this becomes a regular occurance.

Wednesday, June 25, 2008 10:57:32 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  |  Trackback