Trying to oppose Open Web to Native App Technologies is so misguided that it beggars belief

People who ought to know better spend valuable energy dissing native app technologies. I’ve ignored the fracas for a long time, finally I thought I’d pen a couple of simple thoughts. I got motivated to do this upon seeing Roy Fielding’s tweets. I also read @daringfireball’s recent blog post explaining in his usually articulate way how he sees Apple in the whole picture. Here, I just want to look at a couple of definitions, pure and simple.

To claim that open web technologies would be the only safe bet is akin to saying that all you would ever need is a hammer. Good luck with that if you never come across any nails.

I think both are very good and very useful in their own right, one isn’t going to push the other into irrelevance anytime soon because they serve different use cases. The signs actually are that web addressing model, by way of URIs, might get challenged soon once Internet connected devices start to proliferate (as they’ve been hyped to do for some time now). So, I actually think that a safer bet would be Internet Technologies, Web could increasingly be pushed into a niche. But ok, I actually didn’t intend to get in the fray.

Incidentally, I only see claims that native platform apps would be some kind of conspiracy to lock users down, but apparently open web would be the gentlemen benevolent dictator’s choice. I am skeptical in the face of such claims, because Mother Teresa wasn’t a web advocate for example. I remember that Apple, who triggered what-you-know, initially only wanted people to write HTML apps for the iPhone when it launched. It was only when they got pressured by developers that they finally released native SDKs. That’s such a terrible showing for a would-be mal-intended user-locker.

There is no such thing as an open web versus anything else. There is just the web and then there is an ever growing generation of native platform apps that also take advantage of Internet technologies. That’s it. Trying to oppose those two things is just rubbish. Plainly put. If something is a web technology and actually adheres to the web definition, it can only be open. A close web technology would be an oxymoron, the definition doesn’t hold. If something is built using Internet technology, it may borrow web technology for some purposes, but it is not part of the web per se.

In the instances where web technology is best fit, it will continue to be that way and get better. Conversely, in the  cases where native platform apps work best, those will continue to get better and may use the Internet. There is a finite number of web technologies bound by the standards and specifications implemented. But, there is an infinite number of native app technologies since the implementers can write anything they like and get it translated to machine code following any protocol they may devise.

The Web doesn’t equate to the Internet. There are open and closed Internet Technologies, but there isn’t such a thing for the Web. The Internet contains the Web, not the other way around.

In the outset, there is a platform battle going on where parties are vying for depleted user attention. In such battles, every party attracting people to their platform is self serving and can make as much morale (or whatever you call it) claim as any other. The only exception are those set to gain nothing in getting their platform adopted. There aren’t any of those around.

My observation of the ongoing discussions so far is simple. Some individuals grew increasingly insecure of having missed the boat on native platform apps. Whatever the reason, including own choices. Some other individuals, a different group, burned their fingers trying to follow some hypes, learned from that and turned to native platform apps. The two groups started having a go at each other. That got all the rousing started, everyone lost their cool and indulged in mud slinging. But there is no point to all of this.

If you are building software intended to solve a category of problems, then the most important technology selection criteria you should consider is ‘fit for purpose’. Next to that, if the problem is user bound, then you want to find the most user friendly way of achieving your aim. If you do this correctly, you will invariably pick what serves best the most valuable use cases of your intended audience. Sometimes this will work well with web technologies, sometimes it won’t, and other times you will mix and match as appropriate.

I don’t see web technologies being opposed to native app platforms, at all. Whatever developers find more attractive and profitable will eventually prevail, and use case is the only metric that truly matters. It is understandable that any vendor should vie for relevance. That’s what’s at stake, and that is important to everyone. It’s only once people and organisation would face up to this cold fact and start talking genuinely that they begin to make some progress.


Marrying Technology with Liberal Arts, Part II

In a earlier post, I started exploring this notion of marrying technology and liberal arts. If you follow information technology closely, you certainly know who got famous for making such a claim. Even if you do, I invite you to bear with me for a moment, join me in a journey of interpreting and understanding what could lie behind such an idea. It’s a fascinating subject.

