Some favorite site feeds aggregated locally: iPhone Development RSS   Adobe Labs RSS   Macrumors RSS

Wednesday, April 30, 2008

1900xt is overheating

Wednesday, April 30, 2008    0 Comments

The 1900xt card in my MacPro is starting to overheat quite a lot. Its out of warranty, and its $399.00 still for a replacement. A better card can be had for a lot cheaper:

NVIDIA GeForce 8800 GT (1st Generation) Graphics Upgrade Kit for Mac Pro
Part Number: MB560Z/A
 

Is the new Java for OS X okay for Flex Builder?

   1 Comments

I see that there is a new Java out for OS X... will this screw with Flex Builder 3? Or is it okay to go ahead and update?

Update
No worries, the new Java doesn't screw anything up for any application as far as I can tell yet. Flex Builder 3 still works perfectly.
 

Tuesday, April 29, 2008

Design considerations in shrinking the iPhone

Tuesday, April 29, 2008    0 Comments

I just read a truly remarkable article online which poses a really interesting industrial design/gui problem that Apple might be facing... the design and usability considerations of shrinking the iPhone/Touch.

You can go and read the well thought out words and get a better understanding of the situation by the images prepared for the article. It really makes you think, which I love.
 

Installing Python's lucene on OS X

   0 Comments

Would you like an easy install for Python's lucene for OS X? Open a terminal window, enter this:

sudo easy_install -f http://kapil.objectrealms.net/dist lucene

And you're done. Enter your admin password and you should be good to go. 
 

Looking for Saffron UML news

   5 Comments

Saffron UML

Has anyone seen anything lately in regards to Saffron UML? I ask because I have been much too busy lately to be able to jet anywhere to attend a conference and I imagine the time when Saffron is unveiled or demo'd would be at such an event.

Samuel, if you read this, you could always post on your blog about what's happening. You know you have a lot of people really hoping this tool is released soon™. You should think about micro-payments :)
 

Monday, April 28, 2008

GTA IV. I'm going to pass on this one.

Monday, April 28, 2008    2 Comments

I used to like Grand Theft Auto, and I spent a lot of time trying to get into tons of trouble, ignoring missions (I really despise false-premised time trials) and driving around eventually being chased by the military.

So I'd randomly jack cars, smash into people and things, get the cops after me, take them down, and then see how long I could run from the military helicopters, etc. Then I'd turn it off, after wasting a couple of hours doing basically nothing ;)

That was a long time ago, and now GTA IV is coming out tonight, and I know many who will be online running around finding prostitutes, whacking targets, role-playing, smashing into other cars, and all of that.

Since I have children now, I really can't say that I am interested in this in any way. Mind you, I do like a mean FPS still, so I'm not saying that I am above the moral fray of GTA as much as it seems way over the top for even me.

I get the premise, but I don't think I need to see 1/2 of the crap that is in GTA to have fun with a game. The language, the simulated sex, the random violence, etc. just doesn't end up being fun for me. Lots of people in lines already right now for this thing.

I'm sure lots will buy it, and many will buy simply because it's controversial. But I won't be buying this one.
 

Mac set up, right-click menu wonked

   0 Comments

My MacPro is now all set up, however I installed a different rev of Subversion, svnX, and SCPlugin. I have since removed SCPlugin since it sucked (the receipt and the contextual menu plugin).

But now when I bring up a contextual menu, and choose the bottom option More, I am greeted with a quick Finder crash & restart.

The More allows for Automator stuff, sending things to Bluetooth, enabling Folder Actions, configure Folder Actions, etc. Hmm.

Has anyone else run into this problem? Hopefully I can nail this dumb thing down.

Update
It would appear that the SCPlugin was part of the problem, and once that was removed I still had a contextual menu item plugin... namely ADFSMenu.plugin. Removing that seems to have cleared up the More contextual menu item. Whew. Everything seems like it is back to normal functioning behaviors.
 

GoLive deceased & new iMacs

   1 Comments

Today Adobe walked over to the ventilator and pulled the plug on GoLive. To be honest, I wasn't even sure it was still a product. I feel sorry for all the developers who put a lot of work into that product, only to see it die on the vine today. I'll have some extra coffee for you today.

Adobe is also offering a $199 upgrade for registered GoLive users to switch to Dreamweaver, nice.

Today Apple released some new iMacs, as predicted. You only need to head to Apple.com to see the homepage emblazoned with the news.
 

Saturday, April 26, 2008

svnX is pretty tight

Saturday, April 26, 2008    0 Comments

I ran into problems with that SCPlugin (too bad), but I have tried out svnX (0.9.13) for OS X and its pretty sweet.

I don't get finder icons to show me status of files, but since I am not using SVN on a huge team of developers I'm pretty good.

And I always update the repository no matter what at the start of each session. And we always have diff. when needed.
 

Friday, April 25, 2008

Objective-C and the iPhone

Friday, April 25, 2008    1 Comments

On this glorious night as I watch tonight's white out game in Pittsburgh (DVR -- we went to Sesame Street Live!), my thoughts float to Objective-C and the iPhone. 

Now, in order to get things rolling on the iPhone in terms of using the SDK to create an application for the iPhone/touch, you're looking at Objective-C. For me whose nearly sole focus has been ActionScript 2/3, javascript, lingo, some ASP and some PHP, Objective-C Cocoa is a whole lot to chew on. It's no easy nut to crack. At least for me, someone who doesn't have a CS degree but learned what I know on my own.

There can be no doubt that the apps you can build with the SDK are powerful. Crazy powerful. But coming at it from outside the normal scope of coding is awfully daunting. The language itself isn't very easy to look at and understand... its abstracted quite a bit in my opinion. The use of drag & drop delegates can get confusing too. 

Almost all of the iPhone sample applications have empty Windows (which is normal, I make my Flash apps without any assets on the stage, etc.) but makes picking things up more difficult. I'm wondering if developers not accustomed to Obj-C Cocoa will be able to quickly pick it up or not. 

I should find an Obj-C course someplace, take it, then do some iPhone SDK workshops to get some hands-on stuff rolling. I have a lot of ideas, its just a brand new world to play in. I need to establish many basics before I can proceed to step into the boat. I'm not even sure what all the classes available are yet, so the answer could be obvious, but not until I make myself aware of it. 

Anyway, off to bed.

Let's go Pens!
 

Unfortunate quotes

   0 Comments

Some quotes some might want to take back.

redean: 3-0 damn, its over.
Joey704Calz: LMAO, whos loving this as much as I am?
redean: I know I am, chokefest.

Thank you Malkin and Crosby for teaming up for the winning goal this evening.
 

Thursday, April 24, 2008

SVN Finder integration on the Mac

Thursday, April 24, 2008    1 Comments

Love TortoiseSVN on the PC? You might like this on the Mac:



Status icons in the Finder, and integrated into Finder contextual menus! SCPlugin to the rescue. It's pretty close to Tortoise as far as I've seen using it. Command-line is the best, but for those who don't actually like that interface, this is pretty spectacular. Nice to see something like this on the Mac.

Update

After one day working, this thing has gone bad on me. If I try to access the contextual menu item "More" the Finder crashes and restarts itself. I can't get this to work at all anymore - so I am going to uninstall this. Thank God I didn't come to rely on this quite yet, or else I'd be a little screwed as I don't like the Terminal very much. SVNX I guess.

Oh well...
 

Question on iPhone SDK - loading remote data

   1 Comments

I am currently head's down into the iPhone SDK. Not being totally familiar with Cocoa, it's presenting a nice challenge. One thing I am most interested in is reading data from the web and displaying it on an iPhone or Touch... without use of Safari.

Any devs out there have any quick example projects that show this? It could even be reading remote XML or something straight & parsing it. I'll be scouring the web for some examples as well.

The latest XCode is really pretty awesome - but I am no fan of all of the freaking windows and square brackets yet. There are tons of nice UI touches everywhere. It almost doesn't feel like an IDE.
 

Wednesday, April 23, 2008

What a night... AXNA down & HDMI?

Wednesday, April 23, 2008    0 Comments

I saw this tonight:

Weblogs is Temporarily Offline

We apologize for the inconvenience. We are aware of the problem and working on it.

Thank you for your patience.

Bummer. And then of course all of the sudden the HDMI from the cable box is absent, the television telling me there is no signal, but component is there. Crap. Better be a blip... cause that cable was expensive. Yesterday we didn't have Versus but it was there today. Now this. Ugh.

 

A StringFeeder class

   0 Comments

