Constructs

noun : an abstract or general idea inferred or derived from specific instances [syn: concept, conception]; verb 1: make by combining materials and parts [syn: build, make]; verb 2: put together out of components or parts [syn: manufacture, fabricate]; verb 3: draw with suitable instruments and under specified conditions, of geometrical figures; verb 4: of past events [syn: reconstruct, retrace]

Portfolio

W:Blut: slideshow image 1
W:Blut: slideshow image 2
W:Blut: slideshow image 3
W:Blut: slideshow image 4
W:Blut: slideshow image 5

Blog

Signing Processing applets

Robustness of geo­met­ric algo­rithms is a prime con­cern in my hemesh library. It is sur­pris­ing how fast the intri­ca­cies of floating-point cal­cu­la­tions crop up and ren­der your code fickle and buggy. It’s easy to for­get that com­puter math is not the same as reg­u­lar math. Rather, it is a dis­crete limited-domain sim­u­la­tion of real mathematics.

I’m cur­rently adding some new plumb­ing to hemesh using an arbi­trary pre­ci­sion library, Apfloat. because it’s a lot slower it is only called when nec­es­sary. Including it had an unex­pected side-effect. Apfloat requires infor­ma­tion about your sys­tem when it’s run­ning in a browser. It needs your machine’s inher­ent precision.

However, access­ing your com­puter is a big no-no for my code. So unless the applets are signed, they won’t run because of secu­rity restric­tions. In itself, this is not really a prob­lem, we can still share code and show each other images. But I’d rather keep shar­ing applets, these always include the cor­rect libraries and often rely on unre­leased alpha-level mod­i­fi­ca­tions of my library.

I can’t claim a proper under­stand­ing of Java secu­rity issues and all details about sign­ing. But I’ve been look­ing around and gath­ered masses of raw data, info-ore. I’ve smelted it down to an ingot of use­ful­ness. In short, this is how you sign a Processing applet with­out know­ing what you’re doing. On a Windows machine… (don’t be too dis­ap­pointed, the essen­tials are the same on hip­ster machines.)

Preparations

1) First locate your Java Development Kit (JDK) dis­tri­b­u­tion. If you’re using Eclipse, or pro­gram in JAVA, you prob­a­bly have one around some­where. If not, Processing has it included in its \java sub­di­rec­tory. Check out the con­tents of the \bin folder. See all those exe­cuta­bles, we’ll be using a few of those. Let’s say you traced your JDK to c:\processing\java. So any­where the text men­tions c:\processing\java\bin sub­sti­tute this with your own location.

2) Include the \bin sub­di­rec­tory in your system’s PATH. Check this if you aren’t sure how, of course use c:\processing\java\bin instead of the Matlab exam­ple. This’ll save you a lot of typ­ing. The exe­cuta­bles in the bin folder can now be called from any directory.

3) Create a folder to store your key­store, the repos­i­tory for your cer­tifi­cates. I’ll be using c:\keystore.

Creating your certificate

4) Open up a com­mand prompt (press windows+r, type cmd). If you set up the PATH prop­erly, you can access the com­mands we’ll be using any­where. Otherwise you’ll have to call them with their full path… We’ll cre­ate a key­store and a first cer­tifi­cate mykey now. Since our keys will be self-certified only (i.e. no cer­ti­fy­ing agency will vouch for your good inten­tions), we’ll give them a valid­ity of 100 years. That should be enough…

keytool -genkey -keystore c:\keystore\mykeystore.jks -alias mykey -validity 36500

Since this is the first time the key­store is accessed, you’ll need to input some impor­tant info. Just choose a decent key­store pass­word (let’s say passw0rd ;) ) and fill in the rest. After fill­ing in your data, key­tool will ask for the key pass­word. You can keep this the same as the key­store pass­word, just enter and fin­ish. You now have a key­store with a sin­gle cer­tifi­cate mykey in it.

5) Now we’ll make the cer­tifi­cate self-certified. It’s up to the end-user whether or not he’ll trust your applet.

keytool -selfcert -keystore c:\keystore\mykeystore.jks -alias mykey

Signing your applet

