Wednesday, October 21, 2015

Mobile Expert Interviews: Dan Bricklin, Co-Developer of the First "Killer App"

I am excited to share an interview I conducted yesterday in Boston with a member of software programming royalty, Dan Bricklin.  Dan was the co-developer of the world's first software "killer app", Visicalc.  Visicalc, a spreadsheet app for the Apple II series of personal computers, was so popular in the 1980s, that companies spent thousands of dollars on computers just to run the $100 software program.  Dan worked closely with Steve Jobs, Bill Gates many others in the early years of personal computers.  His life is outlined here on Wikipedia, https://en.wikipedia.org/wiki/Dan_Bricklin.

Dan still programs and designs productivity apps.  He is the CTO of Alpha Software, the developers of sophisticated digital forms for mobile devices.

Dan has received many honors for his contributions to the computer industry from the ACM, IEEE, MIT, PC Magazine, the Western Society of Engineers, and others. In 1981, he was given a Grace Murray Hopper Award for VisiCalc.  In 1996, Bricklin was awarded by the IEEE Computer Society with the Computer Entrepreneur Award for pioneering the development and commercialization of the spreadsheet and the profound changes it fostered in business and industry.  In 2003, Bricklin was given the Wharton Infosys Business Transformation Award for being a technology change leader. He was recognized for having used information technology in an industry-transforming way. He has received an Honorary Doctor of Humane Letters from Newbury College.  In 2004, he was made a Fellow of the Computer History Museum "for advancing the utility of personal computers by developing the VisiCalc electronic spreadsheet." Bricklin has appeared in the 1996 documentary Triumph of the Nerds, as well as the 2005 documentary Aardvark'd: 12 Weeks with Geeks, in both cases discussing the development of VisiCalc. His book, Bricklin on Technology, was published by Wiley in May 2009.

Video Link: https://youtu.be/ucDlFmrHfpk
************************************************************************
Kevin Benedict
Writer, Speaker, Analyst and World Traveler
View my profile on LinkedIn
Follow me on Twitter @krbenedict
Subscribe to Kevin'sYouTube Channel
Join the Linkedin Group Strategic Enterprise Mobility
Join the Google+ Community Mobile Enterprise Strategies

***Full Disclosure: These are my personal opinions. No company is silly enough to claim them. I am a mobility and digital transformation analyst, consultant and writer. I work with and have worked with many of the companies mentioned in my articles.

Friday, October 16, 2015

Code Halos and Rethinking Data Analytics - Spark is HOT!

Technical Guru
Peter Rogers
Our resident mobile technology and digital guru, Peter Rogers introduces us to his latest research and findings.  If understanding how to incorporate big data analytics in mobile and IoT apps is not your thing, go no further.  Seriously, go NO further.  Peter gets excited about...actually I have not idea.  He digs deep into Spark - an open source big data processing framework built around speed, ease of use and sophisticated analysis, with support for modern programming languages.  Enjoy!
********

Three years ago, a professor told me Spark was the future, but I never really thought to look into it until now.   I am amazed at how powerful it is!  If you look at the top there books on Safari Books Online today, you will see Spark, JavaScript and Micro-Services.  I am not the only one that is impressed!

In a Digital World the currency is data but this requires an extensive processing facility. It is not just IoT and its associated world of sensors that are propagating tidal waves of data; analytics is also being built into the majority of software and our whole life styles are being set against a backdrop of continual statistical analysis, predictive analytics and artificial intelligence. This is why the single most read technical book at the moment is on Spark, the future of data processing.

Unfortunately before I can even introduce Spark I have to give you a Big Data 101 and this will either be the most painful or the most incredible (free) guide you will find on the subject. I hereby thank the referenced blogs in advance.

We have to start at a place called Functional Programming. You may have heard of the following functional programming languages: Haskell; Erlang; Ellixir; Lisp; D; R; Scala; Wolfram; Standard ML; and Clojure [Kevin B: No, sorry missed that class]. You would probably be more surprised to know that CoffeeScript, the later versions of JavaScript and Underscore.js also have aspects of functional programming too.

If this strikes fear in your heart then do not panic, as we have an easy path. Even though it has routes in Lambda Calculus you really do not need to know anything about that. I am going to teach you everything you need to know but you will have to do some reading and there is no better place than this guide.

http://www.smashingmagazine.com/2014/07/dont-be-scared-of-functional-programming/

