Movie room pics

by Administrator 28. December 2006 17:00

You can see some pictures of my movie room here:

http://forums.klipsch.com/forums/thread/844512.aspx

I will get some pictures onto Flickr when I get a minute.

Tags:

Final stages

by Administrator 20. December 2006 21:19

Well, with a whole ton of painting work from my lovely assistant Jennifer the home theater is nearly operational.  I won't say "done" because curtains and trim work will have to be done at some point but for now I'm tired and I just want to watch movies.  Unless there's an issue with the projector or something I'll be sitting down with a full house by tomorow night.

Tags:

Congratulations Jen

by Administrator 18. December 2006 18:00

This weekend we all attended Jen's Pinning Ceremony on Saturday and her official UWM graduation on Sunday.  I'm so proud of Jen for sticking with finishing up her four year degree despite raising our little girl, moving 3 times, building a house, quitting smoking, and putting up with me.  She starts work at the hospital in town on January 8th.  Enjoy the last of those long college-y vacations while you can, you'll never get a month off again.

Tags:

T-minus 6 days

by Administrator 13. December 2006 17:48

The date has been pushed back a couple of times, but on or about next week Tuesday I should be sitting down to screen some films in my new room.  I'm fairly sore from sanding drywall mud for hours on end the past 3 days but I have it down to a manageable amount I should be able to finish tonight, with a friend of my brother's coming over to set up a knockdown texture finish tomorrow and Jen painting on Friday.  I will post pictures via flickr over the new week, but having people over for the grand debut will have to wait until I have curtains and some other stuff set up...

Tags:

Where did I go wrong?

by Administrator 12. December 2006 21:23

A friend just sent me a link to this Channel 9 video and I watched the first couple of minutes.

http://channel9.msdn.com/Showpost.aspx?postid=261254

For those of you who don't have 40 minutes to watch this, its a video interview with Frank Savage @ MSFT, who heads of the XNA development team.  Frank worked on Wing Commander III and has a ton of street cred in the gaming industry.  MSFT wisely continues their trend of hiring the smartest people with the most cred and vision that they can find.

Anyway, allow me a moment of self reflection.  When I was 11 I made a spaceship game on BASIC for our 8086 PC.  It had colors and a cool spaceship I drew using arcs and lines, and the spaceship shot out this cool lightning bolt when you hit the space bar.  I got it to draw terrain (fixed skyscape that repeated over and over again) and was working on enemy spaceships.  At the time, I didn't understand that game developers give the illusion of many things happening at once by giving every object in the game world a chance to update itself every "tic" and that redrawing as often as possible was responsible for seeing various things moving on the screen at once.  I was trying to see if there was a way to get threads to work on BASIC, the old BASIC with 10 PRINT "HELLO", 20 GOSUB 2000 so I could have one thread per enemy spaceship and bullet.  Hey, it made sense at the time!   This caused me to wonder, where the hell did I go wrong?  I could have been one of those guys you read about, certainly no John Carmack in level of skill or innovation, but if I'd stuck with game programming maybe MSFT would be hiring me and people would say "Yeah, wow, you're that guy who worked on CornBlaster II" or something like that.  Oh well, I suppose I'm still young, if I only I could get off my ass and stop playing FFXII long enough to get back into game programming after an 18 year hiatus.

Tags:

Going Native

by Administrator 12. December 2006 20:41

I often remark about the Good Ole Days™ where I was a C++ developer doing app server code on Solaris with a Sparc on my desk and the Windows NT machine that was just for email and Word documents.  I have even written a little C in my .Net career: building a DLL to make some very specific P/Invoke action easier.  I haven't written anything significant (read: more than one function) since 1998. 

When one is working on the compact framework, shrink-wrap desktop software, or isntallers for desktop software, often something comes up that is not easy to do in .Net, cannot be done in .NET, or someone on your team balks at requiring the .NET framework in order to install the program.  I have always managed to steer around this issue by building a bootstrap installer (that runs a silent Dotnetfx.exe before the main MSI) or in some other way being convincing that the feature was not needed, .NET is needed, .NET is ubiquitous enough to assume, etc.  This recenty came up again when I built an installer for a non-.NET product we have here and various custom actions were required and written in .NET.  The department for whom I wrote the installer balked, as one of their machiens did not have .NET 1.1 despite claims of being up to date with windows update, etc.  I could have pushed the issue again but this comes up often enough that I really decided I should get back into C++ and be ready for future opportunities to innovate. 

It took me an embarassing amount of time to get the program working, here is a snippet.  I notice DasBlog does NOT have a C++ option under the insert code, harumpf!

using namespace std;