6) I now have an applet I want to share and that requires sign­ing:c:\sketchbook\condel. First export the applet. The /applet sub­di­rec­tory now con­tains all Java archives (JAR) asso­ci­ated with your sketch. We’ll need to sign all of them, even if only one requires authentication.

7) Re-open the com­mand win­dow if nec­es­sary and nav­i­gate to c:\sketchbook\condel\applet. For every JAR run this:
jarsigner -keystore c:\keystore\mykeystore.jks -storepass passw0rd -keypass passw0rd core.jar mykey

In my case, I have core.jar, hemesh.jar, apfloat.jar and sev­eral oth­ers I’ll need to sign.

8) Done! You can upload the applet. If some­body accesses the page she will be given the choice of trust­ing the applet. If yes, then the applet will run. If no, then it won’t.… I’ve cre­ated condel this way.

A bit W:Mute

I started post­ing small scripts at constructs.wblut.com. Much like the now defunct wmute.org these are pre­sented as is. I’m hop­ing that not hav­ing to write an actual post will increase the fre­quency of updates. We’ll see…

W:Blut Constructs I A repository of Processing constructs

Envy

We fell for an hour through a sea of lumi­nous crea­tures, some a few inches in length, oth­ers a foot or two long or longer. Of the thou­sands we passed, many shim­mered and pul­sated with light, espe­cially when star­tled by the pas­sage of our tiny sub­mersible. Out my obser­va­tion port I some­times saw a bright flash as we sped down­ward or watched a lengthy blur of radi­ance curl into a smaller shape. Every so often one of the liv­ing lights, caught in an eddy, would pirou­ette just out­side my win­dow, a swirl of lumi­nes­cence in a sea of darkness.”

The Universe Below, William J. Broad,1997

deep sea glass squid

Tubular networks

Please enable Javascript and Flash to view this Flash video.

McCabeism: animations

McCabeism: turning noise into a thing of beauty

If you’ve seen any real­ity zoo/wild-life pro­gram you’ll rec­og­nize this. Five min­utes into the show you’re con­fronted with a wounded, mag­nif­i­cent ani­mal, held in cap­tiv­ity so its care­tak­ers can nur­ture and feed it. And inevitably, after three com­mer­cial breaks, they release it, teary-eyed, back into the wild. It’s a piv­otal moment that turns their leop­ard into anyone’s/no one’s leop­ard. And as much as they like to see the ani­mal run free, it hurts that only they know that that is the leop­ard that Bruce bottle-fed.

It’s sim­i­lar with code. The moment you choose to release an algo­rithm, a tech­nique, an idea, it’s no longer com­pletely yours. It’s out there, free for every­one to do as they like. And chances are that in the end only a few people’ll know that that is the clever algo­rithm that Bruce came up with. Not because of malig­nant thiev­ery, but because of Tumblr-like care­less attribution.

Anyway, most of us don’t have to worry about this, I gladly share it all, because real inno­va­tion that’s truly wor­thy of attri­bu­tion is rare. If someone’s uses hemesh, it’d be fun to be cred­ited for the hard work that went into it. But I don’t need credit for the things that are cre­ated with it. Many other tools exist and in any case, it’s an imple­men­ta­tion of an exist­ing data struc­ture. The thing is: any­one could’ve coded it…

There is how­ever an idea, an algo­rithm out there that was shared by its cre­ator Jonathan McCabe that is wor­thy of true attri­bu­tion, that falls out­side the realm of “any­one could’ve done it”. It’s been more than two years since I came across his multi-scale Turing pat­terns. They instantly intrigued me. And although I could recre­ate the gist of his images, I could never over­come the prac­ti­cal prob­lems. In fact, the code proved haz­ardous to the elderly, infants and preg­nant women. I thought my lack of numer­i­cal skill in tack­ling the huge equa­tions I ran into was the prob­lem. It was pon­der­ously slow and I sus­pected Jonathan had a secret lair packed with supercomputers.

Turns out I was being silly. An almost inci­den­tal post on Flickr revealed that Jonathan has a paper on his cyclic sym­met­ric multi-scale Turing patt.., what the hell, on his McCabeisms. And it’s full of DTC lines (A rarely needed acronym for “damn that’s clever”). Seems I wasn’t bark­ing up the wrong tree, I was in the wrong for­est, on the wrong con­ti­nent, on the wrong planet… As if that wasn’t enough, Jason Rampe pro­vides a blog post with use­ful point­ers in imple­ment­ing Jonathan’s idea. I say point­ers, it’s actu­ally more of a very elab­o­rate pseudocode than a blog post. So the McCabeism is out there, ready to be imple­mented by anyone.

