We had yet another amazing sunset last night, as the following pictures show. Click on them, because the thumbnails don’t do them justice and often cut off important bits.
|
|||||
We had yet another amazing sunset last night, as the following pictures show. Click on them, because the thumbnails don’t do them justice and often cut off important bits. When I awoke this morning, the moon was brightly visible as the sun was rising. I grabbed my camera and took these shots. I’m trying to learn to be a better photographer, so I am at least shooting in RAW now and with Aperture Priority mode. This is the first time I’ve used Adobe Lightroom, but it did a nice job of making these photos presentable. We had an amazing sunset last night – one of the prettiest of the year. Of course, these iPhone photos don’t do it justice, but the battery in my good camera was completely dead. There was a bit of a storm coming through, as you can see by the distant rain and the clouds, but the temperature was perfect on my back deck as we watched the sunset. These are pictures of NASA’s new panoramic image from the Opportunity rover on Mars being displayed on Hiperwall. The image has more than 180 million pixels, so it would be very hard to see well on a single monitor. With Hiperwall, we can see the whole image, as shown in the first picture, by zooming out and having it fill the width of the wall. We can the zoom in and see more detail: When the image is shown at full size (1:1 zoom), there is tremendous detail visible on each monitor: The Hiperwall software makes it easy to view high-resolution images such as these, as well as movies, streaming video, and live data feeds. The Hiperwall booth at InfoComm in Las Vegas went very well. We brought a 12 monitor wall, consisting of 46” NEC thin-bezel monitors on a Premier mounting system and driven by Technovare Core i5 set-top PCs. We also borrowed two 55” monitors with embedded AMD PCs to show that our software is very flexible and can drive standalone monitors or even multiple display walls. We mounted the two monitors back to back on a single Premier mount with one monitor facing the aisle and the other into the booth. Our final configuration was the 12-panel wall, the 2×55” monitors configured as a separate wall, and a large-screen HP laptop configured as a third display wall. All these were controlled by a Gateway touchscreen PC and connected via compact 24-port gigabit Ethernet switch. Our sources were several minitower i5 and i7 PCs. One had a Datapath capture card connected to a 1080p Sony camera, while another had a webcam feed from a fancy D-Link pan-tilt webcam (we can control the pointing of the camera from the Hiperwall Control Node via our Sender’s built-in KVM capability), and another PC was running a very large, dense, and dynamic Excel spreadsheet that looked great on the display wall and showed that live content from proprietary applications is extremely easy to show on a Hiperwall. A primary focus of our presentation was to show our new animation capabilities, so we ran a pre-release version of Hiperwall 3.0, and had several animation sequences configured into what we call “environments.” Our most spectacular one is a high-res photo of the Earth (NASA’s Blue Marble 2012) rotating (yes, we know the earth doesn’t rotate that way, but it looked good) with the Moon orbiting around it. The movie below is similar to the environment we used at the show, but we had our logo and other content on there as well. The major difference between our software and traditional video walls is that the animation is not a movie. Instead, we can animate any of our display content, including live feeds, on the fly, either through pre-built animations defined using our simple keyframe interface or via our XML-based web services interface. This means changes to animation steps or content being animated are trivial, which gives us a huge leg up on the traditional approaches. Another animation we showed was a set of travel poster images designed by Saddle Ranch Digital for the Hiperwall system they installed for JetBlue. These spectacular posters were given life by our ability to move, scale, rotate, and filter them in real-time in animated sequences. When these animations were running, passers-by stopped and stared, and many of them were intrigued enough to stay and talk to us and learn about our system. We had visitors from all over the world stop by. Some were customers, while many were dealers, integrators, and consultants. We even had a few of our competitors visit to see our product. I believe the show went well. The booth looked good and all hardware worked! The Hiperwall software performed well, too, despite being a beta version (we did catch a bug with the Secondary Controller, so I’ve already fixed that). Many of the visitors that saw our capabilities told us they were very impressed, which is gratifying to hear that our hard work is well-received. Next year’s InfoComm is in Orlando, so I’ll hope to see you there! I will be presenting “Hiperwall: Building a Product from University Research” at the UCI EECS Graduate Student Colloquium on 5/23. The presentation is linked below. For several versions, Hiperwall software has offered a web-based External Interface (hereafter called the API) that allows external programs, including web browsers (yes, including Safari on iPad and iPhone) to open content and environments, close content, clear the display wall, etc. The Hiperwall 2.0 software added the ability to assign position and attributes to specific content as it is opened and to shutdown or sleep the wall (and wake it afterwards). Hiperwall 3.0 adds an XML-based API that provides significant enhancements, including the ability to animate objects through sequences of commands that can change position, rotation, and visual effects, such as transparency and color filters. New abilities to query the size of display walls and specifications of available objects make it possible to write an application that can tailor itself to a display wall, even if that wall is comprised of multiple sub-walls distributed throughout a facility. These powerful API capabilities are similar to the new animation capabilities built into Hiperwall 3.0, an example of which is shown below, but even more flexible, since the API can be completely dynamic. The API turns a Hiperwall system into a giant sprite-drawing canvas where the sprites can be images, movies, live data feeds, streaming videos, or slideshows of any of them. These new API capabilities are so powerful that I decided to write an example that showed just how dynamic Hiperwall content can be. Sure, a program like a slideshow or something similar would be pretty, but we already support slideshows natively, so I needed to come up with something really dynamic that demonstrates the ability to maintain control over a very energetic animation. I chose to write a Pong-like game called HiperPong. (My initial thought was Space Invaders, but I chose to simplify the idea to Pong because I want the program to be an example for our customers that want to use the API). This article explains the concept of operations for HiperPong, but does not provide code or documentation of the API. The source code and API documentation will only be available to Hiperwall customers via their authorized dealers once Hiperwall 3.0 is released, so please don’t request them from me. HiperPong is a small Java program that runs on a networked computer (I’ve only tested it on Windows, but it should work on Mac or Linux). The UI is minimalist, as shown below. Since the program doesn’t have to run on the Hiperwall Control Node, a box at the bottom allows the user to type the hostname or IP address of the Control Node. The program then connects to the Control Node and queries the display wall dimensions, allowing the user to choose to play on a specific wall or all the displays together. It also queries the available content objects, and allows the user to choose objects for the two paddles and the ball. While the defaults look nice, you can make the ball a live video from a webcam or capture device, for example. There are two options to choose: whether to clear the wall when starting (so you can play the game over top of existing content running on the wall or not) and whether to have the program play by itself (otherwise the A and Z keys move the left paddle and the / and ‘ keys move the right paddle). Once the user clicks the Start Button, the PlayingField code draws the center line down the middle of the wall and the left and right paddles, as well as the initial 0 and 0 scores. It does so by creating a Drawable object for each of them. Drawable is a class included in the HiperPong example code that maintains the state of a single object and allows the user to show the object on the wall and then animate it, and finally close it when it is no longer needed. The program makes the XML code to create the objects in the specified positions, and then uses an HTTP POST operation to send the commands to the Hiperwall Control Node. Each object is given a name (specified by the HiperPong program using a unique ID generator) at creation time. That name is then used by the program to modify the state of the object via the API. In this way, user programs can use their own mnemonic object names rather than having Hiperwall force names upon them. After the playing field is created, the Game code starts a periodic task that runs 30 times per second. Each period, that task checks the status of the keys (if not auto-playing), sends commands to move the paddles, if appropriate, checks whether the position of the ball collides with the top and bottom walls of the playing field, checks if the ball is contacting the paddles, checks if the ball is out of bounds (scoring a point for one of the players), and sending a command to move the ball. The movement commands are not instant move commands, which would appear jerky, but use the Hiperwall software’s ability to interpolate movement, rotation, and other effects between the current state and the new state over a specified period of time. This allows smoother animations without having to manage at too fine-grain a level. The ball changes angle if it hits near the upper or lower edges of the paddles, and when the ball is hit by a moving paddle, the paddle imparts some spin onto the ball, which is causes the ball to rotate as it moves. If a score occurs, the old score value is commanded to appear to fly away by shrinking and becoming transparent while rotating 180 degrees, while the new score zooms into position from a very large and partially transparent starting position. The ball then resets to the center, blinks a few times, and then starts moving at a random angle. The game ends when one side gets 9 points, simply because I only made numbers from 0 to 9 as images that I imported to the display wall. A video showing HiperPong autoplay is below. The HiperPong code shows how networked programs can use the Hiperwall API to create and manage very dynamic content on a Hiperwall display wall system. The API allows such code to create a named object, show it in a specified location with specified appearance effects, then animate it using absolute or relative movement and rotation as well as change the appearance over time. The HiperPong code shows how multiple XML commands can be combined into a single HTTP POST operation for efficiency. The code provides examples that can be used by Hiperwall customers to make their Hiperwall into powerful digital signage or advanced monitoring systems that can dynamically show events when they occur. These new capabilities to command the system over the network mean Hiperwall systems can be flexible, beautiful, and extremely useful with simple software using the API. Though HiperPong is written in Java, the API can be used by anything from Objective C to Python and anything that can make HTTP calls and process simple XML. The Hiperwall 3.0 software is in Beta test at the time of this writing and will be shown at Infocomm in Las Vegas in June. A bunch of the flowers around us are in bloom, so I took some pictures of the iceplant outside our fence, the kangaroo paws in our side yard, and a few others. I gave my mother a new iPad yesterday in the hopes that it would get her back to reading email and possibly responding to it. Sometime I will write a rant about how lousy the iPad is for the elderly, but not today. I read all the stories about how the new iPad gets hot, particularly when playing games. Based on my experience yesterday, it gets surprisingly warm when doing pretty much nothing. I set my mother up with email and a few other things and showed her how to browse the web, and before long, the iPad was noticeably warm. Not hot, but unpleasantly warm and uncomfortable. My iPad2 doesn’t do anything like that. So even when not playing Infinity Blade or other graphics-intensive games, the electronics and battery in the new iPad really heat up. I put one of the magnetic covers on, so I am hoping that my mother folds it around back when she’s using the iPad and that will prevent her fingers from becoming too toasty. I am curious if this is going to become a problem for Apple, because the heat is surprisingly excessive. Anyway, I hope my mom uses the iPad and reconnects with her friends and relatives using it. Sunday had really strong winds and rain that managed to find its way into the house via the construction going on in the kitchen. This morning, however, gave us a lovely rainbow. While the ocean isn’t very visible in these photos, it is there in the fog and mist. |