Skip to content

Ecce Signum

Immanentize the Empathy

  • Home
  • About Me
  • Published Works and Literary Matters
  • Indexes
  • Laboratory
  • Notebooks
  • RSS Feed

Syntax Highlighter Test

2011-10-05 John Winkelman

I just installed the Syntax Highlighter Javascript Library, which makes it easy to display easily-readable source code on websites. As my first test, here is a class I wrote in Actionscript 3 a couple of years ago, when I was deep in a dozen different projects, all built using Notepad++ and the MXMLC command-line compiler. The upshot of that was, no way to “trace” output from the .swf file. So I wrote my own, more or less. Here is the source code:

package {
	import flash.display.DisplayObjectContainer;
	import flash.display.Stage;
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.utils.Timer;
	public class InfoPanel extends Sprite {
		private var dragBar:Sprite;
		private var closeButton:Sprite;
		private var clearButton:Sprite;
		private var resizeButton:Sprite;
		private var outputWindow:TextField;
		private var timer:Timer;
		private var base:DisplayObjectContainer;
		private var isDragging:Boolean = false;
		private var isResizing:Boolean = false;
		private var dragMouseOffX:Number = 0;
		private var dragMouseOffY:Number = 0;
		private var resizeMouseOffX:Number = 0;
		private var resizeMouseOffY:Number = 0;
		private var w:Number = 0;
		private var h:Number = 0;
		private var bgc:Number;
		private var fgc:Number;
		private var outputFormat:TextFormat = new TextFormat("Courier New",11,0x33ff33,false,false,false,null,null,"left");
		public function InfoPanel($base:DisplayObjectContainer,$w:Number = 150,$h:Number = 100,$bgc:Number=0x000000,$fgc:Number=0x66ff66):void {
			base = $base;
			w = $w;
			h = $h;
			bgc = $bgc;
			fgc = $fgc;
			outputFormat.color = fgc;
			graphics.lineStyle(0,0x666666,1);
			graphics.beginFill(bgc,1);
			graphics.drawRect(0,0,w,h);
			graphics.endFill();
			dragBar = new Sprite();
			dragBar.graphics.beginFill(0x666666,1);
			dragBar.graphics.drawRect(0,0,w,10);
			dragBar.graphics.endFill();
			dragBar.buttonMode = true;
			dragBar.useHandCursor = true;
			dragBar.addEventListener(MouseEvent.MOUSE_DOWN,onDragMouseDown);
			dragBar.addEventListener(MouseEvent.MOUSE_UP,onDragMouseUp);
			dragBar.x = 0;
			dragBar.y = 0;
			addChild(dragBar);
			
			
			clearButton = new Sprite();
			clearButton.graphics.lineStyle(0,0xcccccc,1)
			clearButton.graphics.beginFill(0x666666,1);
			clearButton.graphics.drawCircle(0,0,3);
			clearButton.graphics.endFill();
			clearButton.x = w-15;
			clearButton.y = 5;
			clearButton.buttonMode = true;
			clearButton.useHandCursor = true;
			clearButton.addEventListener(MouseEvent.CLICK,onClearButtonClicked);
			addChild(clearButton);
			
			
			closeButton = new Sprite();
			closeButton.graphics.beginFill(0xcccccc,1);
			closeButton.graphics.drawCircle(0,0,3);
			closeButton.graphics.endFill();
			closeButton.x = w-5;
			closeButton.y = 5;
			closeButton.buttonMode = true;
			closeButton.useHandCursor = true;
			closeButton.addEventListener(MouseEvent.CLICK,onCloseButtonClicked);
			addChild(closeButton);
			resizeButton = new Sprite();
			resizeButton.graphics.beginFill(0xcccccc,1);
			resizeButton.graphics.drawRect(0,0,6,6);
			resizeButton.graphics.endFill();
			resizeButton.x = w-6;
			resizeButton.y = h-6;
			resizeButton.buttonMode = true;
			resizeButton.useHandCursor = true;
			resizeButton.addEventListener(MouseEvent.MOUSE_DOWN,onResizeMouseDown);
			resizeButton.addEventListener(MouseEvent.MOUSE_UP,onResizeMouseUp);
			addChild(resizeButton);

			outputWindow = new TextField();
			outputWindow.width = w-10;
			outputWindow.height = h-20;
			outputWindow.x = 5;
			outputWindow.y = 15;
			outputWindow.selectable = true;
			outputWindow.wordWrap = true;
			outputWindow.multiline = true;
			outputWindow.text = "STATS";
			outputWindow.setTextFormat(outputFormat);
			outputWindow.defaultTextFormat = outputFormat;
			
			addChild(outputWindow);
			timer = new Timer(25);
			timer.addEventListener(TimerEvent.TIMER,onTimer);
		}
		
		private function onTimer(e:TimerEvent):void {
			if(isDragging==true) dragMe();
			if(isResizing==true) resizeMe();
			e.updateAfterEvent();
		}
		private function onDragMouseDown(e:MouseEvent):void {
			e.stopPropagation();
			dragMouseOffX = e.target.mouseX;
			dragMouseOffY = e.target.mouseY;
			startMe();
			isDragging = true;
		}
		private function onDragMouseUp(e:MouseEvent):void {
			isDragging = false;
			stopMe();
			base.addChild(this);
		}
		private function onResizeMouseDown(e:MouseEvent):void {
			e.stopPropagation();
			resizeMouseOffX = e.target.mouseX;
			resizeMouseOffY = e.target.mouseY;
			startMe();
			isResizing = true;
		}
		private function onResizeMouseUp(e:MouseEvent):void {
			isResizing = false;
			stopMe();
		}
		private function onCloseButtonClicked(e:MouseEvent):void {
			e.stopPropagation();
			hideMe();
		}
		private function onClearButtonClicked(e:MouseEvent):void {
			outputWindow.text = "";
		}
		private function startMe():void {
			timer.start();
		}
		private function stopMe():void {
			timer.stop();
		}
		public function showMe():void {
			base.addChild(this);
		}
		public function hideMe():void {
			base.removeChild(this);
		}
		private function dragMe():void {
			x = stage.mouseX - dragMouseOffX;
			y = stage.mouseY - dragMouseOffY;
		}
		private function resizeMe():void {
			w = mouseX + 6 - resizeMouseOffX;
			h = mouseY + 6 - resizeMouseOffY;
			graphics.clear();
			graphics.lineStyle(0,0x666666,1);
			graphics.beginFill(bgc,1);
			graphics.drawRect(0,0,w,h);
			graphics.endFill();
			dragBar.graphics.clear();
			dragBar.graphics.beginFill(0x666666,1);
			dragBar.graphics.drawRect(0,0,w,10);
			dragBar.graphics.endFill();
			outputWindow.width = w - 10;
			outputWindow.height = h - 20;
			resizeButton.x = w - 6;
			resizeButton.y = h - 6
			clearButton.x = w - 15;
			closeButton.x = w - 5;
		}
		public function update($s:*,$r:Boolean = false):void {
			if($r==true) {
				outputWindow.text = $s.toString();
			} else {
				outputWindow.appendText("\n"+$s.toString());
			}
			outputWindow.scrollV = outputWindow.maxScrollV;
			base.addChild(this);
		}
	}
}