So I did, in Processing and thanks to Jason, it only took a few hours. This sketch is my small con­tri­bu­tion to the free dis­tri­b­u­tion of Jonathan’s very, very clever idea. It con­tains the basics as explained in the Softology blog post. I’ve added no expla­na­tions of my own. Jonathan’s paper and Jason’s post are very clear and def­i­nitely worth reading.

Feel free to use it in your own explo­ration of McCabeism. There’s plenty of room for exper­i­men­ta­tion. Capture it, dis­sect it, change it, mutate it, (now that’s a wildlife show I’d like to see) and above all attribute it to Jonathan McCabe…

McCabeism

McCabeism

McCabeism

McCabeism

Snippets VII: 2D boolean

Another demo of the wblut.geom and wblut.geom2d pack­ages included with hemesh. Meshes are gen­er­ated by the inter­sec­tion of two stars.

2dboolean

2dboolean

Bodily Interarticulations by Jorge Ayala

Bodily Interarticulations

AA School Paris/ Spring 2011
Architectural Association
School of Architecture

Intro
The Architectural Association School of Architecture, one of the world’s most respected and ambi­tious ped­a­gog­i­cal lab­o­ra­to­ries for archi­tec­tural design and spa­tial research, offers a 10 day inter­na­tional vis­it­ing pro­gramme in Paris run­ning twice per year.
If you are inter­ested to join, appli­ca­tions are open for FALL 2011.

Agenda
Within the frame­work of fashion, designers rec­og­nize the value of inno­va­tion and sur­prise in cloth­ing designs and spec­ta­cle within seduc­tive dis­plays of retail to attract press, clien­tele and cap­i­tal to con­tinue this same end­less process sea­son after sea­son. 
The fash­ion scene today is no mere col­lec­tion of cap­tured images, but rather an ensem­ble of socio-morphological forces con­nect­ing peo­ple, cat­alyz­ing exper­i­men­tal, open-ended design. Fashion and its affin­ity for trans­for­ma­tion is a com­plex ter­rain of archi­tec­tural iden­ti­ties, scenery and per­for­mance. These dynamic spaces are the field where van­guard ideas incubate.

From right within fashion’s cre­ative nexus Bodily Interarticulations fos­ter ‘inte­gral spa­tial qual­i­ties’ by har­ness­ing the sur­pris­ing typolo­gies intrin­sic to tem­po­ral bod­ies, fluid matter(s), and sin­gu­lar pro­por­tions. On the edge of couture’s technologi­cal trans­for­ma­tion, we rapid pro­to­type tem­plates that stage sharp, raw, urban, exper­i­men­tal and alien spa­tial apparel log­ics. Bodily Interarticulations work towards a mutual under­stand­ing of var­i­ous cou­ture forms so that we can com­pu­ta­tion­ally adjust their spa­tial char­ac­ter­is­tics. On the edge of couture’s tech­no­log­i­cal transformation, we rapid pro­to­type tem­plates that stage sharp, raw, urban, exper­i­men­tal and alien spa­tial apparel logics.

© ALL IMAGES Courtesy of AA School Paris

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Bodily Interarticulations

Students S/S 2011
Team 1. Nicolas Pajerski/ Yinghao Lin
Team 2. Marja Mia Kolendic/ Petra Zaninovic/ Tamara Trumbic
Team 3. Vinita Tejapaibul/ Tadyanee Koranee/ Kamkan Supabanpot
Team 4. Ayami Takada/ Ming Yin/ Fai Sasimanas Hoonsuwan

Director: Jorge Ayala
Tutors: Marco Verde, Marc Fornes, Christoph Eppacher
Assistants: Brice Maurin, Geoffroy de Riberolles, Mario Saenz
Location: Musée des Arts Décoratifs, 107–111 rue de Rivoli, Paris 75001
Web: paris.aaschool.ac.uk
Contact: visitingschool@aaschool.ac.uk