The purpose of functional programming is to break our programs down into smaller and simpler units that are more reliable and easy to understand. This is the perfect paradigm for being able to distribute tasks across a network of dedicated computers all working together to solve the task faster.

The core concepts of functional programming are as follows:

  • Functional programs are immutable – nothing can change
  • Functional programs are stateless – there is an ignorance of the past
  • Functions are first class and higher order – functions can be passed in as arguments to other functions, can be defined in a single line and are pure (have no side effects)
  • Iteration is performed by recursion as opposed to loops

Referential transparency – there are no assignment statements as the value of a variable never changes once defined

We generally start by defining functions that perform all the grunt work and these follow the general rules:

  • All functions must accept at least one argument
  • All functions must return data or another function
  • Use recursion instead of loops
  • Use single line (arrow) functions where utility methods require a function as a parameter
  • Chain your functions together to achieve the final result

To consider an example then let us consider a 3D visualisation that wants to take an API response from a Mensa API Web Service and visualise it to show an average of IQs against towns. We start by defining a set of utility functions that combined in order to do the grunt work. We will end up with a single line of code that obtains the coordinates for drawing the graph.

  • A simple function that adds two numbers together
  • A recursive function that adds everything up in a numerical array
  • A simple function that takes an average given a total and a count
  • A function that builds on the last to take the average for a whole array
  • A function that returns a function that finds an item in a data structure
  • A recursive function that combines arrays

With this in place we can start to look at the built in methods that often exist in seemingly non-functional languages. In JavaScript, we can find the map() and reduce() methods inside the Array object. These respectively use a processing function to: convert a set of values to another set of values; and reduce an array to a single value.  Now we can use our freshly defined utility functions along with the Array methods to create a single line of code that retrieves the coordinates - of course we would probably be using Scala here – but WOW!

var pts = combArr( find(data, ‘IQ’).map(averageForArray), find(data, ‘town’) );

See functional programming was not that hard after all? Now we come to MapReduce which is “a programming model and an associated implementation for processing and generating large data sets with a parallel, distributed algorithm on a cluster.” Google famously used MapReduce to regenerate its index of the World Wide Web but have now moved on to streaming solutions (Percolator, Flume and MillWheel) for live results.

https://en.wikipedia.org/wiki/MapReduce

A lot of people regularly mention MapReduce in conversation but few actually know what it is or how it works. Luckily for you, I will provide a few guides to get you up and running. It helps to remember that the map() function is used for converting a set of values into a new set of values; and the reduce() function is used to combine a set of values into a new single value. Now consider you can split all of your tasks up into map() and reduce() functions that are run in a distributed network of computers. Each worker node is working on a map() function against its local data and writing to temporary storage. There is next a Shuffle where worker nodes redistribute data based on the output of the map() function such that all data belonging to one key is located on the same worker node. Each worker node now processes the reduce() function in parallel and a combined result is returned.

https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html

In a nutshell we use the map() and reduce() functions from functional programming but we apply them to a 5 step distributed program context.

  1. We prepare the map() input by designating map processors and provide the processor with all the input data 
  2. We run the custom map() code exactly once for each input value
  3. We shuffle the map() output to the reduce processors
  4. We run the custom reduce() code exactly once for each value from the map() output
  5. We collect all the reduce() output, sort it and return it as the final outcome

This has worked fine in the past but the problem is the shuffling takes time due to reading and writing to a file system, along with HTTP network connections pulling in remote data. It is also a sequential batch processing system and so it cannot handle live data, which is why Google moved on some time back.

Finally we arrive at Spark, which is an open source big data processing framework built around speed, ease of use and sophisticated analysis, with support for modern programming languages like Java, Scala and Python.

http://www.infoq.com/articles/apache-spark-introduction

Spark has the following advances over Hadoop and Storm:

  1. It offers a comprehensive framework for big data processing with a variety of diverse data sets
  2. It offers real-time streaming data support as well as batch processing
  3. It enables applications in Hadoop clusters to run up to 100 times faster in memory and 10 times faster even when running on disk
  4. It supports Java, Scala and Python, and comes with a built in set of high level operations in a concise API for quickly creating applications
  5. In addition to Map and Reduce operations, it supports SQL queries, streaming data, machine learning and graph data processing.

