<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CG Hijinks</title>
	<atom:link href="http://www.jonasavrin.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jonasavrin.com</link>
	<description>What&#039;s happening behind the veil.</description>
	<lastBuildDate>Fri, 24 May 2013 00:52:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Epic is Here!!</title>
		<link>http://www.jonasavrin.com/2013/05/23/epic-is-here/</link>
		<comments>http://www.jonasavrin.com/2013/05/23/epic-is-here/#comments</comments>
		<pubDate>Fri, 24 May 2013 00:52:04 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[blue sky]]></category>
		<category><![CDATA[epic]]></category>
		<category><![CDATA[Movie]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=3128</guid>
		<description><![CDATA[Go see it!!  It&#8217;s a solid success for all departments here at Blue Sky Studios, a true testament to the hard work everyone put into this movie! &#160;]]></description>
				<content:encoded><![CDATA[<p>Go see it!!  It&#8217;s a solid success for all departments here at Blue Sky Studios, a true testament to the hard work everyone put into this movie!</p>
<p><a href="http://www.jonasavrin.com/wp-content/uploads/2013/05/epic_ver6.jpg" rel="lightbox[3128]"><img class="aligncenter size-full wp-image-3126" alt="epic_mandrake" src="http://www.jonasavrin.com/wp-content/uploads/2013/05/epic_ver6.jpg" width="500" height="748" /></a> <a href="http://www.jonasavrin.com/wp-content/uploads/2013/05/epic_ver7.jpg" rel="lightbox[3128]"><img class="aligncenter size-full wp-image-3127" alt="epic_mk" src="http://www.jonasavrin.com/wp-content/uploads/2013/05/epic_ver7.jpg" width="500" height="746" /></a><a href="http://www.jonasavrin.com/wp-content/uploads/2013/05/epic_ver2.jpg" rel="lightbox[3128]"><img class="aligncenter size-full wp-image-3125" alt="epic_nod" src="http://www.jonasavrin.com/wp-content/uploads/2013/05/epic_ver2.jpg" width="450" height="666" /></a></p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Epic is Here!!',url: 'http://www.jonasavrin.com/2013/05/23/epic-is-here/',contentID: 'post-3128',suggestTags: 'Animation,blue sky,epic,Movie,release',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2013/05/23/epic-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VStudio Plugin Build Environment for Maya_2012-x64 and Beyond</title>
		<link>http://www.jonasavrin.com/2013/05/05/vstudio-plugin-build-environment-for-maya_2012-x64-and-beyond/</link>
		<comments>http://www.jonasavrin.com/2013/05/05/vstudio-plugin-build-environment-for-maya_2012-x64-and-beyond/#comments</comments>
		<pubDate>Sun, 05 May 2013 23:01:17 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[mel]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[64-bit]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[poseDeformer]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=3118</guid>
		<description><![CDATA[Free yourself from relying on other people to compile your beloved 3rd party plugins.  If you are interested in learning to write plugins it&#8217;s a great exercise to do it yourself.  Also take a look at the source code.  If &#8230; <a href="http://www.jonasavrin.com/2013/05/05/vstudio-plugin-build-environment-for-maya_2012-x64-and-beyond/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-165" alt="maya2011_thumb" src="http://www.jonasavrin.com/wp-content/uploads/2010/08/maya2011_thumb.png" width="76" height="99" />Free yourself from relying on other people to compile your beloved 3rd party plugins.  If you are interested in learning to write plugins it&#8217;s a great exercise to do it yourself.  Also take a look at the source code.  If it doesn&#8217;t make sense at first, sooner or later it will if you are dedicated to learning c++ or python or other OOP language for that matter.</p>
<p>Here are some concise steps to downloading, editing, and building the source of Micheal Comet&#8217;s poseDeformer yourself.  I&#8217;m not supplying the link to the source but you should do a quick search to find it.  If you weren&#8217;t aware of this awesome plugin dig in to figure out what it does by reading all about it and actually look into the code!  There are also download links out there that have the plugin completely compiled for you on Windows up till 2014.  To really learn, try building it from just the source and then undo from last to first the steps to setup the environment to see what happens when a project fails and actually read the debug output to try and make the connections yourself.</p>
<p>Windows 7 SDK:</p>
<ol>
<li>Download and install the Windows Software Development Kit version 7.1. Visual C++ 2010 Express does not include a 64 bit compiler, but the SDK does. A link to the SDK:<a href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx">http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx</a></li>
</ol>
<div>
<p>To make a VC Studio 2010 project:</p>
<ol>
<li>Start a new empty project in a directory other than source, name it poseDeformer</li>
<li>Add the source files and header files by right clicking &gt; add &gt; add existing &gt; choose files from extracted source.</li>
<li>Right-click on the project and choose “properties”</li>
<li>It&#8217;s probably a good idea when you&#8217;re following along to click &#8220;apply&#8221; after each step when you&#8217;re editing in the &#8220;properties&#8221; dialog</li>
<li>Pull up the “configuration manager”</li>
<li>Find your project, hit the Platform drop-down, select New, then select x64. Now change the &#8220;Active solution platform&#8221; drop-down menu to &#8220;x64.&#8221;  &#8221;copy from&#8221; drop down can read &lt;empty&gt;</li>
<li>Change your toolset. In the Properties menu of your project, under Configuration Properties &gt; General, change Platform Toolset from &#8220;v100&#8243; to &#8220;Windows7.1SDK&#8221;</li>
<li>Go to General under Configuration Properties</li>
<li>Set the target extension to “.mll”</li>
<li>Set the platform toolset to “Windows7.1 SDK”</li>
<li>Set the configuration type to “dynamic link library (.dll)”</li>
<li>Go to the VC++ Directories panel</li>
<li>Append “;C:\Program Files\Autodesk\Maya2012\include” to the include directories</li>
<li>Append “;C:\Program Files\Autodesk\Maya2012\lib” to the library directories</li>
<li>Navigate to C/C++ and Preprocessor</li>
<li>Append “;NT_PLUGIN;REQUIRE_IOSTREAM&#8221; to Preprocessor Definitions</li>
<li>Navigate to Linker and Input</li>
<li>Append to additional dependencies the following list: “;Foundation.lib;OpenMaya.lib;OpenMayaUI.lib;OpenMayaAnim.lib;OpenMayaFX.lib;OpenMayaRender.lib;Image.lib”</li>
<li>This step is optional, some instructions out there say to append: /export:initializePlugin /export:uninitializePlugin to Linker &gt; Command Line Additional Options.  Don&#8217;t do it and run debug compilation to see if it works first!</li>
<li>Open up poseDeformer.cpp and poseDeformerEdit.cpp and append this line at the top of the includes: #include &lt;maya/MIOStream.h&gt;</li>
<li>Build</li>
</ol>
<p>Next up:  Speed up build for future Maya releases with precompiled Maya headers &amp; compile for Linux.</p>
<div></div>
<div>Helpful source link:</div>
<div></div>
<div><a href="http://stackoverflow.com/questions/1865069/how-to-compile-a-64-bit-application-using-visual-c-2010-express">http://stackoverflow.com/questions/1865069/how-to-compile-a-64-bit-application-using-visual-c-2010-express</a></div>
</div>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'VStudio Plugin Build Environment for Maya_2012-x64 and Beyond',url: 'http://www.jonasavrin.com/2013/05/05/vstudio-plugin-build-environment-for-maya_2012-x64-and-beyond/',contentID: 'post-3118',suggestTags: '2012,64-bit,compile,cpp,Maya,Plugin,poseDeformer,Visual Studio',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2013/05/05/vstudio-plugin-build-environment-for-maya_2012-x64-and-beyond/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Minecraft Pi Edition Python Maze Generator</title>
		<link>http://www.jonasavrin.com/2013/02/18/minecraft-pi-edition-python-maze-generator/</link>
		<comments>http://www.jonasavrin.com/2013/02/18/minecraft-pi-edition-python-maze-generator/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 00:59:12 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[CG Graphics]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Hobbies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[raspberryPi]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[minecraft]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=3090</guid>
		<description><![CDATA[Thanks @Dave Finch for this great example! This is my favorite of all the Minecraft scripts out there already.  I&#8217;ve update this great tool with a little more Python fancy schmanciness.  Made it object oriented and added some functionality with &#8230; <a href="http://www.jonasavrin.com/2013/02/18/minecraft-pi-edition-python-maze-generator/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-3063" alt="Rasp_turn_around" src="http://www.jonasavrin.com/wp-content/uploads/2013/01/Rasp_turn_around.gif" width="128" height="128" />Thanks <a title="raspberryPi.org" href="http://www.raspberrypi.org/phpBB3/viewtopic.php?p=288704#p288704" target="_blank">@Dave Finch</a> for this great example! This is my favorite of all the Minecraft scripts out there already.  I&#8217;ve update this great tool with a little more Python fancy schmanciness.  Made it object oriented and added some functionality with the idea of upgrading the algorithm to generate the maze, make it 3D, and add some funkiness.  Stay tuned!</p>
<div id="attachment_3093" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/02/biggerMaze.jpg" rel="lightbox[3090]"><img class="size-large wp-image-3093" alt="Maze mas grande, por favor!" src="http://www.jonasavrin.com/wp-content/uploads/2013/02/biggerMaze-500x257.jpg" width="500" height="257" /></a><p class="wp-caption-text">Maze mas grande, por favor!</p></div>
<div id="attachment_3096" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/02/photo-4.jpg" rel="lightbox[3090]"><img class="size-large wp-image-3096" alt="un maze mas pequeno por favor!" src="http://www.jonasavrin.com/wp-content/uploads/2013/02/photo-4-500x282.jpg" width="500" height="282" /></a><p class="wp-caption-text">un maze mas pequeno por favor!</p></div>
<p><span id="more-3090"></span></p>
<p>I made a command line file for use in the terminal and moved the code to a mazeLib.py. Why? Now I can type the command</p>
<pre class="brush: plain; title: ; notranslate">minegenerator</pre>
<p>in a terminal and build the maze like that or I can build and improve upon the Maze object that lives in mazeLib and debug it from an interactive terminal! I&#8217;m on my laptop and ssh&#8217;d into my pi so I needed a better debugging setup.</p>
<p>Create the two files below, chdir to /home/pi/mcpi/api/python/mcpi. You need to run code from here to work automatically. IMPORTANT, chmod the mazegenerator file you create to be executable by doing</p>
<pre class="brush: plain; title: ; notranslate">chmod 777 mazegenerator</pre>
<p>The two files that need to go in /home/pi/mcpi/api/python/mcpi :</p>
<p>mazegenerator (note: do not use a file extension)</p>
<pre class="brush: python; title: ; notranslate">#! /usr/bin/python
# Commandline maze generator for Minecraft Pi edition.
# @author: Jonas Avrin cghijinks@gmail.com

import sys
import traceback
import mazeLib

def main():
    '''Create a maze instance.'''
    m = mazeLib.Maze(sizex=10, sizey=10, max_wall_len=1, verbose=True)
    m.clear()
    m.initMaze()
    m.generate()

if __name__ == '__main__':
    try:
        result = main()
    except KeyboardInterrupt:
        print &quot;Bye&quot;
        sys.exit(1)
    if result:
        sys.exit(0)
    elif '--debug' in sys.argv:
        print traceback.sys.exc_info()
    else:
        sys.exit(1)
</pre>
<p>mineLib.py</p>
<pre class="brush: python; title: ; notranslate">'''
Created on Feb 18, 2013
@originalAuthor: Dave Finch
@author: Jonas Avrin cghijinks@gmail.com
'''
import minecraft
import block
import random
from random import randint as rand

class Maze(object):
    ''''''
    def __init__(self, **kwargs):
        self.verbose = kwargs.setdefault('verbose', False)
        # Connect to minecraft <img src='http://www.jonasavrin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 
        self.mc = self.connect()
        self.maze = []
        self.spl = []

        # Define the X and Y size of the maze including the outer walls.
        self.sizex = kwargs.get('sizex', None)
        self.sizey = kwargs.get('sizey', None)
        self.dimms = ()
        if self.sizex and self.sizey:
            self.dimms = (self.sizex, self.sizey)
        else:
            self.sizex = kwargs.setdefault('sizex', 21)
            self.sizey = kwargs.setdefault('sizey', 21)
        if self.verbose:
            print '# MAZE DIMMS #\n' \
                + 'sizex: %d sizey: %d:' % (self.sizex, self.sizey)

        # Set maximum length of wall
        self.max_wall_len = kwargs.setdefault('max_wall_len', 1)
        # Find position of player and set base of maze 3 blocks lower.
        self.ppos = self.mc.player.getPos()
        self.ppos.y -= 3

    @property
    def dimms(self):
        return self.sizex, self.sizey

    @dimms.setter
    def dimms(self, val):
        if not isinstance(val, tuple):
            raise TypeError('Dimensions value type must be a tuple(x, y)')
        for v in val:
            if not self.isodd(v):
                self.sizex, self.sizey = [v + 1 for v in val]
            else:
                self.sizex, self.sizey = [v for v in val]

    def isodd(self, num):
            return num &amp; 1 and True or False

    def create(self):
        # Create an empty maze.
        self.clear()
        self.initMaze()

    @staticmethod
    def connect():
        # Connect to Minecraft.
        try:
            mc = minecraft.Minecraft.create()
            return mc
        except:
            raise RuntimeError('Minecraft unavailable.')

    def clear(self):
        # Clear an area for the maze.
        for x in xrange(0, self.sizex - 1):
            for z in xrange(self.sizey - 1):
                self.mc.setBlock(self.ppos.x + x, self.ppos.y, self.ppos.z + z,
                                 block.STONE)
                for y in xrange(1, 6):
                    self.mc.setBlock(self.ppos.x + x, self.ppos.y + y,
                                     self.ppos.z + z, block.AIR)

    # Create a function to initialize the maze.
    def initMaze(self):
        # print player position
        if self.verbose:
            print 'player pos: %r' % self.ppos

        # Create a 2 dimensional array.
        self.maze = [[0] * self.sizey for x in xrange(self.sizex)]

        # print the maze
        if self.verbose:
            colsize = 0
            for m in self.maze:
                print ''.join(('%-*s' % (colsize + 3, i) for i in m))

        # Create four walls around the maze.
        # 1=wall, 0=walkway.
        for x in xrange(0, self.sizex):
            self.maze[x][0] = self.maze[x][self.sizey - 1] = 1
            self.makeWall(self.ppos.x + x, self.ppos.z + 0)
            self.makeWall(self.ppos.x + x, self.ppos.z + self.sizey - 1)
        for y in xrange(0, self.sizey):
            self.maze[0][y] = self.maze[self.sizex - 1][y] = 1
            self.makeWall(self.ppos.x, self.ppos.z + y)
            self.makeWall(self.ppos.x + self.sizex - 1, self.ppos.z + y)

        # Make every other cell a starting point.
        # 2=starting point.
        # Also create a list of these points to speed up the main loop.
        for y in xrange(2, self.sizey - 1, 2):
            for x in xrange(2, self.sizex - 2, 2):
                self.maze[x][y] = 2
                self.spl.append((x, y))

        # print the initialized maze
        if self.verbose:
            colsize = 0
            print 'maze initialized: \n'
            for m in self.maze:
                print ''.join(('%-*s' % (colsize + 3, i) for i in m))

            print '\n', 'rand spl: %r' % self.spl

        # Shuffle the list of points and we can choose a random point by
        # simply &quot;popping&quot; it off the list.
        random.shuffle(self.spl)
        if self.verbose:
            print 'rand spl: %r' % self.spl

    # Create a function for picking a random direction.
    def randDir(self):
        r = rand(0, 3)
        # Up.
        if r == 0:
            rv = (0, -1)
        # Down.
        if r == 1:
            rv = (0, 1)
        # Left.
        if r == 2:
            rv = (-1, 0)
        # Right.
        if r == 3:
            rv = (1, 0)
        return rv

    def generate(self):
        # Loop until we have no more starting points (2's in the empty maze)
        while filter(lambda x: 2 in x, self.maze):
            # Get the X and Y values of the first point in our randomized list.
            rx = self.spl[0][0]
            ry = self.spl[0][1]
            # Pop the first entry in the list, this deletes it,
            # the rest move down.
            self.spl.pop(0)
            # Check to see if our chosen point is still a valid starting point.
            ud = False
            if self.maze[rx][ry] == 2:
                ud = True
                # Pick a random wall length up to the maximum.
                rc = rand(0, self.max_wall_len)
                # Pick a random direction.
                rd = self.randDir()
                fc = rd
                loop = True
                while loop:
                    # Look in each direction, if the current wall being built
                    # is stuck inside itself start again.
                    if (self.maze[rx][ry - 2] == 3 and
                       self.maze[rx][ry + 2] == 3 and
                       self.maze[rx - 2][ry] == 3 and
                       self.maze[rx + 2][ry] == 3):
                        #
                        # Code to clear maze area required
                        #
                        self.initMaze(self.sizex, self.sizey)
                        break
                    # Look ahead to see if we're okay to go in this direction.
                    cx = rx + (rd[0] * 2)
                    cy = ry + (rd[1] * 2)
                    nc = self.maze[cx][cy]
                    if nc != 3:
                        for i in xrange(0, 2):
                            self.maze[rx][ry] = 3
                            self.makeWall(self.ppos.x + rx, self.ppos.z + ry)
                            rx += rd[0]
                            ry += rd[1]
                    # .....if not choose another direction.
                    else:
                        rd = self.randDir()
                    # If we hit an existing wall break out of the loop.
                    if nc == 1:
                        loop = False
                    # Update our wall length counter.
                    # When this hits zero pick another direction.
                    # This also makes sure the new direction
                    # isn't the same as the current one.
                    rc -= 1
                    if rc &lt;= 0:                         rc = rand(0, self.max_wall_len)                         dd = rd                         de = (fc[0] * -1, fc[1] * -1)                         while dd == rd or rd == de:                             rd = self.randDir()             # The latest wall has been built so             # change all 3's (new wall) to 1's (existing wall)             if ud:                 for x in xrange(0, self.sizex):                     for y in xrange(0, self.sizey):                         if self.maze[x][y] == 3:                             self.maze[x][y] = 1     def makeWall(self, x, z):         self.mc.setBlock(x, self.ppos.y, z, block.STONE)         self.mc.setBlock(x, self.ppos.y + 1, z, block.STONE)         self.mc.setBlock(x, self.ppos.y + 2, z, block.STONE) </pre>
<p>I tried to make a couple improvements by adding in some parameters to control the width, height, max wall size, and turning verbose on and off. Here&#8217;s an example of what you can do: In the /home/pi/mcpi/api/python/mcpi directory launch python by typing python and just look at my terminal below to get an idea.</p>
<pre class="brush: plain; title: ; notranslate">pi@raspberrypi ~/mcpi/api/python/mcpi $ python Python 2.7.3 (default, Jan 13 2013, 11:20:46) [GCC 4.6.3] on linux2 Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information. &gt;&gt;&gt; import mazeLib
&gt;&gt;&gt; m=mazeLib.Maze(sizex=10, sizey=10, max_wall_len=1)
&gt;&gt;&gt; m.dimms
(11, 11)
&gt;&gt;&gt; m.create()
&gt;&gt;&gt; m.verbose = True
&gt;&gt;&gt; m.create()
player pos: Vec3(9.91611,0.99797,36.0579)
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
maze initialized:

1  1  1  1  1  1  1  1  1  1  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  1  1  1  1  1  1  1  1  1  1

rand spl: [(2, 6), (8, 2), (6, 2), (2, 8), (6, 4), (8, 4), (8, 6), (4, 4), (2, 2), (6, 8), (4, 8), (6, 6), (8, 8), (4, 6), (2, 4), (4, 2), (2, 2), (4, 2), (6, 2), (8, 2), (2, 4), (4, 4), (6, 4), (8, 4), (2, 6), (4, 6), (6, 6), (8, 6), (2, 8), (4, 8), (6, 8), (8, 8)]
rand spl: [(8, 4), (8, 2), (4, 4), (4, 2), (8, 2), (6, 4), (4, 8), (2, 8), (2, 2), (4, 8), (4, 6), (2, 8), (4, 2), (6, 6), (2, 6), (8, 4), (8, 6), (4, 4), (8, 8), (6, 2), (6, 8), (2, 4), (6, 6), (8, 6), (2, 6), (6, 4), (6, 2), (2, 4), (2, 2), (6, 8), (4, 6), (8, 8)]
&gt;&gt;&gt; m.generate()
</pre>
<h2></h2>
<hr />
<h2>Further Explanation:</h2>
<ul>
<li><span style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'Nimbus Sans L', sans-serif; font-style: normal;">Instance of Maze is created with some custom sizing. You can call it with no arguments and it still works with some built in defaults.</span></li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m=mazeLib.Maze(sizex=10, sizey=10, max_wall_len=1)</pre>
<ul>
<li>The Maze object has a computed attribute called dimms, short for dimensions</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.dimms</pre>
<ul>
<li>Change the dimms attribute by setting it with another tuple or query it</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.dimms
(11, 11)
m.dimms = (20, 20)
&gt;&gt;&gt; m.dimms
(21, 21)</pre>
<blockquote><p><em><strong>Q</strong>: Why is this spitting out 21 instead of 20? </em></p>
<p><strong>A</strong>: The computed attribute checks to see if the number given is even and spits out an odd number. Quick explanation is that it makes it cleaner to do some computations with other functions to actually generate the maze and may help later when extending the object, I&#8217;m not sure on that part yet.</p></blockquote>
<ul>
<li>This is a method that can be called that just makes it easier to create the maze by combining some of the functions that do the actual building. It initializes it but doesn&#8217;t do the generating algorithm to actually fill in the maze.</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.create()</pre>
<ul>
<li>Turn verbose on/off interactively for debugging purposes.</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.verbose = True</pre>
<ul>
<li>The create method is being called with verbose on. Notice, the formatted printing to better visualize what&#8217;s happening with the 2d array.</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.create()
player pos: Vec3(9.91611,0.99797,36.0579)
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0
maze initialized:

1  1  1  1  1  1  1  1  1  1  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  0  2  0  2  0  2  0  2  0  1
1  0  0  0  0  0  0  0  0  0  1
1  1  1  1  1  1  1  1  1  1  1

rand spl: [(2, 6), (8, 2), (6, 2), (2, 8), (6, 4), (8, 4), (8, 6), (4, 4), (2, 2), (6, 8), (4, 8), (6, 6), (8, 8), (4, 6), (2, 4), (4, 2), (2, 2), (4, 2), (6, 2), (8, 2), (2, 4), (4, 4), (6, 4), (8, 4), (2, 6), (4, 6), (6, 6), (8, 6), (2, 8), (4, 8), (6, 8), (8, 8)]
rand spl: [(8, 4), (8, 2), (4, 4), (4, 2), (8, 2), (6, 4), (4, 8), (2, 8), (2, 2), (4, 8), (4, 6), (2, 8), (4, 2), (6, 6), (2, 6), (8, 4), (8, 6), (4, 4), (8, 8), (6, 2), (6, 8), (2, 4), (6, 6), (8, 6), (2, 6), (6, 4), (6, 2), (2, 4), (2, 2), (6, 8), (4, 6), (8, 8)]
</pre>
<ul>
<li>Turn verbose back off:</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.verbose = False</pre>
<ul>
<li>Generate the maze interior (run the algorithm to make the maze).</li>
</ul>
<pre class="brush: plain; title: ; notranslate">&gt;&gt;&gt; m.generate()</pre>
<hr />
<p>That&#8217;s it! I hope that explains what I did and hopefully it looks a bit cleaner and gives you some alternatives to how you can run scripts in minecraft. I am a bit perplexed as to how thrown together some of the scripts are out there, have a look at <a title="PEP8" href="http://www.python.org/dev/peps/pep-0008/" target="_blank">PEP8 </a>people! It sounds nit-picky but one of the most important ideas Python was written with is the idea of legible code. That&#8217;s not to say the original wasn&#8217;t legible, now it&#8217;s just more legible! <img src='http://www.jonasavrin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   I know, I know, I&#8217;m asking too much of the internets.</p>
<p>Have fun debugging and extending the maze! I know I will.<br />
I was having a look at some other maze algorithms like random walk as alternative methods. A 3D maze would be outstanding as well!</p>
<h2>Some other experiments:</h2>
<div id="attachment_3094" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/02/photo-2.jpg" rel="lightbox[3090]"><img class="size-large wp-image-3094" alt="minecraftPi digital clock" src="http://www.jonasavrin.com/wp-content/uploads/2013/02/photo-2-500x375.jpg" width="500" height="375" /></a><p class="wp-caption-text">minecraftPi digital clock</p></div>
<div id="attachment_3097" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/02/photo.jpg" rel="lightbox[3090]"><img class="size-large wp-image-3097" alt="minecraftPi minesweeper" src="http://www.jonasavrin.com/wp-content/uploads/2013/02/photo-500x375.jpg" width="500" height="375" /></a><p class="wp-caption-text">Gettin&#8217; down with some minesweeper.</p></div>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Minecraft Pi Edition Python Maze Generator',url: 'http://www.jonasavrin.com/2013/02/18/minecraft-pi-edition-python-maze-generator/',contentID: 'post-3090',suggestTags: 'linux,minecraft,Programming,python,raspberryPi',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2013/02/18/minecraft-pi-edition-python-maze-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Headless RPi Gets it on with Dashing Arduino</title>
		<link>http://www.jonasavrin.com/2013/01/01/headless-rpi-gets-it-on-with-independent-arduino/</link>
		<comments>http://www.jonasavrin.com/2013/01/01/headless-rpi-gets-it-on-with-independent-arduino/#comments</comments>
		<pubDate>Tue, 01 Jan 2013 20:25:41 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Hobbies]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[raspberryPi]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[arcade]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C64]]></category>
		<category><![CDATA[commodore64]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[emulation]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openhardware]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[Pi]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[raspbian]]></category>
		<category><![CDATA[RPi]]></category>
		<category><![CDATA[wheezy]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=3060</guid>
		<description><![CDATA[These are my first explorations with the RaspberryPi in conjunction with Arduino.  I try to keep things as simple as possible and only use Cygwin terminal to administer the Raspi remotely via ssh or sftp.  Sometimes its just easier to &#8230; <a href="http://www.jonasavrin.com/2013/01/01/headless-rpi-gets-it-on-with-independent-arduino/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.jonasavrin.com/wp-content/uploads/2013/01/Rasp_turn_around.gif" rel="lightbox[3060]"><img class="alignleft size-full wp-image-3063" title="Rasp_turn_around" src="http://www.jonasavrin.com/wp-content/uploads/2013/01/Rasp_turn_around.gif" alt="" width="128" height="128" /></a>These are my first explorations with the RaspberryPi in conjunction with Arduino.  I try to keep things as simple as possible and only use Cygwin terminal to administer the Raspi remotely via ssh or sftp.  Sometimes its just easier to use WinSCP to graphically drag and drop a bunch of files though.  For forwarding X11 I use Cygwin&#8217;s installation of XWin on my Windows machine as the client.  It&#8217;s as simple as setting the DISPLAY env variable and opening a ssh connection in conjunction with using the display forwarding option.</p>
<h2>The Setup</h2>
<ul>
<li>Windows 7 PC running Cygwin with XWin</li>
<li>RaspberryPi running Raspbian &#8212; Debian Wheezy for RPi</li>
<li>Arduino powered with an old Linksys modem DC adaptor</li>
<li>Additional software: ssh, sftp, winSCP, Processing, Arduino, VICE</li>
<li>All software is free and open-source</li>
<li>All hardware is open-source and very cheap or salvaged!</li>
</ul>
<div>
<div id="attachment_3066" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/01/Photo-2013-01-01-12.59.35-PM.jpg" rel="lightbox[3060]"><img class="size-large wp-image-3066 " title="RaspberryPi with Arduino" src="http://www.jonasavrin.com/wp-content/uploads/2013/01/Photo-2013-01-01-12.59.35-PM-500x375.jpg" alt="RaspberryPi with Arduino" width="500" height="375" /></a><p class="wp-caption-text">RaspberryPi with Arduino, 2 Hearts beating in just one LED.</p></div>
<p><span id="more-3060"></span></p>
</div>
<div id="attachment_3068" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/01/Photo-2013-01-01-12.59.50-PM.jpg" rel="lightbox[3060]"><img class="size-large wp-image-3068" title="Raspi with Arduino" src="http://www.jonasavrin.com/wp-content/uploads/2013/01/Photo-2013-01-01-12.59.50-PM-500x375.jpg" alt="Raspi with Arduino" width="500" height="375" /></a><p class="wp-caption-text">Side view</p></div>
<div id="attachment_3069" class="wp-caption aligncenter" style="width: 385px"><a href="http://www.jonasavrin.com/wp-content/uploads/2013/01/Photo-2013-01-01-01.00.00-PM-e1357071265934.jpg" rel="lightbox[3060]"><img class="size-large wp-image-3069 " title="RPi with Arduino making woopie with a breadboard" src="http://www.jonasavrin.com/wp-content/uploads/2013/01/Photo-2013-01-01-01.00.00-PM-e1357071265934-375x500.jpg" alt="RPi with Arduino making woopie with a breadboard" width="375" height="500" /></a><p class="wp-caption-text">RPi with Arduino making woopie on a breadboard</p></div>
<p>First Raspi met my LG HDTV and had an all too brief tryst because it had eyes for the Arduino and to be independent.  Unfortunately, she lost her head but she now is mated with her one true love at last!  She loves Arduino because he listens and is receptive but also can be independent and detach and do things all on his own.  Raspi also percieves his understated minimal personality and looks make him all the more dashing and handsome, along with his deep Italian accent.  He doesn&#8217;t care that she doesn&#8217;t have a head because he also is without a head.</p>
<p>I got inspiration for that little vignette from a post a French blogger wrote: Francois <a title="Francois Arduino" href="http://raspberry-python.blogspot.com" target="_blank">http://raspberry-python.blogspot.com</a>, Links are down below.</p>
<h2>Break it down, yeah</h2>
<p>Alright, all kidding aside, I&#8217;m really happy I had a little time to put this together finally.  Running a headless RPi was the first goal which was easily achievable with the latest Wheezy distro and ssh.  The configuration of the RPi was a breeze and the capability of ssh to always be turned on while booting of the device was a cinch.  Also, for administering and file transfer, some people out there rely on PuTTY and WinSCP a lot.  I tend to want to keep it simple and just use Cygwin terminal.</p>
<p>The benefit of operating in headless mode on the RPi is that the availability of the TV is no longer an issue.  I live in a small apartment and don&#8217;t have the luxury of having multiple TVs or monitors.  I can sit along side the wifey and play with the RPi and Arduino from my laptop while we both watch Netflix or Hulu on the PS3.</p>
<p>I can for instance play with Commodore 64 emulator from my wireless laptop on the couch or in the sanctuary of the bedroom.  VICE is the C64 emulator which comes included in the latest Wheezy distro packages and it was shocking how easy it was to install and get a game running.  There are some complicated setup processes online that took a while for me to read through and figure out really what is the simplest way but it really was simple after I distilled all of that information.</p>
<p>Running headless isn&#8217;t a completely awesome experience mind you if you are running some complicated visual tasks.  It is great for administering the Pi and for the sheer joy of being able to forward the display to my Windows machine.  For working on Arduino I can sacrifice a bit of time for the convenience of doing it from the comfort of just about anywhere!  Another beauty is that Arduino can separate and become independent of Pi after the code is compiled and uploaded, FUN!</p>
<h2>What&#8217;s next</h2>
<p>I can&#8217;t wait for Minecraft RPi edition to be out!  Being able to code along side of Minecraft is going to be a wonderful learning experience, not to mention I won&#8217;t have to spend hours and hours building stages by hand if I don&#8217;t want to.</p>
<p>Also, getting OpenVPN to work with RPi would be a grand achievement.  I had it on an old computer acting as my &#8220;always on&#8221; server in the attic, but sadly I had to abandon that idea because of the unpredictability of climate control up there.  Recently, water shorted out an extension in the only ceiling power outlet causing it to explode and melt the plug!  Thankfully, the system was not turned on and the plug was only powering a light bulb.</p>
<p>If anyone wants I will do a video of exactly what I did to set it all up but you can get all the information from these sources and figure it out yourself too.</p>
<p>Those mini arcade cabinets I&#8217;m seeing are quite attractive too, never mind their impracticality.  Of course Python power usage and PyGame are essential to get started with on the Pi.</p>
<h2>Sources</h2>
<ul>
<li><a title="OpenVPN" href="https://www.my-private-network.co.uk/knowledge-base/other-systems/raspberrypi.html" target="_blank">OpenVPN</a> - Tutorial on how to get OpenVPN working, still need to work out kinks</li>
<li><a title="RPi configuration" href="http://elinux.org/RPi_config.txt" target="_blank">RPi configuration</a> - Getting up and running with the Pi</li>
<li><a title="Raspbian" href="http://www.raspbian.org/FrontPage" target="_blank">Raspbian</a> - General information about the distro</li>
<li><a title="Raspbian faq" href="http://www.raspbian.org/RaspbianFAQ" target="_blank">Raspbian faq</a> - needed to set up proper apt sources.list, installations won&#8217;t work otherwise</li>
<li><a title="RPi Quick Start Guide" href="http://www.raspberrypi.org/quick-start-guide" target="_blank">RPi Quick Start Guide</a> - Start here for RPi</li>
<li><a title="Elinux.org RPi Hub" href="http://elinux.org/R-Pi_Hub" target="_blank">Elinux.org RPi Hub</a> - Central source of information during or after setting up the Pi</li>
<li><a title="RPi Linux Tutorials" href="http://elinux.org/RPi_Tutorials" target="_blank">Elinux.org RPi Tutorials</a> - Good place to start learning what to do with RPi</li>
<li><a title="Minecraft Pi Edition" href="http://www.raspberrypi.org/archives/2872" target="_blank">Minecraft Pi Edition</a> - OMG!  I can wait for this.</li>
<li><a title="Arduino Learning Linux" href="http://playground.arduino.cc/Learning/Linux" target="_blank">Getting Started: Arduino on Linux</a> - Get started with Arduino on the Pi</li>
<li><a title="Cygwin X faq" href="http://x.cygwin.com/docs/faq/cygwin-x-faq.html" target="_blank">Cygwin: X faq</a> - General troubleshooting X11 problems</li>
<li><a title="Cygwin Troubleshoot Display Forwarding" href="http://x.cygwin.com/docs/faq/cygwin-x-faq.html#q-xterm-utf8" target="_blank">Cygwin: Troubleshoot display forwarding</a> - Comes in handy when you can&#8217;t figure out why display isn&#8217;t forwarding correctly to your ssh client &#8212; in my case an Apple laptop with Win7 x64 and Cygwin.</li>
<li><a title="RPi Arduino Setup in French" href="http://raspberry-python.blogspot.com/2012/10/framboise-la-mode-arduino.html" target="_blank">Framboise a la mode arduino</a> - Installing Processing and Arduino on Wheezy</li>
<li><a title="RPi VICE C64 Emulator" href="http://elinux.org/RPi_VICE_C64_Emulator" target="_blank">RPi VICE C64 Emulator</a> - How to install VICE on RPi, just ignore that it is running on virtual box and setup your apt sources.list with the link above.</li>
<li><a title="Mojang Makers of Minecraft" href="http://www.mojang.com/" target="_blank">Mojang</a> &#8211; Makers of Minecraft</li>
<li><a title="RPi Mini Arcade Cabinet" href="http://blog.sheasilverman.com/2012/10/preview-raspberry-pi-arcade-cabinet/" target="_blank">RPi Mini Arcade Cabinet!</a></li>
</ul>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Headless RPi Gets it on with Dashing Arduino',url: 'http://www.jonasavrin.com/2013/01/01/headless-rpi-gets-it-on-with-independent-arduino/',contentID: 'post-3060',suggestTags: 'arcade,Arduino,C64,commodore64,cygwin,emulation,linux,openhardware,opensource,Pi,processing,Programming,raspberryPi,raspbian,RPi,wheezy',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2013/01/01/headless-rpi-gets-it-on-with-independent-arduino/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Maya-Config] Maya Environment: Phase I.I</title>
		<link>http://www.jonasavrin.com/2012/09/09/maya-config-maya-environment-phase-i-i/</link>
		<comments>http://www.jonasavrin.com/2012/09/09/maya-config-maya-environment-phase-i-i/#comments</comments>
		<pubDate>Sun, 09 Sep 2012 16:36:39 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[Maya]]></category>
		<category><![CDATA[mel]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Tech Art]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=3047</guid>
		<description><![CDATA[This post includes some additional important support material for what was discussed in [Maya-Config] Phase I.  I felt it needed a bit more elaboration than what I had time for.  I will continue with Phase II next time. Picking up &#8230; <a href="http://www.jonasavrin.com/2012/09/09/maya-config-maya-environment-phase-i-i/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.jonasavrin.com/wp-content/uploads/2010/08/maya2011_thumb.png" rel="lightbox[3047]"><img class="alignleft size-full wp-image-165" title="maya2011_thumb" src="http://www.jonasavrin.com/wp-content/uploads/2010/08/maya2011_thumb.png" alt="maya2011_thumb" width="76" height="99" /></a>This post includes some additional important support material for what was discussed in [Maya-Config] Phase I.  I felt it needed a bit more elaboration than what I had time for.  I will continue with Phase II next time.</p>
<div id="attachment_3056" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2012/09/FelixStratosSpaceJump.gif" rel="lightbox[3047]"><img class="size-large wp-image-3056" title=" Felix Baumgartner Red Bull Stratos Space Jump Oct 14 2012" src="http://www.jonasavrin.com/wp-content/uploads/2012/09/FelixStratosSpaceJump-500x274.gif" alt="Felix Baumgartner Red Bull Stratos Space Jump Oct 14 2012" width="500" height="274" /></a><p class="wp-caption-text">Felix Baumgartner Red Bull Stratos Space Jump Oct 14 2012</p></div>
<p><span id="more-3047"></span>Picking up where we left off in <a title="[Maya-Config] Maya Environment: Phase I" href="http://www.jonasavrin.com/2012/08/22/maya-config-maya-environment-phase-i/" target="_blank">Phase I</a>, the following simple environment variables were created on Windows using a .bat script:</p>
<p>PYTHONPATH<br />
MAYA_SCRIPT_PATH<br />
MAYA_PLUGIN_PATH<br />
XBMLANGPATH<br />
PATH</p>
<p>The significance of these variables are briefly outlined in the previous post, but most of the time they are the most essential paths to hook tool libraries into Maya.  Remember this is going off the main idea or maxim outlined earlier in Phase I, we are concerned with expanding Maya&#8217;s default libraries with our own which live externally and independently from the installation directory.</p>
<p>The purpose for other paths that are setup in the config script are a little obscured but will be more apparent in subsequent posts including this one.  Take a look at the ROOT paths that were setup.  The main idea is to set up the base directories and create variables out of them to then append only the most necessary child directories relative to the ROOT dirs.  This allows for flexibility and the changing of the fewest variables possible when libraries change location on the system.</p>
<p>It is important to organize a directory structure that makes sense for you production that lives under these ROOT dirs and remains constant.  So choose carefully how you wish to organize libraries not only for the sake of consistency, but so that editing the config script is kept simple.  After trial and error, you&#8217;ll figure out what best suits your production but if you want an example, use this, as it has worked very well for me:</p>
<ul>
<li>myMayaLib-01</li>
</ul>
<ol>
<li>bin</li>
<li>icons</li>
<li>mel</li>
<li>plug-ins</li>
<li>python</li>
</ol>
<ul>
<li>myMayaLib-02</li>
</ul>
<ol>
<li>bin</li>
<li>icons</li>
<li>mel</li>
<li>plug-ins</li>
<li>python</li>
<li>startup</li>
</ol>
<p>The first example is meant to be a basic structure for a lib that supports mel, python and plug-ins.  The second adds the startup directory where startup userSetup.mel and or userSetup.py files can exists.  A little easter egg here: You can use multiple userSetup.mel and .py files that live in child folders to initialize tools upon startup and if downloaded script packages have a userSetup then those can be used too.  This isn&#8217;t typical, but it is possible.  As an example, Red9 employs a userSetup to initialize it&#8217;s tools.  If this script is in the search path during startup Maya will use it to initialize the Red9 tools suite the way the author intended.  Further customization is available, but I&#8217;ll leave it at that, just food for thought.</p>
<p>That&#8217;s it for now, it&#8217;s a short piece, but future posts will continue adding value to this subject by fleshing out subsequent Maya configuration phases, throwing in little tidbits on further advancement of Maya customization.  By the end, at least there will be somewhere on the &#8216;net where people can find some useful information about this.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: '[Maya-Config] Maya Environment: Phase I.I',url: 'http://www.jonasavrin.com/2012/09/09/maya-config-maya-environment-phase-i-i/',contentID: 'post-3047',suggestTags: 'config,configuration,development,environment,library,Maya,scripting,scripts,tools,windows',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2012/09/09/maya-config-maya-environment-phase-i-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Maya-Config] Maya Environment: Phase I</title>
		<link>http://www.jonasavrin.com/2012/08/22/maya-config-maya-environment-phase-i/</link>
		<comments>http://www.jonasavrin.com/2012/08/22/maya-config-maya-environment-phase-i/#comments</comments>
		<pubDate>Thu, 23 Aug 2012 02:29:33 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[Maya]]></category>
		<category><![CDATA[mel]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[production engineering]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=2926</guid>
		<description><![CDATA[How do you tame the beast that is your ever growing collection of mel, cpp/python plug-ins, and python scripts? Curate a library of cross-platform, multi-language extensions! Teach yourself how to setup a proper library of Maya tools by following the &#8230; <a href="http://www.jonasavrin.com/2012/08/22/maya-config-maya-environment-phase-i/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.jonasavrin.com/wp-content/uploads/2010/08/maya2011_thumb.png" rel="lightbox[2926]"><img class="alignleft size-full wp-image-165" title="maya2011_thumb" src="http://www.jonasavrin.com/wp-content/uploads/2010/08/maya2011_thumb.png" alt="maya2011_thumb" width="76" height="99" /></a></p>
<p>How do you tame the beast that is your ever growing collection of mel, cpp/python plug-ins, and python scripts?</p>
<p>Curate a library of cross-platform, multi-language extensions!</p>
<p>Teach yourself how to setup a proper library of Maya tools by following the steps outlined here.  This is by no means the only way to do it.  [edit: This is strictly for learning purposes and not intended for production use, but by all means apply what you learn to your specific production needs at your discretion!]  It can get as sophisticated as time permits and as your production demands.  To put it simply, this is a great starting place for people wanting to learn some of the basics of how to manipulate your Maya environment.  The techniques described are simple, however this isn&#8217;t a Maya beginner task so I assume the reader knows a bit about scripting, how to use a shell or command line, and other Maya internals of course.  I am willing to break it down in further posts of course.  There is a lot of information to go over so this topic will be have to be continued in a series of posts.</p>
<div id="attachment_3035" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jonasavrin.com/wp-content/uploads/2012/08/ARCTIC_waves_001.jpg" rel="lightbox[2926]"><img src="http://www.jonasavrin.com/wp-content/uploads/2012/08/ARCTIC_waves_001-500x329.jpg" alt="Arctic Waves!" title="ARCTIC_waves_001" width="500" height="329" class="size-large wp-image-3035" /></a><p class="wp-caption-text">Surfers Dane Gudauskas, Alex Parker and Keith Malloy normally carve up the golden beaches of sunny California but made the trip to the Arctic, where temperatures as low as just 2-3C, after hearing about the smooth waves.</p></div>
<p><span id="more-2926"></span></p>
<p>&nbsp;</p>
<hr />
&nbsp;</p>
<h2>The Scripting Environment Simplified</h2>
<p>&nbsp;</p>
<p>The maxim:  Portability and Modularity are paramount &#8211; Maximize efficiency and time spent working on tools (the fun artistic stuff) and to iterate, iterate, iterate.  See altdevblogaday&#8217;s <a title="iterate-better-iterate-faster" href="http://www.altdevblogaday.com/2011/06/27/iterate-better-iterate-faster/" target="_blank">post</a> on iteration to catch my meaning.</p>
<p>Environment Configuration</p>
<ul>
<li>Set a few key environment variables using a config script, in this case windows batch file.  One root location for a Maya extensions repository. Starts Maya in batch, mayapy, prompt, or UI mode.</li>
<li>Allow freedom to change physical locations, and from linux to windows, at any time with little setup time.  It&#8217;s as simple as setting the root variable in the config script.</li>
<li>.environment file <Linux> and/or [maya][startupVer]_[config]_[x64].bat <Windows></li>
</ul>
<p>Hook into Maya</p>
<ul>
<li>userSetup .mel and .py, the only script file(s) you need to use to extend Maya with your libraries.</li>
<li>Python &#8211; &#8216;batteries included&#8217; os modules for library management</li>
<li>Python &#8211; cross-platform, just works without additional scripting.</li>
<li>Mel &#8211; find environment variables from mel to generate script search paths.</li>
<li>Mel &#8211; is not as cross-platform friendly.  Different system calls on different platforms, but the rest just works.</li>
</ul>
<p>Integration and Expansion</p>
<ul>
<li>Use downloaded custom tools along side of your tools and work tools and store them all under one root, possibly shared, directory.</li>
<li>Development is continual process independent of location.</li>
<li>Personal SVN &#8211; versioning and access of repository from file system or the cloud.</li>
<li>Symlinks and Link Shell Extension to help integrate into any system with little worry about syncing on different file systems, and problems/pitfalls that go along with using them.</li>
</ul>
<p>Eclipse/External IDE, Remote Debugging</p>
<ul>
<li>Eclipse &#8211; A great cross platform IDE with capabilities of communication with Maya remotely, and I know of one big studio that uses it.</li>
<li>Eclipse &#8211; Can be tricky to set up i.e. auto-complete, intellisense, etc.  Luckily there is the internet!</li>
<li>Python &#8211; The necessity to learn first how Python runs modules.</li>
<li>Guides on internet are more prevalent and more professionals are adopting.</li>
<li>Eclipse &#8211; Has built-in and extendable SVN tools for syncing with different users or just backing up to a local repository.</li>
<li>Eclipse &#8211; Even has local history, so going back to a version of a script from a couple of days ago super easy.</li>
</ul>
<p>Benefits Restated</p>
<ul>
<li>Feel savvy and sophisticated.</li>
<li>Knowing how Maya startup works makes scripts and plug-ins more portable even working along side sophisticated Maya environments without fear of corruption of network environment.</li>
<li>Migrate Maya versions much more easily.  Run multiple Maya instances.  Upgrade tools quicker with each successive version.</li>
</ul>
<p>Future Plans</p>
<ul>
<li><del datetime="2012-07-29T23:57:15+00:00">Python Wing IDE</del> I&#8217;m no longer supporting licensed IDE&#8217;s</li>
<li>Breakdown of library into packs based on artistic discipline or task. Why?  Why do we do anything, to cut down on cost! It gets expensive and inefficient in multiple ways to run Maya with tons of additions.</li>
<li>To expand on the previous point, extend one set of environment startup settings into separate configuration settings for different Maya versions, modes, or projects.</li>
</ul>
<p>&nbsp;</p>
<hr />
&nbsp;</p>
<h2>Maya DOS Cmd Shell Configuration Script</h2>
<p>&nbsp;</p>
<p>Step 1: In general terms, initialize the environment.  There are more than several cocktails to use when doing this, but the simplest is a shell script.  Other more sophisticated ways might entail creating configurations using Python, Perl, or other scripting language of choice.  Additionally, these scripts can act in concert with wrapping the Maya executable, but here the basics will get it started.</p>
<p>The process I will use is employing the windows .bat file.  Here is an example to startup Maya in UI mode, which is probably what most people are interested in.  Don&#8217;t worry if it seems long, I will break it down piece by piece later on.  It&#8217;s the same script repeated, but the difference is Maya is being executed in different modes.</p>
<p>&nbsp;</p>
<pre class="brush: bash; title: ; notranslate">
@echo on
c:
cd \
rem \\-----Lib Root
set ROOT=B:\Portable_Library\dev
rem \\-----Scripting root directory containing startup configs
set JAROOT=%ROOT%\jaMayaLib-dev_0
rem \\-----Mel scripts (supports multiple paths to external libs)
set MELROOT=%JAROOT%\mel;%ROOT%\jaTools-dev_0\mel
rem \\-----Python scripts (supports multiple paths to external libs)
set PYROOT=%JAROOT%\python\jaMayaLib;%ROOT%\jaTools-dev_0\python;%ROOT%\cgmTools-dev_0\python;%ROOT%\pymel-1.0.3
rem \\-----Plug-ins
set PLUGINS=%JAROOT%\plug-ins
rem \\-----Icons
set ICONS=%JAROOT%\icons
rem \\-----Startup configs
set STARTUPROOT=%JAROOT%\startup\%COMPUTERNAME%
rem \\-----IDE path
set ECLIPSE=C:\Program Files\eclipse
rem \\-----Maya installation
set MAYA=C:\Program Files\Autodesk\Maya2012
rem \\-----Maya executable
set MAYABIN=%MAYA%\bin
rem \\-----Add userSetup.mel and jaUtils paths to usersetup paths
set MAYA_SCRIPT_PATH=%STARTUPROOT%;%MELROOT%
rem \\-----Additional Maya Plug-ins
set PLUGINS=%PLUGINS%;%MAYA%/devkit/plug-ins/scripted
rem \\-----Put Maya on the PATH
set PATH=%PATH%;%MAYABIN%
rem \\-----userSetup.py and python paths
set PYTHONPATH=%PYTHONPATH%;%STARTUPROOT%;%PYROOT%;%MAYA%\Python\Lib\site-packages;%ECLIPSE%\plugins\org.python.pydev.debug_2.2.1.2011071313\pysrc
rem \\-----Startup maya!-----// 
maya
</pre>
<p>&nbsp;<br />
<strong>Same script essentially but launch maya in BATCH mode (non-interface, non-interactive)</strong><br />
&nbsp;</p>
<pre class="brush: bash; title: ; notranslate">
@echo on
c:
cd \
rem \\-----Lib Root
set ROOT=B:\Portable_Library\dev
rem \\-----Scripting root directory containing startup configs
set JAROOT=%ROOT%\jaMayaLib-dev_0
rem \\-----Mel scripts (supports multiple paths to external libs)
set MELROOT=%JAROOT%\mel;%ROOT%\jaTools-dev_0\mel
rem \\-----Python scripts (supports multiple paths to external libs)
set PYROOT=%JAROOT%\python\jaMayaLib;%ROOT%\jaTools-dev_0\python;%ROOT%\cgmTools-dev_0\python;%ROOT%\pymel-1.0.3
rem \\-----Plug-ins
set PLUGINS=%JAROOT%\plug-ins
rem \\-----Icons
set ICONS=%JAROOT%\icons
rem \\-----Startup configs
set STARTUPROOT=%JAROOT%\startup\%COMPUTERNAME%
rem \\-----IDE path
set ECLIPSE=C:\Program Files\eclipse
rem \\-----Maya installation
set MAYA=C:\Program Files\Autodesk\Maya2012
rem \\-----Maya executable
set MAYABIN=%MAYA%\bin
rem \\-----Add userSetup.mel and jaUtils paths to usersetup paths
set MAYA_SCRIPT_PATH=%STARTUPROOT%;%MELROOT%
rem \\-----Additional Maya Plug-ins
set PLUGINS=%PLUGINS%;%MAYA%/devkit/plug-ins/scripted
rem \\-----Put Maya on the PATH
set PATH=%PATH%;%MAYABIN%
rem \\-----userSetup.py and python paths
set PYTHONPATH=%PYTHONPATH%;%STARTUPROOT%;%PYROOT%;%MAYA%\Python\Lib\site-packages;%ECLIPSE%\plugins\org.python.pydev.debug_2.2.1.2011071313\pysrc
rem \\-----Startup maya!-----// 
maya -prompt
</pre>
<p>&nbsp;<br />
<strong>Same script essentially but launch maya in BATCH -prompt mode (non-interface, interactive)</strong><br />
&nbsp;</p>
<pre class="brush: bash; title: ; notranslate">
c:
cd \
rem \\-----Lib Root
set ROOT=B:\Portable_Library\dev
rem \\-----Scripting root directory containing startup configs
set JAROOT=%ROOT%\jaMayaLib-dev_0
rem \\-----Mel scripts (supports multiple paths to external libs)
set MELROOT=%JAROOT%\mel;%ROOT%\jaTools-dev_0\mel
rem \\-----Python scripts (supports multiple paths to external libs)
set PYROOT=%JAROOT%\python\jaMayaLib;%ROOT%\jaTools-dev_0\python;%ROOT%\cgmTools-dev_0\python;%ROOT%\pymel-1.0.3
rem \\-----Plug-ins
set PLUGINS=%JAROOT%\plug-ins
rem \\-----Icons
set ICONS=%JAROOT%\icons
rem \\-----Startup configs
set STARTUPROOT=%JAROOT%\startup\%COMPUTERNAME%
rem \\-----IDE path
set ECLIPSE=C:\Program Files\eclipse
rem \\-----Maya installation
set MAYA=C:\Program Files\Autodesk\Maya2012
rem \\-----Maya executable
set MAYABIN=%MAYA%\bin
rem \\-----Add userSetup.mel and jaUtils paths to usersetup paths
set MAYA_SCRIPT_PATH=%STARTUPROOT%;%MELROOT%
rem \\-----Additional Maya Plug-ins
set PLUGINS=%PLUGINS%;%MAYA%/devkit/plug-ins/scripted
rem \\-----Put Maya on the PATH
set PATH=%PATH%;%MAYABIN%
rem \\-----userSetup.py and python paths
set PYTHONPATH=%PYTHONPATH%;%STARTUPROOT%;%PYROOT%;%MAYA%\Python\Lib\site-packages;%ECLIPSE%\plugins\org.python.pydev.debug_2.2.1.2011071313\pysrc
rem \\-----Startup maya!-----// 
mayabatch
pause
</pre>
<p>&nbsp;<br />
<strong>Same script essentially but launch maya in MAYAPY interactive mode (python)</strong><br />
&nbsp;</p>
<pre class="brush: bash; title: ; notranslate">
c:
cd \
rem \\-----Lib Root
set ROOT=B:\Portable_Library\dev
rem \\-----Scripting root directory containing startup configs
set JAROOT=%ROOT%\jaMayaLib-dev_0
rem \\-----Mel scripts (supports multiple paths to external libs)
set MELROOT=%JAROOT%\mel;%ROOT%\jaTools-dev_0\mel
rem \\-----Python scripts (supports multiple paths to external libs)
set PYROOT=%JAROOT%\python\jaMayaLib;%ROOT%\jaTools-dev_0\python;%ROOT%\cgmTools-dev_0\python;%ROOT%\pymel-1.0.3
rem \\-----Plug-ins
set PLUGINS=%JAROOT%\plug-ins
rem \\-----Icons
set ICONS=%JAROOT%\icons
rem \\-----Startup configs
set STARTUPROOT=%JAROOT%\startup\%COMPUTERNAME%
rem \\-----IDE path
set ECLIPSE=C:\Program Files\eclipse
rem \\-----Maya installation
set MAYA=C:\Program Files\Autodesk\Maya2012
rem \\-----Maya executable
set MAYABIN=%MAYA%\bin
rem \\-----Add userSetup.mel and jaUtils paths to usersetup paths
set MAYA_SCRIPT_PATH=%STARTUPROOT%;%MELROOT%
rem \\-----Additional Maya Plug-ins
set PLUGINS=%PLUGINS%;%MAYA%/devkit/plug-ins/scripted
rem \\-----Put Maya on the PATH
set PATH=%PATH%;%MAYABIN%
rem \\-----userSetup.py and python paths
set PYTHONPATH=%PYTHONPATH%;%STARTUPROOT%;%PYROOT%;%MAYA%\Python\Lib\site-packages;%ECLIPSE%\plugins\org.python.pydev.debug_2.2.1.2011071313\pysrc
rem \\-----set MAYA_LOCATION when running mayapy
set MAYA_LOCATION=%MAYA%
rem \\-----Startup maya!-----//
mayapy
</pre>
<p>&nbsp;</p>
<p>The main Maya environment paths you should be concerned with setting up if you are just starting out are:</p>
<p>PYTHONPATH<br />
MAYA_SCRIPT_PATH<br />
MAYA_PLUGIN_PATH<br />
XBMLANGPATH<br />
PATH</p>
<p>If you don&#8217;t know what environment variables are used for or why these variables are significant, take a look at the Maya <a href="http://download.autodesk.com/global/docs/maya2012/en_us/index.html" target="_blank">documentation</a> and search for environment variables to get a better idea.</p>
<p>In Windows shell <a href="http://ss64.com/nt/syntax.html" target="_blank">commands</a>, &#8216;rem&#8217; at the beginning of a line is a commented line.  So everything after &#8216;rem&#8217; is code that will not be run but acts as a comment or description of what&#8217;s happening.  Here the layman armed with this knowledge can read through the code and get an idea of what&#8217;s happening by just reading the commented lines.  In this tutorial of sorts, I will cover the &#8216;why&#8217; of most things that are being done, the &#8216;what&#8217; should be clearly outlined in the commented lines.</p>
<p>Briefly speaking, in this code &#8216;<a href="http://ss64.com/nt/set.html" target="_blank">set</a>&#8216; is being used to set temporary environment variables.  Here the use of non-permanent variables is simply to keep the Windows environment cleaner and provide the ability to create multiple versions, or configurations, to initialize Maya.  The variables&#8217; significance isn&#8217;t readily apparent at this point, but they all are important.  Environment variables are widely used to set certain constants in production environments.  From these few constant, relatively unchanging variables, we have enough containers of information for Maya to get started and the scripting environment, or libraries, to be initialized. </p>
<p>More on that, the significance of the variables described in the above scripts, and the next step in the outline in a future post!  I&#8217;ve ran out of beer!</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: '[Maya-Config] Maya Environment: Phase I',url: 'http://www.jonasavrin.com/2012/08/22/maya-config-maya-environment-phase-i/',contentID: 'post-2926',suggestTags: 'development,environment,linux,plugins,production engineering,scripting,scripts,tools,windows',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2012/08/22/maya-config-maya-environment-phase-i/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Custom Maya Startup: Adding User Python Site-Packages</title>
		<link>http://www.jonasavrin.com/2012/05/12/custom-maya-startup-adding-user-python-site-packages/</link>
		<comments>http://www.jonasavrin.com/2012/05/12/custom-maya-startup-adding-user-python-site-packages/#comments</comments>
		<pubDate>Sat, 12 May 2012 11:41:09 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[Maya]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Tech Art]]></category>
		<category><![CDATA[customize]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[site-packages]]></category>
		<category><![CDATA[userSetup.py]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=2969</guid>
		<description><![CDATA[&#160; &#160; Say you have an environment variable named PYROOT with a lis of a few paths where python libs are stored. Use python&#8217;s site module to add your lib directories as site directories like this: This quick script works &#8230; <a href="http://www.jonasavrin.com/2012/05/12/custom-maya-startup-adding-user-python-site-packages/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.jonasavrin.com/wp-content/uploads/2011/03/python1.png" rel="lightbox[2969]"><img src="http://www.jonasavrin.com/wp-content/uploads/2011/03/python1.png" alt="" title="python" width="76" height="99" class="alignleft size-full wp-image-2629" /></a></p>
<p>&nbsp;<br />
&nbsp;</p>
<p><strong>S</strong>ay you have an environment variable named PYROOT with a lis of a few paths where python libs are stored.  Use python&#8217;s site module to add your lib directories as site directories like this:</p>
<pre class="brush: python; title: ; notranslate">
import os
import site
PYTHONPATHS = []
if os.environ.has_key('PYROOT'):
	if os.pathsep in os.environ.get('PYROOT'):
		for p in str.split(os.environ.get('PYROOT'), os.pathsep):
			PYTHONPATHS.append(p)
	else:
		PYTHONPATHS.append(os.environ.get('PYROOT'))


if len(PYTHONPATHS):
	for j in PYTHONPATHS:
		site.addsitedir(j)
</pre>
<p>This quick script works cross-platform using os.pathsep to test for environment variable separators &#8216;;&#8217; (win) and &#8216;:&#8217; (linux) and using that to split the PYROOT string variable appending each of the paths to the PYTHONPATHS buffer list.  By using the site.addsitedir module, python will treat these directories as normal site-package directories with all the built-in abilities to customize such as sitecustomize module and .pth files.  If subdirectories are already organized into packages using __init__.py then they are already ready to be used and imported into Maya right away, or else if the directory has a .py file and no __init__.py just add an empty one.</p>
<p>To add your custom user site-packages directory just append the lines of code or create a new userSetup.py and make sure it is on your PYTHONPATH when you start up, previously explained <a href="http://www.jonasavrin.com/2011/02/18/maya-env-configuration-of-variables-using-usersetup-mel-and-usersetup-py/" title="Maya.env Configuration of Variables Using userSetup.mel and userSetup.py">here</a>, or just put it in any one of the default maya scripts areas.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Custom Maya Startup: Adding User Python Site-Packages',url: 'http://www.jonasavrin.com/2012/05/12/custom-maya-startup-adding-user-python-site-packages/',contentID: 'post-2969',suggestTags: 'customize,linux,python,script,site,site-packages,userSetup.py,windows',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2012/05/12/custom-maya-startup-adding-user-python-site-packages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ice Age 4 Trailer</title>
		<link>http://www.jonasavrin.com/2012/03/06/ice-age-4-trailer/</link>
		<comments>http://www.jonasavrin.com/2012/03/06/ice-age-4-trailer/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 14:51:45 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[Film]]></category>
		<category><![CDATA[Trailer]]></category>
		<category><![CDATA[blue sky]]></category>
		<category><![CDATA[ia4]]></category>
		<category><![CDATA[ice age]]></category>
		<category><![CDATA[Movie]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=2915</guid>
		<description><![CDATA[Some fruits of my labors over the past months.  I&#8217;ve learned so much and I can&#8217;t wait to share more stuff about my experience so far working on this great sequel as a tech anim. &#160;]]></description>
				<content:encoded><![CDATA[<p><iframe width="584" height="329" src="http://www.youtube.com/embed/QYoksW3SVJY?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Some fruits of my labors over the past months.  I&#8217;ve learned so much and I can&#8217;t wait to share more stuff about my experience so far working on this great sequel as a tech anim.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Ice Age 4 Trailer',url: 'http://www.jonasavrin.com/2012/03/06/ice-age-4-trailer/',contentID: 'post-2915',suggestTags: 'blue sky,ia4,ice age,Movie,Trailer',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2012/03/06/ice-age-4-trailer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2012: The Year of the Dragon, DIY, Hacktivism (Oh, hai der Mr. Blarg!)</title>
		<link>http://www.jonasavrin.com/2012/01/01/2012-the-year-of-the-dragon-diy-hacktivism-oh-hai-der-mr-blarg/</link>
		<comments>http://www.jonasavrin.com/2012/01/01/2012-the-year-of-the-dragon-diy-hacktivism-oh-hai-der-mr-blarg/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 23:20:05 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[About]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech Art]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Csh]]></category>
		<category><![CDATA[Dynamic DNS]]></category>
		<category><![CDATA[futurism]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[Virtual Computing]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=2897</guid>
		<description><![CDATA[It&#8217;s been long enough. The intention to get back to blogging, probably the most enriching things that the internet can be used for, is not as easy as it the benefit would lead one to believe. It is often the &#8230; <a href="http://www.jonasavrin.com/2012/01/01/2012-the-year-of-the-dragon-diy-hacktivism-oh-hai-der-mr-blarg/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.jonasavrin.com/wp-content/uploads/2012/01/tumblr_lw4859IuTQ1qfjjglo1_400.gif" rel="lightbox[2897]"><img class="aligncenter size-full wp-image-2904" title="oh hai!" src="http://www.jonasavrin.com/wp-content/uploads/2012/01/tumblr_lw4859IuTQ1qfjjglo1_400.gif" alt="oh hai!" width="275" height="173" /></a></p>
<p>It&#8217;s been long enough. The intention to get back to blogging, probably the most enriching things that the internet can be used for, is not as easy as it the benefit would lead one to believe. It is often the hardest these sort of things in life that have the greatest benefit that go without being utilized, but that changes now with the mother of all instigators, New Years Day.</p>
<p>What&#8217;s the topic of the year that is a continuation and solidification of growing interest in the previous year? What else, the ubiquitous topic across the blog-o-sphere; filtering, utilizing and leveraging the mind-numbingly viral growth of open source hardware and software, DIY, Hacktivism, Public Domain, and Creative Commons information to engage in gratuitous amounts of geekery, life/career hacking.</p>
<p>Expect expositions in 2012 on topics in addition to the aforementioned and the regular posts on 3d animation and tech art ranging in this list of interests:</p>
<p>Linux<br />
C-Shell Scripting<br />
Python<br />
Arduino<br />
Use of hobby as a way of making money<br />
Dynamic DNS<br />
Game Dev<br />
Futurism<br />
Virtual Computing</p>
<p>Hopefully shedding some light on some of the fundamentals will blaze trails for others that are interested to get started in the most noble of activities of the modern era, one that is being affected by movements like SOPA; developing and sharing software and media and artist entrepreneurialism.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: '2012: The Year of the Dragon, DIY, Hacktivism (Oh, hai der Mr. Blarg!)',url: 'http://www.jonasavrin.com/2012/01/01/2012-the-year-of-the-dragon-diy-hacktivism-oh-hai-der-mr-blarg/',contentID: 'post-2897',suggestTags: 'Arduino,Csh,Dynamic DNS,futurism,gamedev,linux,python,scripting,Virtual Computing',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2012/01/01/2012-the-year-of-the-dragon-diy-hacktivism-oh-hai-der-mr-blarg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coast to Coast!  Blue Sky here I come!</title>
		<link>http://www.jonasavrin.com/2011/09/08/coast-to-coast-blue-sky-here-i-come/</link>
		<comments>http://www.jonasavrin.com/2011/09/08/coast-to-coast-blue-sky-here-i-come/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 18:27:29 +0000</pubDate>
		<dc:creator>Jonas Avrin</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Film]]></category>
		<category><![CDATA[Profile]]></category>
		<category><![CDATA[blue sky]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[film]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[Movie]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[VFX]]></category>

		<guid isPermaLink="false">http://www.jonasavrin.com/?p=2889</guid>
		<description><![CDATA[Done!  After a few weeks of back and forth and interviews I finally landed the job of my dreams, well, for the time being.  Blue Sky has always been on the radar as a potential and it&#8217;s finally a reality. &#8230; <a href="http://www.jonasavrin.com/2011/09/08/coast-to-coast-blue-sky-here-i-come/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="attachment_2890" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.jonasavrin.com/wp-content/uploads/2011/09/scrat_cont_crackup.jpg" rel="lightbox[2889]"><img class="size-medium wp-image-2890 " title="scrat_cont_crackup" src="http://www.jonasavrin.com/wp-content/uploads/2011/09/scrat_cont_crackup-300x127.jpg" alt="Scrat Continental Crackup" width="300" height="127" /></a><p class="wp-caption-text">How I&#39;ve felt for so long about working in VFX/Anim industry.</p></div>
<div id="attachment_2891" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.jonasavrin.com/wp-content/uploads/2011/09/ice_age_continental_drift.jpg" rel="lightbox[2889]"><img class="size-medium wp-image-2891 " title="ice_age_continental_drift" src="http://www.jonasavrin.com/wp-content/uploads/2011/09/ice_age_continental_drift-300x127.jpg" alt="Ice Age: Continental Drift" width="300" height="127" /></a><p class="wp-caption-text">My first project</p></div>
<p>Done!  After a few weeks of back and forth and interviews I finally landed the job of my dreams, well, for the time being.  Blue Sky has always been on the radar as a potential and it&#8217;s finally a reality.  It&#8217;s everything I could ask for in an employer and more.</p>
<p>Don&#8217;t think that it&#8217;s going to stop me from being active on my blog though, quite the opposite!  Well, maybe the first month or two starting now there will be a pause, but after that it will increase.  I&#8217;m super excited to learn and share knowledge with people and stay really connected and dedicated to innovating personal and industry wide workflows, tech, and of course animation.  Technical animation and tech art to be specific is what I&#8217;ll be working on in the coming months, same as usual.</p>
<p>Thanks to everyone that&#8217;s been involved in the process of landing this, you know who you are!  I don&#8217;t think they know yet what a valuable asset they just acquired but soon they will find out just how serious I am about the work I do and how inspired I can be!</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Coast to Coast!  Blue Sky here I come!',url: 'http://www.jonasavrin.com/2011/09/08/coast-to-coast-blue-sky-here-i-come/',contentID: 'post-2889',suggestTags: 'Animation,blue sky,career,film,jobs,Movie,technical,VFX',providerName: 'CG Hijinks',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-remember.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.jonasavrin.com/2011/09/08/coast-to-coast-blue-sky-here-i-come/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