Obsessive polyhedron disorder

The last few months hemesh has evolved, you can track some of it on my Flickr photostream. The two lat­est addi­tions are new polyhedra and a more robust wireframe generator. Use ‘+’ and ‘-’ to zoom in or out.

A spe­cial men­tion to David Marec who pro­vided me with the coor­di­nates and con­nec­tiv­ity data of the Archimedean and Johnson solids.

The joints in the HEM_Wireframe mod­i­fier are cal­cu­lated as con­vex hulls of the strut end­points. I reverted back to John Lloyd’s QuickHull3D pack­age for this. My own HEC_ConvexHull still has some issues with degen­era­cies which could lead to faulty meshes.

The image links to the OpenGL ver­sion. A P3D ver­sion can be found here, hope­fully this fixes the prob­lems some of you experience.

Snippets VI: segseg3d

Tiny demo of the geo­met­ric under­pin­ning of hemesh. A mouseclick resets the construct.

segseg3d

Hemesh: hommage — disclaimer

A some­what more seri­ous post after the pre­vi­ous one (well, actu­ally Matt Pearson’s pre­vi­ous post :) ). Sometimes you get wrapped up in writ­ing a piece of code, get­ting it to work your only pur­pose. Inevitably you turn to exist­ing code, rip­ping and tear­ing through it to get at its beat­ing heart.

With the inter­net pro­vid­ing access to such an amount of infor­ma­tion, it can be easy to for­get where a par­tic­u­lar solu­tion came from. On the other hand, includ­ing com­plete generic libraries to ben­e­fit from a few classes in spe­cific instances would quickly bloat any project. I tried to com­pile a list of code that was rav­aged for the good of hemesh:

  1. Javolution is included in the hemesh dis­tri­b­u­tion. This high-performance library offers fast, reli­able alter­na­tives for many of JAVA’s basic classes. Without FastTable and FastMap, hemesh would be a lot slower.
  2. libssrckdtree-j Generic k-d tree Java library: only a bare­bone skele­ton remains of this truly generic k-d tree imple­men­ta­tion, wblut.kdtree.WB_KDTree and wblut.kdtree.WB_KDNeighbor. It pro­vides lightning-fast closest-point cal­cu­la­tion and degenerate-vertex check­ing. Although k-d tree algo­rithms are well-described, imple­ment­ing a fast one your­self is a less than triv­ial task.
  3. Sean Luke's fast Mersenne Twister random number generator is my pre­ferred RNG through­out hemesh. For (my) con­ve­nience it is exposed through wblut.math.WB_MTRandom, WB_RandomDisc and WB_RandomSpherical.
  4. Marius Watz’ unlekkerLib pro­vided the foun­da­tion for the wblut.hemesh.HE_Mesh.saveToSTL function.
  5. The Fortune’s sweep algo­rithm for 2D Voronoi is often dis­cussed but rarely imple­mented. wblut.geom.WB_Voronoi2D is a bare-bones adap­ta­tion of Zhenyu Pan's JAVA transcription of Shane O’Sullivan’s C implementation
  6. John Lloyd’s QuickHull3D pack­age makes a reap­pear­ance as a con­vex hull gen­er­a­tor for the wblut.hemesh.modifiers.HEM_Wireframe joints.

Not only code is scav­enged with­out mercy, a whole range of ref­er­ence mate­r­ial on algo­rithms is scoured:

  1. The über-reference Paul Bourke. Invaluable for many geo­met­ric algo­rithms, espe­cially in HEC_IsoSurface.
  2. Christer Ericson's Real-time Collision Detection for many of the geo­met­ric datas­truc­tures and inter­sec­tion algo­rithms in wblut.geom.
  3. Code provided by Jon Squire served as the start­ing point for the basic pla­tonic solid cre­ators in wblut.hemesh.
  4. Scloopy’s ref­er­ence to a paper by Mandal and Esan proved just the thing I needed for wblut.hemesh.modifiers.HEM_Wireframe.
  5. A thou­sand page tome has added its bur­den to my desk: Geometric Tools for Computer Graphics by Philip Schneider and David Eberly. Its con­tents are increas­ingly imple­mented in hemesh’s geo­met­ric back­bone. If hemesh turns out to be sta­ble, this book deserves the praise. If not, it’s me that messed up somewhere…
  6. David Marec was so gra­cious to pro­vide me with metic­u­lously com­piled ver­tex and con­nec­ti­tiv­ity data for a whole host of poly­he­dra. Not only was the data flaw­less, it was also almost directly usable. A rare for­tune indeed.

