<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Meemoo web media wiring</title>
 <link href="http://meemoo.org/atom.xml" rel="self"/>
 <link href="http://meemoo.org/"/>
 <updated>2021-11-05T13:33:05+00:00</updated>
 <id>http://meemoo.org/</id>
 <author>
   <name>Forrest Oliphant</name>
   <email>forrest@forresto.com</email>
   <uri>http://forresto.com</uri>
 </author>

 
 
 <entry>
   <title>Thinking about Meemoo 2.0</title>
   <link href="http://meemoo.org/blog/2020-10-17-thinking-about-meemoo-2-0"/>
   <updated>2020-10-17T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/thinking-about-meemoo-2-0</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;Meemoo lives!&lt;/p&gt;

&lt;p&gt;This is how I started my last post (2016). I’m happy that Meemoo continues to work whenever I spin it up with an idea.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://app.meemoo.org/#gist/e8bba8fe01e4c8df2327214b2773e17f&quot;&gt;&lt;img alt=&quot;meemoo app with video clips of me counting 1 2 3 4 in individual loops&quot; src=&quot;https://meemoo.org/images/meemoo-1234.gif&quot; width=&quot;628&quot; height=&quot;597&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Saving to gist needs some help. Github probably turned off anonymous Gist creation, or changed that API. Other than that, I think that this project is stable enough to keep working. As long as I pay for the domain registration.)&lt;/p&gt;

&lt;p&gt;Meemoo as a project and thesis always had these layers in mind:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;A layer on top to build mini apps with UI, to encapsulate the dataflow flow view.&lt;/li&gt;
  &lt;li&gt;(Existing) data flow view.&lt;/li&gt;
  &lt;li&gt;A layer beneath, to see, fork, and/or edit the source code of any module.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I commissioned this illustration to show how these layers would unfold:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://meemoo.org/images/meemoo-illo-by-jyri-pieniniemi.png&quot;&gt;&lt;img src=&quot;https://meemoo.org/images/meemoo-illo-by-jyri-pieniniemi-400.png&quot; alt=&quot;meemoo layers&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this sequence of layers in the Meemoo ecosystem, I imagined guiding folks down the rabbit hole towards “learning to code.”&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Somebody sees an eye-catching image or animation out on the internet somewhere.&lt;/li&gt;
  &lt;li&gt;They ask the author “what app did you use to make that?”&lt;/li&gt;
  &lt;li&gt;They get a link to the Meemoo app, and use it to make and share their own images. (Layer 1)&lt;/li&gt;
  &lt;li&gt;They might stop there, but they might notice the invitation to hack the app, and see the data flow behind the UI. (Layer 2)&lt;/li&gt;
  &lt;li&gt;Once they understand how hacking the app works, and see the library of available modules, they might want to hack a module or make their own with code. (Layer 3)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There was also supposed to be a community site for sharing and forking these mini apps. Why did Meemoo stall with just the dataflow layer? Probably some combination of starting a family, running out of grant funding, and getting a day job. Standing up an online community is a major obligation in terms of moderation. I felt like making a community without committing the resources to make it a safe and good learning environment would be worse than not making the community at all. Meemoo hasn’t gained traction or a life of its own, which I’ve decided to be OK with.&lt;/p&gt;

&lt;p&gt;Also it reached a local maxima of being “fun enough,” which isn’t a bad thing.&lt;/p&gt;

&lt;h2 id=&quot;meemoo-20&quot;&gt;Meemoo 2.0?&lt;/h2&gt;

&lt;p&gt;So what is there to do at this point? Will there be a Meemoo 2.0?&lt;/p&gt;

&lt;p&gt;Meemoo is built on Backbone and jQuery/UI, which are fairly obsolete. On the other hand, they are simple, stable, and &lt;em&gt;work&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A lot has changed in web development in the 9 years since my first commits. In the first version, the camera module was powered by Flash, because the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia&quot;&gt;web standards for accessing a device camera&lt;/a&gt; hadn’t shipped yet. As standards like this shipped to the web platform, I was able to remove code and complexity.&lt;/p&gt;

&lt;p&gt;Meemoo’s “Hello World” app is a camera module that sends images to an image stack, that can compile an animated GIF.&lt;/p&gt;

&lt;iframe allow=&quot;camera&quot; src=&quot;https://app.meemoo.org/#example/cam2gif&quot; style=&quot;width: 100%; height: 480px;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href=&quot;https://app.meemoo.org/#example/cam2gif&quot;&gt;Meemoo cam2gif&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If Meemoo modules were packaged as Web Components, it would be possible to build this app with a few lines of code in any web page:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;nt&quot;&gt;&amp;lt;meemoo-cam&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cam&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;meemoo-animation&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;animation&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;meemoo-link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;from=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cam&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;out=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;image&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;to=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;animation&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;in=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;image&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;By taking the module code out of the dataflow environment, it might be possible to jump from interface to code more easily. The dataflow environment wouldn’t be needed to style or edit the app, but it could be loaded as a layer on top of (or under) the published app.&lt;/p&gt;

&lt;p&gt;I’m not sure if Web Components are really the best abstraction for what I want to do here. There are at least &lt;a href=&quot;https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/&quot;&gt;43 ways to build Web Components&lt;/a&gt;, that have tradoffs with authoring complexity and compatibility with other frameworks. This has caused some analysis paralysis on my part.&lt;/p&gt;

&lt;p&gt;I’m also not sure if “reusing Meemoo components” should be my first design goal with future Meemoo work.&lt;/p&gt;

&lt;h2 id=&quot;so-what-is-the-web-missing&quot;&gt;So what is the web missing?&lt;/h2&gt;

&lt;p&gt;Several of my web developer peers express fondness for Flash, as it existed around 2002. I credit the combination of vector editing, timeline animation, and scripting with my initial love for creative coding. Are there any environments that combine separate modalities like this now? What about other metaphors, like spreadsheets for tabular data editing and visualization?&lt;/p&gt;

&lt;p&gt;I’ve been thinking about designing a “thicker” Meemoo module with a full-featured animation timeline. Maybe also a mini spreadsheet module.&lt;/p&gt;

&lt;p&gt;But is dataflow the correct metaphor to be coordinating these modalities?&lt;/p&gt;

&lt;p&gt;Could it be that the “correct” metaphor is just a webpage, with any framework, or none at all?&lt;/p&gt;

&lt;h2 id=&quot;exposing-ports&quot;&gt;“Exposing ports”&lt;/h2&gt;

&lt;p&gt;Meemoo components announce their inports and outports: what type of data they expect as input, and output. This is something that most component systems lack, including React and standard Web Components.&lt;/p&gt;

&lt;p&gt;This enables a few things:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;UI for tweaking initial state of components&lt;/li&gt;
  &lt;li&gt;Wiring hints for compatible data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do any other component systems expose “data types” like this? Is there room for some kind of standard around this?&lt;/p&gt;

&lt;h2 id=&quot;hmu&quot;&gt;HMU&lt;/h2&gt;

&lt;p&gt;After several years on the backburner, I’d like to find Meemoo’s next step. Got ideas? 👉 &lt;a href=&quot;https://github.com/meemoo/meemooapp/issues/145&quot;&gt;Talk in issue #145&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>The Learning Center school Maker Faire</title>
   <link href="http://meemoo.org/blog/2016-03-10-tlc-maker-faire"/>
   <updated>2016-03-10T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/tlc-maker-faire</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;Meemoo lives!&lt;/p&gt;

&lt;p&gt;We were invited to set up a stop-motion animation station at the local school’s Maker Faire. A lot of people came to try their hand at making stop-motion loops. A few people had done stop-motion before, so I was able to pitch the hackability aspect to them. I think that the Maker Faire surroundings helped people understand the benefit of being able to hack creative apps.&lt;/p&gt;

&lt;p&gt;One young person asked how to wire in &lt;a href=&quot;http://www.leshylabs.com/apps/sfMaker/&quot;&gt;sound effects&lt;/a&gt;… that’s a module that needs to be made!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/lLByoNc.gif&quot; alt=&quot;aperture&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/eVcMcw6.gif&quot; alt=&quot;alien olive flower&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/53odKlP.gif&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/cqii4Du.gif&quot; alt=&quot;shape dance&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/47XHGD0.gif&quot; alt=&quot;blink&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/oBzROxq.gif&quot; alt=&quot;jumping tailless&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/EYysC6P.gif&quot; alt=&quot;smile frown&quot; /&gt; &lt;img src=&quot;https://i.imgur.com/jbOQxEB.gif&quot; alt=&quot;fire flower&quot; /&gt;&lt;/p&gt;

&lt;video preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; style=&quot;width: 300px; height: 300px;&quot;&gt;
  &lt;source src=&quot;//i.imgur.com/cHx8TV4.mp4&quot; type=&quot;video/mp4&quot; /&gt;&amp;lt;/source&amp;gt;
  &lt;source src=&quot;//i.imgur.com/cHx8TV4.webm&quot; type=&quot;video/webm&quot; /&gt;&amp;lt;/source&amp;gt;
&lt;/video&gt;

&lt;h2 id=&quot;update&quot;&gt;Update&lt;/h2&gt;

