Monday, May 11, 2009
- 9:00 am - 5:00 pm - InDesign Programming in C++
- 9:00 am - 5:00 pm - InDesign Markup Language
- 12:00 - 3:00 pm- OpenCL and CUDA
- 7pm - 10pm - Welcome reception for all attendees
Class Descriptions
InDesign SDK Training
Please note that this class is offered by a third-party. Adobe is not collecting fees for this class, nor is Adobe handling registration. If you are interested in attending this class, please use the registration information below.
Offered by Kris Coppieters and Rorohiko
9:00 am- 5pm
Cost: US$1149.00 per person
Registration: To check availability and/or to register,
e-mail us at training@rorohiko.com .
Make sure you book early - space is limited to 12 seats.Enrollment
closes on Friday, 1st of May - make sure you don't delay. No new enrollments
will be accepted after Friday.
Remote Access: This class will not be broadcast remotely
Description:
Getting started with Adobe InDesign Plug-Ins? Is your team in need of more InDesign developers? Want to be more efficient at developing InDesign Plug-Ins?
Getting up to speed with the InDesign SDK easily takes between two and six months of non-productive time.
Attending this one-day workshop will shave at the very least one month from this non-productive lead time. No doubt you have a good idea what the cost of one developer-month is, so you can easily estimate what value this workshop is to you.
Target audience
Check if your profile fits one or more of the following:
- you are or will be involved in InDesign Plug-In development
- you have some experience in C or C++ development
- you might have experience with QuarkXPress XTension development
- you might have experience with other Adobe SDKs
- you might currently already be doing InDesign plug-in development 'by example': you copy, paste and mold example code into a plug-in, but you know there are some things about the code you don't fully understand.
If you fit the above description, you really should enroll in our one-day InDesign SDK workshop.
About the course
If you have this nagging feeling the InDesign SDK documentation almost makes sense, but not quite, and some things unexpectedly make no sense at all - rest assured, you're not alone, and this workshop is for you!
As the InDesign SDK Workshop is only one day long, and the InDesign SDK is massive, it is impossible to cover even the basics of the InDesign SDK.
For maximum effect, we've instead compiled a list of what we found to be the most important stumbling blocks for experienced and beginning InDesign Plug-In developers alike. The aim of the workshop is to help a developer blaze a path into the SDK, towards early productivity.
1. Advanced C++ programming techniques explained
The InDesign SDK hinges on a number of fairly modern, advanced programming techniques.
Without a thorough understanding of these techniques, an InDesign plug-in developer will often be forced to blindly copy boilerplate code without grasping the mechanisms behind it, which often leads to baffling and hard-to-diagnose bugs and strange behavior.
This issue especially affects C programmers who have been thrown in at the deep end and are forced to use C++ without having had the time to find out how C and C++ are different.
Even though C++ originated in C, it should be approached as a totally different language, and using C++ with a C mindset makes the developer miss out on a number of highly efficient programming techniques.
Examples of concepts one needs to master are: smart pointers, abstract classes, string classes, memory management, reference counting, references vs. pointers, avoiding unwanted dependencies, templates, STL, the boost library.
2. Patterns explained
Another key pillar of the InDesign SDK are a number of patterns - generic programming approaches that help breaking up a complex program into smaller, reusable elements.
Example patterns applicable to the InDesign SDK are: factories and factory methods, singleton, adapter, façade, command, iterator, observer,... Having a good basic understanding of these patterns helps making the InDesign SDK documentation much easier to understand.
3. Getting started
How to get started and how to set up a clean development environment. In many cases, development environments are 'grown' organically.
That works, but if for some reason you lose your development environment (e.g. you get a new laptop - yey!), setting everything up from scratch can be a pain.
This can be avoided by defining a development system setup standard - i.e. a description of how to set up a development system, what to install, in what order, where to install it, where to get it from,...
If this is done properly, setting up a new development system can be much less time-consuming, and on top of that, your transported projects can compile without a hitch - no need for adjustments.
This section of the workshop explores a real-life, proven development system standard. This standard can then be used as a starting point for your own in-house standard.
Defining such a standard is a little up-front investment with a tremendous payback; and as a bonus, it also works better with source code control systems.
4. IDE files
InDesign SDK developers need to be quite familiar with their IDEs. More often than not, a developer will use more than one IDE on a plug-in project - CodeWarrior, Xcode, Visual Studio.
A good understanding of the basic structure of a plug-in project allows you to quickly diagnose issues - all too often, projects are simply copies of SDK samples that have been gradually transmogrified into something that works, but without really understanding the various settings.
This leads to 'brittle projects' - where a single preference change causes unexpected problems, or where something that should be an easy, global change does not propagate properly to subprojects.
Things looked in this section at are how to 'clean out' IDE projects in an efficient way to remove needless, possibly lethal dependencies, remove unneeded settings, and rationalize dependencies.
5. InDesign SDK concepts
The InDesign SDK is an abstract object-oriented environment, populated by abstract entities called 'boss classes', 'boss objects', 'databases', etc... This environment is layered on top of a few other nested abstract environments.
Right at the bottom layer we find C++, then some layered abstractions in-between, and finally at the top layer we have the InDesign SDK.
Because they are separated by multiple layers of abstraction, C++ has very little to do with the InDesign SDK. In some respects, C++ is not much more than a low-level detail of the InDesign SDK.
The problem is that both C++ and the InDesign SDK are object- oriented, and as a result, they use the same words to describe similar concepts, but at a totally different level of abstraction - e.g. 'parent', 'child', 'inherit', have similar meaning both in the C ++ world and in the InDesign SDK world, but they are really a long way removed from each other by multiple layers of abstraction.
When reading source code for an InDesign plug-in, it is often hard to understand what level of abstraction to 'think at'. Compare it to electronics, networks and network protocols. The word 'port' can mean:
- a TCP/IP port (a highly abstract thing)
- an Ethernet port (a little hole in which you plug an Ethernet cable)
- a logic gate port (one of the little solder pads on an integrated circuit)
All meanings of the word port share some features (e.g. you can connect to a port - on all levels of abstraction), yet they are totally different things.
The same thing happens in the InDesign SDK - if one person is talking 'C++' and the other person is listening 'InDesign SDK', things won't make sense.
This aspect of the workshop is about how to know from the context what level of abstraction to 'think in' when reading documentation or source code - and what sounded like gobbledygook before suddenly makes sense!
6. Testing and debugging techiques
Because InDesign is such a massive system, plug-ins have to run in a fairly complex environment, and making sure your plug-in is as robust as possible in a number of respects is an important aspect of plug-in development.
To make your plug-in as robust as possible, testing (in the debug as well as in the release versions of InDesign) is important, and needs to be inherently designed into your plug-in.
If testing is part of your development process from the get-go, there are much less baffling bugs to diagnose. This section will handle various testing techniques and testing tools available, and how to use them to tackle bugs.
Logistics
The US$1149.00 price of the training includes lunch on Monday, the 11th.
During the course there will be very little or no time for hands-on; you also need to bring your own laptop if so desired.
You also need to arrange your own lodging and travel - Kris will be staying at the Courtyard Marriott on Union Bay during the summit. There are no hotels within walking distance of the campus - this is one of the closest.
InDesign Markup Language
Please note that this class is offered by a third-party. Adobe is not collecting fees for this class, nor is Adobe handling registration. If you are interested in attending this class, please use the registration information below.
Offered by Movemen
Schedule: four 90min blocks with coffee breaks and a lunch break
Cost: USD $990 per day per attendee; prepaid; lunch included.
Target audience: The workshop targets developers and architects who need to integrate InDesign Server and investigate using IDML. We expect knowledge in XML and style sheet transformations (e.g., XSLT) and, for one block, C++ and InDesign SDK knowledge.
Registration: info@movemen.com
Remote Access: This class will not be broadcast remotely
The workshop is about IDML, how we can build value on top of it and (some of) its limitations.
IDML offers various new and exciting ways to integrate with the InDesign product family. It allows us to prepare entire documents, stories, or snippets without doing any InDesign plug-in or scripting development. Just based on information we already maintain in our asset or content management systems.
And if this is not enough: IDML is extensible. We may add our own structures to IDML using plug-ins.
Please note: the term IDML represents the format and also the file type for a full InDesign document exported in IDML. Other file types containing IDML are, for example, ICML (story snippet) and IDMS (page item snippet).
Our workshop features high-level aspects as well as hands-on parts based on incomplete sources. No worries, you'll get the complete sources as well.
We will focus on:
- generating minimal IDML from scratch
- getting content and layout out of IDML
- adding content and layout to IDML
- how and why to separate implementations for the INX and the IDML DOMs to express your
OpenCL and CUDA
Please note that this class is offered by a third-party. You do not need to register with Nvidia to attend this class.
By Nvidia
Noon - 3pm
Cost: Free
Recording: http://my.adobe.acrobat.com/p89041307/
Description:We are at a cusp of the next generation in how problems are solved using computers. NVIDIA has broken the processing barrier between data processing and media processing to lead the charge into a new way of using a computer to work through problems. This innovative method is to use the graphics processing unit(GPU) for computation. This is extremely powerful new way of using the computer has proven to provide great performance increases for your software.
This talk will cover the broad range of
the GPU uses, What GPU compute means, and how to take advantage of the
it to perform computation. The talk will appeal to people unfamiliar with
the GPU programming as well as people that are experienced with it. Market
information and perspective will be provided to allow you to make the best
decision as to how to best take advantage of the GPU. You will also learn
the nuts and bolts about how to move computational processing from the
CPU to the GPU to tap into the incredible processing power of the GPU.
You should expect to walk away from the class with enough knowledge to
begin making use of the NVIDIA® CUDA™. The course will cover the leading
GPGPU architecture for computation, CUDA, along with the other APIs like OpenCL
.
CUDA is a general purpose parallel computing architecture that leverages
the parallel compute engine in NVIDIA graphics processing units (GPUs)
to solve many complex computational problems in a fraction of the time
required on a CPU.
With over 100 million CUDA-enabled GPUs sold to date, thousands of software developers are already using the GPU to solve problems in a variety of professional and home applications - from video and audio processing and physics simulations, to oil and gas exploration, product design, medical imaging, and scientific research.
NVIDIA is the world leader
in visual computing technologies and the inventor of the GPU, a high-performance
processor which generates breathtaking, interactive graphics on workstations,
personal computers, game consoles, and mobile devices. NVIDIA serves the
entertainment and consumer market with its GeForce
(R)
products, the professional design and visualization market with its Quadro(R)
products, and the high-performance computing market with its Tesla(TM)
products. NVIDIA is headquartered in Santa Clara, California, and has offices
throughout Asia, Europe, and the Americas.