And it is called like this:

var info:InfoPanel = new InfoPanel(this);
info.update("hello world");

After being created the InfoPanel can be positioned just like any other DisplayObject. It accepts up to five arguments, in this order:

parent:DisplayObjectContainer, width:Number, height:Number, backgroundColor:Number,textColor:Number

Of them, only the parent argument is required; the rest will revert to default values if left empty. The parent item must be a DisplayObjectContainer, such as the Stage, or a MovieClip or Sprite.

Once created, the InfoPanel can be moved, resized, cleared and closed with the mouse.

To update the content, use the following method call:

info.update("a string");

This will append a line break, then the string. To clear the info panel when updating it, use the method call as follows:

info.update("a string",true);

Be careful; once the content of the InfoPanel starts measuring in the many thousands of characters, updating it may start to bog down the Flash player, slowing down whatever else you are running.

Posted in ProgrammingTagged Flash comment on Syntax Highlighter Test

More Thoughts About PhotoFly

2011-10-04 John Winkelman

Off and on over the past several weeks I have wandered around town with my camera looking for likely subjects to turn into 3d digital representations of themselves. My success rate is about .5, and is mostly made up of tree trunks and patches of gravel. Small objects, and objects in a light box, have not worked at all. I don’t know if this is a fundamental flaw with PhotoFly, an artifact of PhotoFly being in beta, or if I just don’t get it. I suspect (and hope) it is a mix of the latter two.

