Author Archives: jenny

Captivate 7 Fail? – No Monthly Subscription

As of mid-January you cannot get a month-by-month subscription for Adobe Captivate. All the details here.

While on the face of it this would appear to be a smart move for Adobe I think overall it will be a fail.

The monthly subscription used to be a fantastic option for the many users within organisations that only need the product intermittently. i.e. those who have a mad flurry of publishing content for a new release/initiative but then don’t need to touch any of the content for months when an update is requested. With the monthly subscription you could essentially lease the product for the development period, let it lapse and then pick up for another month whenever updates are due.

So are those people going to now take out a longer term subscription or purchase it? I think not. Instead they’ll download the trial version to make the changes, and then find someone with a subscription to publish it for them. And guess what, already happening. Fielded my first call this morning from an internal development team in precisely that position. All they need to do is make a couple of updates to their existing content. Subscribing for 12 months is not an option.

If I was Adobe I’d keep the month’s subscription, but bump it up a bit. Sure most teams would be happy to pay $50 or similar to get their project sorted. Plus we all know once a team gets Captivate available they find their own reasons to keep using it.

Captivate 7 Fail #3: No Mavericks for You

[Update: Adobe released an updated 20 November. Details and download links here.]

So not only do I have a product that I cannot install, or that doesn’t do what it says on the box re: TInCan, I now find out that it only works with old operating systems.

Just installed OSX Mavericks on my MBP. And while it appears to work fine (albeit a bit slower?), discovered today that the spirit of cooperation does not extend to Captivate 7. It completely fails to launch under Mavericks.

Quick visit to Adobe site and (surprise surprise) nothing officially announced. But dig into the forums and found this thread with this money quote from a member of the Captivate team.

23 October: We are working on it as I write and will have an update in next couple of weeks

As one of the posters pointed out, it’s not like Mavericks was a complete surprise. And DEV builds are available in advance precisely to test your apps with. Instead we get a vague “see you when you we see you” missive buried in a forum post. This on arguably the OS where most Adobe users will be hanging out, trying to earn a living.

Disappointed.

Determining native size of a SWF (and code to embed it in SharePoint)

Currently working on a Sharepoint reference site that collates a number of Captivate demonstrations. To make the site look presentable it’s necessary to preset the size of each Captivate demo. But how do you know what the native size is so you can determine the appropriate aspect ratio?

Here’s my way.

(1) Download SWFTools

This is a collection of useful little programs for creating and manipulating SWFs. For our purposes the one we want to use is SWFDUMP (read the doco here)

Download Link.

These executables are (on Windows) installed by default in a folder under C:Program Files. To be able to use open a CMD window and navigate to the new folder.

(2) Run SWFDUMP

Once downloaded run the following command to get the required default info.

SWFDUMP -e "path to your SWF"

Easiest way to do the above is type the first part of the command in a CMD window, and when you get to enter the SWF details just drag your SWF file into the window. It will automatically determine the full pathname and add it to your command.

What this generates is the standard HTML embed code, which includes the all important sizes. For example here’s the output when run on my Windows XP work machine.

<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 WIDTH="1153"
 HEIGHT="895"
 CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=10,0,0,0">
  <PARAM NAME="MOVIE" VALUE="pathtoCreateProposal.swf">
  <PARAM NAME="PLAY" VALUE="true">
  <PARAM NAME="LOOP" VALUE="true">
  <PARAM NAME="QUALITY" VALUE="high">
  <PARAM NAME="ALLOWSCRIPTACCESS" VALUE="always">
<EMBED SRC="pathtoCreateProposal.swf" WIDTH="1153" HEIGHT="895"
   PLAY="true" ALIGN="" LOOP="true" QUALITY="high"
   TYPE="application/x-shockwave-flash"
   ALLOWSCRIPTACCESS="always"
   PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
  </EMBED>
</OBJECT>

Note: You can cut to the chase and retrieve just the size info with the following commands.

SWFDUMP -X "path to your SWF"
SWFDUMP -Y "path to your SWF"

But that’s more typing.

A more useful suggestion if wanting to use this HTML code, save it to a text file to make it easier to cut&paste:

SWFDUMP -e "path to your SWF" > code.txt

(3) Adjust the native sizes to fit the required space

For me all the demonstrations need to be presented at a fixed 650px width. So I need to calculate the required height that keeps the same aspect ratio as the native SWF but at 650px wide.

Simple bit of maths to determine:

RequiredX = 650
RequiredY = CurrentY * (RequiredX/CurrentX)

So for the above example:

RequiredX = 650
RequiredY = 895 * (650/1153) = 505 (with a bit of rounding)

Sorted.

Captivate 7 Fail #2: Tincan – UPDATE

Further to my frustrations over the supposed TinCan functionality, I placed a question in the Adobe Forum.

You can read and follow the conversation here. But essentially the news is painful.

