Archive for the ‘development’ tag
Is Apple “sabotaging” an open standard for digital books?
In response to an internal thread on this article…
I’m right there with folks crying foul when Apple does wrong, but I don’t buy this one. Apple’s “bastardization” of the ePub format helps push the format forward, just like Opera and Mozilla’s modifications to HTML yielded HTML 5, Microsoft’s modifications led to OpenXML and practically everybody’s Wi-Fi implementations led to 802.11n. I’m not saying it’s on as grand a scope as that, but I do think it’s a small part of that same sort of momentum. All Apple did was add some extra CSS tricks that weren’t present in the ePub standard and then tweaked the MIME type so the files identify themselves as being slightly different than standard ePub files. If nobody built on top of open standards like this, then nobody would use open standards because they would develop uselessly slowly.
And while e-ink displays are indeed better for reading than LCD’s, I take issue with the headaches-because-of-refresh claim. There is no refresh on LCD’s, just per-pixel changes when the image changes. Tablet LCD’s are the same as your desktop display, which folks read on all day long without issue.
I still prefer a tree-killing paper book to both, though!
Offline purchasing using online tools

Bought something at the Apple Store on West 14th Street yesterday and tried the new Apple Store app for self checkout. Launch the app and it recognizes you’re in a store (GPS? SSID? Geo-fencing?). A special interface appears within the app, you click the EasyPay button and take a pic of the barcode on whatever you’re purchasing. Pay with your Apple ID (same as iTunes account) by typing your password. Your receipt appears on screen so a sales rep can give you a “paid” sticker.
Pretty slick. Apple’s got something incredibly powerful with their Apple ID system tied to customer credit card info, and they’re one of the only big players in the space that has both physical and online stores. Amazon’s got this down (duh) but not so much for offline purchasing. Facebook and Google are trying to figure out how to monetize offline purchases too, but seems like they’re playing catch up here.
Thinkers wanted. Typists and runbook operators need not apply.
If you replaced your runbook with a puppet recipe, spun up a dev environment for breakfast, moved your production infrastructure to AWS, and have a few Arduinos on your desk… we want to talk to you.
Who are we? Just some geeks building the next. next thing and having a blast along the way. We work on dozens of projects every year, using the latest tools and inventing them when they don’t exist yet. We’re super busy creating new infrastructures for our clients, supporting our developers, and working on our own R&D. Your networking, database, storage, cloud, and hardware hacking chops will be challenged and honed. Since DevOps is an emerging discipline, we’re writing the playbook as we move along. So we’re looking for someone who lives and breathes this stuff– not necessarily the person with the most experience.
If your interested in joining our team, send us your resume or LinkedIn profile. (GitHub account and OSS contributions will also get our attention!)
Adobe to stop development on Flash: Nostalgia vs. Nausea
Today we got news that Adobe was ceasing development on Flash and focusing on HTML5. We’ve all worked with or consumed Flash in our personal and professional lives over the years, so we have a a few comments on the matter:
Charlie: I’m not a developer, but from the perspective of a web end user I’d be happy to experience less Flash in my day to day browsing. Does this lend some validation to Steve’s “Thought on Flash”? http://www.apple.com/hotnews/thoughts-on-flash/
Nick: I’ve been Flash averse since 1997. Just sayin’
Michael W: I’ve noticed that all of the Flash haters I know (not naming names!) are all Mac faithful and honed their hate ages ago. Still relatively new to the mac world myself, I found flash to be an annoyance when using Safari, and since then, realized it’s only in Safari I had those problems. Having moved on from Safari to Chrome, I have no need for extensions such as ClickToFlash (a thousand thanks to Ivan for that little beauty.) It certainly felt like it had been poorly executed there, but anywhere else I’ve used it, be it Chrome, Firefox, on both Mac and PC, on a handful of Android phones, I don’t see what all the fuss is about. Trying to load a page as simple as a Gothamist post in Safari chugged and made my (at the time) shiny new laptop moan and seemingly beg to be put out of it’s misery. ClickToFlash eased that pain since it would only load flash objects after I approved them, but I don’t see the same problem with other browsers/OSs/etc.
Applying a general troubleshooting logic to the situation, if you’re only having a problem with an app or plugin (Flash) in a specific instance (in Safari) and it works fine the rest of the time, it’s not the problem with the app or plugin…
Sure HTML5 is the future, it’s open, but give it enough time, everyone will look back at HTML5 with the same ire they are giving Flash right now when the next big leap comes forth. Just because the new hotness is here doesn’t mean the old one was never worth anything. Without Flash, we’d have no Home Star Runner, TROGDOR!, Super Mario Twins, NewGrounds, LineRider, Youtube, etc.
I for one am glad to have The Burninator in my life. <Nostalgia>
Dan: Maybe Flash haters all live in thatched-roof cottages….
Will: I’ve disliked Flash since the days my computer still had a floppy drive. Slow and resource-consuming while rarely adding any useful functionality to whatever site it’s maligned. While I have ethical qualms with how Steve Jobs leveraged iOS’ success against Flash, I think the ultimate goal of replacing a bad, proprietary technology with an open one is a good one. Now if only Adobe had a competitor so that they’d be motivated to fix the plethora of bugs in their products.
Ivan: Well, not for nothing but the development of Flash for OS X lagged behind the Windows version for years. Any institutional dislike for Flash has been taught to Mac users by Adobe themselves. Heck, I don’t think Adobe even bothered to match versions between the OSs until Apple started being vocal about not wanting Flash on iOS.
Otherwise, flash video was great for the Mac because we finally didn’t have to worry about having a WMV codec installed. That said, I’m glad we got away from it for obvious reasons. I can’t say why Safari doesn’t work as well with Flash now, except to note that Safari isn’t the most plugin-friendly browser out there. I’m not big on them myself, so it’s no loss to me.
Nick (again): To be clear, I was a Mac hating Windows douche until around 2002. And I too loved Homestarrunner et al, and accept the necessity of Flash in very specific instances which are becoming less and less frequent. The problem is, aside from the resource hogging bloated piece of dung arguments that everyone is tired of, Flash is completely over- and inappropriately-used in the vast majority of instances. And often ugly.
And I really hate ugly and unnecessary things.
Colin: It’s really weird to watch the rebirth of everything again “isn’t it amazing I can do x with HTML5?!” yeah, it is super cool, but it was cool in flash in 1999 too. it was the coolest thing ever, then it got old and crusty and a pain in the ass to deal with…. like a lot of people I know
Thanks flash, on to the next, next thing.
Will (again): I haven’t used Safari in five or six years but still find I have to use Flashblock in Firefox and Chrome to keep runaway Flash apps from maxing out one of my cores when I’m not paying attention. Before its redesign, I found trying to load a MySpace Music page to be a guaranteed way to crush any and all browsers because of the obscene amount of Flash. I see no reason why we’ll look back on HTML5 the same way. Its implementation is determined by the browsers, which are varied and competitive. (Also, I find HTML5 rendering engines already perform better than Flash ever has.) Flash, on the other hand, has only one implementation developed by one company that until recently had no competition. It took the largest mobile platform out there blacklisting it to make Adobe even start looking at improving its performance.
Michael W (again): To Nick’s point, Flash got out of control in regards to bad design because they made it so damn easy for anyone to pick up a (likely pirated) copy and start banging out animations within a couple hours. Suddenly Geocities exploded with wizz! bang! websites that had 7,392,103,134 things flying around. Same thing happened with animated gifs…
http://www.myspaceantics.com/images/myspace-comments/words/juicy-lips-blacks.gif
Chris R: I just hope that in all this opinionated side choosing, people realize that it is really about poor code from developers using the technologies. You’ll still see a bunch of crappy resource hogging crap using HTML5 technologies as well. I prefer to just say, I like properly written software…I don’t care if you use AS3, HTML5 tech, C++, etc.
Ivan: Damn it, where’s the Like button?
Node.js – The future of web development?
Okay, so the name is terrible, but the excitement around Node is very real and it’s not difficult to unpack why. For one thing, Node apps are written in Javascript and that brings some very real benefits. Not the least of which is the fact that almost all web developers already speak the language. Doesn’t matter if your language of choice is Ruby, PHP, Python, etc… chances are you have at least a modest (and probably an excellent) understanding of Javascript. As a software developer of more than a decade, I can tell you that not having to learn an entirely new syntax and the idiosyncrasies of a new language in order to get started and be productive is extremely appealing. Of course, if this was all Node was offering, that in and of itself would not be reason to consider using Node. Of course, this is not all Node is offering. Node apps by their very nature (being written Javascript) allow developers to write both back-end and front-end code in the same language – something that no other environment can offer. What this will really means is yet to be seen (and depends a lot on what tools will emerge to take advantage of that fact), but it certainly feels powerful.
So developers are excited – now what?
The truth is I don’t really know. So far, a lot of what I have seen in Node falls under the heading of “cute.” “Check out this chat room I wrote with 100 lines of code,” or “Check out this cool thing I did with web sockets.” I’m not picking on Node, so save your hate mail. In fact, I developed a “cute” project in Node myself with web sockets for remote control of Youtube videos (which also had a chat component). I had a lot of fun and the project was done in two days. I felt the power and ease of Node and could see how great it could be, but that is a long way from the types of complex applications I have written in PHP or Ruby. This makes me wonder what it would be like to build something like an enterprise caliber CMS using Node. Could I do it? Sure! Would I want to? No way! At least not now – and the answer has less to do with Node and more to do with tools/frameworks. Let’s face it, as modern developers we rely a lot on tools and the useful abstractions offered by our frameworks of choice. While Node does have a few promising MVC frameworks like Express and Grasshopper, they are still pretty green and can’t yet provide developers with same kind of productivity increases that other modern frameworks like Rails or Yii (my PHP framework of choice) offer. As long as this remains the case, it seems likely that Node will remain in the “cute” zone. Sure, a lot of cool projects will be done in Node, but it won’t be making the kind of huge unifying impact it seems capable of.
In a lot of ways, Node has already done the hard part. It’s easy to use and understand, it’s execution time is fast, and perhaps most amazingly, both PHP and Ruby developers agree that Node is a really cool idea. The challenge for Node is to take advantage of the excitement in the developer community, and bring them out of the diaspora to a centralized community website that doesn’t suck. Then use that community to get behind a MVC framework, with the goal of providing the kinds of tools PHP and Ruby developers need to be productive. Do this without just copying functionality and take advantage of Javascript as both a frontend and backend language, thus creating something that only Node can provide. When that happens few will doubt that Node is the future!
– Evan Frohlich
Moving Beyond MDM for Custom iOS Solutions
I’m really excited about several new iOS development and deployment projects that we’ve been working on at CG. We’re working closely with Apple on a bunch of solutions: at the most basic level, we’re building solutions for security and management of employee iPad and iPhone use; at the other end of the spectrum, we’re helping to realize visions such as a kiosk-like platform of thousands of iPads deployed in retail environments around the country.
We’ve learned a ton about what is and isn’t possible as we strategize ways to scale to thousands of units. Here are some of the challenges we’ve come across:
- How do we deploy and support iPads – whether ten or ten thousand – in a secure, efficient, and centralized way?
- How can we architect kiosk-like application experiences on the iPad, enabling us to design and curate the customer experience, while also allowing a true iPad experience complete with app-switching, web browsing, Facebook-checking, game-playing, and movie-watching?
- What kind of network and server architecture is needed to support a platform of iOS devices across the globe? How do we enable caching and pushing of dynamic data to the devices – particularly large amounts of media content?
Centralized deployment and support of iOS devices
How do we deploy and support thousands of iPads or iPhones in a secure, efficient, and centralized way? Mobile Device Management (MDM) platforms like AirWatch, Casper, MobileIron – and soon, OS X Lion Server – allow us to push XML configuration profiles to iOS devices. This enables centralized inventory and basic management of the devices: from what version of iOS they have installed, to some security control over how/if users can install and delete apps. For many enterprise customers, these tools are useful for administering security policies on employee-owned iOS devices. But for custom platforms like kiosks and retail experiences, MDM is not ideal due to the need for end-user interaction. What we need is a way to easily restore iOS devices back to their “golden” state in a centrally managed way.
We’re excited about the potential of over-the-air restores and software updates coming in iOS 5, but as of today, iTunes is the only game in town for this. Working within this limitation, we’ve architected some innovative solutions that enable iOS devices to connect to iTunes virtually over USB to IP converters and a content distribution infrastructure. Until iOS 5, this is a good option to have, and I haven’t heard of anyone else embracing this approach.
Rearchitecting Apple’s iOS user experience
Put an iPad in front of someone and they’re going to tap, scroll, pinch, and squeeze the user interface. The user experience is still the leader in the tablet space – though we’ve been recently impressed by the BlackBerry PlayBook. For a project we’re working on now, we want to encourage this user experimentation and interaction, while locking down some important components of the UX. Things like App Store purchases, iTunes downloads, deleting apps, rearranging icons, and changing the home screen wallpaper will quickly affect the kiosk experience. MDM solutions can help disable some of these features, but the aforementioned need for user interaction just doesn’t work for specialized user environments.
One solution we’ve had success with is a combination of custom code to disable user customization of the Springboard, plus a WebKit-based Safari replacement for browsing that enables us to prevent user download of unauthorized content. Combine these with some configuration profile-based customization of iOS and we have a good solution for locking a customer experience down and reducing the frequency of unit restores or reimaging.
The CG approach to iOS projects
Part of what makes CG stand out as a solution provider is our deeply embedded collaboration between our application development team and our infrastructure team. As the Enterprise’s appetite for customized mobile platforms and experiences grows, we’re uniquely suited as a technology partner to build and innovate on our customers’ vision. iOS is at the core of this vision and I couldn’t be more excited to be working with these technologies today. Plus, iOS 5 is on its way and it’s shaping up to be a giant leap forward!
Thanks to CUNY’s Technology Immersion class!

