This blog isn't maintained anymore. Check out my current project, an agile/scrum management tool.

Monday, July 30, 2007

Object Handles updated

[ObjectHandles is a library to easily manage user movable and resizeable onscreen objects]

It's been a while, as I've been overly busy lately, but there is now a new ObjectHandles release.
This release fixed one bug with non-visible components, and added a new set of mouse cursors as the default. Since my last build, there's a been a bunch of submissions for new mouse cursors. I thank you all! In the near future I'll create a separate swc with them all embedded so developers can pick and choose. But for now I've embedded one of those new options into the library as the default. You can download the new release at

http://code.google.com/p/flex-object-handles/downloads/list

Now, you can also set your own mouse cursors, outside of the library. To do this, implement the OHMouseCursors interface, instantiate your class, and assign it to the ObjectHandles.mouseCursors property. A sample cursor class follows:

package your.package
{
public class YourMouseCursorClass implements OHMouseCursors
{
[Embed("../../../assets
/cursors/set1/resize- v.png")]
protected var sizeNS:Class;
[Embed("../../../assets/cursors/set2/move.png")]
protected var sizeAll:Class;
[Embed("../../../assets/cursors/set1/resize- l.png")]
protected var sizeNESW:Class;
[Embed("../../../assets/cursors/set1/resize-r.png")]
protected var sizeNWSE:Class;
[Embed("../../../assets/cursors/set1/resize- h.png")]
protected var sizeWE:Class;

protected var map:Object = new Object();

public function getCursor(name:String) : MouseCursorDetails
{
return map[name];
}

public function YourMouseCursorClass () : void
{
// Numbers are offsets to the hot-spot of the cursor (the point of the arrow, the middle of the resize bar, etc.)
map["SizeNS"] = new MouseCursorDetails(sizeNS, -5, -8 );
map["SizeAll"] = new MouseCursorDetails(sizeAll, -11, -13 );
map["SizeNWSE"] = new MouseCursorDetails(sizeNESW, -5, -6 );
map["SizeNESW"] = new MouseCursorDetails(sizeNWSE, -5, -6 );
map["SizeWE"] = new MouseCursorDetails(sizeWE, -9, -6 );
}
}
}

Then in your mxml...

<oh:objecthandles mousecursors="{new YourMouseCursorClass()}" allowrotate="false" x="10" y="90" width="307" height="30" minheight="30" minwidth="100">

If you have many ObjectHandles objects around, you can reuse the same cursor class to reduce memory usage.

The OH website, including a sample, is still at
http://www.rogue-development.com/objectHandles.xml

Enjoy!

Labels: ,

Friday, July 27, 2007

Custom DataGrid headerRenderer based on Canvas

I ran into a problem that I'm still not sure what was happening today. I had something like this:

public class MyHeader extends Canvas
{
...
}

...

myDataGridColumn.headerRenderer = new ClassFactory( MyHeader );

It worked, but upon mouse over or mouse move it would flicker like crazy. Extending Label or Button works no problem. I tried implementing various interfaces like IDataRenderer, IDropInListItemRenderer, and IListItemRenderer but still had the same results.

A quick fix I found was to intercept and cancel those mouse events in my header class.

addEventListener(MouseEvent.MOUSE_OVER, onMouseOver, true );
addEventListener(MouseEvent.MOUSE_MOVE, onMouseOver, true );
...
protected function onMouseOver(event:MouseEvent) : void
{
event.preventDefault();
}

Now everything seems to work fine. But I'm still at a loss on why this happened in the first place and I worry my hack of a fix is the wrong way to do it. Has anyone successfully gotten a custom header renderer based on a container working?

Labels:

Thursday, July 26, 2007

Sharing Flex Projects

We've got 5 developers all working on the same Flex based project. What's the best way to share the project so everyone can work on it together? (I don't mean a version control system, I mean the actual Flex project).

We tried checking into version control and all using the same .project, .actionscriptProperties, and .flexProperties files, but that was a disaster. Flex likes to open them for read/write and make little modifications at seemingly random times. Then merging changes between developers sucks.

What we do now is each developer creates their own Flex project outside of version control.

Then we link in the src folder of our application into our project. (In eclipse you can make a link to another folder by selecting "new folder" then clicking the advanced checkbox) ... see the picture:



Next, we set that src folder as the default source folder of the project.




Then we delete the .mxml that flex builder auto-created for us when we made the project since we don't need it anymore.

Then we set-as-default application our main mxml file.

We use a few external libraries, so we also add a swc folder under our project's build directory.

It seems to work pretty well. We even have some people using FB2 and some on FB3 using this technique. How do other people handle this?


For those of you following the AgileAgenda progress, two new screenshots of the web-view:
http://www.agileagenda.com/screenshots/screenshot8.JPG
http://www.agileagenda.com/screenshots/screenshot9.JPG

Labels:

Wednesday, July 25, 2007

OSX Flex app is slow...

So I tried my scheduling software on my mac today. It took about 18 seconds to calculate my schedule on my duo-core 2ghz MacBook Pro.

My home WinXP 2.1ghz DuoCore2 based machine takes 2 seconds. A 9x improvement.

But the shocker... my work WinXP laptop with a 1.7ghz Pentium M, a MUCH slower machine, takes about 4 seconds.

Why is the Mac so much slower on compute intensive actionscript?

I've heard of it being slower on graphical animation type things, but not something like this.

Labels: , , ,

Tuesday, July 24, 2007

Getting closer to beta ... AgileAgenda

I think I have all the functionality working that I care about for a closed beta. I'll take a few more days to poke at it to make sure it's all working and then release something.

For now, here's a WINK screencast of some of the functionality:
http://www.agileagenda.com/

-Marc

Labels: ,

Saturday, July 21, 2007

Agile Agenda - Web View

While AgileAgenda will be a desktop application, it will have tight integration with the AgileAgenda.com website. From within the application you'll be able to publish a version of your schedule to share with colleagues.



Once you do that, you can share your personal url with people who you wish to view the schedule.

http://www.agileagenda.com/view.php?schedule=1_6d9624696a3447404913dc0dd964e64a

Right now, the view is very bare-bones, but it'll turn into a full featured viewer in the near future.

This feature gave me a chance to try out AMFPHP, something I've long since wanted to give a spin. It turned out to be a lot easier to use than I could have imagined.

By making the web view it forced me to make a Flex/browser compatible version of the software. That gave me a chance to try out the new FB3 profiler, and using that I was able to get the compute time of my (rather large) sample schedule from 15 seconds down to 2 seconds.

Labels: ,

Thursday, July 19, 2007

AgileAgenda is born

Yesterday I asked for name suggestions for my scheduling software, and was disappointed to only get a single response.

Luckily, that single response rocked.

http://www.agileagenda.com/

Thanks Steve. (If you want your free copy when I get around to release time, leave a comment with some contact info in it.)

Labels: ,

Wednesday, July 18, 2007

Spam record


My email spam folder hit an all time high today. Thats 1 month worth of spam, so I guess I get about 100 spam a day :(

I am sooo glad Google does a good job of filtering.









Ugh.. Update... couple days later...

Name my project (Scheduling Software)

I need a name for my current project. It is a project planning & scheduling tool (Much like MS Project) aimed at software developers.

I'm looking for a name that embodies one or more of the following:

- Project scheduling
- Treating the project plan as ever changing instead of something you create once at the beginning.
- Using the tool every day for short amounts of time to keep the schedule up to date. (Continuous planning)
- Planning software based projects.
- Intelligent scheduling algorithm

Bonus points go to:
- Names that I can get the .com domain name
- Names not used by other similar projects
- Catchy names
- Professional sounding names

If you care to read about it more, some thoughts are in the "Schedule" label of this blog.
http://www.rogue-development.com/blog/labels/Schedule.html

Just post in the comments. If I choose your name, I'll give you lifetime free updates to the eventual product :)

Labels:

Monday, July 09, 2007

Update on Scheduling Software

Past few days I've been blogging about my new project-scheduling software I've been working on. Yesterday I implemented the "welcome" screen when you open a project. Eventually, I'll extend this screen so it captures all of the quick tasks one need to do on a day to day basis with a schedule. But for now it has:
  • Project Summary - # of tasks, completion date, etc.
  • The next 3 upcoming milestones, with expected completion dates.
  • Tasks currently being worked on, and by whom.
  • Tasks that are currently late.
  • "Latest News" box - pulls data from my website for info about new versions, etc.
Both the task-lists have a button to quickly mark them as completed.

The software is to the point where I'm going to start using it at work. Hopefully within a week I'll have it to a point where others could use it.

I also implemented a feature that will let you easily share the schedule with anybody, but I'll keep specifics of that secret until we're closer to release. It's cool.

Labels:

Sunday, July 08, 2007

Project Planning

In a previous post I mentioned my frustrations with MS Project and my desire to create a better alternative. That alternative is nearly to the point where I can start using it (it still needs work until I'd share it with others).

But to really make it better than MS Project, it needs to be able to answer common questions I get from producers/managers/clients. Here's my short list:

  1. When will the project be completed?
  2. What is person X working on now, and working on next?
  3. What tasks are ahead of schedule?
  4. What tasks are behind schedule?
  5. What is the next milestone, what features will it have in it, and when is it going to be ready?
Another one that I haven't figured out how to answer yet is...
If we add another person, what will that do to the schedule?


Help me out and post other common questions you might get about a project you're managing (or working on) that scheduling software should be able to help you with.

Here's a screenshot of the latest version:

Labels:

Friday, July 06, 2007

Object Handles now availbe from Google Code

I've moved the download location of Object Handles to take advantage of the download functionality of Google Code. This should let me manage versions much easier.

http://code.google.com/p/flex-object-handles/downloads/list

The neat thing is, I used an ant script to automatically post files there!

Labels: , ,

Thursday, July 05, 2007

I hate Microsoft Project

*update*
********
You can see the latest about this project scheduling product at:
http://www.agileagenda.com/
********

One of my primary responsibilities at work is managing software projects. To do this one of the most important tools in my toolbox is Microsoft Project. Unfortunately, I HATE IT HATE IT HATE IT. I have spent untold hours trying to get very simple things to lay out in a project the way I want it to. Then I've spent even more hours when tiny parts of plans change.

So why do I use it? Because I've found nothing else that's better. It seems like every single other bit of scheduling software out there is either just a low-cost clone of MS Project or even more complex and bloated.

Here's the work flow I crave for project management:

1) I enter in the necessary tasks in a project, including dependencies between tasks.
2) I enter in the available resources (people).
3) I assign tasks to people.
4) I assign priorities to tasks that influences the order they should be done.

The software should then crank through it all, tell me what each person should be doing next, and tell me when the entire project is currently estimated to be done.

I should be able to print a report out so when I say "We're not done for another 4 months" to management, I can point to the pretty GANNT chart to explain why.

This is all great. MS Project does that for me. Here's where it fails, miserably...

After I make that initial project I should be able to:
- Alter anybody's availability EASILY AND PAINLESSLY. I never want to see a message about over-booking just because Bob will be out next Thursday.
- Mark any task as complete (including tasks that aren't "supposed" to be done yet)
- If I mark a task complete, and later find out it's not really done, I should be able to mark it 1/2 compete without the schedule going BONKERS.
- Easily change the order tasks should be done in.
- Be able to tell, based on what tasks are complete and the new availability, when our new expected end-of-project date is.
- Intelligently manage milestones & builds.

I NEVER EVER EVER want to specify a start or end date for a task. I NEVER EVER EVER want to go through a tedious process to mark a task as already done and moving later tasks up. Schedules are dynamic. They should be treated as such.

So I'm writing my own replacement that handles all the above criteria in a simple, consistent way. It lacks many of the bells & whistles of MS Project, that's intentional and I call it a feature. Here's a screenshot of my current working version:


See the grey vertical bar? That's "today"... yes the software actually understands what "today" is, and understands that if tasks were supposed to already be completed, and they're not, the project is slipping. See line 14? That task isn't done but it should have been done days ago. The software knows that, and extended the end-date of the task automatically.

It also understands that if a task isn't scheduled until some later date, and it's already marked done, the project is ahead of schedule! See task #3? It's done, but wasn't scheduled to start until tomorrow. The software knows this, so It automatically moved the start-date of later tasks up like #4.

Since it's an AIR application, it will work on OSX as well, so I don't need to get my dell Laptop out to do schedule stuff anymore.

I'm probably one good weekend of work away from having a version that I can use, and two or three weekends away from having a version I could distribute to others.

Things left to implement until *I* can start using it:
* Vacation time for resources
* Printing something useful
* MS Project import

Labels:

SwfControls (Graphical Buttons and Popup Menus)

On Saturday I blogged about a new component I was working on and I got a few responses saying it looked really useful. So I threw up a project page and it's available for download.

I'm calling it "swfControls" for now, but I'm hating the name the more I think of it. Any suggestions? At this point, I'm really considering bundling ALL of my controls together, maybe I should just do that to avoid naming them all.

http://rogue-development.com/swfControls.xml

Right now there's just a binary SWC for download, I'll get full source posted soon.

Enjoy!

Labels: , ,

Wednesday, July 04, 2007

LogViewer updated

It now correctly displays XML entities (<,>,& etc.)

Download from the usual place:
http://www.rogue-development.com/logViewer.xml

Monday, July 02, 2007

XRay Updated!

John Grden has just released a new version of XRay, the gosh darn bestest Flash debugging tool out there.

The big news for me is it uses my LogViewer component for the log output panel! I hope everyone enjoys it.

Get it: http://osflash.org/xray

John's announcement:


New LogViewer component replaces Xray's output - Thanks to Marc Hughes for creating such a killer component and being cool enough to integrate it with Xray!

includes:

*Debug level filtering
*Text filtering / package filtering
*Highlighting
*Search


Latest Xray interface online:
http://www.rockonflash.com/xray/flex/Xray.html

Download the SWF to run locally:
http://www.rockonflash.com/xray/flex/Xray.zip

LogViewer component:
http://rogue-development.com/logViewer.xml

AS3 News for Xray:
Currently, I have a solid beta of the component working. It looks through all display lists and the property inspector seems to be working properly. Some of the other features with highlighting nodes on stage, grid drawing, filters and sound are not working with AS3 yet. I expect that those will all change in a big way so, I've just been getting base functionality running. Also, I'm still at a bit of a learning curve with AS3. Debugging visual aspects like we did in AS2 is definitely different, and thats why it's taking a while to get something out.

The good news is, I've written it to work:

1. as a component for CS3 (like the as2 version)
2. with the new constructor: var xray:Xray = new Xray();
3. with flex2 via new constructor

If there's enough interest in it, I'll post the beta with docs and let people hammer on it. Need is usually what drives us, so might as well stir up some need :)

Labels: ,