On the Thinkful Slack channel last week, someone asked a seemingly simple question about functions inside another function’s arguments:
within a route like app.get(‘/test’, someFunction(), (req, res) => etc etc, is someFunction() called an inner function? Does anyone know the technical name for that?
They got a very good answer which I think was close to perfect:
inner is more a generic term, not specific to functions. e.g. you could refer to inner and outer scope
.get() is a higher order function because it takes one or more functions as a parameter
someFunction is often termed a “callback” because it’s a function that’s intended to be called at a later time
both someFunction and (req, res) => {} defined above are callback functions
They were right about the first part, that .get() was a higher order function.
They were right about the second part, that someFunction implies it can be called later.
They were even right about the final final part, where they called the anonymous inline ES6 “fat arrow” function(req, res) => {} a callback.
However, something kept nagging me about the difference between someFunction() in the question and someFunction in the final answer. Hidden in that lack of parentheses is a world of difference.
To elaborate, I offered the following comment to the channel, which sparked a conversation for further clarification. I reproduce it here in the hopes that it may help more programming students understand function semantics better.
For Cartoon Violence’s second studio album, the CDs are being produced on demand by Amazon.com. I modified my digital art designs to fit within the templates provided by Amazon and this is the physical result. The insert opens up to reveal advertisements for other albums and T-shirts on the inside.
This podcast website I built features a simple design which makes the podcast episodes front and center, with eye catching images and an easy play/pause button connected to the inline media player. I used WordPress and customized plugins to enable podcast episodes and contributor bios to be added by the producer. The site is set up as a multi-site network to facilitate the adding of additional podcasts with their own blog and podcast feeds.
This booklet for The Sincerelys’ debut CD was made in close cooperation with the lyricist and artist, Bernard McKenna. First, the lyrics were typeset to fit within a 20 page booklet. Then, the typeset lyrics were printed out and Bernard drew line drawings in the white space around the lyrics, using tracing paper over the printouts. After those were scanned, the line drawings were cleaned up and printed out on high quality paper. The line drawings on that paper were then colored by Bernard, scanned in one final time, and composited against ink marbling backgrounds we had made together and scanned separately. Finally, the lyrics font was changed from a standard system font to one which I made with Bernard, converting a sheet of his handwriting into a reusable font so that the hand written look could be achieved while still leveraging the previously typeset lyrics.
www.featuretrips.com
I wrote the front and back end of this web site for a client who wanted to create a matching service, pairing local experts with people seeking unique experiences in various cities. I developed a node.js app using mongodb with responsive design, user management, admin features, payment processor integration, SMS messaging gateway, subscription-based email notifications, and an email template system. Also included was a custom algorithm for matching users based on interests. For the front-end, I chose Bootstrap to facilitate a mobile-first design which could scale to a desktop size well.
This 16 page color booklet was made for the album Robots and Dinosaurs by my band Cartoon Violence. I did all the layout work and contributed about a third of the artwork. I assembled all the text in Adobe InDesign, then composited all the art assets into Photoshop layouts which were then imported back to InDesign for final rendering.
Download Tomato Trouble for iPad on the App Store today!
The iPhone version will be arriving shortly. If you are a Kickstarter backer and have not yet filled out your survey to tell us what name you want to appear in the app, or given us your address to send your poster or Geoff doll to, please check your spam folders for emails from wompistudios@gmail.com or v@victorb.net.
24-page storybook with original art based on a real handicapped dog
Responsibilities: App Development: UI design and programming, character animation, page layout and interactions, book framework code, iTunes Connect.
I was approached by a producer to build an interactive iPad storybook for kids, based on a story about a handicapped dog named Geoff who lives in Australia. This project received funding from a successful Kickstarter campaign. I completed the app with the assistance of a few contract programmers and animators after developing the base system of page interactions, animation pipeline, UI, and audio.
Touch-screen photo-booth sticker app with photo printing
Responsibilities: Application state machine, Unity scene setup, Custom NGUI components, State Machine control of UI, Multi-Touch Plugin and Driver interfaces, logging, WWW form submission.
While at Tribal Brands, I served as lead engineer on the PhotoCard project. Armed with a Mac Mini, a Logitech Webcam, and a 42″ Touch Screen HDTV, I helped build an app which lets the user take their photo, add and arrange stickers via multi-touch gestures, and send their photo to a local printer and/or an email address. This app has been deployed for multiple events, each time using custom UI and sticker graphics.
I know it’s been a while since my last update, and for that I apologize. I’d like to say I’ve been so busy putting new features into the app that I don’t have the time to write any updates. That’s partially true, in that I have been spending more time actually doing the work than talking about it. But, it’s not the whole picture. At the launch of the Kickstarter campaign, I was a little overly optimistic about our timeline. We’re not going to be too far behind, but there have been some unforeseen delays which have taken time away from both development and updating.
I have had a lot of help from a developer making a set of visual tools which handle the cross-device and cross-resolution sizing I need in order to support iPhone, iPad, iPhone 4S and iPad 3, as well as the upcoming iPhone 5. These tools were exactly what I needed, but he is developing them all by himself, and they were in an early beta when I first started using them. There were some issues with stability, file compatibility, and feature readiness, which have since been fixed but incurred delays. The good news is that many features were changed or added on my suggestion, including user interface features to save me time and make my workflow for this app more efficient. As time and code permit, he may add even more features which will help bring this project to completion sooner.
But, even after finding the tools to do the job, managing all the content is still a big task. Two animators were hired out of the Kickstarter funds and they powered through the animation list. There’s only a small handful of animations left now, and all the main character idle poses are done and being arranged in the app. New page layouts are being finished at a steady pace now, with final animations and the beginnings of physics-based movement. In this video recorded a few days ago, you can see the first five pages mostly complete, save for fine tuning and interactivity.
This video also shows more progress, including the fact that now I have a tool that allows me to record audio and video simultaneously from the iPad simulator, to actually show what the app is like to see and hear, instead of just faking it by overlaying mute videos with the book’s soundtrack (next time maybe I’ll figure out how to avoid having it also record from my microphone so the narration is more audible and you don’t hear roommates closing doors in the background 😆 ).
Even though we didn’t meet our stretch goals for hiring additional programmers, I found someone on Craigslist willing to work in exchange for the experience. Already he’s enabled volume control (shown in the video) and a Table of Contents (being fine-tuned now). With his help, I can focus on integrating the rest of the content while he upgrades the user interface and gets the app ready for prime time.
There has been a lot of technical progress in the past few weeks; solidifying our tools and practices, fixing old bugs, and getting the framework ready for when all the content is done. Throughout the rest of the month I’m going to be working day and night to get this app finished. I hope that by this time next month we’re waiting for Apple’s approval so we can show this book off in the app store.
Don’t expect any more long updates like this unless some really interesting stories turn up. From this point forward, it should be pretty much just a matter of churning through the rest of the work, rather than solving technical problems and having to re-structure and adapt. And, there may not be many more videos either. We’re going to have to save some of the book’s content as a surprise for when you finally have it in your hands.
We couldn’t have gotten this far without the money and support from Kickstarter. Without being able to afford new hardware, I’d still be recording videos at three frames per second, waiting endlessly for long builds or to open large Photoshop files. I’d still be doing animations right now instead of moving on to layouts and user interface, and during all of it I would have to worry about random computer crashes. But, because of Kickstarter, I’ve been able to outsource enough animation to focus on code, and make sure I have the resources to develop and test without pulling what’s left of my hair out.
So, thanks once again for being a part of this journey. It hasn’t been the shortest or easiest, but it will be worth it when we have a platform for producing beautifully illustrated, top-quality, hand-made, interactive, inclusive, progressive, and just darn cute book apps.
Sincerely,
Victor B Andersen
On behalf of the Wompi Studios/Tomato Trouble crew.
My apologies for the lack of updates since the Kickstarter campaign, but since it’s success, Tomato Trouble is now in Full Scale Production. The vast majority of the art has been sized and exported, and an assistant animator has been brought on to handle the final character animations while I arrange the pages and finish the final code.
I have been working with a new set of tools, currently in beta but about to release a final version on the Mac App Store. The tools are SpriteHelper and LevelHelper, which make a great pair for constructing cross-platform iPhone and iPad content with animations, physics, and interactivity.
When the Kickstarter project launched, I was doing all the sprite arrangement and animation manually. There didn’t exist a good set of tools to make this process easy. I was dreading having to do everything, including all the scaling and positioning, by hand.
I had heard of LevelHelper before, but it did not yet support the iPad retina screen which is a must for this project. The art looks so great, it needs to be in the highest resolution that the device can support. Right after the Kickstarter campaign was completed, the software’s author began an open beta for the new version which does support the retina screen on the new iPad.
Since then I have been working with him to test his tools, and already I have seen a huge performance and usability increase. The tools are now in place to churn out the rest of the pages at a fast pace while the animations roll in. And with these new tools, I only have to arrange each page once for all four device resolutions — iPhone, iPhone4S, iPad, and iPad3.
There are some minor layout and interface issues to fix, but this video shows all the final animation and transition components proven and ready to be finalized. Shortly, animations and interactivity will be stitched in to the constructed pages and then final app testing will begin. In the next few weeks we will be play-testing the book with groups of school children, then doing performance testing and bug fixing before the final send-off to Apple.
It’s been a long process but we’re finally on the home stretch. More progress videos will be coming soon as animations and interactivity begin to replace the static placeholder images.
There are now physical postcards to distribute in order to promote the project and draw more backers. If you are interested in helping to distribute these postcards, please click here to e-mail me.
Last year, a friend’s cousin came to me with an adorable story about a dog who just happened to have special needs, and just happened to have 2 gay owners (which I hear is quite common for dogs these days). He needed a developer to turn the 2D illustrations into an interactive childrens’ book for iPad. What I loved about the story was that it wasn’t about either disability or sexuality, they were just facts that made up the background for the characters. It makes it real; to be a thing but not be defined by it.
Some of you may know I have a bit of a soft spot for gay rights. I’m not gay myself, but I’ve had gay friends all my life, and I was raised in a family where it was important that you stand up for your ideals. I think there should be no reason to treat anybody different, in behavior or in law, simply because of who they choose to love. When I see an opportunity to do a project which makes that ideal more prevalent in our world, I try to help out.
The project had no budget, but I liked the story enough to want to be a part of it. For the past nine months I’ve devoted a good chunk of my spare time to designing and writing a framework for producing interactive books on the iPad. I have chosen cocos2d as my graphics engine to bring the beautiful art to life, and I have created a data-driven book reader with synchronized narration and highlighted text.
The book is readable from front to back, but the pages are static and there are no interactive elements to touch and play with. Furthermore, they are all low-resolution first-draft images produced by the artist. The next step is to add life to each page, updating them with final art from Photoshop, and isolating layers which need to move or animate. After that, I will be making each page its own little world, with idle and character animations, moving trees, clouds, and animals, sound cues, interactive object behaviors, and more.
In addition to the animation and behavior programming I still have to do, like any software project, there will also be feature polish, debugging, performance optimization, usability, testing, and publishing phases which I will have to go through. Facing shortages of time, money, and hardware, it’s going to be difficult to finish this project in a timely fashion. Since it’s the kind of app I think there should be more of, I really do want to get it done, it’s just a non-trivial task.
So, with the help of the project producer Jeff Wannberg of Wompi Studios, I have made a Kickstarter campaign to help get this project finished. In addition to compensating me for the time I have spent, and will be spending to make this project a reality (being the coder, animator, and co-director), the money raised by this campaign will help to fund:
the new computers and iPads we really need to kick our development into high gear
software and tools which will make our jobs easier, so we can make apps faster
additional technical artists, animators, and developers to help bring this first app to market quicker
pre-production on sequels and other apps in a similar spirit
Although the Kickstarter campaign goal is set at $5,500, that is really a small amount compared to the costs of what we want to achieve. We could easily spend that much on hardware and software alone, and then still have only a single developer working in his spare time. Funding this project in a big way means that I will be able to devote my full attention to the project and also bring other people on board to help get it done faster (and hopefully better) than I could have done myself.
I will continue to post development updates here and on the Kickstarter campaign. If you are more technical or curious, you may prefer the updates here on my blog, as I plan to make them more detailed. What I am likely to post on the Kickstarter page as updates would be more related to the campaign or showing the completed version of something. Here, you are more likely to learn what it’s like to actually have to plan and develop a whole app from start to finish.
If you haven’t seen it yet, please watch the Kickstarter video and share it with your friends. If you are here from the campaign, then thank you so much for visiting, sharing, or donating!
From 2011 to 2014, I lived in a house in San Francisco where the landlord had built a sound proof room as a rear addition. While living there, my roommates and I transformed the room into a functional practice space and recording studio, renting it out by the hour and becoming the #4 studio on Yelp in San Francisco. The landlord moved back in 2014, so we had to shut down operations, but the web site remains archived at OceanBeachStudio.com.
I built this website for the home business I used to operate from the sound-proof music room behind my house in San Francisco. Features include:
Clear navigation indicating the services and information central to the business
Integrated Google calendar to show when the studio is booked
Custom contact form to book studio time or get a quote for other services
Facebook integration in sidebar and like buttons on pages
Blog roll featuring events at the studio or involving studio staff/bands
A redesign included clearer contact information and a photo slideshow in the header against a sunset photo background which was also used on print postcards for advertising.
Responsibilities: Training/Mentoring, Gameplay Programming: Pet Socials
The last of 9 Sims games I helped make at EA/Maxis was The Sims 3 Pets for Nintendo 3DS. As an expert in the proprietary language used to write gameplay behavior in The Sims games, I was brought back for the final project to use that technology. EA had just acquired a company called Playfish in Salt Lake City, Utah, and had assigned a team of their engineers to do the bulk of the work. I spent some time in Utah training and supporting the staff there before returning to Redwood City, CA to complete the game.
In the future, this site will exist as a blog and showcase for my many projects. For now, it mostly consists of links to other places. You can view my Resume, Video Game Portfolio, and find out about a few of my musical endeavors. Navigate using the links above, and check back later for more insightful content.
My long term friend Stephen Cocconi, who does personal consulting, teaching, and channeling, asked me to transform his old static HTML site into something dynamic that he could maintain. I interpreted his existing web site design in a modular fashion and built a WordPress site with custom plugins to address his desired features. I then trained him on how to use the WordPress interface, my custom plugin administration panel, and to add new custom content. Live features include:
Hierarchy of pages, blog categories, and custom taxonomies to represent the unique teaching system he uses in his personal trade.
A WordPress plugin/widget to display random testimonials from his clients, along with a custom database for him to add entries to via web interface.
A custom tarot card application, reproducing the features of an old inflexible JavaScript application and adding new features.
Custom images, css, page type, and category pages for individual tarot cards, designed and produced by Stephen
Custom pages and a WordPress [shortcode] syntax allowing Stephen to specify a variety of layouts in which to deal the cards
Custom CSS for card display, in multiple modes and contexts (dealt, undealt, shown in category list)
Links to custom taxonomies and detail pages for more info on cards
Layouts (“Spreads”) are arrangements of tarot cards with specific meanings in a specific order. These are implemented in WordPress as a custom post type which Stephen can create and manage on his own using custom shortcodes I developed. Each layout is a live document which, when a question is asked, deals out random cards for a specific query.
The tarot card plugin I developed for Stephen utilizes WordPress custom post types for tarot cards. In addition to being a live card which can be randomly dealt to various layouts in response to questions, each card has its own page with a full description of the card, examples of the symbology and theory behind the card, and its meaning in its various polarities and positions.
Various settings for the images, text, and behavior of the tarot cards can be set in a custom options panel I built for Stephen.
Responsibilities: Gameplay Programming: Movie Theater
The Sims 3 reinvented the way Sims games were built, leaving behind the proprietary scripting language used on the Sims 1 and 2, and adopting C# as the behavior language for object interactions. I joined the team late in the project after completing a series of Sims 2 console games, and assisted in the completion of the downtown area in the game.
I built this website for my band, Cartoon Violence. It integrates our social media, songs, and concert events all into one page, while keeping a visually striking look. As the band progressed, the style of the site changed to match the album art. Features include:
Blog roll listing news and promos for upcoming shows
Widgets for tour dates, music videos, and streaming audio players.
Facebook and Twitter integration
Songs as a custom page type with lyrics and auto-playing audio widget
iTunes-ready Podcast feed with episodes as custom posts
For the release of the Robots and Dinosaurs album, the site was redesigned with colors and art motifs copied from the album art.
The site includes an integrated shopping cart along which accepts credit cards and bitcoin/altcoin payments.
Responsibilities:Game and Lot Design, Prototyping, Lot Transition Portals, Gameplay Programming: Harvesting, Crafting, and Music Systems
As a radical departure from the traditional “get a house, get a job, buy stuff” gameplay of The Sims, Castaway pitched the player onto a tropical island where they had to harvest materials to build their own shelter and find their own food. I helped design and prototype the crafting system which allowed players to unlock recipes as they explored the island, finding ingredients, and exploring ancient ruins.
Responsibilities: Training/Mentoring, Porting Code, Gameplay Programming: Pet Interactions
The Sims 2 for PSP was a hybrid game which copied the Sims 2 Pets base game from console, but made its own changes to the game design and code. I was sent to train a team of engineers at EA Canada and support the process of merging code from the Pets game being finished in California while implementing the custom behavior changes. After five weeks of hard work we finished the port and I returned home.
Responsibilities: Gameplay Programming: Pet Plaza Buildings and Store Interactions
The Sims 2 Pets was a simultaneous release which shared assets between a PC expansion and a Console game. I worked on the console game, which was a sequel to The Sims 2 Console but with added pets content. As someone familiar with developing both the console and PC versions of The Sims, I was able to assist modelers and animators from the PC team who were unfamiliar with content requirements for the console games.
Responsibilities: Gameplay Programming: Store Manager AI, Employee Assignments, Crafting Stations
After working on the base game The Sims 2 and the first expansion pack The Sims 2: University, I was called back to the PC team following the release of The Sims 2 Console to help make an expansion pack about building a store for your sims to shop at.
This project was the first which introduced the programming language Lua, as an alternative to the built-in proprietary language normally used to write The Sims behavior. Lua allowed for more complicated scenarios to be created easily by the engineering team, such as realistic poker games played by sims, and my assignment, which was a store managerial AI.
I learned the Lua language during this project, and used its strengths to help design the sorting and prioritization algorithm of the Store Managerial AI. When you told a sim to watch your store, they would intelligently manage which other employees should stock, man the register, take a break, etc, taking into account the various skill levels of the sims working in the store, as well as the skill levels of the manager. Beware of hiring a manager who isn’t very smart.
As an experienced engineer with The Sims 2 programming language, I was transferred to the console team to help bring the gameplay of The Sims 2 from the PC to XBox, PS2, and GameCube. On the PC, a mouse would be used to send the sim to places and interact with objects, but we wanted to avoid having a cursor. I helped prototype a system which gave users direct joystick control of sims for navigation, with proximity and direction determining which objects the user could interact with.
The first expansion pack for The Sims 2 game included many objects and experiences surrounding College life. The camera was the most complex object I worked on for this expansion, as it needed specific engineering support to turn a screenshot into an in-game texture for a canvas.
The Sims 2 was the first commercial video game I helped program. I was hired by Maxis, owned by Electronic Arts, to learn the proprietary language used to script behavior in the game. As part of the extended development to improve the game design of The Sims 2, I was placed on a “SWAT team” to design behavior for Sloppy sims, as well as contributing to the design and testing of death scenarios.
During a challenge to draw something every day in August of 2004, I wasn’t sure what to draw so I just took whatever I knew about vanishing points and perspective and squeezed it slightly.