Excited yet? Well other than the core API there are a number of additional libraries:

  • Spark Streaming for processing real-time data
  • Spark SQL exposes Spark datasets over JDBC and runs SQL-like queries
  • Spark MLlib offers common learning algorithms for Machine Learning
  • Spark GraphX offers graphs and graph-parallel computation
  • BlinkDB allows running interactive SQL queries on large volumes of data
  • Tachyon offers a memory-centric distributed file system enabling reliable file sharing at memory-speed across cluster frameworks
  • Integration adaptors connect other products like Cassandra and Kafka

Now if I told you that the following two lines of code could print out the word count of a file of theoretically any size imaginable then you would probably be left scratching your head at how the code is so short and then ask for a programming guide to this wizardry immediately.

val d = t.flatMap(l => l.split(" ")).map(w => (w, 1)).reduceByKey(_ + _)
wcData.collect().foreach(println)

http://spark.apache.org/docs/latest/programming-guide.html

************************************************************************
Kevin Benedict
Writer, Speaker, Analyst and World Traveler
View my profile on LinkedIn
Follow me on Twitter @krbenedict
Subscribe to Kevin'sYouTube Channel
Join the Linkedin Group Strategic Enterprise Mobility
Join the Google+ Community Mobile Enterprise Strategies

***Full Disclosure: These are my personal opinions. No company is silly enough to claim them. I am a mobility and digital transformation analyst, consultant and writer. I work with and have worked with many of the companies mentioned in my articles.

Monday, October 12, 2015

Mobile App Development Strategies for Cross Platform Developers

Cognizant's mobile app development expert and guru Peter Rogers shares his latest insights on app development strategies.  Enjoy!
********
In previous Blogs I have announced the diversification of iOS 9 and Android 6 and the prediction of a move back to platform specific coding or HTML 5. The corollary to this is that you end up with two of three development teams: Objective-C (or Swift); Android; and potentially Windows 10.

The challenge therefore is how you manage to keep the applications aligned with the original use cases, functional (and non-functional) requirements and class design models within these technologically diverse areas.

I think there are a three different solutions to this problem:

  1. Apply the same rules for each development team across technologies and platforms. That is the developer does the unit testing and is accountable for the code coverage score with regular reporting.
  2. Look to a reusable component model, but carefully managed at a program management layer across different projects. I recommend some dedicated tool to help manage the components.
  3. Cross-train resources in both iOS and Android so they at least have an appreciation of each technology.
It is the last point that I have decided to test out through a very unique and experimental training program in Spain. I decided to teach both Objective-C and Android to our mobile developers who were originally iOS or Android. This way I figured that with an appreciation of both technologies, the development teams could work closer together.  It is a controversial proposal because Technical Architects are normally SME (subject matter experts) in one particular technology. This is where it all breaks down in the mobile space,  and how we end up with 5 star iOS Apps and 1 star Android Apps.

By teaching two competencies rather than one, you elevate the associates to somewhere between Technical and Solution Architect. Whilst still a hands-on technical architect in their field (iOS, Android or Windows) they still have a slightly bigger picture appreciation of the mobile world around them.

My experiment seemed to work. We were able to build iOS and Android Apps, nobody had a mental breakdown, and everybody seemed happy. I think this works because the technologies are so distinct. It will be very interesting to see how they get on in the future, and if this leads to much better App Store ratings for both sets of Apps.

If you can get the developers and the designers talking as well, then you will really have something magical...
************************************************************************
Kevin Benedict
Mobile Technology and Business Writer, Speaker, Analyst and World Traveler
View my profile on LinkedIn
Follow me on Twitter @krbenedict
Subscribe to Kevin'sYouTube Channel
Join the Linkedin Group Strategic Enterprise Mobility
Join the Google+ Community Mobile Enterprise Strategies

***Full Disclosure: These are my personal opinions. No company is silly enough to claim them. I am a mobility and digital transformation analyst, consultant and writer. I work with and have worked with many of the companies mentioned in my articles.

Wednesday, October 07, 2015

Strategies for Combining IoT, Mobility, AI, CROME and 3D-Me

None of us like slow mobile applications or those that ask us stupid questions. Our time has value. Google reports 82% of smartphone owners research and compare prices in stores, and we don’t want to be standing in the aisle answering questions the mobile app and vendor should already know. We want our apps to recognize us, the context, and to understand our needs. We want real-time mobile applications connected to mobile commerce vendors running at real-time operational tempos.

