Archive for the 'Cp5' Category

Friday, 03 June 2011Posted by Whyves

In my previous post on Captivate Interactions in the making, I mentioned that my next widget was going to be a Hangman type of game. Well, I haven’t finished my Jumbled Word widget yet but since both games are going to use the same engine, I decided to tackle them in parallel.

I think that hangman games are great interactions in a course but I didn’t want to show the typical stick figure being drawn one part at a time; I wanted something more related to the eLearning field. So I got a graphic artist to create some cool sequences for the game. Personally, I like the end results a lot but I will let you be the judge on this. I couldn’t resist showing you a preview of the Widget so here it is! I’m really looking forward hearing from you on this one. Just make sure that you at least try the game and fail at all the attempts to see the grand finale. Wait a second or two when you miss a letter before trying another one and to restart the game: reload the web page (for the moment).

For those that follow me, I think you can win the game without even missing a letter :-)

Have fun!

Monday, 23 May 2011Posted by Whyves

Someone brought to my attention a small limitation of the Youtube widget. Youtube allows some special characters in its ID and I was only allowing alphanumeric characters. So, I have corrected this small issue and the Edit view should now allow entering all the legal characters of a youtube video ID. You can get the Youtube Widget for free here.

Friday, 01 April 2011Posted by Whyves

I have a widget that I worked on while developing CpGears. It laid dormant for a while and lately I finished working on it. The widget is called the Playbar Lock Widget and as its name indicates, it locks the playbar from going forward. So, a learner will not be able to use the next page button or the progress bar to advance in the lesson. However, the entire functionality will return once the presentation reaches the last page.

The widget also tracks the last page visited by the user and if the user goes backward, the next page button will reappear until the user goes back to the last visited page. The nice part is that the widget functionality works also with a LMS. The widget will use the status of the lesson stored in the LMS to enable or disable the next page button and the progress bar.

You can find more information here or experiment with the demo.

Friday, 24 December 2010Posted by Whyves

I finally removed the last known issues with the CpNotepad Widget (Cp5 only). It is  now available for purchase at a price of $24.95 USD. I think that this is a fair price considering that the Widget can be used in almost every courses. Check out the updated demo and make sure you understand the limitations that comes with it. The major limitation is that the Export to HTML functionality can only work when the course is published with Flash Player version 10. If your customer is still stuck with version 9, don’t bother it will not work.

Now, since Christmas is knocking on our doors, I decided to make it a Christmas Launch Special. So instead of the usual price, you get a $10 off so the widget will cost you only $14.95 USD. However, there’s a catch! The rebate will only be applied to the first 5 customers. However, being generous in nature :-) , if you buy the widget before the new year and don’t get the rebate, just e-mail me and we’ll fix that.

Happy Christmas!

Wednesday, 22 December 2010Posted by Whyves

It seems that I have a hard time concentrating on finishing CpGears. I always get side tracked to something interesting. A few days ago, James at Mindful by Design was looking at a way to have his users take notes when going through a course. The notes needed to be persisted across sessions and eventually printed. That was enough to get me interested and I ended up being sponsored by James to create a widget that do just that.

The CpNotepad widget offers you a rudimentary text editor to take your notes. They are saved in a Flash Player shared object so that they can be recalled the next time you take the course. For printing, I hit a few brick walls. Printing in Flash is not that great, especially for text that is too big to fit on the screen. I ended up exploiting a Plash Player 10 feature that allows to save a file on the user’s disk. So, I used this approach to export the text and its formatting to an HTML file. The user can then open it up in his favorite browser and print it if he wishes!

I still have to put the final touch and make sure that it’s robust (a few bugs here and there) but you can take a look at it if you wish.

Click here to see the widget in action!

If you see issues with it, please kindly let me know. I will probably put it on sale in a few days. I hope it’s something that will be useful to many :-)

As for finishing CpGears … maybe during the Christmas break?

Wednesday, 17 November 2010Posted by Whyves

