This is an overview describing my approach to creating C++ bindings around a Go library. A bit about wrapping C/C++ I’ve had some past experience in writing cgo bindings on top of C and C++ libraries. Author OpenImageigo and OpenColorigo - Color pipeline and image manipulation and conversion libraries relevant to the Visual Effects industry. These cgo libraries wrap C++. Contributor imagick - Bindings on top of the C-API for ImageMagick; Image manipulation pigosat - Bindings on top of Picosat C-API; Satisfiability solver.
My code editor of choice has been SublimeText for a while now. It is blazing fast for searching and doing matching, replacements, and refactoring. I also love that it is very lightweight, so that I can use it as my default shell $EDITOR, and also have an alias st which can easily open files and folders in the current or new Sublime window: # Add directory to current sublime $ st -a /path/to/src # Open a new sublime window, with the current directory $ st -n .
Since 2006, my small blog has existed as a Wordpress site. This worked really well for me, as it was easy to hit a one-click install from a hosting dashboard, and then be able to install plugins, themes, and updates, all from the Wordpress admin. Ultimately it was one less thing vying for my time as opposed to a custom site from scratch. With limited free time, and a choice of projects to work on, the last thing I really wanted to do was website design and maintenance.
There are a number of sources of information on the usage and behavioral differences of the many “smart pointer” options offered by Qt. But one thing I couldn’t find enough information on were the performance characteristics. “Continue Using QPointer” describes the complicated situation that came about when the Qt project was choosing to either deprecate QPointer vs QWeakPointer APIs in Qt5, and ultimately how QPointer was preserved. It also describes how in Qt4, the QPointer has a large performance hit vs its improved backend in Qt5.
On my last day of work at South Park Studios, my co-worker Tory gave me a present. It’s a book that collects together a history of doodles and graphics, capturing significant moments during my 4 year run with the team. Tory tends to represent our team as dog characters. I can be identified usually by the pierced chin. Much of this content refers to inside jokes, but I feel it also has a number of generally hilarious imagery.
PyQt4 UI Development for Maya Just released my 3rd python-based online training video through cmiVFX.com Introduction This tutorial is about learning PyQt4 python bindings for the Qt Framework, and how to introduce new UI elements to Maya as a platform. We discuss what comprises a “Framework” and a “GUI Framework”, and how Qt and PyQt4 work together. Getting Started With PyQt4 There are multiple ways of getting a working installation of PyQt4, both for the general system and for Maya.
In a recent python project where I was sending multiple messages per second of data over a basic socket, I had initially just grabbed the cPickle module to get the prototype proof-of-concept functioning properly. cPickle is awesome for easily serializing more complex python objects like custom classes, even though in my case I am only sending basic types. My messages were dicts with some nested dicts, lists, floats, and string values.
A recent project of mine involves research and development with an XBOX 360 Kinect Sensor. Being a python guy, I started searching for python bindings to some OSX-supported framework. When you just get started looking into this area it can be a little confusing. There are a number of layers to the software stack to enable one to accomplish anything meaningful. This is just a short and general blog post outlining the basics of what I have discovered thus far, to help anyone else that might also be getting started.
Permalink – writemycode.net In the spirit of a very similar blog post, I decided to expand upon a specific area of that article… Consider a question like this: I want to do this. Create 10000 files, (filename can be just combination of time and random number). File size should be 4k. And I want to time this. say how many seconds it will take. How can I do this on bash?
I had just received my brand new MacBook Pro a few days ago. Amazing machine. Probably the best laptop I have ever laid my hands upon. It was the early Feb 2011 model so I got a crazy good deal. But something caught my eye that I just had to investigate… I’m a bit obsessive when it comes to small issues that I can’t resolve, and this is just still bothering me.
A question came up in the Maya-Python mailing list that I thought was a really good topic, and should be reposted.
Someone asked how you can create maya UI objects and embed them within your main PyQt application. Specifically he wanted to create a modelPanel and embed it so that he would have a camera view within his own PyQt window.
Second video in the python for maya series, just released through cmiVFX! Python For Maya – Volume 2 If you watched the first video, you now have a good grasp on Python. Sweet. Let’s plow through some more involved concepts like python juggernauts! With a working knowledge of the python scripting language, and the Maya Python commands API, we can continue to learn new ways to solve more challenging problems, create complete scripts, and build user interfaces around our tools.
This is a follow up post to my previous one on Installing PyQt4 for Maya 2011 Recently while putting together my next video tutorial for Python for Maya, I came to a section where I wanted to demo PyQt4 in Maya2012. But I was concerned that viewers would have to go through the complicated steps of building PyQt4. I noticed that other people have made available precompiled PyQt installers for windows (here) but I could not find any for OSX or linux.
Just released my first online video tutorial, through cmiVFX Python Introduction Vol 01 – Maya Amazing at Animation? Master of Modeling? Conquistador of Character Rigging? But how is your Python? This course brings the talented artist into the fold of the technical-side of Maya. Learn the basics of Python, and its place in your 3D workflow, with visual examples and real world problems. Get a kick-start on adding some automation into your life, and solving common problems in a fraction of the time.
Update: I am now hosting a built package for Maya2011: MyQt4.7.4-maya2011-x64-osx-10.6.pkg And for Maya 2012+, see: Installing pyqt4 for maya2012 Personally, when trying to run PyQt from within Maya 2009 / 2010 using the pumpThread method, I never had much luck. The best I ever got was the ability to bring up a dialog but not without locking up the UI, even though the pumpThread tool is meant to address that.
We finally decided to release the source code for AtomSplitter, since we were getting some feedback that the application builds weren’t 100% working on every possible system.
AtomSplitter has been updated to v1.6, available through cmivfx.com
This is a story about my journey in solving a problem at work involving curves. The solution seemed really simple at first, but because of a stupid Maya issue, this turned into me having to rewrite the tool 3 times before I discovered a surprising solution. The Problem: Because we rely heavily on the process of importing Illustrator .ai files into Maya as nurbsCurves, we constantly have to deal with curves that intersect themselves.
I recently did an interview with my friends on their show, Film Jam. Its a podcast dealing with the film industry from the perspective of 3 guys working their way up the ladder. Fantastic show up ’till this point. Hopefully I don’t break the cycle Please make sure to leave a review about the show via iTunes! Episode #20 Playlist page
AtomSplitter has been updated to v1.5, available through cmivfx.com
AtomSplitter (chanToFbx) has been updated to v1.2, available through cmivfx.com
“App’ing up” PyQt… ugh. One of biggest problems with PyQt is distributing it in a stand-alone package. Even worse… wanting to make your Qt plugins still function (Phonon, jpeg, etc). At work I constantly had this battle, along with my co-worker Tory. She actually has a long-standing issue with this, and had to resort to workarounds or half fixes. Here is Tory’s original post regarding the issue . I would see an error similar to this when trying to package up and run an app using the Phonon module.
I get to do a lot of interesting applications at SouthPark. This one in particular was the most challenging use of PyQt that I have experienced to date. The backstory…. The art department wanted a tool to help them track assigned tasks, the progress, and to share media and notes associated with the tasks. Furthermore, they wanted to be able to skin the interface with custom graphics to make it their own.
You know when you have all these widgets laid out in your class, and you are hooking up all the connections, and you say “Aw dammit I have to subclass QLabel now just so make it ignore blahEvent”? You end up with all these little widget subclasses, where all they are doing is ignoring an event. I noticed I was doing this a few times, in more than one of my classes, and finally got annoyed for the last time.
I had a project where I was designing a statistics reporting site, to track production stats. I wanted to have really nice graphs that pulled from the database and were somewhat live and interactive. XML/SWF Charts is this awesome flash-based app that lets you embed graphs in your pages which receive their data from XML. There are tons of graph types and ways to customize the look. http://www.maani.us/xml_charts/index.php So, the thing is… I wanted to use Django for the site.
I never thought I had known such a real sense of failure until today, when a system diagnostic became intent on showing me just how hard of a failure we will be experiencing together.
I had received a mailing list email from cmiVFX, where Chris Maynard was challenging the community to write a tool that could convert a nuke camera .chan file to a functional FBX format. This was apparently meant to compliment the new 3d camera tracker in NukeX. So I decided to take on the challenge.
This is something that started back in 2006, when I received an email from one Miriam Israel. This Miriam claimed to be my grandmother, and proceeded to ask about details in my life that were not my details, and not my life. I thought a simple case of mistaken identity was made and informed her briefly that she had the wrong person. And I asked her to please remove me from her address book. Unfortunately, she didn’t seem to understand, and a few more correspondence took place during that year. I had forgotten about it until today, when it resurfaced. When I looked back across all the based mails, I realized it was kinda funny. So here it is.