While hemesh grows into dif­fer­ent areas, these lists will undoubt­edly expand. I just hope the need for proper book­keep­ing won’t spoil the fun of coding…

Intelligent Theft

Nothing is orig­i­nal. Steal from any­where that res­onates with inspi­ra­tion or fuels your imag­i­na­tion. Devour old films, new films, music, books, paint­ings, pho­tographs, poems, dreams, ran­dom con­ver­sa­tions, archi­tec­ture, bridges, street signs, trees, clouds, bod­ies of water, light and shad­ows. Select only things to steal from that speak directly to your soul. If you do this, your work (and theft) will be authen­tic. Authenticity is invalu­able; orig­i­nal­ity is nonex­is­tent. And don’t bother con­ceal­ing your thievery—celebrate it if you feel like it. In any case, always remem­ber what Jean-Luc Godard said: “It’s not where you take things from—it’s where you take them to.”

- Jim Jarmusch

Ideas of pla­garism and shar­ing are not what they once were. The modern economics of digital goods, where one can­not escape the fact that repro­duc­tion and redis­tri­b­u­tion of one’s work is ridicu­lously easy, make attempt­ing to com­modi­tise and mon­e­tise any form of dig­i­tal art an uphill strug­gle. It’s not a mat­ter of favour­ing less pro­pri­etary ideas of dig­i­tal own­er­ship, we no longer have a choice.

This new eco­nom­ics is not unusual though, any pecu­liar­ity is with the old way. Copyright, a 20th Century con­cept, was designed to pro­tect the abil­ity for an artist to profit from their work, which obvi­ously (if one only ever thinks in terms of the mar­ket) is the sole rea­son any artist gets up in the morn­ing. This idea of stamp­ing own­er­ship on an idea for legal pur­poses has always stood counter to the very nature of our post-(post-post-)modernist era, where it is so dif­fi­cult to find any idea that is truly orig­i­nal, stand­ing, as we do, upon the shoul­ders of so many giants.

It is impos­si­ble to be entirely devoid of influ­ence, it is in our nature to imi­tate. This is how chil­dren learn to speak, form a sense of moral respon­si­bil­ity, and develop their inter­pre­ta­tions of soci­etal norms; by copy­ing their elders. Litigating against imi­ta­tion shares the futil­ity of attempts to out­law sex.

Copyright laws have never stopped copy­ing, they’ve just dis­torted our cul­ture to favour that which can be legally repro­duced. For exam­ple, while Oasis did not infringe the copy­right of the The Beatles, they copied just about every­thing that was legally copy­able about them, with healthy prof­its. Yet if they had sam­pled even a brief sec­tion of any one of their songs, they would have needed to clear it and pay large roy­al­ties. I would argue with any­one who claimed the insipid dirge of Oasis was more rel­e­vant to nineties music than the inven­tive­ness of hip-hop (a genre built on sam­pling), yet we have a sys­tem that levies finan­cial penal­ties against the lat­ter rather than the former.

John Lennon is on record as say­ing the major­ity of Beatles songs started out with them try­ing to “do” another artist, mim­ic­k­ing their style. They would then develop these ideas and take them far beyond their root. Picasso too, apocryphally, said, “Good artists bor­row. Great artists steal”. The mes­sage is: it’s not pla­gia­rism as long as you make it your own. Stealing is wrong, yes, by any moral frame­work, but that doesn’t mean we shouldn’t recog­nise the value of intel­li­gent theft.

Warning:this entire post is a convoluted joke.

Danzer: variations on a theme

Please enable Javascript and Flash to view this Flash video.

Snippets V: 2D Danzer tiles

A bare­bone implementation of Danzer’s ape­ri­odic tiles in 2D. The space­bar tog­gles between the 3 dif­fer­ent tri­an­gles. ‘+’ and ‘-’ change the recur­sion level.

