August 18, 2012

Pixel Bender for After Effects CS6, courtesy of aescripts

When it was decided to stop support for public Pixel Bender filters for After Effects, some Pixel Bender developers where wondering if they could find a way to keep using their kernels. Luckily, aescripts has come to the rescue with their recent release of their Pixel Bender Kernel Accelerator.

more info:

6:01 AM Permalink
July 31, 2012

The Revel team is hiring! Developers, White Box Quality Engineers and Program Managers.

My organization is having a bit of a growth spurt and we’re looking for good folks with a passion for Photography and making high-quality, easy-to-use software for desktop, tablets, phones and the web. Here are the positions we’re looking to fill:

The Revel client team is looking to hire two senior computer scientists. This team is building the Revel client for desktop and mobile. You can find out more about the positions from this link and this link.

Prefer coding in Ruby to ObjC or C++? The Adobe Revel web services team is hiring both a computer scientist and white box quality engineer.

The Adobe Camera Raw team is looking for a talented engineer with a passion for photography. This image processing engine not only powers applications like Lightroom on the desktop, but also Revel on mobile, and is a major part of other products like Photoshop, Photoshop Elements and others.

Finally, we’re also looking for an experienced Program Manager to work with me, the engineers, and our Product Managers.

If you are attending the Siggraph conference next week and would like to talk more about any of these positions, leave a comment here or send me a tweet and we can talk.

For more information, see http://www.adoberevel.com/.

6:35 AM Permalink
January 11, 2012

Issue updating Adobe Revel 1.1 from the Mac App Store?

Several users have encountered a bug in the Mac App Store when upgrading from Adobe Carousel 1.0.3 to Adobe Revel 1.1. The issue is that the app fails to update and you get an error message:

revel update error message

revel update error message

To fix the issue, after seeing hash mismatch error:

  1. Close MAS
  2. Delete Adobe Carousel
  3. Open MAS
  4. Search for Adobe Revel, if not there, search for Adobe Carousel.
  5. Re-install.

These steps have worked for several folks, so let me know if they don’t work for you.

7:23 PM Permalink

New Adobe Carousel release and name change to Adobe Revel

Tonight we went live with the 1.1 version of Adobe Carousel, this fixes a bunch of mostly small bugs and adds a couple new features as well: auto-import from camera roll and posting to flickr. We’re working on a bunch of new features now for another release soon, some requested by you on our forums. Keep those requests coming!

Another major change with this release is that the app is now called “Adobe Revel.”

There is more information on the product page and on the Photoshop Blog.

We reached a few milestones recently that the team is also pretty proud and excited about. We are now managing more than 21 million customer images. The application has also been downloaded almost 4 million times. We want to continue to improve the application and make it ever more useful and fun for you to use, so please send us your suggestions and feature requests!

[Update 1/11/12]
I forgot to include the links to the app store:
iTunes (iOS): http://itunes.apple.com/us/app/adobe-revel/id455066445?ls=1&mt=8
Mac App Store (OS X): http://itunes.apple.com/us/app/adobe-revel/id455068834?ls=1&mt=12

6:26 AM Permalink
November 14, 2011

Speaking this week at the SC11 conference in Seattle

I’m privileged to once again be speaking at the SC conference. For those who don’t know it; “SC is the International Conference for High Performance Computing, Networking, Storage and Analysis.” If you are attending, I’ll be on a panel entitled Parallelism, the Cloud, and the Tools of the Future for the next generation of practitioners. I’ll be joining some of my compatriots in the Educational Alliance for a Parallel Future to once again discuss the skill sets that collegiate computer science programs should (and mostly aren’t) imparting to their students in the areas of parallel programming.

The abstract for the panel is as follows:

Industry, academia and research communities face increasing workforce preparedness challenges in parallel (and distributed) computing, due to the onslaught of multi-/many-core and cloud computing platforms. What initiatives have begun to address those challenges? What changes to hardware platforms, languages and tools will be necessary? How will we train the next generation of engineers for ubiquitous parallel and distributed computing? Following on from the successful model used at SC10, the session will be highly interactive, combining aspects of BOF, workshop, and Panel discussions. An initial panel will lay out some of the core issues in this topic with experts from multiple areas in education and industry. Following this will be moderated breakouts, much like collective mini-BOFS, for further discussion and to gather ideas from participants about industry and research needs.