Animating text into a text container is a treatment that you see every now and then on the web. They come with various visuals, but most of them either come in chunks of text at a time or line by line. 

The current implementation below allows for the adjustment of chunks and the speed in which the chunks are rendered. 

This is a quick implementation that indeed works, but its picky about the specified container at the moment, but it could be expanded upon to include line by line rendering, fading in text elements as they are placed (that would be pretty snazzy), etc.

If you know of existing classes that provide interesting textual placements, please share with us.

Anyway, I have three classes: StringFeeder.as, FeedUpdateEvent.as, and Application.as. The Application class is the document class here and simply provides a little testing environment. 

How this works is when you tell the StringFeeder class instance to run, it requires the use of an eventListener to supply the bits of text to render in a text field. So if you don't listen for the UPDATE event, you won't be able to do much with any of this code. I'll bold that listener for you where it's used.

FeedUpdateEvent.as

package net.ericd.v8.events
{
    import flash.events.Event;
    import flash.text.TextField;
    
    /**
     * This class allows one to pass properties on the event
     * object, to make things easier to implement.
     */
    public class FeedUpdateEvent extends Event
    {
        public static const UPDATED:String = "EVENT_FEED_UPDATE";
        public static const DONE:String = "DONE";
        public var value:String;
        public var who:TextField;
        
        public function FeedUpdateEvent( type:String,
                                         value:String,
                                         who:TextField )
        {
            super( type );
            this.value = value;
            this.who = who;
        }
        
        public override function clone():Event
        {
            return new FeedUpdateEvent( type,
                                        this.value,
                                        this.who );
        }
    }
}

You can always go ahead and add more types of your own liking, but the constructor expects those two properties. I suppose you could rest that (...) so you'd have the option of sending more (I've never tried that with events though... wonder if it would work at all).

StringFeeder.as

package net.ericd.v8.content
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.*;
    import net.ericd.v8.events.FeedUpdateEvent;
    
    public class StringFeeder extends Sprite
    {
        private var $array:Array;
        private var $string:String;
        private var $speed:Number;
        private var $target:TextField;
        private var $delay:Timer;
        private var nCount:Number   = 0;
        private var nTotalCount:Number = 0;
        private var nextStart:Number = 0;
        private var nextEnd:Number = 0;
        private var $eachCut:Number = 4;
        private var nRunLimit:Number;
        private var myEvent:FeedUpdateEvent;
        
        public function StringFeeder( oTarget:*, sValue:String,
                                      nSpeed:Number )
        {
            this.$string    = sValue;
            this.$speed     = nSpeed;
            this.$target    = oTarget;
            nRunLimit = Math.ceil( $string.length / $eachCut );
        }
        
        private function sendData( event:TimerEvent ):void
        {
            var sSnippet:String = $string.substring( nextStart,
                                                     nextEnd );
            myEvent = new FeedUpdateEvent( FeedUpdateEvent.UPDATED,
                                           sSnippet, $target );
            this.dispatchEvent( myEvent );
            nextStart = nextEnd;
            nextEnd += $eachCut;
            
            if ( nTotalCount > nRunLimit )
            {
                $delay.stop();                
                var doneEvent = new FeedUpdateEvent( 
                                    FeedUpdateEvent.DONE,
                                    null, $target );
                this.dispatchEvent( doneEvent );

                return;
            }            
            nTotalCount++;
        }
        
        public function run():void
        {
            nextStart = 0;
            nTotalCount = 0;
            nextEnd = nextStart + $eachCut;
            $delay = new Timer( $speed );
            $delay.addEventListener( TimerEvent.TIMER,
                                     sendData );
            $delay.start();
        }
        
        public function set span( eachCut:Number ):void
        {
            $eachCut = eachCut;
            nRunLimit = Math.ceil( $string.length / $eachCut );
        }
        
        public function get span():Number
        {
            return $eachCut;
        }
        
        public function interrupt():void
        {
            $delay.stop(); 
        }
    }
}

A little ugly, but again, she does work.

Application.as code

And here is some code from the Application document class. There is an instance of a MovieClip containing a TextField on the stage already, "holder_mc.test_txt". I am copying and pasting some code out of the live class, so if I miss something, the compiler errors/warnings should be able to direct you.

import flash.text.TextField;
import flash.display.MovieClip;
import gs.TweenFilterLite;
import gs.TweenLite;
import net.ericd.v8.content.StringFeeder;
import net.ericd.v8.events.FeedUpdateEvent;
...
var bigText = "huge string here please...* for linefeed";
feeder = new StringFeeder( holder_mc.test_txt, bigText, 10 );
feeder.span = 12;
feeder.addEventListener( FeedUpdateEvent.UPDATED, updateFeedText );
//DONE event only for blur effect. Actually ugly.
feeder.addEventListener( FeedUpdateEvent.DONE, finishedUpdate );
TweenFilterLite.to( holder_mc, 0, { blurFilter:{blurX:5, blurY:5}});
feeder.run();
...
private function updateFeedText( event:FeedUpdateEvent ):void
{
    var tmpString:String = stringReplace( event.value, "*", "\n" );
    event.who.appendText( tmpString );
}
        
private function stringReplace( $str:String, $search:String,
                                $replace:String ):String  
{  
    return $str.split($search).join($replace);  
}
        
private function finishedUpdate( event:FeedUpdateEvent ):void
{
    // Yes, I know, this thing's parent COULD be the
    // document class itself (Application). But since
    // we know what's really going on here, s'ok mb.
    TweenFilterLite.to( event.who.parent, 2,
                        { blurFilter:{blurX:0, blurY:0}});
}

My apologies for this code not being formatted as per long ago. My linefeed settings on publish are a little messed up for posting code, but great for random typing such as this.
 

TextMate - can it do AS3?

   3 Comments

There aren't too many editors for OS X that I like. Flex Builder 3 is very nice. It feels sluggish though compared to FlashDevelop on the PC.

I know a favorite is TextMate, however it seems to be restricted to AS2 right now, MTASC seems to want to pump out Flash 8 stuff.

Is there a way to get completion approaching that of FD yet outside of Flex Builder? When I declare a private var typed, and FD pumps out the import statement for me, well... that makes my day :) And autocomplete with my own custom classes saves me TONS of time. 

Looking something close on OS X, or else I can just keep using FD on the PC to code with I guess.
 

Netvibes upgrade

   0 Comments

Looks like netvibes users get server upgrades tonight.
Thank you for showing netvibes your love!

Due to tremendous demand, we're currently upgrading our servers to accommodate the increase in traffic. Rest assured, we're working diligently to have your favorite start page back online very soon.

Thanks again for your patience.

- The netvibes team
Excellent :)
 

Tuesday, April 22, 2008

New MacPro

Tuesday, April 22, 2008    0 Comments

I think I have a shiny new MacPro waiting for me back @ work... 6GB of RAM, upgraded video card, a Griffen KVM switch (although I think it might have those squarish USB jacks and not standard... that will piss me off), software, new monitor, etc. Two big drives.

I got it with that super-tiny wireless keyboard, but I hope I can KVM my current ergonomic mouse/keyboard instead. Yes, carpal tunnel syndrome has hit before and I don't want to go through that again, it was awful.

I'll be keeping my PC next to me at the desk for things that have already been set up there, a few PC-only clients, etc. Besides, I'm not altogether keen on buying another copy of XP.

Its time to remove power cables for things like my eMate, Newton, a Nokia N95 I never use, an external development drive that only has a SQL dBase on it that I don't need right now, etc. I sit atop a jumbled mess of cables and dust, but you wouldn't know that by how tidy I keep the desk surfaces.

Randomness:
+ Wow, this Sharks/Flames game is crazy good so far. One team takes a lead and soon™ the other team ties it up.

+ FiOS DVR kicks the snot out of TiVo Series3 in terms of ease of use.
 

AIR runtime now at 1.0 p4990

   0 Comments

AIR

The AIR runtime (at least for me) has been updated this morning (after running Twhirl the notification came up). Now at 1.0 p4990. I have no idea what changes are in the new runtime yet, but glad to see Adobe updating the bits.
 

Monday, April 21, 2008

Silverlight: 'sup?

Monday, April 21, 2008    0 Comments

Silverlight, silverlight, wherefore art though?

We saw some splash when you were announced, we saw Mano out and about, the AXNA even has a post every now and then about you. Kind of out of the blue each time.

You have a road map I think I stumbled into by accident not too long ago. But other than the dribbles of news & promises of impact, I haven't felt you at the door, let alone the same continent.

