
| type | title | rating | resource | activity | |||
|---|---|---|---|---|---|---|---|
| Thread | Preview this month's meeting | 0 | 129 | Discussion Board | Oct 04 | ||
| Thread | AuthorWare and mpeg files | 3 | 175 | Discussion Board | Jul 17 | ||
| Thread | Adobe Training in Gulf Breeze, Florida |
| 1 | 167 | Discussion Board | Jun 22 | |
| Thread | Questions, questions ... | 4 | 661 | Discussion Board | Apr 22 | ||
| Thread | Captivate 4.0 Help Please | 6 | 226 | Discussion Board | Mar 25 |
I've added our user group to Meetup.com
http://www.meetup.com/Gulf-Coast-Adobe-User-Group/
Please spread the word to all your firends so that we can increase our membership.
Thanks in advance!!!
Steve
We have a new member of the group who is in Ocean Springs. She's asked me if anyone will be attending Novembers meeting who might be able to car pool with her.
If you are, or a friend of yours is, in or near Ocean Springs and could carpool, please comment here or contact me by email or Twitter @SteveHoward999 @GulfCoastAUG
Steve
I wonder if some people had difficulty finding us in the new meeting location at JD? Sorry for the confusion that the location change may have caused, but we should be meeting in this new location at JD campus each month from now on. If you planned to attend last night but didn't find us, please contact me so that we can make sure you know how to find us next time.
I showed some demos of the new Flash Catalyst public Beta 1. Those who attended were very impressed at how easy Catalyst makes it to set up and create complex, interactive interfaces with basic transitions etc.
I've been busy over the last few months and so I have not managed to put in all the time that I would have liked into learning catalyst, so I cheated and showed demos from Lynda.com and InsideRIA.com.
I've attached a brief PowerPoint file to this blog post and the PowerPoint includes links to the demos I used. Please take the time to download the PowerPoint and check out the links. These will help you get up to speed with Flash Catalyst and show you most of the features in the current build. If you have not already seen a Flash Catalyst demo you will be impressed at the power of the tool!
Resources:-
Amy has an FAQ for Flex 3, posted here: http://www.magnoliamultimedia.com/flex_examples/Amys_Flex_FAQ.pdf
Samsung Mobile Innovator web site http://innovator.samsungmobile.com/index.do
Sneak peek tutorial on Flash Catalyst (thermo) http://www.digitalbackcountry.com/flashcatalyst/tutorial01/screencast/index.html
great keynote by Adobe's CTO, Kevin Lynch, at Web2ExpoSF 09 http://blip.tv/file/1951449 - Flash Catalyst demo. Watch it. now.
Draft Flex Gumbo Chapters posted to Adobe open source site: http://blogs.adobe.com/pdehaan/2009/03/draft_flex_gumbo_chapters_post.html
Adobe TV - improved Developer Productivity in Gumbo (Flex 4) http://tv.adobe.com/#vi+f1472v1054
------------
Next month's meeting will be Wednesday May 6th, in Gulfport at Grace Healthcare, 6pm until 7:30. Exact address will be posted shortly.
------------
We had another great meeting tonight. Don't forget to post questions, requests, suggestions for a meeting topic, ideas for presentations etc etc - you can either reply to this post, or pos to a new thread in the discussion area of this User Group site.
We chatted about a lot. Now's your chance to learn a little more:-
To those of you who made it - thanks for attending. I hope you found the meeting useful. There was certainly plenty of chat, so I think we have the makings of a great group.
If you have any questions, comments, requests, demands, feedback, please post to the discussion group here, or if you want to contact me personally, you know how to get me on Twitter. You can also find my email address in my Profile link.
Next meeting will be in a month - that should be Wednesday 4th April. We are planning to find a location in the south of Harrison county, perhaps at JD, but definitely somewhere around Gulfport/Biloxi. I'll post an announcement here as soon as a location is confirmed.
Hey everyone,
I see we picked up a few more members recently. I'd be grateful if you coul dupdate your profile when you have a moment. I don't need your life story or anything, but at least enough to know who you are and where your interests lie - design, development, corporate, educational, games, applications, etc. Anything that helps the Group understand how it can best serve YOU.
Thanks :-)
Steve
Chiefly, this group is aimed at anyone who uses Adobe products for design or for development. So if you are an Acrobat Pro user, a Web designer, a Web developer, a graphic artist, a technical writer, a student, a manager, a technical wizard ... basically anybody who uses any Adobe product professionally to create and distribute content whether via the web, print, CD, DVD, video or anything else you care to think of.
The managers of this group have years of broad experience using many Adobe (and former Macromedia) products, but that does not mean they know all the answers. Your expertise is valuable too.
You should join the group and attend our meetings if you have information to share, if you want to learn about products that you have not used, if you want to glean tips and tricks fromother experts, and most especially if you want to network woth local experts.
For up-to-the minute news and tips, follow us on Twitter http://twitter.com/GulfCoastAUG
Source: Adobe Blogs by David Stromfeld
This weekend we unveiled some very exciting changes to our Acrobat.Com services which will enable you to more easily store and share files online, to create and collaborate around documents, tables and presentations, and to meet live over the web. The biggest change you'll see is in the new file organizer. where now all your Acrobat.Com content is centralized. But there are lots of additional fantastic improvements made to Buzzword, Tables, Presentations, ConnectNow, and more.
The Acrobat.Com Team has shared the details about these changes. And there has already been a lot of good press written about the new offering. However I wanted to specifically highlight how Acrobat users can take advantage of Acrobat.Com.
Right from within Acrobat or Reader, there's a "Collaborate" button which allows you to work with Acrobat.Com. You can share the PDF file you have open on Acrobat.Com. You can start authoring a Buzzword document. You can even share your screen with others via an Adobe ConnectNow web conference. All of these services are free - you only need to sign up for a free Adobe ID. (If you have Acrobat, you can also enable real-time chat and page synchronization within a PDF file via Send and Collaborate Live.)
However, as an Acrobat user, that's just the start of how Acrobat.Com can help you be more productive. Acrobat.Com can also act as a central location for your shared Acrobat workflows, like gathering comments on a PDF file or gathering responses to a PDF form. Here's how it works. In Acrobat, when you're ready to share your file for commenting or your form for responses, you choose "Send for Shared Review" or "Distribute Form".
At this point, you can choose Acrobat.Com as your sharing method and specify with whom you would like to share your file or form.
Your file will be uploaded to Acrobat.Com. Your participants will get an email with a link, and they'll be able to make comments or complete and return the form using only the free Adobe Reader. Their comments or form responses will be stored on Acrobat.Com. And as the initiator of the workflow, you'll be able to go to a single file to see all of the comments or all of the form responses.
Using Acrobat.Com for reviewing files and completing forms is a huge boost in productivity. For reviews, because the comments are all stored centrally on Acrobat.Com, you and all your reviewers can always see everyone's comments right on the document itself. No more trying to decipher comments made in e-mail threads or receiving multiple contradictory comments about the same section. For forms, because the responses are all stored centrally and managed electronically, Acrobat can then download all those responses to a single spreadsheet-like document on your computer. You don't need to clutter your in-box with form responses, nor do you ever need to manually gather form responses by retyping data or cutting and pasting data.
There is a lot more information about both of these workflows. To get you started, some more information about Shared Reviews is here and here, and some more information about Forms is here. If you have any feedback or comments about any of the ways that Acrobat and Acrobat.Com work better together, please let us know!
Dave Stromfeld, Acrobat Product Manager
Source: Adobe Blogs by Amit Jha
Dear RoboHelp Users,
This is the third post of the 'RoboHelp 8 List' blog series. In this blog we will focus on 'Paragraph Autonumbering' functionality.
1. What is Paragraph Autonumbering?
Many times we need to create captions with numbering for images or tables, or simply number the sections etc.; for example in this blog heading of all the sections are auto-numbered. Paragraph Autonumbering can prove to be very effective in such cases.
Paragraph Autonumbering allows user to define a paragraph style with numbering or bullets. When the user applies paragraph style to pre-selected text, RoboHelp adds pre-defined paragraph numbering to the text. Auto numbered paragraph content is similar to a multilevel list content. The scope of Numbering is at the topic level.
2. How to create Paragraph Autonumbering?
You can create an auto numbered paragraph style using button. 'List for Autonumbering' dialog will popup.
To make auto numbering (as shown above), do the following
• Select 'Numbering'
• Do the required prefix formatting
• Apply 'Prefix Style' (Optional)
• Press 'OK'
RoboHelp allows you to auto-number paragraph in multilevel scope too. To create paragraph Autonumbering in multilevel scope (as shown below), do the following
• Select the 'Inherit Numbering Property from Multilevel List' check-box
• Select 'List Class'
• Select 'List Level'
• Press 'OK'
3. How to apply Autonumbered Paragraph style?
To apply this 'Autonumbered paragraph' style,
• Select the content in your topic
• Click on 'Apply Style' combo, and select the Paragraph Style (e.g. "1. Heading 1" in the below image)
4. Why Paragraph Autonumbering?
• Different users may visualize their document structure differently. When you visualize the content as paragraph not as a list you should create paragraph Autonumbering.
• When you need to create a list repetitively, then using Autonumbered Paragraph takes single step to auto number it.
Hope you found this blog series on 'RoboHelp 8 List' functionality useful. Please continue to share your valuable feedback with us.
Thanks,
Amit Jha
RoboHelp Engineering Team
Source: Flex.org - Rich Internet Application Development by Flex Admin
Issue When you use Adobe Flex Builder 3 to create or maintain applications that use the Adobe Flex 2 SDK and the Adobe Flex 2 Charting components, a watermark appears on charts. Reason With Flex 2, y...
Source: Adobe Blogs by Nandini Gupta
RoboHelp Service Release 8.0.2 is available now. This is a 'must apply' service release. Make sure that you install the RoboHelp 8.0.1 update before installing the 8.0.2 update.
The 8.0.2 update addresses the following issues:
1. The CPD file grows in size and may result in slow performance.
2. The mouse cursor flickers in certain scenarios.
3. Deleting the CPD may result in scenarios where Project Manager reports broken links.
Both 8.0.1 and 8.0.2 updates are available for download here.
Source: Adobe Blogs by Karl Soule
After Effects is one of the most versatile apps for pushing pixels on the planet. But, what makes it a truly world-class application is how easy it is to expand its capability beyond what ships in the box.
Most people are familiar with AE plug-ins, but not as many people are aware what you can accomplish using Scripts. Scripts are written using Javascript, and can be highly useful for organizing projects, automating output, or even modifying and adjusting values within a comp. And, many many scripts for AE are available for low or even NO COST online.
Here are a couple of different links for some free or low-cost scripts:
Chris Green's Scripts: http://www.crgreen.com/aescripts/
Chris has written some nice free scripts for rendering multiple areas of a single comp, and creating lights and cameras that automatically point to a selected layer. They're free, but feel free to donate to Chris's efforts.
Jeff Almasol's Scripts: http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&extid=1698043 Jeff wrote a number of scripts that are available as a free download from the Adobe site, but not many people find them. :-)
AE Scripts http://aescripts.com/ AE Scripts has some really nice scripts available at low cost (many around US$10,) including some marked "Name your own price." Some examples include scripts that provide new ways of interpolating keyframes for specific effects, get better integration between Mocha AE and After Effects, and more. Again, super useful stuff.
Source: Adobe Blogs by John Nack
Thanks for all the feedback in response to the survey I posted earlier today. I feel I should clarify a few things.
Source: Flex.org - Rich Internet Application Development by Flex Admin
There are lots of cool applications based on Adobe Air platform e.g. Seesmic Desktop, Twhrl & TweetDeck for Twitter, Times Reader for reading NewYork
Source: Flex.org - Rich Internet Application Development by Flex Admin
Waver è un applicazione desktop sviluppata con Adobe Air che ci permetterà di non dover per forza utilizzare il browser per poter accedere a Google Wave.
Sembra davvero un bel tool ma ci sono alcuni difetti: l'interfaccia include esclusivamente le schede Waves e Contacts e naturalmente non potete navigare. Spesso le dimensioni della finestra..
Source: Flex.org - Rich Internet Application Development by Flex Admin
Providing an interesting demo of Flex as a Database front end using PHP/Zend AMF and PostgreSQL. A live demo and all the source code are provided along with an 11 page tutorial.
Source: Flex.org - Rich Internet Application Development by Flex Admin
Adobe AIR is a great platform to build efficient and cutting edge desktop applications, that work on any operating system. In the last few years, hundreds of very useful applications have been built on AIR for all sorts of purposes. Here we focus our attention on apps built for web and graphic designers.
Source: Ted On Flash by Ted Patrick
Today I start a new role at Adobe focused on keynote demos and our annual conference, Adobe MAX. As a developer, I love building software and as an evangelist, I especially love highlighting the great work the community creates. Flash, as a platform, stands apart in that every day new experiences are released that shape the future of software. Over the past 5 years, Flash has moved far beyond its animation roots and now powers applications, video, ads, and gaming making both the public and private web a better experience.Source: Steve Howard's eLearning ++ Blog by stevehoward999
INTRODUCTION
Following is a largely unedited version of conference notes that I have just distributed internally where I work. There’s a lot. As a blog post it’s probably pretty crap – too long, too much scrolling, but as a record of the event, and a method for me to retain my learning, it is just dandy, thank you. Hopefully you, my brave reader, can get similar value from my scribblings, but I make no apology for the size or the content of this blog post. It is what it is, and is for me and my fellow DevLearners first and foremost.
You will note there is no mention of all the extr-curricular learning, from the bar, the lunch table, the karaoke etc. *that* would take an entire book!!!
During the week of November 9th, 2009 I attended two conferences in San Jose. The first was the Adobe Learning Summit, hosted by Adobe. The second was DevLearn, run by the eLearning Guild. Usually when I attend conferences I make some scribbled notes on various pieces of paper, usually the notepad provided by the conference, and then promptly misplace them when I return home.
This year, I decided to actively take notes using Twitter. When I looked over the notes that I had taken, I realised a couple of things
• There’s a lot of great stuff here that helps me remember more from the presentations I attended than I might otherwise recall
• Being forced into 140-character messages, I had to constrain each ‘tweet’ to a complete thought whenever possible. Sometimes this was a bad thing – I would miss some good info because I was busy re-crafting a message. Other times it was great, as it concentrated my thoughts into being a lot more specific than I typically might be.
• Hundreds of other people were doing the same thing, at the same time. All of their notes are online and searchable. Someone is compiling a ‘tweet book’ of all the tweets posted about DevLearn that week.
I also realised that if I wanted to write ‘proper’ notes from the tweet-scribbling I took, I’d be working on them for days. So instead I decided to compile all of my notes into individual blog posts. I also made the choice to not rewrite the notes as proper sentences and paragraphs. People used to reading Twitter will be comfortable reading these notes, and even if you are not used to Twitter, you should have no difficulty following along. Ideally the slides from each presentation should accompany these notes, but there’s already enough here for now!
I also realised that if I didn’t attack this task all in one go, I probably would never finish it. As you can see from this post, there’s a lot of notes.
Lastly, it would still be a lot of work to compile this as separate blog posts, so in the interest of saving my typing fingers, not your eyeballs, I decided to put the notes out ‘as is’ .
If you have the time to read, or just skim through these notes you should find a lot of useful information – there’s also lots of web links to additional information. If you do manage to look through these, I welcome your comments. I want to know if this format is useful to you, or if you would prefer more traditional, legible notes published in proper paragraphs etc.
OTHER NEWS – TWITTER IN CAPTIVATE
I personally think this is stunning! Don’t underestimate the potential of this and any other tool that enables a backchannel to your training!
Adobe demoed a widget for Captivate that allows Twitter to be embedded inside Captivate lessons. Some benefits:-
• Twitter widget can associate comments with specific slides
• Can hook up to Yammer too – Yammer is an internal Twitter-like client that allows 2.0 interaction behind the company firewall – safe, secure conversations not visible to the public.
• Lets user report issues to moderator, or ask questions.
• Posts made about the lesson are always available – so users can see the history of the comments made, including questions/answers/resolutions/links to more information etc.
• Quick and easy to set up
• Light – only a small (less than 100k) addition to the overall Captivate movie size.
• No cost
SESSION 807 – USING SHAREPOINT TO ENHANCE ONLINE LEARNING EVENTS
This session described CITI’s experience in creating a learning solution that was orchestrated through SharePoint. Basically it was about how they customise standard SharePoint features and functionality to provide a more interactive ‘online school’ feel to their learning, including the use of discussion, calendar reminders and more. I didn’t find it particularly enlightening, but they did share a CD that contained all the code for their customisations. Perhaps that will be useful for me down the line.
• “not everybody at CITI has access to email. They don’t need it.” Say what now????
• Apparently some people find video hard to present in SharePoint. I use flash video all the time in SharePoint. easy Peasy. AVI etc also easy, but usually much bigger file size.
• We got all of the info we need to go back and create this in our own SharePoints! Thank you Citi for free resource CD!
SESSION 712 – USABILITY IN LEARNING, BRIAN DUSABLON
This session described the importance of usability in learning. Main outcomes/information:-
• remembertheuser.com – blog with useful usability tips
• Nielsen’s work on usability and web design is a useful start-point, but be prepared to disagree and justify your own choice – in reference to Homepage Usability book
• a good number of people for usability testing of new content – 5 to 10 representative users.
• when creating something new, take design out of the prototype process so you can concentrate on usability, not colours etc
• Online test your colors for usability “colorblind filter” http://colorfilter.wickline.org/
• Photoshop has tools built-in that you can use to test your designs for colour-blind viewers – see my previous blog post
• for pallets – learn to love Adobe Kuler http://kuler.adobe.com
• Many Lessons exhibit poor use of fonts and colours – don’t go crazy with fancy fonts, moving fonts. Use sparingly for effect
• @rebecka7: I keep hearing over & over again…get your course/training RIGHT ENOUGH for your deadline and then improve.
• http://bit.ly/aYr99 Articulate showcases. Beware, 1st one is great, but suffers from cognitive overload
• If it is slow and unpleasant, people are likely to go away and not use it.
• Usability – “Is it *EASY to use for the *purpose it was intended”
See also this fantastic presentation on usability from AdobeMax last month http://max.adobe.com/online/session.213 by Anthony Franco http://anthonyfranco.wordpress.com/
KEYNOTE: LEO LAPORTE
Leo presented generally on his thoughts about mass media and how ‘social’ media is a great benefit to us all. He talked a lot about how he got his start in radio and television etc. Following notes are just bullet-point snippets from his presentation.
• Looks like Leo has no slides – unusual. Refreshing. [later he explained that he finds the visuals a distraction. Guess, being a radio man at heart, he doesn’t enjoy the huge value that quality slides can bring.]
• He says mass media is a 20th century invention that is breaking down
• and that’s great because now we are replacing it with ‘new media’ with new technologies and attitudes
• prior to Mass Media, companies advertised through things like Sears Catalogue
• “the more people you can subvert with your” underhand marketing the more money you can make
• RT @GuildMeister: “If you want to know about water… Don’t ask the fish” Laporte [I think this was in reference to asking mass media about the state of mass media, I think]
• “brand is the refuge of the ignorant” every advertiser knows this. Smart people don’t care about brand, not swayed by advertising. So advertisers don’t typically target the ‘smart’ audience. Stress – typically
• … the only way to get people to buy stuff is to trick them
• which means advertisers were not keen to advertise to smart people on a niche tech tv show like This Week in Tech. Only smart people are watching – says Leo. Hence his show didn’t last too long – too expensive to run, not enough viewers, too few advertisers. Fix one or two of those three and it may have made it.
• so Leo started his own show online http://techguylabs.com/radio/pmwiki.php
• re: YouTube – there’s too much crap there. How can you watch it all? Well, you can’t. But there’s lots of great stuff to find
• but the thing is “80% of everything is crap” but that leaves plenty room for ‘good’, ‘great’, ‘excellent’, ‘interesting’ etc The next Spielberg might just be found on YouTube. Or Britney Spears or Colbert etc.
• Leo claims are our kids more cynical about adverts than we are/were? “4 out of 5 Doctors agree .. give me a break!” I don’t agree. I say *some* kids are more cynical, and surely *Leo’s* kids are…
• Re. social networking, social media: it’s got to be a conversation – passive consumption is no longer enough. (Maybe because the ‘2.0 we’ are cynical about mass media honesty)
• some people get scared by the internet because they see opinions they don’t like or understand …
• … but that’s a good thing because more eyes are being opened to new ideas.
• Corporate America wants to change the Internet to meet their needs, to fit in with their “we rule” model. This does not meet the needs of the consumers of Web
• Leo then spoke about the ACTA treaty http://en.wikipedia.org/wiki/Anti-Counterfeiting_Trade_Agreement and how it is gaining traction, in legal terms, due to the weight of Mass Media being thrown after it. e.g. if you are *accused* 3 times of piracy, you get internet service cut off, and your name circulated to prevent access elsewhere
• this is the ACTA treaty, adopted in a few places like maybe Korea, France. Not in the best interests of consumers! It is much more wide-reaching than just anti-piracy (so says Leo)
• go to SaveTheInternet.com for more info. Michael Geist blog too http://www.michaelgeist.ca/
• Question to Leo – what do you think of Rupert Murdoch’s plan to close all News International web sites to Google etc. Answer: Murdoch is a dinosaur – representing the old way. Big media corps can’t hack the openness of the internet and want to subvert
• Murdoch needs a new business model. Hard to do. Kodak did it … went to Digital. May never be so big as they were but changed anyway
•
• Twitter is a symptom of a larger trend: the Internet Nervous System. Millions of resources that we filter with the help of our friends
• Q to Leo “what are your thoughts on short attention span of the audience? ” No problem, because Leo’s shows are engaging so audience wants more
• Observation (heard phrased in many different was during DevLearn) reading ‘everything’ on Twitter is a waste of time. Just read what’s going on now – treat it like a river where you go down to drink or to bathe a few times a day or once or twice a week.
• Still in reference to attention span: ideal podcast length is the duration of your commute. and the good news is commutes are getting longer
SESSION 505 – CATCH THE WAVE – GOOGLE WAVE AND E-LEARNING APPLICATIONS, GOOGLE
This session was supposed to talk about Wave and eLearning, but the original presenter could not make the conference. Instead, the presenter was one of the developers of Wave, and he was more interested in telling us about Wave in general. Useful intro, but not much about eLearning applications. Notes below are unedited.
• if you want a WAVE invite, you just might possibly get one if you come to this session. Maybe
• if you don’t like the web interface for Wave, you can create your own.
• Q What is Gears? Browser Plug-in that helps browser store stuff offline. Built into Chrome
• everyone who is in the room at this very moment is going to get Wave invite
• wonder if its coincidental that a flush of people just came in …
• www.getwaveboard.com to get an iPhone app sometime soon … ? But you can use Wave on the iPhone anyway by going to wave.google.com … just kinda s l o w
• ultimately companies will be able to run their own wave server – behind firewall if they want
• current issue – notification system not officially designed yet – so no notifications, You must manually check for updates
• cannot currently remove a participant from a wave
• Advanced permissions (ACLs) not yet included so no tiered security features
• www.completewaveguide.com for full wave info
• private blip shows up in different colour, and is hidden from everyone … it’s a note to self. You can invite others…..
• … for back channel or private consult.
• private invitee cannot see the rest of the Wave, unless already invited. Will see only private part until invited to main
• Q “Will you be able to remove someone that you didn’t personally invite to the Wave?”
• answer: well removing someone opens a can of worms… do you delete participant? His contributions? His edits?
• … hence remove not enabled yet. Someone needs to figure a way to knit the worms into neat order.
• Q “am I able to decline a Wave invite?” A. “new feature today, you can click ‘unfollow’ button to unsub from unwanted wave”
• parallel feature is new explicitly “follow” button. Unfollow does not remove your contributions.
• Q “what’s the business model for final delivery?” maybe market place for gadgets and robots. No ads yet no plans to add them
• Q “how does Wave integrate with Android?” no special integration yet. Runs fine, but a little slow. No concrete plans
SESSION 0407 – EXPLORING THE NEXT GENERATION INTERACTIVE MEDIA AUTHORING ECOSYSTEM, MICHAEL ALLEN
Michael Allen, the man who created/invented Authorware, has started developing a new tool. This presentation was his opportunity to introduce the tool to the eLearning developer community, explain his reasons for creating it, and to get feedback on his direction. Following are my notes, with some small expansion.
• discussing a new authoring tool.
• Driver – “it doesn’t seem like it’s less expensive to do learning activities than it was when Authorware came out.”
• Driver – “for us and our clients, current tools are inadequate” – output of great stuff is still too expensive
• Driver – “e.g. Flash takes too long to learn, and Flash-based apps are inflexible”
• Driver – “majority of courses are glorified (or not) PowerPoint slides because of tool limitations (in part)
• Aside – Courselab free learning development tool http://bit.ly/heTOx
• “if your goal is page turners, current tools are adequate. Sometimes page turners are fine. Just can’t think of when”
• Buzzword – motivation meaningful memorable
• Allen spoke a lot about using sketch outlines to define your early design, so that features and functionality can be concentrated on, with final design being plugged in later. Separating design and functionality. Based on book by: Bill Buxton “Sketching User Experiences” the power of sketching your design
• if you try to make the design look too pretty (complete) too early in the process it stifles innovative design
• tool – codenamed Zebra
• Zebra metaphor is wiring/linking properties/actions like building a circuit. Looks like it could quickly get messy -
• all file properties save as xml. So you could tweak xml too if that floats your boat
• @visualrinse I really like this. But I want to see the newer version to see how pasteboard works etc. Scalability hasn’t been covered …
• messy authored app diagram view can be cleaned up/organised by grouping, like using Authorware maps
• we can sign up to get access to early builds at Allen’s booth in the expo.
• to be added – coverflow-like paging interface during authoring
• you can add multiple flags to ‘run from flag’
• you can create your own template/widget library to drop in … millions of icons?
SESSION 202 – RESEARCH PANEL DISCUSSION: EMERGING TECHNOLOGIES AND THE FUTURE OF ELEARNING
Title should be self-explanatory. Representatives from Brandon Hall and other respected research institutes discussed how they see eLearning being affected by emerging technologies. This was an interesting, but dry discussion. A few gems emerged, as can be seen below.
• primary barrier to web 2.0 adoption in enterprise is inability to link back to business objectives. Contrast standard perception that resistance is about security/control!
• to successfully implement internal wikis: start small, have solid goals. Document goals as business case for executive level
• the attendees are not seeing a drop-off of ‘traditional’ elearning attendance as social learning grows = social is additive to current list of learning tools
• huge growth in the use of 2.0 technologies in recruiting and on-boarding.
• panel sees succession management – knowledge transfer – as huge growth area for social learning
• Wagner – anyone who thinks they can be successful at 2.0 in corporate without a business case is wrong.
• Wagner: think of our digital learning efforts as products (as opposed to tools, I guess?)
• “are you training your users in the use of 2.0 tools?” yes to this is key indicator of best in class 2.0 util/implementation
• good alumni networking is huge indicator on successful 2.0 learning success [extends and maintains traditional networking, like Facebook for grownups]
• Wagner “how do you like to learn?” questions are a red herring – preference and performance not correlated
• Q “what’s the bottom-line most effective way to utilise 2.0 techs for learning?” panel says “it depends”
• McDonalds has great free webinar and research showing how successful informal learning can be
• bestbuy 401k video on YouTube: great example of informal, user-created learning http://www.youtube.com/watch?v=VqpKgTmkHIk .
• Q “if you were a venture capitalist, what emerging tech would you invest in?”
• A Wagner “rich internet applications with annotation attached”
• A “anything that allows annotations to be attached” – user-tagged/enhanced training
• A the application of perfectly-working semantic search”
• A “augmented reality”
• A “competency-driven learning” “workforce planning”
• closing thought – call it talent management instead of eLearning – it’s easier to sell.
SESSION 104 – EVIDENCE-BASED TRAINING, RUTH CLARKE
I’ve blogged about Ruth’s research and presentations before. The reader is probably also familiar with her work. Ruth’s presentation was very fast-paced, and packed full of facts and figures. I wasn’t able to capture all of the numbers or even a fraction of the great content, but, frankly, that is available in many places already. The notes below are what I did get, and typically represent what I felt might be useful for us to apply in our learning.
• Know what to do and why. Participate in communities of practice – in other words, don’t work in isolation, learn from your peers, especially outside of your organisation.
• “content covered is not guaranteed to be content learned” – just because it’s in the manual, or in the training, that is no guarantee that your learners know the stuff.
• how much did we spend on eLearning last year? about $134 Billion. Huge, important industry, but somehow not glamorous. Don’t underestimate the power of the industry, or the amount of growth ahead of it. Expect slow steady growth, not the explosion that has been predicted for over a decade.
• what is the reality about learning styles? Ruth says there is no significant correlation between self-reporting of style vs. learning performance by style
• college students are typical white mice of learning style studies – research professors get easy access to them
• … which is interesting, How does that research compare to how older learners perform? Can we even find out?
• learning can be better when we have words and visuals compared to words alone.
• but for whom are the visuals more important? Typically for those who don’t already have firm understanding of subject matter
• Are all visuals equal? No – visuals that are irrelevant to the subject are not helpful, and can be harmful to learning.
• beware of adding too much anecdotal or supportive info, as it can disrupt learning goals. Stick to the point.
• or, in Ruth’s words “learning is better when extraneous details are omitted”
• is there a correlation between liking (high ratings) and learning? Yes, but it’s minimal. Too small to rely on student ratings… to evaluate the quality and effectiveness of the training.
• Text plus narration that reads the text is the least effective method for achieving learning
• Combinations of text/audio/images all better. Audio plus supportive text (i.e. associated bullets, but not parroted words) is most successful
• Text plus matching audio – redundancy principle. Also a form of cognitive overload. Audio plus supportive text = better
• more on learning styles. We are *all* visual learners, and we can all benefit from accompanying audio
• There are exceptions – novice users, for instance, respond better to text+audio that match
• when using visuals, place the image as close to the supportive text as possible – contiguity principle. Think newspaper image with description underneath, vs. textbook, where picture is on one page, but the explanatory text is only seen when you turn the page. Disassociation of content deflects learning.
• are animations better? Depends: simple diagram often be more effective – animation may be too much info, moving pic hard to study line drawings vs. 3D drawings …
• … especially true if you have a series of stills vs. animation
• what is more effective learning? Less is more. Sketch graphics very effective.
• or animations if you have to learn a procedure – like origami or knot tying? animations are better when complex motion involved
• This is because we have a [postulated] ‘mirror neuron”; we are adapted to learn by copying, so if we have animated instruction our natural learning stimulated
• … and this overrides possible cognitive overload. May not even have to see hands manipulating, just animation process
• How to learn/apply guidelines, which is better? Text, video, animation . Animation and video best.
• stills vs. animation: Stills for how things work, animation for motor skills (mirror), Dynamic visuals for social skills (video animation)
• Closing thought – don’t waste time on learning styles. Meaning, concentrate on quality learning methods instead.
THOUGHTS ON OPENING KEYNOTE FROM ANDREW MCAFFEE
Andrew MacAfee talked around the content of his book, Enterprise 2.0. The book discusses how corporates can harness all that social stuff that is out there and turn it into a powerful corporate resource. When many companies are resisting the (apparent) anarchy of the Web, it is interesting to see this take on how it can be best utilised to the benefit of corporates.
The following notes are sparse – Andrew had a lot of great things to say, and I failed to capture most of them as I only had my phone with me during his session. Actually some of the comments came from other people – part of the open conversation that went on live during the presentation.
I bought the book, so maybe I’ll have a useful summary at a later date.
MacAfee started out talking about how Twitter and other 2.0 apps have sparked a new altruism at work and at play. This sparked off a brief side conversation between me, “KoreenOlbrish” and “carmean” on Twitter.
carmean
Web/Ent 2: Creates phenomenon of altruism. People want to help each other. In real time. ([corporates should] Stop obsessing about risks. Altruism trumps)
me
Yeah but web-based altruism has been around for decades with bulletin boards etc. Now it’s ‘mainstream’
carmean
Lots of altruism has been around, I think @amcafee claims new tools make it …not just easy…but integral. No?
me
2.0 reduces the cost of altruism to near zero 10 seconds to read and respond, instead of longer newsgroup/email process
KoreenOlbrish
For a guy who talks so much about web 2.0, most of what McAfee is talking about is people. Love it!
me
Isn’t 2.0 *all about* people??
• According to MacAfee we are an uber-geeky crowd because we’ve heard of Nupedia (wikipedia predecessor)
• Nupedia devolved into Wikipedia, removed all barriers to posting (Nupedia had 7 layers of bureaucracy, which choked it http://en.wikipedia.org/wiki/Nupedia) and then it took off
• http://www.innocentive.com great place for outsourcing crowdsourcing http://en.wikipedia.org/wiki/Crowdsourcing
• RT @mrch0mp3rs: People are motivated by a weird mix of different things. Stop questioning it – use it. [Me: yeah they are smarter than I]
• MacAfee explains how groups of people can solve problems better and faster that individuals or small teams. Web-based ‘groups’ can be massive crowds. Don’t be fooled into thinking that ‘groupthink’ is always perfect, though. Just be aware that it can be very very good, like Wikipedia.
• RT @davemerwin: #dl09 a lot of what MacAfee is saying is in a book called Wisdom Of Crowds. http://en.wikipedia.org/wiki/Wisdom_of_Crowds
• Prediction Markets more accurate than smart guy with heaps-O-statistics and Big Computer http://bit.ly/Yi42D
• RT @roninchef: @mrch0mp3rs Reputation Currency it’s called Whuffie – http://bit.ly/15GtEF #dl09
• Personal observation: this is the most active back channel I’ve seen at any function. Geek crowds rock! [there was a lot more twitter chat than shown here!]
• Great question from Tridib Chowdhry: Isn’t it useful in enterprises to open up to alternative viewpoints and allow them to bubble up?
• @TerrenceWing I’d say “potential wisdom and strength of the crowd”
Source: Amy's Flex Diary by Amy B
This week on InsideRIA, I blogged about Flex Template components. My mandate for that blog is to talk more about ideas than showing code, but I had a feeling that someone would ask to see code on this one, so I put together an example of code that is similar to the component I show a screen shot of in that post for the curious.The example linked to below has View Source enabled:Flex TemplateSource: Flex and Flash Developer - Jesse Warden dot Kizz-ohm by admin
Preface
There are a lot of good articles already written & screen casts about memory management in Flash Player. I encourage you to read them first before reading the below. I cover memory management in a large application using a PureMVC architecture, typically on top of Flex.
Introduction
Memory Management, referring to making sure your application doesn’t leak memory through the use of responsible coding practices, is hard. It’s even harder if you don’t have a history of having to deal with such things (*cough* Flash Developers *cough*). It was challenging for me to learn… and I’m still learning. As the Flex community has grown, we’ve seen the influx of more traditional programmers to help write blog entries and white papers, especially for AIR apps, on better memory management, how to prevent memory leaks, and how memory in the Flash Player works (and doesn’t work).
What I haven’t seen is this applied to Enterprise programming and frameworks. Most articles are either from a Flash game developer, or a Flex dev referring to AIR applications. From my consulting, the people who need the biggest help are doing the web applications that need to run as long as a normal desktop application. Below, I’ve documented how you do this using PureMVC.
Why Memory Management?
Many Flex & Flash projects don’t need to use good memory techniques. Memory leaks on a small scale are ok. If the application is responsive to the user, you have no problem. The purists will argue that creating a bunch of things and not removing them from RAM is bad. However, if your application works, is responsive to the user, and doesn’t adversely affect other applications, then the purist is wrong.
For things like games that use a lot of system resources, or applications that need to run on your computer longer than 10 minutes, memory leaks will eventually use all available memory that a SWF is allowed, and cause it to stop working, or the browser to crash. The application will be slow to respond, Garbage Collection may freeze Flash Player while it attempts to clean up, and/or your memory will become fragmented over time. Fragmented memory makes things slower to access it, and thus can slow down your application.
Another side effect of not cleaning up the memory you’ve used yet no longer need is weird bugs. You’ll sometimes have objects around that are doing things, yet you have no strong-references to. Examples include timers still running, service classes that were “removed” yet receive a response from the server and no one is still listening for the response, or duplicate PureMVC classes. Weird bugs can arise from these situations, causing your debugging time for problems to take longer.
Bottom line: If you want your application to run for hours at a time, not to adversely affect other applications, and remain responsive, you need to employ good memory management.
Smaller projects that have memory leaks can often be re-factored. Enterprise ones, however, will often take months to fix. Worse, those months will have a major lack of visible project progress as things are broken on purpose to get things back into shape. This is sometimes a contributor to the reason larger projects have the infamous “last 10% is 90% of the work”. If you don’t start early with easy to follow conventions, it’ll be really hard to add them in later in; “add” is too nice a word since those projects don’t just stop to wait for you to clean up some memory; the logistics are a lot more complex than that.
This is even worse in Agile. Where 80% of your time is re-factoring and you’re constantly creating new code, it’s quite challenging to keep up. The best you can do is have a good understanding of the life cycle of your app. The better understanding you have, the better you’ll be able to know what you don’t have to clean up, and what you do; i.e. when you have to write code and when you don’t. Remember, designers / UX people can help here. They’ll be able to give you a better understand of user paths into your app, and you can focus on what truly matters and knowingly let the rest remain in memory.
Example: If the user is constantly creating 3 types of forms, you can focus your efforts on ensuring they are cleaned up. If the user hardly ever goes to a FAQ page, you can spend little to no time ensuring it’s cleaned up. The reverse can be true as well. If the 3 forms are accessed often, you can ensure that only the data they create is unique, but the forms themselves remain in RAM. You can instead focus your efforts on those items that are rarely accessed. If you user does go to the FAQ page, they shouldn’t be punished when they leave; it should remove from memory.
Why NOT memory management?
Memory management, sadly, requires you to often write more code. More code is a negative contributor to projects. For Enterprise code bases, they are often quite large. Even when all features are completed, you are often adding more code for modifying features, or fixing bugs. The last thing you want to do is knowingly add more code if you can help it.
A common practice for classes is to add destructor methods. These are basically methods that are called “public function destroy():void” and clean up the class. It’ll remove strong event listeners, remove child display objects, and stop asynchronous classes such as Timers, Sockets, and service classes. Another common practice is to create “addListeners” and “removeListeners” functions that will do just that; add event listeners to an object/objects, and remove them.
Often, though, both classes fall into the trap of those methods never staying in sync with the rest of the class. If you create a new object, you forget to clean it up in destroy. That, or you add a new event listener amongst the other 4, but forget to add it to the removeListeners function. Worse, and most often the case, these methods aren’t ever called.
The developer meant well, but ended up creating more code, code that isn’t used, and code that isn’t even finished with no obvious indications thereof. The road to hell is paved with good intentions.
When View’s Go Away
When creating applications, whether Flash or Flex, you’ll have View’s that are shown and hidden. You’ll have to make the decision how they are hidden. If you need the View quickly, you’ll set visible to false and true. If you don’t need to View quickly, you’ll simply addChild/removeChild. If you only need the View rarely, you can destroy it entirely and rebuild it when you need it.
When you know you need to destroy a View, then you can write code to remove it from memory. This is the only YAGNI approach I’ve found that works. Meaning, as soon as you recognize you’ll need to remove a View, only then do you write code to clean up the mess. If you do it prematurely, you just wrote a bunch of code you may never need, and now have to maintain. Adding it later actually isn’t so bad, but that assumed you designed for it. Meaning, if you don’t make it easy to remove a View, it’ll be hard because you first have to re-factor the code that uses it.
From a GUI perspective, this is sometimes ok. Take the case of a View used in a Flex ViewStack. All a ViewStack does when you leave a View is remove the View from the DisplayList. If she’s a big View, that’s nice… but not enough. You’ll need to refactor this code to support the child in the ViewStack from being destroyed. You can either wrap the View you want destroyed in say, a Canvas that has code to destroy/create the single child View based on Event.ADDED/Event.REMOVED. That, or you could make the child a ModuleLoader, and based on Event.ADDED/Event.REMOVED, load/unload the module. Or, you could just write a function that creates/destroys views based on where it’s supposed to go. You lose the flexibility & ease of using a ViewStack, but you get more control with more efficient code.
Registering & Unregistering View’s in PureMVC
…but this assumes you can, in fact, get the View out of memory. In the case of frameworks, larger Views will often use the Presentation pattern, a Mediator, or something like it. Sometimes it’s directly in the View itself. How ever it’s done, the “Master View” will integrate with a framework. In PureMVC, this is usually via registering itself with PureMVC. There are varying ways to do this. The way I do it is via ApplicationFacade.getInstance().registerMyView(this), where “this” is the instance reference passed in. The ApplicationFacade will take the instance, create & register a Mediator passing the instance into the constructor of the Mediator.
public function registerMyView(view:MyView):void { facade.registerMediator(new MyViewMediator(view)); }
Others will dispatch an event, and have a Command class handle those details to prevent their ApplicationFacade from growing large. Either way, time and time again, I see View’s that should be removed, but have no “unregister” function, nor a Command to remove the Mediator. Basically, there is a lot of code to register the View the the framework and create associated Application domain classes, but nothing to clean up everything when you’re done with it.
The way I do it is via ApplicationFacade.getInstance().unregisterMyView(this). This is the opposite of the last method; it’ll unregister the Mediator. The Mediator’s onRemove function will fire, which gives the Mediator an opportunity to clean itself up.
public function unregisterMyView():void { facade.removeMediator(MyViewMediator.NAME); }
Weak vs. Strong Listeners
Let me take this opportunity to protest against using weak listeners. They are for pussies. Seriously, the only time they are valid is when you are creating code modules that other developers could use, and there is no conventional destruction point. Since you have no control over when your code will have the opportunity to clean itself up, nor do you know if the developer using your code is smart enough to call your destroy method, you try to code as defensively as possible. If you must snag a reference to a global object such as “stage” for example, which’ll surely lock your code into memory, you at least make it a weak listener AS WELL AS listening for Event.REMOVED_FROM_STAGE.
It’s been suggested to always use weak listeners when using Timers for example. Since these are some the major culprits of memory leaks in applications, if you use a weak listener, you’re set right? Same with Dictionaries with weak keys, right? *face palm* Sure man… with that attitude, I’m sure you’re code REALLY makes an effort to help clean itself up. Besides, Flash Player 9 has some issues garbage collecting weak listeners, so you can’t even depend on it working as advertised. They’ve fixed a lot of this in 10, but you need to make an effort to de-allocate as much memory as you can. Just because a large object has no references to itself doesn’t mean the Garbage Collector will immediately free up everything. While it is a black box, you do have ways of helping it out. In my experience, it’s more likely to free up smaller objects more often than large objects since running Garbage Collection itself is a processor intensive operation.
If your code is explicit, it’s clear where you’re freeing memory. If you’re not, it’s challenging to figure out where leaks occur, nor is it easy to write proactive code to free up memory. Granted, deadlines may dictate otherwise, and I concede the point on those instances. Regardless, a lot of people who use weak references for listeners forget that unless they keep a reference to the object itself, it’ll randomly get garbage collected, which leads to strange bugs for asynchronous classes that are hard to reproduce reliably. If you don’t know what you’re doing or have doubt, just use a strong reference and provide a clear way of removing it later.
Any help you can provide… would be… well… helpful!
Make no mistake: Helping the Flash Player garbage collect your objects has major, positive impacts. Even a half-assed approach is better than none.
Let’s take an Array or ArrayCollection full of Strings for example. He’s within a View, and you removeChild the View, and null the reference in his parent. The GC will eat it eventually right? Wrong… you accidentally have a stage listener buried deep within the bowels of a base class of a Button you’ve written. If that’s all you’ve done, simply removing the child from the DisplayList and nulling the reference, you’ve at least giving back memory the View was using to display itself to the screen. Glass half full baby!
Taking it a step farther, what if you’re View implemented a destroy method, and cleaned up its internals to help the GC out, and free up some memory of things it’s no longer using? Remember, the View itself is still locked in RAM because you don’t yet know about the rogue stage listener. BUT, you at least remove all Strings in the ArrayCollection and null its reference in your destroy method. Running the Flex profiler, you’ll see some [reap] and [sweep] using more CPU time + memory go down slightly + less String instances. Yum yum… while your View couldn’t get it’s fat arse outta RAM, you at least managed to free up all of those Strings it had a reference too. They no longer have any references to them, and therefore they are cleaned up, and the memory THEY use is freed up. Rad! GLASS HALF FULL BABY! Even with a memory leak, we’re lessening the damage by freeing as much memory as we can.
I know this doesn’t fix the problem, but if you’re under a deadline you gotta do what you can to survive. The only reason I don’t think weak listeners are justified in the deadline scenario is because it’s like you’re not even trying to do the above: thinking about what View’s & classes need to be removed, writing destructor methods, and validating they worked. Sometimes you just don’t have time to do those things, though…
What do you do in a Mediator::onRemove method?
Assuming you’re PureMVC is setup correctly, then the onRemove function of your Mediator’s will fire when it’s removed from the PureMVC ApplicationFacade. Here, you can remove strong event listeners you’ve made on the View, remove the Mediator’s view reference by setting it to null, and clearing any other data. This is where things get hard.
Removing the View’s listeners and it’s reference is easy; there is a 1 to 1 relationship with with Mediator’s and a View. But what about Commands and Proxies? If the Mediator registered one or more Commands, it’s pretty clear he should unregister them. Often I’ve seen Commands that are relevant to a particular View being registered in the ApplicationFacade by overriding the initializeController method. For smaller applications this is ok. For larger ones, it’s still ok in that they don’t necessarily take a lot of RAM. The problem is this doesn’t scale. Your Facade will get really really large. Some people compensate for this by creating multiple Facades for the relevant Application Domain (called Contexts in early RobotLegs builds). While this spreads the damage, it removes relevance from the code; it isn’t immediately obvious what problem domain these Commands are associated with. When the Mediator registers them, it’s usually pretty obvious. That, and it makes it easier to remove them with confidence without worrying about breaking things.
…Proxies, however, are another story. Proxies are the #1 cause of race conditions in PureMVC. Regardless of how they are written (holders of data as your Model or Services or both), they are often encapsulated enough that they could be relevant to many different Views, and thus many different Mediators. This causes a problem in knowing when they should die… if ever. The benefits of using a stateful client like Flash Player RIA’s, as opposed to a paged based, non-AJAX HTML application, is that you get the benefits of keeping data in RAM. This in-RAM data allows the application to be quick and responsive. As long as your data is ActionScript objects (excluding XML, Strings, Bitmaps, and large ByteArrays) your memory usage is often very low.
Therefore, there isn’t a lot of harm leaving Proxies around. The one side effect is when your profiling your application via System.totalMemory, you’ll notice it doesn’t go down as much when you’re View is destroyed. Using the Flex profiler, when taking memory snapshots, you’ll notice you’ll have a lot of potential loitering objects (things that are still around in memory even after your View is destroyed and Garbage Collection has run). If you’re trying to track down a leak, some of those loitering objects, your Proxy and his data, are valid… you want them to loiter in the first place so you can immediately access them again later. Additionally, you’ll need to write more defensive & proactive code in your PureMVC code that accesses the Proxy. For example, instead of registering the Proxy every time, you need to ensure it’s not already registered.
private function getSearchProxy():SearchProxy { var searchProxy:SearchProxy; if(facade.hasProxy(SearchProxy.NAME)) { searchProxy = facade.retrieveProxy(SearchProxy.NAME) as SearchProxy; } else { searchProxy = new SearchProxy(); facade.registerProxy(searchProxy); } return searchProxy; }
Another tactic if the amount of data a Proxy has uses a lot of memory, or you just need every byte you can, is to cache on the local machine. If you’re running in a web browser, you can use a local SharedObject and save your serialized data. If you’re using AIR, you can read from the local disk via File, or use the local SQL database support. When the Proxy is re-created, he can check the local cache first, validate the data is good, and use it instead of fetching it again from the back-end.
Bottom line, if you DO remove a Proxy, that’s your cue to go implement his onRemove method as well. Here’s an example of a Mediator cleaning up its View reference & listeners as well as proxies.
protected override function onRemove():void { if(community) { community.removeEventListener(LoginEvent.LOGIN, onLogin); community.removeEventListener(LoginEvent.LOGOUT, onLogout); community.removeEventListener(LoginEvent.CHANGE_PASSWORD, onChangePassword); community.removeEventListener(SearchEvent.SEARCH, onSearch); community.removeEventListener(PowerEvent.OPEN_POWER, onOpenPower); community.removeEventListener(PowerEvent.DELETE_SEARCH_POWER, onDeletePower); community = null; } facade.removeProxy(AuthenticationProxy.NAME); facade.removeProxy(SearchProxy.NAME); facade.removeProxy(GetPowerProxy.NAME); sendNotification(ApplicationFacade.COMMUNITY_SHUTDOWN); }
And here’s an example of a SearchProxy nulling out internal data, an ArrayCollection and a String, as well as cleaning up an internal web service.
protected override function onRemove():void { powers = null; _searchText = null; if(searchPowersByNameService) { searchPowersByNameService.removeEventListener(CommunityServiceEvent.SEARCH_POWERS_BY_NAME_ERROR, onSearchPowersByNameError); searchPowersByNameService.removeEventListener(CommunityServiceEvent.SEARCH_POWERS_BY_NAME_SUCCESS, onSearchPowersByNameSuccess); searchPowersByNameService = null; } }
Remember, once you start implementing clean up methods, you’ll need to keep them in sync with any changes in the class. Tread with confidence.
Conclusions
Managing memory in Flash & Flex applications is hard. Validating your hard work actually is paying off is time consuming. Most programmers who are used to managing memory keep it in the forefront of their minds while their coding, so they often don’t perceive it as an issue/challenge. A lot of times the frameworks we use handle a lot of the mundane details of these operations for us (like Tweening engines).
If you’re application does need to run for any long length of time and you’re using PureMVC, having a good, up front understanding of what Views need to stick around and which ones don’t will help you better plan for which Views, Mediators, and Proxies you’ll need to write code for to free up memory. If you do your best to make each View follow it’s own Application Domain problem it’s solving for, then it’s easier to have that entire silo follow the standard removal scenarios, and thus code to it.
For example, if you are creating a FAQ View, and it has a FAQ Mediator with a FAQ Proxy, then it’s pretty simple to clean up thing when you’re done: implement a destroy method in your View, then implement onRemove methods in your Mediator and Proxy. When in doubt about the Proxies, just keep ‘em around since they usually aren’t the biggest memory offenders… but be sure to validate this using the Flex Profiler and/or System.totalMemory as even rogue XML can take 200 megs or more. It’s easier to make View’s more efficient than it is to solve for race conditions in PureMVC.
A good tool to help visualize your memory usage in real-time is Mr. Doob’s “Stats”. Just be sure your system is only running 1 SWF at a time as System.totalMemory, what Stats uses, applies to all SWFs running on your box. I usually wrap him with a UIComponent, add a right click menu to my app to open him via ContextMenu, and launch him via PopUpManager. Another tool you can use is Flex PMD. It’ll help identify which code isn’t used… and perhaps should, like destroy methods that aren’t ever called. Finally, if you’re desperate on Flash Player 9, you can also force Garbage Collection via the LocalConnection hack. This saved us on a project where we were loading SWF’s.
Remember, if you destroy & recreate a View and his PureMVC equivalent classes a lot, you may fragment the memory over time, so don’t get overzealous. Use your best judgement, and don’t be afraid to get the designers help on which sections of the app need to be the most responsive, and which ones it’s ok to lazy load.
Source: The Official Flex Team Blog by Matt Chotin
Join the Adobe Acrobat User Community on Wed. November 18, 2009 for a free eSeminar on how to create highly branded, custom PDF Portfolio layouts using Acrobat 9's ActionScript API and Flex. PDF Portfolios let you combine Flex/ActionScript with PDF to redefine what a document can be. If you are a Flex developer and are interested in leveraging your skills in a new and exciting way, this eSeminar is for you.
Wednesday, November 18, 2009
10-11am US Pacific (1-2pm US Eastern)
Free Registration: http://www.acrobatusers.com/events/1475/pdf-portfolios-developers
What you will learn:
What you need to get started with the Acrobat ActionScript API
How to bootstrap a basic Navigator in Flex Builder 3
How to bundle your Navigator's SWF file into a .NAV file for use in Acrobat using ANT
How to avoid the most common trouble spots
How to turn on the debugging options in Acrobat
Who should attend?
Flex developers interested in expanding their skills and market reach.
If you are an Acrobat developer or power user and have never worked with ActionScript or Flex, you might want to skip this one.
Skills required:
ActionScript 3
Flex Builder 3
ANT (recommended)
Source: Edublogs - teacher and student blogs by James
We’ve got some big plans for Edublogs.org for 2010 to make your experience better and improve our service and functionality.
So we’ve put together this really, really quick survey to help us find out how we can best help you.
And, to sweeten the deal, we’re giving away several Amazon Kindles to survey participants!
So please, take 60 seconds to complete the quick and easy survey, it’s designed to help us identify how we can best help you.
And as the usual response rate to surveys is about 5% there’s a great chance you could be a winner!
Here’s the link to the survey again (it’s also a great example of what you can achieve with Google Docs :)
Many thanks for opening this email and taking part in the survey – we can’t wait to implement your feedback to provide you with a much improved experience.
P.S. A whole heap of schools, districts and Universities are taking advantage of our 30 Day free trial of Edublogs Campus, get in touch with us any time to start yours!
Source: Amy's Flex Diary by Amy B
I'm really excited to be signed up for the RIAAdventure Cruise. Not only do I get to meet or renew acquaintance with such familiar names as Doug McCune, Ted Patrick, or Ryan Steward, but I get to do it on a cruise ship making its way from port to port in Mexico!This is going to be so much fun!Source: Ted On Flash by Ted Patrick
Yesterday I completed 4 new pages with 10 Flex 4 samples in Learn Flex 4 from Scratch. Now is really the time to start learning Flex 4 given the stability of Flex 4 Beta 2 and the volume of great session content available post Adobe MAX.Source: The Adobe Captivate Blog by Shameer Ayyappan
If you are planning to attend DevLearn next month, there is a great opportunity to brush up your knowledge of Captivate 4. Joe Ganci, our advisory board member is conducting a certificate program on ‘creating outstanding eLearning with Adobe Captivate’. The session is scheduled for Tuesday, Nov 10th. This year, the Captivate QE managers will be assisting Joe during this course. This session is packed with exercises and you will learn:
In this session, you will learn:
In addition to this certificate program, there are two other concurrent sessions which provide you an opportunity to learn Captivate and eLearning suite. Kevin Siegel, the author of the popular Captivate 4 book, will be conducting a class on ‘Convergence of eLearning and online training- effective tools’ and if you are interested in the complete eLearning Suite, you will want to check out Steve Howard’s session on ‘Adobe eLearning Suite- a whistle stop tour’. In Steve’s session you will learn about the tools in the eLearning Suite, how they integrate with each other, and how to leverage some of the great new features for e-Learning and performance support. In the coming days I will post more info on our plans at DevLearn, and some of the sessions the Adobe team is conducting.
Source: Ted On Flash by Ted Patrick
Welcome to "Learning Fx4 from Scratch", this weekly series of blog posts will attempt to cover Fx4 beginning to end from a developer perspective.Source: The Adobe Captivate Blog by Shameer Ayyappan
Captivate 4 has several avenues for possible extensions- especially given the new widgets and variables features. Captivate, like many of the other Adobe products, has an exchange where third parties can share product extensions and other assets that the larger Captivate community might find useful. While the exchange has been dormant for a while, a new set of content has been introduced on exchange this month. The new content on exchange ranges from widgets to stock animations- each of which you will find useful in enhancing the projects you create using Captivate. Most of the content on exchange is free. Even the ones you need to purchase are great value for money- given that it will allow you to differentiate your Captivate projects from the others, or achieve that special task that your customer wants executed in just this specific manner. Some of the new stuff on exchange I like are:
Also, if there are assets or extensions that you would like to share with or sell to the community, please submit them on exchange.
captivate exchange,captivate 4,captivate widgets,captivate stock assets
Source: The Official Flex Team Blog by Matt Chotin
Glenn has posted his slides and source code on Acrobat.com. This talk was fantastic so I encourage everyone to check them out.
Source: The Adobe Captivate Blog by Shameer Ayyappan
We have a new Captivate webinar coming up on Wednesday, October 21st, and we have a new speaker in Rick Zanotti. Rick has been creating eLearning content for decades and is an old hand at Captivate. He was one of the original consultants Macromedia tapped during the Robodemo days. Also, Rick is a hardcore practitioner and runs his own eLearning development firm out of Camarillo, California. A community expert, he runs a popular podcast on Captivate, and has a wealth of best practices and tips and tricks that will surely aid you in your eLearning development.
In this session titled ‘Interactivity in Virtual Classrooms: Adobe Captivate and Acrobat Connect Pro’ you will learn how to easily create interactive learning content, from engaging demonstrations to interactive simulations and quizzes, and how to deploy and track in a virtual classroom. Rick will also review the latest features and benefits of Adobe Captivate, show you how to interact with simulation and game examples directly in the Acrobat Connect Pro virtual classroom, and teach you the integration points between Adobe Captivate and Connect Pro
If you deliver courses or training via virtual classrooms, or create asynchronous eLearning content using Adobe Captivate then this session is for you. Follow this link to register for the webinar.
Source: The Adobe Captivate Blog by Shameer Ayyappan
This year’s edition of the Adobe Learning Summit (ALS) is scheduled for November 9th at the San Jose Fairmont. It is collocated with DevLearn. This year ALS is going to be bigger and more exciting than ever. In many ways ALS is turning into MAX for eLearning. This is where we show some of the first sneak peeks of upcoming versions of our eLearning products. Those who attended last year will remember RJ’s session where he unveiled Adobe Captivate 4 and the announcement of our plans for an Adobe eLearning Suite. You should expect more of this at this year’s ALS. OK, let me let you in on one such plan- ALS attendees will get a first look at the Captivate Mac beta! We will also demonstrate some of the snazzy ideas our engineers are working on, that really don’t have a release schedule - but are just great ideas that we would like your feedback on. In addition to Captivate and eLearning Suite you will also see Presenter, Connect Pro and Flash.
We have Clay Shirky (the guru on social and economic effects of internet technologies) providing the opening keynote. Adobe’s increased focus on eLearning is underlined by the fact that this year, none other than Shantanu Narayen, our CEO, will be delivering the inaugural address.
You can register for the conference here. The Product Management team will also conduct deep dive sessions on Captivate and eLearning Suite on the sidelines of this conference. If you wish to participate in these sessions, please drop me an email.
adobe learning summit,captivate,shantanu narayen,clay shirky,adobe elearning suite
Source: Flex and Flash Developer - Jesse Warden dot Kizz-ohm by admin
The following is a quick start guide on how to get RobotLegs working on top of the Gaia Flash Framework written by Steven Sacks. In later articles, I’ll show how to use per-Gaia-page Contexts, a visual example, as well as cover Enterprise scenarios. For now this should get you up and running in 10 minutes.
What is RobotLegs?
RobotLegs is a MVCS framework for Flex & pure AS3 applications. You can use with Flash as well. I call it PureMVC done right. She’s still not at version 1, but is really close (docs in progress).
What is Gaia?
The Gaia Flash Framework is the Ruby on Rails for building Flash websites. You can code generate your entire Flash website in seconds. It has modules, SEO, page navigation, and deep-linking all built-in, amongst other things.
Why?
Gaia is great for building websites, but it’s just a platform for you to build on, a bunch of helpful scaffolding; it doesn’t prescribe a way to build your applications. Specifically, you have to write your own code for Business logic and Application/Domain logic. You still have to write code to hit back-end services, parse the returning XML/JSON/AMF, and act on that data.
This is where an application framework like RobotLegs comes in. You’re domain model goes in the Model classes, your Business logic goes in the Service classes, and your Domain/Application logic goes in your Commands & Mediators. You setup your shiz in your Context class(es), like PureMVC’s ApplicationFacade
Gaia builds your site, and RobotLegs makes it work with dynamic data.
Requirements
Before we get to the “How”, you need to know 2 requirements first. This may scare some people off.
RobotLegs requires compiling in mxmlc because of the custom metadata tags. Flash CS3 & CS4 do not currently support the -keep-as3-metadata mxmlc compiler parameter, thus, you must compile your RobotLeg’s implementation code using mxmlc (via Flex Builder 2, 3, Flash Builder 4, FDT, FlashDevelop, etc.).
While you can compile Gaia to an SWC in Flash CS4, and then re-compile via a Library linkage in mxmlc, this defeats the purpose of using the Gaia workflow in Flash. I understand this is deal killer for many automated build/continuous integrations of Enterprise applications, so I’ll cover optional build scenarios in a future article.
Flash CS4 is required because it allows you to link to external libraries, in this case, Flex created SWC’s. You could utilize Flash CS3, and just add a class path to the RobotLegs classes since you’ll typically only be using the interfaces in your Flash/Gaia specific code. Both Flash CS3/CS4 will be exporting AS3 code since RobotLegs is for AS3, so you can’t use Flash 8 and export to AS2.
I currently do not have access to Flash CS5 alpha/beta to determine if it’s integration with Flash Builder 4 demoed at MAX 2009 would help in this instance, nor do I know if it can -keep-as3-metadata.
Quickstart Preface
The Quickstart may appear intimidating at 15 steps. If you know Flex Builder/FlashDevelop, Flash, Gaia, and RobotLegs, you’ll do just fine, it’s not that bad. Additionally, you only need to do this stuff once.
The rest of your project, you’ll spend in your code editor. You can also link the Main file in Flex Builder to get code hinting on it. The only time you go to Flash is to do Control + Enter.
GIT-R-DONE!!!11oneone
Quickstart
1. Setup your Gaia site.
2. Open up your main.fla in Flash.
3. In Flash CS4, go to File > Publish Settings, click the Flash tab, click the Settings button next to AS version, click the Library Path tab, and link to the RobotLegs.swc. In Flash CS3, just add a class path to the RobotLegs source code directory.
4. Save your main.fla.
5. Create an ActionScript 3 project in Flex/Flash Builder, FDT, or FlashDevelop. Point it to the same directory your Gaia project lives. I suggest changing bin-debug to bin since that’s what Gaia uses. Although it’ll generate a SWF, it’s hereafter referred to as a “module” SWF since Gaia will load it in and use it’s pre-compiled classes.
6. Create your own main class, differently named (ie not “Main.as”), and put next to Gaia’s Main.as. This will be where your RobotLegs code lives.
7. Link to the RobotLegs.swc as a Library. If you are in Flex/Flash Builder, you may wish to link to the RobotLegsLib Library project instead. If so, I put this in Gaia’s lib folder next to the FLA’s that Gaia puts there. The image below shows linking to the Library Project.
8. Create a “MainContext” ActionScript class where ever you’d like in your package structure. Might I recommend something other than Gaia’s pages directory, like “com.company.project.robotlegs.contexts”. In this class, you register your modules, in this case, your Gaia pages that actually need Mediators. Here’s mine:
package com.jxl.gaiarobotlegs.robotlegs.contexts
{
import com.jxl.gaiarobotlegs.pages.IAboutPage;
import com.jxl.gaiarobotlegs.robotlegs.mediators.AboutMediator;
import flash.display.DisplayObjectContainer;
import org.robotlegs.mvcs.Context;
public class MainContext extends Context
{
public function MainContext(contextView:DisplayObjectContainer)
{
super(contextView);
}
public override function startup():void
{
mediatorMap.mapModule('com.jxl.gaiarobotlegs.pages::AboutPage', IAboutPage, AboutMediator);
super.startup();
}
}
}
Notice the mapModule method goes “Your Gaia Page class as a String”, “The interface the Gaia Page class and the Mediator share”, and “The RobotLegs Mediator class”. NOTE: In older builds of RobotLegs, they are using the fully qualified class name which is ::AboutPage, not .AboutPage (more info). I have a hacked version locally which accepts a normal package path of “pages.AboutPage” vs. “pages::AboutPage”. Yes, I’ve asked the RobotLegs authors to fix this.
9. Create 1 more class and 1 corresponding interface: a Mediator class for whatever Gaia page you’ll be mediating, and an interface of the same name with the I prefix. Example: If you’re creating an “About Us” page for your site, you’ll probably have an about page node in your site.xml, and thus a corresponding FLA. Create an “IAboutUs” interface, and an “AboutUsMediator” class that implements the interface. Your Gaia “AboutUsPage” class will also implement the “IAboutUs” interface. This is how RobotLegs will communicate to your Gaia code via the Bridge Pattern (more info on why).
Here’s the interface:
package com.jxl.gaiarobotlegs.pages
{
public interface IAboutPage
{
function setAboutText(value:String):void;
}
}
Here’s the Mediator:
package com.jxl.gaiarobotlegs.robotlegs.mediators
{
import com.jxl.gaiarobotlegs.pages.IAboutPage;
import flash.events.TimerEvent;
import flash.utils.Timer;
import org.robotlegs.mvcs.Mediator;
public class AboutMediator extends Mediator
{
[Inject]
public var aboutPage:IAboutPage;
private var timer:Timer;
public function AboutMediator()
{
super();
}
public override function onRegister():void
{
timer = new Timer(3 * 1000);
timer.addEventListener(TimerEvent.TIMER, onTick, false, 0, true);
timer.start();
}
private function onTick(event:TimerEvent):void
{
timer.stop();
timer.removeEventListener(TimerEvent.TIMER, onTick);
timer = null;
aboutPage.setAboutText("Blah blah blah,nthis is from RobotLeg's 'AboutMediator'");
}
}
}
Thing to note in the above is the Dependency Injection via the [Inject] tag does IAboutPage vs. AboutPage; this ensures mxmlc doesn’t attempt to compile Gaia code into your module SWF.
10. Any events your Gaia About Us page will emit, put in the IAboutUs interface. Any data your Gaia About Us page needs to have set on itself, implement a setter or a method in the IAboutUs interface. This’ll ensure your About Us page class in Gaia and your AboutUsMediator won’t compile until you implement those methods, nor will your AboutUsMediator RobotLegs class. Yes, I know events in interfaces aren’t enforced, but that doesn’t mean you shouldn’t do it.
Here’s the Gaia AboutPage class:
package com.jxl.gaiarobotlegs.pages
{
import com.gaiaframework.api.*;
import com.gaiaframework.debug.*;
import com.gaiaframework.events.*;
import com.gaiaframework.templates.AbstractPage;
import flash.display.*;
import flash.events.*;
import flash.text.TextField;
import gs.*;
public class AboutPage extends AbstractPage implements IAboutPage
{
public var copyTextField:TextField;
public function AboutPage()
{
super();
alpha = 0;
//new Scaffold(this);
}
// called by RobotLegs's AboutPageMediator
public function setAboutText(value:String):void
{
copyTextField.text = value;
}
override public function transitionIn():void
{
super.transitionIn();
TweenLite.to(this, 0.3, {alpha:1, onComplete:transitionInComplete});
}
override public function transitionOut():void
{
super.transitionOut();
TweenLite.to(this, 0.3, {alpha:0, onComplete:transitionOutComplete});
}
}
}
Notice the implementation of IAboutPage. Since Gaia FLA’s by default have “../src” set in their class path, it’ll share the same class path with your ActionScript project. The only class it’s importing form that code, however, is the interface, which is a few 300 bytes or so once compiled into the SWF. If you’re clever, you could use External Libraries in CS4, but that’s out of scope for this article.
11. Open up your main.as file in your editor of choice. First, create a mainContext class reference, like:
private var mainContext:IContext;
12. Override init and do no call super.init. Instead, write code to load in your RobotLegs SWF that your ActionScript project will create in bin. You can use a Loader, your own wrapper class, extend Main to abstract away these details in a base class… whatever you want. I used a Loader for this example. Ensure you load the classes into the same ApplicationDomain so Gaia can share and use these classes, as well as any loaded SWF’s that need them.
var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); moduleLoader.load(new URLRequest('GaiaRobotLegs.swf'), loaderContext);
13. In your Event.COMPLETE function, snatch your MainContext class from the loaded SWF, instantiate it, and pass the stage in, and call super.init to let Gaia know you’re done, like so:
private function onComplete(event:Event):void { const mainContextClassName:String = "com.jxl.gaiarobotlegs.robotlegs.contexts.MainContext"; try { var mainContextClass:Class = moduleLoader.contentLoaderInfo.applicationDomain.getDefinition(mainContextClassName) as Class; mainContext = new mainContextClass(stage) as IContext; } catch(err:Error) { trace("Failed to find class: " + err); } super.init(); }
You use the stage so any DisplayObject added to the DisplayList will be checked to see if it has an associated Mediator. Yes, I know OOP Purists will groan at this; don’t worry, I’ll offer a more pure solution later. Remember, Gaia is typically used in Agencies with 2 week deadlines vs. 4 months; this is more than good enough for that crowd.
14. In your main ActionScript project class, define a dependency variable; this is strictly to ensure your RobotLegs code is compiled into the “module SWF”. Assuming you have Build Automatically on in Flex Builder, it should make your SWF in the bin folder for you once you save. Here’s mine:
package
{
import com.jxl.gaiarobotlegs.robotlegs.contexts.MainContext;
import flash.display.Sprite;
public class GaiaRobotLegs extends Sprite
{
private var mainContext:MainContext;
public function GaiaRobotLegs()
{
super();
}
}
}
15. Test your Gaia project in Flash.
Conclusions
As you can see, all you need to do now is code all your code in Flex Builder (or editor of choice), and anytime you need to compile your site, you just go back to main.fla in Flash and hit Control + Enter.
You’ll also notice I create one “global” context here. Reiterating, this is good enough for most design agencies as not every Gaia page will need a Mediator, and most Gaia pages aren’t that complex View’s anyway.
For the purists, in a future article I’ll explain how you can modify the Gaia template files, and configure your Context classes via the Gaia site.xml externally. This ensures that the details of a Gaia page registering it’s own Context, or simply just creating a single Context + Mediator for itself, are self-contained and as strongly-typed as possible.
For those building Enterprise sized sites with automated build processes, I’ll later go into how you can integrate a Gaia site into your build process.
Thanks
Just a quick thanks to Steven for helping answer my Gaia architecture questions, and to the RobotLegs crew for helping me work out the details of how it could be done.
Source: The Official Flex Team Blog by Vera Carr
We're excited to announce that the second Flex 4 SDK beta 2 is now available for download! Check out the Labs page and the Flex 4 Open Source page for more details. Also, be sure to check out Matt Chotin's updated What's new in the Flex 4 Beta and Joan Lafferty's Differences between Flex 3 and Flex 4 articles. This beta release also coincides with the beta 2 releases of both Flash Builder and Flash Catalyst.
We received great feedback on beta 1, which we incorporated into beta 2. We hope you'll keep the discussion going on the Labs forums.
Enjoy!
Source: Ted On Flash by Ted Patrick
Here is the source for 4 iPhone demo applications I made during the internal development of "Notus", aka iPhone export. The projects are ASProject out of Flex Builder. The first thing you will notice is that there is nothing special here, just simple AS3 apps the are cross-compiled to IPA ( iPhone ARM Binaries ).Source: Flex and Flash Developer - Jesse Warden dot Kizz-ohm by admin
Preface
The following is a set of articles relaying my experiences in Flex consulting with the hope they will benefit others. While they include general consulting advice, they are specifically geared towards Enterprise Flex software development consulting. I try to compare and contrast with contracting to give context. While it’s mainly focused on Flex, there are the occasional Flash references as well.
Consultant vs. Contractor
There are 2 camps: those who believe contracting and consulting are the same thing, and those who do not. I believe they are two different disciplines.
A contractor writes code for another company. A consultant does more than just write code; she does the typical consulting process:
Consultants can be contractors; they can be called upon to be team augmentation, or the team itself to build the software, hired specifically for their software development & leadership skills. While contractors can work for both big and small companies, consultants typically work for only large/Enterprise companies. This is because the large problems that require a consultant’s skills are found in larger companies, and in turn they are capable of affording the consultant’s rate.
Types of Consulting Gigs
You’ll notice from step #3 in the above mentioned consulting process that consultants are typically brought into an “existing” project. This can be one that is just starting, underway, or is just completed. The following 5 are the most common type I’ve encountered.
1. Confirm Our Confidence/Trepidation’s
The client wants to ensure the existing team is “on the right track”. As a 3rd party, the client is either looking for your vast expertise to confirm the current plan of attack & team skill set is enough for success… or they just want your opinion. A lot of times this is to confirm what they already know, but don’t necessarily let you know they know. This is called the “Confirm Our Confidence” or “Confirm Our Trepidation’s”.
2. Why are we sinking?
The project is clearly off track, but no one knows the root cause(s). The client is looking for you to tell them why. This is called “Why are we sinking?” or “Save our Flex Project!“.
3. Ensuring It All Goes Smoothly
The client isn’t getting enough traction on the project, and want a heavy hitter. Since a lot of top talent typically doesn’t do contracting, you often can only find the heavy hitters as consultants. Other times, the client merely has budget, and decides to reduce their risk by bringing on a senior architect/developer from an existing firm that is known for producing quality work. Assuming the project requirements are far below the challenge the consultants typically face, there should be no problems completing it, right? This is called “Ensuring It All Goes Smoothly”.
4. The Last Mile
The client has just completed a project, and it doesn’t work. They’ve invested a lot of time and money, and are angry/frustrated/confused why there are so many problems. Sometimes they even try to convince you that it “just needs some minor bug fixes” and it’ll be fine/good enough for their needs. They call upon you, since apparently you’ve successfully completed many projects, to figure out how to get them to, and past, the finish line. This is called “The Last Mile” project.
5. Last Minute Replacement
Making software takes a team. On every team you have one or more senior developers; the developers who “have done this before”. Without their leadership, projects can get really bogged down, and often fail to launch on time, or at all. Some clients for one reason or another, often under not-so-good-circumstances, will have lost their main architect or senior developer. With no one else on the team who is capable of taking an architecture/leadership role, companies will look for a replacement to ensure the project stays on track. You are then put in the position to learn a code base you didn’t architect, don’t know, and may not agree with. You must do this in a short time frame, integrate with the existing teams, and learn their processes. It’s often done for entire teams, not just 1 individual. This happens when another firm has a fallout with the 3rd party company/firm for whatever reason. This is called the “Last Minute Replacement”.
The Consulting Process
As you can see from the above process, and the types of gigs, they aren’t your typical “software development”, even though you do “software development” during those gigs. These are not mutually exclusive. Some clients use Agile, some Waterfall, some mish-mashes, and some no process at all (Process.COWBOY_CODING). Let’s go through the consulting process first, since that part is ALWAYS the same regardless of client.
Step 0: Who’s my boss and define success?
This one I learned from Tom Link over at Universal Mind. There are 2 questions you should always ask the client, AND get answered, before you start any consulting project.
First, who’s my boss? Second, what would make you happy once I leave?
For contracting gigs, it’s pretty clear who your boss is; whoever contacted you. Often project managers are the ones responsible for both the hiring, and managing the remote contractor, in this case you. Therefore, if a designer emails you comps, and you don’t agree, you usually take it up with the manager via email/phone.
In consulting, it’s usually not the simple. Often times you’re dealing with large/Enterprise companies. You may have some random Director of blah blah East Coast operations come in and start making demands. Seeing others jump, you may get the impression you should jump too. You shouldn’t. If she isn’t your boss, you shouldn’t do what they say. As a consultant, every minute of your day is costing the company who is hiring you a lot. Anything you do that deviates from your original assigned goal is not only unethical towards the company you are working for, but could potentially cause you not to get paid.
The great thing about being a consultant is you can say and do things an employee of the same company you are working for could never get away with. Feel free to ignore someone telling you what to do if they aren’t your boss. Obviously you need to treat these situations with tact, but if you just remember you may piss your real boss off and not get paid, it’s easy to stand firm.
Regarding defining success, it helps keep in mind what you were originally hired for. If you were originally hired to help enable the team to succeed, and you hand-hold them to victory, technically you failed at your job. You can potentially breed resentment by those you were supposed to empower to succeed. Remember, you’re not a contractor, but a consultant, a professional specialist hired for a specific purpose: to offer a plan of attack, not actually implementing that plan. While you may feel good creating a brand new video player for the client, they might not like the bill when all they asked for was you improve their existing one.
Knowing who your REAL boss is keeps you out of trouble. Knowing your true objective keeps you focused amongst the chaos that WILL ensue around you.
Step 1: Listen to the client’s problems
When you are looking for a new contracting gig, you are looking for a client who wants you to build something for them. ”I need a Flash widget”, “I think I need a website that does X”, or “This video player needs to have these custom features”. Inheriting other people’s code to fix isn’t very profitable, and is often a miserable experience. Therefore, a lot of contracting where you’re “building things” for clients is a lot of fun, and often a positive experience.
Consulting often times is done under negative circumstances. ”We were building a Flash widget, but ran into trouble”, “We don’t understand how a website could be so challenging to build with $80k worth of development over 4 months with so little to show for the time and money”, or “our video playback performance is very poor”.
You first, and foremost job as a consultant is to listen. You need to get the whole story, and you NEVER get it during the hiring process. A lot of the times the story you get is only the tip of the iceberg, misleading, or just wrong. This isn’t to say it’s always wrong; a lot of times you do get an accurate assessment from management. The key here is you need to get the details so you can ensure whatever plan you create to fix it is the RIGHT plan. Creating a plan to optimize the client side code to improve performance when in reality the back-end servers just never work consistently, nor was any thought put into optimizing the messaging format makes you look incompetent, or trying to take advantage of the situation. Part of your plan could include allotting additional time to investigate the service layer’s issues, and come up with a plan to fix them should they have issues. [Did you catch that? I just said "plan to plan" in so many words. Just seeing if you're awake! --JXL]
There is also the potential for negative pretense about your arrival that can affect the story you get. While you may perceive the management as good for caring enough about a troubled project to bring an expert in, those on the project may hold resentment towards them, and displaced aggression towards you. Therefore, you may get answers to your questions colored with emotion, or nothing useful because emotions are so raw.
The point here is to ask questions, investigate, find out what’s really going on. The information you garner will enable you to formulate an effective plan to fix/solve the client’s problems. This process doesn’t necessarily stop, but by the time you are presenting your plan, you know what the problems really are, and how to fix them.
Step 2: Interview project members by asking questions
Asking questions. It’s the same thing you’d do if you were a contractor trying to build software for the client, or a consultant trying to save a project from doom. What back-end am I hitting and what is the data format we’re exchanging for both the request and the response? Where are the design comps? Why were they created like this? Who is the designer and is there a nearby open window to throw them out of?
You need to learn who is on the project, who those people are, and what makes them tick. You need to learn how they act, and how they acted under the circumstances of the past to better predict how they’ll act in the future. You need to learn why those decisions were made, and truly understand what the the ramifications of those decisions were.
The point of this step is to figure out what the true problems are by talking to the project members. Your goal is to glean as much information about the project as possible. From that information, you can formulate a relevant plan of attack to help solve them, one tailored so that it will work in the particular organization you are working with. Notice the keyword “help” in the previous sentence; often times in Flex/Flash consulting, you are the one who will help implement the plan.
Step 3: Investigate the designs/code/requirements
While this is often done in tandem with step 2, a lot of step 3 can be done alone with questions posed in emails and phone calls. Getting a team member to walk you through the code is something you’d do in step 2, while walking through yourself and getting familiar with it is step 3.
Here you start digging in and ask questions like “Why did you all choose this framework? Why not this other framework instead? Did you know about X, Y, and Z when you started down this development path?” Your goal here is to get history on an existing code base or project plan. ALL code bases have a story. Code is born from the 4th dimension. Software developers will often debate about best practices as if code existed in the 3rd dimension, but it does not. All code has a reason the way it is. It came from a certain set of decisions that shaped what it is today. These decisions where made under certain circumstances. Those decisions were made by certain individuals and teams who were in those circumstances. Context is key here, and once you can tell the story of the code, you’ll have a good understanding of why it is the way it is.
An example is, “The code base is a large Flash website created by a 3rd party agency. Some if it is a professional, simple, and easy to understand custom MVC portion. The code in the associated FLA’s, however are not. The reason for this is that a senior developer was brought on initially to setup the website. Apparently, this senior developer moved onto other projects, and junior Flash Developers were brought on to finish the more GUI related tasks. This worked out well for the agency since the junior developers didn’t have to know anything about the framework; they just wrote 1 line of code on the root timeline. The downside is that while the framework was flexible, portable, and provided a good foundation for the code, the FLA’s themselves, all 32 of them, were basically useless to re-use. The amount of time spent figuring out, and attempting to finagle already badly written code to work would not be worth our time. Since the current redesign plan is currently in flux, and the client now owns the code, we can work with the in-house team to start building a firmer foundation on the View portion, and create easier to work with FLA’s while still re-using the older FLA’s assets. The Model and Controller portions that run the website can remain the same.”
You’ll notice I’ve already started to form opinions about a possible plan of attack whilst writing the story. That’s the point; you’ll recognize possible scenarios on what your team can do to make the most in the current situation given your current resources. From there, you just need to document it.
Another example, when you look at a Cairngorm code base and go, “Why the F$*^ didn’t these guys build this using Gaia!?”, you know’ll how to answer your own question: the team was an existing team of server-side Java developers doing Flex for the first time, and the small size of this project seemed like a good test case for seeing how Flex performed in their department. Flex was specifically created for developers because Flash never took off in the software development world, and Gaia currently doesn’t work with Flex. That, and they perceive this “website” as an “application”.
This becomes more important when you start to recognize problems not just in the code, but in the development processes in the team, and perhaps the client’s organization. A lot of times the code’s poor state is a direct result of those managing the developers; ie they are setup to fail. Other times, 1 developer is preventing the others from succeeding. We as coders sometimes get too focused on the code, when the code is the last thing that can positively affect itself. Unfortunately, it’s often easier as a good coder to merely fix the code because you don’t think you can fix management or their processes. Often times, this is what you must do.
Now, a lot of times you may think, “Oh man, I hate this framework, I’m going to re-write this whole thing in my other favorite X-framework, and then we’ll be able to make progress”. If you ask around, though, you may find that the team had specific reasons for doing so. Hiring Cairngorm developers is a lot easier than hiring PureMVC developers, for example. Maybe the team didn’t know the other frameworks and decided on the one they chose because they all participated in company-paid training for it. Or, maybe the team claims they know other frameworks, but they really don’t. Training is often an option and sometimes a crucial part of consulting, but again, you need to remember what you were hired for. Sometimes, the code base is just too big, and you might not have the resources to port it in a reasonable time frame without sabotaging productivity of the rest of the team. Worse, you port it, the app has “more” bugs because it’s fresh out of a major re-factoring effort, and the client is wondering why they hired you. For the big code bases, you often need to figure out how you can make the most with what you got. That phrase, for me anyway, often never happened in the Flash world, but happens ALL THE TIME in the Flex consulting one, merely because the projects are so large.
Step 4: Write up an Implementation Plan, and Present It
Based on your talking with team members, and doing your own investigation into the code and design comps, it’s time to create a formal plan. There are 3 goals for this. First, to formally show the client what your professional recommendations are. Second, while writing, you help solidify what those recommendations are now that they are written down formally. Third, if you get caught up working on other things during the implementation phase, you can remember what your true goals were, and re-align since you can refer to the document. To get to this point in the process usually takes me 2 to 3 weeks on-site with the client. I’ve done it in 2 to 3 days before, though.
The plan can follow the typical “tell what you’re going to tell them, tell them, tell them what you told them” format. The plan is often a document that has 3 sections. An executive summary, problems & solutions, and conclusions. Your executive summary is a 4 sentence paragraph summarizing as high level as possible what you were hired for, what you found, and how you plan on fixing it. This is both for management to get a quick of assessment, and it’s also great when they forward to true “executives” who don’t have a lot of time, and will not read things. Having a succinct paragraph that makes it “appear” like you did your research and know what your doing makes it easy for managers to copy and paste that into emails or other reports for example… hence the name, “executive summary”.
The problems and solution section states what problem(s) you found, and each possible solution(s) to each problem. A problem cold potentially have multiple solutions. Often solutions to a problem aren’t very straightforward, and you want to give management options. Like Darrell Ross once told me, your goal isn’t to spend your client’s money, but rather provide transparency to the problems at hand, with well thought out solutions, and allow them to make the decisions that directly affect their project.
Finally, the plan document needs a conclusion. Here you summarize your succinct, professional assessment of the situation, any other high level risks that need to be made known, and your desire to move forward highlighting the positive results of doing so.
Once completed and proof read, you present this to your boss. Often times it’ll just be your boss, and no one else on the team. If you’re a good consultant, you’ll provide the raw truth of the situation, and your honest assessment may offend others. The client hired you to get the real truth, and you are obligated to provide this; this isn’t personal, it’s business. This can be done over email, phone, a more formal presentation with slides if others are present who either don’t have time to read the document, or need some high level context on what you are consulting about, and what you plan to do to help fix things.
Finally, the document, as well as communicating it’s contents effectively, legally shows you attempted to provide value to the client vs. stealing their money by slacking off. Remember, consulting is often done in really negative situations; having a paper trail is good CYA (cover yer arse).
Step 5: Implement the plan.
Also known as, git-r-done.
Contracting?
If you’re a contractor, you may have read a lot of the above and said to yourself, “I already do a lot of that.” Perhaps you do. Contractors are often pulled into consulting situations because they are a LOT cheaper than consulting firms, and the contractors don’t realize their monetary worth. Sometimes only 1 individual is needed vs. multiple consultants. That, or a firm isn’t found/known to the client.
Mostly, though, contractors are hired to build things, fix things, or help on things. Consultants are hired to give their professional opinions on existing projects, fix really large, screwed up projects, or help on larger endeavors with multiple consultants helping. The 2 main differentiators are scope of the project, and amount of emails & documents you write. If you have the capability to re-write the software from the ground up in 2 weeks, don’t write documents multiple times justifying your efforts, nor participate in meetings with various stakeholders who are all mad… you’re a contractor, not a consultant. That, and if you don’t charge consulting rates.
Conclusions
Consulting is the disaster recovery of the software development world. It sometimes has a negative connotation in larger enterprises because by prolonging the problem a firm can make a lot of money. Others view the client’s resistance to positive change as a no go, and instead choose to let the client fail, THEN come in to help them up. To me, consulting is a natural progression from being a contract software developer. You’ve been in enough negative situations, you recognize how to get out of them. Convincing the client of this, as well as getting them to actually do it, is where it’s challenging.
Software development is hard. That said, there are a lot of development shops out there that can work with larger companies to create wonderful solutions. What’s more valuable, and challenging, is working with larger companies to escape horrible situations. You get into this line of work because either you love the challenge, like the appreciation of clients who are saved from certain doom, or you just fell into it as an “unnatural” career progression like I did.
A lot of times, you and you’re fellow consultants may be very skilled compared to others in your industry, yet you’re given way less time than needed, with an already existing problem code base… and you’re expected to work miracles because “you’re so good”. …and then God invented alcohol.
If you are an independent software developer interested in getting into consulting, the easiest way to to start is to join an existing firm. I won’t name names, but there are a few firms in the Flex industry that do this kind of work all the time. Beware of evangelists/owners from said firms that claim you’ll “work with clients to create engaging solutions, building awesome Flex applications from scratch”. They are all full of shit. If you’re any good, you’ll be put in the worse situations imaginable. Clients like you when you build something awesome for them. They like you more when you prevent their project from going up in flames… and are often more willing to part with bling. Consulting firms know this.
To be a consultant, you typically are brought into troubled projects, and use the consulting process to help those projects succeed. This includes listening to the clients problems, investigating the code, writing up & presenting a formalized implementation plan, and executing the plan. Everything else is based on your experience, intuition, and luck.
Source: The Official Flex Team Blog by Matt Chotin
As we do every year at MAX there will be a Meet the Team session on Monday night. This year we're actually doing 2 sessions back-to-back so that you have the opportunity to go see multiple teams without losing out. We'll be doing our session as a panel this year, but it's always good to get a sense of what questions you guys are looking to have answered. Feel free to post comments here or Tweet with #flexmtt if you want us to have an answer prepared for you.
Please note: for some reason our MoveableType config keeps sending a lot of comments to the spam folder and not mailing us. So it may take a day or two for us to get your comment to appear.
Source: Flex and Flash Developer - Jesse Warden dot Kizz-ohm by admin
Viaas: The best project I ever worked on, with the best client I’ve ever had. This is where my Agile Chronicles came from. The front-end portion I worked on was built using Flex. Congrats to the Third Iris team for launching!
Here’s a video from Tuesday of Steve & Paul showing off the application in 5 minutes. There are a lot of cool things they don’t show, but this should give you the gist in a short time frame. Notice the camera is powered via the ethernet cable.
Paul is the only developer I’ve met in my entire career who does accurate time estimations. Also, props to Jonathan Miranda who took over for me and brought her to launch.
Source: Ted On Flash by Ted Patrick
I put this list together of sessions that I would not miss at Adobe MAX. There are so many great sessions to choose from but this is my biased list:Source: Edublogs - teacher and student blogs by James
We’re hoping the new school year is going well for all Edublogs users and we’re looking forward to providing you with some great blogging tools for the next year!
And we’d also like to say a huge thank you to all of you who have become Edublogs Supporters or looked at Edublogs Campus for your schools… you are the people that make Edublogs possible so give yourself a huge pat on the back!
But while you’re doing that, have a think about whether you’d like to take this whole Edublogs thing a bit further and come and work with us providing help and support for Edublogs.org and Edublogs Campus users!
That’s right, we’re looking for a help and support ninja.
Someone who can figure out how to make widgets dance, plugins gambol and posts and pages sing!
You’ll be working alongside the existing team, manning the forums, tweets and emails… and putting the EDU into blogging :)
There’s no specific experience required – except that you are an existing Edublogs or WordPress user – and naturally we have a preference for people with educational backgrounds.
What’s more, we’ll be looking at a flexible, hours-based, arrangement at first so that you can easily do this kinda thing alongside your current work… especially if you spend a lot of time in front of a computer already :)
We’re not saying that you moonlight per se…. oh, ok, we are… moonlight away!
So… if you’re interested, please contact us here (or by emailing support (at) edublogs [dot] org) and we can have a chat.
Let us know a little about yourself, point us to your Edublogs / WordPress experience and ask us any questions you might have.
Source: The Adobe Captivate Blog by Shameer Ayyappan
RJ, our eLearning evangelist (and twitter maniac :-)) will be doing a webinar on the benefits of Adobe eLearning suite for Adobe Captivate users. The session is scheduled for 9/30/2009, 10am Pacific Time, and will run 90 minutes. Please follow this link to register for this webinar. In this session you will learn about:
As I've said before, RJ's sessions are always very informative and fun, and they do fill up very fast considering his fan following. Do try and log in early. Those who missed RJ's earlier sessions, can find the recordings of the same here.
Source: The Official Flex Team Blog by Vera Carr
Due to significant recent performance and reliability issues with our JIRA bug database, we will be making a series of changes over the next several weeks. So far, the changes we've made include disabling the following functionality:
Source: Flex and Flash Developer - Jesse Warden dot Kizz-ohm by admin
This is a long post, so I’ve provided a short version, and content links to relevant sections if you want to skip around.
Short Version
I’ve built an AIR application in my spare time using Flex that helps you play Dungeons & Dragons 4th edition faster. It took 6 months in my spare time and cost around $50k to build, and $40 a month to maintain.
See and download it here.
It was created in response to my new players, who are tech saavy, having a slow time getting a game going. I copied the design metaphor used in MMORPG games, as well as creating an online database via Django of user submitted content to help the process go faster, as well as supporting house rules. In doing market research, I found my product is for a younger generation, and this makes it challenging to market. I used an Iterative/Agile development process to ensure it got completed.
The app had 3 goals: make money, make our games quicker & easier, and prove to myself I could execute. I succeeded in the latter 2, and failed in the making money… so far.
I’ve spent my spare time the last 6 months building an AIR application called “Powerz“. Simply, it is an application that allows you to play Dungeons & Dragons 4th edition a lot quicker. It was built in response to newer players hastily flipping back and forth through rule book pages, all the while lamenting how much easier it is to do this in World of Warcraft.
It also became a test for myself. I wanted to see if I could release a product on my own, perhaps even turn a profit. I’ve been attempting for 5 years to create an online version of D&D, fueled by the wishful emails of those around the world who both managed to get their hands on alpha builds and validated my target market. That, and I had recently become an advisor for a startup, so needed creditability that I had produced results in the product sphere as opposed to the service industry which I’m currently in (Flex & Flash consulting/contracting). I had just recently completed my first official Agile/Scrum project getting a startup client to (*ahem* near) Alpha, and upon reflecting, knew I was now capable of releasing a real product on my own.
Introduction: Why the need for Powerz?
D&D 4th edition was created, in my opinion, to cater to, what I call, the “WoW Generation”. Wizards of the Coast, the company also responsible for Magic the Gathering, owns the D&D game. They recognized that to gain broader appeal of a game traditionally challenging to learn and losing market share to video games, they needed to not only make it easier to learn and play, but also target this gaming demographic. The new rules do just that. They are easier to learn for those not inclined to “read a bunch of rules”, and the new power concept allows a gaming group to quickly ascertain how they can contribute to the group.
The problem with the WoW gen’s, though, is that they grew up texting, and not only want, but EXPECT digital tools to be there, as well as cross device. D&D, at least currently, doesn’t totally work like that. They have made great strides in years to provide online digital content, such as Character Builders, rules compendiums, and online magazines with exclusive content. What’s funny to me is that the main goal for most of this content is to be printed to paper and used during gameplay. If you want to use these tools strictly digitally, you can, but that wasn’t why they were made. Ultimately, your still going to be using “real” books during gameplay.
When you have a background in MMORPG’s, or even just gaming on consoles, you look at rule books as primitive, and cumbersome, and ultimately, not as fun. They, like me, know this problem has already been solved digitally.
What kept coming up as a hassle during gameplay with this new generation of gamers was referencing their character’s powers, the main crux of 4th edition rules. I figured if I could solve this problem digitally, I’d be onto something special. I knew I couldn’t solve everything; I’d tried multiple times in the past to digitize the entire D&D experience, and I simply didn’t have enough resources to pull that off. For a digital power bar, however, I didn’t need a lot of resources…
If you’ve ever played World of Warcraft, Star Wars Galaxies, DDO, or any other Massively Multiplayer Online Role Playing Game, they have the concept of a power bar. There are a series of slots on the bottom, like a horizontal list in Flex, and in each you can drop a power into. It’ll be represented as a little image icon that infers what the power does. Upon rolling over them, they provide details of what they do. Upon clicking them, you use them. While veteran players use keyboard shortcuts and macros, this GUI concept is the core to most MMORPG’s today. Players familiar with such games “get it”, just like you and I understand to click & drag on a scroll bar to scroll text.
World of Warcraft Power Bar
This interface element is important because in MMO’s, those powers, while forming the crux of the 2 most important aspects in those games, chatting & fighting, they also serve another subtle purpose. RPG games in general are technical. They basically take a lot of math, specifically ratio’s & percentages, and personify the results through the use of chance. While neat from a geek perspective, newbie players, especially those not tech saavy, can get overwhelmed by information overload.
Just like how Word hides non-frequently accessed information in menu’s that reveal, so to do MMORPG’s “reveal” information when the user requests it. Additionally, since these interface elements are actually over top of a 3D virtual world, they need to be as non-intrusive as possible.
In short, they provide the user with the ability to learn what their character can do, when she/he can do it, all using a mnemonic device of visual icons that relate to the action in a non-intrusive interface.
I’ve bashed her in the past and got shot down by desktop developers who came out of the wood work. To this day I still don’t get clients asking me to build AIR apps. Regardless, it was a pretty clear choice as to why I needed AIR: offline capability to run Flex apps.
You can play D&D ANYWHERE. I’ve played at friends houses, at a camp site deep in the woods, on a plane, a bus, etc. All of these places don’t always have internet. Nowadays with wireless and cell phones that have decent coverage, you can tether on your device to ensure you have an internet connection just about everywhere. “Just about” isn’t good enough; if you can’t use it, or it’s a spotty connection, you view the “cloud” as holding your data hostage vs. some benevolent caretaker.
So, I didn’t want an internet connection to be a requirement, and thus, targeted AIR vs. a web browser. If you know me, using the Flex SDK was a no-brainer. If you don’t, here’s the run down:
Once I personally started using Powerz in my game sessions, taking her for a test run with my gaming group, a new problem arose: setup time. While battles finally went a lot faster, and focused more on strategy and chaos vs. wtf can I do, actually STARTING to play took awhile. Players had to manually input the powers from the Players Handbook into Powerz. Without OCR, this is a lot of meticulous hand typing. This included those who played with made up house rules.
I thought, why couldn’t we do something like the CDDB days of old? CDDB was an online database where people would submit CD track lists. That way, when you turned a CD into MP3’s, it automatically filled out the song names and album name for you. By the time it got popular, most CD’s were in the database so you didn’t need to submit them yourself. This was the first Web 2.0 (aka the read-write web) phenomenon that I remember. Basically you are leveraging the community, much like Wikipedia leverages the knowledge from every contributor in the world. This is a double-edged sword, as sometimes CDDB would have incorrect data without an easy way to change it. Wikipedia has had its fair share of drama about article authenticity, and who defines the truth when multiple authors disagree about the same topic.
Regardless, both are using the forces of good, and showcase how leveraging community input can greatly benefit the masses. Two heads are better than one, and thousands are just f’ing awesome.
I set out to build an online database of powers so when one person submitted it, everyone else could use it. The most common ones, say all 1st level ones for all classes, would be ready to go. That way, even new players could quickly get up to speed. Powerz is supposed to speed up gameplay, and this would be the final lynchpin.
I hate, and suck, and server-side anything. I’d argue the majority of arguments, philosophical debates, and technical podcasts about software are regarding server-side development (iPhone apps aside). When people talk about Inversion of Control, server clustering, or Aspect Orientated Programming, my eyes glaze over, I face palm, and am like, “Wow… that’ll solve like 10% of my problems. That 10% is on the server… WHERE MY CODE ISN’T RUNNING!” To be fair, the majority of all cool software is running on the server. Most Flex apps I’ve written are merely pretty faces for pimp server-side action. The problem with server-side stuff is that you can’t see it. I’m a visual person, I went to art school, and if I can’t see it, to me it’s boring. I like seeing visual results from my coding efforts, and no, logging statements don’t count.
So… I knew I was in trouble with my idea. Every time in the past I had such an idea, I merely turned to PHP, since finding good server devs looking to work for free is really hard. PHP is available on just about every web host, for free, and there are a lot of resources out on the internet for it. It’s also very similar in syntax to ActionScript, so learning it was easy. The problem is, I’m not “in” the PHP community. Creating a user account system may seem like a reasonable programming task to me, but an ignorant waste of time to a veteran PHP programmer who has used Zend or Drupal on many projects. Most of my endeavors into larger PHP systems have failed because the workload was just to large for me to tackle both the front and back-end. I knew this time I HAD to find whatever framework others were using for a user account system. I’ve failed to find like-minded server-side developers in the past for such ideas. I actually had a friend offer his services for this very project, but I was concerned I might actually make money, and I make a rule of not mixing friends and business.
However, I had just got off a Django project. Having spent 5 years or so evangelizing AMFPHP, yet never actually successfully getting native object passing working, I decided I’d see how easy it was in Python. Additionally, my experiences using Django’s user administration interface along with PyAMF Flex integration was a very pleasant experience. Since I’d already taking a look at Ruby on Rails awhile ago, I figured I’d give Python a chance.
Best decision ever.
I don’t know Terminal, my SQL knowledge equates to SELECT * FROM *, and I’ve never coded Python before. Django is the shit. It’s so easy, I learned my way around Terminal enough to not only “run a local server” (I know, right?), sync my database, and even play with Python code, just like Director’s message window. I even learned how to remote ssh into my production server, install PyAMF remotely, and deploy my code. Django is merely a framework atop of Python, but you have to know all that insane crud just to do it. Oh yeah, and I ended up buying TextMate (in part to Kristofer’s recommendation) to use for coding Python.
Speaking of Python, it’s a LOT like ActionScript 1. Really strange going back to loose typing. Unfortunately, the only real benefit I found was more succinct code. The Aspect Orienated/Functional stuff that uses the Decorator pattern with metadata tags for designating what methods require the user to be logged in only works for more recent builds of Python. Still… I got it and think its hawt. Additionally, the fact that you can import just a method of a class and use it is neat. There’s been a request on an unnamed list requesting ActionScript 3 get this ability so when you import 1 method of a library, you don’t end up importing the whole library, and thus incur the file size penalty. Since SWF is for web, this makes a lot of sense in investing in such a feature. Python’s for loops? Holy fish, advanced, and really cool stuff, way easier than doing similiar things in ActionScript 3 (faster? doubt it). I still don’t get their slicing syntax, but I’m sure if I did it every day I would.
So why Django? Within 3 days I had learned Python, Django, and PyAMF integration to have a working user authentication system working in my Flex app. Blah blah blah… open source has no value… blah blah blah.
…I suck at debugging it, though, a friend told me to look into Python logging, but I just ran out of time… print print print OT OT OT. That, and my admin only works on my local box, not the remote server… *ahem*.
All my personal projects suffered from the most common symptom that affects a lot of us software developers: starting new projects is ALWAYS more fun than finishing them. You accrue a long list of awesome ideas that never make it to fruition. Of those, a few you blog about. Knowing this industry, a bunch are probably worthy of actually finishing and marketing because they’ll make bling… but… we’re a busy bunch. That, or you see no point because you have no clue how to monetize them.
I’ve had this happen 3 times with my major D&D online project in 5 years, 3 times with some games, and once with every other project that wasn’t specifically created FOR a blog entry since my career started. I almost swore a blood oath before starting Powerz. I didn’t really have too, though, because of circumstances.
First, I had just got off the best gig I’ve had in my entire career. It was working for a startup as a service consultant through Enablus. So, I make bling, but see $0 bling when they insanely succeed. Quite the soul reflection project. Second, I read a book called “Rich Dad, Poor Dad” upon a recommendation form a friend, and was then pissed for 3 weeks straight. Third, I now knew how to do Agile development which was better than my made up iterative process of the past. Fourth, D&D 4th edition really is slow if you don’t know your powers by heart; it’s even worse for DM’s who have 50 billion other things to keep track of. I needed this tool!
I made a simple rule. If I was going to work on Powers, I needed to release SOMETHING a week from when I started. If I grabbed a beer and started coding on a Friday night, there better be a new build, with associated forum post, WORKING up online the following Friday. If I had something come up, like say real, paying work, or my kid(s) got sick, or whatever…. then 2 weeks. If that didn’t work because, say I only had 4 hours in a 2 week period, then I’d lock myself into finishing just one feature before I was allowed to work on anything else.
Failure was not an option. To fail is to fail myself, and everything I stood for, and for those who listened to my blog entries full of “advice”. If I did fail, it meant Agile didn’t work, and all 10 of those blog entries I wrote espousing it were utter bullshit, and I needed to die in a fire. Seriously. After being so frustrated for so long about “figuring out” software development for the past 9 years, this was the line in the sand. Pick your platform, pick your tool, pick your framework, and either put up, or shut up. Get something done vs. proselytizing about “how to program” with nothing to show for it.
In short, finish something I started.
6 months later, I’ve released version 1.0. That feels f’ing good. Really good. That, and D&D is easier to play now for me, and a lot of others.
Remember, if you ever hear about this Agile or Scrum stuff, and are like, “Wtf?”, don’t stress. All you need to know about using Scrum correctly is release working software with a new feature every week (or every 2 weeks). That’s it, that’s all you need to do to be JXL Scrum compliant. If you don’t do that, you should really take a look at what you are really trying to accomplish.
If you’re a manager who’s trying to implement it, and your developers keep going off on paths they weren’t assigned, play to their ego’s. For example, if someone says, “I could write a login form in less than a day!”. If it then takes them 8 days for the form to actually work, call them on it. I guarantee you they’ll spout off about “OOP/Framework setup”, or some other lack-of-DRY-adherence excuse. That’s ok; the point here is to show them that what they thought they could do, they didn’t actually execute on. They’ll either re-assess what it really takes to develop even simple things, or you’ll come to a mutual understanding of what “working” really means.
I had to do that. In 2001, I created a stock charting application in Flash 5, AS1 pre-#initclip days, knowing very little OOP, zero best practices, and no frameworks, in 1 month. Today, that same application would take me 4 to 6 months, and cost 177% more per hour. Granted, the devil is in the details (quality of user experience, less bugs, more features, I actually know what I’m doing now + have experience, etc), but that, to me, says something about my ability to execute. Those in software know faster doesn’t mean better… but when you start splitting hairs about even simple features, you find some surprising things about yourself. I call this, programmer self-awareness through Scrum.
For those who are interested, here is how my schedule worked out. When I mention a week, I’m speaking about a week of development time. So, if I started coding on Friday night, but only put in 4 hours for an entire week… I certainly had very little to offer in a true build. So, my first rule was, if I could do a week, do a week, and release. If I couldn’t because I had real work to do, then I’d instead get 1 feature DONE and release. This was still hard, because even if I could only devote like 2 hours a week to my personal project, it HAD to be on that one feature, and I had to force myself to finish it so I could get a build up, and move onto another. It was far from perfect, but it’s as Scrum as I could get with my free time… and it guaranteed I’d release multiple builds with enough room for user feedback.
It’s hard for me to predict how long Powerz would of taken had I been able to spend 100% of my time on it. A lot of things came up, positively & negatively, during development that adversely affected the timeline. Users asked for features, work flows I originally tried didn’t pan out, Photoshop designs took a few tries, and learning Django staggered overall development on the Community portion. All I know is, Flex Builder 3 and Flex SDK 3.3 is foogin’ solid for what I needed.
The web site is pretty standard stuff. Forum is PHPBB, and blog is vanilla install of Wordpress. Hopefully post 1.0 launch, I can modify the blog to match the rest of the site look and feel (excluding forum) via the Dreamer, an easier way to design Wordpress sites via Dreamweaver. Her majesty used it for her site and it’s pretty cool. I also need to redo my dated screen cast, and tons of other things.
While I did the original web site designs in Photoshop, the site itself was done by her majesty and I in Fireworks. Fireworks’ text handling is superior to Photoshop’s, and now that CS4 shares the same font engine, you can get good looking interfaces. If Photoshop were to improve their text handling capabilities, I’d probably still use Fireworks for it’s easier object editing + grouping + moving functionality. For the web with lots of content, it was just quicker for me and her majesty.
For the video, shot using a Sony DCR-SR200, and edited in Premiere CS3 & After Effects CS3. ScreenFlow was used for demoing the software.
Yes, I very much wanted to use Flex 4. Unlike Flex 2 Alpha, however, she’s unstable and changes all the time. You could build some pretty Enterprise stuff on Flex 2, Beta 1. I would never do such a thing with Flex 4 just because she’s in such flux, and the IDE (+ Catalyst builds) is somewhat flaky. Obviously 6 months later things are more stable… but they still changed a lot (fx prefix, Halo interop, etc.).
I used Flex Builder 3 & Flex SDK 3.2… then 3.3… then 3.4. I use AIR 1.5.2. AIR still has a bug where you can’t seem to use compc (aka Library Projects) because of some weird Vector bug in playerglobals.swc or something. So I just gave up on using a library project.
I have 1 Flex project, and a ton of libraries. Ones of note are:
Blah blah blah… open source provides no value… blah blah blah.
There were 3 development challenges I faced.
The first was developing in AIR. If you are using Flex in AIR, it’s nearly the same thing. The hard parts were learning how Windows work, and their quirks (such as when does Window REALLY get its reference to nativeWindow?). How do you design for this as a designer, and what is an appropriate design metaphor? Multiple windows, or 1 window with many states? Also, event bubbling doesn’t work with windows, since each has it’s own stage, so there was a learning curve of when to manually re-dispatch, and when to just hand off to PureMVC Mediators.
The second was learning to work with reading and writing files. The FileReference class is EASY, but there are actually 3 classes (really you just work with 2) for AIR. They too have intricacies to learn, and how you can abstract them, and what the costs are in doing so. What was fun to figure out was how to associate a file with a document window in the PureMVC framework. I really had a tough time trying to tightly couple something when you’re technically not supposed to tightly couple anything in programming.
The third was creating a file format. I believe most traditional developers would of used some sort of serialization via ByteArray and the IExternalizable interface for your objects. To me, that stuff takes a lot of work, and isn’t easy for me to debug, nor verify if it worked. Maybe to those who think in 0’s and 1’s, but not me. It took some tinkering; I copied how SWC works. SWC is a ZIP file with some XML and binary assets all inside. My file formats are basically the same thing; a ZIP file with a JSON text file holding the serialized object, images for any icons, and a text file determining what type the file format is (since you can’t rely on file extension). This allowed me to open up the file to see it’s contents and confirm my code worked as well as perusing the JSON to see if my objects serialized correctly.
What was great about being the only developer was that I was also the designer and back-end developer. I knew how to design assets for Flex and could predict what I’d need designed. As the back-end developer, I could create data that the client would need, thus making my job easier in both places.
I had 2 features that caused major scope creep, and thus extended how long it took. They weren’t a waste of time, but as with every project, I learned something.
The first was the whole “document editing process” that people are used to. You open a file, edit it, save it if it’s dirty, and close the “document”. If you “Save As…”, you create a new file, yet use same window. I didn’t use this model at first. Instead, I just opened files, kept a reference to the file handle for each AIR window, and removed it when the window closed. However, this is not how every other desktop application works. Additionally, for those on network drives, you couldn’t really work with the files easily when moving things since it always had an opened file handle. So, it was a pretty big re-write/re-factoring effort to put this functionality & work flow in. I know how to do it now, but I’m just glad no one asked for undo yet. *whew*
The second was pimping out Christian’s NativeAlert window. I spent 3 days in AfterEffects when I was between gigs creating a transition in and transition out for the window. Instead of just popping in, it’d “materialize” in, all magical like. To me, and one of my users, it looked awesome. It got old after 2 uses because you had to wait for it and there are a few alerts when saving files. If I speed it up any, it loses fidelity… so I just removed it. It required a lot of custom code to make the alert do it’s modality magic in time with the transition. I didn’t get to use any of it.
This was the most interesting for me. While I’m not a good salesman, I feel that I get online marketing and branding. I also feel like I understand my target audience, since I’m part of that audience. I actually did market research (aka learning my target audience and their needs) both at the start and during development.
I looked online and read about what WotC was offering, and then I looked at all the 3rd party offerings. I took a few for a spin. I read user reviews on forums and blogs, especially the passionate ones. I wanted to gain a better understanding of what they liked about the software, and how they expected software to work. There wasn’t really a pattern. The bitching about lack of Linux/Mac support was low, and a lot of the 3rd parties utilized Java. For those that didn’t, there we already well documented ways of installing a Windows emulator.
One thing that reading the forums did for me was really educate me on the current flux of the industry. Technology really has changed, and continues to change, table top gaming. WotC is in an interesting time of the market, and frankly I’ve think they’ve done a good job on positioning their D&D brand & rules for 4th edition to perform well with these changes. Where they haven’t done entirely well is executing both their community aspects online, as well as delivering their associated digital tools.
The short version of WotC’s transition to the digital age is, as magazine sales declined, WotC first sold their magazines to Piazo, and later brought them back and incorporated them into their new online subscription service; they no longer print magazines. You get the monthly magazines digitally, exclusive content, as well as access to their desktop and web tools. There are good and bad things about this. Some of their software isn’t released years later, but the ones that are are definitely nice.
I wrote something similar to this over a the Powerz blog. Bottom line, there is a lot of confusion, at least for me, on who really is the target demographic. The high level view is that the older players prefer tangible rule books, whereas the younger ones are more apt to digital content. That’s where the black and white views end. Some from both groups are fine with digital content, but intend to transfer that content to paper in use in their games. Others would prefer to wholly digital, yet still play in person with their friends; like a LAN party.
I intended to confirm this suspicion beyond just talking online…
…so I took a trip to Dragon*Con 2009 this year. I go every so often to stock up on new dice as well as to see the 501st. My goal this year was to promote Powerz, and meet potential customers. I knew it would be challenging for a few reasons. First off, finding D&D players is actually hard. It’s a huge Sci-fi & fantasy conference; it’s not solely for D&D’ers. Additionally, most D&D’ers who do go play with their friends at predefined tables in a reserved hotel ballroom. These are usually niche groups, and while friendly, you can’t just barge in on them in a middle of game. If someone did that to me during mine, I’d be really ticked off. Additionally, the conference itself is confusing because it’s spaced around 4 semi-adjoining hotels (Hilton, Marriott, Sheraton, etc.), and signage isn’t large/verbose enough for you to get a clear picture of where you are, nor what events are happening where. I knew it’d be hard. Her majesty helped set my expectations to a reasonable level.
My first attempt was while waiting in dice line (like a food large buffet, except there are different colored dice you can choose from). One particular customer was taking awhile to get his transaction finished, and was in a TF2 spy costume (I think), so I figured he was a good target.
“Hey chief, you play D&D?”
“Yeah!”
“Cool, you play 4th edition?”
“Naw, 3.5.”
*sigh*
I then asked the attendant who was waiting on customers, but he didn’t play, just pointed to one of his co-workers; but they were UBER busy. Even Solid Snake briefly came out of his box to browse their wares. I didn’t want to annoy every customer, so moved to another vendor booth, full of D&D books.
A girl was just sitting down in a chair, and lamenting about how good it was to sit down. Prime target.
“Hey, you play D&D?”
“Yeah…”
“4th edition?”
Irritatedly, “Only because my group made me…”
“Rad, do you mind if you ask you a few questions about some software I’m building?”
Cautious, and body language suggesting she was about run at the slightest sign I was a vampire, “Ooookkkayy….”
I sat down next to her on the floor to make her feel more comfortable with my laptop, and briefly walked her through why I created Powerz, and what it does.
She immediately got excited, “Oh we already use that through our DM. He uses WotC’s subscription service… DD something…”
“DDO or DDi?”
“Yeah.”
“Which one?”
She shrugged but excitedly explained, “I don’t know, but it’s great. You can input all of your character data, and it prints out all your powers. Our whole group does it.”
I then proceeded to ask her questions about how her group plays, and take notes. Another gent from her gaming group joined in on the conversation, and motioned to a 3rd member who was also browsing books nearby. After I had asked my questions, I thanked them for their time… and went looking for a bar. I suddenly felt insecure, ‘How could DDi do all that? There is no way, I’ve seen the screen shots, read the reviews….’
While waiting for the bar tender who was overworked, and was already getting heckled by some disgruntled women next to me, I reflected on those I had talked to. I knew a lot of the older generation was very pro-3.5, me included. I really like, still, the 3.5 rules and felt they were akin to Macromedia’s Flash 8; the pinnacle of the company. I started getting really depressed, and quickly started going over all of my past research in my head.
…then I remembered something the girl had said. “Print them out.” Print? To paper? wtf? A smile came to my face, I gave up waiting on the bartender, and quickly headed to where I remembered the D&D gaming tables being the previous year. I stopped by the bellman’s desk to obtain some change so I could buy a few people beers in exchange for me pestering them with questions.
Paper. That was really what I kept seeing. The generation gap in that one prefers tangible assets to play with and the younger ones do not. Again, it’s not that black and white sometimes, but it’s still true. While waiting 1 hour and 40 minutes in line, I met a father who had brought his 11 year old daughter to “meet” the creators of the online game she played. It was some alternative to Club Penguin, which was apparently ruined under new management. She was really excited, and wanted to be a programmer when she grew up. The father, clearly out of his element, saw me in my business professional getup, clearly over dressed for such a casual, and often costumed event, and seemed happy to have some one to talk to. He found it strange that his daughter would spend his money on these online games for things that didn’t exist. Instead of a new barbie doll, she’d get a some new, exclusive outfit for her online character. We discussed her online habits, and those of her friends. I explained what I did, and he was intrigued.
His daughter is my target audience. The girls and boy in front of her, definitely early teens, one dressed up as Naruto, and others as Sango from InuYasha… those are my target audience. They grew up texting, the internet always existed. Those who were my age, dressed up as star trek characters… those probably aren’t my target audience. These kids revel in online content, but still have social interactions with each other in person.
People like me, and the kids who are used to digital tools don’t mind keeping things digital. Others see digital tools as a means to a paper end.
Upon leaving, I was convinced my target audience was mostly online and not at Dragon*Con… or at Dragon*Con WITH their PARENTS. It was a great learning experience, even talking to the few people I did was helpful.
The project as a whole, while successful, failed to meet one of its primary goals: make money. It does have some successes, which I document below. I had two main goals: releasing a product to prove I could execute, and to make money, enough to cover costs. Currently, there is not enough community features to justify a subscription pricing model. Additionally, I highly doubt I’ll get enough users to cover the costs via the ad supported model I use currently.
If you add up all the costs:
The total comes to around $50,000. Each month I go $40 more into the hole as the ads currently aren’t providing enough revenue to cover costs, and I haven’t figured out how to monetize the anonymous usage data.
I have a new idea that will actually generate revenue, and Powerz could actually be a companion application, so that’s a positive.
I’m not sure about this statement, but… here goes: I’m glad I know I’m capable of executing vs. knowing how to make money and not execute. This, as opposed to someone who knows how to make money, but can’t execute. The sad fact is, most rich people I read about know how to make money, and get other more qualified individuals to execute for them. Doh!
As a developer, however, I view this as yet another thing to learn, so that’s a good thing! If I start learning how to monetize things better, I can focus my development efforts on what matter monetarily, and eventually find easier ways to leverage help vs. doing everything myself. If at first you don’t succeed, try, try again.
My favorite part, the wins.
While I’m disappointed I failed to monetize my work, it’s still early in the game, so maybe I’ll think of something. Overall, I’m really happy to have finally finished one of personal projects into an actual product. That, and I learned a ton. Soon, onto idea #2!
If you play D&D 4th edition, check it out and let me know what you think. If you don’t, but know people who do, let ‘em know; I’d be most appreciative!
Source: Steve Howard's eLearning ++ Blog by stevehoward999
I’ve been busy recently, so you have had to suffer another one of my blogging dearths. Fear not dear reader, I’m still here, hale and hearty and in one complete piece.
I’m speaker at this years Adobe Learning Summit, where I will be talking about the value that Adobe brings to the eLearning Suite by adding integration between the various tools. Since I am a developer, not a teacher or Instructional Designer, this topic is close to my heart. I don’t claim to be expert in many tools, but I do have to dip my feet into many and various tools in order to do my work. The integration on the eLearning Suite can improve my workflow significantly.
In the last couple of years I have travelled to San Jose for the eLearning Guild’s DevLearn conference. With each visit, I learn more, I network more, and I become more impressed by the professionalism and organisational brilliance of the eLearning Guild team. This is a great conference, with its heart firmly set in eLearning, and a solid bias towards the more technical aspects of eLearning (tools and technology) rather than the teaching aspect. That’s not to say that there’s nothing there for Instructional Designers, teachers and managers, just that DevLearn is a great conference for people like me who are tasked with making the technology do what the educators need.
I will be speaking at Devlearn
This year, I am also speaking at DevLearn, where I will talk about some of my favourite features in the Adobe eLearning Suite. This is a similar session to the one I presented at the Annual Gathering earlier this year, though it will be updated to reflect my more recent experiences.
Posted in eLearningSource: Edublogs - teacher and student blogs by James
About a year ago, we started selling domain names and the ability to use your own domain names on Edublogs blogs.
Well, after we did that for a while, we changed over to the Supporter model and that became tricky… but no longer, because we’ve decided to bundle free domain mapping in with Supporter, so that every single supporter can now use their own domain… at no extra charge!
How does it work? It’s really easy… let’s take Sue as an example:
So, Sue’s old personal blog had the very catchy URL of “aquaculturepda.edublogs.org” which was a bit off, seeing as it started life as ‘Mobile Technology in TAFE’ and then became ‘Sue Waters Blog’ ;)
So, we did the very simple thing of going out and purchasing suewaters.com (for less than $10), and then configured the A record by following our handy Using Your Own Domain guide.
Then we visited Tools > Domain Mapping, and simply entered the new domain there:
And that’s all there was to it… now you can catch Sue Waters at… suewaters.com!
As mentioned above, this is a new feature for Edublogs Supporters, at no extra cost, which we think is pretty darn cool.
Let us know any bugs / questions / comments / thoughts below :)
Source: Steve Howard's eLearning ++ Blog by stevehoward999
Recently, a couple of different people asked me about Short Answer questions in Captivate 4. Apparently, when you create and publish a Short Answer question, the text entry box that your learner types into has small, 8-point text by default. That’s fine, you might think, but there is no way to edit the properties of this text entry box, so you are stuck with 8 point text.
Short Answer questions in Captivate 4 have tiny text in the answer box
I contacted ‘RJ’ Jacquez via Twitter and asked him about it. RJ is the Adobe Evangelist for eLearning and Technical Communication, which means he is a great go-to guy for all things to do with the eLearning Suite and the Technical Communication Suite from Adobe.
Quick as a flash, RJ confirmed that it was indeed true, there is no way to format the answer text in a Short Answer question in Captivate 4.
Now, here is where things get interesting. Most of the time, when an issue like this is raised, it must be reported as a bug and a fix may not appear until the next release of a product. But the Adobe Captivate engineers are special bunch – they rustled up a fix for this issue that requires no formal patch to Captivate 4.
Those of you who are familiar with Captivate 4 will know that a new feature called Widgets. Widgets can be devised that extend Captivate’s features and functionality way beyond the original intent of the Captivate engineers. Those same engineers have realised that they can also fix some issues with the product by using Widgets.
This Short Answer Input Text Formatting widget is a simple and quick fix
… and so they made a widget that can be used to customise the font settings for the Short Answer question. This Widget is a 50k download, so it’s quick and easy to get and ind install. The only caveat, so far as I can see, is that the Captivate file must be published as ActionScript 3.0. The fix will not work if you publish your file as AS 2.0 compatible.
Here's the same question with the answer text reformatted
So where can you get this fix? RJ has a simple demonstration o fthe problem, which you can view here https://admin.adobe.acrobat.com/_a295153/p84127193/. At the end of the demo, there is a link to the download of the Widget file, and instructions on where to install it.
You should follow RJ on Twitter if you want to get the best and latest eLearning and Technical Communication Suite tips and info @rjacquez
Thanks RJ and the Captivate team!
Posted in eLearningSource: Matt Chotin
I'm always excited to see how many books have been written about Flex. While I haven't read this, another one has come on the market recently covering Flex and Java, making sure that you know how to work with the...Source: Matt Chotin
Our engineering team is looking to host a session explaining the changes coming in the automation APIs for Flex 4. This session will only be useful to those who have created an agent in the past and are looking to...Source: Matt Chotin
So I go away for my sabbatical and when I come back, look at all the things that have happened with MAX! We announced, we opened up registration, and we've even already put up the scheduler for you to check...Source: Matt Chotin
Want to learn more about the next generation of Flex, including the updated framework, tools, and new tool Flash Catalyst? Register for the free FlashCamp held at Adobe's San Francisco office on May 29. Lots of engineers, lots of beer,...Source: Amy's Flex Diary by Amy B
You've probably noticed that I haven't posted much lately. This is because in January, I was hired to do contract work in ASP Classic and SQL Server for a company called voip.com. While working for them, I've done a couple of Flash projects, but no Flex so far. They also keep me hopping pretty well, so I haven't had as much time for blogging as I'd like.I also recently signed up to do a weeklySource: Matt Chotin
Velo announced on Flexcoders today that a major update to the Flexmojos project is now available over at Sonatype (the folks who support Maven). There's also a tease in his announcement that the m2eclipse project when it hits version 0.9.8...Source: Steve Howard's eLearning ++ Blog by stevehoward999
The new custom variables in Adobe Captivate 4 make it fairly easy to capture, store and display your users name. Once stored you can also add the name to the Certificate widget and use it in many other ways. It is not immediately obvious just how you might achieve this, so I put together a quick demo that should show you all you need to know.
Click this image to view the full demo.
Posted in Adobe, Captivate, eLearningSource: Steve Howard's eLearning ++ Blog by stevehoward999
I’ve seen a number of people asking about the Coursebuilder extensions that are installed to Dreamweaver CS4 in the Adobe eLearning Suite. Specifically, people have been trying to find out what is different between this version of Coursebuilder, and the version that was available a few years ago.
So I asked the Adobe engineers who have worked on this, and this is the response I got:-
The Course Builder in eLS has loads of new features, following is the list of new features added
3 new Interaction types
- Matching – Drag and drop, Combo box type.
- Sequence Interaction
- Likert Interaction
SCORM 1.2 and 2004 Compatibility
All the interactions support SCORM 1.2 and SCORM 2004 along with AICC. The selection can be made in the tracking tab. Based on the setting in the tracking tab, Actions in the action manager can be selected for tracking the score.Compatibility with Different Browsers
The New Course Builder supports the latest versions of Mozilla Firefox and Internet Explorer.New look and feel
The Interactions carry new icons and the Course Builder Wizard does not carry the legacy scroll bar.
So there you have it, from the horse’s mouth, so to speak.
Posted in eLearningSource: Amy's Flex Diary by Amy B
A little known fact is that I met my husband, Steve Howard on the old macromedia user forums. At one point, he and I were both members of Team Macromedia, then we made the transition together to being Adobe Community Experts. Adobe and I had some "differences of opinion," so I am no longer a Community Expert. However, we both still have a close and friendly relationship with Adobe.He appliedSource: Amy's Flex Diary by Amy B
Last weekend, someone asked for ane example of being able to load a swf generated from a Flex Application that implements an interface and being able to load a Flash swf that implements the same interface. Once the swf's are loaded, the poster wanted to be able to cast them to the interface and then use the interface to call methods on the loaded swf.So, I've posted an example of castingWe made a big change to the Adobe Groups homepage today. Now, when you log in, you'll see a list of all groups that you have joined right there on the page.
No more bookmarking groups or having to go to your profile page to see the full list!