“…through the last quarter, I should say, which is just 2 years after we shipped the initial iPad, we’ve sold 67 million. And to put that in some context, it took us 24 years to sell that many Macs and 5 years for that many iPods and over 3 years for that many iPhones. And we were extremely happy with the trajectory on all of those products. And so I think iPad, it’s a profound product.”
Category Archives: Other
Great Reading
Google+ Product Manager: Why I Left Google
Ouch… A Google+ product manager on why he left
… Money quote: I couldn’t even get my own teenage daughter to look at Google+ twice, “social isn’t a product,” she told me after I gave her a demo, “social is people and the people are on Facebook.”
iPad Pre-Orders Shipping Direct From China
I pre-ordered a third-generation iPad last week and was surprised that it had shipped over the weekend for Friday delivery. Now I see why. It’s coming direct from China! It appears that UPS is managing all the logistics on this rollout, timing it so that I receive my iPad on the official first day. EPZ, by the way, means export processing zone. Apparently China rings areas with security to make a small shipping city.

Qonnections 2012
I’m looking forward to another Qonnections in a month and a half. The technical track session on iOS SDK caught my eye…
TE02 QlikView iOS SDK (Software Development Kit)
This session will demonstrate the new QlikView iOS SDK and explain the differences
between this product and other QlikView client integration tools. Partners can build native
iPhone or iPad applications with this tool using XCode and the Objective-C programming
language.
Open-Source QlikView Engine?
Druid is an in-memory high-speed analytic database that is distributed in a cloud platform. MetaMarkets says they plan to release the code in the coming year. Data is fed in a semi-aggregated form from a Hadoop backend that stores the raw data. Their cluster of 40 modest machines churns through 1 billion rows of arbitrary dimensionality in 1 second. In another post they mention that they can use 6TB of memory spread among multiple machines before they incur degradation in speed due to cloud communication overhead.
Great Features In QlikView 11
The Myth and Mystery of Big Data
“With enough data, you can discover patterns and facts using simple counting that you can’t discover in small data using sophisticated statistical and machine learning approaches.” Link
I used to assume that big data and data mining and statistics were inseparable. But the reality–companies making a killing transforming data into value–is far from complex.
Big data is not hard. Statistics are not required. Neither are complex algorithms. Google’s Marissa Mayer attributed the company’s intelligence to the volume of data available for cross-referencing and not to clever algorithms. Google translate leveraged massive volumes of cross-referenced text in multiple languages rather than a finely tuned understanding of grammar. Voice translation uses much the same technique based on huge volumes of recorded, transcribed text.
Right now our two best tools are visualization and data exploration (business discovery). Both are simple, easy to demonstrate and easy to grasp. The big data revolution’s message to the masses is that simple correlation will outstrip them both as long as enough data can be crunched. And much of this can be automated, pre-calculated, and even anticipated. Imagine the analysis system analyzing itself: these people tend to ask these questions at these times!
Data can be correlated post-hoc. Correlation does not equal causation, but simple correlation is ample evidence on which to take action. Correlation is immediately perceived visually. Correlation is relative and easy to compare. Correlation can look at 2, 3, 4 or more factors at once. Correlation is business friendly. It is easily understood. Correlation is gut-instinct compatible. Kids understand it: mom gets upset when I put peanut butter on the cat. If I do it right now, she’ll probably be mad.
The business opportunity is really that so much big data is simply thrown away. The opportunity to store all this data didn’t exist, so we have an old habit of simply letting it vaporize. Every server message, every website click, every customer contact and interaction, every manufacturing activity, temperature, timeclock action, phone call received, phone call placed, security video, email sent. Every bit of data can be analyzed, and from multiple perspectives: employee, employer, customer, vendor, shipper, receiver, and on and on.
We don’t know what we’ll find. As more and more stories of big data at little(er) companies emerge, the snowball will become an avalanche.
QlikView Local File Security Easily Bypassed
QlikView’s “section access” security can be easily ignored with a hacked copy of QV.EXE. Hacking the file is a simple process that takes only a few minutes. Do not rely on “section access” to protect your data in a local QVW file.
The effectiveness of “section access” on server-hosted files is not a part of this warning.
Writeback in QlikView
The ability to push data from QlikView back out to a database is beneficial for what-if analysis, financial reporting, CRM dashboards and more. Unfortunately our ability to achieve this, even using custom code, is limited. On the frontend, there are only a few objects that can support user input and very little control over how these objects display. On the backend, connecting QlikView back to a database is very difficult to do well.
Part of the problem is that QlikView server is not always in control of this communication. If you’re using Plugin, it’s done by the client. If you’re using AJAX or Mobile, it’s done by the server. If, however, you code your solution as an Extension, things shift back to the client side again.
The common way to implement writeback is through VBScript macros. Examples of code to achieve this are plentiful on QlikCommunity. Although a simple version can be mocked up in a few lines of code, deploying this solution to many users in a modestly secure environment has serious disadvantages.
- Each client machine needs to communicate to the database. Therefore, database drivers need to be installed on each client. Credentials need to be included in the code of each QlikView document, leaving them exposed to users. Special ports need to be open in firewalls for driver communication. These are poor security practices and should be reason enough for any enterprise to abandon this approach.
- Client-side code is difficult to monitor. Error handling is poor. A separate system would need to be in place to capture errors for analysis and resolution.
- Managing conflicts in a distributed environment requires careful design and development.
- Communication between the VBS execution environment and the database can be slowed for any number of reasons. This leaves the client in an uncertain state, without feedback on progress or problems. Meanwhile, the application state in QlikView can continue to change. This easily can cause inconsistencies.
- Database driver communication uses proprietary protocols that are difficult to monitor for debugging and by network security software.
But there is a much better way to implement writeback to a database from QlikView: build a lightweight web service. What this means is to have QlikView send a structured request to a web server that can interpret the request, make the appropriate database changes, and send a useful response back to QlikView. Overall, this approach is far more flexible, reliable, compatible, configurable and maintainable.
- The response to a web service command (HTTP POST) can itself be an extensive report on the success or failure of any updates. This data can be made visible to the user as a clear confirmation that changes were successful.
- Server-side code is more reliable. It’s far easier to manage many users updating data at the same time. It’s easier to record and react to errors. Implementing your web service in PHP gives you a community with examples of good design.
- Server-side code can handle any level of complexity such as triggering other systems. Client crashes need not leave complex processes in unresolved states.
- This approach only requires a web port to be open in the firewall and therefore is more likely to work regardless of where the user is located.
- With this approach, it is easier to handle database rollbacks, atomic transactions and other features that support the completion of a transaction.
- Changes do not need to be sent to a database one value at a time. Instead, changes can be aggregated into a single update on the QlikView side. Aggregating changes is done faster than database communication. There is less chance of stalling the user session or allowing QlikView’s state to change in the middle of an update process.
- Multiple tables can be updated. For example, not only can a value be updated, but a separate audit log can be updated with who made the change, when, and to what value.
- Communication using XML over HTTP is readily captured by network security software.
- Web services can leverage existing network infrastructure. For example, IIS & Active Directory will authenticate the user making the web request. The web service code can be passed this information reliably.
- The database is read and written by a single set of credentials, written once in the web services code, and running on a secured server, without any access from other machines on the network. This is far more secure and a much easier sell to the IT department.
I’ve had plenty of success with this approach, combining IIS, ActiveDirectory, PHP and QlikView VBScript macro code. I don’t think we need writeback as a QlikView feature. I would, however, like to see a few changes to QlikView to better support features like this.
- Support the editing of Input Fields in more objects, such as when used as dimensions in a Pivot Table, or in a bar chart.
- Support multi-line text in Input Fields.
- Add functions to VBScript and Extensions to identify the rows of a table with Input Fields that have been changed since reload. For Extensions, something like a “next” iterator that moves to the next changed value.
- Make it possible to share Input Fields across users–without using collaboration objects as a kludge.
- Add Extension/AJAX functions for managing the data behind Extension objects with millions of rows.
- Support the updating of Input Fields from AJAX.
Happy Qliking!