More Spring Things

Lots has been happening the last few weeks, and things are coming to fruition. Here are some of them.

One big piece of news is the my project at work has shipped our first working release of our software to a customer. Almost a year of effort went into it and everyone stopped arguing and pulled together as a team for the final haul, which was good to see. Of course they started up again as soon as we began planning the next cycle of work, but the group feels less dysfunctional. And, with this major milestone met I feel a bit more relaxed, at least for time being. Back to straight-up coding again, as opposed to all this config, build and deploy stuff.

I got my old Mustang to a mechanic earlier this week. Last fall I had a problem when I stepped on the gas and engine dropped in power before it accelerated. It had me kind of worried, but it turned out to be a problem with the vacuum pump in the carburetor that was petty easy to fix. My garage has a new chief mechanic who is enthusiastic about working on a classic car. He gave it a good looking over and everything is sound. So the car is back in action, purring like a kitten and roaring like a lion. Gonna give it the first real drive of the season out on the highway this weekend if it doesn’t rain. The only other thing I want to do with mechanically it is to maybe get new shocks. I think this will be year that I’ll finally get it painted, so I’m going to start shopping around for body shops. I’ll let you know how that goes.

I’ve also been making a lot of progress on origami, part of which is explained in the last post, and on music. More on that later.

Change in the Weather

Rewinding a bit, St. Patty’s day was sort of an unusual day. We’d had a lot of stormy weather, and it was really cold that morning, and I had to get up early for physical therapy. The road there was still closed from the big storm, so I had to take a different route. By the time I was on my back home, it was already warming up outside and turning into the first really nice warm spring day. I’d been waiting for a while for my back to start feeling better, and that turned out to be the day. Such a relief.

My train was late, and when the door opened it smelled like booze. Partiers headed into the city to enjoy the parade. I was probably the only one in the car going to work. Some guy on the train noticed me folding a color-change stellated octahedron that I’ve been working on. “Dude, is that origami? Cool! Did you get that from youTube?” The parade goes right thru my neighborhood, and it’s like that the whole day, drinking and partying, like it’s Mardi Gras or Halloween or 1999. At least I was able to cross 5th Ave. without any altercations with the police this time.

At work it was all about deploying the first release candidate of our project to the Q server. This is a major milestone on what has been a really long strange trip. I was mired in config files all day, or as I’ve come to call it, configgy pudding. Our company has a mandate to try and do more thru configuration and less thru code. But it’s already becoming hard to manage, and we haven’t even deployed to live. So I need to write a config management tool so we can have instant congfiggy pudding. Anyway, we got it working, and deployed to QA, where we’re already finding bugs.

After work was a corporate happy hour function at a hotel bar which was smack in between two Irish pubs. I made friends with a management consultant who was part of a team engaged by our overlords to hang around and analyze out office’s dysfunction and presumably figure out who to fire. She seemed pretty smart and interesting/weird with a possible MIT vibe. She told me, “You don’t look old enough to have been writing software in the 90’s.” Hell, I was writing software in the 70’s. Hopefully this means I won’t be the one who gets sacked.

The mild weather continued and by the weekend we were able to get started on the spring yardwork and enjoy the season’s first barbecue. I was really tempted to get on my rollerblades or see if I could start up my Mustang after a winter of sitting in the garage, but neither one seemed like a wise idea given the condition of my back. After the weekend the weather reverted to a more typical state of dreary cold and rain, which is pretty much how it’s been for the past week. I’ve gotten a bunch of new exercises from my therapist, and have developed a new workout routine to incorporate those along with most of the stuff from my old workout. I’ve been able to bring back most of the exercises now, and am back up to 70 percent of the weight, and some of them still have limited mobility. I did go ice skating that past Saturday with my kids, and did fine, as my back continues to improve.

The kids are going thru a Beatles phase right now, which is fun because they’re one of my all-time favorite bands. It started back in January when we were watching Anthology. Then Jeannie found the DVD’s for A Hard Day’s Night, and Magical Mystery Tour on sale. (Yes MMT is as bad as everyone says. Three or four excellent music videos and an hour of filler showing people riding a bus.) At first the kids were into all the early boy-band pop stuff like “She Loves You” and “Please Please Me”. Now they progressed to the weird John songs like “Strawberry Fields Forever”, “Lucy In The Sky With Diamonds” and “I Am the Walrus”. Michelle learned how to play “All Together Now” on the ukulele.

