<?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>Alec&#039;s Web Log</title>
	<atom:link href="http://www.alecjacobson.com/weblog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.alecjacobson.com/weblog</link>
	<description>In a few words, explain what this blog is about...or else</description>
	<lastBuildDate>Sun, 13 May 2012 10:54:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SPARticus</title>
		<link>http://www.alecjacobson.com/weblog/?p=2632</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2632#comments</comments>
		<pubDate>Sun, 13 May 2012 10:54:10 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[liquify]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[spar]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2632</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="media/spar-lady.gif"><img src="media/spar-lady.gif" alt="spar lady winking" class=center></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2632</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a local website with server-side scripts on Mac OS X</title>
		<link>http://www.alecjacobson.com/weblog/?p=2625</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2625#comments</comments>
		<pubDate>Sun, 13 May 2012 10:38:48 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cgi]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2625</guid>
		<description><![CDATA[Try to go to http://localhost/. If you don&#8217;t find anything there then turn on System Preferences &#62; Sharing &#62; Web Sharing.
On my 10.7 machine the default site location is at /Library/WebServer/Documents/index.html.en You should be able to edit this file and see that http://localhost/ changes.
Now, we&#8217;d like to have an arbitrary folder contain our website, so [...]]]></description>
			<content:encoded><![CDATA[<p>Try to go to <a href="http://localhost/">http://localhost/</a>. If you don&#8217;t find anything there then turn on System Preferences &gt; Sharing &gt; Web Sharing.</p>
<p>On my 10.7 machine the default site location is at <code>/Library/WebServer/Documents/index.html.en</code> You should be able to edit this file and see that <a href="http://localhost/">http://localhost/</a> changes.</p>
<p>Now, we&#8217;d like to have an arbitrary folder contain our website, so I&#8217;ll use <code>~/Documents/IGL-website</code>. Copy your websites source or put some source in this folder.</p>
<p>Now we setup the redirect necessary to send some local domain name (we&#8217;ll use <code>localigl</code> to our website at <code>~/Documents/IGL-website</code>. Open up the file <code>/private/etc/hosts</code> and add the line:</p>
<pre><code>
127.0.0.1       localigl
</code></pre>
<p>Now you should see that going to <a href="http://localigl/">http://localigl/</a> also directs to <code>/Library/WebServer/Documents/index.html.en</code></p>
<p>Now edit the file<br />
<code>/private/etc/apache2/users/YOURUSERNAME.conf</code><br />
and add the following:</p>
<pre><code>
NameVirtualHost *:80

&lt;Directory "/Users/YOURUSERNAME/Sites/"&gt;
    Options Indexes MultiViews Includes
    AllowOverride All
    Order allow,deny
    Allow from all
&lt;/Directory&gt;

&lt;VirtualHost *:80&gt;
    ServerName localhost
    DocumentRoot /Users/YOURUSERNAME/Sites/
&lt;/VirtualHost&gt;

&lt;Directory "/Users/YOURUSERNAME/Documents/IGL-website/"&gt;
    Options Indexes MultiViews Includes
    AllowOverride All
    Order allow,deny
    Allow from all
&lt;/Directory&gt;

&lt;VirtualHost *:80&gt;
    ServerName localigl
    DocumentRoot /Users/YOURUSERNAME/Documents/IGL-website/
&lt;/VirtualHost&gt;
</code></pre>
<p>You&#8217;ll need to add executable permissions to the path preceding your website, so for my example this means:</p>
<pre><code>
chmod +x ~/Documents
</code></pre>
<p>To get php scripts working correctly, in <code>/private/etc/apache2/httpd.conf</code> uncomment the following line to look like this:</p>
<pre><code>
LoadModule php5_module libexec/apache2/libphp5.so
</code></pre>
<p>Now, you must restart your apache server. The easiest way is to toggle System Preferences &gt; Sharing &gt; Web Sharing.</p>
<p>With all this, you should now be able to go to <a href="http://localigl/">http://localigl/</a> and see your (possibly php-based) webpage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2625</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switch Google web search to scholar search</title>
		<link>http://www.alecjacobson.com/weblog/?p=2621</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2621#comments</comments>
		<pubDate>Fri, 11 May 2012 08:24:24 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[scholar]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2621</guid>
		<description><![CDATA[Google removed &#8220;Scholar&#8221; from the drop down list of choices when searching the web. I had become very used to searching for something, either from the main google page or my browsers address bar and then switching the search to google scholar. Now I would have to first go to scholar.google.com and retype the search [...]]]></description>
			<content:encoded><![CDATA[<p>Google removed &#8220;Scholar&#8221; from the drop down list of choices when searching the web. I had become very used to searching for something, either from the main google page or my browsers address bar and then <i>switching</i> the search to google scholar. Now I would have to first go to scholar.google.com and retype the search query or copy and paste the query.</p>
<p>Finally instead I found the way to quickly change the URL at the top of the web search to switch it to a scholar search. If this is your web search url:</p>
<pre><code>
http://www.google.com/<span style="background-color:#f54;">search</span>?hl=en&#038;client=safari&#038;rls=en&#038;q=Fast+Automatic+Skinning+Transformations&#038;oq=Fast+Automatic+Skinning+Transformations&#038;aq=f&#038;aqi=p-p1&#038;aql=&#038;gs_l=serp.3..35i39.2032.2203.0.2388.2.2.0.0.0.0.70.124.2.2.0...0.0.wzP9uU0hsCc
</code></pre>
<p>just replace <code>search</code> with <code>scholar</code></p>
<pre><code>
http://www.google.com/<span style="background-color:#4F5;">scholar</span>?hl=en&#038;client=safari&#038;rls=en&#038;q=Fast+Automatic+Skinning+Transformations&#038;oq=Fast+Automatic+Skinning+Transformations&#038;aq=f&#038;aqi=p-p1&#038;aql=&#038;gs_l=serp.3..35i39.2032.2203.0.2388.2.2.0.0.0.0.70.124.2.2.0...0.0.wzP9uU0hsCc
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2621</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fast Automatic Skinning Transformations project page</title>
		<link>http://www.alecjacobson.com/weblog/?p=2614</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2614#comments</comments>
		<pubDate>Wed, 09 May 2012 16:48:30 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[bounded biharmonic weights]]></category>
		<category><![CDATA[disney]]></category>
		<category><![CDATA[eth zurich]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[fast automatic skinning transformations]]></category>
		<category><![CDATA[igl]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2614</guid>
		<description><![CDATA[
  

My colleagues, Ilya Baran, Ladislav Kavan, Jovan Popovi&#x107;, Olga Sorkine, and I have just submitted the camera ready version of paper &#8220;Fast Automatic Skinning Transformations&#8221; to be presented at ACM SIGGRAPH 2012.  I&#8217;ve put up a fast automatic skinning transformations page where you can find the preprint version of the article, videos [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://igl.ethz.ch/projects/fast/"><br />
  <img src="media/fast-automatic-skinning-transformations-100-armadillos-small.jpg" class="center" alt="100 Armadillos animated in real time."><br />
</a></p>
<p>My colleagues, Ilya Baran, Ladislav Kavan, Jovan Popovi&#x107;, Olga Sorkine, and I have just submitted the camera ready version of paper &#8220;Fast Automatic Skinning Transformations&#8221; to be presented at ACM SIGGRAPH 2012.  I&#8217;ve put up a <a href="http://igl.ethz.ch/projects/fast/">fast automatic skinning transformations page</a> where you can find the <a href="http://igl.ethz.ch/projects/fast/fast-automatic-skinning-transformations-siggraph-2012-jacobson-et-al.pdf">preprint version of the article</a>, videos and more to come.</p>
<h3>Abstract</h3>
<p>Skinning transformations are a popular way to articulate shapes and characters. However, traditional animation interfaces require all of the skinning transformations to be specified explicitly, typically using a control structure (a rig). We propose a system where the user specifies only a subset of the degrees of freedom and the rest are automatically inferred using nonlinear, rigidity energies. By utilizing a low-order model and reformulating our energy functions accordingly, our algorithm runs orders of magnitude faster than previous methods without compromising quality. In addition to the immediate boosts in performance for existing modeling and real time animation tools, our approach also opens the door to new modes of control: disconnected skeletons combined with shape-aware inverse kinematics. With automatically generated skinning weights, our method can also be used for fast variational shape modeling.</p>
<p><strong>Update:</strong> The <a href="media/fast-automatic-skinning-transformations-100-armadillos.jpg">full resolution version</a> of the above teaser.</p>
<p><strong>Update:</strong> The accompanying video (with narration)<br />
<iframe width="450" height="252" src="http://www.youtube.com/embed/PRcXy2LjI9I" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2614</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Triangle wave for indices (integers)</title>
		<link>http://www.alecjacobson.com/weblog/?p=2611</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2611#comments</comments>
		<pubDate>Fri, 04 May 2012 08:43:33 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[matlab]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[modulo]]></category>
		<category><![CDATA[triangle]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2611</guid>
		<description><![CDATA[Often I have N things and I want to assign them to n&#60;&#60;N groups/colors/positions etc. If I don&#8217;t care too much about their order or distribution I might randomly assign them. If I care that sequential items go into different groups and that groups get the same number of items I might use:

ids = mod(indices,n)+1

Which [...]]]></description>
			<content:encoded><![CDATA[<p>Often I have N things and I want to assign them to n&lt;&lt;N groups/colors/positions etc. If I don&#8217;t care too much about their order or distribution I might randomly assign them. If I care that sequential items go into different groups and that groups get the same number of items I might use:</p>
<pre><code>
ids = mod(indices,n)+1
</code></pre>
<p>Which plotted as a function of the indices looks like a sawtooth wave:<br />
<img src="media/index-mod-sawtooth.png" class=center alt="index mod sawtooth"></p>
<p>Another way to get non-repeating numbers, with near-equal distribution is to use a triangle wave, counting up to n and then back down to 1 and repeating:</p>
<pre><code>
ids = abs(mod(indices,n*2-2)-n+1)+1
</code></pre>
<p>which looks like:<br />
<img src="media/index-mod-triangle.png" class=center alt="index mod triangle"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2611</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clear all variables in MATLAB workspace of certain type</title>
		<link>http://www.alecjacobson.com/weblog/?p=2608</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2608#comments</comments>
		<pubDate>Thu, 03 May 2012 07:22:21 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[clear]]></category>
		<category><![CDATA[delete]]></category>
		<category><![CDATA[matlab]]></category>
		<category><![CDATA[remove]]></category>
		<category><![CDATA[type]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2608</guid>
		<description><![CDATA[Here&#8217;s a snippet to clear all variables of a certain class in your matlab workspace:

D = whos();
D = D(arrayfun(@(d) strcmp(d.class,'yourclassname'),D));
clear(D.name)

]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a snippet to clear all variables of a certain class in your matlab workspace:</p>
<pre><code>
D = whos();
D = D(arrayfun(@(d) strcmp(d.class,'yourclassname'),D));
clear(D.name)
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2608</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subtracting 1 pixel from outline of every frame in animated gif</title>
		<link>http://www.alecjacobson.com/weblog/?p=2606</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2606#comments</comments>
		<pubDate>Tue, 01 May 2012 10:21:36 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[stroke]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2606</guid>
		<description><![CDATA[When I overlay animations on background images there&#8217;s often a a thin outline of white or near white coming from the texture mapping + anti-aliasing in my application.

I came up with two easy ways to get around this in photoshop. First just add a black stroke to every frame. This works well for cartoons:

The other [...]]]></description>
			<content:encoded><![CDATA[<p>When I overlay animations on background images there&#8217;s often a a thin outline of white or near white coming from the texture mapping + anti-aliasing in my application.<br />
<img src="media/worm-propeller-animation-with-clouds.gif" class="center" alt="worm animation with correct transparency over clouds"><br />
I came up with two easy ways to get around this in photoshop. First just add a black stroke to every frame. This works well for cartoons:<br />
<img src="media/worm-propeller-animation-stroke.gif" class="center" alt="worm animation with stroke"><br />
The other option is very similar. Add a stroke to each layer but instead of &#8220;adding&#8221; the stroke color, subtract it from the image. Select the blending options in the stroke layer style to look like this:<br />
<img src="media/photoshop-subtract-stroke-layer-style.png" alt="photoshop subtract stroke layer style" class="center"><br />
which produces something like:<br />
<img src="media/worm-propeller-animation-subtract.gif" class="center" alt="worm animation subtract stroke"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2606</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>imagemagick animated gif layers showing through transparency</title>
		<link>http://www.alecjacobson.com/weblog/?p=2601</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2601#comments</comments>
		<pubDate>Tue, 01 May 2012 10:13:11 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[layer]]></category>
		<category><![CDATA[tga]]></category>
		<category><![CDATA[transparency]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2601</guid>
		<description><![CDATA[Today I finally got around to supporting screen dumps from my opengl apps with transparency. I&#8217;ve been wanting to do this for a while, so that I can easily make animated gifs that can be overlaid on a background image/video. I ran into a weird problem using imagemagick&#8217;s convert tool. I was dumping every frame [...]]]></description>
			<content:encoded><![CDATA[<p>Today I finally got around to supporting screen dumps from my opengl apps with transparency. I&#8217;ve been wanting to do this for a while, so that I can easily make animated gifs that can be overlaid on a background image/video. I ran into a weird problem using imagemagick&#8217;s convert tool. I was dumping every frame to a file called:  screencapture-01.tga, screencapture-02.tga, &#8230; and then calling:</p>
<pre><code>
convert screencapture-*.tga screencapture.gif
</code></pre>
<p>This made an animated gif with transparency, but each frame showed the previous frames behind it. Resulting in something like this:<br />
<img src="media/worm-propeller-animation-wrong.gif" class="center" alt="worm animation with wrong transparency"></p>
<p>The magic keyword seems to be &#8220;dispose&#8221; and calling the following fixed my problem:</p>
<pre><code>
convert -dispose 2 screencapture-*.tga screencapture.gif
</code></pre>
<p>which results in:<br />
<img src="media/worm-propeller-animation.gif" class="center" alt="worm animation with correct transparency"></p>
<p>Then I can underlay a background image and get something like:<br />
<img src="media/worm-propeller-animation-with-clouds.gif" class="center" alt="worm animation with correct transparency over clouds"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2601</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sousaphone animated</title>
		<link>http://www.alecjacobson.com/weblog/?p=2599</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2599#comments</comments>
		<pubDate>Tue, 01 May 2012 09:01:38 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[linear blend skinning]]></category>
		<category><![CDATA[monotonic]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2599</guid>
		<description><![CDATA[Here&#8217;s a sneak peek at some new results.

]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a sneak peek at some new results.<br />
<img src="media/sousaphone-animated.gif" alt="sousaphone animated" class="center"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2599</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical report: A Cotangent Laplacian for Images as Surfaces</title>
		<link>http://www.alecjacobson.com/weblog/?p=2592</link>
		<comments>http://www.alecjacobson.com/weblog/?p=2592#comments</comments>
		<pubDate>Mon, 23 Apr 2012 06:25:56 +0000</pubDate>
		<dc:creator>ajx</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[geometry]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[image processing]]></category>
		<category><![CDATA[mesh]]></category>

		<guid isPermaLink="false">http://www.alecjacobson.com/weblog/?p=2592</guid>
		<description><![CDATA[
We decided to write up a quick, 2 page technical report about some ideas we&#8217;ve had in the last year. 
Abstract
By embedding images as surfaces in a high dimensional coordinate space defined by each pixel’s Cartesian coordinates and color values, we directly define and employ cotangent-based, discrete differential-geometry operators. These operators define discrete energies useful [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://igl.ethz.ch/projects/bbw/a-cotangent-laplacian-for-images-as-surfaces-2012-jacobson-sorkine.pdf"><img src="media/image-surface-thumb.png" class=center alt="A Cotangent Laplacian for Images as Surfaces"></a><br />
We decided to write up a quick, 2 page <a href="http://igl.ethz.ch/projects/bbw/a-cotangent-laplacian-for-images-as-surfaces-2012-jacobson-sorkine.pdf">technical report</a> about some ideas we&#8217;ve had in the last year. </p>
<p><strong>Abstract</strong><br />
By embedding images as surfaces in a high dimensional coordinate space defined by each pixel’s Cartesian coordinates and color values, we directly define and employ cotangent-based, discrete differential-geometry operators. These operators define discrete energies useful for image segmentation and colorization.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alecjacobson.com/weblog/?feed=rss2&amp;p=2592</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

