Ruby Fibers and the Psyllium Gem
So, I created a new Ruby Gem. I had an itch, and nothing else already existed to scratch it. Details in the rest of this post.
I’m finding that in my free time I’m spending more of my time working with Ruby as my language of choice. Maybe this is a bit dated; you could perhaps argue that Ruby already “peaked” and now we should all move onto the hottest new thing now that friendlier statically typed languages have come out like Golang, Rust, and Zig.
Blogspot Migration
After many years, I have (finally) ported my posts from Blogspot to my static blog. Part of what took so many years was:
- I assumed I needed to do something fancy to port them over.
- My previous static blog engine (Frog) had a limited feature set, which meant that redirects of paths and whatnot was an exercise left to the user (i.e. me) and I never felt it justified the time investment to get create a workaround.
The answers to these two hold ups are:
Hierarchy of Needs
If you couldn’t tell, the title of this post is a nod to “Mazlow’s hierarchy of needs”, a psychological theory about how we prioritize things as humans. This post isn’t about that theory whatsoever.
This particular hierarchy of needs has to do with prioritizing tasks to accomplish a goal. I am not the master goal setter in the world. I don’t claim to be some sort of planning guru. Far from it. But I have had a thought about a simple way to deal with task lists. It has all been inspired by conversation with my friend and colleague AJ and an article I read on Trello’s blog.
On Syntax and Macros
From what I have read, it seems that most people have an ultimate Zen moment with Lisp that makes the universe seem to fall into order (or, so says Eric S. Raymond). My journey with Lisp so far hasn’t been like that. Instead, it has been a number of smaller “Aha!” moments. In fact, I just had one today. Maybe my big Zen moment will come later. I guess I’ll just need to keep learning and see where the Lisp journey takes me.
SIGGRAPH 2016 Post Mortem
I had the opportunity to attend SIGGRAPH this year as a representative of MetaPipe. For as fun as it was to meet with representatives of various software and cloud companies, I am happy to be able to get my nose back to the grindstone on MetaPipe. I’m extremely excited about the tech we are working on for the service and I can’t wait to get it to the point where we can start demoing it publicly to get everyone’s feedback. We started a lot of converstaions at SIGGRAPH with various companies that we feel fairly confident will turn into more concrete agreements in the near future.
Moving blogs
I am moving blogging platforms and thought I should maybe explain why.
In the past I have been hosting my blog on Google’s Blogger platform. This has served me pretty well over the years along with the limited number of posts I have made. However, as I have tried to expand the blog into more of a general website, it has been an uphill battle fighting against the workflow of the blogging system itself. I don’t forsee wordpress being much different.
Python wrapper for hscript
Houdini has a nice little function in Python in the hou
namespace called hscript
.
You can pass in a string for an hscript command.
It passes back out a tuple with stdout and stderr strings.
This is dandy,
but it would be nice to call hscript commands with (in essence) Python syntax.
So I made a little class that does just that.
class HscriptWrapper(object):
commands = hou.hscript('help')[0]
commands = frozenset(commands.split())
def __getattr__(self, attr):
if attr not in self.commands:
raise AttributeError('No hscript command by name "%s"' % attr)
# cache for future calls
self.__dict__[attr] = rattr = self._command_factory(attr)
return rattr
def _command_factory(self, attr):
def cmd(*args, **kwargs):
fmt = '{cmd} {flags} {args}'
hsargs = ' '.join(args)
hsflags = []
for k, v in kwargs.items():
if isinstance(v, bool) and v is True:
hsflags.append('-' + k)
else:
hsflags.append('-{0} {1}'.format(k, v))
hsflags = ' '.join(hsflags)
hscmd = fmt.format(cmd=attr, flags=hsflags, args=hsargs)
return hou.hscript(hscmd)
cmd.__name__ = attr
cmd.__doc__ = hou.hscript('help {}'.format(attr))[0]
return cmd
To use it, create an instance of the HscriptWrapper class, then access hscript commands as attributes of the instance. The returned attribute is a callable function that takes positional and keyword arguments.
Houdini Rigging
I am generally pretty sad with the number of free tutorials about Houdini rigging. Thus, I have started a series of them on youtube. They aren’t polished or even really planned out before hand. Really, they are little more than just stream of consciousness, but they have information, which is the important part. If you are interested in certain topics relating to Houdini rigging, post a comment and let me know what you want me to cover next.
Creating an ISO image from a CD/DVD on Unix
Hey, it has been a while since I last posted anything. I apologize to some of you since this post is going to be rather techie/geekie. It is more as a reminder to myself about how to do this than anything else.
Earlier today, I was furiously trying to find a utility on Linux to take a CD/DVD and create an ISO image from it. I was coming up dry and was feeling a bit frustrated until I stumbled onto this website. Once I read it I felt like a complete moron. Why did I feel so stupid? One of the great things about Linux, BSD, Mac OS X and pretty much every other OS descended from Unix is that everything is a file. Literally everything. And I had forgotten that disc drives (including optical drives) fall well within the category of “everything”.
Because you need to know...
Recently had a friend share this link with me. It made me happy to be a vegetarian.
1 comment:
-
Unknown October 5, 2010 at 6:28 AM
I always thought that calling it ’ mechanically-separated’ meant that they were trying to distract you away from the next obvious question: which parts?