Now, I know you can do some pretty cool things. But I haven't seen many doing those cool things with you yet.

By the way, on my one XP box, I still cannot manage install you. I've tried more times than I have emptied the recycle bin. And you won't stick there. I hope your creators fix that. I have to be on one of my other boxes to see anything done with you.
 

Cya Bruins... and FiOS

   0 Comments

You showed a lot of heart taking it to game seven, but you got your sh*t pushed in this evening. I was hoping the Penguins would get saddled up with you, but looks like the Rangers now.

About FiOS, tonight our new HD-DVR can't tune in channel 75 (Versus). I got the game on NESN just fine, but man... wtf is up with FiOS this evening. That better be a blip, cause we had Versus this morning with the old box.

I just spent 25 minutes on hold with tech support ("speak with an agent") -- speaker phone makes that easy. But I ended up hanging up without speaking to anyone.

Anyone in the Boston area with FiOS having trouble with ch. 75 Versus?
 

FiOS HD box hidden menus

   0 Comments

We upgraded to a FiOS HD-DVR box since we like their onDemand (Sesame Street, etc. for our son), and we like their viewing Guide (we really prefer TiVo but we would lose both those things if we went TiVo Series 3). Anyway, setting up the new box ourselves, I forgot how to get into the secret menu to change the scaling coming out of the box.

I found it online with a slew of other menu items. I post this for those with FiOS boxes, it's cool what kind of information you can display.

From the online forum post:

With your STB powered on, hit "Power, Select, Select" quickly in sequence from the front panel. To exit the menu, hit "Power" to turn off the STB. The next power up will be back to normal.

The setup menu is where you configure the display, 4:3 override, HDMI settings, etc. is accessed by hitting "Power, Select, Menu". That's different than the diagnostic menu described here.

This menu is how your STB tells you what's going on. Everything from signal quality to channel encryption status to it's IP address and who it's talking to over the MoCA ethernet. The Line Attenuator thread contains a link that describes what the screen looks like and how to find SNR and AGC: »cjhengineering.com/hdtv/cablehdt···diag.htm. However, it's old and Verizon's menu contains additional entries.

I don't think you can hurt anything as this menu doesn't allow for user entry. Read-only. I think...

d01 General Status: Displays a top level error code and lots of times and dates. Remod Channel might be the RF tuner output channel (3). One of the time formats is in "GPS" time. Sorry, it's called either "GMT" or "UTC" whichever is in use (they are different). Might want to report that as a bug, but it's been there since forever.

d03 OOB Status: Out Of Band. On Comcast, this was the RF channel for the program guide. 75.25 MHz. On Verizon, it's used for firmware and channel map and other items to allow you to see the video (and maybe the guide info?).

d04 Inband Status: The status of the current channel, from an RF perspective. WIth the STB ON, select the channel of interest, then access the diagnostic menu. The menu will report the channel it's currently tuned to.

Note: Be careful to note which tuner is in use. My HD-DVR has 2 tuners, the current channel was on Tuner 2, not Tuner 1. I did not enter the diagnostics menu while it was recording, but that shouldn't cause any problems (?).

I checked the SNR, AGC, and correctable errors for a few channels. SNR is >37 dB, AGC "Good", 0 errors. Helpful if you have pixelation errors (those that are not from Verizon) or lose a channel. I mapped a few channels:

Channel Name Frequency Modulation
03 CBS local broadcast 459 MHz 256-QAM
49 WeatherScan local 477 MHz 256-QAM
75 Versus SD 795 MHz 256-QAM
829 Comcast Sportsnet-HD 639 MHz 256-QAM
833 HDNet 501 MHz 256-QAM
846 Discovery HD 669 MHz 256-QAM

Notice that the STB is using the SD digital channels for 2 - 49, not the analog. Knowing the right frequency is very helpful if you think you are having signal problems. Like if you are having a problem on a channel at 800 MHz and not having problem at 100 MHz, check your coax. Or, if you are using a QAM tuner without an STB, you could map frequencies to channels.

d06 Current Channel Status: Displays info about the channel, but with a focus on the digital status. Contains details about the flags used to set copy protection. Those interested in recording over firewire may want to visit AVS forum to understand the DRM and CCI and other bits to determine if a program can be copied / recorded: »www.avsforum.com/avs-vb/showthre···page=148. The menu shown in the link above is old.

d07 Upstream Status: "Ethernet Return". Get your STB's IP settings and MAC address here. DHCP stuff, DNS enabled, RADD Name Resolved (?). Looks like the IP address is configured for IPv6: 0000:0000:0000:0000:0000:0000:192.168.001.100.

d08 Code Modules: The firmware versions. Compare this stuff to the reported IMG Settings.
Platform Built: Version: 19.38, Nov 15, 2007 13:36:00 (Guessing this is the firmware release date, time is usually a version number. Not in the IMG.)
Code objects: fios_0064 version 5.68 (IMG Build Number), odc_0064 version 8.68 (IMG data object filename)

d10 Audio/Video Status: Use this to check the audio and video formats.
Audio: Surround, Video: 16:9 1920 x 1080i 30 (also 4:3 528 x 480i 30 for local SD). The "30" means 30 Hz refresh.

d11 Interface Port Status: All things digital plugged in. Displays status of firewire (1394), USB, MoCA. Like if the firewire port is enabled (Y) and active (N). Page 2 is the display EDID data. It's a map of supported video resolution formats. Helpful for debugging 480i vs. 480p vs. 720p vs. 1080i.
- Page 3 contains details about the 1394 copy protection status, e.g. 5C implementation. Same as D06 menu, but in E-Z read format.

d13 DVR/HDD Status: Hard drive central. Like size (160 GB), disk space, IDE, model, etc. The bottom of the screen contains the hard drive temperature. Temp: 100F 38C, Max: 113F 45.0C, Over Temp: No, Count: 0 (Current temperature 100 deg F or 38 deg C, maximum was 113 deg F or 45 deg C, is not over temperature now, has been over temperature 0 times).