Foldinator 2 Build 3

Development of Foldinator2 continues. You can see the third prototype here:

http://zingman.com/foldinator2/foldinator2.html

Earlier prototypes is archived here:

http://zingman.com/foldinator2/old_versions/foldinator2_build02/
foldinator2.html

http://zingman.com/foldinator2/old_versions/foldinator2_build01/
foldinator2.html

The main feature for this time around is that I am now generating the paper procedurally using the drawing API. This is core to the whole application, and everything going forward will be built on more sophisticated instructions to the drawing algorithm. The paper is initialized only after the user loads a model. The paper gets its initial state (white or colored side up) from the OrigamiXML for the model. I’ve defined a set of constants for the various lines weights and colors that the rendering will need. For the next build I am going to set the paper’s initial rotation as well.

I’ve also begun putting in controls to toggle the enabled states of the various buttons and to allow the user to switch between View and Edit modes. This will be more fully fleshed out in the next build.

Since it is still fairly early in the development cycle, even simple features require a fair amount of new behind-the-scenes structure to be built. For this build I extended the event framework to handle callback events. I use this in the app initialization sequence when loading the list of OrigamiXML files, and when a file is loaded to trigger the Paper initialization. I also created a class to hold application constants outside of the drawing API styles. These include definitions for steps, actions, folds and their properties and parameters. This will come into play as the folding code develops.

E is for Elephant

Since I got back from my trip I’ve been meaning to get another build out on my Foldinator software. It’s very close, I swear. But fate has conspired. My work situation is, um, interesting again. The VP of my new group is leaving the company at the end of the year to start up a startup, which puts my team somewhat out in the woods again. Meanwhile we are aligning like battleships amid icebergs with two other platform projects and one brand business unit to bring a whole slew of web sites online on our technology stack in the new year. Crunch time is coming as we all figure out the missing pieces we need to go live. I’ve been spending most of my work days doing planning lately, and trying to jam in some coding in the spaces between meetings. So it’s been hard to sink my mind into another codebase.

The other thing is I’ve been working on a new origami sculpture which I want to have done by Thanksgiving. I came up with the idea right after I got home from PCOC and have folded a few tests out of foil, to the point where I have it refined enough to give it a go from nice paper. These advanced models take a while to work out.

To take your mind off your troubles, here’s a link to an article about the OUSA Holiday Tree in the American Museum of Natural History, featuring an alphabet of very nice models, including one by yours truly.

Another Site Upgrade

I’ve completed step two of my ongoing site upgrade. In this round I defined styles css files and added div tags to the pages with names classes according to the function of a block on the page. The main change you will see on pages in the site is that the body is a fixed width. The styles largely duplicate the style info in the pages. Going forward I can now change the style sheet definition and have the appearance of all the pages in a section change without having to go in and update each page. I’ve also refactored a few more blocks into php modules, notably the section menu for the origami pages. So things are getting more modular and dynamic, even if only one step at a time.

Other than that, things are pretty quiet these days. Continuing work on a bunch of projects, but nothing finished yet. It’s back to school time, so everyone at home is really focused and there’s a lot less free time. The weather has been really pleasant and mild this September. The kids have been getting into watching Star Wars the last week or two. Jeannie insisted we watch them in the order they were made, which was a good call. I still like the original trilogy from the 70’s but when we watched Phantom Menace it was just as bad I remembered. Afterward I had the song American Pie running thru my head and it took me a while to remember it was the basis of the Weird Al song The Saga Begins. I played that for the kids and now they are all getting into Weird Al too.

Foldinator 2 Build 2

Development of Foldinator2 continues. You can see the second prototype here:

http://zingman.com/foldinator2/foldinator2.html

Meanwhile the first prototype is archived here:

http://zingman.com/foldinator2/old_versions/foldinator2_build01/foldinator2.html

