GlitchSort

GlitchSort is a Processing application that uses interrupted pixel-sorting to create glitchy images. Since it has found an audience among glitch artists, I’m setting up this page as a point from which to download a current version and reference materials, as these become available. I’ll also post news or links to news about GlitchSort here.

GlitchSort 1.0b10, for Processing 2.0, is available as of June 7, 2013: GlitchSort_v01b10.zip. Processing 2.0 fixes the image memory leak that plagued previous releases. Note that GlitchSort for Processing 2.0 requires ControlP5 2.0.4, which is not bundled with the Processing application (it is bundled with the standalone applications).

There are bundled applications for Windows32, Windows64, MacOSX, Linux32 and Linux64: YMMV as far as running these. If you have Java installed, they should run, but I have only tested them on MacOS.

The bundled documentation is for version 0.1b8, but I describe new features below and in the source code.  Here is a higher resolution version of the manual (33M PDF) with much better image quality. The print version (60M PDF) offers the highest resolution, for printing. Online reference manual can be viewed here (1.6M PDF). Download or view the optimized high resolution version (33M PDF) here. Very high resolution print version (61.5M PDF) here.

GlitchSort2 Manual Cover

GlitchSort2 Manual Cover

Version 1.0b10 adds commands that use capital letters (shift key + key). These change the behavior of the save, revert, open and turn 90° commands. See the changes.txt file or comments in the code for details. 1.0b10 also allows you to set a percentage of zigzag sorting.

GlitchSort 1.0b9, the last version for Processing 1.5.1, is available here: GlitchSort_v01b9.

Version 1.0b9 revised the zigzag sorting by providing check boxes to set zigzag sorting to random angles, aligned angles,  or angles permuted in blocks of four. It also adds the scaledLowPass method, a low pass filter on each RGB channel with a different FFT block size (64, 32, 16) for each channel. The component order depends on current Component Sorting Order setting, when the RGB channels are used. If you are using HSB channels, a random RGB order will be selected.  Currently this command is only triggered by the ‘)’ (right parenthesis) key command. It works best when pixel dimension are multiples of 64. After it executes, you can immediately use the statistical FFT command (‘k’) to sharpen the image. Amazingly, most of the detail that was lost with the low pass filtering will be restored by the default statistical FFT setting (set by the command to operate on 16 x 16 pixel blocks). The command takes time to execute because it’s really a long series of commands bundled together. It was an experiment that proved very rich in the variety of images it could create. Here’s an example.

Version 1.0b8a fixed the denoise command to handle edge and corner pixels correctly, and changed the ‘_’ (underscore) hack to repeat the last command four times, with a 90 degree rotation between executions, when last command is in “gl<>9kjdGLKJD”.

Version 1.0b7, a substantial update, supported Fast Fourier Transforms on images. It also saves JPEGs using current Java libraries, instead of the deprecated com.sun.image.codec.jpeg. Version 1.0b8 fixes a bug in the audify command, and adds a “denoise” filter and spatial shifting of color channels: that was enough to justify the new version number. I discussed GlitchSort version 1.0b7 pre-release on December 7, at a Share Session at GLi.TC/H.

Version 01b5, released on August 23, 2012, was the first public release named  “GlitchSort” instead of “GlitchSort2.” Version 01b5 provided a new sorting tool that operates on zigzag-scanned blocks of pixels using any of the available algorithms, and a color quantizing tool.

Version 1.0b4, released on August 1, 2012, offered four different sorting algorithms, each of which has a different behavior that can be used to affect images in different ways. It added the “munge” feature that does glitchy compositing, and the “degrade” command that uses JPEG compression to degrade an image.

My own images created with GlitchSort can be found at http://www.flickr.com/photos/ignotus/sets/72157629445337238/.

Work Journal | Final Updates

Hasn’t been as active on my journal for a while. Work begins to become more standardized and there are less things to write about that are particularly different.

There were several new printing techniques introduced.

-Marginless printing: We put a very high quality Japanese paper over another larger cheaper paper and feeded the large paper in. The image to print was slightly bigger than the small paper and we were therefore able to print with absolutely no margins.