int _tmain(int argc, LPTSTR argv[])
{
        _cputs("COPYING PLUGIN\r\n");        
        HKEY resultKey = NULL;    
        
        LONG result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            _T("SOFTWARE\\ej-technologies\\install4j\\installations"),
            0,
            KEY_READ | KEY_QUERY_VALUE,
            &resultKey);
        if(ERROR_SUCCESS == result)
        {
            _cputs("Searching for registry value\r\n");
            ///////////////////////////////////////////////////
            //Figure out how many values there are in the key
            ///////////////////////////////////////////////////
            DWORD maxSubKeyLen, numVals, maxValNameLen, maxValLen, numSubKeys;
            DWORD valueNameLen, valueLen, valueType;
            LPTSTR subKeyname, valueName;
            LPBYTE value;
            FILETIME lastWriteTime;

            RegQueryInfoKey(resultKey,
                NULL,
                NULL,
                NULL,
                &numSubKeys,
                &maxSubKeyLen,
                NULL,
                &numVals,
                &maxValNameLen,
                &maxValLen,
                NULL,
                &lastWriteTime);

            valueName = (LPTSTR)malloc (maxValNameLen + 1);
            value = (LPBYTE)malloc (maxValLen);

            ///////////////////////////////////////////////////
            // Enumerate each value to see if it is the one we want
            ///////////////////////////////////////////////////
            for(int i = 0; i < numVals; i++){
                valueNameLen = maxValNameLen + 1;
                valueLen = maxValLen +1;

                RegEnumValue(resultKey,
                    i,
                    valueName,
                    &valueNameLen,
                    NULL,
                    &valueType,
                    value,
                    &valueLen);
                _tprintf(_T("\nValue: %s="), valueName);
                _tprintf(_T("%s\r\n"), (LPTSTR)value);
                LPTSTR compVal = LPTSTR(valueName);
                LPTSTR instdir = _T("instdir");
                
                _tprintf(_T("%s??%s\r\n"), compVal, instdir);
                int compare = _tcsncmp(compVal, instdir , 7);
                if(0 == compare){
                    //now we know "value" is our install dir
                    LPTSTR valueString = (LPTSTR)value;
                    LPTSTR pluginStr = _T("\\plugins\\carspot.jar");
                    
                
                    LPTSTR srcPath = _tfullpath(NULL, _T("./carspot.jar"), _MAX_PATH);
                    _tprintf(_T("srcPath=%s\r\n"), srcPath);

                    LPTSTR destPath = (LPTSTR)malloc(_MAX_PATH);

                    _tcscpy(destPath, valueString);
                    _tprintf(_T("SPARK install dir is %s\r\n"), value);
                    _tcsncat(destPath, pluginStr, _tcslen(pluginStr));
                    _tprintf(_T("Plugin dir is %s\r\n"), destPath);


                    _tprintf(_T("copying..."));
                    if(!CopyFile( srcPath, destPath, FALSE)) {
                        DWORD error = GetLastError();
                        _tprintf(_T("Last error was %i", error));
                    }

Since my C career was on Solaris I was unfamiliar with ALL of the conventions I was confronted with.  Not even main() is the same, where is good ole int main(int argc, char ** argv) ?   What the hell is an LPTSTR or a DWORD?  On Solaris pretty much everyone used the RougeWave String package.  I eventually figured out (using some books Chad Albrecht recommended) that LPTSTR is typedef'd based on whether or not UNICIODE is a #define-d, found the template versions of all the string manipulation libraries (best not to use the ole vanille strcmp etc), realized no one uses "delete" on Win32, and that most predefined types do not use "*" (LPTSTR is defined as TCHAR *) and generally got myself back into C-thinking.  My final head-scratcher was when my program worked fine on my PC but not on any machine I copied it to.  I'm not sure if this is just how my project was set up or not, but it seems the linker functions far differently in debug builds?  Changing to a Release build finally got it working.  Some of my attempts to free() memory crash at runtime so I've obviously got some more reading to do before I can call myself "back in action".

Tags:

Console shortages

by Administrator 11. December 2006 16:37

The Wii and the PS3 are impossible to get right now.  Rewind a year, so was the XBox 360, rewind further and so was the PS2 and the Xbox before that.

What is the point of launching to HUGE customer demand with an infinitesimal numbers of units, then spending marketing dollars on top of that, as if you needed to stir up demand?   What is the point of making the launch for the holidays when all you have to offer is a small quantity of units that you would have sold out of anyway?

I'm chewing on the idea that its done on purpose.  Think about it: you have a new console, possibly a new online service, they are almost certainly going to have some bugs at first despite all your testing efforts.  Why not produce only a limited # of consoles so that any errors are caught and fixed in 200,000 consoles instead of 2,000,000 consoles.  The first people to buy are essentially un-paid beta testers. By releasing in such limited quantities, you are also being assured that only the people who want your product very, very badly are going to get it.  No one is going to casually walk in off the street and buy your new console on a whim and be upset.  The guy who camped out in front of best buy to get his new console isn't going to say "screw it" and take it back if it overheats or has some quirks.

Thoughts?

Tags:

DotNet Redist

by Administrator 5. December 2006 21:57

Why, oh why, is it that I cannot get a version of dotnetfx.exe that does not include the ASP.Net runtime and such?  It would be nice for my end users if such a thing existed.

Tags:

About the author

Damon Payne is a Microsoft MVP specializing in Smart Client solution architecture. 

INETA Community Speakers Program

Month List

Page List

flickr photostream