It appears TinCan CAN be made to work with Captivate IF you publish your content in an LMS. The content as developed relies on the LMS to determine the LRS endpoint and user details.

This is the most stupid implementation of TinCan support I can imagine. The entire point of TinCan is to allow flexible learning AND delivery. Content placed anywhere (not just in an LMS) can generate the appropriate message and report the learning event.

Having TinCan work only for content in an LMS is like having a mobile phone that only works while plugged into the wall. Brilliantly dumb. If the TinCan content has to be on the LMS then the entire point of TinCan has gone away. Might as well just use SCORM as per everything before.

Anyway, keep an eye on the forum post to see if anything changes. Until then, if crying into your drink, you’re not alone.

Captivate 7 Fail #2: Tincan implemented? Really?

Fresh from the joy of trying to get their subscription system working (read it all here folks), now to try and get busy with the most anticipated feature in my mind: TinCan support.

The Dream

I won’t detail what TinCan is (working on that as a separate article). Instead I’ll assume you’re reading on because you know what TinCan is and are/were also keen to use Captivate as part of the solution.

In essence the plan was to use Captivate to generate some training elements (for example, standalone system demos), publish to our intranet, and then have them report usage to our LRS.

The (Painful) Reality

It started so well. Within your project you update the quiz preferences and there’s now a TinCan option to select. Awesome.

TinCan-Option

So far so good. Next click that Configure button and see what that gives us.

TinCan-Configure

Err OK. Not quite what I was expecting. FYI TinCan works by generating statements about learning involving a subject (who did the learning), an action (how did they learn: read, studied, attended, etc) and an object (the item being learnt with). Doesn’t have any of that recorded but let’s keep going. Fingers crossed.

Publish the course and load on the intranet. Attempt to launch and oops:

TinCan-Launch Error

Makes sense. We’ve not bothered to define the LRS (where the statements get stored), nor any of the details needed for the statement.

If in doubt, goto the code

So let’s check what code is generated for us.

For starters TinCan.xml sounds promising. It’s not:

TinCan-TinCanXML

It just appears to repeat elements from the configuration window.

So also in there is another promising file tc-config.js. Now this does look a bit more useful:

TinCan-config

This at least contains some of the elements expected for TinCan. And it does at least mention the LRS. With an empty section that then matches what the error message is reporting.

But any idea how you’re meant to fill in that config file? Or define that LRS? No? Me neither. And that’s not to mention nothing in there about defining the learner/subject.

Why are all the Captivate 7 FAQs about Captivate 6?

Next step, check the website. (I know, getting desparate).

