Good news everyone! Wiresq is now public. "Go grab it at the app store":http://itunes.apple.com/us/app/wiresq/id399289681?mt=8.
I also made this spiffy video for it last night.
Obviously, at this point, please share as much as possible. Thanks much everyone!
Hot dang, I am off to the races. That last feature ended up being about 10 more features, some of which were actually difficult. I also discovered that even though I thought I had done enough testing on the 3g, the audio dropouts were beyond stupid. Luckily I had left a bunch of pointless processing in the audio pipeline, so I was able to get a huge performance jump by just deleting about 20 lines of code. I should always do that.
Also it turns out that I hate doing marketing materials more than anything else in the world. I wish that just blogging about it would solve my problems, but then only 10 people in the world would hear about it. I did manage to write up an ok blurb, and do an ok video, but I really need to redo the video, and include some humans in it.
The other thing that I am going to do is just put off approx. a 200 hours of additional features to version 2. I started in on the top layer of them, but I just couldn't justify missing the date to get them in. They will be good though, this app has so many possibilities that it makes my head spin.
Speaking of the possibilities, I should talk a bit about why I made this. Some people are aware of the 3.3.1 restriction for iphone apps, the so called war on turing completeness. I am well in the camp of this being a really sad restriction, not because I particularly have a great interest in scripting languages (I do), but more because I believe that there are a ton of opportunities to teach programming literacy, and I think the iphone and ipad are one great place. My first introduction to programming was qbasic, but I never created an actual piece of software until I learned "max/msp":http://cycling74.com/products/maxmspjitter/. I also look at things like "scratch":http://scratch.mit.edu/ and see something that would be perfect to port to the iphone.
However, I really want to test the waters of what is allowed in terms of turing completeness. I know that this particular app might be rejected, but I think it would be something I could argue. Yes, this is turing complete, but saying that you are acessing any of apples APIs in any ways would be absurd. It would also be absurd to say that this is a programming language, unless you really want to stretch the definition. The closest thing this could be compared to would be a circuit simulator, but even those generally give you slightly higer level abstractions.
I am starting to get concerned about making this post, but ah well, fast and loose!
Oh, I know that asking people not to share a link on the internet is absurd, but if you could keep this link to yourself, that would be awesome: "wiresq video and helpfiles":http://heavyephemera.com/wiresq/index.html. I am planning on making a better video prior to release, and that is the one that I want to be passed around to everyone. Thanks much to all 10 of you that read my blog!
Scratch that, share at will! "wiresq video and helpfiles":http://heavyephemera.com/wiresq/index.html.
I think I am closing in on this project. I sent it out to some super alpha testers last time I posted, and I didn't really get too much feedback that I was looking for. I am pretty sure that the project has exited the normal set of sound art projects that I was aiming for, and is now a super edge case program. No matter, I am still excited to play with it myself.
I feel like I am closing in on the final features, I have one more big one, and then it is all just little tweaks to make the system behave correctly. I just finished the note setting feature tonight, and I was starting to feel like everything was a bit pointless. Luckily I still had some fun features to implement, like the trigger display. This was one of those features that brings the juice (to steal a term from "the experimental gameplay project":http://www.gamasutra.com/features/20051026/gabler_01.shtml). I just added it and my desire to show off the software went through the roof. I need to focus more on those types of things.
The last feature that I want to add is having multiple triggers for each of the synths, so that you have have more than 8 notes triggering per patch, maybe even be able to make (god forbid) songs in it. The reason that I was putting it off was because it involves making arrays that grow in c++, and this is one of the topics that scares me. I managed to pull it off in about 10 mins for the trigger displays though, so apparently it isn't that bad. After that one, everything is just tweaking, making sure the software is not impossible to run and the like. Basically it is making sure that touches go to the right views, and not to the wrong. Right now it is kinda painful to paint the circuits, you keep splattering paint all over, and the "undo" that occurs right before scroll is a pain in the butt as well.
Also, WTF apple, requiring me to FAX you a change of address form? How about I get a page to ride his horse to you instead?
Ah what a five days. I last claimed that I had added some features, particularly the ability to serialize out the state of the application, but unfortunately, I had just copied some old working code from another project, without checking the api, or even checking to make sure my feature worked. I burned about 4 hours tracking down the api change. It turned out that not only did I need to serialize my data, but I needed to tell the disk to save it. The fun part was that the system was calling this "syncronize" function by itself occasionally, so sometimes it would work, but most of the time it wouldn't. Bugs that require precise timing to trigger are the worst.
Once I got this working, I cleared out a few more bugs that were things that I had added rather than me vs. my frameworks type bugs. Those went really quick, and helped out a bunch with the interaction. I quickly fell into another big bug when I hooked up my slow iphone (I had been testing on a 4g), and discovered that the app was completely unusably slow. It took me another few hours to realize that I needed to switch to release mode to get acceptable performance on the 3g. I had discovered this fact in the past, but it had been a while, and sometimes it takes a few hours to rediscover this fact. These types of memory failures remind me that while I am an ok programmer, I am a pretty horrible engineer. Maybe another 5 years doing this stuff will make me ok.
Finally, towards the end of the week, I started adding features that pushed the app from "simple prototype" into "releasable". Basically this means that I added speed controls, so that not all your tunes will run at 120 bpm, and I added slidey transitions between all the screens. I sent the app out to some testers as well, and realized that it will probably be pretty important to have either a nicer startup screen, or include some demo patches for people to start with, because it is pretty obtuse when it first opens. Unfortunately adding those will require me to write another 3 screens or so. Arrgh, the last 10% is actually the last 90% and all that. Sending out the beta test did get me to start on the helpfile though. That helped with building excitement for the app I think, and it required me to work out a design for the icon and splash screen, which will help with marketing.
I have been working on a project for the iphone for about a month on and off that is a cellular automata plus a synthesizer. I know this has been done about a million times before, but all the existing ones are the Game of Life, and I am interested in a slightly different CA. POV at "Ludum Dare":http://www.ludumdare.com/ just recently posted a "challenge to get a game out in the month of october":http://www.ludumdare.com/compo/2010/09/22/povs-challenge-make-a-game-sell-1-copy/, and have at least one sale on it, and I decided to take him up on it. I already have two posts on the topic over at the ludum dare blog ("1":http://www.ludumdare.com/compo/2010/09/24/kicking-it-off/, "2":http://www.ludumdare.com/compo/2010/09/25/night-one-of-development/), but I decided to move my project blogging over here so I wouldn't jam everything up too much with incremental project updates.
Yesterday I made a huge amount of progress, but I also excized a bunch of features. The main thing that I progressed on was adding in a saving system, so now your cells are properly generated when you close and reopen the software. I had built a nice system for copying between the c arrays that I use while the software is running and objective c arrays that are really easy to serialize when I was working on "mujik":http://www.luckyframe.co.uk/mujik, and I just needed to revive it for this project. Sometimes it is as simple as remember where your code was that you wanted to use. Also on mujik I had build a main controller that handled which screens were currently rendering and where to send the events. I am going to need to rebuild that system for this because it is desperately in need of it.
The first thing I cut out was zooming on the main cell world. It is just too much of a pain to get it working, and is something that I would like to get back to when I have time to work on my reimplementation of uiscrollview. If anyone has any advice, or even better, source code that I can look at, it would be greatly appreciated. The second thing I excised is the super awesome synthesizer. I am just going to cut it back to a simple subtractive synth, because I have the code nearby, and I don't feel like diving into the full on rebuild my synth engine nonsense this weekend. I am going to try to model the controls after the Juno 6, but I am going to also cut way back on them because I don't want to write another scrolling view.
One thing that is working out pretty nice is pixeling as I go along. I am using a combination of photoshop and "opacity":likethought.com/opacity/. I bought opacity at the beginning of this project because I thought that it would be really nice to just drop the code that it produces right into my views. I eventually switched to using openframeworks, but the system of factories and variables that it has makes it really easy to cut up the graphics and output them to slices I can use as sprites. I am not really happy with its performance, it seems to suck ram and die about once every four hours, but that may have been the screen capping software that I was using as well. Also doing logo design in it is kinda tricky because it is half vector, half pixel, but I think bringing in an existing logo from illustrator or something like that could be really good.
Speaking of timelapse, here is the first night and day of working on it. The software was crashing a bunch, so there are a few missing hours. Sorry about that. You can get some glimpses of the software in there though.
Even though I am aiming to have the bulk of the work done this weekend, there are still a bunch of things in here that I am noticing will need a second pass through. The scrolling / zooming view is a big one, another big one is web sharing of your layouts. Also the way that synths are linked to the world I don't really like at all, it needs better graphics to help explain the linkages. So much to do this month, so little time. Thanks a bunch POV!