In addition to speed, 90% of 18-34 years olds strongly value personalization in their mobile applications. Personalization comes in at least two forms, latent and real-time. Latent personalization means it lays dormant waiting for an application to be launched and then applies a stored personalized content profile. Real-time personalization, however, means dynamic real-time data, consisting of digital, physical and personal (3D-Me data) data, is being always collected and combined with CROME triggers (real-time contextually relevant opportunities, moments and environments) to instantly provide a personalized experience that is relevant now! For example, a security gate automatically opens because it is integrated with a mobile application that geo-fences the security gate. When you are 100 meters away it notifies the security system to open your front security gate, raise the garage door, turn on the inside and outside lights, deactivate the home security system and notifies your family members that you are home.  An AI algorithm understands the real-time meaning and context of the data it is receiving.

Real-time data collected via GPS on your smartphone automatically triggered a real-time, relevant event using real-time artificial intelligence algorithms. Combining real-time 3D-Me data, CROME triggers and artificial intelligence with smart devices connected to the Internet of Things (IoT) means more and more of your daily activities and behaviors can be understood and digital conveniences developed.

The scenario above requires an intimate understanding of the customer, their security systems, smart devices, passwords, locations and behaviors.  I predict that soon consumer scenarios will justify extending enterprise mobile security systems out to consumers.  This means enterprise mobile security vendors may soon expand beyond the enterprise into the integrated consumer mobility/IoT/AI markets as the entire integrated system needs to be secured.

************************************************************************
Kevin Benedict
Mobile Technology and Business Writer, Speaker, Analyst and World Traveler
View my profile on LinkedIn
Follow me on Twitter @krbenedict
Subscribe to Kevin'sYouTube Channel
Join the Linkedin Group Strategic Enterprise Mobility
Join the Google+ Community Mobile Enterprise Strategies

***Full Disclosure: These are my personal opinions. No company is silly enough to claim them. I am a mobility and digital transformation analyst, consultant and writer. I work with and have worked with many of the companies mentioned in my articles.

Monday, October 05, 2015

Code Halos for Mobile Apps, iOS 9 Universal Links and Search

One of the new features in iOS 9 is Universal Links.  What is the significance, and what does it mean for mobile commerce and mobile apps in general?  Our resident mobile expert, Peter Rogers, shares the details with us here.  Enjoy!

********
Mobile & Digital Expert
Peter Rogers

Universal Links in iOS 9 are used for deep linking between applications (which is great for user experience) and in particular deep linking from websites to a mobile apps. This is quite similar to the notion of "Intents" in Android but it extends the concept to have a strong security model.

Apple has deemphasized the idea of "app searching" and replaced it with the more secure concept of Universal Links between Apps and Websites.

Search in iOS 9 effectively tries to rival Google, and offers a holistic search that covers both inside your app, and outside your app on the Internet. This is delivered through Spotlight and Safari search results, Handoff and Siri suggestions. You can decide what content gets indexed, what information to show in search results, which mobile apps show your search results, and where you get seamlessly transported to after clicking/touching a Universal link. 

There are private search indexes on-device, and an Apple server-side index for publicly available data. A CloudKitJS library is also offered to allow communication between the App and its Cloud based datastore. You can make your content searchable through NSUserActivity, the Core Spotlight Framework, Web Markup and Universal links. 

If we look at what this actually represents then you can see that each mobile app actually has a Code Halo of data that surrounds it. Code Halos are the data that accompanies people, organizations, mobile apps and devices.  A mobile app may be singular in its purpose and separated from other mobile apps now in iOS 9, but its sphere of influence is extended out through the Internet for the purpose of data exchange and searchability.

Suddenly the most valuable currency is data, be it app specific data or supporting website data. The Code Halo that surrounds the mobile app can radiate out from the app to the far reaches of the Internet.

************************************************************************
Kevin Benedict
Mobile Technology and Business Writer, Speaker, Analyst and World Traveler
View my profile on LinkedIn
Follow me on Twitter @krbenedict
Subscribe to Kevin'sYouTube Channel
Join the Linkedin Group Strategic Enterprise Mobility
Join the Google+ Community Mobile Enterprise Strategies

***Full Disclosure: These are my personal opinions. No company is silly enough to claim them. I am a mobility and digital transformation analyst, consultant and writer. I work with and have worked with many of the companies mentioned in my articles.