But enough of that. Of my successes, I have created animations of the best ones and posted them on YouTube.

 

This is the first animation I created. PhotoFly makes this quite easy, with a well-thought-out timeline-based animation tool. The gaps in the scene are places where the camera could not see the environment from where I took the photos. While beautiful, there are not a lot of vantage points at the koi pond.

 

This tree trunk is the second successful scene. The photos are from my parent’s house in Springport. I believe I took around 20 photos. Notice the gaps in the grass around the highest-resolution parts of the lawn. This is where PhotoFly couldn’t quite figure out how to stitch parts of the scene together, because grass is too uniform a color and texture for the software to sort out.

 

This one is my favorite so far. the overpass is a block from my house. I was wandering around with my camera when I noticed an extraordinary piece of graffiti on the concrete embankment. I took a few photos, then began wandering up and down the tracks, and up into the nooks and crannies of the overpass, trying to get everything from every angle. Mostly, I succeeded. The bridge is quite new, and nowhere near as post-apocalyptic in real life as it appears in the animation. This is my only successful attempts at modelling a hollow structure.

I went back a couple of weeks later, intending to model the entire overpass, including the railroad track leading into it. Unfortunately, the regularity, the sameness of the man-made parts of the scene confounded PhotoFly, and of the hundred or so photos I took, PhotoFly only managed to incorporate about 20 into the final scene, which looked like someone had printed a photo of the bridge onto a wad of silly putty, then twisted it up and thrown it against a wall. I suspect that a more judicious use of angles when taking photos would make a future attempt more successful.

 

In my opinion, this is the most successful of all of my PhotoFly experiments, simply because this is the one with the least amount of distortion. The photos which went into this scene are from the Lake Michigan shoreline, just north of Oval Beach in Saugatuck, Michigan. There was enough light, and enough varied texture, that the software created this scene in one go. I didn’t need to define any points or re-stitch any of the photos. It just worked.

 

This is the most recent one. A goose-neck gourd, on a foot stool in my back yard. I would call it a qualified success. The yard looks great! The gourd, other than the neck, looks pretty good. The footstool – the man-made, smooth, texture-less object – is warped and distorted, and has been melded with the background. This one probably suffered a little from the bright sunlight. The gourd is smooth and shiny, and some of its color patterns were obscured by reflections.

The three things PhotoFly seems to have the most difficulty with are reflections, lack of context, and sharply contrasting light sources. The pattern recognition part of PhotoFly can’t (at present) distinguish between a pattern and a reflection of a pattern. This makes sense; it tries to find and reproduce patterns. If two parts of a photo have the same pattern, it is difficult to decide which part goes where, without a lot of other contextual information.

Which is why PhotoFly doesn’t work well with, for instance, something in a light box. The thing itself may have astonishing detail, but without detailed surroundings to give it a location in space, PhotoFly can’t (again, at present) determine angles, curves, relative distances, and the like. This is one case where having a light source which is the same strength, everywhere at once, is actually a detriment.

With brightly contrasting light, say, a plain-colored object in full afternoon sunlight, PhotoFly doesn’t necessarily recognize that the shady side of an object is attached to the sunny side of the object. If the object has a rich texture, lots of additional information which the software can use to create context, this is not such a problem, but a photo of e.g. a large rock, partially silhouetted against the sky, doesn’t work so well.

Having figured these issues out, it is simple to come up with successful PhotoFly scenes. If I discover a workaround to any of the above issues, I will post it here and at the AutoDesk Labs forums.

Posted in PhotographyTagged photogrammetry comment on More Thoughts About PhotoFly

Technical Notes On the New Site

2011-10-03 John Winkelman

For the most part, putting this site together went smoothly. Sure copy-and-pasting 700+ blog entries was a bit of a chore, as was going through every post to find which ones had digital assets which needed to be re-hosted. Tiresome, but not difficult.

In every previous version of this site, if I had a Flash movie which I wanted to show off, I would either post it in-line in the blog, or put it on its own page and link to it, or only show a teaser image on the front page and embed the animation in the full post. For this site I wanted something new. You’ve all seen light boxes – you click on a thumbnail photo, and a translucent overlay appears over the site, and the relevant content appears therein. I decided to go with one of those.

There are myriad ways to create a lightbox. All involve Javascript and CSS, and most of them are good at what they do. I decided to go with ShadowBox.js because it supports all kind of content; not just Flash and/or images. I ran it through a few static page tests, and it had everything I needed.