-Large Size paper printing: Not particularly different from small paper except that we have to keep an eye on it and worry about gravity deforming the paper or causing friction. You do however have to make the distance from the printer further from the paper in the settings, since large sized paper is often much thicker and you don’t want the nozzles touching the paper.

In addition to these new printing methods, Paul recieved recyclable printer cartridges that we switched out. We filled in new ink for the cartridges, replaced the inks, and then made new sets of calibrated proofs for the new inks. Paul said that the new ink is supposed to be identical to the previous ink, but he wanted to be extra careful.

The prints that Paul and I printed are also now featured at an exhibition. I about the process of framing and helped framed, transport, and put up a lot of the pieces. You can find better information about the exhibition in Paul’s blog than what I can say about it.

On the programming side there were a lot of issues with Java / Web connections that have finally been solved. Apparently you have to sign a Java applet before it can connect to a database due to security issues. Ironically we decided the best way was not to have Java make a connection anyways and connect through making a connection via a web page. We also started replacing the formatting with the original formatting from the Django sketches that were made.

The main requirements for the website are mostly done and Paul believes that we should try to get in touch with Jon Cates again to decide when we can ship the website as a pilot site. This is both to progress the website and also attract potential funding from art grants or kick-starter.

Before we shift the pilot site there are still some major things left to do that I hope we’ll manage to finish soon:

High

-Allow edit to update database
-fix broken links to images

Medium

-Delete media from user page
-Homepage blog
-Encrypt Invitation code
-Clear HTML formating during edit
-Design point system
-Fix header and footer padding
-Add “your invitation was sent” message after sending invite, and “send another message”

contact form
notice button

Low
-noticed by (BF higher up artists, blink tag for Paul Jon)
-Statement and proposal fields for artists (bio 500 chars)
-allow snapshots for remix application
-make voronoi application
-show people you’ve invited

-Edit about in profile
-Delete uploaded Media
-Debug search (needs to be clicked twice right now)

Maybe
-video frames parser
-Css formatting

Video TurtleBoids Demo

Video TurtleBoids Demo Applet

Video TurtleBoids Demo Applet