If this sounds similar to the session from the Intel Developer Forum in September, there is good reason. It was the second most popular session of that conference. The IDF panel and breakout sessions covered some really interesting ground, and I really liked the format. I felt like the discussions I had with the people in my subgroup at IDF were deeper, more specific and more productive than a traditional panel format would have been.

While the speakers in this panel are different than the one in September, I think we’ll still end up splitting on the axis of using abstractions to teach fundamentals vs teaching from the first principles up. Which camp you are in seems at least somewhat determined by the fact that a number of panelists produce abstractions over the low-level elements as part of their work. I am very much in the fundamentals camp as I think that understanding what the abstractions are built on is fundamental to choosing the right abstraction, much as artists tend to start with representative figure drawing. What will make an interesting difference from IDF is the number of audience members who come from outside of computer science (HPC is used more by scientists for whom the computation is only a means to the end of solving a problem in a non-computational discipline). Those audience members are less likely to understand the fundamentals, nor care. For them parallelism is just a tool to get their answer faster. This should really make for a lively debate!

My statement for the panel is as follows (yes, I did crib the last paragraph from my earlier position):
The team I manage is building a single, modern, software product. A few years ago, that would have meant a desktop application written primarily in C++, most likely single-threaded. Today, it means software that runs on the desktop, but also on mobile devices and in the cloud. Working in my organization are developers who write shaders for the GPU, developers who write SSE (both x86 and ARM), developers using distributed computing techniques on EC2 and threads everywhere throughout the clients and server code. We write code in C, C++, ObjC, assembly, Lua, Java, C#, Perl, Python, Ruby and GLSL. We leverage Grand Central Dispatch, pThreads, TBB and boost threads. How many of the technologies that we use today in professional software development existed when we went to school? Nearly none. How many will still be used in a few years from now? Who knows. The reason we can continue to work in the field is that our education was grounded not just in programming techniques for the technology of the time, but also in computer architecture, operating systems, and programming languages (high level, low level and domain-specific).

Learning GPGPU was much easier for me because I could understand the architecture of graphics processors. I was able to understand Java’s garbage collection because I understood how memory management worked in C. I chose TBB over Grand Central Dispatch to solve a specific threading problem because I could evaluate both technologies given my experience
with pThreads.

We’re doing students a disservice if we teach them the concepts using high-level abstractions or only teach them a single programming language. Having an understanding of computer architecture is also critical to a computer science education.

These fundamentals of computer science do not necessarily need to be broken out into their own classes. They can and should be integrated throughout the curriculum. Threading should be part of every course. It is a critical part of modern software development. Different courses should use different programming languages to give students exposure to different programming models.

If I was a Dean of Computer Science somewhere, I¹d look to creating a curriculum where parallel programming using higher-level abstractions was part of the introductory courses using something like C++11, OpenMP or TBB. Mid-level requirements would include some computer architecture instruction. Specifically, how computer architecture maps to the software that runs on top of it. This may also include some lower level instruction in things like pThreads, Race conditions, lock-free programming or even GPU or heterogenous programming techniques using OpenCL. In later courses focused more on software engineering, specific areas like graphics, or
larger projects: I¹d encourage the students to use whichever tools they found most appropriate to the tasks at hand. This might even include very high level proprietary abstractions like DirectCompute or C++AMP as long as the students could make the tradeoffs intelligently because of their understanding of the area from previous courses.

You can read the position statements from the rest of the panel here.

11:09 AM Permalink
October 28, 2011

Adobe Carousel is now available!

I’ve been waiting a very long time to finally post this. Adobe Carousel is now available in the Mac App Store and the iTunes app store!