Getting it hooked up in Drupal Gardens (“DG”) was a little more challenging. Since DG users don’t have access to modify the actual templates of the site, using external code files can be a little challenging. The DG help files recommend creating a block in the header and copy-and-pasting the javascript into a plain text file, and embedding it directly in the HTML for a page. This is what I have done in the past, but having just uploaded over a hundred Flash movies and photos to the content area of the site, I decided to try something new.

It turns out that you can upload any kind of content you want to the content/media area of DG. You might need to make changes in the configuration area of your site to allow for the upload of e.g. a .js or .swf file, but it can be easily done. There is one thing to note: Nothing loaded into this area is processed on the server. If you upload a .php file, it will be served as plain text, NOT processed through Drupal/PHP. Fortunately, for Javascript, I don’t need it to be processed. Plain text is just fine.

Accessing the Javascript is easy; everything uploaded to the media library on DG is in the /sites/mysite.drupalgardens.com/files/ directory. To access it, I created a block which contains a <script> tag, which links to the new files at /sites/mysite.drupalgardens.com/files/shadowbox.js. Everything worked on the first try.

More technical notes to follow, as I figure out how to do more things in Drupal.

Posted in Programming comment on Technical Notes On the New Site

Some Photos of Hot Peppers

2011-10-01 John Winkelman

The pepper season is winding down, so I grabbed the brightest and healthiest of the most recent harvest and took a few photos in my light box. Clicking any of the images will take you to Flickr, where you can see the rest of the photos in the set.

Belgian Carrot Pepper

Cherry Bomb Pepper

Habanero Pepper

Cayenne Pepper

Posted in PhotographyTagged food, gardening comment on Some Photos of Hot Peppers

Welcome to Ecce Signum, version 6

2011-09-30 John Winkelman

Welcome back, everyone! Life has been interesting over here at es.o, It is something of a long story – which I will get to in a moment – but it has a positive ending.

Back in early June one of the sites I maintain got hacked. It was my own fault; an old install of Textpattern, the updating of which I had let fall by the wayside, coupled with not updating my admin passwords nearly as often as I should. In any event, I found myself in a position where the site needed to be rebuilt from the ground up in a week. Three hours of putzing around with TextPattern convinced me that it wouldn’t happen there. So I bit my lip and created a new site over at Drupal Gardens. I say “bit my lip” because Drupal and I have had, at best, a problematic relationship, which probably contributed tangentially to my summer of unemployment.

Anyway.

Four days later, and the site was up and running again. There was some goofiness surrounding the email and the use of CNAME records, but that got sorted within a day.

Fast forward to the beginning of August, 2011. EcceSignum.org, running on the exact same setup as the other site, got hacked. It wasn’t taken down, but the content management area was rendered unusable. Essentially my site became Read Only. This was not as traumatic as it sounds; when the other site went down, I immediately backed up everything on my own site, just in case. And, though the admin area of es.o no longer worked, I could still get into the database and pull down all of the blog posts, images, Flash files, archives, the whole shebang.

I set up a new site at Drupal Gardens and started building a new site. I knew I wanted it to be a blog, and I knew I wanted it to go all the way back to the beginning. Herein lay the first challenge.

I have been running this blog in one form or another since December 2001. Earlier than that, actually, but those files are long gone (I think. I still have some floppy disks to look through).

When I first started, it was completely static HTML. If I wanted to add a blog entry, I had to update it in raw code.

Next came a simple framework of PHP includes, but I was still writing each entry as raw code.

Then I built an XML parser, and set up a simple system of linking different chunks of content together.

Then I built a content management system which used XML, XSLT, and a minimal amount of PHP to build the files.

Then I archived all that, and moved over to using TextPattern, round about version 3, I think. That was in 2005.

And now, here I am. EcceSignum.org is running on an install of Drupal 7, hosted at Drupal Gardens.

There are currently something over 710 blog posts. Entering them was no small task. Es.o has been through so many evolutions that there was no way to just do a bulk import. So I want through every blog post, one at a time, and copy-and-pasted the source code into the new site. Then I went through and uploaded all of the old images and Flash movies to either this site or Flickr, and linked everything back together, Then I took a pass through all of the posts looking for any cross-links, and re-linked them so they all go to the appropriate place on the new site. Actually, that last bit is an ongoing process.