The Video TurtleBoids Demo Applet is a Processing applet that captures video, derives optical flow vectors from it, and then uses the vectors to change the velocity of a flock of “boids” that can also draw lines (i.e., behave like Logo turtles). You will need the IgnoCodeLib library (the .jar file is included in the Code directory) and the ControlP5 library (not included, available for download at http://www.sojamo.de/libraries/controlP5/)

Based on Flocking, by Daniel Shiffman, in The Nature of Code, a demonstration of Craig Reynolds’ steering behaviors (see also http://www.red3d.com/cwr/). Also adapts code from Optical Flow by Hidetoshi Shimodaira from http://www.openprocessing.org/sketch/10435.

Download the VideoBoidsDemo. It will not run in a browser, and it does require a video input to function.

 

Video TurtleBoids

The Video TurtleBoids installation on view at What It Is through May 2012 uses “optical flow” from a video camera to control the motion of a flock of “boids” that also know how to draw. The optical flow is visible as gray lines indicating the motion of people, vehicles, etc., seen by the camera. “Boids” is Craig Reynolds’ humorous name for the flocking behaviors he described in the 1990s. “Turtle” is a term from even earlier, from the Logo programming language that grade school children once used to make drawings with a “turtle” that carried a “pen” around the screen.

Video TurtleBoids installation

This software was written in the open source language Processing. I am using Daniel Shiffman’s adaptation for Processing of Craig Reynolds’ steering behaviors. The optical flow code is by Hidetoshi Shimodaira, from the OpenProcessing web site. The drawing code is my own adaptation of TurtleGraphics, available in my open source Processing library, IgnoCodeLib.

Work Journal | Feb 17 – Mar 24

Feb 17th, 7hrs | Programming: mysql, php.

Started the website.

-Prepare mysql database to interact with the website.

-Made basic queries to database to display a profile page from information pulled from a mysql database.

-Practiced echoing database  data to create html/css/javascript etc. Figured out that echos don’t work like println(java)/cout<<cplusplus  in that echo actually get incorporated into the code of your program so that you can subsequently echo chunks to write html.

Example:

echo “<img src='”;
echo $filename;
echo “‘/>”;
echo “<br><br>”;

 

Feb 21st 7hrs | Programming: domain setup, mysql, php.

-Bought a personal domain to temporary host the pyramid website.

-Set up website to use mysql database on the website. Had to actually give it instructions to connect and find it now. Also gave it a location to store sessions

This specific code was required for

session_save_path(“/home/users/web/b2289/moo.jackkoocom/cgi-bin/tmp”);
session_start();
mysql_connect(“jackkoocom.fatcowmysql.com”, “jack”, “password”);
mysql_select_db(“pyramid”);

-Set up ftp with filezilla and fatcow server

-Began working on features such as login, and upload.

 

Feb 24th 8hrs | Programming: domain setup, mysql, php.

-Lesson on advance sql queries, php troubleshooting, and some extra work afterwards.

-Fixed 90% of upload errors on filesize by editing the php settings on the server. Still sometime output errors on extra large files.

changed these values @ http://www.fatcow.com/member/cgiManagement/PHPplus.bml
php_value upload_max_filesize 10M
php_value post_max_size 10M
php_value max_input_time 300
php_value max_execution_time 300

-Finishing up features (login, upload)

-Added registration to input new users into database upon giving invitation codes matching the invitationCodes table in the database.

 

Feb 26th, 2hrs  | Programming: Java 

Lesson on java double buffering.

-Learned about double buffering to prepare for java application (the collage application).

Double buffering is basically to prevent seeing black flashes appear when the image has not finished being redrawn during. So you draw the image onto a “buffer” and switch it to the current displaylist when its done drawing. So the drawing process is behind the scene and the change of tearing is significantly reduced.

Jon Heard my tutor also showed me a useful java function to clip images to specific shapes.

Now I should have everything i need for the collage software (although the shape clipping don’t have any anti-alias, i might want to look into that issue)

 

Feb 28th,  7hrs | Printing, Programming: php

Paul had several big prints that he wanted printed. Everything he wanted printed was in an adobe bridge group so I could print them on my own. I setup the print and printed the fabulous photographs of Paul. The last print had extra space so Paul let me print one of my artworks . The output of my artwork isn’t setup for prints yet but it still came out great.

On the programming side, I was debugging an error that come upon login. Can’t recall the specifics of the error now.

 

March 2nd,  7hrs |  Programming: php, sql.

-Search feature done!

-Used sql  queries to return all matching searches and sort them into alphabetical order (wasted a lot of time writing a complex php code that did the same thing). I wrapped the echoed results in hrefs and put the matching id in the url. So then the profile page was editted to check for ids in the url first  and generate a page  based on that.

$IDsMatchingSearchText = mysql_query(”
SELECT ID, firstName, lastName FROM users WHERE firstName=’$searchText’ UNION
SELECT ID, firstName, lastName FROM users WHERE lastName=’$searchText’ ORDER BY lastName ASC
“);

-Slight tweaks everywhere. (homepage redirect, added about to registration, tested div capabilities etc)

-Was wondering why saic.edu seems to log me off when i close the tab even though everyone on the forums says that it’s impossible to know that you closed the tab. Actually the saic.edu log off is a illusion. If you copy the url, close the browser and paste it in. the session remains. So what it actually does is log you off when you enter the homepage, and is missing a specific element in the url. Paul wanted this feature for security so i know know how to add it.

2/10 – 2/15

2/10 Friday 12:30-1

Talked about Paul’s programming project with Jon Cates. Went over requirements for the site and priorities.

 

2/14 Tuesday 12:30 – 5:30

Setting up membership for Association for Computing Machinery, has a lot of books in it about databases, php, java. The languages and concepts that will be used for the project.

Researching databases. Read about different types of database engines. Don’t know if separate engines will be necessary for the project.

Paul’s previous client for programming came over. I listened in on them discussing the features of the program they wanted. They decided that everything on the contract was finished, so they gladly took the program on their USB and thanked Paul. I asked Paul if I could see the contract for an idea of what a freelance programming contract might look like, and Paul gladly showed me.

 

2/15 Wednesday 7-11pm took class on database for paul’s web project. Here are some notes:

rows -> records
columns -> fields
values -> values are where records and fields meet
record set ->  queries pull from multiple tables and combine them into a record set.
aka: query set, result, query result.
dms: software that keeps and orders a database
eg: mysql, oracle

mysql: more well suited for web database
oracle: more well suited for cooporate databse

->securty
->backing up redundant

->rdbms, relational database management system
-> management that focuses on related tables.

set up as servers or files
mysql, oracle, sqlserver

file database
msacess, sqlight

Database servers
Databases
Tables
Queries
Security
users

Normalization
rules for making a database
1. First Form.
->choice of key attributes needs to be unique
->order of records doesn’t matter
->each field must be a unique categorization
->each record/field intersection contains only one value
2. Second Form.
->all non key fields in the table must be dependent on ALL key fields
PART | WAREHOUSE | quantity | warehouse-address
3. Third Form.
->all non key fields are dependent exclusively on the key
wrong: ID | last name | first name | address | city | state | zip

correct: ID | last name | first name | address | zipID(foreign key)
ID | zip | city | state
4. Fourth Form.
->record type should not contain 2 or more independent multivalued facts about an entity.

wrong:
EMPLOYEE | SKILL | LANGUAGE

ID | EMPLOYEE | SKILL | LANGUAGE
——————————-
| EMPLOYEE | SKILL | LANGUAGE |
|———-+——-+———-|
| Smith    | cook  | French   |
| Smith    | cook  | German   |
| Smith    | cook  | Greek    |
| Smith    | type  | French   |
| Smith    | type  | German   |
| Smith    | type  | Greek    |
——————————-

| EMPLOYEE | SKILL | LANGUAGE |
|———-+——-+———-|
| Smith    | cook  |          |
| Smith    | type  |          |
| Smith    |       | French   |
| Smith    |       | German   |
| Smith    |       | Greek    |
——————————-

correct:
Employee     | skill
Smith        | Cook
Smith        | type

Employee     | Language
Smith        | French
Smith        | German
Smith        | Greek

5. Fith Form.
->
wrong
—————————–
| AGENT | COMPANY | PRODUCT |
|——-+———+———|
| Smith | Ford    | car     |
| Smith | Ford    | truck   |
| Smith | GM      | car     |
| Smith | GM      | truck   |
| Jones | Ford    | car     |
| Jones | Ford    | truck   |
| Brown | Ford    | car     |
| Brown | GM      | car     |
| Brown | Totota  | car     |
| Brown | Totota  | bus     |
—————————–

correct
——————-   ———————   ——————-
| AGENT | COMPANY |   | COMPANY | PRODUCT |   | AGENT | PRODUCT |
|——-+———|   |———+———|   |——-+———|
| Smith | Ford    |   | Ford    | car     |   | Smith | car     | Fifth
| Smith | GM      |   | Ford    | truck   |   | Smith | truck   | Normal
| Jones | Ford    |   | GM      | car     |   | Jones | car     | Form
| Brown | Ford    |   | GM      | truck   |   | Jones | truck   |
| Brown | GM      |   | Toyota  | car     |   | Brown | car     |
| Brown | Toyota  |   | Toyota  | bus     |   | Brown | bus     |
——————-   ———————   ——————-

We made a database structure for the project, but I’m not sure Paul would want me to post it here. Will talk about that database with paul tomorrow.

Jack Koo

Hi this is Jack. I’m an intern at Ignotus Editions. This blog will help me keep track of what I’ve done!

 

Jan 27, Friday 10am-4    | Nozzle Check, Color Calibration, Printer Operations.

First day at Ignotus. My first surprise working with Paul Hertz is how much better color looked on print than on the screen. We set up the printer to clean the nozzles since Paul had been in Spain and we don’t want clogged nozzles. Printers need to be constantly in use to prevent the nozzles from being clogged up by dry paint. After the nozzles were cleaned, we went over basic concepts of Color Workflow. We calibrated the the monitor with colormunki to make sure the prints color looked almost identical to the monitor. Then we went over some basic steps to operating the digital printer. Loading/unloading paper, loading unloading inc, printer settings, printing etc.

 

Jan 31, Tuesday 10am-3    | Packaging Paper, Image Processing.

We were preparing for the opening of QuadCore exhibition. Learnt about packaging paper for transport. As always, Paul is very delicate with the paper. Each print has paper layered between to prevent friction damage. The paper is then put into a plastic bag to prevent rain damage, and then put into a hard cardboard case. Paul got called that he couldn’t install that day, so we went over Image Processing. Raw photo files had a lot of information that we could pull out and show details in monotone sections of the photo that we can pull out. We also sharpened areas for clearer print, and got rid of camera artifacts.

 

Feb 1, Wednesday 6pm-9    | Java Syntax, Eclipse Functions, Swing Layouts.

Paul wanted me to learn Java for the collage web application that he’s been planning to make. I’m very familiar with C++ and Processing, which made java a breeze to learn. I learnt about basic syntax, eclipse functions, and swing layouts.

 

Feb 3, Friday 8:30am-4    | Transporting Paper, Installing Prints.

Preparing more prints and transporting it to the QuadCore exhibition for installation. We printed an extra print to take to the exhibition (You should print daily to ensure nozzle hygiene). At the gallery we measured the space we had and calculated how many prints would fit with reasonable margins. The 36 inch print in the middle almost took three people to set up. Two people needed to hold it, and on person had to snap the magnets to the screws that we inserted into the walls.

Welcome Jack Koo

For the next few months Ignotus Editions is pleased to welcome an intern from the School of the Art Institute of Chicago, Jack Koo. Jack will be learning color workflow and printing, helping Paul Hertz prepare a one-person show due to open in May at What It Is. He’s also dedicating time to web design and programming. I’ve asked him to write occasional posts on his experience at Ignotus Editions, both to document his internship for SAIC, and to inform interested readers about some of the work that is done at Ignotus Editions.

IgnoCodeLib for Dorkbot

Thanks to everyone who came to Dorkbot this evening. It was a real pleasure to show pictures on paper and talk about the algorithms that produced them. Better than a gallery show, I said when I got home.

I promised I would post a development release of my code, so here it is: IgnoCodeLib. It should be pretty stable, though there are a few rough edges (bounds rectangle caching in BezShape and its subclasses seems shaky). Let me know how things go if you try it. I should have a new release version in a month, properly announced on the Processing forum, posted to Google Code, and available here.

BTW, the examples to try first (the newest ones) are Polygons, EllipsesAndCircles, and DrawMulti. Not all of them are commented yet–but y’all read code, n’est-ce pas?

Dorkbot Presentation

Thursday, October 27, at En3my Sound, 1550 N. Milwaukee Ave., 3rd floor, in Chicago: I’ll be presenting the newest version of my Processing library, IgnoCodeLib. I may even be so lucky as to have it online and ready to download. If not, expect an announcement soon. IgnoCodeLib provides a framework for 2D graphics using Bézier curves and straight lines. It can export its graphics to Adobe Illustrator. Moar information can be found on the Dorkbot Chicago site.

I’ll also hang some of my most recent work, created with my library. I’ve been posting much of it to Flickr, to the Sampling Patterns 55 set (a selection from the larger Sampling Patterns set) and recently to the Tree Jive set. This animated GIF, Not a Glitch, was created with the Tree Jive algorithm. My page on on Open Processing has some samples of the library used for animation.

 

Not a Glitch, animated GIF

Not a Glitch, animated GIF, created with Processing and IgnoCodeLib

 

Update: for those curious about the algorithmic technique behind the Tree Jive patterns, L-systems or string-rewriting systems, I recommend Prusinkiewicz and Lindenmeyer’s book The Algorithmic Beauty of Plants, available in a free, high-resolution version on the Algorithmic Botany web site.