&lt;h3 id=&quot;imgur&quot;&gt;Imgur&lt;/h3&gt;

&lt;p&gt;I jumped back into Meemoo a bit to change how images are stored to the web. Imgur has a funny GIFV format that’s actually a looping mp4/webm video. (If you see a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gifv&lt;/code&gt; link you can change it to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.mp4&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.webm&lt;/code&gt;.) This is nice for longer animations with big filesizes. Meemoo still has to save and upload the animation as GIF, so the process is lossy, but still an improvement.&lt;/p&gt;

&lt;p&gt;You can see the looping video made by Imgur in the last loop above.&lt;/p&gt;

&lt;h3 id=&quot;https-everywhere&quot;&gt;HTTPS everywhere&lt;/h3&gt;

&lt;p&gt;Chrome started blocking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getUserMedia&lt;/code&gt; (webcam) access on non-https web apps. Meemoo will now redirect you from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http:&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https:&lt;/code&gt; so you should not run into that issue.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Turtle power to the people</title>
   <link href="http://meemoo.org/blog/2015-01-14-turtle-power-to-the-people"/>
   <updated>2015-01-14T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/turtle-power-to-the-people</id>
   <author>
    <name>Vilson Vieira</name>
    <email>vilson@void.cc</email>
    <uri>http://automata.cc</uri>
   </author>
   <content type="html">&lt;h1 id=&quot;the-grid-meet-up&quot;&gt;The Grid meet up&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/auto_mata/15065111643&quot; title=&quot;MozFest 2014 #ArtOfWeb by Vilson Vieira, on Flickr&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7552/15065111643_46ca051fa5_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest 2014 #ArtOfWeb&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After working for about three years with &lt;a href=&quot;http://twitter.com/forresto&quot;&gt;Forrest&lt;/a&gt; we finally meet him on a meet up of &lt;a href=&quot;https://thegrid.io/#15&quot;&gt;The Grid&lt;/a&gt; team.&lt;/p&gt;

&lt;p&gt;During the first days we were preparing a workshop for &lt;a href=&quot;http://mozfestartoftheweb.tumblr.com/&quot;&gt;MozFest’s #ArtOfWeb&lt;/a&gt; track. The idea was to present a quick introduction to &lt;a href=&quot;http://flowhub.io&quot;&gt;Flowhub&lt;/a&gt;/&lt;a href=&quot;http://noflojs.org&quot;&gt;NoFlo&lt;/a&gt; and how to use it to draw with &lt;a href=&quot;http://mirobot.io&quot;&gt;Mirobot&lt;/a&gt;. Then we would let people create their own drawings.&lt;/p&gt;

&lt;p&gt;We created a &lt;a href=&quot;http://github.com/noflo/noflo-mirobot&quot;&gt;NoFlo component&lt;/a&gt; to talk with Mirobot:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/mPaTFEJ.png&quot; style=&quot;max-width: 100%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Having the robot represented as a component made it easier to even explain to people how it was drawing: “the &lt;em&gt;SendCommand&lt;/em&gt; component waits for commands — like go forward or turn left — so when it receives a new command, it sends it to the robot. When the robot finishes drawing, it signalizes banging the &lt;em&gt;completed&lt;/em&gt; port, so we are good for the next command”.&lt;/p&gt;

&lt;p&gt;For the workshop &lt;a href=&quot;http://gabithu.me&quot;&gt;Gabi&lt;/a&gt; created a NoFlo graph that draws contours of a given image:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/F7C5adG.png&quot; style=&quot;max-width: 100%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Given an image as input (the heart), the graph extracts its edges and chooses random points from it. If we give those points to Mirobot draw randomly, it will end up with a random path that wouldn’t remember the original shape of a heart. We have to order the points in a way the robot will travel along the shortest path. We have a Travelling Salesman Person solver that finds the shortest path. After converting cartesian coordinates to polar ones — because Mirobot just understands translations and rotations, remember? &lt;em&gt;forward X&lt;/em&gt; and &lt;em&gt;turn left/right Y&lt;/em&gt; — we send the commands to Mirobot and using &lt;em&gt;noflo-canvas&lt;/em&gt; we draw a preview. Here’s the result:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/auto_mata/15686069502&quot; title=&quot;MozFest 2014 #ArtOfWeb by Vilson Vieira, on Flickr&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7581/15686069502_b1ba2ffe39_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest 2014 #ArtOfWeb&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other graph collects points someone draw on a canvas and after sending that, Mirobot draws them on paper:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/auto_mata/15065111643&quot; title=&quot;MozFest 2014 #ArtOfWeb by Vilson Vieira, on Flickr&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7552/15065111643_46ca051fa5_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest 2014 #ArtOfWeb&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The meetup with &lt;a href=&quot;https://thegrid.io/#15&quot;&gt;The Grid&lt;/a&gt; was incredible. We met &lt;a href=&quot;http://twitter.com/forresto&quot;&gt;Forrest&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/jononor&quot;&gt;Jon Nordby&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/bergie&quot;&gt;Henri Bergius&lt;/a&gt;. &lt;a href=&quot;http://twitter.com/llandwerlin&quot;&gt;Lionel Landwerlin&lt;/a&gt; joined us some days later. Those guys never stopped coding and inspiring us.&lt;/p&gt;

&lt;h1 id=&quot;more-robots-on-the-way&quot;&gt;More robots on the way&lt;/h1&gt;

&lt;p&gt;While preparing the workshop we built a hack to Mirobot, making it possible to draw on walls. That’s a work-in-progress and we are planning to keep improving and &lt;a href=&quot;http://automata.cc/drawbot&quot;&gt;documenting&lt;/a&gt; the process.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/auto_mata/15374301527&quot; title=&quot;_MG_0062 by Vilson Vieira, on Flickr&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5612/15374301527_724a160dc5_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest 2014 #ArtOfWeb&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;mozfests-artofweb&quot;&gt;MozFest’s ArtOfWeb&lt;/h1&gt;

&lt;p&gt;MozFest was fantastic. We met &lt;a href=&quot;http://twitter.com/codekat&quot;&gt;Kat&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/jenelson&quot;&gt;Eric&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/archiville&quot;&gt;Paula&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/mishymishyme&quot;&gt;Michelle&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/alliself&quot;&gt;Allison&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/ossington&quot;&gt;Ginger&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/rlaf&quot;&gt;Ricardo&lt;/a&gt; and all the other incredible “art phreaks” of the &lt;a href=&quot;mozfestartoftheweb.tumblr.com&quot;&gt;#ArtOfWeb&lt;/a&gt; track. &lt;a href=&quot;http://twitter.com/bjpirt&quot;&gt;Ben Pirt&lt;/a&gt;, the Mirobot’s creator, joined us in the art gallery and brought us his bots and kindness.&lt;/p&gt;

&lt;p&gt;ArtOfWeb was a refuge during the chaotic creative tornado of MozFest. A place to chat, create and relax listening to &lt;a href=&quot;http://soundcloud.com/alahaus/sets/mozfestartgallerymixl2&quot;&gt;good music&lt;/a&gt; and enjoying art installations.&lt;/p&gt;

&lt;center&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Yay, &lt;a href=&quot;https://twitter.com/hashtag/Mozfest?src=hash&quot;&gt;#Mozfest&lt;/a&gt;: The &lt;a href=&quot;https://twitter.com/hashtag/ARTOFWEB?src=hash&quot;&gt;#ARTOFWEB&lt;/a&gt; Gallery is packed w/ folks teaching + making open art together. Join now on Floor 2! &lt;a href=&quot;http://t.co/bx4GMKXNUV&quot;&gt;pic.twitter.com/bx4GMKXNUV&lt;/a&gt;&lt;/p&gt;&amp;mdash; Kat Braybrooke (@codekat) &lt;a href=&quot;https://twitter.com/codekat/status/525971411924684800&quot;&gt;25 October 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;/center&gt;

&lt;p&gt;Our session did its job. We had people curious about the drawing robot, nice discussions about procedural &lt;em&gt;vs&lt;/em&gt; flow-based programming and really nice collaborative drawings.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/mozillaeu/15448050247&quot; title=&quot;MozFest_26Oct_239 by Mozilla in Europe, on Flickr&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5605/15448050247_b2c8149680_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest_26Oct_239&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/mozillaeu/15634034695&quot; title=&quot;MozFest_26Oct_237 by Mozilla in Europe, on Flickr&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5597/15634034695_c70d960bc4_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest_26Oct_237&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Henri recorded the following time-lapse video. A really nice way to capture this kind of session.&lt;/p&gt;