Tip of the hat, again, to Paul Bourke.

Please enable Javascript and Flash to view this Flash video.

Share && Tell

I’ve had the good for­tune of being invited by Corneel Cannaerts to give a pre­sen­ta­tion on the first Share && Tell hosted by dorkbot and timelab.

Not really know­ing what to talk about, I decided to take a gam­ble. What bet­ter way to dis­cuss cre­ative cod­ing than using Processing to build the entire pre­sen­ta­tion. This holds the risk of a crash-and-burn-with-audience. On the other hand, the alter­na­tive would’ve been Powerpoint. For a crowd of design-savvy indi­vid­u­als, a burn­ing wreck is prob­a­bly preferable.

For what it’s worth on its own, I’ve put it online. It’s a demon­stra­tion of the HE_Mesh library built around the theme of sur­face divi­sion and space par­ti­tion­ing. The title Division, The wrong way to draw a grid was inspired by Matt Pearson’s upcom­ing book Generative Art: A Practical Guide Using Processing.

The core idea of the pre­sen­ta­tion is that the tra­di­tional, right way to define a grid, a col­lec­tion of points and explicit con­nec­tiv­ity, doesn’t lend itself well to gen­er­a­tive explo­ration. Modifying a grid while main­tain­ing struc­tural integrity requires exten­sive rule­sets or hefty con­straints. In my expe­ri­ence the code will turn out to be rigid and pre­dictable. In another con­text this might be desir­able. But gen­er­a­tive and para­met­ric algo­rithms dif­fer from tra­di­tional art techniques.They are not meant to exe­cute an idea, rather they should be tools to inspire and give new ideas.

I present two alter­na­tive approaches to a grid. Slides 4 to 10 han­dle the grid as a sur­face or vol­ume divided by pla­nar slices. While we lose some gen­er­al­ity, the advan­tage of this dual rep­re­sen­ta­tion is that it doesn’t break down under per­tur­ba­tion. The grid con­nec­tiv­ity is implicitely defined by the slic­ing oper­a­tions. We are com­pletely free to devise rule­sets with­out hav­ing to worry about integrity issues. The iter­a­tive con­struc­tion tech­nique, the sur­face or vol­ume is divided into a grow­ing col­lec­tion of sub­sur­faces or sub­vol­umes, opens new venues for fur­ther explo­ration by mod­i­fy­ing the impact of each step.

Slides 11 to 16 expose a rather dif­fer­ent approach. Constructs made with more or less global slic­ing oper­a­tions are obvi­ously geo­met­ric and hold lit­tle of the organic. Nature works on a local scale, bottom-up. The Voronoi con­struc­tion of a grid reflects this local­ity. In a sense it’s another dual rep­re­sen­ta­tion, this time defined by a col­lec­tion of con­trol points. The points them­selves can be gen­er­ated by any of a huge num­ber of con­ceiv­able methods:pure math, phys­i­cal par­ti­cle sim­u­la­tion, autonomous agents, exter­nal data … The con­nec­tiv­ity is implicitely defined by the process that gen­er­ates the cells and han­dles noise in a robust way. Voronoi struc­tures can also be eas­ily nested, first gen­er­a­tion cells fur­ther refined by local point con­fig­u­ra­tions, adding another layer of depth. We humans have devel­oped an acute sense of bal­ance between the geo­met­ric and the organic. Voronoi divi­sions come pretty close to the sweet spot.

The image of the Giant’s Causeway in slide 1 was taken from this site. Unfortunately it’s not cred­ited so I can’t prop­erly acknowl­edge the pho­tog­ra­pher. The Causeway is a beau­ti­ful exam­ple of struc­ture cre­ated by divi­sion rather than growth. Philip Ball gives a mar­velous exposé on its ori­gins in the third part, Branches , of his tril­ogy Nature’ Patterns. I heartily rec­om­mend get­ting the entire trilogy.

The pre­sen­ta­tion:
The image takes you to the Processing sketch itself. Use up and down to move from slide to slide. The slides typ­i­cally respond to a mouse-click and/or the space­bar. Imagine some more or less coher­ent bab­ble, invite some good friends over and you can relive the Share && Tell expe­ri­ence right there and then in your own liv­ing room!

Share && Tell