This is not about defining anything new, let alone appropriating someone else’s thoughts This is just an exploration of the notion, to get an idea of the motivations, challenges and opportunities that such a view would generate.

In the last post, I mentioned that there were challenges and pitfalls when attempting to marry technology with liberal arts. Let’s have a look at some of these challenges and pitfalls.

Let’s imagine that the journey involves two sides, two movements, starting at opposing ends and moving towards each other, converging towards an imaginary centre point.  On one side of this journey are The Technologists, thereafter Technologists. On the other side are the Liberal Artists, thereafter called Liberal Artists. The imaginary point of convergence is thus User Needs and Wants, that’s what both sides are striving for. Herein lies an important first chasm:

  • The products generated by Liberal Artists want to occupy our minds and souls, capture our imagination, give us comfort and feeling of security, entertain our fancies, give us food for thoughts. Of essence here are issues such as aesthetics, forms, feelings, comfort, feeling secure or insecure, want, etc. Liberal Artists want to make us feel and want things, trigger our imagination, provoke our thoughts. Liberal Artists might not necessarily concern themselves with practicality – this is not to suggest that they would never do because clearly whole legions of them do, but just that it might be a lower priority concern.
  • The products generated by Technologists want to help us carry out some essential activities. The premise here is that something needs to be done, something that is perhaps essential, something that is unavoidable. The technologist has done her/his job if such an activity could be carried out with the tools created and the techniques devised, considerations such as aesthetics and friendliness might come at a at later stadium, if at all.

By virtue of them starting at different places, Technologists and Liberal Artists have different contexts, different set of values, different views of the world, not necessarily completely alien to one another but definitely having their minds occupied in completely different ways. They face different sorts of challenges. Because we are shaped by our environments, we can grow to become utterly different people. Technologists and Liberal Artists often grow to become very different  people.

Liberal Artists have their own activities,  attributes and aspirations. In no particular order, nor  an exhaustive list by any stretch of the imagination:

  • Crafting is the primary activity, the outcome could be more personal, intimate, often some form of impersonation or expression of the liberal artist.
  • To be loved, to be adopted and to entertain the patrons.
  • To be perceived to have good aesthetics, aesthetic in this sense could come in the form of something that is pretty, beautiful. Alternatively, this could be something very ugly, repulsive, contrary to accepted beliefs and wisdom. The aesthetics may manifest itself in the look, the feel, and the smell.
  • To provide feel good, feeling different if not somewhat superior, or otherwise convey distress, pain, anger, or other high emotions, especially when dawned in artistic expressions

Technologists also have their activities, attributes, and aspirations. Again not in any particular order, certainly not exhaustive either:

  • To be perceived to be effective and efficient.
  • Productivity is an important driver, this is more about Taylorism, automation, continuously seeking to make things faster and cheaper.
  • To be making durable products, to be providing effective services
  • To get a job done in an economical way.
  • Attributes such as fast, powerful, high performing, are the typical claims that are made.

It is not necessary to go any deeper before one starts to see some of the challenges that all sides/parties face: the  areas of strength for one side automatically represent the perceived or real weakness points of the other side. This is trivial. People whose muscle memory is sharpened by one kind of activity, tend to do poorly when facing an opposing kind of activity, and vice versa.

Liberal Artists are not expected to know much about efficiency and effectiveness, or the economical. Conversely, Technologists might not be taken seriously if they start dwelling on aesthetics. Even if it were aspirational for one side to claim value attributes of the other, they are likely to face an uncertain journey of reconversion, adaptation, reinvention. At an individual level this is hard at best, at an organisational level such aspirational journey could quickly become daunting, you have legions of people and habits to convert into totally alien habits.

Liberal Artists and Technologists are sometimes competing for the same resources and spaces, most of the time they are not. In fact, the two sides address complimentary wants and needs, they are frequently found to be collaborating but not competing. For a wide variety of their activities, Technologists and Liberal Artists rely on each other, one could be found making tools that the other would put to use.