&lt;iframe width=&quot;752&quot; height=&quot;430&quot; src=&quot;//www.youtube.com/embed/IMShMTn8yEU?rel=0&amp;amp;showinfo=0&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;The festival ended up with a demo party where the most revealing feeling of collaboration and aesthetics experimentation took its place. Surrounded by curtains, music and projections, people and robots joined again to draw together.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/mozillaeu/15450606739&quot; title=&quot;MozFest_26Oct_416 by Mozilla in Europe, on Flickr&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5616/15450606739_d003e4175d_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest_26Oct_416&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/neon_lobster/15481753580&quot; title=&quot;Mozfest 2014 | #ARTOFWEB by Kat B, on Flickr&quot;&gt;&lt;img src=&quot;https://farm9.staticflickr.com/8267/15481753580_6b4a1b8612_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;Mozfest 2014 | #ARTOFWEB&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/auto_mata/15474409768&quot; title=&quot;MozFest 2014 #ArtOfWeb by Vilson Vieira, on Flickr&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7547/15474409768_f2909fc342_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;MozFest 2014 #ArtOfWeb&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We hope the next workshops are like this last experience and we’ll try to make it happen more in the future. As well pointed by Kat, “&lt;a href=&quot;https://medium.com/@codekat/hello-world-lets-re-make-networked-art-6bb06913ac3a&quot;&gt;let’s (re)make networked art&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;We really want to thank and give a huge hug on all people we met. To our dear colleagues of &lt;a href=&quot;https://thegrid.io/#15&quot;&gt;The Grid&lt;/a&gt;, that made it possible to happen, thank you for all. To &lt;a href=&quot;http://mozilla.org&quot;&gt;Mozilla&lt;/a&gt;, thank you to bring this amazing people together for a better Web of openness and opportunity.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/neon_lobster/15480685669&quot; title=&quot;Mozfest 2014 | #ARTOFWEB by Kat B, on Flickr&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7578/15480685669_e0dac38c14_c.jpg&quot; style=&quot;max-width: 100%;&quot; alt=&quot;Mozfest 2014 | #ARTOFWEB&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking forward to keep &lt;em&gt;phreaking&lt;/em&gt; art and meet you all again this year!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photos by &lt;a href=&quot;https://www.flickr.com/photos/neon_lobster/&quot;&gt;Kat Braybrooke&lt;/a&gt;, &lt;a href=&quot;https://www.flickr.com/photos/mozillaeu/&quot;&gt;Mozilla in Europe&lt;/a&gt; and &lt;a href=&quot;https://www.flickr.com/photos/auto_mata/&quot;&gt;Vilson Vieira&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</content>
 </entry>
 
 
 <entry>
   <title>First steps for noflo-webaudio</title>
   <link href="http://meemoo.org/blog/2014-08-05-first-steps-for-noflo-webaudio"/>
   <updated>2014-08-05T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/first-steps-for-noflo-webaudio</id>
   <author>
    <name>Vilson Vieira</name>
    <email>vilson@void.cc</email>
    <uri>http://automata.cc</uri>
   </author>
   <content type="html">&lt;p&gt;Before any word, let’s make some noise. You can play yourself with this demo &lt;a href=&quot;http://app.flowhub.io/#example/04847249319d2326fa92&quot;&gt;clicking here&lt;/a&gt;.&lt;/p&gt;

&lt;iframe class=&quot;vine-embed&quot; src=&quot;https://vine.co/v/ME1wdVX16iB/embed/simple?audio=1&quot; width=&quot;480&quot; height=&quot;480&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.vine.co/static/scripts/embed.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;This simple demo was presented by Forrest in his last &lt;a href=&quot;http://www.forresto.com/2014/08/the-toybox-and-the-toolbox/&quot;&gt;Assembly
talk&lt;/a&gt;. It
illustrates how we are combining audio and visuals in NoFlo.&lt;/p&gt;

&lt;p&gt;It uses &lt;a href=&quot;http://github.com/automata/noflo-webaudio&quot;&gt;noflo-webaudio&lt;/a&gt;, our
wrapper library to the Web Audio API. &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API&quot;&gt;Web Audio
API&lt;/a&gt; defines a
“signal-flow graph” where audio sources connect to processors and can be
manipulated on a sample-accurate base. How to map such “signal-flow graph” to
NoFlo? Having worked with &lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt;
we wanted to explore if the same design and semantics used on it could work
with Web Audio.&lt;/p&gt;

&lt;p&gt;In &lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt;, each component
generates lispy commands that are lazy-evaluated in a complex component
(&lt;em&gt;Draw&lt;/em&gt;). We are doing the same for &lt;a href=&quot;http://github.com/automata/noflo-webaudio&quot;&gt;noflo-webaudio&lt;/a&gt;. In this way, we have
some components like &lt;em&gt;Oscillator&lt;/em&gt; and &lt;em&gt;Gain&lt;/em&gt; that sends lispy commands
like the following:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{&quot;type&quot;: &quot;gain&quot;, 
 &quot;input&quot;: [{&quot;type&quot;: &quot;oscillator&quot;, &quot;frequency&quot;: 440.0},
           {&quot;type&quot;: &quot;oscillator&quot;, &quot;frequency&quot;: 660.0}]
 0.8}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which, again, maps to a lispy representation like&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(gain ((oscillator 440)
       (oscillator 660))
      0.8)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Each time a component input (like &lt;em&gt;Oscillator&lt;/em&gt;’s frequency) changes, it
sends an updated command as its output. The &lt;em&gt;Play&lt;/em&gt; component gets all those
commands and takes care of how to plug them together and update the parameters
when needed.&lt;/p&gt;

&lt;p&gt;The major difference is that &lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt; follows a “redraw the entire canvas everytime” paradigm while &lt;a href=&quot;http://github.com/automata/noflo-webaudio&quot;&gt;noflo-webaudio&lt;/a&gt; can’t reconnect all the
audio nodes everytime: most of the time the audio graph doesn’t change, just
the parameters. So &lt;em&gt;Play&lt;/em&gt; should be smart enough to walk through the
received commands and decide which should be reconnected (like &lt;em&gt;Oscillators&lt;/em&gt; and
&lt;em&gt;AudioFile&lt;/em&gt;) and which should have just its parameter updated.&lt;/p&gt;

&lt;p&gt;The JSON representation of such signal-flow graphs remembers a declarative
paradigm. We are exploring a Web Audio library called
&lt;a href=&quot;http://flockingjs.org/&quot;&gt;Flocking&lt;/a&gt; which makes possible to define signal-flow
graphs in a declarative way that maps directly in the way we are dealing with
&lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt; and &lt;a href=&quot;http://github.com/automata/noflo-webaudio&quot;&gt;noflo-webaudio&lt;/a&gt; for now. So we should
have a usable &lt;a href=&quot;http://github.com/automata/noflo-flocking&quot;&gt;noflo-flocking&lt;/a&gt;
soon.&lt;/p&gt;

&lt;p&gt;We already have support for Web Audio API in Android and iOS devices
so we can expect mobile music instruments in NoFlo in the near future!&lt;/p&gt;

&lt;iframe src=&quot;//player.vimeo.com/video/102201555?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=c9ff23&quot; width=&quot;800&quot; height=&quot;535&quot; frameborder=&quot;0&quot; webkitallowfullscreen=&quot;&quot; mozallowfullscreen=&quot;&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;We started the &lt;a href=&quot;http://github.com/automata/noflo-three&quot;&gt;noflo-three&lt;/a&gt;
components library to &lt;a href=&quot;http://threejs.org&quot;&gt;Three.js&lt;/a&gt; during this time too. We hope the same design we used for &lt;a href=&quot;http://github.com/automata
/noflo-webaudio&quot;&gt;noflo-webaudio&lt;/a&gt; can be applied to a scene graph like that used in
&lt;a href=&quot;http://threejs.org&quot;&gt;Three.js&lt;/a&gt;. We are also making some nice generative stuff
with &lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt; that we will love to
share soon.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>noflo-geometry</title>
   <link href="http://meemoo.org/blog/2014-07-14-noflo-geometry"/>
   <updated>2014-07-14T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/noflo-geometry</id>
   <author>
    <name>Vilson Vieira</name>
    <email>vilson@void.cc</email>
    <uri>http://automata.cc</uri>
   </author>
   <content type="html">&lt;p&gt;Now that we have a working &lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt; it is time to try more complex shapes. &lt;a href=&quot;http://en.wikipedia.org/wiki/Voronoi_diagram&quot;&gt;Voronoi Diagram&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Delaunay_triangulation&quot;&gt;Delaunay Triangulation&lt;/a&gt; are canonical algorithms from &lt;a href=&quot;http://en.wikipedia.org/wiki/Computational_geometry&quot;&gt;Computational Geometry&lt;/a&gt; and were made classic for generative art or creative coding. These algorithms are useful to create textures or meshes. In general, you can give them a set of points and Voronoi will create cells around your points. Delaunay will draw triangles for each possible triple of points, with non-crossing edges. This figure presents both Voronoi Diagram (in pink) and Delaunay Triangulation (in blue) for some random points (in yellow):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay_voronoi_still.png&quot; alt=&quot;Voronoi and Delaunay&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Other examples follow:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay_voronoi.gif&quot; alt=&quot;Voronoi and Delaunay&quot; /&gt;&lt;/p&gt;