Last night I was joined by our VP of Dev Ops, David Rocamora, and one of our senior application developers, Evan Frohlich, for a visit to CUNY’s Entrepreneurial Journalism program. We were invited to be guest presenters in the program’s Technology Immersion class. This course presents students with the media, business, and journalistic opportunities presented by new and emerging technologies and trends. It was a great, smart group of students from a wide range of backgrounds, each with a unique idea for a business or product at the crossroads of technology and journalism. Lots of neat innovation happening there.
I spoke a bit out CG, our history, capabilities, and process, while Dave gave an excellent talk on the Cloud, and how software and infrastructure are intimately connected. (Remember what happened last week?) Evan spoke about behavior driven development, and offered some guidance on avoiding feature creep, and releasing early and often.
It was great to be back in a classroom with these guys. We can’t wait to see how the student’s business and product ideas gel, and look forward to using some of their products in the future!
Rapidly Prototyping Tagatag on Google App Engine
Google App Engine is Google’s platform-as-a-service for developing web applications. There’s been some people saying goodbye to GAE, and perhaps in response Google has announced several enhancements to the service.
In the midst of all of this, a few of us at Control Group have been developing Tagatag: an Android and iPhone application for commenting on barcodes that uses web services running on Google App Engine.
Scan this QR code with Tagatag to join the conversation!
Barcodes are everywhere around us. You can find them on advertising, products, places and even people. Tagatag provides you with a virtual paint marker to let you make your mark on all of these codes anonymously. Download the Tagatag app and give it a try. Scan a barcode to see comments people have left for you and then leave some for them.
We chose Google App Engine for the back end of Tagatag for a few reasons:
- It’s quick – You sign up for an account, download the SDK and you’re developing. The development server in the SDK lets me run the application on my desktop and interact with the code as I’m writing it. Uploading new versions, rolling back old ones, or performing maintenance is a snap with the GAE dashboard.
- It’s simple – There’s not much to the web service. It’s small and simple. We used the webapp framework because we didn’t feel we needed anything else. It makes for a very concise application. Believe it or not, there are about 300 lines of code for the GAE part of Tagatag.
- It’s scalable – We don’t have to worry about what we do when Tagatag becomes popular. We’ll just raise our billing quotas in GAE and let them handle spinning up new instances or expanding the datastore. Knowing that you don’t have to be concerned about scaling makes things a lot more fun.
I’m happy that GAE let us bring Tagatag to you so quickly. So, when it’s available at the end of the week, be sure to download the app, tag a tag and make your mark!
Automated Linux Server Deployment With Amazon EC2 and Puppet
I wear a few different hats at Control Group. Very often I will join the team on projects that have something to do with post production, storage networking, product development and web application development. At a glance these things seem quite different. What do these very different projects have in common? Linux!