As mentioned in my previous post, in order to test the static component of CpGears, I created a small widget that I call the “Image Zoom”. It’s a Captivate 5 widget that creates a thumbnail from an image and displays it full size when clicked on. This is very useful when you want to save real estate like in a quiz. I have build a small demo that showcase its capabilities.

Now, I decided to put it on sale since I did spend a little bit of time fine tuning it. The use of the widget is fairly intuitive but I must admit that I did not yet create a page for it with all the explanations on how to install it and how to configure it. So, since I’m ashamed of myself I decided to cut down the price until I write all the documentations. I was thinking of selling the widget for about $10 but I will cut the price to $5 for those who read this blog!

In order to claim the special, when buying, just use the code: MISSINGDOC

Addemdum: The page has now been created here. So sorry but the special has now ended.

Have fun!

Thursday, 11 November 2010Posted by Whyves

I’m still spending some time to develop CpGears and as such I decided to develop a small widget that will allow me to test its StaticWidget interface. My widget will create a thumbnail of an image and once clicked on, will display the full size image centered. Here’s an example.

When the full image is centered, I add a “mouse shield” to prevent interaction with the rest of the presentation. At some point, I was trying to debug my widget and it seemed that the mouse shield was never working. Took me a while to realize that Captivate Buttons are eavesdropping. By this, I mean that the Buttons are actually listening to events directly from the stage and check to see if it corresponds to their actual position. Side effect: No matter what you put on top of the Button, it will always respond to mouse click. It’s easy to try. Just put a button in your presentation and slap over it any image or even a caption. Run the presentation and click on the image where the button is supposed to be. Surprise! The presentation will start playing again. I must admit that this is really annoying when you want to use a mouse shield …

So, when you develop … beware of the eavesdropping buttons!

Wednesday, 13 October 2010Posted by Whyves

I saw today a very interesting comment in my previous post about widget events. I was basically complaining (I know … I need to stop doing this :-) ) about the Slide eventing system to be a little bit flaky. Shameer (Senior Product manager at Adobe) was very helpful (as usual) and got one of the Adobe software developer to take a look at my comments. It ended up that the developer did explain the behavior but I was not really happy with the explanations since I still see the eventing system as flaky. I also mentioned … again … that the API could see some improvements and I asked Shameer if they would be working on the API for Cp6. Turns out that they will and they will also listen to me and other widget developers in the community. That’s great news!

In order to keep my comments in one place, I have created a new page just for that purpose. I will start putting more comments there as I hit problems and frustrations with my CpGears API. You are welcome to contribute through the comments and I will move the data to the main page as I read them. By the way, I have just installed a new plugin that will allow you to follow the comments in the post. Just make sure you check the ”Notify me of followup comments“ checkbox below the comment box.

Wednesday, 06 October 2010Posted by Whyves

When Captivate 5 came out, one of the  interesting feature that was added to the widget API was the EventDispatcher and the different movie events. Before this feature, the developer had to hook himself on the ENTER_FRAME event and check, on each frame, the value of different captivate variables in order to determine the current slide, the current frame or the movie status. This seemed to be a very promising feature long awaited by widget developers.

Unfortunately, tapping into it is not as simple as it seems. First hurdle:  the Captivate Helpdoesn’t mention this EventDispatcher at all. However, sometimes if you dig and are patient enough, you can find gems … and the Captivate 5 installation folder has a few nice ones. Hidden in the ActionScript folders are the different classes that can be accessed by the widget at runtime. If you are familiar with the lifecycle of a widget, you know that at runtime, a movie handle is passed to the widget via the cpSetValue() function. For those of you that aren’t, consider reading this.

So, at runtime, the Captivate player passes the movie handle to the widget. From there, you can call the getMovieProps() function to retrieve a reference to the CPMovieProperties instance. This class instance contains a property that is not mentioned in the help and that is named: eventDispatcher. This property will return an instance of an IEventDispatcher which will allow you to monitor the following Captivate events:

  • CPSlideEnterEvent (Entering a slide)
  • CPSlideExitEvent (Exiting a slide)
  • CPMovieStartEvent (Starting the movie)
  • CPMovieStopEvent(Stoping the movie)
  • CPMoviePauseEvent (Pausing the movie)
  • CPMovieResumeEvent (Resuming the movie)

 

