Archive for Captivate

Storyline updates and a Captivate TTS fix

Thursday, January 30th, 2014

First, Articulate continues their excellent product support by releasing yet another software update, this one addressing a plethora of issues – including quiz performance, HTML5 rendering, and AICC/LMS tracking.

Download the update.  Read the Release Notes.

Aside: it appears each Storyline update is a full installer, not just a ‘patch’…so if you’re installing Storyline on a new machine (or reinstalling), you don’t have to go back the original installer and apply all these updates individually – just install the latest version and apply your license.

In other news, a recent LinkedIn discussion noted how Captivate 7’s TTS engine seemed to be performing erratically. Leslie Bivens did some research on this issue and found, “Apparently you have to install the 32-bit version of NeoSpeech, There’s a bug in the 64-bit version.”

And that seemed to fix the issue! So for anyone else using Captivate’s text-to-speech feature (which can be a pretty cool feature) and having troubles with improper performance or pronunciation, remove the 64bit NeoSpeech “English User Dictionary Editor” and install the 32bit version.

Categories :

A recent discussion among some developers brought up a point of consideration;

“When Captivate is setup to mark completion on ‘slide views’, are those completed slide views triggered when the individual slides are ‘entered’ or ‘exited’?”

The can arise in situations where, for example, the project is set to not mark complete until “100%” of all slides are viewed…but what does ‘viewed’ mean? If a user views (or ideally interacts with) the full extent of each slide…except the very last one – say they click Exit too early – will the lesson be marked as incomplete?

Recollections that earlier versions of CP certainly did not mark a slide as complete until the slide had actually reached the end did not match up with more recent experiences.

So we opened up all the versions of Captivate we had installed on a developer’s computer and examined the specific options:

CP4, 5, and 5.5 have this language in the Quiz Settings:
   ‘Slide Views Only’ ‘Slide View Completion [%]’

 CP6 and 7 have this instead:
    ‘Slide Views and/or Quiz’ ‘Slide Views [%] [#]’

So it would seem that prior to CP6, ‘slide views’ were based on when a slide was completed (the end of each slide’s timeline was reached) – or in other words, ‘onExit’…
…but with CP6 and 7, slide views are now based on when a slide is ‘started’…or ‘onEnter’.

As soon as we have some R&D time, we’ll mock up a few sample CP lessons and test the theory! If anyone gets to test this sooner, we’d love to learn what you find.

As an aside, scrubbing through the slides quickly does NOT result in completion; whether that’s technically because all the slides aren’t actually ‘entered’ correctly, or because Captivate is smart enough to know the slides are being passed-by, we’re not sure… But good move – scrubbing through the entire lesson shouldn’t count!

Categories :

Captivate 7 updated

Wednesday, November 20th, 2013
The first patch for Captivate 7 has been released!
 
To download and install the update, open Captivate 7 and choose Help > Updates…
 
 
A good summary of the updates has been done on both Lieve’s blog and the official Captivate blog (by Dr. Allen Partridge) so we won’t go into too much more detail here. One minor discrepancy is Lieve notes the update as 7.01. Allen notes it as 7.0.1. Once we applied the update to our (non-CC, annual subscription) Captivate 7 installation, we see:
 
 
As a quick overview, we like:
  1. New Project > Advanced Actions option: Toggle the Closed Caption area (show/hide), the Mute function  (on/off), the entire Playbar (show/hide), and two Table of Contents options (show/hide, lock/unlock). This saves a lot of time when customizing those items via previous Actions.
  2. Project > Variables list and use count: Now you can either get a full list of where a custom variable is being used, or feedback that it’s not being used at all. This allows much easier housekeeping of unused variables.
 

And, of course, any improvement to the overall mobile-compatible output is welcome. Support for iOS 7 and Android is important but so too is a general tightening up of the overall output itself (i.e. optimal file sizes, proper response to the ‘Scalable’ option, etc.)

  1. Per this previous post, the way CP7 executes the Exit function is less-than-ideal. While we’ve yet to test the output from CP 7.0.1, it’s disappointing that this issue seems to not be addressed.
  2. Better implementation of the Effects panel – having an object’s specific timeline outside the relationship of the primary timeline is just silly. An object’s Effect should be settable without flipping between the main and Effects timeline and subtracting the offsets.
  3. More flexible xAPI integration. First, stop calling it TinCan; the working name has been retired. More importantly, authors should be able to specify a specific LRS location in the Preferences > Quiz > Reporting settings (as well as whether to use a default userID or use a defined CP variable).
Side Note: Many of the newer features are reminiscent of Authorware. Someone on that CP team should get together with a couple Authorware experts and review the overall functionality of that program. OR maybe they already have and they’re just mimicking and rolling out these ‘new features’ as they can work them in!
 
Overall, this is a welcome update to Captivate 7 and we look forward to more frequent and significant updates in the near future, as is the promise of the new subscription model.
 
Categories :

Captivate 7, Exit Bug and a Solution

Thursday, October 17th, 2013

Several of our Inquisiq R3 users have alerted us to the fact that courses developed with Captivate 7 published to HTML5 and SWF do not close properly when using the “Exit” button, forcing the user instead to manually close the browser window by clicking the “X” in the upper-right corner of the browser window.

Through our investigation into this issue, it appears that the process that Adobe has implemented when clicking the “Exit” button is to simply attempt to close the content window and rely on the LMS to capture and commit the session data. Nowhere did we see that the content was actually calling the “LMSFinish()” [SCORM 1.2] or “Terminate()” [SCORM 2004] methods in the LMS’s SCORM API to commit the lesson data to the LMS as required by the SCORM specification.

Adobe uses their own defined function, “DoCPExit,” to close a lesson window.  This method contains a “window.close()” call and additional logic to “bubble up” the command through the frame parents (if they exist and also contain the “DoCPExit” method – presumably because they would also be Adobe-published content files within your package).

There are several flaws to this approach.

  1. By not calling “LMSFinish()” or “Terminate(),” the content is, by definition, not SCORM conformant.  Part of the minimum requirements for conformance are that the content calls the initialization method “LMSInitialize()” in SCORM 1.2 or “Initialize()” in SCORM 2004 and the  termination method “LMSFinish()” in SCORM 1.2 or “Terminate()” in SCORM 2004. The LMS is not required to clean up the data left behind when the content fails to make this call. So if your LMS doesn’t take this additional step (of setting ‘LMSFinish’ or ‘Terminate’ if the lesson does not), your data will be completely lost…i.e. no record of you taking the lesson will be recorded.
  2. The call to close the browser window will fail if the LMS is running the content within a frame or iframe. Since the SCORM specification allows content to be launched in frames or iframes (in addition to new browser windows), lessons need to be able to accommodate this scenario. Even with the “bubble up” logic, once the call reaches the top most content window, and the next parent window in line is the LMS container page, the call will no longer be passed and a “window.close()” call will be fired within the framed page.  When this call is made, nothing will happen as a framed page cannot close the browser window using this command. Through our investigation, we’ve learned that at least 4 other well-known LMSs have experienced this particular issue.

 Ironically, the solution that we’ve discovered is not only SCORM conformant, but also very simple and follows what we would consider to be SCORM “best practices”.  The foundation and logic for the solution is already contained within the published Captivate files (and it is the same solution whether you publish to SCORM 1.2 or SCORM 2004).

We simply modify the “DoCPExit” method that is contained within the “Utilities.js” file to call the “Finish()” method.  Just replace all the code appearing between the “{“and the “}” as you see here:

function DoCPExit(){
   Finish();
}

The “Finish()” method that we have inserted is, as mentioned, already contained within the published Captivate files and contains the logic to properly set the exit parameters and correctly identify whether the content is SCORM 1.2 or SCORM 2004; it will therefore make a call to the correct close method (“LMSFinish()” or “Terminate()”) accordingly.  Once the LMS has received this command, it should take care of removing the content properly, leaving no need for any “bubble-up” logic or window close calls within the content code.

Overall, if the lessons you develop with Captivate 7 work as expected and required in your LMS, there is no need to implement this change. However, if your lesson’s Exit button is not working as it should, and/or you are losing progress and status data when closing the lesson, the fix described here should resolve all those issues.

The biggest issue here is that since we’re changing published code, the next time you update and publish that same Captivate project, you have to remember to change that published function code AGAIN, as Captivate will simply publish the default code.

We have been in touch with the Captivate team to discuss this problem and they are investigating. We would hope a patch to address this flaw would be released in the near future.

Categories :

Captivate 7 was released, with a little…smattering fanfare a couple days ago. There’s a pretty good notice on the official Adobe Captivate blog which details the features, and it seems like a pretty great update…but there’s no mention at all of the new release on Adobe’s home page which is kinda…lame. Sure, the Creative Cloud push is apparently Adobe’s top priority, but not even a sub-category box to herald this update?

Which somewhat leads to a common issue with Adobe’s site overall – there’s no up-front mention of their eLearning products at all. Even things which could apply, like ‘Students’ or ‘Educational institutions’ are all not-eLearning and have to do with other software packages and/or general licensing.
Maybe its just been temporarily pushed aside by all the CC-oriented material… Currently, the only way to find out about Captivate, Presenter, or the eLearning Suite is to search for the specific term, or click a tiny ‘See All Products‘ link then review a huge list…

At any rate, Captivate 7 looks good, and its still available as a ‘traditional’ version – where you download the installer and its actually installed on your machine without any ‘cloud’ or ‘subscription’ connection.
The full version pricing is $899.
Upgrade pricing is $359, which is a fair deal, but only applies if you have a standalone (not eLS) license for CP6.
Or you can do the subscription model for $20/month (with the 1 year plan).

Some thoughts on all that:
1. The subscription model would seem best. Assuming you want to keep up with the latest version, and assuming the next version of CP (8) would come out in 2 years at most, that’s $480 total. That’s more than the upgrade pricing but does allow the intermittent updates that ‘traditional’ licenses will not (for right or wrong) have access to.
And if you consider the product cycles are generally 18 months, not 24, it’s the same price as the upgrade cost ($360).

2. However, the subscription approach very well may overwrite your previous version of Captivate with the new one…so when CP8 is released, once you approve the upgrade, no more CP7? If everyone is on the same plan/version, that’s likely not a problem. If not, it could be. We have multiple versions of CP installed for various clients and testing. It’s such a part of our process, we’re wary of this ‘one single version only’ approach.

*NOTE: Per Dr. Allen’s reply below, previous versions should not be overwritten by the upgrade, so that’s great news.

3. With many of the eLearning Suite (eLS) products now a part of the Creative Cloud, it seem there will be no more eLearning Suite updates. That’s not confirmed, as far as I know, but seems likely. So those with eLS 6 licenses, and not CP6 licenses, are not able to get any upgrade pricing. Phooey.
And while eLS 6.1 is still being sold, it doesn’t seem its being sold with a subscription option.

*NOTE: Per Dr. Allen’s reply below, there’s news on the eLS front coming soon! We’ll post here when that’s provided. Fingers crossed!

So we’ll likely license one traditional CP7 version to have installed ‘in perpetuity’ and a CP7 subscription for the rest of our development team to allow access to the latest updates and improvements.
Of course, then we’ll see what happens with the Creative Cloud overall and the integration (?) of Captivate… Maybe there will be an eLS subset subscription? That could be the best solution…

Categories :

Having now developed a few projects with Captivate 6 and delivered that ‘bespoke’ courseware in both desktop and mobile-compatible formats, here are a few notes and findings on Captivate’s mobile support…

CP6 HTML Tracker

First, the ‘HTML Tracker’ is very helpful! Opening that option (Window > HTML5 Tracker) provides a nice overview of any unsupported items in your entire project. Clicking an entry even takes you to the related slide in the Filmstrip pane. If you open the tracker and don’t see any results, don’t immediately assume everything is copasetic…if a Master or Question Pool slide is selected, the tracker may not show any results despite there potentially being incompatibilities; be sure a ‘content’ slide is selected when the tracker is launched.

There are a few HTML5 notes in this ‘Top Issues’ document from Adobe, such as HTML5 content not launching if there are apostrophe’s in variable values, but these seem pretty tame compared to many of the other issues reported and questioned in the forums.

Some of those reports are issues with playback on a variety of LMS products – including Moodle and SuccessFactors. The latter issue is addressed in the above ‘Top Issues’ document (though not HTML5-specific). Other issues seem to be related to requirements that playback via IE 9 requires the browser to be in ‘standards’ mode, not ‘quirks’ mode, which makes sense for the HTML5 standard and compatibility itself…but how many folks are trying to launch HTML5 project files using IE9? In those situations, wouldn’t it be better to have the SWF version available as well?

When you publish the project, note the newer “Advanced Options” at the bottom-right. Forcing re-publishing can help when you’ve made some significant changes but your previews or published files don’t seem to be true to those changes…

And the ‘Scalable HTML content’ is great, assuming your project design considers it, for ensuring the published project takes advantage of all the tablet screen space. We’ve found this particularly helpful on the iPad browser (though somewhat ‘tiny’ on mobile phones).

Adobe has an additional document with several pointers for publishing to HTML5, including supported and unsupported features. Here are a few highlights;

· HTML5 output is supported only on iPads with OS version 5.1 or later.
  (we sure hope to see Android and Windows 8 added soon)
· HTML5 output is supported only on the following browsers:
 – Internet Explorer 9 or later
 – Safari 5.1 or later
 – Google Chrome 17 or later
   (we sure hope to see Firefox, at least, added to that list)
· Unsupported objects in HTML5 output
 – Text and SWF animations (only the first frame is visible)
 — Exception – typing text is supported
 – Caption, image, slidelet rollovers
 — Exception – button hover states are supported
 – Mouse click animations (only one default click effect is supported)
 – Question pools, Likert, random, matching, and FIB question slides
   (though the ‘subscription only’ update supports some of those now)
 – Slide transitions
 – Slide background if a SWF file is used
 – Audio attached to invisible objects
 – Mouse right-click and double-click

And one significant advantage of Captivate, the possibility and availability of third-party widgets, is also still in flux as providers decide whether to update their widgets to the new CP6 API…and seek assurances of some stability so they don’t have to undertake such drastic updates for every new version of Captivate. So look carefully to see if your favorite widgets have been updated to work in HTML5 output as well as SWF output.

Quick tip: when creating your slides, leave some ‘breathing room’ on either side of the timeline; don’t have your assets bumped up against the start or end points. Give Captivate at least a half-second to start into the assets after the slide starts, and another half to ‘unload’ things at the end (this especially applies to audio and video).

Finally, as noted a few months ago, be sure to apply the ‘available’ patch to 6.0.1. Note there is also a newer patch, but it’s only available to ASA subscribers or those who are working with a Creative Cloud versions of Captivate or eLearning Suite 6. (update: Captivate/eLearning Suite ‘subscriptions’ really aren’t a part of the Creative Cloud offerings – there’s no integration between the two yet. The subscription model is really more just a matter of payment, though it does then allow these newer updates.)

Should you run into any difficulty with your Captivate projects, certainly drop us a line! Captivate is a solid product but sometimes getting the perfect performance and results takes an expert touch…

Categories :

Here’s a quick tip:

In previous versions of Captivate in which you could use Advanced Actions (versions 3 through 5.5), a neat way to pause a slide was to setup a custom action with “Assign cpCmndPause with (literal) 1”. In essence, that tells the internal Captivate function ‘pause’ to be ‘true’, resulting in the slide halting playback at the point that Advanced Action was invoked.

And a common place for that function to be invoked was ‘On Exit’ (of the slide), so just as a given slide reached the end and ‘exited’ – about to move to the next slide – calling that custom action would pause the slide before playback brought the next slide onto the stage.

However, in the current version of Captivate 6, that doesn’t work. For some reason (likely a bug, hopefully fixed in a forthcoming patch), Captivate 6 actually moves to the first frame of the next slide, THEN pauses playback…which is essentially the same thing as placing this custom pause action on ‘slide entry’ of that next slide…making the way CP6 interprets ‘slide exit’ as rather redundant.
 
A simple workaround, as was done before Advanced Actions were introduced, is to place a ‘click box’ at the end of the slide timeline, forcing the slide to pause before continuing to the end. There are a few downsides to that approach though:
  1. You have to place the clickbox on every single slide. Even with copy/paste, you’ll likely have to adjust where the clickbox lies on the timeline.
  2. If the user doesn’t ‘click the box’ and uses some other method to advance to the next slide (i.e. Next in the playback bar), then the end of that slide is never reached, which will result in that slide not being ‘complete’…which can then be reflected in both TOC checkmarks and the SCORM-based completion status.

Fortunately there’s a better workaround! If you have an existing project with an Advanced Action intended to pause slides ‘On Exit’ then you can simply add another line with “Expression cpCmndGotoFrame = cpInfoCurrentFrame -1”. This tells the slide to jump back one frame, which avoids the incorrect (we assume) behavior where CP6 actually moves to the next frame before executing the actions specified in the ‘On Exit’ property. Here’s how we modified an earlier project that was upgraded to CP6 that contained this ‘PauseMe’ functionality:

 
 
Now, note, since the ‘cpCmndGotoFrame’ function itself automatically pauses playback, you don’t even need to specifically invoke the ‘cpCmndPause’ at all! We left it there…just in case, but it’s really not necessary.
 
Now the upgraded CP6 project (formerly created in CP5) plays back as intended – no more continuous playback where it should be pausing. And additionally, it’s likely this Action will not need modification if this odd On Exit behavior is fixed in a future patch – this setup should still pause slide playback as intended. The only issue we envision is if your slide has a visual change on the very last frame of a slide, which would seem unlikely…(though we’d love to hear if you do, any why).
 
Hope this helps!
Categories :

Captivate 6 updates

Thursday, October 25th, 2012

Adobe has recently released an awaited update to Captivate 6. We’ll be working this into our desktop deployments shortly and look to see if past concerns have been addressed. Some of the more important issues that have been improved seem to be:

  • Fixing issues with slide transitions and audio conflicts; with many reports of audio-sync problems in CP6 projects, the ‘fix’ was to disable slide transitions. This should now be resolved.
  • iOS memory management, allowing much better playback performance on iPads/iPhones
  • Integrated MP4 videos should now show reliably in the published project as they do in the previews (though perhaps not always)
  • ‘Flickering’ between slides should be fixed; though this issue may have only been apparent on slides that were imported directly from PPT (do many people do that?)
  • Changes to ‘On Success’ actions are now actually saved reliably (!)
And general improvements to Captivate’s overall stability, including improvements in the upgrade process (i.e. upgrading a previous CP5 project to CP6) should result from application of this patch as well. While we’ve not experienced too much ‘crashing’ in our CP development projects, they do happen, so any improvement in overall load, speed, and reliability are always certainly appreciated.
 
Windows users can upgrade to version 6.0.1 (Build 240) through Help Menu > Updates in Captivate itself or directly from the Captivate downloads page – however, the Mac version is not yet available (“coming soon”).
 
In other Captivate 6 news:
 
Here’s a decent piece on “What’s New in Captivate 6”. The presentation is from August 2012, but still provides a good overview of the product and its capabilities (you’ll have to login to your Adobe account to see the recording).
 
Adobe is now offering ‘Software Assurance’ for several (all?) of their products. Software Assurance for Captivate  provides free upgrades to all releases during coverage period (which may matter more now that Captivate, Presenter, and the eLearning Suite will supposedly be having shorter release cycles). This program also provides you with ‘Gold’ level support – the value of which seems to depend on what issues you have (for very specific needs, sometimes it’s best to just visit the forums).
 
And, as always, should you need any assistance with development of your Captivate-based eLearning courseware, drop us a line! We’ve got a decade of Captivate experience under our collective belts…
 
Categories :

Captivate 6, Ready for Prime Time?

Tuesday, September 25th, 2012

We use a variety of authoring tools here for our custom development, from more ‘hardcore’ programming with Flash for the more advanced and interactive projects, to more simple tools like Captivate, Presenter (both versions), and Storyline (among others).

The most recent Captivate release, to version 6, was received warmly with several updates. We started to play with on the side as we could, before we jumped into any new projects with it…and found maybe we’ll hold off for a while.

One issue, which isn’t critical, is that where recent versions of Captivate supported a variety of widgets to enhance functionality, the new version with its HTML5 output capabilities has broken many of those widgets, and with the variety of widget producers and Adobe support, there’s no way to know if any of those widgets will ever be upgraded to work with CP6. So while few of our projects make significant use of those widgets, it’s nice to have them as options…

A more critical issue is variable performance and reliability of HTML5 output. For now, we’re sticking with Storyline for the production of content that needs to be delivered via desktop and mobile. We’ll recheck Captivate whenever a patch is released (supposedly in November sometime).

There are also a few reporting concerns – such not being able to report a score to the LMS if SCORM 2004 it affected. This is plainly a shortcut by Adobe as it is certainly possible to report a quiz score via SCORM 2004…so the inability to report a quiz score for the SCO will hopefully be resolved in the next patch. This is one of the most impactful issues as many customers, including those using Inquisiq, like to use SCORM 2004 features and require a lesson score to be recorded.

And one small issue that’s remained annoying – Captivate’s Multi-SCO Packager is a neat way to wrap up several individual SCO Packages (lessons) and get them uploaded into an LMS, all on one shot…BUT you can’t save the structure! So set everything up once, save to .zip, quit the Packager…next relaunch, you have to set it all up again…?!

We continue to develop with Captivate, but are sticking with CP 5.5 for now until a CP6 patch is released to address the various issues (a websearch can reveal other issues with transitions, audio, and closed-captioning). It’s a solid product and has a lot to offer, but there are too many potential issues at the moment.

Update: 10/5
In subsequent conversations with Adobe engineers, they seek to clarify some aspects of this post;

“The widgets that were built using the proper Widget API are working when they were brought to Captivate 6.” (Ashish Garg)

While it’s good to know that widgets built using the ‘proper’ API work fine, the overall point remains – that due to the change, many existing widgets don’t work. How much notice Adobe provided to these third-party developers that their widgets would need to be reworked, we don’t know. There will certainly be such issues with product upgrades (i.e. classic Photoshop issues with changes to the plugin architecture) so managing that change process well by providing developers with the new requirements well before the product’s release is a critical step.

Regarding HTML5 output and the iPad,
“…we are asking people to contact us for a hotfix….this is also fixed in the patch…publically available sometime this month.” (Ashish Garg)
Great to hear such issues may be resolved! We look forward to the patch release eagerly.

Regarding SCORM 2004 score reporting,
“In SCORM 2004, it is possible to report score as points as well as percentage (cmi.score_raw and cmi.score_scaled) and hence we have not provided any option to choose the score reporting type. We always report both raw score and scaled score in SCORM 2004. In SCORM 1.2 however, the standard allows to report only one type of score and hence the option has been provided.” (Jayashree Pandeya)

This is also good news and clarifies a misconception on our part – at least the score is being reported via both methods. However, whether the LMS can handle this is a remaining question. If both are sent, what does the LMS report? Why not allow the author to select which they want to send? It still seems somewhat of a shortcut, but at least the score is being sent to the LMS…the remaining caveat being that if a score.raw is being sent, then a score.max and score.min must also be sent…which Adobe says is being done (so we’ll be testing and verifying this shortly).

Categories :

eLearning Suite 6: Presenter and Captivate

Thursday, August 16th, 2012

 Adobe’s latest version of the eLearning Suite was released a few weeks ago and generally seems like a solid and worthwhile upgrade…perhaps not as much as the jump in version numbers would suggest, from the previous version being 2.5 to this most current release being 6, but that’s just to sync the suite up with the rest of the Adobe CS6 release numbers.

One issue that’s come up during the installation process is, apparently, you can’t have Adobe Presenter 7 and Presenter 8 on the same machine. Ah, Presenter installation issues again! This one is fairly simple to remedy though, if not a bit drastic – simply deinstall Presenter 7, then re-run the eLS6 installer again and re-select Presenter.

Of course, sometimes things don’t go smoothly. If not, you may need to run a registry file (on your Windows machine) to ‘clean up’ the deinstallation. Details on that issue are here:
http://blogs.adobe.com/captivate/2012/08/resolution-adobe-presenter-8-installer-issue.html

Otherwise, eLS6 has some nice updates – integrated and more thorough HTML5 publishing from Captivate 6…though it’s still restrictive; many features that are supported in Flash output have yet to be supported in the HTML5 output…as is the case with many dual-format publishing tools like Rapid Intake’s mLearning Studio and Articulate’s Storyline products.

‘Round-tripping’ has been refined, for quicker editing options, like CP screenshots to Photoshop, or audio tracks to Audition. Captivate also has (perhaps with an eye on Storyline) a nice addition of character clip-art and improved template customizations. One of our favored bug-fixes is the checkmarks for completed sections in the Table of Contents area are now restored on resuming from the LMS! Adobe TV has a series describing the updates in more detail.

Overall, eLearning Suite 6 provides some solid updates, especially in Captivate and Presenter, and is a welcome upgrade to our toolbox. We’ve already been developing courseware in HTML5, and now we’ve yet another rapid development tool to assist with that process. Let us know how we can help you with your courseware requirements – from assistance with the more complex aspects of these tools to full custom development.

Categories :