Again, while a huge amount of work – probably 50 hours over the past seven weeks – it was not traumatic. I got to read the entirety of my blog, from beginning to end, one post at a time. I revisited old Flash experiments, and felt moments of the excitement I felt when posting my first experiments in Flash 6, 7, 8, 9, and 10. All the work angst, put in perspective. Of the twelve years I have been a web developer, I have been blogging for ten.

My plan, at the moment, is to be a little more consistent with the writing. No more two-month gaps. The route to the new job takes me through the center of town, either walking or biking, so I will be able to re-connect with Grand Rapids in a way that I haven’t done in about a decade. Also expect to see more technical posts of the “It took me hours to figure this out. Here is a cheat sheet so the same thing doesn’t happen to you” variety.

Starting, of course, with what to look out for when transferring an old site to Drupal Gardens.

Thanks for visiting!

Posted in Life comment on Welcome to Ecce Signum, version 6

Turning Photos Into 3D Models

2011-07-19 John Winkelman

Wooden duck model for AutoDesk PhotoFly

Click here to see the duck in action.

The hollow spinning duck is the result of a couple of years of contemplation and about a day and a half of work. Back in 2007 Blaise Aguera y Arcas introduced Photosynth at TED.com. Photosynth generates 3d-ish scenes from groups of photos, and one of the artifacts of this process is a point cloud which indicates all of the points of similarity between the multiple photos. Given enough photos, and enough information in each photo, the point cloud begins to resemble a 3d rendering of the subject of the photos.

The brilliant folks over at AutoDesk Labs have taken this concept one step further and created a tool which generates an actual 3d model of a scene. They call it Project Photofly, and it includes the simple-yet-amazing Photo Scene tool.

Basically, this is how it works: Pick something to photograph. This can be an object, a room, a person, or a location. Take many overlapping photos from several angles and heights. Load those photos into the Photo Scene tool. Sit back and wait as the photos are uploaded to the online portion of the tool, where all of the heavy computing takes place. Once finished, download the 3d object back into the Photo Scene tool, edit as necessary, and then render or save the result. Skaboom. Instant (ish) 3d model from a series of photos.

For my project, creating the 3d object was only half of the work. The other half was getting it to render in Flash. Fortunately, there is a powerful, easy-to-learn (again, “-ish”) Actionscript library called Away3d which can import and render a wide variety of 3d file formats. Unfortunately, the documentation is somewhat fragmented, due in part to the release of version 4 of Away3d, which targets the Flash 11 player, which is still in Beta. I am using Away3d version 3.6, and examples thereof are rapidly being replaced by newer versions.

Two books saved me: Away3d 3.6 Essentials and Away3d 3.6 Cookbook. They recommended that I take the model as produced by Photo Scene and run it through a processing tool called PreFab, which is used to pre-process 3d models to optimize them for use in any of the Flash 3d engines.

Five minutes later, I had a spinning duck.

The file size, however, was problematic. 1,200k for a single 3d model is not unreasonable, but it seemed excessive for the simple object I was using. As luck would have it, the textures generated by Photo Scene are contained in a single gigantic .jpg file, so I opened it in GIMP, reduced the quality to about 50%, and resaved at a little over 300k. I am sure I could have done more, but this was sufficient for my first model.

This group of tools excites me. The ability to make web-ready 3d models with nothing more than a camera and a couple of free tools opens a great many doors for developers and clients who do not have the resources to run a full 3d rendering farm. Textures are de facto photo quality, and file size can be manipulated to find the sweet spot between visual quality and download speeds.

My summer just got a lot more interesting.

So to recap: Here are the tools I used to create the duck. All are free (except the camera).

1. A camera
2. AutoDesk Photo Scene Editor for creating and editing the 3d model
3. Prefab for optimizing the 3d model
4. GIMP for modifying the model textures
5. Flex SDK for compiling the Flash movie

Now that I have the tools sorted out I will work on optimizing the workflow. I want to see if I can get it down to one hour from initial photo to final output. Expect to see many more of these in the near future.

Posted in PhotographyTagged photogrammetry, Photosynth comment on Turning Photos Into 3D Models

Four Weeks Later

2011-06-27 John Winkelman

So here I am, unemployed for a month. Just got word that earlier today, four more people were let go by my former employer. So that is five of us, pounding the pavement, chasing after the almighty dollar. I have had some luck; got some contract work early on, and meeting with some folks over the next couple of weeks. I still haven’t finished the paperwork for unemployment; psychologically, it feels like that would be acknowledging something I don’t quite want to acknowledge yet.