If Technologists and Liberal Artists are collaborating to address user needs, aren’t they already somehow “married” then? Aren’t they solving different but complimentary problems? Does it make sense to talk about bringing them closer together?

Marrying Technology and Liberal Arts, an interpretation

In this discussion, I want to focus on terms and expressions, and not on the persons or organisations that might have been (or are) behind such terms and expressions. My purpose is to explore, get a start towards a better understanding of the subjects covered.

What is Liberal Art?

Google search brings in a summary from Wikipedia as follows:

The liberal arts are those subjects or skills that in classical antiquity were considered essential for a free person to know in order to take an active part in civic life, something that included participating in public debate, defending oneself in court, serving on juries, and most importantly, military service.

In ancient times, not everybody was free – you could argue if somehow that isn’t still the case. Anyway. Liberal arts  wasn’t concerned about making tools and the techniques involved. We could dig further into this, but let’s not. Wikipedia goes a little further and defines modern takes of the expression Liberal Arts as follows:

In modern times, liberal arts education is a term that can be interpreted in different ways. It can refer to certain areas of literature, languages, art history, music history, philosophy, history, mathematics, psychology, and science.[3] It can also refer to studies on a liberal arts degree program. For example, Harvard University offers a Master of Liberal Arts degree, which covers biological and social sciences as well as the humanities.[4] For both interpretations, the term generally refers to matters not relating to the professional, vocational, or technical curricula.

There are certainly many other more authoritative sources for such a definition, I leave that the historians. The above is a good enough excerpt for my purpose. Clearly Liberal Arts covers a very large scope of human knowledge and activity.

What is Technology?

Another Google search quickly yields the following definitions:

  • the application of scientific knowledge for practical purposes, especially in industry. “advances in computer technology”
  • machinery and devices developed from scientific knowledge.
    “it will reduce the industry’s ability to spend money on new technology”
  • the branch of knowledge dealing with engineering or applied sciences.

A wikipedia article provides an interesting statement, that points to the earlier uses of the term Technology:

The use of the term “technology” has changed significantly over the last 200 years. Before the 20th century, the term was uncommon in English, and usually referred to the description or study of the useful arts.

In this definition, the term “useful arts” comes up. When we talk about use or useful, we are often implying tools and techniques, and technology provides means for us for making tools. Wikipedia defines useful arts as:

Useful art, or useful arts or technics, is concerned with the skills and methods of practical subjects such as manufacture and craftsmanship.

Here we see that technology is more at home with useful arts, than it would be with liberal arts. Mechanisation and automatisation were direct evolution from practices and techniques found in useful arts.

If liberal arts aren’t deemed to be practical, then they must be closer to decorative, entertaining, occupying minds and souls rather than making things for people to use. Liberal Art could be seen as potential uses of things that might be derived from Useful Arts, naturally not limited to such uses. If we keep following this line of thought, then “marrying technology with liberal arts” could be seen as an aim at bringing the practical and impractical closer together. When we say practical, it is often in defence of something that may not be perceived as elegant, intuitive or beautiful. We compromise those traits for usefulness, getting a job done.

Why talk about “marrying technology with liberal arts”?

It is always dangerous to interpret intentions, it is better to explore motivations and interests. From that point of view, one potent motivation could be found in the period in time where the expression initially rose to prominence. There was a time, not long ago, when the people driving technological advances tended to focus more on dehumanising activities in search of increasing financial and material profits. There may even have been geopolitical factors at play, when space exploration and technical ingenuity were being used in chest-beating competition to claim superiority. In such context, the artistic and human sides of Liberal Arts were of less interest because they don’t aim at making things. It goes therefore that the tools and techniques produced by Useful Arts would often be found to be inelegant, unfriendly and ugly. There is certainly plenty of evidence in earlier generations of information technology tools and techniques.