Go to the Captivate 7 page at Adobe (http://www.adobe.com/au/products/captivate.html), then click FAQ. Go on. Try It. I’ll wait.

Done that? Did you notice, like I did, that the FAQs are specifically about Captivate 6, saying so in big letters in the title? TinCan support was only introduced in version 7, so not looking forward to a lot of help there….

Note, if you think the main FAQ page being tied to the old version is bad, wait ’til you just try searching for Captivate 7 in Google. From its results Adobe are still fixated on Captivate 5.5!!

Starting to develop a pattern here in the quality of support…..

OK. Give up. Last resort. Read the manual.

Greetings to the Captivate Documentation Team (if you exist)

The manual, in a word, is useless.

It mentions Tin Can. So one point. But the rest of the explanation has no relationship to reality. For example it says all important information is wwritten to the manifest file imsmanifest.xml. But 3 secs of investigation (and dare I say it Adobe, testing?) shows you don’t get that file when publishing to Tin Can.

TinCan-Files

Conclusion

So essentially Adobe has made a song and dance about giving me a dropdown option that has no actual value or benefit. At this stage I can see no way to define the required TinCan elements and generate a statement that will be successfully sent to my LRS for safe keeping.

As I write this I can categorically say that Captivate 7 does NOT support TinCan. Because nobody bothered to write the documentation that explained how to do it. If it isn’t documented, it does not exist.

Couple this with the disaster that is the subscription system, and really Adobe is becoming that company really only used under extreme duress.

Conclusion 2

Have heard Articulate Storyline supports TinCan. Time to see if any better than Captivate does it.

Adobe subscription system is broke (but you knew that already)

Just spent an entire afternoon trying (and failing) to install Adobe Captivate after purchasing a 12 month subscription.

Problem was/is that the installer fails to find my subscription when sent away to ask for it. Just says no subscription found.

error

After one of the slowest support chat conversations ever, narrowed issue down (perhaps) to the subscription verification needing to access a specific server and port that are potentially not open by default in my company firewall. The brilliant suggestion? Just turn off your firewall.

Presumably Adobe have never worked for a company with more than 7 employees that actually manages and controls access to such important elements of the computer. I’ve more chance of recreating Captivate using MS Paint than getting that to happen.

Frustratingly Adobe was quiet happy with the current Firewall settings when it took my money, and when I log into My Adobe to check I was not hallucinating and they really did take my money.

I hate (Adobe’s implementation of) software as a service.

Customising Sharepoint 2007 lists with jQuery

This article explains how you can use jQuery with Sharepoint 2007 to customise how your lists appear on your site. With jQuery we will:

  • highlight specific columns or rows based on values
  • change the default “no records” message, and
  • change the default “add item” message.

Although it’s not envisaged you’ll need to do all three in every list you deliver!

Getting started

To get started first add the required list to your page.  Use the standard list webpart and customise as best you can within the webpart itself:

  • set which columns to present
  • set the order to display the columns
  • set the default appearance (or not) of the toolbar

We’ll use jQuery to interrogate that default view and customise as required.

Once the list is ready, next is to add jQuery to the page. Add a Content Editor webpart, use the Source Editor and add the required link:

<script src="/path/to/jquery-1.9.1.min.js"></script>

We always upload a local copy to our server (because a lot of our internal audience do not have internet access), but you could just link to jQuery on the interwebs.  This article provides the link and an explanation of when/why to use this approach.

Highlight specific columns or rows

This is easy to achieve using the jQuery Filter() function.  We’ll simply search for matching items and then add styling to highlight them.

First step is to update your view so that the value you want to highlight/select is included in the data displayed. jQuery can only work on it if it appears on the page. Ans since list data appears in a table, it will then be searchable within a <td> cell:

<script>
$("td").filter(function() { 
    return $(this).text() == 'Value to Match'; 
    })
    .css("color", "red");
</script>

Alternatively/preferably, when you match your required value apply a defined style (in a separate stylesheet) to it rather than manually making style changes:

<style>
  .highlighted {
       background-color: #ccc;
       color : red;
  }
</style>

...............

<script>
$("td").filter(function() { 
    return $(this).text() == 'Value to Match'; 
    })
    .addClass("highlighted");
</script>

But what if you want to highlight the entire row that matches the selected value, not just the value itself? With jQuery that’s simple, using the .closest() function:

<script>
$("td").filter(function() { 
    return $(this).text() == 'Value to Match'; 
    })
    .closest ("tr")
    .addClass("highlighted");
</script>

Since you’ll need to add a content editor webpart to include the required highlight script, consider adding visible text to that webpart that explains to the user what the highlighting represents.

The result:
highlight-beforeBefore (active and inactive records not differentiated)

highlight-afterAfter (inactive records highlighted with explanation below list)

Change the default Add Item message

Now let’s clean up the standard list option of “Add Item” that presents when you use the summary toolbar:

link-before 

The standard message is a bit vague.  To change it we’ll use the Filter() to search for the “Add Item” anchor text and change to something smarter:

<script>
$("a").filter (function() {
    return $(this).text() == 'Add new item';
    })
    .text("Add yourself to our database");
</script>

The result:

link-after

Change the default “No records” message

The issue with the standard “No records” message is not only is it not very friendly, it also expects you to have the full toolbar visible.

empty-list-before

Notice how the instructions talks of the ‘New’ button above, but that is only available if using the Full Toolbar. Something we rarely do since it adds a heap of confusing features for settings, etc.

To fix we can use the same approach as for the add item link: search for the standard text and replace with something more appropriate. To do so you can use the filter() function as above.

Problem here is the standard text is quite long (and will change if the list name changes). So a better solution would let us just match a key snippet of the standard text (eg “no items to show”) and let us then update the full text. The jQuery selector to match partial text is :contains() but this will surprise you in its result:

<script>
   $("td:contains('no items to show')")
      .css("background-color", "red");
</script>

Issue is :contains() will match not just the TD we’re after, but every TD that contains that TD. Since Sharepoint 2007 goes to town with tables, that’s a lot of TDs changing colour.

Getting around this issue is not simple (as this Stack Overflow question explains). However logically we know the TD we’re after is at the bottom of the tree (ie no child nodes other than text) so let’s use that to filter our matches. Again, Stack Overflow can help: http://stackoverflow.com/questions/743957/how-to-get-elements-which-have-no-children-but-may-have-text. Leading us to the following solution:

<script>
$("td:not(:has(*)):contains('no items to show')")
   .text("No items to show");
</script>

The result:

empty-list-after

Conclusion

This article shows some simple jQuery technicques to improve the appearance of lists in Sharepoint 2007. No promises are made that these are the most efficient methods, but they work. Show us the improved methods in the comments.

Centering an image in IOS

Just been struggling to update flagSter to support the new iPhone5 screen. Issue was horizontally centering the flag image when in landscape mode. This was because the screen width varies between iPhone and iPhone5 when in that orientation.

Quickest/easiest method was discovered, wherelse, in Stack Overflow. Thanks Damo.

CGPoint center = myImage.center;
center.x = self.view.center.x;
myImage.center = center;

Best part of this solution, other than its simplicity, is it is not that difficult to determine how you could possible sort out the vertical orientation too!