In my free time I have been reading a lot, and spending more time with my girlfriend, and taking care of things around the house. My days have been surprisingly full, actually, and it makes me wonder how I ever managed while I was working 45-60 hours a week. In the last ten days I think I have got a full eight hours of sleep at least three times. Last time I did that was, umm…college, I think, when sleeping in until 1 in the afternoon on a Tuesday was a point of pride.

The one serious project I have completed so far has been to move the website for From the Heart Yoga over to Drupal Gardens. That’s right; the CMS which caused me such grief over the past year is now my go-to solution for almost any standard website I might be called upon to build. I actually learned a few interesting technical things, which will be the subject of upcoming blog posts of the “I had to figure this out for myself; here are my notes so you don’t have to” type.

Other than the lack of health insurance, I would/could comfortably do this for a long time. Except…

Except…

There are a lot of other people out there who are also unemployed, or under-employed, and who do not have the prospects I do, and to whom I feel obligated. I have a lot of friends who are hurting right now, and, if I can’t actually get them back on their feet, I feel that I should get myself back up and running so that I am in a better position to help them if the need should arise. What kind of friend would I be if I have the opportunity to help someone else, and deliberately put myself in a position where I can’t?

Yeah, having time to think has definitely broadened my horizons.

Posted in Life comment on Four Weeks Later

My First Photosynth

2011-05-28 John Winkelman

If you don’t see anything cool above this sentence, you probably need to install the Silverlight plugin.

If you still can’t see anything, try viewing the synth directly at my page on Photosynth.net

Got it? Good.

What you see above is a “Synth” of the fish ladder on the Grand River, just north of downtown Grand Rapids, Michigan. I created it using Photosynth, a piece of software created by the brilliant folks at the University of Washington and Microsoft.

In a nutshell, here is how it works: Find an interesting object. This could be a building, a car, the space shuttle, someone sitting still, or anything else which is not moving. Take lots and lots of photos of that object, from many different angles and elevations, all around the object. You will probably want to take at least a dozen, and a few hundred is not unreasonable. Once you have your photos, import them into the Photosynth desktop client (Windows only, for the moment), and go make a sandwich. This part takes a while.

Once the tool is done synthesizing the photos, it will give you a link to your page on Photosynth.net where you can interact with your new synth. All the instructions for viewing are there on the page if you click the “?”. You can see the scene as a series of 2d slides, in 3d space, as a top view, or as a point cloud.

As you click around you will see that there are a couple of glitches in the viewing experience. As near as I can tell, this is because of two problems with using the fish ladder as the subject of a synth.

First, I couldn’t get photos from every angle, all the way around the structure. There were large degree arcs where I could only see part of one side of the sculpture, and others where I could only see the sculpture from up close, with no surroundings in the photos to provide context.

Second, the structure is hollow, and from many different angles the interior walls are visible. I think that the software became a little confused when trying to match up specific shapes on the photos, when it was not clear if I was inside the sculpture looking out through a doorway, or outside looking in. The fish ladder is uniform gray concrete, with many non-right-angle surface intersections. Photosynth does a good job of mapping points of interest onto a 3d space, but I think that shapes which are different at one level of zoom, but similar at another, cause it to take a “best guess”, which isn’t always right. Example: The corner of a doorway, viewed from straight ahead, is a 90 degree angle. Viewed from directly in front, looking up, it is closer to 45 or 60 degrees. Now find another part of the sculpture where two walls come together at 60 degrees. And make it all uniformly gray concrete.

On the other hand, if you like non-Euclidean experiences, maybe this isn’t a problem.

For a good overview of Photosynth in action, see this video:

Demo of Photosynth at TED

Posted in PhotographyTagged Photosynth comment on My First Photosynth

The Psychology of the Freshly Unemployed

2011-05-27 John Winkelman

Here it is, five days in. I picked up a couple of hours of contract work yesterday, which was nice. Trying to get my head into the game today. The constant rain makes me want to go back to bed. I have a couple of dozen projects which are half-completed, several of which I could get done by the end of the week. I have a few new skill sets I need to work on (mobile web, Android app development, AIR development, augmented reality), but I can feel myself beginning to succumb to option paralysis.