&lt;p&gt;To better understand the Delaunay Triangulation, let’s see an example. The following figure shows a triangulation for a set of points. Note the &lt;a href=&quot;http://en.wikipedia.org/wiki/Circumscribed_circle&quot;&gt;circumcircles&lt;/a&gt; around each possible triangle:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay_right.png&quot; alt=&quot;Delaunay right example (modified from Wikipedia)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There’s no points inside of any of the circumcircles: the points are located right in circumcircles’ edges. You can try to find other triangles which points are not inside circumcircles, but you won’t. Let me give you an example of a wrong triangle:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay_wrong.png&quot; alt=&quot;Delaunay wrong example (modified from Wikipedia)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As you can see, the red points are inside the circumcircle of our green triangle, so it’s not a valid triangle. That’s what Delaunay Triangulation is about: for a given set of points, it finds all the triangles which points are not inside a circumcircle (formed by the triangles).&lt;/p&gt;

&lt;p&gt;And what about Voronoi Diagram? There’s many ways to understand what Voronoi algorithm is about, but there’s an easy way now that we know Delaunay Triangulation. Voronoi is &lt;a href=&quot;http://en.wikipedia.org/wiki/Duality&quot;&gt;dual&lt;/a&gt; (or related) to Delaunay. If we connect the center points of all the triangle circumcircles obtained by the Delaunay Triangulation, we have the Voronoi Diagram!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay_voronoi_dual.gif&quot; alt=&quot;Voronoi and Delaunay duality (modified from Wikipedia)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://github.com/automata/noflo-geometry&quot;&gt;noflo-geometry&lt;/a&gt; implements both Voronoi and Delaunay algorithms. Being NoFlo a general purpose flow-based environment, it is a common approach to search for JS libraries which implements what you want and encapsulate them as a bunch of components. For &lt;a href=&quot;http://github.com/automata/noflo-geometry&quot;&gt;noflo-geometry&lt;/a&gt; we used libraries by &lt;a href=&quot;https://github.com/ironwallaby/delaunay&quot;&gt;@ironwallaby&lt;/a&gt; and &lt;a href=&quot;https://github.com/gorhill/Javascript-Voronoi&quot;&gt;@gorhill&lt;/a&gt;, and thanks to NoFlo now you can use both as components with a common interface, at the same environment:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/voronoi.gif&quot; alt=&quot;Voronoi&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay.gif&quot; alt=&quot;Delaunay&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here are some examples of tessellations generated by the Voronoi and Delaunay component:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/voronoi1.png&quot; alt=&quot;Voronoi diagram 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay1.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay2.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay3.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay4.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay5.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay6.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/delaunay7.png&quot; alt=&quot;Delaunay tessellation 1&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;next-steps&quot;&gt;Next steps&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://forresto.com&quot;&gt;Forrest&lt;/a&gt; was invited to the super cool &lt;a href=&quot;http://www.assembly.org/summer14/seminars/sessions#pako13&quot;&gt;Assembly&lt;/a&gt; demo party (!!!) so we are planning to work on components for &lt;a href=&quot;http://threejs.org&quot;&gt;threejs&lt;/a&gt;, &lt;a href=&quot;http://github.com/automata/noflo-webaudio&quot;&gt;Web Audio API&lt;/a&gt; and &lt;a href=&quot;https://github.com/noflo/noflo-ui/issues/151&quot;&gt;timeline&lt;/a&gt; to create a demo! Fun times coming, please keep following!&lt;/p&gt;

</content>
 </entry>
 
 
 <entry>
   <title>An introduction to noflo-canvas</title>
   <link href="http://meemoo.org/blog/2014-06-16-noflo-canvas"/>
   <updated>2014-06-16T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/noflo-canvas</id>
   <author>
    <name>Vilson Vieira</name>
    <email>vilson@void.cc</email>
    <uri>http://automata.cc</uri>
   </author>
   <content type="html">&lt;p&gt;During the last weeks we were working on &lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt; and experimenting with it. Here I describe some of those developments and how we ended with the current &lt;em&gt;noflo-canvas&lt;/em&gt; design.&lt;/p&gt;

&lt;h2 id=&quot;arrays-and-grids&quot;&gt;Arrays and grids&lt;/h2&gt;

&lt;p&gt;Following Forrest’s suggestions we have designed &lt;em&gt;noflo-canvas&lt;/em&gt; inspired by &lt;a href=&quot;http://www.grasshopper3d.com/&quot;&gt;Grasshopper&lt;/a&gt;, an algorithmic modeling tool for &lt;a href=&quot;http://www.rhino3d.com/&quot;&gt;Rhino&lt;/a&gt;.
In &lt;em&gt;Grasshopper&lt;/em&gt; you can create an unique point or &lt;a href=&quot;http://vimeopro.com/rhino/grasshopper-getting-started-by-david-rutten/video/79844298&quot;&gt;an array of points&lt;/a&gt; using the same component.
In &lt;em&gt;noflo-canvas&lt;/em&gt;, you have components like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MakePoint&lt;/code&gt; which receives an unique pair of &lt;em&gt;(x,y)&lt;/em&gt; coordinates or an array of them.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/oneXarray.gif&quot; width=&quot;730&quot; /&gt;&lt;/p&gt;

&lt;p&gt;When given an array of x and y coordinates, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MakePoint&lt;/code&gt; makes one point &lt;em&gt;for each pair&lt;/em&gt; of x and y. It is like &lt;a href=&quot;http://vvvv.org/documentation/tutorial-spreads&quot;&gt;Spreads&lt;/a&gt; from &lt;a href=&quot;http://vvvv.org&quot;&gt;VVVV&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Another possibility is to create one point &lt;em&gt;for each possible combination&lt;/em&gt; of x and y. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MakeGrid&lt;/code&gt; does that and resembles the &lt;em&gt;cross product&lt;/em&gt; between two vectors (also resembles &lt;a href=&quot;http://vvvv.org/documentation/cross-%282d%29&quot;&gt;Cross&lt;/a&gt; from &lt;em&gt;VVVV&lt;/em&gt;). This example makes it easy to understand:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/pointsXgrid.gif&quot; width=&quot;730&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Such patterns are powerful to algorithmic design because we can create complex shapes using few components. Imagine how many &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MakePoint&lt;/code&gt;s are necessary to reproduce the same of just one &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MakeGrid&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;lazy-evaluation&quot;&gt;Lazy evaluation&lt;/h2&gt;