It still doesn’t fold paper, but it’s starting to do some interesting things. You can click on the “Load” button and see a list of models, encoded as OrigamiXML files. Select one and open it. You can see the UI update display the model name and author, and the text annotation for the first step. You can use the shuttle controls in the lower right to move forward and backward thru the steps, and jump to the beginning or end of the model.

A bunch of stuff is going on behind the scenes in support of this. I’ve implemented a file loader for the xml file that contains the list of models and their file names, as well as for the models themselves. I’ve create a hierarchy of classes to represent the data. The first of these is OrigamiModel, which contains metadata about the model, such as the title and author, and holds references to two other objects, OrigamiPaper and an ArrayCollection of steps. OrigamiPaper has properties for the papers proportions, color and starting orientation. The steps are of type OrigamiStep. This class contains properties for the steps action, annotation, and an ArrayCollection of creases. OrigamiCrease encapsulates the data to represent a crease, including properties such as the end coordinates, angle, parity swing, layers, etc. These last two classes will likely develop more properties and functionality as I build the folding engine.

I need to do a bit of bulletproofing around the initialization, and then it’s on to the main event, namely drawing and animating the folding paper. To begin with I’ll just be drawing a square procedurally and in accordance with the initial state specified in origamiPaper. Then I’ll be analyzing the geometry of the crease in the first step and breaking the square into appropriate polygons with a common edge, and rendering that. At first I’m going to concentrate on non-folding operations, namely Flip and Rotate the paper. Then it’s on to simple folds: Valley Fold, Mountain Fold, and Fold/Unfold. It’ll be a fair amount of work to get this far. Hopefully I’ll be able to apply this recursively for the second and subsequent steps, but more than likely there’ll be some gotcha.

Deep Summer

Well it’s the second half of the summer now, and we’re getting our first real heat wave. It’s been in the 90’s since last week, with no rain for a change, and no end in sight. We’re getting peppers and tomatoes from our garden daily now. And even though we’ve been busy, we’ve had some time to enjoy summer activities. We took the kids to Playland last Friday evening and the kids enjoyed the rides and we saw fireworks. Michelle is exactly 4 feet tall, which was the cutoff for a lot of rides, and it some of the ride operators were being extra picky. They wouldn’t let her on the big rollercoaster (too short), and then later they almost wouldn’t let her on some the kiddie rides (too tall)! They wouldn’t let me on the bumper cars for being too tall. The park has a bunch of old, classic rides from the 1920’s. The carousel had a genuine calliope, sort of a player piano crossed with a pipe organ and robot percussion section, that was fascinating to watch and listen to.

We went to beach on Sunday, which was great, except for on the ride home the car started making trouble, one of the brakes was overheating and seizing up. It’s in the shop now, but the car has just about 100,000 miles on it, so we’re starting to think about how long we want to keep it and keep repairing it. There are a lot of things I like about the Jeep, and over all it’s in pretty good shape, so it’s tempting to just keep it running. On the other hand, that’s the strategy we’re following with Jeannie’s car, so we don’t want to be in the situation where we need to replace both cars at the same time. And of course to replace it would be a whole research project to figure out what kind of vehicle to replace it with, and it’s gonna take a whole lot of precious time to do it right. Since I’m so tall, most of the cars our there are not good for me to drive, and even a lot of larger SUV’s are not well designed for tall people. Right now is not a good time for it’s since we have a camping trip coming up this weekend, and another road trip a couple weeks after that. Still, I think we better start looking into it so we’re prepared.

I’ve been making progress on a bunch of side projects. Luckily we’ve had no major home repairs or other projects of necessity for a little while, and things are at an even keel for the time being with my job, so I’ve been doing fun stuff. I’ve basically taken the summer off from working on origami and my book, since I was jamming on it really hard back in May and June. But it’s getting close to the top of the list as other things get done. I dusted off the Foldinator and began development of version 2.0. I worked out a format for Origami XML, and posted a first build. The second build will be along in a few weeks. I stated redoing my web site in PHP to support dynamic pages, and have implemented the first set of scripts. Still on the todo list is take pictures of all my new 2009 origami models, which will happen sometime this fall.