My instincts tell me I am still a full-time worker, and that I am home during the late morning hours means I am either on vacation or this is the weekend. This triggers my “I’ve done enough work this week” reflex, which makes it more difficult to want to spend time in front of the computer. Another oddity is that I am unemployed, but everyone in my peer group is working right now. I am out of synch with the greater part of my life.

Today I am cleaning up my house; clearing off surfaces and removing distractions. Every space can be put to use as a place to think, or meditate, or reflect. Or play. I have discovered that the TV show NUMB3RS is surprisingly inspiring, mostly because the obsessive-compulsive geek part of me can identify with Charlie Eppes.

I also applied for unemployment yesterday, which was the first work-related thing in the past week which has felt “real”. If I have the numbers figured correctly – and it’s a big “if” – unemployment should cover all of my expenses for the next few months, which means I will have time to learn some new skills and do some serious networking. Suddenly being a contractor/freelancer is a lot more appealing. Two years ago this would have been devastating. Now it is kind of invigorating.

Posted in Life comment on The Psychology of the Freshly Unemployed

My Toolkit

2011-05-25 John Winkelman

I spent my tax returns this year on a new laptop. Specifically, a 16″ Sony Vaio, with a 1.73 GHz Intel I7 processor, 4 gigs of ram, a 500GB hard drive, and a mobile video card with 1Gb of onboard RAM, pushing a display with 1920×1080 full HD resolution. My desktop PC, a stupendous bad-ass of a gaming/development rig, is about five years old. In fact, it was the first thing I bought when I started my recent ex-job. While still a fine machine, it is not so good for freelancing or contract work as I can’t take it with me to different job sites. Now that I am between jobs, it seems appropriate that I spend my suddenly available time setting up the new machine as a money-making tool. At worst, I hope to make enough money with it to pay for it.

The great thing about the type of development I do is that all of the tools I need are free. So here they are, roughly categorized:

General Web Development
Notepad++ – my favorite text editor. Been using it for about six years, since Bock turned me on to it.
I.E. Tester – Tool which allows users to test their web sites in multiple versions of Internet Explorer. You can see how your work looks in seven(!) different versions of IE, if you choose.
FileZilla – easy-to-use FTP client
XAMPP – one-click installer for an AMP (Apache, MySQL, PHP) stack.
Drupal Gardens – A web host which specializes in Drupal 7. Basic accounts are free, but full-featured, and make great test environments.

Flash
Adobe Flex SDK – open-source compiler for Flash and Flex projects
Adobe AIR SDK – Tool kit for developing AIR applications
Adobe Pixel Bender Toolkit – specialized tool for advanced image manipulation

Mobile
Eclipse – Java development environment
Android SDK – bundle of tools for developing and testing applications for Android phones
Appcelerator Titanium – Andy turned me on to this one; it’s a tool kit for developing mobile and desktop applications.

Artistic and Media
Miro Video Converter – easily converts video files between multiple different formats. Especially useful for web-based video.
Audacity Audio Editor – great tool for editing and manipulating sound files
Picasa – Photo storage, cataloging, and editing
GIMP – open-source Graphics program, in the same family as Photoshop
Blender – 3d model creation, animation, and exporting
Processing – Java-based tool for creating abstract art. Can also be used to create Java applications
Inform 7 – The Inform system is used to create text adventure games (think Zork, or Leather Goddesses from Phobos) using natural language both to create the games and play them.
Photosynth – awesome tool which can stitch photographs together into a 3d model or scene.
Google Earth Google’s virtual model of the Earth
Flickr – Where I keep all of my photos. 16,000 and increasing every day.

Writing, Management, Documentation
Google Docs – If you have a gmail account, you get this for free. Word processing, spreadsheet, and much more.
Open Office – Free, open-source alternative to Microsoft Office.

I will update this list as I discover new or alternate tools.

Posted in Life comment on My Toolkit

Posts navigation

Older posts
Newer posts

Personal website of
John Winkelman

John Winkelman in closeup

Archives

Categories

Posts By Month

August 2025
S M T W T F S
 12
3456789
10111213141516
17181920212223
24252627282930
31  
« Jul    

Links of Note

Reading, Writing
Tor.com
Locus Online
The Believer
File 770
IWSG

Watching, Listening
Writing Excuses Podcast
Our Opinions Are Correct
The Naropa Poetics Audio Archive

News, Politics, Economics
Naked Capitalism
Crooked Timber

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

© 2025 Ecce Signum

Proudly powered by WordPress | Theme: x-blog by wpthemespace.com