A clear move to humanising what wasn’t, was something for the taking as information technology was rapidly penetrating a widening range of activities in people lives. The emphasis on beauty, elegance, simplicity, all indicate a desire for more artistic expression than actual usefulness. But this could have just as well been marketing gimmick. It wasn’t though, making friendlier, more beautiful tools and techniques actually enhance human experience.

I have only brushed upon some definitions linked with the expression Liberal Art, in an attempt to get back at the origin of the terms and try to understand them a little better. Those advocating the marriage of technology and liberal arts, face numerous challenges and pitfalls. What are these? How can we understand them in the context of current information technology dominance? These topics will be explored in the next installment of this discussion.

Make a business app without writing a single line of code

If you’ve been here before, you know that I always express skepticism when I encounter this kind of claim. But when someone like Scott Hanselman tweets it, then I pay attention and will give it a shot. That’s what I did and here is how it went.

I visited the site, followed the link to create an app, picked a template/example and simply accepted all defaults. I chose to download the source codes. Within about 3 minutes I had three apps downloaded to my mac. The web site looks clean, it’s easy to follow.

App Control panelApp Control panel

There’s an option to download the fully built and ready-to-go app.

Trigger app build process App's being prepared for download Download your app

When you install the app, you get something that is really basic but functioning.

login view

main view

I then loaded the iOS version on Xcode to take a look at the source code. Browsing around I saw a source tree that is reasonably well organised, clean, simple and straightforward. You see that it doesn’t have much feature. I wouldn’t call this a foundation to base anything evolved on, but the basic hierarchical navigation views are in place.

Sample app in Xcode

I tried to build from Xcode and straight away the code wouldn’t compile. I saw there were missing dependencies, could try to solve that manually but decided to use cocoapod for that (everybody does these days). Indeed the presence of podspec file was another give away. After refreshing the dependencies, the code still wouldn’t compile, the Test target failed. So I deleted the Test target, then the code runs. I couldn’t be bothered to spend much time on this.

There’s also Android and Windows app source codes available. I didn’t take time to go through those, but I expect they would be similar: basic structure, quick and easy, but not much feature to see. To be honest, the basic app structure created by Xcode would be much like what you get here, one benefit is that through the theme feature of the web site, it’s possible to make it a bit more proprietary and get going.

Brief summary

For a beta service, this looks like a good start. It certainly will help people who just need a decent looking prototype to get started. The concept of App Builder, aiming at people who don’t want to write code, seems to be in motion. I’m not sure how much success they’re getting, but it is worth checking them out regularly. There might be situations where even a professional developer would want to get something simple out quickly, particularly throwaway ephemeral apps that are not worth over-engineering. This one looks good for that kind of purpose. For more elaborate needs however, writing code is still going to win the day.

To write good code, you need to think carefully about what you’re trying to do, what the context is and what the constraints are, then design a solution that cater for those things.

Idris, a dependent typed functional programming language: install and run on OS X Mavericks

I got rid of the (now deprecated) cabal-dev, updated to the latest version of cabal and thought of installing idris on my machine.  I immediately hit a problem, it won’t install. I get the following error message (log cut down):

$ cabal install idris
Resolving dependencies...
Configuring annotated-wl-pprint-0.5.3...
Building annotated-wl-pprint-0.5.3...
Preprocessing library annotated-wl-pprint-0.5.3...
Registering trifecta-1.5...
Installed trifecta-1.5
cabal: Error: some packages failed to install:
idris- depends on language-java-0.2.6 which failed to install.
language-java-0.2.6 failed during the configure step. The exception was:
ExitFailure 1

So, it’s logical to try and install ‘language-java-0.2.6′. I tried that:

$ cabal install language-java-0.2.6
Resolving dependencies...
Configuring language-java-0.2.6...
cabal: The program 'alex' version >=2.3 is required but it could not be found.
Failed to install language-java-0.2.6
cabal: Error: some packages failed to install:
language-java-0.2.6 failed during the configure step. The exception was:
ExitFailure 1