Getting this into your hands required a tremendous effort from a great team, and there is a lot more to come. More than just supporting more platforms like Android and Windows. This first version is just the tip of the iceberg. We wanted to put it into your hands, but it isn’t done. There is a lot more we want to do, but we want to hear from you. What do you need to make Adobe Carousel work even better for you? We want to know. We’re already hard at work on the next release, and hope to put it into your hands soon. Until then, download the client from the Mac App Store (requires Lion) or the iTunes app store. We have a 30 day free trial. Upload some photos, create a new Carousel to share with family or friends. Edit your photos and see how much Adobe imaging power we’ve been able to fit in your hands. The subscription pays for UNLIMITED storage for both you AND THE PEOPLE YOU SHARE WITH. That is a pretty serious deal.

Want to know more? This post on the Photoshop blog provides a lot of the official details and links.

This video summarizes what we are trying to create:

and this video tells you more about the team that I am so proud to be a part of (no actors, just really us):

Wondering why I sound so tired in that video? We shot it only days before we finished the product and we’d all been putting in long hours for weeks!

7:50 AM Permalink
October 11, 2011

Are you graduating this fall or spring? Do you love photography and writing code? I may have a job for you!

I currently have two positions open for students graduating with a bachelors or masters degree on my team, Adobe Carousel. One position is for a developer and the other is for a white box test developer. The requirements for both are very similar, since both are coding positions. I need strong coders with experience in C/C++ as well as ObjC, Java or a functional language. We are building on a heavily threaded foundation, so familiarity with multi-threading is important. You’ll get to work with some amazing developers on a product that is both interesting to work on and a lot of fun to use. Plus, your family and friends will want to use it so you won’t constantly have to answer questions about what it is you work on!

Here are links to the positions:

FY12 New Grad- Member of Technical Staff – Adobe Carousel

FY12 New Grad- Member of Technical Staff, Quality Engineering – Adobe Carousel

 

Want to know more about the team?

1:01 AM Permalink
September 4, 2011

Speaking once again on Parallelism and Computer Science Education at the Intel Developer Forum

As a hiring manager building teams working on modern computer software; I’ve often been disappointed in the lack of a proper foundation in parallel algorithms and architectures being taught in current Computer Science curricula. To that end, I’ve been working with a group called the Educational Alliance for a Parallel Future that aims to improve Computer Science curricula in this critical area. The EAPF is once again convening a panel of educators and industry representatives to talk about this important issue and once again I am delighted to participate.

The panel is entitled: Parallel Education Status Check – Which Programming Approaches Make the Cut for Parallelism in Undergraduate Education? Unlike previous iterations of this panel where we spoke in generalities, this time we’ll be diving a bit deeper into specific technologies that we think are good starting places for educators to introduce to their students.

Here is an excerpt of the abstract:
The industry and research communities face increasing workforce preparedness challenges in parallel (and distributed) computing, due to today’s ubiquitous multi-/many-core and cloud computing. Underlying the excitement over technical details of the newest platforms is one of the thorniest questions facing educators and practitioners — What languages, libraries, or programming models are best suited to make use of current and future innovations? This panel will confront this conundrum directly through discussions with technical managers and academics from different perspectives. The session is convened by the Educational Alliance for a Parallel Future (EAPF), an organization with wide-ranging industry/academia/research membership, including Intel, ACM, AMD, and other prominent technology corporations.

The panel will be presented on September 15th, 2011 at 10:15am as part of the Intel Developer Forum 2011 at the Moscone Center in San Francisco, California. There are free passes for interested educators. Register now for a free IDF day pass using promo code DCPACN1.

My specific take has always been that I am not as interested in grounding in a specific parallelism library or abstraction. The pace of change in this area has only increased over the last few years with the rise of multi-core, GPGPU, HPC and heterogenous computing. Techniques and libraries have arisen, gained adoption, and fallen out of favor one after another.

A developer who only understands how algorithms can be mapped to OpenMP-style libraries is not as useful once the team moves to Grand Central Dispatch or OpenCL. A grounding in traditional task-level parallelism as well as data-parallelism techniques is a starting point. It is important not only to understand what each of them are but the different types of problems that they are each applicable to.