I’ve been making great progress with music. I bought a guitar a few weeks ago, and have been playing it enough that I’m starting to get somewhere. I’m think of writing a guitar based song even, something in the approximate style of Greg Lake. That will be on a future project, as this one is nearing the end. My friend Erik has agreed and to help me mix and master my record, which is great news. And I finished a complete song in record time in July. Now I’m working on the ninth and final song for my record, with the help of my friend John. More on that in a future post.

Zingman Site Upgrade

Now that fears over the Y2K bug have pretty much calmed down I figured it would be a good time to upgrade my web site to use some good ol’ fashion 21st century web technology. I’ve begun adding dynamic elements to my pages using PHP. The high-level goal is to make the site more template driven so I can update content easily and have configurable views. For example, I’d like to be able generate pages in my origami section that display the models in a particular subject or from a particular year on-the-fly. Toward that end, as a proof-of-concept I designed a drop-in header and footer that can be passed args for Title and Section. Many thanks to Jeannie for helping with creating these templates.

So far I’ve implemented the templates in the “back half” of my site – the less visited sections Multimedia, Movies, Art, and Spew. Now that I know it’s working, I’ll be getting around to the rest of the site in the next few days. In the meanwhile, please alert me if you come across any broken links while the transition is on. The payoff is, going forward, if I want to for example add a new section, I can just update the footer file with the new link rather than having to go in and edit every single page. Now the real fun begins. Soon I will begin going thru my sub-pages to create more sophisticated reusable content blocks and begin serving more and more parts of the site dynamically.

Rollercoaster of Cheese

A while back I thought it would be a fun idea to teach the girls how to make their own cartoons using Flash. It was a cool little project. It’s been sitting around almost done for a long while, and we finally got the motivation to finish it off. I had introduced the girls to the drawing tools before. This time once they’d made a bunch of drawings, we brainstormed a story line. We did a little voice recoding session and edited together a soundtrack to serve as the backbone of the cartoon. I taught the girls how to do motion tween animation synched to the sound. Although Michelle got bored with this part Lizzy did just fine. Here is final movie, and an alternate take.

I had a bit of trouble with the movie once I uploaded it and viewed in the browser. On some computers it the animation and the sound were getting out of sync, spoiling the effect. It appears to play correctly in the browser with the Flash Player 10 plugin, so if you don’t have it, I wrote a check into the page to prompt you to upgrade.

Foldinator 2 – First Build

Development of Foldinator2 is off to a good start. You can see the first prototype here:

http://zingman.com/foldinator2/foldinator2.html

Admittedly it doesn’t do much yet. So far it’s mostly framework and boilerplate MVC code. Not so glamorous, but important, like pouring the concrete for the foundation of the house. The data model class is defined and has a few important properties, including a reference to an object paper, which is currently just a square drawn to the screen, but will be the heart and soul of the application. The app presents a starting UI, and all the buttons are mapped thru events to commands. There may be more views and interface elements later, but this is enough to get going; anything new will fit into the established structure. Also I put a text output console, to make debugging easier going forward.

I have one more milestone to go before I get into actual folding in simulation. First implement the guts of Load button, read in an XML file and parse it, and assign the info and the steps to the (data) model. Next is to step thru the model using the shuttle controls. At first this will be text–only. The app will display the step number and the annotation for the current step. Once this is done, then it will be time to apply the fold specifications to the paper for each step.

Meanwhile, my brother Martin has begun work on an origami application of his own, and post a demo here:

http://www.victoryhearts.com/origamagiro/

His working title for it is “origamagiro”, a nice palindrome, but then he looked up the meaning of “giro” in Japanese here:

http://jisho.org/words?jap=giro&eng=&dict=edict

Well “giro” could mean battle, argument, controversy, guillotine…. or brothel. Martin sez: “Interesting contextual possibilities! Maybe we need to find a person actually fluent in Japanese to ask!”

Martin’s approach is in many ways complimentary to mine. He’s developing in Silverlight, so the possibility of us sharing code is slim to none, but that’s ok cuz we can share ideas at a conceptual level, which may ultimately be far more fruitful. Second, while I’m working my way in and building the groundwork, he’s diving right in and confronting the hard conceptual problems of graphics, modeling an animation head on. So while my first demo has a bunch of nice looking buttons, his has a virtual piece of paper that the user can manipulate.

Watch this space for future developments.