d16 Connected Home: This is how your STB talks to the ActionTec router (that's not my real MAC address). RF Freq: 1150 MHz, MoCA 10/10, RF Password: (blank), MAC/IP: 01:23:45:67:89:AB, 169.254.001.209.

You can match this to the ActionTec router:
Network Status menu: Device: IP-STB1, Connection Type: Coax, IP Address: 192.168.1.100, IP Address Allocation: DHCP, MAC Address: 01:23:45:67:89:AB.
"MoCA Diagnostics Information". Channel: 1 - 1150 MHz, MAC address of the STB (device 1): 01:23:45:67:89:AB, IP Address of the STB: 192.168.100.1. There are other views that show the information a bit differently.

The ActionTec MoCA channels: 1 - 1150 MHz, 2 - 1200 MHz, 3 - 1250 MHz, 4 - 1300 MHz, 5 - 1350 MHz, 6 - 1400 MHz. Don't know if Verizon uses anything other than Channel 1. (Use good coax and splitters that go to at least 1 GHz).
Remember: Do NOT change any parameters that deal with the STB- you may lose your program guide, etc.

I haven't found where the 169.254.001.209 is on the ActionTec, but I'm not expecting to. That's a reserved address that didn't find a host device. Probably for something else, but don't know what.

Back to the STB:
Page 4 (scroll up/down) shows the STB's TX data rates, in Mbps. I think it might be useful for those with home media DVRs that transfer their videos around the house. I don't know, as I don't have one. But it looked interesting. My data rate is around 230 Mbps.

Labels: ,

 

AS3 dispatching events with arguments...

   5 Comments

(There are two (2) updates to this post):

I am curious as to the best way to dispatch events from an AS3 class to a listener in another, passing arguments through (I'd prefer properties really). What I have so far actually works, but it requires some arcane knowledge of the inner-workings of the class doing the dispatching (it feels really bad to me at the moment). 

What I have is a custom Event class for dispatching events, and its imported and used from within another class. A third document class listens to the class for events. I'd like to get properties of the returned event like we could in AS2 hackery, but right now I only seem to be able to pass arguments, and then you'd have to know which argument is what to make them useful (bad).

The custom event class:

package
{
    import flash.events.Event;
  public class EventType extends Event
    {
        public var arg:*;
        public var properties:Object;

        public function EventType( type:String,
                                   bubbles:Boolean = false, 
                                   cancelable:Boolean = false, 
                                   ... a:* ):void
        {
            super( type, bubbles, cancelable );
            arg = a;
        }
        
        // Override clone
        override public function clone():Event
        {
            return new EventType( type, bubbles, cancelable, arg );
        };
  }
}


From within the class dispatching the event ("10" is just a test):
...
public static const UPDATED:String = "updated";
...
dispatchEvent( new EventType( ClassName.UPDATED, false, false, "10" ) );


And from the document class:
...
classInstance.addEventListener( PartitionGauge.UPDATED, updateListener );
...
private function updateListener( e:EventType ):void
{
    trace( e.type );
    trace( e.arg.length );
    trace( e.arg[0] ); // wtf is this really supposed to be?
}

So you can see that this approach does work, but you'd have to have special knowledge to get the .arg from the returned event, and you'd also need to know what each index of the returned arguments actually map to. It would be cool to be able to pass back a property on the event itself, like:

trace( e.value );

and thing like that. I haven't figured that part out quite yet, and I've spent time googling and haven't found a whole lot just yet. But there must be a pretty easy to use solution for this kind of thing. I'd hope.

Update:

Well, I've come across a different approach, and it's similar to the one above, but instead of arguments it uses properties on a returned object. At least that is more approachable, although you need an intermediary object to inspect through.

Here is the class:

package 
{
    import flash.events.Event;
    public class CustomEvent extends Event
    {
        public static const DEFAULT_NAME:String = "CustomEvent";
        public static const ON_UPDATE:String = "onUpdate";
        public var params:Object;
        
        public function CustomEvent( $type:String,
                                     $params:Object,
                                     $bubbles:Boolean = false,
                                     $cancelable:Boolean = false )
        {
            super( $type, $bubbles, $cancelable );
            this.params = $params;
        }
        
        public override function clone():Event
        {
            return new CustomEvent( type, this.params,
                                    bubbles, cancelable );
        }
        
        public override function toString():String
        {
            return formatToString( "CustomEvent", 
                                   "params", "type",
                                   "bubbles", "cancelable" );
        }
    }
}


And within my class that dispatches the event (test properties here):

...
import CustomEvent;
...
this.dispatchEvent( new CustomEvent( CustomEvent.ON_UPDATE,
                                     {value:"10", foo:"hello" } ) );


And now in the document class

...
classInstance.addEventListener( CustomEvent.ON_UPDATE, updateListener );
...
private function updateListener( e:CustomEvent ):void
{
    trace( e.type );//onUpdate
    trace( e.params.value );//10
    trace( e.params.foo );//hello
}

So, that's a little better. You still have to access through the params object instead of simply on the returned event object itself, but it's better, don't you think?

You don't have to parse through arcane argument indexes wondering what they are. At least with properties you can use the name of the property outright. And that makes the whole thing more approachable.

Update 2 (yes, another one):

Well, here is something that is more approachable still.

package 
{
    import flash.events.Event;
    public class CustomChangeEvent extends Event
    {
        public static const CHANGE:String = "EVENT_CUST_CHANGE";
        public var who:*;
        public var value:Number;
        
        public function CustomChangeEvent( type:String, who:*, 
                                           value:Number )
        {
            super( type );
            this.who = who;
            this.value = value;
        }
        
        public override function clone():Event
        {
            return new CustomChangeEvent( type,
                                          this.who,
                                          this.value );
        }
    }
}

You will get code completion in FlashDevelop, you can access the properties of the return event object, you get strong typing for some of it (I left who as a wildcard right now since it's not settled what it will be yet, probably a Sprite though). When I make that change, the class will have strong typing through it, and everything will be nice and neat.

I think this approach will truly work well in any circumstance.
 

Office 2008 12.0.1 Crashing

   0 Comments

I don't use the Office suite much at all, but my wife certainly does. And Office 2008 looks so nice on a Mac, I really must admit.

However, when she launches Excel, most of the time it just beachballs on her. If it manages to launch without crashing or hanging, she can't work in it for long before it does crash. Word is the same way. Its actually difficult to ForceQuit the apps, as the Finder gets hung for a while during all of this. What a p.o.s.

Now, we can always go Open Office, iWork, etc. but wouldn't you think Microsoft's flagship software suite outside of an OS would actually work? The 12.0.1 update was supposed to fix hanging and crashing, but guess what... it didn't.

I don't think its too much to ask to get a working software. How did QA let this out the door? I'm seeing tons of people via Google having the same problems... and switching to other things.
 

Saturday, April 19, 2008

Halo 3 Legendary Map Pack

Saturday, April 19, 2008    0 Comments

I haven't logged into Live! to play Halo3 in ages, because it was getting boring. We all went to CoD4. However, I am downloading the Legendary Map Pack right now (the new maps look great and Forge gets new items). So I'll be all over Halo3 sometime tonight ;)

Labels:

 

Thursday, April 17, 2008

Peter Elst on AIR and mySQL SQLite

Thursday, April 17, 2008    5 Comments

If you haven't heard or played very much with mySQL SQLite and AIR, but you'd like to learn more, then check out this video. Peter Elst does a really fine job explaining the major classes you'll need to employ and how to get rolling with mySQL SQLite in AIR.

Once you get going, you might want to have a little SQL statement guide (although there really aren't that many statements to remember are there?) You'll be using mySQL regardless of need... just because it's so cool to use.
 

Disgusting.

  


A truly tasteless cover.
 

Quick test post. Apologies.

   0 Comments

A quick test of formatting from FD.

private function updateScrollBar():void
{
    TweenLite.to(optionSelector.thumb_mc, 0.2, 
    {y:INITIAL_THUMB_Y+__currentMenuIndex/(nContH/nDocH)});
}
 

TypeDescriptor 2

   1 Comments

Update:
Man, it's like I'm having a conversation with myself here. Once I blurt out something here, only a few moments later do I have a revelation about how lousy the previous post might have been.

As it turns out, I don't need the class below (TypeDescriptor) unless I really want to dig into the hierarchy, and if I did, I would need to re-factor the class in a major way to make it actually useful in an abstracted kind of way.

Or just leave it to a developer (including myself) to worry about. For designers, they probably never need to see the XML output of describeType... ever.

So all a designer really needs to worry about is:

trace( getQualifiedClassName( this ) );
trace( getQualifiedSuperclassName( this ) );

And that's it really. All my class was doing was breaking the describeType down a little bit, and that's a sincere waste of time.

Forget about all the posts and class crud I've buggered this blog up with. It's all nonsense now that I've spent more time in the flash.utils documentation. The two classes mentioned above are most of what anyone might need.
package
{
import flash.utils.describeType;
public class TypeDescriptor
{
public function TypeDescriptor()
{
}

public function getType( sValue:String, value:* ):String
{
var varList:XML;
var result:String;
switch( sValue )
{
case "typeName":
varList = describeType( value );
result = varList.@name.toXMLString();
break;
case "typeBase":
varList = describeType( value );
result = varList.@base.toXMLString();
break;
case "typeIsDynamic":
varList = describeType( value );
result = varList.@isDynamic.toXMLString();
break;
case "typeIsFinal":
varList = describeType( value );
result = varList.@isFinal.toXMLString();
break;
case "typeIsStatic":
varList = describeType( value );
result = varList.@isStatic.toXMLString();
break;
default:
result = "error";
break;
}
return result;
}

public function getExtendsClass( value:* ):String
{
var varList:XML = describeType( value );
var result:String = varList.extendsClass.@type.toXMLString();
return result;
}

public function getImplementsInterface( value:* ):String
{
var varList:XML = describeType( value );
var result:String = varList.implementsInterface.@type.toXMLString();
return result;
}
}
}
 

Need help with Digital Editions

   0 Comments

I get the following error when I launch Digital Editions:

"Can't find Digital Editions folder."

And that's it. I have uninstalled and installed again, and I get the same error. Obviously Add/Remove isn't removing a prefs file someplace or something related to that. So for now I can't use it, and I finally have enough PDFs, etc. that I think it would be really useful. I've pinged the Support Forum for DE too, hoping someone can clear this up.

Update:
Sorry for the noise. 

My "My Documents" folder is mapped to a network drive, and thus the "My Digital Editions" folder was nowhere to be found by Adobe Digital Editions.

All I needed to do was create one on the network drive mapping, and things are working now.
 

A TypeDescriptor class for designers

   0 Comments

I'm not really sure if something like this is very useful, but it does hide the guts of implementation away from a designer.

Basically it's a class abstracting describeType a little bit more so a designer doesn't need to look at the E4X stuff and get spooked by it. They don't even have to know about describeType at all.

package
{
  import flash.utils.describeType;
  public class TypeDescriptor
  {
  public function TypeDescriptor()
  {
  }
  public function getTypeName( value:* ):String
  {
  var varList:XML = describeType( value );
  var result:String = varList.@name.toXMLString();
  return( result );
  }
    }
}

And the usage is pretty simple:

import TypeDescriptor;
var foo:TypeDescriptor = new TypeDescriptor();
trace( foo.getTypeName( ["hello", "sup"] )); //Array
trace( foo.getTypeName( 5 ) ); //int
trace( foo.getTypeName( "hello" ) ); //String
trace( foo.getTypeName( new MovieClip() ) ); //flash.display::MovieClip
trace( foo.getTypeName( JessicaAlba ) ); //JessicaAlba (class from IDE & instantiated in the class itself)
trace( foo.getTypeName( this ) ); //if in a class (Application), something like com.ericd.projectOne::Application

Again, not very useful for developers perhaps, but it makes life easier on a designer. And I suppose you could add methods to retrieve different parts of the XML (base, isDynamic, isFinal, isStatic, etc.)
 

Wednesday, April 16, 2008

Penguins sweep the Senators

Wednesday, April 16, 2008    0 Comments

Tonight, despite the valiant efforts of the Ottawa Senators, my Pittsburgh Penguins brushed them aside by applying the broom. As Mike Lange said, "The kitchen is closed."

The Senators threw the kitchen sink at the Pens there at the end. Congratulations to the Sens for the effort. Maybe you can hang a mural of the handshake on the other side of the arena, this time the Penguins winning (to match the mural of the Pens losing last year that you put up). Even after that, I respect your players.
 

Bitten and healed by describeType

   0 Comments

I have a method that can take all sorts of types for a parameter. We used to do typeof stuff in AS2, now with AS3 we have something better called describeType. It bit me for a while today. I thought I would make this known in case you run into the same thing. Its a simple thing, but I didn't diagnose it until after about 20 minutes.
...
import flash.utils.describeType;
...
public function addState( oValue:* ):void
{
    var varList:XML = describeType( oValue );
    var result:String = varList.type.@name.toXMLString();
}

The above did absolutely nothing for me. result was never set. I pulled my hair out for 20 minutes, and then realized that when you use describeType, the XML returned to an accessor variable sets its root to that variable.

So I didn't need to do varList.type.@name.toXMLString() but I needed to ONLY do this varList.@name.toXMLString()

That wasn't exactly clear to me, but it is now. A simple thing to assume or miss for me.
 

ASDoc & IDE-generated Classes problem

   1 Comments

While I am on my PC (and thus cannot use Visdoc to generate AS3 documentation for my packages), I am using ASDoc. While normally this is great, I've run into a large issue.

Some of my classes implement UI elements that come from the CS3 IDE... and I export them with class names (classes are generated for me). This is so I can "attach" the UI elements via the new command. Everything works just dandy.

However, if ASDoc encounters an error, it won't document. And since several UI elements are implemented in some of my classes (they are dependent on generated classes from the IDE), I end up getting no documentation output. 

Is there some kind of trick to get this rolling, or is ASDoc simply not engineered to be able to handle this kind of thing? I suppose I can wait until later to generate my documentation, but it would be cool to know if there is a fairly convenient work-around.

Update:
Taking a comment to heart, I have created a SWC from my FLA's Library.

I inspected it using nemo400 & indeed all of the generated classes are in there. However, I really do dislike the command-line, and have been using a tool called ASDocGUI. But because it provides simple use, I am unable to actually add the class path to the SWC too. I suppose I have to command line things. But at least those generated classes are available to ASDoc now and I should be able to snag some documentation out of all of it. 

I can't wait to sick Visdoc on it however :)
 

Apple TV's "All HD" section updated

   0 Comments

I don't think this was part of the latest Software Update to the device, I think this happens on Apple's end and is delivered (which makes perfect sense). I think the display is really pulled from Apple when needed & stored.

Before the "All HD" section just used to be a distributed grid of items.

Now we get subheadings like in other areas of the system and we have cover-flow there too. A small, but welcome change. I hope they keep rolling out updates.

I have a few UI ideas for the device (such as themes, wrap-around menus, and more). I hope we get some of them.
 

Flashpitt 2008 Announced!

   0 Comments

Being a boy from Western, PA, this conference tugs at my heart strings in a special kind of way. If I can do it, I might speak at this event as well. Primanti's after the after party!!! Read more about it. (All came via pixelfume's post).

Flashpitt 2008 Announced
Press Release
FOR IMMEDIATE RELEASE

New Media conference announced for Pittsburgh

Another push for Pittsburgh’s new media and web technologies market: a conference that will bring some of the big names in the national Flash community to the “Steel City” in October.

PITTSBURGH, PA [April 15, 2008]
On the Fridge LLC and the Pittsburgh Adobe Flash Users Group (PittMFUG) announce the first Flash-centric New Media conference for the Pittsburgh area. Flashpitt 2008 will take place on October 10th 2008 at the Sheraton Station Square in Pittsburgh. National industry leaders will be present to educate, inspire, and engage the region’s New Media community.

Flashpitt 2008 is for the Pittsburgh region’s designers, artists, students, and developers working with Flash, Flex and AIR. Two tracks of sessions will run from 9am until 6pm. The day will be finished off with an after party full of fun and networking opportunities.

Visit www.flashpitt.com to sign up for the event notifications mailing list and to be notified when tickets for the event go on sale.

FlashPitt 2008 – Dates, Times and Location:
Friday, October 10, 2008. 9:00am – 6:00pm
Sheraton Station Square Hotel 300W Station Square Drive Pittsburgh, PA 15219
###
 

TweenMax released

   0 Comments

I am personally a very big fan of TweenLite and TweenFilterLite for my AS3 projects that require an animation engine. They are easy to use, lightweight, and do what I generally need (make sure to uncomment the last two public methods in TweenLite).

Now, TweenMax has been released. Here is a detail statement from the site itself:

TweenMax builds on top of the TweenLite core class and its big brother, TweenFilterLite, to round out the tweening family with popular (though not essential) features like bezier tweening, pause/resume capabilities, easier sequencing, hex color tweening, and more. TweenMax uses the same easy-to-learn syntax as its siblings. In fact, since it extends them, TweenMax can do anything TweenLite and/or TweenFilterLite can do, plus more. So why build 3 classes instead of one? Good question. The goal was to maximize efficiency and minimize file size. Frankly, TweenLite is probably all most developers will need for 90% of their projects, and it only takes up 3k. It's extremely efficient and compact considering its features. But if you need to tween filters or rich imaging effects like saturation, contrast, hue, colorization, etc., step up to TweenFilterLite at 6k (total). Still need more? No problem - snag TweenMax to add extra features jam-packed into 8k (total). See below for a chart describing the differences between the classes. TweenMax introduces an innovative feature called "bezierThrough" that allows you to define points through which you want the bezier curve to travel (instead of normal control points that simply attract the curve). Or use regular bezier curves - whichever you prefer. 

Added features:
Bezier tweening
  X
Bezier "through" tweening (define points to hit instead of just control points)
  X
Pause/Resume capability
  X
Easier sequencing
  X
Tween multiple objects with a single call, including a special "delayIncrement" property that staggers the starting time of each tween
  X
isTweening() function for easily determining if an object is currently tweening
  X
Jump to any point in the tween using the "progress" property
  X
Tween any number of hex color properties
  X
Get an array of all TweenMax (and TweenLite and TweenFilterLite) instances that are currently affecting a particular target object.
 

Tuesday, April 15, 2008

8800 GT for 1st gen Mac Pros is out

Tuesday, April 15, 2008    0 Comments

If you have one of the 1st Generation Mac Pros & you've run into problems with your video card (ATI XT1900) like horizontal rules in windows, etc. you can now finally get a NVIDIA GeForce 8800 GT upgrade card that will work. $279.00 isn't too bad either!

Overview

For advanced graphics performance, choose the latest-generation NVIDIA GeForce 8800 GT with 512MB of GDDR3 video memory. With a unified shader core and massive memory bandwidth, the NVIDIA GeForce 8800 GT brings advanced performance to graphics-intensive applications like motion graphics, 3D modeling, rendering, and animation. It features a PCI Express interface for a high-bandwidth connection to the Mac Pro and two dual-link DVI ports for connecting up to two 30-inch Apple Cinema HD Displays.
Compatibility:
  • Requires Mac Pro (bus speed 1.33GHz) with PCI-Express
  • Includes a DVI to VGA connector for easy connection to VGA-based displays

Note to owners of Mac Pro (early 2008): Please select the NVIDIA GeForce 8800 GT (early 2008) Graphics Upgrade Kit for Mac Pro.

 

Monday, April 14, 2008

Thank you AS3

Monday, April 14, 2008    0 Comments

I realize that AS3 has its issues. I am not going to weigh in on that issue, as the blogs and the lists are more than well represented on it. However, AS3 (although not in the Flex framework) alone saved me tons of time today. I stubbed in some functionality into a large UI component that displayed data without any sort of transition/animation.

It was a lot of code.

Transitioning to AS3 today, I was able to rip out tons of methods, and pare it all down, while using TweenLite, and completed it in only a few hours. Today I am even more thankful for AS3. I know this post is useless, but I just had to get it out there with everyone else's kudos.
 

AIR Launch TShirt

   2 Comments

AIR Launch

I am a little uncertain why the guy in the graphic has a "$0" emblazoned on his t-shirt, but I imagine it is supposed to be really cheap to get up to speed and start deploying AIR (not needing to learn brand new technologies, etc.)

But it's a pretty sweet pixel art shirt for sure. Got mine at the last Boston Flex Platform user's group meeting.
 

Test output from Mike Chamber's code beautifier

   0 Comments

Landing page. Original post. Form page.
package net.ericd.utils
{
import flash.display.Sprite;
import flash.net.LocalConnection;
import flash.events.StatusEvent;
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.TimerEvent;

/**
* This SWF will reside in a web page.
*/
public class LocalConnectionSender extends Sprite
{
private var conn:LocalConnection;
private var myTimer:Timer;
private var circle:Sprite;
private var marker:Sprite;

public function LocalConnectionSender()
{
conn = new LocalConnection();
conn.allowDomain( "*", "localhost" );
conn.allowInsecureDomain( "*", "localhost" );
conn.addEventListener( StatusEvent.STATUS, onStatus );

myTimer = new Timer( 500, 0 );
myTimer.addEventListener( TimerEvent.TIMER, ping );

marker = new Marker();
marker.x = 12;
marker.y = 15;
marker.alpha = 0;
addChild( marker );

myTimer.start();
}

private function onStatus( event:StatusEvent ):void
{
switch( event.level )
{
case "status":
am_txt.text = "Yes";
//marker.alpha = 1;
break;
case "error":
am_txt.text = "No";
//marker.alpha = 0.3;
break;
}
}

private function ping( event:TimerEvent ):void
{
conn.send( "_lifeConnection", "lcHandler", "hello" );
}
}
}
 

Saturday, April 12, 2008

FiOS outages in Boston

Saturday, April 12, 2008    2 Comments

We have FiOS TV, internet and phone... however today we don't have TV (the guide still comes up but without any content), the internet is out, and the phone is working. However, across the way (about 15 miles) a certain FiOS customer doesn't have anything at all (including phone service).

How am I blogging this? Neighbors without WEP turned on and obviously no FiOS service. I tried the ones for FiOS and they didn't have internet either (you can tell which routers are Verizon but the names of the things).

This sucks. We called and we'll get a call back sometime by tomorrow around noon or something.

UPDATE:

Service has been restored. In fact, I think we had it back before we actually knew it. A breaker switch was thrown, and the whole back-up battery and unit were plugged into it. So the box shut down, and the reserve power kept the phone alive until the battery finally ran out. The woman I spoke with at Verizon was very nice about it I must say. Checking the battery back-up clued me into the whole situation. Whew.
 

Friday, April 11, 2008

AIR Application presence and a web SWF

Friday, April 11, 2008    3 Comments




You should see a SWF above, and it is looking for the presence of an AIR application. You can download that .zip of it here. Not enough time before the weekend to make a badge or icon for it.

Run the AIR application and the SWF above should detect it's presence. Like on Parleys.com.

A screen shot:


 

Trying to mimic a part of Parleys.com / AIR integration

   1 Comments

Update:
I am an idiot. Rich Shupe pointed out to me on FlashCoders that I forgot the underscores in the connection name strings.

You see, that's important to supply when the SWFs are running in different domains, etc. Its a flag for the VM. Doh! And it's all specified there in the online documentation too. So please disregard the post from this point on...

After a bunch of playing around, I think I may be going about something the wrong way. Or else I'm simply missing something fairly simple.

This is what I am trying to do:

I would like a SWF in a web page to be able to detect and respond to a SWF running locally on a client's machine (standalone or an AIR application). Like what happens on the Parley's website with its AIR client (BENZ also known as Benjamin Dobler)... maybe I'll email you a link to this post.

The first thing I thought to try was localConnection and some polling (not efficient but its a proof of concept only for me).

When both SWFs are run locally or online, things work perfectly. When I try to do what I want, it fails. I am wondering if I'd need to use an online socket server to get this to work right (I hope not).

Anyway, here are my two classes, a Sender (web page) and receiver (localhost):
package net.ericd.utils
{
import flash.display.Sprite;
import flash.net.LocalConnection;
import flash.events.StatusEvent;
import flash.text.TextField;
import flash.utils.Timer;
import flash.events.TimerEvent;

/**
* This SWF will reside in a web page.
*/
public class LocalConnectionSender extends Sprite
{
private var conn:LocalConnection;
private var myTimer:Timer;
private var circle:Sprite;

public function LocalConnectionSender()
{
conn = new LocalConnection();
conn.allowDomain( "*", "localhost" );
conn.allowInsecureDomain( "*", "localhost" );
conn.addEventListener( StatusEvent.STATUS, onStatus );

myTimer = new Timer( 500, 0 );
myTimer.addEventListener( TimerEvent.TIMER, ping );

circle = new Sprite();
circle.graphics.beginFill( 0xFF6600, 1 );
circle.graphics.drawCircle( 50, 50, 10 );
circle.graphics.endFill();
circle.alpha = 0;
addChild( circle );

myTimer.start();
}

private function onStatus( event:StatusEvent ):void
{
switch( event.level )
{
case "status":
circle.alpha = 1;
break;
case "error":
circle.alpha = 0.3;
break;
}
}

private function ping( event:TimerEvent ):void
{
conn.send( "lifeConnection", "lcHandler", "hello" );
}
}
}

And now here is the receiver:
package net.ericd.utils
{
import flash.display.Sprite;
import flash.net.LocalConnection;

public class LocalConnectionReceiver extends Sprite
{
private var conn:LocalConnection;

/**
* This SWF will reside on the desktop, local.
*/
public function LocalConnectionReceiver()
{
conn = new LocalConnection();
conn.allowDomain( "*", "localhost" );
conn.client = this;
try
{
conn.connect( "lifeConnection" );
} catch ( error:ArgumentError )
{
trace( "Can't connect, name already in use." );
}
}

public function lcHandler( msg:String ):void
{
trace( "received data: " + msg );
}
}
}

So that's it really. Seems simple enough, but I'm not getting the love right now. I thought i had set this thing up correctly, and the whole "*" and "localhost" would get around the local or network only things in the Publish Settings. I played with those and didn't get different behavior.

I also mucked with "flash.events.SecurityErrorEvent" and didn't get any security setting errors reported back to me. Is this kind of thing simply impossible with the new security models?
 

Flash web video job(s) in Boston

   0 Comments

It's 3:28 AM here in Boston, I couldn't sleep so here I am. One thing I have seen in the past several weeks is significant recruiter activity. All based around web video and startups here in the local area. And an unusually high number of different recruiters all banging on the same drum.

When I get a call at work from a recruiter (which I pretty much despise, I'm never sure how they got the number unless they used the switchboard or something), it's almost always about web video. I ask if its ultimately about Brightcove (one of the biggest consumers of Flash/Flex talent in the area) and sometimes it is. Sometimes its not, its for other startups. I know of a few other shops working in the space, and they all seem to be thriving.

I seem to remember hearing a story from someone at Macromedia (at the time) who told me that web video was a little experiment some engineer threw together over a weekend at home. And look what has happened with that!

If you're into web video and Flash/Flex, and you're in the Boston area or would like to move here, you should have no trouble finding work. That is if you like the whole start up thing.
 

Thursday, April 10, 2008

(Yahoo!+TimeWarner) / (M$+NewsCorp)

Thursday, April 10, 2008    0 Comments

These are strange days.

Yahoo! and TimeWarner are closing in on a deal to have Yahoo! merge with AOL while Microsoft wants to team up with News Corp to up the ante for Yahoo! And Yahoo! is testing Google Adsense with it's search results.

I suppose M$ is on the losing end of the stick here.
 

Bitten by uint

   0 Comments

I'm hanging my head in shame right now & I will admit it. I've been debugging a loop and I used the type uint instead of Number. I was getting out of range errors, and I just didn't see it. I wasted almost 30 minutes wondering wtf was going on. Bitten by pilot error on the uint.
 

It's indeed white ale and coding season

   2 Comments

In what some consider blustery & cold New England (Boston), the weather is ripening and it's now time for coding on the deck into the wee hours of the evening: deck lights burning, a warm breeze, the pristine glow of a laptop screen, your code editor of choice, the confidence of WIFI, some piped-in music, and a few bottles of white ale.

Now, around here people like to think Sam Adams (Boston Beer Company) makes good beer. You can find Sam Adams White Ale, but I honestly don't know why you would subject yourself to that kind of humiliation. It's completely unmemorable. And watery. It's not horrible, but it is a distinct waste of time.

Hoegaarden. Get some. Seriously.

You will not be sorry. You'll pay a little more, but you'll actually enjoy it. The aroma is right, the balance is quite good, the color is spot on, and you'll be able to down more than three before getting bored, like you will with Sam Adams.
 

URLs and Flex

   0 Comments

I ran into this problem a while back myself, and just now someone else ran into the problem too. Let's say you want to use a URL for something (RSS gathering, a simple link out to another location, etc.)

http://www.adobe.com/cfusion/exchange/index.cfm?event=productHome&exc=24&loc=en_us

Now when you compile, you'll get an error.

The reference to entity "exc" must end with the ';' delimiter.

Ian Thomas pointed me in the right direction. The XML parser is trying to expand &exc into an XML entity - since & is the signifier for an XML entity. 

Change the
&
symbols to
&
and you'll be good to go.
 

Wednesday, April 9, 2008

Microsoft answers the Yahoo!-Google thing

Wednesday, April 9, 2008    0 Comments

Yahoo! plans to do some limited testing of providing Google AdSense for search along side their search results. Microsoft responded today:

Any definitive agreement between Yahoo! and Google would consolidate over 90% of the search advertising market in Google’s hands. This would make the market far less competitive, in sharp contrast to our own proposal to acquire Yahoo! We will assess closely all of our options. Our proposal remains the only alternative put forward that offers Yahoo! shareholders full and fair value for their shares, gives every shareholder a vote on the future of the company, and enhances choice for content creators, advertisers, and consumers.

- Brad Smith

I wish I could feel sorry for Microsoft. I really do. But I don't.
 

I am a fan of Benjamin Dobler

   1 Comments

I downloaded RichFLV a long time ago, and to this day its one of the best AIR applications I've come across. Adobe's Media Player, The ADC Desktop, and a few others are better. However I've seen some stuff tonight that really made me smile and inspired me.

The on Air Weblog has various videos. I hadn't been there for some time, and stopped by to see a recording Serge Jespers made of Benjamin Dobler. We get a sneak-peak of the next RichFLV application (which is quite nice), but then Benjamin starts talking and showing the Parleys.com AIR application and how it ties into the site.

Watch that video. The UI seems to be really good, there are lots of elements that are available, lots of smarts in the handling of states, etc. Inspiring stuff.

The overall UI of the Parleys.com AIR application I like more than the Adobe Media Player (although the AMP has a much smaller visual footprint... so perhaps I shouldn't be making a comparison like that).

Benjamin's blog can be found here. I've run into mentions of him before, but this is the first time I've paid enough attention, the attention he deserves. Killer work Benjamin! I am a fan.
 

What's up with the NHL?

   4 Comments

You can view the schedule for the Stanley Cup playoffs here. I've been a Penguins fan for ages, and while I lived in Pittsburgh, all their games (just about all I think) were televised. As they are now. But I live in Boston now.

The only opportunity I have to watch the Penguins is Versus (which I have through Verizon FiOS), CBC (I don't like in Canada), RDS (French-Canadien? I don't have it), or FoxSports Pittsburgh (I'm a little too far to run a cable). WTF happened between ESPN and the NHL?

ESPN used to televise tons of hockey during the playoffs. I know that changed a few years back. Was it over ratings or simply money? What will they broadcast instead? Lumberjack contests, Rome's show, lame basketball, April meaningless baseball, ...

At least I get a few on Versus which is better than nothing. Internet radio and highlights on the Pen's website will have to tide me over I guess. And I'll be forced to watch the Bruins.
 

Crazy cool AIR tool: Nemo 440

   0 Comments

Last night I was introduced to swfdump.exe, "Glad to meet you fine sir." I checked out the Flex 4 SVN repository hosted by Adobe, and found the tool. Before Flex went open source swfkit.jar.

Anyway, there is an even easier way to use the tool, doesn't require ANT for a compile of source, etc. And it comes to us as an AIR file to provide the GUI. "Hello Nemo440 by Vadim Melnik." Yes, you can dump to a file too.

Quick small example.
dynamic class Base extends flash.display::MovieClip
{
function Base():* /* disp_id -1*/
{
// local_count=1 max_scope=1 max_stack=1 code_len=6
0 getlocal0
1 pushscope
2 getlocal0
3 constructsuper (0)
5 returnvoid
}

static function Base$cinit():* /* disp_id 0*/
{
// local_count=1 max_scope=1 max_stack=1 code_len=3
0 getlocal0
1 pushscope
2 returnvoid
}
}
That's pretty slick, it works with compressed and uncompressed SWF, with SWC and also ABC.
 

Adobe Media Player released

   0 Comments

Adobe has released the Adobe Media Player to the masses.

Adobe® Media Player software provides control and flexibility to view what you want, when you want — whether online or offline. You can queue up and download your favorite Internet TV content, track and download new episodes automatically, and manage your personal video library for viewing at your convenience.

Adobe Media Player enables businesses to create, deliver, and monetize high-quality content using a variety of new business models. The customizable, cross-platform player leverages existing Adobe Flash® technology and supports downloaded and streamed media of up to full-screen HD resolution.

There are some pretty decent participating networks out of the gate too.
 

Tuesday, April 8, 2008

Boston Flex Users Group Meeting was nice

Tuesday, April 8, 2008    1 Comments

Tonight was the first Boston Flex User Group meeting, and it was held at Adobe Newton. The scene is familiar to many of us in the area... through reception to the stairwell on the right, up, passcard through a door on the right at the top of the stairs and into the common area on the second floor. Garage door partitioned presentation area, ping pong table, booth seats, and a large kitchen. The waft of freshly baked Bertucci's pizza. Lots of refreshments, lots of chairs, and lots of Adobe folk presenting code to the masses.

And tonight was no exception. There were TONS of people who attended. Which surprised me because the meeting was about the Flex 3 open-source SDK. Developing for it, against it, fixing bugs in the branches (the trunk is Flex 4 (Gumbo)), and there was a whole of very technical talk going on.

For whatever reason, its always 8,000,000• in there, and the screen goes a little fuzzy on me. Gave me a headache when studying the code on the screen. Maybe its just lack of caffeine or its late in the day and my eyes are tired and the room is dim with slightly flickering lighting?

Eclipse was the bitch tool of choice of the evening. Went through RPC source, learned a lot about dataBinding (its an expensive operation that adds lots of code to your SWF so you should think about that), why compiling can take a while (if you edit a class, it can percolate through other classes and cause them to need a recompile too), MXMLC (like mini-compilers), there are tools already in the SDK that dump your SWF out to readable XML & show what is taking up what room in the binary, a compiler that will daisy-chain compile for you, and more.

Would you like to contribute to the SDK source code? Help fix bugs? Get really dirty in the bowels of the compiler (requiring ANT to compile)? Then this meeting was for you. It could have gotten even more technical, but I think tonight the amount of glazed eyes probably served as a warning to not go that much further down the rabbit hole.

I enjoyed the session quite a bit, although I won't be downloading the SDK to any local SVN repository any time soon. At the end we were served some useful tidbits for use without having to worry about ANT or breakpoints in SDK source code, etc. The turnout was fantastic... to guess I'd say there were probably nearly 100 people. Not nearly enough pizza, but I think the people who rolled in late probably already ate.

Nice meeting. I'll be at the next one. Oh, I saw you Scott Janousek on my way out, but the door was already closing behind me.
 

Phil Andrews on the air DJ

   0 Comments

I got a twitter from a pal of mine who has since moved to MountainView, CA and is working at Google.

"live at http://kzsulive.stanford.edu/"

So I pop on over to the radio site, and they have several options of streams, pick one, and bam! There is my buddy broadcasting live to sunny California.

I send a twit about a shout-out and a minute later in a break he gives me and the Pittsburgh Penguins a shout out.

  • "Phil Andrews" you rock, we miss you but glad that you're happy.
  • The internet continues to amaze as I am able to experience this on the other coast of the U.S.
  • You have an interesting show. I would never have experienced this kind of music on my own, and it's not bad. Thanks for broadening my listening experience as I slog code around in my office.
Update:
Cornershop playing in Palo Alto for me. Norwegian Wood. Thanks for that.
 

Monday, April 7, 2008

Theban Mapping Project

Monday, April 7, 2008    0 Comments

I am really into the Theban Mapping Project at the moment (for its contents). Fairly decent Flash, could use with an update though. I wonder how accurate this is right now. I know a few tombs are closed for restoration at the moment.
 

Saturday, April 5, 2008

Cya Naymz

Saturday, April 5, 2008    0 Comments

Bye, bye Naymz. I tried you out and tons of people were spammed, my apologies. Your interface is cheap and you have way too much upsell/promotion going on.

LinkedIn is my networking tool of choice. You spammed me with emails all the time, and I just canceled my account. My rep score was 10 or something but who really cares. I'll keep my LinkedIn stuff up to date and tidy instead. Cya.
 

Friday, April 4, 2008

OLAP and AS3

Friday, April 4, 2008    1 Comments

There seems like there is no end to the new stuff one can learn about ActionScript 3.0. I was checking around the Advanced DataGrid in Flex, and wanted to glean some more usage insight online. And one of the links I ended up following was Sreenivas Ramaswamy's (Adobe Bangalore) blog. He mentions a whole bunch about OLAP. Well, I've never heard of OLAP before.

Wikipedia: Online Analytical Processing, or OLAP (IPA: /ˈoʊlæp/), is an approach to quickly provide answers to analytical queries that are multi-dimensional in nature. OLAP is part of the broader category business intelligence, which also encompasses relational reporting and data mining. The typical applications of OLAP are in business reporting for sales, marketing, management reporting, business process management (BPM), budgeting and forecasting, financial reporting and similar areas. The term OLAP was created as a slight modification of the traditional database term OLTP (Online Transaction Processing).

Okay, but still... wtf. Multi-dimensional arrays. I am not sure if I will ever really need to use OLAP in my own work (I do use multi-dimensional arrays all the time though)... but I figure I should probably at least become familiar enough with it so I can make better educated design decisions should the need arise that might benefit from using the power of OLAP and AS3/Flex.

Update:
Through that GTalk mechanism I have on my blog, Daniel from onrails.org contacted me. He has a lot of experience using OLAP and Activewarehouse. It seems on the surface that I simply may never need to consume as much data as OLAP makes it easier to get lots of data in a condensed way.

He mentioned that the Flex implementation is still a bit slow, and mentioned throwing all the data at a OLAP cube wouldn't be the optimal way to do things.

Well, I remember that Live Cycle Data Services page data... and I imagine that this would tie right into the Advanced DataGrid?

So you could combine OLAP and the paging of LC for snappy interogation and display? You could have a set of data a million rows deep and your grid would only be as slow as the connection buffer to the server to the data. If I am off-base here, forgive me. I am still reading up on this and going through what Daniel IM'd me... and its all a little abstract until I actually play with some code and data and see for myself the interactions.
 

3G iPhone with black back?

   0 Comments

3G iPhone假想合成圖... 

而真正看過的,往往因為NDA(保密協定),而不會多加宣揚 

尤其Apple最善於此道,君不見每次只要有新產品上市,你不晚上半夜不睡覺在那裡守著keynote,不然不到最後一刻,你永遠猜不到Steve Jobs蘋果裡賣甚麼藥 

而更厲害的是,在此之前,產品研發所需的一兩年時間,居然沒人可以從各種角度看到任何東西 

這就是NDA的用途 

尤其以apple這種每次發表產品,就造成轟動的狀況更彰顯NDA的重要 

不然就像iPhone在去年初發表要6月才上市 

不到五月就有仿冒的出來了不是嗎? 

所以3G版的iPhone,一定會有!!只是甚麼時候會出來?! 

是不是只有白色與黑色?!
 

Thursday, April 3, 2008

Leopard Screensaver

Thursday, April 3, 2008    1 Comments

I was cleaning up my MacPro, removing desktop images I wasn't using anymore, archiving project files, etc. and stumbled upon something I hadn't seen or even heard about before.

In OS X Leopard, if you go to your Screen Saver Preferences panel, below the Apple-provided savers, you'll have Pictures (some Apple provided, the rest from iPhoto, etc.) Now, below the image Preview window you'll see 3 view types.

Fade (Ken Burns), Zoom spin and drop individual photographs, and photo mosaic.

Photo mosaic is actually stunning... you've seen those poster images of an image that is actually made up of tons of smaller photos... this screen saver view duplicates that, but it zooms all the time (except a brief pause to show you the original photograph that was re-created).

The zoom spin and drop is pretty elegant too.

I haven't heard anything about these different views, give them a shot. Although when they are running you'll be impressing others, its good to know when your machine isn't being used and almost sleeping, its still beautiful. AND you can display a clock on top of all those photographs during the animations.
 

Weighing in on the Adobe, Apple, Pshop CS4 64-bit

   4 Comments

So Adobe's CS4 for Windows will be written to support that 64-bit OS. Mac OS X will not be able to take advantage of its 64-bit-ness because Adobe still has the source as Carbon for the OS.

While I use Photoshop every single day for something or other, I'm not entirely up in arms over this fact.
  • I am not a complete power user working on ginormous hires files
  • I only have 6GB of RAM right now
However, Apple has been touting Cocoa for several years now. So its no surprise that Apple killed 64-bit Carbon. Carbon is seriously old-school.

The rewrite of Photoshop for 64-bit OS X will be an insanely large task to complete. Perhaps they are already porting it, or have been in the process for a long time already. We simply don't know.

Would I like a 64-bit Photoshop for the Mac? Of course. Are the bulk of those using Photoshop using OS X? I'd guess yes. Is this in oversight by Adobe? I don't think so.

We've heard Photoshop CS5 should support 64-bit OS X. So we have to wait a bit until we all get it. A downer: No WAY I'd buy a XP/Vista version to run in BootCamp just to take advantage of 64-bit addressing. Too bloody expensive.

32-bit for me please, but when the pie is baked, I'd like the whole pie.
 

Wednesday, April 2, 2008

Flashpaper used at NHL.com

Wednesday, April 2, 2008    0 Comments

NHL.com playoff scenarios.

I almost forgot Flashpaper was out there. Its a good use of it I suppose.
 

Button your code up at day's end

   0 Comments

Throughout a typical day I get requests to make changes to prototypes and simulations. However sometimes the changes are requested not by email, phone call, but in person. Which means I normally am editing class files with the requester over my shoulder.

I end up commenting a lot of stuff out (especially since the AS3 compiler really wants things to be tidy), slapping in semi-stub code, perhaps a magic™ number here and there, and I end up with something that maintains the requested changes, but leaves the code overall in a shaky state.

I don't know about you, but when I leave for the evening and my code isn't buttoned up to a certain degree, I won't be able to sleep. I don't even like to keep commented code in my sources for long either (that's why we have version control right? If I need to resurrect a method then I can use Subversion to get it).

It's easy to say, "I'll get to it tomorrow." But we all know that doesn't always happen. And if you get rounds of changes, and you don't keep up on things, it gets harder and harder to go back and do things correctly. It takes some dedication to do it, especially if you're tired out at day's end. But you'll thank yourself later for it, even if you are getting change requests, it's good to keep your code really clean as often as you can.
 

Tuesday, April 1, 2008

FlashDevelop Timers Panel

Tuesday, April 1, 2008    0 Comments

An idea. Some AS3 projects I have going involve many Timers. I always provide references for them so I can access them and kill them, etc. when I need to. I think it might be cool in FlashDevelop to provide a panel that lists the references, the Timers, so one could have more of a bird's-eye view of them. That's it :)
 

Would you like to sync 2+ iPods?

   0 Comments

If your house is anything like mine, you have several iPods laying about. And you've got two or more computers, each with their own music in them. You could sync your iPods and merge the data - making things nice and tidy. Enter Misu.

This looks like a great application, and with it you can sync up your various iTunes Libraries as well using a synched iPod as the conduit.