And that fails too. It turns out I could install the package ‘alex’ manually. So I run this:

$ cabal install alex
Resolving dependencies...
Configuring random-
Building random-
Linking dist/dist-sandbox-c9c9694f/build/alex/alex ...
Installing executable(s) in
Installed alex-3.1.3

That worked. I can now attempt to install Idris:

$ cabal install idris
Resolving dependencies...
Configuring language-java-0.2.6...
Building language-java-0.2.6...
Preprocessing library language-java-0.2.6...
Registering idris-
Installed idris-

Succes. Phew! I am now ready to start using Idris:

$ idris
bash: idris: command not found

Oops! It’s not in the search path, and it’s not obvious where it’s gone. That’s easy, prior to all this I had installed and initialised a cabal sandbox.  So it’s gone in the sandbox, which isn’t in my search path. I went for a sandbox approach because I wanted to isolate my installation of snap and yesod from this Idris playground.

To preserve my sandbox concept, I am going to use an alias to Idris:

$ alias idris="/Volumes/MacintoshHD/usrlocal/bin/.cabal-sandbox/bin/idris"

I typically add such alias to my ~/.bash_profile so that it’s always available.

$ idris
 ____ __ _
 / _/___/ /____(_)____
 / // __ / ___/ / ___/ Version
 _/ // /_/ / / / (__ )
 /___/\__,_/_/ /_/____/ Type :? for help
Idris is free software with ABSOLUTELY NO WARRANTY.
For details type :warranty.
Idris >

And that’s it, I now have Idris available and I can plough on. Ironically, for a language that promises to bring you dependent typed programming, the infrastructure dependency management isn’t stellar. That remains a weak point for me for all things Haskell.

Post Scriptum

  1. This is part of an exploratory journey into dependent types, an exciting concept in computer programming that I wish to use for production code in the near future. To get a glimpse of what this means, read this nice blog post, which, by the way, I think of as a model for introducing advanced programming concepts.
  2. Idris is built on top of Haskell, of which I have a recent version running on my machine. So if you’ve never had any of that kind of stuff on your machine, your mileage might be considerably longer than what I’ve shown here.

Who is set to benefit from the introduction of Swift programming language

One of my first reactions to Swift was the following:

In this post I elaborate a little more on the reasons that I held this belief, that everybody wins.

  • Apple, obviously: legions of developers who might have been put off by Objective-C will now give a second look and many are likely to write code for Apple platforms.
  • Groovy, Scala, Objective Caml programmer: programmers experienced with these languages can now leverage their skills to build solutions for the Apple platform without having to learn another language. Their main hurdle would be  to get acquainted with iOS and OSX platform concepts and building blocks.
  • Scala ecosystem: the introduction of Swift might have the side effect of actually making some people understand Scala better and quicker, this because  it shares many concepts with Scala but has a more readable syntax
  • A converse effect of the above bullet point: Apple developers who make the jump to Swift, would also realise the many benefits of functional programming and adopt languages like Groovy, Scala or Erlang.

Folks looking for new opportunities should find plenty. From a business opportunity perspective, here are some potentially profitable developments:

  • Groovy backend for Clang and LLVM: this could make it possible to write native iOS and OSX code in Groovy. People used to writing web only code would suddenly be able to port their solutions to the Apple platform.
  • Cross Training Developers: this could be the best time for Groovy or Scala training organisations to tap into the masses of iOS and OSX developers scrambling to learn functional programming. Why leave that money on the table?
  • Apple and Pivotal work together: this is a bit tangential, but if Apple were interested in expanding their Cloud clout, this is a good way to do that because they suddenly would be able to target the data centre too! Just buy Pivotal and leapfrog both Microsoft and Google in one fell swoop!

I don’t see yet how Swift could benefit either Microsoft or Google ecosystems. If anything, this could be a blow to those ecosystems as Apple is suddenly more attractive to a rising generation of developers converting to functional programming.

Musings on Technology and the society