Almost every software product has a click-through End User License Agreement (EULA) that we typically just click OK on so we can actually use the software. Perhaps we shouldn’t be so quick to click, because we’re often giving up our privacy or agreeing to other restrictions, but the software companies have us over a barrel, so we dutifully agree and move on. This is a real problem. EULAs were originally intended to protect the software company from liability and to prevent us from ripping them off. More recently, however, they’re throwing in binding arbitration clauses (which can be argued are legitimate protection for the company, but it does restrict our rights) and privacy clauses, which is the subject of this article. I believe these EULA problems can only be fixed through legislation, because competition and free enterprise don’t apply after we’ve already bought the product.
I have a Sleep Number bed and bought the SleepIQ add-on. SleepIQ is a $300 system in the pump (the mattress is filled with air) that measures your breathing, heart rate, and sleep. While it probably isn’t really worth $300, it is pretty cool, so when you buy a Sleep Number bed (and you should – they’re good), buy SleepIQ too. The sensor in the pump talks to an app on my iPhone, and the app was recently updated, which required me to click through a EULA. Well, I read this one, and it stinks. They threw in that they can do nearly anything they want with my private personal information that they’ve collected, including using it for marketing (not a surprise) or selling it to their business partners (bad). If I didn’t agree with the EULA, I needed to disable the SleepIQ system, thus throwing out the $300 I paid. It did say I could continue to use the bed – how generous of them!
This sort of thing isn’t any different than if you bought a car, and when you got it home, the entertainment/navigation system popped up a EULA that required you agree to all sorts of abusive terms or they’d disable all the features. That likely wouldn’t fly in cars, because consumer protection for cars is pretty good (lemon laws) and the consumer outrage would torpedo sales from that manufacturer. Sadly, with most other products, we’re stuck with whatever they want to give us.
What should be done?
I think EULAs should be restricted to EULA things, like defining the protections for the software company and restricting copying and other things. Agreeing to such a EULA could still be required before the user can use the software. Privacy statements have no place in the EULA, and I think protection of our personal data should be a legislated default. In no way should we be forced to give up protection of our private data in order to use the service. Of course, the company can offer us incentives that make the service more effective if we opt in to sharing our information, but it should not be mandatory. There are some services whose whole purpose is to share our data with someone – well they should get our permission explicitly, as well.
The problem is, companies aren’t going to do this voluntarily. There’s profit in our names and email addresses and personal preferences. Selling that information is essentially free money for a company that makes software or other products. Since consumers don’t often know what we’re signing away and realize that we have no choice in doing so, there’s little market pressure to stop this practice. That’s why (I hate to admit it) government should get involved and protect the rights and privacy of its citizens. We need to stop companies forcing customers to agree bad things in order to use services we pay for. This sort of behavior should not be accepted or allowed.
I never write about politics or economics, because I’m not an expert in these things, but California is about to pass a huge increase in the minimum wage (over time), and that’s something I have an opinion about. Talking about this is a little scary, particularly in California, where my opinion won’t be popular, but my opinion is for a different reason than you think. Lots of noise has been made about how this will hurt small businesses, and more noise has been made about the need for a living wage, and there is truth on both sides, but that’s not what I care about here. I think the wage rise is unfair and demoralizing to the very people it is supposed to help.
In college, I worked a couple of minimum wage jobs. Well, they started at minimum wage, but quickly I took on new responsibilities or showed my value and got raises, which made me very happy. Now if the minimum wage was raised so the new hire makes as much as I do, well then I’d be unhappy. And there’s no way I’d be able to “catch up” to the wage curve the new hire is on.
The effect of these rapid increases over time is that they will compress the salaries of many workers to the minimum wage. Employers are going to have to make everyone earn at least the minimum wage, but if I was earning a dollar more than minimum, I’d guess that that dollar gap wouldn’t be kept after the minimum is raised, because of the newly increased expenses. Hopefully, if the employer is nice and wants to reward achievement, I’d still be a little above minimum, but there’s no guarantee of that. So the new people catch up to previous high achievers each time the minimum wage increases.
You can argue that nothing was taken from the high achievers, and, in fact, they will be caught up in the wave of increasing wages, but I think it would be demoralizing to the high achievers, and they’re the future of the business, so it’s a bad idea to demoralize them. While I was at Northrop Grumman, we had some boom times in the economy where engineers became expensive. We were hiring in new engineers at salaries that weren’t far below the salary that I was earning even after getting good raises every year. This was depressing, because the engineers in my cohort were on a much lower wage curve than these new engineers that started so much higher than we did (even accounting for inflation). The only way to change the curve is to leave and get higher pay at another job, which isn’t what any company would want. So I know how it feels to have new hires fresh out of school earning nearly as much, and it is demoralizing. I can guess this will happen near the minimum wage level as well.
I don’t have a solution to propose. The increase is a done deal and will be signed into law today. But we shouldn’t be surprised if it doesn’t help as much as people think it will, and I think some of that will be the effect I described above.
This is the Building a Product panel at the UC Technology Commercialization Forum on May 8th. Next to me are Dr. Christine Ho of Imprint Energy and Dr. Michelle Brown of Olfactor Laboratories, as well as the moderator Dr. Thomas Lipkin of UCLA. The picture is pretty low res, because it was cropped from an iPhone 4S photo taken 25 or so feet away by my wife. I should have brought my good camera for her to use…
On Thursday May 8th, I participated in the “Building a Product” panel at the University of California Technology Commercialization Forum at the Westin Hotel near San Francisco Airport. The day-long event had presentations by researchers who have products that are nearly ready to commercialize, as well as panels and talks by venture capitalists and members of industry.
The “Building a Product” panel was right after lunch, so it had great attendance. It was moderated by Dr. Thomas Lipkin from UCLA. The other panelists were Dr. Christine Ho of Imprint Energy and Dr. Michelle Brown of Olfactor Laboratories. We all had very different experiences in the transition from academia to startup, so the panel had plenty of different perspectives.
It was exciting to hear UC President Janet Napolitano mention Hiperwall and the other companies by name during her opening address!
Homeland Security Today magazine has published an article about how a powerful, yet cost-effective Hiperwall video wall solution helped the Coast Guard modernize their command center while maintaining and enhancing capability in a budget conscious manner.
Click the link in the paragraph above or use the URL below:
We are hiring at least one Territory Sales Representative to sell Hiperwall systems. We are looking for candidates that have some sales experience (a year or two), as well as basic understanding of computer networking.
Hiperwall is a startup that makes software to drive video wall systems, and as our software scales for systems with just a few displays to systems with more than a hundred displays (yes, some of our customers have huge systems!), the sales growth potential is huge. The position is based in Irvine, CA.
If you or anyone you know is interested, check out:
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.
Zoomed out to fill the Hiperwall’s 20 monitors
We can the zoom in and see more detail:
Closer view of Mars on Hiperwall
When the image is shown at full size (1:1 zoom), there is tremendous detail visible on each monitor:
Close-up Mars on Hiperwall
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.