Main Page

Agenda

Class Feedback

Twitter: #csbuDevSummit

Corporate Participants

Monday, May 11, 2009

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:

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:

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.

Reception at Jillian's

We start off the official conference with a reception at Jillian's, a short walk from the Courtyard Marriott. This is a great way to get into the groove of the conference, re-introduce yourself to peers, and meet some new Adobe employees. This isn't just drinks and snacks - it's an important part of networking with the developer community.