I’ve joined LinkedIn! Please help me build a professional comp. sci / CGI network!

Hi there, dear readers of this blog!

I’ve recently joined LinkedIn, and I’m trying to build a network consisting of the best in the computer science, software engineering and CG industries.

I’ve gotten a couple of big fish allready, but my network is still super-tiny!

I’m hoping to use this network for both socializing and for sharing technical issues and to present new thoughts and ideas for future products.

I believe a network fusion of these three industries will be an important avenue for anyone interested in fronting their work on the public arena, absolutely free.

So please join and invite anyone you think should be in there. Anybody with a passion and some talent in any of these three fields are very welcome to join!

So please check my profile and join my network over at:

http://www.linkedin.com/pub/chris-sederqvist/57/713/103/en
Vis Chris Sederqvist sin LinkedIn-profilVis profilen til Chris Sederqvist

Advertisements

Some GNU Emacs hotkeys for ya!

I’ve collected some of the Emacs shortcuts / keyboard hotkeys I find myself using from time to time! 😉

Please visit:
GNU Emacs for Unix/Linux and precompiled Windows binaries
Aquamacs for OS X (I prefer this over http://emacsformacosx.com/ as it is better integrated)

To get a hold of this incredible “editor”. The reasons I write “editor” is because calling Emacs an editor is something of an understatement! It’s more like a little operating system or at least an intelligent Lisp world!

For you guys never bothered to learn Emacs: You don’t know what you’re missing out on!

Ok, here are the hotkeys (feel free to add some as a comment, and I’ll add them to the list!):

General commands:

c-x c-f = new buffer (file)
c-x c-c = quit
c-g = cancel input command
c-v next page
m-v previous page
c-l toggle cursor point up/down/center (pgUp/pgDown)

Navigation in text:

c-p = previous line
c-n = next line
c-b = backward
c-f = forward
m-f = move forward Word-by-word
c-a = beginning of the line
c-e = end of the line
m-a = beginning of the sentence
m-e = end of the sentence

m-< = beginning of the text
m-> = end of the text

Editing Text

Killing text:
(text goes to a safety buffer like in Cut)

m-backspace = kill word before cursor
m-d = kill word after cursor
m-k = kill words until end of sentence (.)
c-k = kill words until end of line
c-space = mark start of delete (move to end of text to delete)
c-w = delete text from mark until here
c-y = yank (paste) text from last kill buffer
m-y = cycle through the kill buffer entries

c-x u = undo
c-_ = undo too!

Search for text:
c-s = search forward in buffer from cursor
c-r = search backwards in buffer from cursor

for a non-interactive search press enter before search word.

Search and replace:
m-x replace-string + enter
<word to replace>
<word to replace with>

Managing buffers and windows

c-x c-b = display buffer list
c-x o = switch to buffer list, select with arrows and enter
c-x b = start typing the name of the buffer to choose (tab-complete)

c-x 1 = one buffer in window
c-x 2 = two buffers in window horizontal
c-x 3 = two buffers in window vertical

c-x 0 = close active buffer (file)

m-x recover-file = recover file after crash (open original file, not auto-backup)

c-u 90 c-x f = set margin width to 90 chars

c-u 0 c-l = move current line to top of buffer window
c-x o = move cursor to “other” buffer window
c-m-v = scroll through other window (keeping cursor in main window)

m-x make-frame = create an independent Emacs frame

esc esc esc = get out of recursive editing level mode

c-h f <function> = help on <function>
c-h k <command> = help on <command>
c-h a <keyword> = search for <keyword> in help
c-h i m Emacs = read Emacs manual using info

That is something to get you started!

Until next time, happy editing!

Chris

Setting up Mental Ray Satellite with Windows slave and Mac OS X host

I don’t know why, but every time I have to set up Mental Ray between different platforms I always stumble some before everything works perfect. Today I configured my quad core Windows computer to do the chewing when rendering from my MacBook Pro laptop.

This is a super-simple setup, but somehow it wasn’t all click and go today either. First of all, I had the slave machine configured earlier, so when I tried to telnet into the port I googled about it would not connect from my Mac host.
So, I checked with the \Windows\System32\Drivers\etc\services file on the Windows machine and got the correct port number 7412 for satellite connections, then I created the maya.rayhosts file in the preferences folder on my mac containing one simple machine.

(File: /Users/chris/Library/Preferences/Autodesk/maya/2012-x64/prefs/maya.rayhosts):
192.168.1.152:7412

After disabling the local network firewall on Windows, it sort of worked, but I got this annoying error message from Mental Ray after the render:

MSG  0.0  info : adding new host 1 (192.168.1.152:7412)
MSG  0.0  error  011330: mi-ray/tcp: not a service (check /etc/services)
MSG  0.0  warn   012219: using fallback inet service 7003

Then I tried to add the correct port for satellite (a different port than the one used with MR Stand alone btw) to the /etc/services.
This did not help either.

But, when I also added the “fallback service”, inet 7003/tcp to /etc/services it managed to actually shut up!

# /etc/services
# Mental ray satellite
mi-ray7412/tcp
inet		7003/tcp

So, if anybody out there experience the same “error” message, you know what to do…
BTW, the error doesn’t stop the render from running, but I believe maybe a nanosecond or two will be wasted if the ports don’t match up and the system has to mage a different route… Who knows?

How to stop Maya from asking for network connection (OS X)

For some reason, Maya isn’t allowed to receive network connections without manually letting it by choosing “Allow” or “Deny” in the firewall pop up message. Even if it is listed as “Allow” in the firewall preferences, it asks again every time.

I’m not sure whats causing this behavior, but it sure is annoying. Finally I found a solution for it!

It has to do with “code signing” and something the developer has forgotten to do after changing the application, I don’t know.

I’m not as paranoid to think that someone has altered the code without my knowledge, so I trust the code from Autodesk and sign it myself to stop receiving this message. I’ll route you to the blog where I found the solution here:

Silvanote blog post

I’ve heard people have similar problems with other applications as well, like iTunes.

I take no responsibilities for this solution, it’s totally up to you!

Easy way to get Apache and MOD_WSGI working on OS X

I’ve fooled around with some Python Web-frameworks lately, and maybe someone would care to know that you don’t have to install MAMP or XXAMP or whatever they are called, because as you probably already know, OS X does have Apache 2 Server already installed, just waiting to be configured to your needs.
Off course, it is very easy and convenient in many cases to just push a button and have it all working, but I always like to have total control over the environment when I do stuff like this, so…
I don’t know if these packages support mod_wsgi anyway, so I’ll explain how to get things going the hard way! Similarly you could enable PHP, but that is a nother story.

This is about getting Python web hosting locally, so you can set up frameworks like Django, py2web and the likes.

I’m using OS X 10.7 (Lion), but I think this will work just as fine with older versions, but then you’ll get the module linked to an older release of Python by default.

Here is some information on mod_wsgi:

The aim of mod_wsgi is to implement a simple to use Apache module which can host any Python application which supports the Python WSGI interface. The module would be suitable for use in hosting high performance production web sites, as well as your average self managed personal sites running on web hosting services.
The mod_wsgi module is written in C code directly against the internal Apache and Python application programming interfaces. As such, for hosting WSGI applications in conjunction with Apache it has a lower memory overhead and performs better than existing WSGI adapters for mod_python or alternative FASTCGI/SCGI/CGI or proxy based solutions.

As mod_wsgi supports the WSGI interface specification, any Python web framework or application which is compatible with the WSGI interface specification should be able to be hosted on top of mod_wsgi.

Major Python web frameworks and toolkits which are known to work include CherryPy, Django, Pylons, TurboGears, Pyramid, web.py, Werkzeug, Web2Py and Zope. Major Python web applications which are known to work include MoinMoin, PyBlosxom and Trac.

How to set it up using the internal Apache web server on OS X:

Download the latest version of mod_wsgi from:
http://code.google.com/p/modwsgi/wiki/DownloadTheSoftware?tm=2

Unpack the sources, and do the usual:

./configure
make
sudo make install

(if you have an older version of OS X, and would like to link to a newer Python version you have installed, use the

–with-python=/path/to/your_python with ./configure command)

Then, you have to edit the Apache configuration to load the newly installed module:

sudo vi /private/etc/apache2/httpd.conf

After the list of default modules to load type in:

#Load mod_wsgi module:
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
WSGIScriptAlias / /Library/WebServer/Documents/

Now you should be ready to serve Python content on the local Apache server that comes with OS X.

To try out your new configuration, create the following .py file, and save it to your document root folder /Library/WebServer/Documents/testpy.py:

def application(environ, start_response):
status = ‘200 OK’
output = ‘Hello World!’

response_headers = [(‘Content-type’, ‘text/plain’),
(‘Content-Length’, str(len(output)))]
start_response(status, response_headers)

return [output]

Start the web server via System Preferences -> Sharing -> Web Sharing
or via the
sudo /usr/sbin/apachectl start
Terminal command

Visit http://localhost/testpy.py
You should be greeted with the notorious “Hello World!” message, indicating that you now serve Python locally via Apache and mod_wsgi!

StumbleUpon with the Safari browser on Mac Os X

While there are no existing solution for a “native” StumbleUpon plugin for Safari, it is a pretty decent “workaround” to this, that I, myself, find absolutely satisfactory.

To get a “semi-SU-Toolbar” to use while stumbling, like the one in this picture:

stumble_preview

StumbleUpon in Safari

Just add a bookmark on your Bookmarks Bar that points to : http://www.stumbleupon.com/su/

After visiting the stubleupon.com website, and setting the “cookie”.

At least that’s something!

More Lightwave praise… I’m not kidding, this is going to be Good!

I’ve ben praising Newtek and their 3D Suite “Lightwave” on a couple of occasions. This time I want to point the ones in doubt onto a track of future optimism and, hopefully, a shitload of fun.

The upcoming Lightwave Core, scheduled for Q4 2010, will incorporate seamless connectivity against the most promising standards out there, and will eventually include support for components mentioned in this text.

I’ve received questions by artists, or say, budding artists, that is in “serious” doubt about the big changes between the current (open beta) 9.6.1 64-bits Mac/Win release that uses the separation between the Modeler application (modeling) and Layout (everything else). Core will by default merge the different tasks into one application by dividing the UI into “workspaces”, without the need of “The Hub” for synchronizing data layers and plenty of other stuff. No more F12 for switching apps.

BUT, you can if you insist use the same workflow as in LW 9.x, this is a matter of preference settings. So no worries, your training won’t be “outdated” in a year.

The following workspaces will be available:

• Model

• Surface

• Setup

• Animate

• Render

• Composite

In addition to the above, the following items are also presented as aspects of the Animate workspace:

• Creation Tools

• Deformation (Subset)

• Transforms

• Dynamics (Collision Detection, Etc.)

• Constraints

• Scripting

Rendering:

LightWave 3D with CORE technology offers two different flavors of rendering: Viewport Preview Rendering (VPR) and CORE rendering.

VPR

The CORE viewport rendering engine allows for direct interaction with elements in the rendering, from the rendered view. Any viewport can switch to VPR, and even portions of viewports can be specified for viewport rendering.

VPR is essentially the CORE rendering engine operating in an iterative, interactive fashion. Whatever CORE can render, VPR can also render. The results will be virtually identical, with some exceptions, as VPR does prioritize to deliver on speed and interactivity.

As VPR is a complete version of the CORE rendering engine, not a subset, it can render global illumination interactively, however, with less interactivity due to the amount of performance required to produce GI renderings. Fortunately, the CORE rendering engine is fully multithreaded, another benefit leveraged by VPR.

The more processors you have available to you, the faster VPR will render.

Now, to the juicy stuff:

The Composite workspace in CORE is capable of image manipulation and compositing via a selection of internal tools, as well as available third-party plug-ins that support the OpenFX standard (OFX). OFX is an open source plug-in standard for developing 2D digital visual effects.

The Foundry (http://www.thefoundry.co.uk/), Re:Vision Effects (http://revisionfx.com/) and GenArts (http://www.genarts.com/product/sapphire/ofx/fxlist) and several other prolific plug-in vendors offer a variety of image processing and manipulation plug-ins in OFX format.

Core uses the industry standard file format Collada for scenes, as it handles cross pipelines, and the Collada format offers all the structures a combined application needs.

The optional Modifier Stack (Lightwave finally has memory!)

The CORE modifier stack is an attribute of each mesh item. Every CORE mesh item has a modifier stack behind it. The modifier stack is a living record of all of the geometric operations applied to a specific object. Operators in the stack can be rearranged (doing so can produce notably different results), enabled, frozen (so as to be un-editable or “flattened”), muted and deleted on command.

Scripting:
Every expression in Core are Python based.

Industry-standard Python forms the basis of the scripting in CORE (currently version 2.6). The Python implementation is layered into CORE via SWIG. SWIG is a language-interfacing layer that allows the CORE SDK to be accessed through languages other than the factory Python language that ships with CORE.

Now to the really Juicy stuff:

CORE integrates the popular Bullet Physics Library (http://bulletphysics.org/wordpress/)

into the CORE unified dynamics solver. Bullet supports both rigid body and soft body collisions. Bullet plans to offer OpenCL support in the future, which fits with the development of CORE.

The Bullet Physics Library offers the following benefits:

Open source C++ code under Zlib license and free for any commercial use on all platforms including PLAYSTATION 3, XBox 360, Wii, PC, Linux, Mac OSX and iPhone.

• Discrete and continuous collision detection, including ray and convex sweep test. Collision shapes include concave and convex meshes and all basic primitives.

• Fast and stable rigid body dynamics constraint solver, vehicle dynamics, character controller and slider, hinge, generic six degrees of freedom and cone-twist constraint for rag dolls.

• Soft Body dynamics for cloth, rope and deformable volumes with two-way interaction with rigid bodies, including constraint support.

In CORE, you can use dynamics for simulation, modeling, or interaction with scene items. Animation created in CORE can be exported into LightWave Layout (and other applications) via the MDD file format.

Modeling with dynamics example: Consider an alley scene with crates. You can choose to place the crates (and other debris) by hand, or you can choose to use the dynamics tools to help streamline the process.

TRUE MULTI PLATFORM SUPPORT

CORE is written in C++, and designed as an object-oriented application. CORE uses several different technologies and libraries to deliver state-of-the-art performance. For the user interface, CORE uses the Qt libraries from Nokia. The Qt environment is fast becoming a standard throughout the software development industry. It is available on all platforms, allowing for a single codebase development process, which is very important when you have more than one host operating system to support. By using Qt, Newtek can offer LightWave CORE for Linux as well as Windows X and Mac OS.

Lightwave is capable of every stage of production, from modeling to physics and animation. It’s priced at a fragment of other products that can deliver the same feature set. This makes it a perfect mach for wallets, individuals and small to medium studios.

Did I mention the 999 free network render nodes?

Need I need to say more?

Go get it!


Howto: Convert .nrg to .iso from the Terminal (OS X)

I’ve seen so many strange solutions for a pretty simple problem.

People are going through all sorts of frustration, just to turn a .nrg (like a CD/DVD burned with “Nero”) made in Windows into a mountable .iso to feed to the image-mounters mouth.

Well here is the drill:

1. Open Terminal.app (Thats just Terminal for those that don’t like complete filenames)

2. Type nrg2iso <source_image.nrg> <destination.iso> and hit enter.

You wish things where that easy eh? Well, it is, but for tasks like this one, at times you need some good’old Unix command-line utilities, not limited to those already included in the Mac OS.

For that we need 2 things. To get, and install these for the first time, there are some minor pain involved, possibly hitting those that hate computers slightly, but I can promise you, if, or when, you discover the possibilities with Mac OS + MacPorts, it will be worth it:

1: Install the Xcode package included on the secondary Mac OS install DVD an “additional installment”.
If you don’t have the DVD with Xcode, or if you want the latest version of Xcode (A superb programming IDE for anything from developing dashboard widgets, iPhone apps to full blown native 64-bit Mac OS apps that uses the latest OpenCL technology, and it’s free as in beer) you will have to register for an Apple Developer Account through the AppleDeveloperConnection, ADC, located about here: (this is where the pain comes in) http://developer.apple.com/mac/

2. After completing the registration and / or the installation of Xcode, install MacPorts from the downloaded installer .dmg.

MacPorts! Head over and install:

http://www.macports.org/install.php

Chose the installer for your version of Mac OS and run the installer.

Then open a Terminal and type in:

sudo port selfupdate -v

Enjoy the incredible ammount of fast flowing gibberish, as MacPorts sets up some RSYNC connections and comparing merchandise.

Then install nrg2iso, that was introduced in this post with the command:

sudo port install nrg2iso

This is a nifty tool written by a guy called G. Kokanosky. It does exactly as it is named:

First enter the source .nrg image you want to convert to a mountable .iso on your Mac, then some name of choice, with the extention .iso, as in:

nrg2iso mydownloaded.nrg myconverted.iso

That’s it.

This may seem like bloaty overkill for this one task, considering that applications exist, that does this without the hassle of installing Xcode and MacPorts.

And, it is absolutely correct. But, it does not give you one tool. It gives YOU the opportunity to MAKE the tools, if you so wish, but more important to begin with, it gives access to a wealth of incredible useful, solid, tested tools that executes a lot faster than a possibly badly written hobby cocoa application downloaded from the net.

Read more at http://www.macports.org/ for information regarding existing tools.

Read about developing for the Mac (ADC is possibly the best programmer community out there) at:

http://developer.apple.com/

Madman (late, weed, sleep… ahem! not that second one!)

New Maya 2010 Debian/Ubuntu based Install Guide?

I’ll try not to get to get off-beat or totally far-out, but I’m in the creative writer mode. You’re hereby WARNED.

I read a comment at my Madman blog today, that made me feel all warm and cozy on the inside.

That might be slight an exaggeration, but, anyway it was nice to get positive feedback. It went something like this:
(Hope you don’t sue me for quoting you, PaulN!)

“We really appreciate your helpful guides for getting Maya to work with Ubuntu around here – any chance you can document how you got 2010 working? We are quite stumped by this version. Specifically Autodesk seem to have invented the most ass-backwards license setup _ever_ for this release.”

Second, don’t expect this post to include a new guide for Maya 2010, this time + licensing tips for the Version 2010, that’s part of the Autodesk Entertainment Bundle 2010, I use This! that includes:

Maya 2010
Mudbox 2010 *MS/Mac OS 10
Softimage 2010 *MS
3DS Max 2010 *MS
MotionBuilder 2010 *MS

+ a bonus application. I got “Sketch book Pro 2010” without cost, that runs on my Mac Book Pro. No Linux guide on this one either, as it is a Intel Mac + OS 10 and MS  only app. I don’t care much about virtualization or emulation of operating systems, so for me it’s “native or I don’t”…

Moving on… The thing I was topic-flamer for, this post. I know there are many out there that would go far to get a real, no fuzz .pdf to print and follow with pictures and all, while GETTING MAYA TO RUN on their GNU/Linux machine calculating and crunching ones and zeros with a Q7 64-bits QuadCore CPU, mounted on a motherboard with 3K*Mhz FSB, dual CPU slots, so you’ve decided to buy two, giving you 8 Cores for lightening fast bit-crunching while rendering  the latest reel. Topped with the latest NVIDIA® Quadro® Plex 2200 S4 dedicated visual computing system (VCS) humming in the closet.

The thing is, Maya 2010 isn’t 1 application anymore, it’s three separate packages, semi-crossed and stress-developed (by underpaid programmers, working in polluted office environments) to work seamlessly.

So, naturally, the conversion from .rpm, involves some knowledge about how to read the package descriptors in the .rpm’s, and possibly creating a specialized script for creating the .deb installers using Alien as the back-end, so that they wil place and link the package correctly. Things might seem to work until you try rendering in MR with a new option, causing the application to SEGFAULT.

I think I know why Autodesk decided to merge Maya (Unlimited) Toxic, and Matchmover into one package:

It’s not the correct use of the words “Complete” or the word “Unlimited”, as a way to describe escalating possibilities between two products.

Here, it is used to “Identify feature levels” with words, cleverly hatched out from the sub-department in R&D, set out to form a naming convention for their flagship line of (hijacked) products…

If a thing is “complete”, it has (according to a trustworthy dictionary/thesaurus) the following qualities:

“A state of being, often used as descriptors of either a psychological achievement as in: “Fulfilled”, meaning there is nothing more to strive for. Products, where it’s meaning often is synonymous with “Accomplished” and indicating from the stem word “complete” that concludes something, there is nothing more to add.”

I suspect this naming convention to be the problem here.

Boss says: “Hey!, I’ve looked up the word “complete” and “unlimited” in a thesaurus this weekend. We need to re-brand, and we need to do it fast!!
The words actually summons the same in all but the slightest context digressions! The word “complete” means, like, “nothing more to add”, “finito”, nothing more to add.
But we’ve made an “Unlimited” version as well as “Complete”, and it adds stuff. A lot!
This is insane! I’ll fire the 200 people employed with marketing, and the rest of you: think fast! We need ONE version of Maya, and this time, we’ll prefer the safe way. Let’s just call it “Maya”, plus maybe, hey, 2010 is coming up right? Let’s call it Maya 2010, and release it in 2009! That’s more like it! Nobody is going to make us look like illiterate fools!

The thing is, there is actually, besides from some statically linked lib files that needs to be updated to newer versions, not much keeping you from installing the Binary, closed source software, using a package scheme converter like Alien.

These days, the developers of new software rides on the widespread wave that have done the switch to either a new version of the GNU C[your language here] Compiler suite, a different multi-threading framework, or they’ve jumped on the “Let’s do OpenCL and Cuda development” wagon. Possibly a “Nokia/QT path” for cross platform development as well…

This doesn’t directly touch the users of the software, because, as in the case with Autodesk, the software is delivered in installable packages, that places statically linked lib files along with the binary ones (so they know that the client will be using the right version when upgrading their operating systems, something that makes relying on native language and library support impossible.

But, these are just packed with different package format schemes, and those are not binary. The content is.

If you find a way to extract the files from a .rpm package and then into a .deb package that in turn does the same thing, placing files where they belong, and creating different links, etc (also known as “Installing”). I wouldn’t consider myself a deep level hacker to make use of tools that are readily available for these tasks. But, then there is a problem. You need to do all this “by hand”!
A roll-your-own-spliff software installation, and it needs to be punced in as “commands” in a shell environment!

Hmm… (scratches head). “Lets search Google!”

What I’m trying to say is that with a LPI level 1 GNU/Linux knowledge under your belt, you should be able to decipher this task at hand.
BUT.

If you try to follow exact step-by-step instructions, without having a clue what or why you’re issuing these cryptic looking commands, you’re most likely to fail. There is no such thing as an identical system. You might get a kernel panic, after you ruthlessly renamed or moved an actual system-file, (“Hey, the name was ALMOST the same!”) as in the guide! But the file wasn’t statically linked, but the actual code containing instructions for reading the instructions to operate your graphics card.

So, a Guide, could mean success or failure, or the difference between a stable system and a kernel panic…
I must say that most of the problems I’ve seen reported and tried to answer on this post, is a result from, and belongs to the mentioned kind of “misbehavior” against your darling computer.

So, if I’m going to write a complete hands-on guide for installing Maya 2010, it will take plenty of time and effort, not to mention installing the thing on different versions of GNU/Linux distributions.
So, I will not make a guide for free, covering the ins and outs of this process.

There are three applications involved, and a slight error in one install, might corrupt another.

BUT, If there are enough people out there willing to pay me $5 each for doing this, I’d consider doing it. Then it would be a labor, and the quality of the guide would be accordingly.

So. If that is something you would like to purchase, please send me a Gmail containing the words MAYA PDF as subject in the message. Then, I’ll get to it.

Madman

I’m Waving again…

As readers might conclude from the previous post, I hereby declare myself as an official “Waver” again.

I’ve recently purchased a new Mac Book Pro, with the Nvidia GT GPU option and some ekstra RAM and a faster hard drive. I installed the 32-bit (will it ever be 64) Maya 2010, and Lightwave 9.6.1 (64-bit beta).

I took both applications for a spin.

You have to feel it to believe the performance differences between these applications. Well, ok, I know that Maya is a “giant” package, with LOTS of (maybe too many) features, but, nevertheless, I think a brand new MBP should be adequate for any application that is supposed to run on a workstation.

My rendering is sent to my two stationary Quad Core machines anyway, so I need good response when working IN the application. I don’t see why I should need a $3000 workstation, and a $4500 piece of software that runs like crap on my Mac, when I get by with my current setup.

Plus, now I get 999 FREE NETWORKED RENDER NODES with Lightwave, just in case!

Did I mention that Cinema 4D requires an additional “Advanced Render” module ($400), to set up 3 render nodes???

So, now I use Modo 401 (Runs fairly well in 32-bit) for the more organic modeling, Lightwave for rigging, animation, special FX, Rendering, pretty much everything.

For detailing I use Mudbox 2009. This runs well on my MBP. And off course I use Photoshop CS3, because I’m addicted.

Just for clearing up my mind, I needed to write this down… 😉