&lt;p&gt;Another interesting detail in &lt;em&gt;noflo-canvas&lt;/em&gt; design is how drawing commands are evaluated. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Draw&lt;/code&gt; is the main component in &lt;em&gt;noflo-canvas&lt;/em&gt; and all the magic happens inside it. Take the following program as an example:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/example-commands.png&quot; alt=&quot;Example program&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Draw&lt;/code&gt; receives these commands:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;p&quot;&gt;[{&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;fill&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;items&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;circle&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
             &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;point&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; 
             &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;radius&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
         &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;fillstyle&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#00ff00&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}]&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If we remove JSON stuff we get this &lt;em&gt;Lispy&lt;/em&gt; representation:&lt;/p&gt;

&lt;div class=&quot;language-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;fill&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;circle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;point&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                  &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;s&quot;&gt;&quot;#00ff00&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lisp was a great inspiration not only for how we represent commands but on how we evaluate them. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Draw&lt;/code&gt; parses received commands and applies the respective Canvas 2d method on its arguments.&lt;/p&gt;

&lt;p&gt;The entire process resembles a &lt;em&gt;lazy evaluator&lt;/em&gt;: each component just has to generate a specific instruction like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{&quot;type&quot;: &quot;point&quot;, &quot;x&quot;: 100, &quot;y&quot;: 100}&lt;/code&gt; and send it to the target component. It repeats until those commands are finally received by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Draw&lt;/code&gt; that evalutes them.&lt;/p&gt;

&lt;p&gt;Connection ordering is important in those situations because we want commands evaluated in specific order: “I want to clean the canvas first, then draw a circle, then …”. NoFlo &lt;a href=&quot;https://github.com/noflo/noflo/issues/128&quot;&gt;supports&lt;/a&gt; connection ordering which makes this design possible.&lt;/p&gt;

&lt;p&gt;This &lt;em&gt;lazy evaluation pattern&lt;/em&gt; is becoming useful in FBP, specially when you have to deal with an independent dataflow like the ones of Canvas 2d or Web Audio.&lt;/p&gt;

&lt;h2 id=&quot;running-on-backend&quot;&gt;Running on backend&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/LearnBoost/node-canvas&quot;&gt;node-canvas&lt;/a&gt;, it is also possible to use &lt;em&gt;noflo-canvas&lt;/em&gt; on &lt;em&gt;NoFlo&lt;/em&gt; programs running on &lt;em&gt;Node.js&lt;/em&gt;. &lt;em&gt;Flowhub&lt;/em&gt; has helpful &lt;a href=&quot;http://flowhub.io/documentation/getting-started-node/&quot;&gt;documentation&lt;/a&gt; about how to connect &lt;em&gt;Flowhub&lt;/em&gt; on your &lt;em&gt;Node.js&lt;/em&gt; runtime.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Node-canvas&lt;/em&gt; uses &lt;a href=&quot;http://cairographics.org/&quot;&gt;Cairo&lt;/a&gt; as its graphics toolkit and
we are using it to generate images with high dimensions on backend. Ready-to-use images like that are useful for caching. We are currently reporting experiments of this use of &lt;em&gt;noflo-canvas&lt;/em&gt; in &lt;a href=&quot;https://github.com/noflo/noflo-canvas/issues/23&quot;&gt;this issue&lt;/a&gt;.&lt;/p&gt;

</content>
 </entry>
 
 
 <entry>
   <title>Auto layout</title>
   <link href="http://meemoo.org/blog/2014-05-22-autolayout"/>
   <updated>2014-05-22T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/autolayout</id>
   <author>
    <name>Vilson Vieira</name>
    <email>vilson@void.cc</email>
    <uri>http://automata.cc</uri>
   </author>
   <content type="html">&lt;p&gt;One issue around
&lt;a href=&quot;http://www.jpaulmorrison.com/fbp/&quot;&gt;Flow Based Programming&lt;/a&gt; is the
amount of time we spend dragging-and-dropping boxes to get the most
proper layout.&lt;/p&gt;

&lt;p&gt;On a text-based programming language we have at least the left-right
and top-down directions to follow. However, in a 2D FBP canvas those
nodes can be anywhere and the graph can become really messy.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/pd.png&quot; alt=&quot;Graph layouts can become really messy, requiring lots of time of
dragging and dropping boxes to organize them in a proper layout&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A proper layout is crucial to make a graph easy to read to both its
creator and anyone else (&lt;em&gt;the graph is the documentation&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;So we want easy to read graph layouts but we don’t want to do it by
hand. Auto layout to the rescue!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/autolayout-action.gif&quot; style=&quot;width: 730px;&quot; alt=&quot;KLayJS in action&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Last months
&lt;a href=&quot;https://github.com/noflo/noflo-ui/issues/53&quot;&gt;we were researching&lt;/a&gt;
auto layout algorithms on &lt;a href=&quot;http://thegrid.io&quot;&gt;The Grid&lt;/a&gt;. There are
plenty of techniques and features we can expect from those algorithms
and implementations. At the same time, in FBP environments like
&lt;a href=&quot;http://flowhub.io&quot;&gt;Flowhub&lt;/a&gt; / &lt;a href=&quot;http://meemoo.org&quot;&gt;Meemoo&lt;/a&gt; we have
many constraints to consider: port ordering, components as groups or
subgraphs, input and output “nodes” and so on.&lt;/p&gt;

&lt;p&gt;We ended up using a layer-based hierarchical algorithm called
&lt;a href=&quot;http://rtsys.informatik.uni-kiel.de/confluence/display/KIELER/KLay+Layered&quot;&gt;KLay Layered&lt;/a&gt;
which is originally written in Java. It is part of the
&lt;a href=&quot;http://rtsys.informatik.uni-kiel.de/confluence/display/KIELER/Overview&quot;&gt;KIELER Project&lt;/a&gt;
from &lt;a href=&quot;http://uni-kiel.de&quot;&gt;Kiel University&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In collaboration with the amazing KIELER / KLay team we developed
&lt;a href=&quot;http://rtsys.informatik.uni-kiel.de/confluence/pages/viewpage.action?pageId=8651755&quot;&gt;KLayJS&lt;/a&gt;,
a JavaScript interface to KLay using
&lt;a href=&quot;http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html&quot;&gt;GWT’s JSNI&lt;/a&gt;. Now
we can run the original layout algorithm inside a Web Worker and get
rid of all the
&lt;a href=&quot;https://github.com/the-grid/the-graph/pull/146#issuecomment-42935253&quot;&gt;GWT crazyness&lt;/a&gt;. There
is already a &lt;a href=&quot;http://github.com/automata/klay-js&quot;&gt;Bower component&lt;/a&gt; to
this interface, so you can use that on your own graphs.&lt;/p&gt;

&lt;p&gt;The auto layout feature provided by KlayJS is currently available on
&lt;a href=&quot;http://app.flowhub.io&quot;&gt;Flowhub&lt;/a&gt;: it’s the &lt;em&gt;magic wand&lt;/em&gt; you can wave
anytime you want to organize your graph.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/autolayout-ui.gif&quot; alt=&quot;Auto layout in Flowhub&quot; /&gt;&lt;/p&gt;

&lt;p&gt;While using auto layout we are identifying two scenarios where it is
becoming really useful:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;When creating a graph from scratch you don’t have to think where is
the best place to drop your components. Keep focus on problem
solving and just call auto layout everytime you need to align and
organize the components;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Auto layout works better when you have
&lt;a href=&quot;https://github.com/noflo/noflo-ui/issues/53#issuecomment-36917555&quot;&gt;grouped components&lt;/a&gt;. So
it motivates you to keep grouping components together, making it
easy to read and document.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Auto layout is not perfect, many times edges crosses and nodes are not
well arranged, but it is a handy tool on FBP environments like
&lt;a href=&quot;http://flowhub.io&quot;&gt;Flowhub&lt;/a&gt; / &lt;a href=&quot;http://meemoo.org&quot;&gt;Meemoo&lt;/a&gt; and we want
to keep
&lt;a href=&quot;https://github.com/the-grid/the-graph/issues/85&quot;&gt;improving it&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Google Summer of Code 2014</title>
   <link href="http://meemoo.org/blog/2014-05-06-summer-of-code-2014"/>
   <updated>2014-05-06T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/summer-of-code-2014</id>
   <author>
    <name>Vilson Vieira</name>
    <email>vilson@void.cc</email>
    <uri>http://automata.cc</uri>
   </author>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/gsoc2014.png&quot; alt=&quot;GSoC 2014&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;http://mozilla.org&quot;&gt;Mozilla&lt;/a&gt; I have
&lt;a href=&quot;https://www.google-melange.com/gsoc/project/details/google/gsoc2014/automata/5733935958982656&quot;&gt;a project&lt;/a&gt;
accepted to
&lt;a href=&quot;https://www.google-melange.com/gsoc/homepage/google/gsoc2014&quot;&gt;Google Summer of Code&lt;/a&gt;!
I am so excited and grateful to Mozilla,
&lt;a href=&quot;http://forresto.com&quot;&gt;Forrest&lt;/a&gt; and the
&lt;a href=&quot;http://noflojs.org&quot;&gt;NoFlo&lt;/a&gt;/&lt;a href=&quot;http://flowhub.io&quot;&gt;Flowhub&lt;/a&gt; team! This is
my second time in the program: back in 2012 I was mentored by Forrest
&lt;a href=&quot;https://wiki.mozilla.org/SummerOfCode/2012/Meemoo&quot;&gt;to work on Meemoo&lt;/a&gt;. This
year I will be working under Forrest mentoring again, hacking on both
Meemoo and NoFlo/Flowhub.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://noflojs.org&quot;&gt;NoFlo&lt;/a&gt; is an open source JavaScript
implementation of
&lt;a href=&quot;http://en.wikipedia.org/wiki/Flow-based_programming&quot;&gt;Flow-Based Programming&lt;/a&gt;
that you can plug in
&lt;a href=&quot;http://flowhub.io/documentation/flowhub-faq/#what-runtimeslanguages-are-supported&quot;&gt;many runtimes&lt;/a&gt;
like Web browsers, Node.js, GNOME and even Arduino and other
microcontrollers. NoFlo empowers &lt;a href=&quot;http://flowhub.io&quot;&gt;Flowhub&lt;/a&gt;, a
visual programming environment that makes possible to &lt;em&gt;code without
real code&lt;/em&gt;: like Meemoo, you can code just dragging-and-dropping boxes
and plugging them together with wires.&lt;/p&gt;

&lt;p&gt;The GSoC project idea is to implement main existing Meemoo modules as
NoFlo components and subgraphs. Meemoo is strong in 2d drawing and
animation so we will be creating NoFlo components and subgraphs to
canvas 2d rendering. The main repository to follow for updates now is
&lt;a href=&quot;http://github.com/noflo/noflo-canvas&quot;&gt;noflo-canvas&lt;/a&gt; and we wish to
give some love to other component libraries like
&lt;a href=&quot;https://github.com/djdeath/noflo-tween&quot;&gt;noflo-tween&lt;/a&gt;,
&lt;a href=&quot;https://github.com/automata/noflo-webaudio&quot;&gt;noflo-webaudio&lt;/a&gt; and an
upcoming &lt;em&gt;noflo-three&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You can already give &lt;em&gt;noflo-canvas&lt;/em&gt; a try running &lt;a href=&quot;http://app.flowhub.io/#example/5f74ae0e1efc6ab52757&quot;&gt;this example on Flowhub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://app.flowhub.io/#example/5f74ae0e1efc6ab52757&quot;&gt;&lt;img src=&quot;http://meemoo.org/images/glitch_generator.gif&quot; alt=&quot;Glitch generator&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We hope to get many of the
&lt;a href=&quot;http://meemoo.org/hack-our-apps&quot;&gt;existing Meemoo apps&lt;/a&gt; ported to
NoFlo near the end of this summer and to create brand new ones. We
also like to investigate ways to get Meemoo closer to
&lt;a href=&quot;http://webmaker.org&quot;&gt;WebMaker&lt;/a&gt; tools: maybe we could use
&lt;a href=&quot;https://github.com/mozilla/MakeAPI&quot;&gt;MakeAPI&lt;/a&gt; to publish on Mozilla
WebMaker Gallery.&lt;/p&gt;

&lt;p&gt;This blog will receive weekly updates about what we are working on, so
please keep following us!&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>FBP and NoFlo - another hacker's perspective</title>
   <link href="http://meemoo.org/blog/2013-08-24-fbp-and-noflo"/>
   <updated>2013-08-24T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/fbp-and-noflo</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;Meemoo has joined forces with another open-source JavaScript dataflow project called NoFlo. We launched an ambitious &lt;a href=&quot;http://www.kickstarter.com/projects/noflo/noflo-development-environment&quot;&gt;Kickstarter campaign&lt;/a&gt; which has gotten a lot of positive reaction and is closing in on the goal. Of course, as with any idea around coding, the trolls also come out.&lt;/p&gt;

&lt;p&gt;Looking at the &lt;a href=&quot;http://www.fastcolabs.com/3016289/how-an-arcane-coding-method-from-1970s-banking-software-could-save-the-sanity-of-web-develop&quot;&gt;FastCo&lt;/a&gt; comments and the &lt;a href=&quot;https://news.ycombinator.com/item?id=6264657&quot;&gt;Hacker News&lt;/a&gt; thread, it seems like all critique is focused on the choice of one word in the introduction. Can we move beyond that and talk about actual ideas?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/baller-by-omar-noory.gif&quot; alt=&quot;haters gonna hate&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I have used Quartz Composer and Pure Data, but most of my coding was in Flash and JS. Then I started &lt;a href=&quot;http://meemoo.org&quot;&gt;Meemoo&lt;/a&gt; to bridge those paradigms and experiment with hackable media. Now I’m working on NoFlo to bring the concept closer to JS for more general programming. I’m looking forward to building Meemoo components with NoFlo, making my code even more encapsulated and reusable.&lt;/p&gt;

&lt;p&gt;My biggest issue with QC and PD is that I often wanted to dive into a component and change something. In QC this meant finding the source (if open) and figuring out Objective-C, XCode, compiling… too much friction. We are putting a lot of design into making a useful tool for coders. We’ll be able to edit a component’s JS or make a new component in-place, in a live graph, without changing windows and taking us out of our own coding &lt;em&gt;flow&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/noflo-code.jpg&quot; alt=&quot;NoFlo code&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So FBP hasn’t been suppressed, and is currently only used in niche industries. The truth is that it hasn’t been tried for general purpose JS, which spans server, interactive UI, canvas, WebGL, Web Audio, and all future niches that JS finds. We’re inviting our early community to help us design the patterns that make sense in those contexts. The beauty of the JS ecosystem is that it will be seamless to connect them.&lt;/p&gt;

&lt;p&gt;So FBP isn’t a silver bullet that will make everybody magically understand code. But when I discovered Quartz Composer, my concept of what is possible with code was greatly expanded. My hope is that Meemoo and NoFlo will have that effect on future media hackers.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Open(Art) update</title>
   <link href="http://meemoo.org/blog/2013-07-07-openart-update"/>
   <updated>2013-07-07T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/openart-update</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;h2 id=&quot;updates&quot;&gt;Updates&lt;/h2&gt;

&lt;p&gt;I’m updating &lt;a href=&quot;http://meemooapp.tumblr.com/&quot;&gt;meemooapp.tumblr.com&lt;/a&gt; more regularly than this blog. You can also see what &lt;a href=&quot;http://matthiassoc.tumblr.com/&quot;&gt;Matthias, our Summer of Code&lt;/a&gt; contributor is up to.&lt;/p&gt;

&lt;h2 id=&quot;events&quot;&gt;Events&lt;/h2&gt;

&lt;p&gt;I’m excited to be taking part of three events at Eyebeam NYC in the coming weeks:&lt;/p&gt;

&lt;p&gt;July 12th - &lt;a href=&quot;http://www.eyebeam.org/events/openart-–-creative-platforms-for-the-open-web&quot;&gt;Open(Art) group exhibition opening&lt;/a&gt;. The exhibit will be up until August 10th.&lt;/p&gt;

&lt;p&gt;July 13th - &lt;a href=&quot;http://www.eyebeam.org/events/openart-workshop-day&quot;&gt;Educator media hacking workshop&lt;/a&gt;. We’ll be talking about potential ways to use hackable web apps in education.&lt;/p&gt;

&lt;p&gt;July 15-19th - &lt;a href=&quot;http://www.eyebeam.org/events/mozilla-maker-party-moving-storytelling&quot;&gt;Animation workshop for teenagers&lt;/a&gt;. In this week-long workshop we’ll experiment with different kinds of animation with the goal of telling a larger story with small GIF animations.&lt;/p&gt;

&lt;h2 id=&quot;framework&quot;&gt;Framework&lt;/h2&gt;

&lt;p&gt;I have been making some big changes in Meemoo, including one issue that has been open almost since the start of the project: nesting graphs inside other graphs. This is called a “macro” or “subgraph” in other environments, and is key to making big graphs more manageable. Here is a &lt;a href=&quot;http://youtu.be/ylt0SJdAC5Y&quot;&gt;two-minute demo video&lt;/a&gt;, and you can try it out on the &lt;a href=&quot;http://forresto.github.io/iframework/#gist/5940685&quot;&gt;beta staging site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;img src=&quot;http://meemoo.org/images/antlers.gif&quot; alt=&quot;antlers&quot; /&gt;&lt;br /&gt;
&lt;em&gt;see you in nyc!&lt;/em&gt;&lt;br /&gt;
(made with &lt;a href=&quot;http://meemoo.org/iframework/#gist/5933415&quot;&gt;this app&lt;/a&gt;) &amp;lt;-&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Why web?</title>
   <link href="http://meemoo.org/blog/2013-04-20-why-web"/>
   <updated>2013-04-20T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/why-web</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;At the Open(Art) presentations on March 4th one of the Eyebeam fellows asked why I’m making Meemoo for the web, when we can already do the same things in Photoshop or other apps. I’m not sure how well I answered, but there a few answers that I’d like to put in words.&lt;/p&gt;

&lt;h2 id=&quot;everest--demoscene&quot;&gt;Everest / Demoscene&lt;/h2&gt;

&lt;p&gt;The easiest answer is “because it’s there.”&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/yewmun/1938038703/&quot; title=&quot;Magical Everest by Mun Mun, on Flickr&quot;&gt;&lt;img src=&quot;http://farm3.staticflickr.com/2365/1938038703_bb49ede447_z.jpg?zz=1&quot; width=&quot;640&quot; height=&quot;426&quot; alt=&quot;Magical Everest&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had used data flow environments (Pure Data and Quartz Composer) for some projects. I wanted to combine the modularity, speed, and live feedback workflow that these environments offer with the rapidly expanding capabilities of the browser. Programming in data flow environments feels different than text-based coding. I would wager that they use different parts of the brain. Building this system has allowed me to dive deeper my own programming practice with both paradigms.&lt;/p&gt;

&lt;h2 id=&quot;access--media-hacking-in-lockdown&quot;&gt;Access / media hacking in lockdown&lt;/h2&gt;

&lt;p&gt;Not everybody has Photoshop. Standards-based web browsers are everywhere.&lt;/p&gt;

&lt;p&gt;Not everybody has access to systems where it is possible to install a coding environment. You can use, build, share, and hack Meemoo apps just by visting a url. This is a huge reduction in friction compared to installing a programming envirnonment or app.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/27814743@N00/4809846315/&quot; title=&quot;iPad Kiosk Lock by kemperbark, on Flickr&quot;&gt;&lt;img src=&quot;http://farm5.staticflickr.com/4095/4809846315_08fd0a27f0_z.jpg&quot; width=&quot;640&quot; height=&quot;452&quot; alt=&quot;iPad Kiosk Lock&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Making web-based programming environments does a nice end-run around limitations that iOS places on native apps, that they can’t download and execute scripts. Mobile Safari can do that though; it would be suicide to lock Mobile Safari down to only running scripts from certain sites.&lt;/p&gt;

&lt;h2 id=&quot;design-for-hackability&quot;&gt;Design for Hackability&lt;/h2&gt;

&lt;p&gt;Photoshop is designed to emulate the physical tools of photo and graphic manipulation. This design made sense for the first users, who were coming from the darkroom and physical cut-and-paste design.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/irawandhanikamarga/2982281565/&quot;&gt;&lt;img alt=&quot;as real as it gets... by Bates141 Jakarta&quot; src=&quot;http://farm4.staticflickr.com/3055/2982281565_65ae45517e_z.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But web media is much more than static images. To design a creative platform for interactive media and web art, it is fruitful to explore different approaches.&lt;/p&gt;

&lt;h2 id=&quot;modular-code-design&quot;&gt;Modular code design&lt;/h2&gt;

&lt;p&gt;It takes a lot of boilerplate code to do basic things in creative coding projects, like getting an image from a webcam. By making a “cam” module I can easily plug it in anywhere in my projects that takes an image. Every module that I add to the system can be combined with the existing modules, opening exponentially increasing potential for exploration… and we’re back to Everest.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Live edit JavaScript turtle graphics to SVG</title>
   <link href="http://meemoo.org/blog/2013-02-11-live-code-editor-javascript-to-svg"/>
   <updated>2013-02-11T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/live-code-editor-javascript-to-svg</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;h2 id=&quot;javascript--canvas&quot;&gt;JavaScript + &amp;lt;canvas&amp;gt;&lt;/h2&gt;

&lt;p&gt;I recently taught &lt;a href=&quot;http://softwarestudies.mlog.taik.fi/&quot;&gt;Software Studies for Designers&lt;/a&gt; at Media Lab Helsinki. It was a good place to experiment with a group of beginner coders. We didn’t use Meemoo other than to demo what is possible with HTML. It was good for me to step away from the Meemoo code base for a few days and get back to coding from a blank slate.&lt;/p&gt;

&lt;p&gt;We started with Khan Academy’s &lt;a href=&quot;http://www.khanacademy.org/cs/ring-toy/1321912374&quot;&gt;live editor&lt;/a&gt;, which has some nice features for experimenting with code. Khan Academy uses Processing.js. Processing was great when it was hard to draw on the screen, but now with the HTML &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; it isn’t so hard. Most 2D drawing commands are quite similar, and there are some things, like working with color, that are easier to code directly.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/forresto/web-interactive-workshop/#processing-not-processing&quot;&gt;Here are some JavaScript examples&lt;/a&gt; that will get you started drawing on the canvas as easily as with Processing. This is not a library: just use the parts you need!&lt;/p&gt;

&lt;h2 id=&quot;javascript-turtle-graphics--svg&quot;&gt;JavaScript turtle graphics → SVG&lt;/h2&gt;

&lt;p&gt;One of the things that I experimented with is making LOGO-like vector turtle graphics. Why? I wanted to do some algorithmic experiments with the laser cutter in Aalto’s FabLab, and turtle graphics directly translates to the motion of the laser.&lt;/p&gt;

&lt;p&gt;LOGO was the first programming language &lt;a href=&quot;http://www.amazon.com/The-Childrens-Machine-Rethinking-Computer/dp/0465010636/&quot;&gt;designed for kids&lt;/a&gt;. For drawing on screen, it is a little irrelevant, as canvas’ &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strokeRect(x, y, w, h)&lt;/code&gt; is easier than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FORWARD 100 RIGHT 90 FORWARD 100 RIGHT 90 FORWARD 100 RIGHT 90 FORWARD 100&lt;/code&gt;. But I think that these turtle graphics commands still have a place when they correspond to the real-world motion of a physical drawing robot (or laser cutter, CNC, 3D printer head, etc.).&lt;/p&gt;

&lt;p&gt;At first I was doing the save-file/change-window/refresh-browser dance for every change, but tools like Khan’s editor and &lt;a href=&quot;https://thimble.webmaker.org/p/fyxg/edit&quot;&gt;Mozilla Thimble&lt;/a&gt; have given me the expectation that my creative coding should have immediate feedback. So I set out to make my own editor.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://forresto.github.io/turtle-svg/#code/jY7LDoIwEEX3/Yq7LIlIwWCMRFcuXfoDDZliEyimlLow/LsFNUaN0d2cM3ceSYKdlWdIWCp722lP6E6ypFjputamQrCe1sxLi46qhozbk6ncERukecFUb0qnW4PeaMe1IytHjHBhgFZ4KmwhbhpvYcRIo2JqWC7mWX6HrynFX175Ff9n6cAG1rSeDi1fiBkyEazrrRk5WQWY5pah+Dz+aF0B&quot;&gt;&lt;img src=&quot;http://meemoo.org/images/LASER-TURTLE.png&quot; alt=&quot;LASER TURTLE&quot; /&gt;&lt;/a&gt; 
&lt;em&gt;Shoutout to &lt;a href=&quot;https://github.com/craftoid&quot;&gt;Martin Schneider&lt;/a&gt; for the code contributions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8447807698/&quot; title=&quot;cross-folded by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8373/8447807698_d61b0707ba.jpg&quot; width=&quot;375&quot; height=&quot;500&quot; alt=&quot;cross-folded&quot; align=&quot;right&quot; style=&quot;margin-left:1em;&quot; /&gt;&lt;/a&gt; It was really exciting to see the laser follow the my coded paths with speed and precision, making my algorithm into a physical thing.&lt;/p&gt;

&lt;p&gt;The editor has a few features that I think are nice:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Uses JavaScript, the most ubiquitous language, and outputs web-standard SVG.&lt;/li&gt;
  &lt;li&gt;Uses &lt;a href=&quot;http://ace.ajax.org/&quot;&gt;Ace&lt;/a&gt;, which checks the code with jsHint before attempting to evaluate it.&lt;/li&gt;
  &lt;li&gt;Uses a worker to evaluate the script, so &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;while(true){}&lt;/code&gt; makes the worker hang, not the page. This method is inspired by &lt;a href=&quot;http://ejohn.org/blog/talk-khan-academy-computer-science/&quot;&gt;John Resig’s talk&lt;/a&gt; about Khan’ editor.&lt;/li&gt;
  &lt;li&gt;Compresses and saves code for sharing in the URL hash, no server or API needed. I first saw this method in &lt;a href=&quot;https://github.com/mrdoob/htmleditor&quot;&gt;Mr.doob’s html editor&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Embeds the code and a link to the editor in a &lt;code&gt;&amp;lt;!-- comment --&amp;gt;&lt;/code&gt; in the exported SVG.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is pretty easy to piece together coding toys and tools like this, focused on a certain task. From here I’m going to figure out how to do live coding like this directly in Meemoo.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Next Steps</title>
   <link href="http://meemoo.org/blog/2012-12-04-next-steps"/>
   <updated>2012-12-04T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/next-steps</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;In addition to the new modules for MozFest, I have been working on a rewrite of Meemoo’s graphing interface.&lt;/p&gt;

&lt;h2 id=&quot;dataflow&quot;&gt;Dataflow&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://meemoo.org/images/dataflow-2012-11-28.png&quot; alt=&quot;dataflow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/meemoo/dataflow&quot;&gt;Dataflow&lt;/a&gt; is a total rewrite of Meemoo’s graph editing interface. I started this project from scratch in order to have a clean start, implementing all that I have learned in the past year. Some of the goals of this rewrite:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Better separation of data models and views.&lt;/strong&gt; Currently, there is a lot of spaghetti code that ties models and views. Now views just listen to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;change:&lt;/code&gt; events in the models. Currently, canvases are attached to views. In the new version they will be attached to the model, so that different views can show smaller and/or lower-fps preview versions of the full canvas.&lt;/li&gt;
  &lt;li&gt;&lt;img src=&quot;http://meemoo.org/images/meemoo-illo-by-jyri-pieniniemi-400.png&quot; style=&quot;float:right;margin-left:10px;width:30%&quot; /&gt; This will help make it possible to design and define “&lt;strong&gt;app views&lt;/strong&gt;” for Meemoo graphs. The illustration of a box with UI elements on the lid that can be unscrewed to see the “routing view” below is how Meemoo apps will work. You can use the app as it is designed, but if you want to see/hack how it works you can always unscrew the box, hack, and save your changes.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Submodules&lt;/strong&gt; will be a way to encapsulate a graph into a module. You’ll be able to define a graph’s inputs and outputs and then load that graph as a module into any other graph. The concept is a bit complicated to explain in words, but it will result in less visual confusion in complicated graphs.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt; encapsulate functionality, making it easier to manage the code.&lt;/li&gt;
  &lt;li&gt;Dataflow is available for other projects to use as well, since it is totally separated from Meemoo’s code. The next version of Meemoo will extend Dataflow’s design and module library.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;hub&quot;&gt;Hub&lt;/h2&gt;

&lt;p&gt;I have been working with the limitation of keeping Meemoo 100% client-side. In the next months I will be testing an early version of a “Meemoo Hub” (name to be decided) with features for sharing and remixing apps, modules, and images.&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>Mozfest 2012</title>
   <link href="http://meemoo.org/blog/2012-12-03-mozfest-2012"/>
   <updated>2012-12-03T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/mozfest-2012</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;My work on web media wiring has come a long way in the past year. Most of my module development effort has been focused on 2D canvas animation and effects. Each module that I create can be recombined with the older ones, expanding Meemoo’s potential exponentially.&lt;/p&gt;

&lt;h2 id=&quot;module-development&quot;&gt;Module development&lt;/h2&gt;

&lt;p&gt;HTML5 video player (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:video/player&lt;/code&gt;). Because of security restrictions, if the video is coming from another domain you can’t manipulate the image data (unless the server is CORS-enabled, which is rare). The workaround is to download the video to the local machine, and then select the file in the module.&lt;/p&gt;

&lt;p&gt;Tile (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:image/tile&lt;/code&gt;) tiles an image, with options for x/y mirroring for seamless kaleidoscope-like images.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8242681705/&quot; title=&quot;firefox flicks video → tile by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8207/8242681705_07ba84c4bd_z.jpg&quot; width=&quot;640&quot; height=&quot;360&quot; alt=&quot;firefox flicks video → tile&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;firefox flicks video → tile&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Grid (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:image/grid&lt;/code&gt;) puts each frame of video into a grid, which animates once the grid is full. This module comes from &lt;a href=&quot;http://sembiki.com/megacam/&quot;&gt;earlier experiments&lt;/a&gt; in Flash that were inspired by &lt;a href=&quot;http://vimeo.com/285629&quot;&gt;Run Lola Run Lola Run Lola Run Lola Run&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Particles (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:image/particles&lt;/code&gt;) is the most complicated module so far. You can input an image or animation that will become a particle system, for effects like swarms, branches, smoke, and fire.&lt;/p&gt;

&lt;p&gt;Trails (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:image/trails&lt;/code&gt;) draws to its canvas without clearing, leaving the trails of moving objects. Initially I forgot to clear the canvas when coding Particles, and got some nice effects. At first I thought about adding a “leave trails” option to Particles, but realized that this effect could be useful in combination with other modules. It is nice to be able to make a code idea into a module for instant reuse.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8243756056/&quot; title=&quot;particles → trails → tile by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8200/8243756056_e61c8ff158_z.jpg&quot; width=&quot;640&quot; height=&quot;480&quot; alt=&quot;particles → trails → tile&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;particles → trails → tile&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Animation (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:variable/animation&lt;/code&gt;) is a new kind of module that I’m experimenting with. It behaves like an array of canvases, and can be sent to the particles module. I will make it possible to save/load animations as a flat spritesheet image.&lt;/p&gt;

&lt;p&gt;Chroma/Luma Key (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:image/chromakey&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meemoo:image/lumakey&lt;/code&gt;) is useful for making transparent backgrounds for animations. These modules are slower than the others, because they go through each pixel. They have potential to be faster with WebGL (&lt;a href=&quot;http://seriouslyjs.org/&quot;&gt;Seriously.js&lt;/a&gt;), but I wanted to get it working in the 2D canvas context first.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8242685657/&quot; title=&quot;firefox worm space swarm by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8064/8242685657_c04ca0c91a_z.jpg&quot; width=&quot;640&quot; height=&quot;360&quot; alt=&quot;firefox worm space swarm&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;papercraft → lumakey → animation → particles&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;mozfest-party-meemoo-as-vjjs&quot;&gt;Mozfest party, Meemoo as vj.js&lt;/h2&gt;

&lt;p&gt;I used all of these modules to wire together three hours of live visuals and animation at MozFest’s party at the London Film Museum. The music was live-coded by &lt;a href=&quot;http://slub.org/&quot;&gt;Slub&lt;/a&gt;. Getting this gig was a big motivator for working on and refining these modules.&lt;/p&gt;

&lt;p&gt;It was great to be able to play with and wire together many different techniques that I have been experimenting with through the years: stop-motion animation, kaleidoscopes, video feedback loops, slit-scan, particle systems, and all the combinations between, and to do so as performance.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8243757154/&quot; title=&quot;cam warp feedback by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8061/8243757154_5cdaeacbd2_z.jpg&quot; width=&quot;640&quot; height=&quot;359&quot; alt=&quot;cam warp feedback&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;cam → feedback loop&lt;/em&gt; (&lt;a href=&quot;http://www.flickr.com/search/?q=vj.js+mozfest&amp;amp;w=37996589754%40N01&amp;amp;z=m&quot;&gt;more photos&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Before the gig I imagined that I was the only VJ in London going from shop to shop searching for a glue stick. I was also probably the only VJ that was choosing to work within the limitations of JavaScript and HTML5.&lt;/p&gt;

&lt;p&gt;The nice thing about Meemoo is that its capabilities can expand with the browser’s capabilities, which have exploded in the time since I started the project. I hope to attract more HTML5 and creative coding brains to the project, since there is much more potential than this one developer can explore.&lt;/p&gt;

&lt;h2 id=&quot;makeymakey--meemoo&quot;&gt;MakeyMakey + Meemoo&lt;/h2&gt;

&lt;p&gt;My &lt;a href=&quot;http://meemoo.org/blog/2012-11-10-mozfest-tiny-film-festival/&quot;&gt;animation workshop&lt;/a&gt; was next to MIT Media Lab’s Scratch and &lt;a href=&quot;http://www.makeymakey.com/&quot;&gt;MakeyMakey&lt;/a&gt; workshops. I was inspired to unpack my MakeyMakey and made a simple camera trigger switch with a piece of cardboard and two pennies. This made it easier to add images to the animation, since we didn’t have to go back to the laptop.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8242725307/&quot; title=&quot;Mozfest animation studio setup by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8342/8242725307_e1619393ef_z.jpg&quot; width=&quot;640&quot; height=&quot;480&quot; alt=&quot;Mozfest animation studio setup&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8242755999/&quot; title=&quot;MakeyMakey + Meemoo by fo.ol, on Flickr&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8342/8242755999_2fa8ee8929.jpg&quot; width=&quot;373&quot; height=&quot;500&quot; alt=&quot;MakeyMakey + Meemoo&quot; style=&quot;float:right;margin-left:10px;&quot; /&gt;&lt;/a&gt; I talked and hacked for a while with Eric Rosenbaum, one of MakeyMakey’s designers. Our projects have similar goals: to encourage hacking and experimentation with zero installing and configuration. The projects compliment each other well, making it very simple to add physical inputs to Meemoo apps.&lt;/p&gt;

&lt;p&gt;I put together this clogging/tap dance visualizer in one hour with MakeyMakey + Meemoo. The shoes have foil on the heels and toes, and the foil on the mat is connected to the ground. Each of the four switches triggers a different particle system, and it looks like fireworks when I dance. It would be fun to connect these triggers to different sounds as well… I guess I need to get to work on audio modules!&lt;/p&gt;

&lt;h2 id=&quot;my-mozfest-2012-conclusion-in-140-characters&quot;&gt;My MozFest 2012 conclusion in 140 characters&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;I got so much inspiration and encouragement this weekend, and hope that I redistributed some % of that back out. #mozfest was serious fun.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;particle-experiments&quot;&gt;Particle experiments&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/forresto/8168190144/in/set-72157629174562852&quot;&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7112/8168190144_237e395df6_m.jpg&quot; alt=&quot;circle-particle-trail-random&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/forresto/8168152679/in/set-72157629174562852&quot;&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7250/8168152679_2d0d202e83_m.jpg&quot; alt=&quot;circle-particle-trail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/forresto/8168739188/in/set-72157629174562852&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8059/8168739188_e300411ebf_m.jpg&quot; alt=&quot;white&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/forresto/8168700291/in/set-72157629174562852&quot;&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7266/8168700291_9769d3b493_m.jpg&quot; alt=&quot;eye&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/forresto/8213066570/in/set-72157629174562852&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8209/8213066570_0c0fc44b95_m.jpg&quot; alt=&quot;thirty-six&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.flickr.com/photos/forresto/8211978843/in/set-72157629174562852&quot;&gt;&lt;img src=&quot;http://farm9.staticflickr.com/8070/8211978843_3b62391018_m.jpg&quot; alt=&quot;nine&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;Experiments with circle → particles → trails, changing color, size, and particle system variables.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 
 <entry>
   <title>MozFest tiny film festival :-)</title>
   <link href="http://meemoo.org/blog/2012-11-10-mozfest-tiny-film-festival"/>
   <updated>2012-11-10T00:00:00+00:00</updated>
   <id>http://meemoo.org/blog/mozfest-tiny-film-festival</id>
   <author>
    <name>Forrest Oliphant</name>
    <email>forrest@sembiki.com</email>
    <uri>http://forresto.com</uri>
   </author>
   <content type="html">&lt;p&gt;Just had our mozfest animation workshop, here is what we made!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/xleRH.gif&quot; alt=&quot;Tiger catches bee. @kittycatalayna&quot; /&gt; Tiger catches bee. @kittycatalayna&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/vXHYP.gif&quot; alt=&quot;bees are buzzing @tangerinebee1&quot; /&gt; bees are buzzing @tangerinebee1&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/wU9bK.gif&quot; alt=&quot;Stickman Flips! By @kittycatalayna&quot; /&gt; Stickman Flips! By @kittycatalayna&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/Qu9uj.gif&quot; alt=&quot;The magical tongue @kingfred111&quot; /&gt; The magical tongue @kingfred111&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/aHztW.gif&quot; alt=&quot;kitten-catches-mouse by alayna @kittycatalayna&quot; /&gt; kitten-catches-mouse by alayna @kittycatalayna&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/PPVG6.gif&quot; alt=&quot;happy birthday firefox! @ioana_cis&quot; /&gt; happy birthday firefox! @ioana_cis&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/f64kY.gif&quot; alt=&quot;rollin eyes @legocoder&quot; /&gt; rollin eyes @legocoder&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/5UP4l.gif&quot; alt=&quot;sam's awesome barrel roll&quot; /&gt; sam’s awesome barrel roll&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/Zz4CV.gif&quot; alt=&quot;Smile!!!&quot; /&gt; Smile!!!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/PVV2g.gif&quot; alt=&quot;prancy pony @ncasenmare&quot; /&gt;&lt;br /&gt;
prancey pony @ncasenmare&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/YO1Ae.gif&quot; alt=&quot;papercraft #firefox loves the world @forresto&quot; /&gt;&lt;br /&gt;
papercraft #firefox loves the world @forresto&lt;/p&gt;
</content>
 </entry>
 
 
</feed>