You would think that the problems stop here and that the widget can now live happily ever after. Hum … sorry to disappoint you but the eventing system is a bit flaky. Here are my observations:

  • The first time the EnterSlide event is fired on the first slide, the movie is on frame #2. If you rewind the movie, the EnterSlide event is now fired on frame #3. So, why frame #2 initially and frame #3 ever after?
  • There is a lost frame between the ExitSlide event and the next EnterSlide event. For example, Side 2 fires up an ExitEvent on say frame 181. The movie keeps playing and the next EnterSlide event is firex on frame … #183. What happened to frame #182? Granted it’s not that important but it’s bizarre none the less.
  • When the movie stops on the last slide (say 4) and on the last frame (say 285), if the movie is rewound, an ExitSlide event is thrown originating from Slide 4 (fine) but for frame … #1! That is impossible, you expect it to be Slide 4 – Frame 285. Looks like a bug to me.
  • There is a very strange behavior when dragging the thumb of the progress bar in the playbar. If you start the movie and pause it after a few seconds but before the first slide ends, you can scrub the thumb back and forth without any problem. That is as long as you scrub within the first slide. If the thumb crosses over to slide #2, an ExitEvent for slide 1 and an EnterEvent for slide 2 are thrown. That is perfectly normal. What is not is when you scrub back the thumb into slide 1, then you get an EnterSlide event for each frame of slide #1. This is very annoying! If you want to check that up for yourselft, just let the movie play to the end and then click on the thumb and scrub back. If your movie has 200 frames, you’ll get 200 EnterEvents. Again sounds like a bug to me!
  • When you click on the thumb of the progress bar you get inconsistent events such as pausing, resuming, exiting a slide, etc. I was not able to get a reproducable pattern. However, one thing I can reproduce is if I scrub the thumb all the way back to the beginning of the movie, I then always get a Resume event  followed by an Enter event.

This inconsistent behavior makes this feature hard to use in real life without resorting to hacks. If you plan to use Captivate Events, just be on the look out for unwanted side effects. Now, I will need to report these problems to the Captivate team … unless one of the Captivate  developer happens to read this blog :-)

Sunday, 03 October 2010Posted by Whyves

I have been very quiet for the last few weeks. So, I decided to break radio silence and let you in on what I’m actually working on. I’m currently working on creating my own Captivate Widget API that will be called CpGears. As you read this, I’m sure that one question will come to mind: “Why are you doing this? Tristan already created his very good WidgetFactory API”  Well, that’s true; Tristan did an amazing job with his API but I want to do mine for specific reasons:

  • Personal challenge and accomplishment
  • Tristan wants his API to be accessible to developers of every caliber while I want mine targetted to more advanced users.
  • Having more than one option is always a good thing. Just take  a look at all the similar AS3 libraries out there.

I’m almost done with the Static widget and I will soon start working on the other two types: Interactive and Question. Some of the things that I’m adding with my API are:

  • A logger interface so you can log and trace messages from your widgets.
  • A different way for handling the widget flow/lifecycle.
  • A more object oriented approach to accessing the widget data. I don’t like the CpMovieHandle, CpSlideHandle, CpSlideProperties and other native widget classes. So, I offer a more structured interface for accessing that data.

The API will be developed under a MIT Open Source License and be hosted on Google Code. In order to make sure that I don’t directly compete with Tristan and his API, I will make mine only Cp5 compatible so people that want to develop widgets for both the Cp4 and Cp5 plateforms will still have to rely on Widget Factory. By the way, Tristan is aware of this and we have discussed that a few months ago.

So, come back and visit us in 2 or 3 weeks.  I’m actually advancing at a turtle pace since I don’t have that much free time on my hands.