Tux the Linux Penguin
I work with Linux quite a bit at CG and it comes up in some interesting places. Consistently we find that the largest and smallest systems we work with are running Linux. If it’s a large system, like a database or storage network, Linux can provide the stability, robustness, and uptime required to make the project a success. If it’s a very small system, like an embedded display or a custom purpose device, we choose Linux because of its flexibility.
Over the last year or so, we’ve had a need to spin up many more virtual computers than we used to. It’s necessary to create a handful of computers for each project we work on and the number of projects that we are taking on at a time is growing. Tools like EC2 and VMWare have made it very easy for us to create new virtual computers, but what about managing them? For Linux there are some great solutions. In this blog post I would like to talk about how we’re using some of the tools to deal with the large number of machines we are managing in Amazon EC2 for ourselves and our clients.
Cloud Control
The first part of the system is Amazon’s Elastic Compute Cloud (or EC2 for short). I’ve written about EC2 before, but to be really brief about it: EC2 allows you to create computers on the Internet quickly and lets you pay by the hour for their use. The instances you create are virtual machines that run in a large Xen based infrastructure that Amazon provides. To customize the software and configuration of the instances, Amazon lets you create snapshots of your computers (called Amazon Machine Images or AMIs) that you can launch new instances from.
It’s hard to say that making an AMI is difficult, it’s just a few keystrokes and a coffee break while the image is prepared and stored for your future use. When you begin to manage dozens and dozens of different images this becomes a problem. It became clear to us that we needed to have one AMI to manage, and build every computer from image dynamically. To do this we needed a way to pass specific information to each instance when it started up and then have a tool customize the instance based on the specific information about it. Amazon provides a method to pass specific information to an instance (it’s called user-data) and the good folks at Alestic have made some great AMIs around it with some good documentation.
Enter the Puppet Master
We have been using a tool called Puppet for nearly two years now to manage a handful of computers. We selected that to manage the whole lot of Linux computers that we were dealing with. Puppet allows us to describe how a computer should work in a general way. We can make collections of configurations for standard things so it’s easy to reuse what we create over and over again. Our Puppet configuration is stored in a Git repository so many administrators and developers can collaborate on it and our server configurations are backed up and version controlled automatically.
Bringing it all together
Puppet decides what configuration to use for a computer based on its hostname. We use the EC2 user data to pass a new instance the address of a Puppet server and the hostname that the machine should assume. When it boots up it sets its hostname and checks in to receive the configuration that we’ve stored for it. All changes to the machine happen through Puppet so we don’t have to spend a lot of time SSHing in and customizing the machine. It’s also very easy for us to duplicate a machine for testing or whatever we need.
While we originally did this to make our lives easier as we manage more machines there turned out to be some really cool side effects:
- Excellent Security: We don’t want to store sensitive information in Puppet. This means no passwords or secret stuff. To resolve this we require all developers and administrators to use key-based authentication to get access to the computers via SSH. This is very handy and it eliminates the need to remember passwords or for an administrator to have to reset passwords for users. Someday I would love to take the next step and have all of our users and machines be part of the Monkeysphere.
- Accountability: All of our configuration is tracked in a Git repository so we can see the history about what has changed on certain hosts and who changed it. Change control occurs automatically with Puppet and it’s easy to examine and understand what has changed and why it changed.
- Repeatability: By storing all Linux computer configuration in a single place we can easily repeat what we did for one server on another. Puppet institutionalizes all of our Linux knowledge in one place and saves us time every time we have to create a new machine. If you want to see how someone has done something in the past there’s no more need to dig through emails or documentation, just look at the facts in the Puppet repository and even copy and paste it into your new configuration.
- Portability: We use Puppet to manage much more than just EC2 instances. Physical machines and virtual machines in our ESX installation are managed this way too. It gives us one tool to take care of any Linux machine we deal with. Puppet also supports other operating systems. We’re looking to expand our use of it to Mac OS X machines and maybe even Windows sometime soon.
There are certainly other ways to solve the problems we’re up against, but this is the way we chose. We did some extensive evaluation of Chef (which is a tool like Puppet) and we’ve used Rightscale before. This sort of thing is becoming very important as we manage more and more computers. I expect we’ll see a lot of exciting products, techniques, and services in this space as time goes on.
If you have any questions or comments about our setup, or would like to discuss implementing something like this for your business, leave a comment or get in touch with us. We’d love to help.
Dear Cable Company, It's Internet TV knocking and it wants your ad revenue.
Here is a series of recommendations, rants, and observations about why MSOs (the cable companies) will be sad in 2011, unless they innovate and invest.
Entertainment = Consumption + Interaction:
Internet-enabled TV will bring about some radical changes. Nielsen’s Three Screen Report indicates that consumption of the moving image is increasing across all three screens: traditional TV, internet, and mobile. The interactivity of this “data” will surely change. Entertainment now equals both watching and interaction: checking out additional content online, playing games, or participating in ads as entertainment. 3D and gesture-based interactions will also redefine this blurring of the line between passive and active viewing over the next few years.
Ditch the “dumb” set-top:
Content models that rely on “captive audience” set-top box capture of viewing habits are outmoded as delivery systems, and deliver poor analytics and reporting compared with the information we can glean from a data-only model. If content owners rely on this information, why does the old model remain unchecked? The set-top box is largely a passive unit that doesn’t include an interface, platform, or APIs for allowing advertisers to interact directly with their target audience in real-time like the Web does. We have seen some recent (and awesome) successes with new methods of delivery: Hulu, Netflix, MLB, and on-demand efforts. However we are in an infancy of thinking about the possibilities of satellite, cable, and their antiquated set-tops, and how broadcast can recapture some of the money that migrated to online advertising.
This is an opportunity for direct access to consumers in their living rooms. The delivery method is there, there is already a large internet-enabled box in many living rooms: tuner, DVR, AppleTV, Slingbox, etc. MSOs already have the access to provide value-add applications to the experience, but what is preventing them from radically changing the intersection of TV, Internet, and advertising? They actually have had a better chance than anyone.
Develop a platform:
Imagine tying content delivery to analytics and advertising – a platform that delivers both choice and guidance to direct viewers to shows they like, and then targets accompanying ads based on more granular information and feedback. Visible World does last-mile ad insertion for parent company, Comcast, who acquired one of the big three: NBC. A small wrinkle in this still-disputed merger is Sen. Kohl, who is asking for a divestiture of NBC’s holdings in Hulu, arguing that it potentially violates anti-trust.
But this is an amazing opportunity for MSOs to radically change the model for consumers and advertisers by providing a platform for interaction. MSOs have a chance to drive people back to their subscriptions — otherwise we will see a switch to online viewing, where advertisers can get a lot more feedback for their digital dimes, and consumers can have more choice, and augment their experiences.
The TV could supersede the MSO-provided set-top box as a platform:
Internet-enabled TVs or TVs with companion internet-enabled boxes will supersede the current MSO interface and platform. Federated search across Internet/DVR/broadcast is far more useful and less clunky than a remote-driven interface. In addition, the ability to bring in dynamic web content — ads, additional content, or related information — should quickly reduce the three screens to just two.
[youtube=http://www.youtube.com/watch?v=diTpeYoqAhc&hl=en_US&fs=1&]
When MSOs realize they are missing out on key advertising opportunities, we will see a rush to market with subscription- and licensed-content across the three screens. You would have thought that Hulu would have put the fear in them, but wait until Google TV takes their bite. Their recent partnerships with TV manufacturer, Sony, ensures that this will be widely distributed to Best Buy, Walmart, etc. beyond the market reach of Roku, Slingboxes, of the world.
Prepare to lose ad revenue:
NBC Universal’s (current) CEO Jeff Zucker and his oft-quoted ‘trading analog dollars for digital pennies’ was revised last year to ‘digital dimes’ from the man himself. That is good news, especially for the multitudes of investors that entered into internet video ventures last year. Out of that gold-rush of investment though, there hasn’t been significant pay-dirt for many. Clearly the answer lies in uniting broadcast to the Internet, bringing the interactivity the web provides, in addition to the type of analytics that are possible. I predict Google TV will make more of an impact than Apple TV did to unite those advertising schemes, although watch out, Apple’s clearly got some plans a brewin‘.
Google TV offers the opportunity to sell ad’s within the interface, and provide targeted advertising, on the TV. Show me what you got MSO’s.
In Conclusion:
It is a rapidly changing world, and people have clearly shown that the TV, cable-tuner, and DVR do not have all the features people want. The cable companies who own the infrastructure and delivery method of video and data are being left out of this equation. Google has side-stepped around cable companies and the licensing issues — wisely I might add — and added a layer with enhancements that will allow them get deep into people’s living rooms, to collect data and provide a smarter ad platform. Things are going to get really interesting….