Higher level abstractions like OpenMP are good for introductory courses. However, it is important to understand fully how high-level abstractions map to lower level implementations and even the hardware itself. Understanding the hardware your software runs on is critical to find the best performance for your code. It is also critical to understanding why one particular higher level library might work better than another for a particular task on specific hardware.

Once you understand things like hyperthreading, pThreads, locking mechanisms, and why OpenCL or CUDA maps really well to specific problems, but not to others, then you can return to using higher level abstractions that let you focus on your algorithm and not the details.

If I was a Dean of Computer Science somewhere, I’d look to creating a curriculum where parallel programming using higher-level abstractions was part of the introductory courses using something like C++11, OpenMP or TBB. Mid-level requirements would include some computer architecture instruction. Specifically, how computer architecture maps to the software that runs on top of it. This may also include some lower level instruction in things like pThreads, Race conditions, lock-free programming or even GPU or heterogenous programming techniques using OpenCL. In later courses focused more on software engineering, specific areas like graphics, or larger projects: I’d encourage the students to use whichever tools they found most appropriate to the tasks at hand. This might even include very high level proprietary abstractions like DirectCompute or C++AMP as long as the students could make the tradeoffs intelligently because of their understanding of the area from previous courses.

Given that the panel consists of representatives from Intel, AMD, Microsoft, Georgia Tech as well as myself, I’m expecting this to be a very spirited conversation. I hope to see you there.

More information:
Paul Steinberg’s blog post about the panel
Ben Gaster’s post 

8:56 AM Permalink
June 14, 2011

looking for a black box tester for my new team

A new position with my new team has just been posted: Software Quality Engineer – Mobile Photography Products

Position Summary
A brand new product team in the Professional Digital Imaging group is looking for an experienced black box quality engineer.
Responsibilities
  • Ability to work in an agile development environment.
  • Work closely with developers and white-box quality engineers on the design and specification of features.
  • Perform hands-on testing of daily builds on actual devices.
  • Monitor customer feedback and ensure that reported issues are fed back to the team in the form of verified bug reports.
  • Critically think about how consumers will interact with the software being tested and turn those thoughts into bugs, action items, and avenues of discussion.
  • Work extremely well with others by both leading and following depending on the circumstance.
  • Continually research new mobile technologies and incorporate that new knowledge into your ongoing QA process.
  • Create and maintain a collection of test assets to thoroughly exercise the application.
  • Accurately file and verify comprehensive bug reports.
Requirements
  • Minimum of five years software Quality Engineering experience.
  • Passion for mobile devices and other gadgets.
  • Passion for photography.
  • Ability to achieve results with little supervision or direction.
  • Flexibility to move between tasks.
  • Ability to avoid distractions and deliver against deadlines.
  • Demonstrated knowledge of QE methodology, processes and tools.
  • Strong problem solving skills.
  • Excellent written and verbal communication skills.

Ideal

  • Experience testing on Mobile Operating Systems.
  • Understanding of UI Automation Test tools.
  • Experience with Agile development processes.

Sound interesting? Apply!

If you are a QE who can sling serious code, I still have two white box positions open:

Computer Scientist, Quality Engineering – Mobile Photography Products (08478)
Computer Scientist, Quality Engineering – Mobile Photography Products (08481)

1:33 AM Permalink
June 10, 2011

comments

I just approved and then changed my mind and un-approved a comment. The comment was a fair, if somewhat harsh, criticism of the Pixel Bender Toolkit. I originally decided to approve it because it was one person’s opinion and a response to something I wrote, and I don’t mind answering criticisms (even when they are worded less-than-delicately). However, I changed my mind because the writer decided not to include a valid name or e-mail to respond to.

So, that will be a rule I’m going to hold on to moving forward. If you want to post your honest opinion to something I write, I will always try to honor you and will post it; and respond. As long as your comments are:

  • honest
  • not advertising
  • not overt flame-bait
  • do not swear
  • are signed with your real name (or handle) AND e-mail address (which is not published, but lets me know that you are willing to put your name to something)

Hopefully, this should not strike anyone as draconian.

JJ, if you want to re-post with your real name and e-mail address, I will gladly approve your comment.

7:40 PM Permalink