Jun 15

Although languages like APL, Prolog and COBOL might seem unusual to many of today’s programmers, they are serious languages developed to address a specific requirement or a particular model of programming. We’re looking here at those languages that have been designed, first and foremost, to be odd. Referred to as esoteric programming languages, some are intended as jokes, some as parodies of other languages, whereas others were designed to be downright strange.

Esoteric programming languages: is there room in your brain for these nutty devices?

Bizarre or not, though, all of them truly are programming languages in the sense that they really can be used to provide instructions to your PC. Our intention here isn’t to show you a lot about any one language – after all, you’re not exactly going to be using them for genuine programming projects – but to look at three of then, fairly briefly, to give you a feel for the variety of esoteric languages.

INTERCAL

The names of programming languages are often acronyms that give some clue as to their purpose. So BASIC is Beginners All-purpose Symbolic Instruction Code, COBOL is COmmon Business Oriented Language and FORTRAN is FORmula TRANslation. So you start to get a feel for INTERCAL when you read in the manual (which you can find at www.muppetlabs.com/~breadbox/intercal/intercal.txt) that its full name is “Compiler Language With No Pronounceable Acronym, which is, for obvious reasons, abbreviated INTERCAL”. It was designed with the aim of being as obtuse as humanly possible, mainly so you that you can amaze your fellow programmers by your ability to do something useful in this bizarrely complicated language which was designed specifically to have nothing at all in common with any other major language.

Ironically, since our stated aim is to show you how to program in esoteric languages, we’ve not even going to try with INTERCAL. Instead we’ll show you how to use the INTERCAL-J compiler using a sample program provided and then we’ll leave you to peruse the manual. We suggest you do this in a darkened room and clear a week or two from your diary before you start. If you consider this a dereliction of our duties, take a look at the INTERCAL program below, which has been provided to illustrate how fiendishly involved even a simple program can be. Its purpose is to read in 32-bit unsigned integers, treat them as signed, 2s-complement numbers, and print out their absolute values, terminating if the absolute value is zero. A comparable APL program runs to 16 characters.

DO (5) NEXT
(5) DO FORGET #1
PLEASE WRITE IN :1
DO .1 <- 'V":1~'#32768$#0'"$#1'~#3
DO (1) NEXT
DO :1 <- "'V":1~'#65535$#0'"$#65535'
~'#0$#65535'"$"'V":1~'#0$#65535'"
$#65535'~'#0$#65535'"
DO :2 <- #1
PLEASE DO (4) NEXT
(4) DO FORGET #1
DO .1 <- "'V":1~'#65535$#0'"$":2~'#65535
$#0'"'~'#0$#65535'"$"'V":1~'#0
$#65535'"$":2~'#65535$#0'"'~'#0$#65535'"
DO (1) NEXT
DO :2 <- ":2~'#0$#65535'"
$"'":2~'#65535$#0'"$#0'~'#32767$#1'"
DO (4) NEXT
(2) DO RESUME .1
(1) PLEASE DO (2) NEXT
PLEASE FORGET #1
DO READ OUT :1
PLEASE DO .1 <- 'V"':1~:1'~#1"$#1'~#3
DO (3) NEXT
PLEASE DO (5) NEXT
(3) DO (2) NEXT
PLEASE GIVE UP

So to business and in particular we’re going to compile and run a program that prints out prime numbers. J-INTERCAL runs from the command prompt so Select Run… from the Windows Start menu, enter ‘cmd’ into the Open box in the Run window before clicking on OK. Then, at the prompt in the command line window, type ‘cd c:\jintercal-0.12\samples\’ and you’ll notice that the prompt will change to reflect the new default directory which is, in fact, the one where you’ll find an INTERCAL source file called primes.i. To compile it, type ‘Java intercal.Compile primes.i’, noting the capital C in ‘Compile’. All being well it will create the Java class file primes.class that you’ll be able to see if you type ‘dir’ at the prompt to list all the files in the folder. Now to run it, type ‘Java primes’ and you’ll see prime numbers flash down the screen expressed as Roman numerals which is INTERCAL’s standard form of output.

Brainfuck

INTERCAL programs are long and convoluted, aided and abetted, to no small degree, by the requirement to write polite programs with sufficient PLEASE statements included. Not so with the inappropriately sweary Brainfuck. Its programs couldn’t be more different. The aim was to implement a language with the smallest possible compiler – the compiler we’re using is just over 2Kbytes in length (yes, Kbytes, not Mbytes) and the record is somewhat less than 200 bytes. This required simplicity and despite the fact BF is Turning complete, meaning that it can perform any computation that “serious” languages can perform, it has just eight instructions, each of which is represented by a single character. That doesn’t make for the most readable program – so again you’ll reach guru status if you can master it – but it does mean that we can teach you the language in its entirety.

There is no concept of named variables, as there is in most languages. Instead BF has a string of 8-bit memory locations and a pointer that records which of those locations the current instruction will operate on. Initially all the locations contain zero and the pointer is initialized to the left-most location. With that bit of background we can now introduce the eight instructions, which are:

+    Increment the value at the pointer
-    Decrement the value at the pointer
>    Move the pointer to the right
<    Move the pointer to the left
[    Start of loop
]    End of loop (exit if value at pointer is zero)
,    Input an ASCII character and store it at the pointer
.    Print the ASCII character at the pointer

Of course a simple instruction set invariably means a complicated program so the simplest of operations, that might be achievable in a single instruction of a conventional language, can take dozens of instructions in BF. As an example we’re going to create a program that accepts two single digit numbers as its input and outputs their sum. The program to do this is as follows and, despite the fact it has 30 instructions, it still only works correctly if the answer is represented by a single decimal digit:

, > + + + + + + [ < - - - > - ] , [ < + > - ] < .

Your first job is to create a file containing the code showed above using Notepad. Since the space character isn’t a valid instruction it’s ignored and although we put a space between each character to make the code easier to read, you can leave them out. Note also that the full-stop at the end is part of the program. Call the file add.b and place it in the c:\bfd100 folder. Actually Notepad will try to give the file the name “add.b.txt” so you’ll have to rename it in Windows Explorer.

Now start up the command line window and change the directory to c:\bfd100\ – if you’re not familiar with command line prompts we did something very similar when we started to use INTERCAL. At the prompt type ‘bfd add.b’. BF will respond with the message ‘File assembled’, and if you do a directory listing you’ll see that the file add.com has indeed been created. This is a DOS executable file so all you have to do to execute it is to type ‘add’ at the prompt. Now type in your two one-figure numbers (with no space or punctuation between them) and the program will display their sum, immediately after the input, again without a separating space.

Now a slight aside. To be quite honest, of the three languages here, BF is the only one that you might want to delve into. After all, it’s quite an interesting language in its own way, in contrast to the others which are, quite frankly, plain dumb, and that’s being charitable. So to start you on your voyage of discovery, let’s see how the simple program above manages to add together two numbers.

The comma reads the first of the two figures and places it where the pointer is positioned which is, initially, in the left most memory location. However, the value read is an ASCII character which, for the figures 0 to 9, are the codes 48 to 57 so, to yield the actual number represented, we need to subtract 48. That’s achieved with the rest of the code up to but not including the second comma. It does that by moving the pointer to the right and incrementing that memory location six times so that it contains the value 6 which will then be used as a loop counter. Next it enters a loop that decrements the ASCII code eight times and the loop counter once. Since this loop will execute eight times, and each time it will subtract six from the ASCII code, when it does exit 48 will have been subtracted from the value input. The second comma inputs a second ASCII code which, because of the position of the pointer, will be stored one location to the right of the first value and again this will be used as a loop counter. The second loop causes the first value to be input (now decremented by 48) to be incremented as many times as the value of the second ASCII code input. When the loop exits, the value in the left-hand memory location (which is a valid ASCII value for a digit since we only subtracted 48 from one of the input values) is printed out.

BF commands might be terse but that doesn’t mean that programs can’t be made readable. Since all but the eight characters representing instructions are ignored, comments can be placed anywhere, as the following program shows.

===INPUT NUMBER===
+      cont=1
[
-      cont=0
>,
======SUB10======
----------

[      not 10
<+>     cont=1
=====SUB38======
----------
----------
----------
--------

>
=====MUL10======
[>+>+<<-]>>[<<+>>-]< dup

>>>+++++++++
[
<<<
[>+>+<<-]>>[<<+>>-]< dup
[<<+>>-]
>>-
]
<<<[-]<
======RMOVE1====
<
[>+<-]
]
<
]

Java2K

Unlike our previous two languages which were supported by compilers, Java2K is implemented as an Integrated Development Environment (so it’s a bit of a mystery why it’s referred to as DIE for Win32 instead of IDE). But before you get too excited, this doesn’t mean a fancy integrated editor and all the works, it just means that immediately after compiling the code it runs it. To start it just double click on the Java2K.exe icon in the c:\java2k\ folder it’ll open in a command line window and announce its presence with the rather puzzling statement “ELVIS HAS LEFT THE BUILDING AT 0.0.1900 <chair>:”. To see it in action just type the name of one of the sample Java2K programs supplied, say “26”, and you’ll see the output which, in this case, is the letter “F”. Having seen something of the astonishing power of this remarkable language you’ll be eager, no doubt, to try out more of the sample programs. However if, for the moment, you can get over your understandable excitement, we’ll first take a look at Java2K behind the scenes.

Like INTERCAL and most other languages, but unlike BF, Java2K has operators that work on variables. Like BF, Java2K is obscure in the extreme but whereas in the case of BF that was by necessity (i.e. to achieve the goal of producing a tiny compiler), in the case of Java2K it’s by design. First of all, where most languages use decimal numbers, perhaps with the option of binary, octal or hexadecimal, Java2K uses numbers to the base 11 which, as the manual points out, is close enough to decimal. Because base 11 numbers require an additional digit to the usual 0-9, Java2K uses 0-9 plus space. The upshot of this is that since a space will be interpreted as the number ten, spaces can’t be used just to make programs more readable. Second, function names are numbers rather than words, and so too are the names of variables. So you can forget, for example, of using meaningful variable names such as “Total” or sensible instruction names such as “Print”. In the case of this latter instruction Java2K uses the instruction “1 1 “ (note the two spaces, after all this is a base 11 number) instead. And finally, on the subject of obscuration, because numbers are interpreted as functions or variables, you can’t use them as numerical constants. Instead, if you want to refer to the number one, you have to use some function that will produce 1 as its output. The classic way of doing this is to use the code “11 6/*/_\”. If we point out that “11 6” is the divide function, “*” returns a random number, “_” repeats the previous argument, “/” is a separator and “\” is an end-of-instruction marker, it should be clear that this will produce a 1. Surprisingly, then, this statement isn’t quite correct as we’re about to see.

1 1 /125 /131 /119 /125 /11 6/*/_\/_\/125 /13 2
/*/_\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2
/*/_\/_\\/119 /125 /11 6/*/_\/_\/125 /13 2/*/_\
/_\\\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/
_\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/
_\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/
_\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/
_\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/
_\/_\\/119 /125 /11 6/*/_\/_\/125 /13 2/*/_\/_\
\\\\\\\/*\1 1 /125 /119 /11 6/*/_\/13 2/*/_\\/
125 /131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/_\
/_\\/119 /125 /11 6/*/_\/_\/125 /13 2/*/_\/_\\\
/125 /131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/_
\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/_
\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/_
\/_\\/131 /119 /125 /11 6/*/_\/_\/125 /13 2/*/_
\/_\\/119 /125 /11 6/*/_\/_\/125 /13 2/*/_\/_\\

Using the Java2K IDE (sorry, DIE) run the program 13 which is supposed to display “Hello, World”. We’ve included a small chunk of it above. Run it a few times and you’ll probably notice something odd – it doesn’t always get it right. The reason for this is that unlike virtually any other language, Java2K is a probabilistic language rather than a deterministic one so all its functions generate the “correct” answer only 90% of the time; for the remaining 10% it will give a random result. So the method of generating a one that we saw above only has a 90% chance of success. And that’s just for generating a one. The obvious way of generating a two is to add two ones together using the code “125 /11 6/*/_\/_\” but we’re now introducing another instruction that also has a 90% chance of success so the combined likelihood of getting the expected result drops to 81%. In this light of this you might find it surprising that the program 13 manages to produce “Hello, world” as often as it does.

The fact is that there are clever tricks that Java2K programmers can use to improve a program’s success rate but the result is that even the simplest of programs can be extremely long, not to mention virtually incomprehendable. As proof of this why don’t you take a look at program 13 using Notepad. Having done so we suggest that you use the experience to convince yourself that there are better ways of spending your time than attempting to learn Java2K. If you choose to ignore this advice you’ll find the programming manual, in all it succinct glory, at www.p-nand-q.com/humor/programming_languages/java2k/manual.html but we won’t be responsible for the consequences.

Tags: acronym, API, business, Development, device, directory, Discovery, Environment, memory, requirement, sla, space, type, Windows, XP
Jun 15

Online apps let you become more productive on the move, doing away with software installation entirely.

Thanks to the ubiquity of internet access, web-based applications are taking off like never before. Beyond the realms of Twitter and Facebook lurks a fresh and vibrant world of online software that’s designed to run anywhere on our connected planet.

As the distinction between computers, mobile devices and the internet continues to blur, web applications are coming into their own, becoming globally important services. These are sites that do one useful thing and do it well.

But sites promoting applications have been around for donkey’s years, you might say. What’s the difference between a web app and an application that’s available for download on the web? Well, web apps are applications that run over the internet. So unlike the free utilities hosted on Sourceforge or similar, there’s no download, installation or configuration to carry out, nor hours of frustration to endure while you try to find the right libraries to compile them. Just point your browser at the relevant website and it will do the rest.

Outside of the box

Freed from the restrictions of an operating system’s windowing subsystem, software designers can allow their imaginations to run riot. Interfaces that owe more to high-tech thrillers than to Windows, Linux or Mac OS X are beginning to appear. Also emerging are more intuitive drag-and-drop interfaces that require at most a few seconds of exploration to get you going. Software use is slowly evolving and becoming as much about discovery and experimentation as it used to be about reading manuals and clicking options.

In this special roundup, we bring you 10 cool web apps that all share these traits. It’s a diverse bunch, ranging from future essentials to those that you’ll need infrequently. They all exhibit the sort of rich functionality that is beginning to appear through the medium of web browsers, and remove the need to download and install an application suite. If you want something, it’s probably already been written, and so we’ve also included a site that will help you to find other incredible web applications. Happy browsing!

Newsmap

Newsmap is a global news aggregator site like no other, and it’s almost guaranteed to get people peering over your shoulder as you use it. The app presents a page covered in blocks of different sizes. Each represents a story, coloured by subject. Newsmap takes input from news feeds and then gives the stories that are more prominent bigger boxes on-screen, a little like a tag cloud. Simply move your mouse over a story to see its details and a link to the original article.

PC Plus Verdict: 4/5

Instapaper

Instapaper is a way of bookmarking long web pages so that you can read them when you have time later on. The URLs are stored in Instapaper’s central database, so you can access them from anywhere. A range of iPhone apps support it, as does the Kindle, making it flexible and a great way of keeping hold of interesting things to read on long journeys. To use Instapaper, drag and drop the ‘Read Later’ icon onto your toolbar. When you subsequently find a page you want to save, just click the icon.

PC Plus Verdict: 4/5

Lovely Charts

There are plenty of times when you need access to some good chart-drawing software for just half an hour. However, it’s usually supplied as part of a far larger application. Lovely Charts is different. It’s a free web app that creates some very lovely charts indeed. After signing up and creating a new document, you simply drag and drop symbols and connectors from a range of predefined types to create the chart you want – anything from a simple flowchart to a complex route map.

PC Plus Verdict: 4/5

Bing Visual Search

Bing’s Visual Search capability is still in beta, but it’s already showing promise as a new way to search the expanding universe of information out there. On the main Bing page, click the ‘Visual Search’ link. Search categories are organised into galleries, and everything is point-and-click. Instead of typing in your search term, you simply click the relevant picture. The list of galleries is still small, but it’s an interesting glimpse of what could be to come.

PC Plus Verdict: 3.5/5

Fonolo

Calling Fonolo a work of genius is perhaps a little strong, but if you’re heartily sick of wading through phone menus to talk to a human being then it probably comes close. Fonolo walks you through company phone systems to find a human voice. If a company isn’t listed, you can add your own, and test the service by calling special test hardware set up by the developers. Ideal for Skype users, Fonolo’s is also available for the iPhone, which should see its popularity rise further.

PC Plus Verdict: 4/5

Netvibes

Netvibes allows you to create what it calls a dashboard for your interests. Unlike a simple RSS feed reader, the app has a large number of widgets that present feeds from your favourite sites in a highly editable form, making it very customisable. Netvibes is also partly a social-networking service. People can follow you and read your public page if their interests are the same as yours. For the sake of privacy, you can also set up a private page with feeds that only you can see.

PC Plus Verdict: 4/5

Floor Planner

People are crazy about home improvement at the moment, but good, free planning software is hard to find. The free version of Floor Planner allows you to create a plan, make specific rooms and then decide where to place the windows, doors and any of a large number of items of furniture. You can inspect your work in 3D from any angle to see exactly how your ideal home would look. You can then save your work and send it straight to your architect – easy peasy!

PC Plus Verdict: 4/5

Wakoopa

The brainchild of Dutch founders Wouter Broekhof and Robert Gaal, Wakoopa is a social-networking site that is designed to help its users discover new web apps and other software they might enjoy. It does so by first searching for people that use the same apps and installed software as you do. It then finds the software they use but you don’t, and which they rate highly. These it recommends to you. But how does Wakoopa know what software you and others use? A downloadable tracker monitors the sites you visit and the installed applications you use.

Every 15 minutes, it sends this information to your Wakoopa profile for those on your contacts list to take a look at. When your contacts search for new apps, this information is cross-matched with their own to generate a selection of software recommendations picked especially for them.

It’s a simple idea, and one that lets you explore an ever-expanding universe of web apps and installable applications and utilities without ever having to spend hours scouring the web for information – plus you know that none of the programs will turn out to be malware.

Explore and amaze

Once the tracker is installed, right-clicking on the Wakoopa icon in the system tray enables you to suggest a new application that others may like to try. To keep the underlying database free of spam, any suggestions you make that aren’t either installed apps or something that runs in your browser will not be accepted.

When you find a particularly intriguing application in Wakoopa that you’ve never heard of before, clicking on its symbol opens a page giving its details, alternatives that you might like to try and – perhaps most importantly – both good and bad comments from its existing users. This enables you to quickly make decisions about whether to use the app without the frustration of downloading and installing it, only to later discover that it’s not for you.

As well as relying on custom recommendations generated via your contacts list, you can also use the Wakoopa search box to simply enter an application field, making software experimentation as easy and hassle-free as it could ever possibly be.

PC Plus Verdict: 4/5

RescueTime

You’re in the middle of writing an important email but the right words won’t come, so you decide to spend a couple of minutes reading your friends’ statuses on Facebook to clear your head. By the time you’re finished, you fancy having a look at what the celebrities on Twitter are up to. News doesn’t read itself, so it’s off to the RSS feeds next, stopping on the way back to drop by a hobby forum. Armed with more coffee after posting a detailed rebuttal of another forum member’s argument, it’s time to check Facebook again for any replies, and perhaps to glance at Twitter again to make sure that Stephen Fry hasn’t unexpectedly returned. What began as a break to clear your head has somehow blossomed into over an hour of wasted time.

With so many cool new web apps appearing, distractions can only get worse. Some are great for getting things done, but without that vital pinch of self-control, we risk becoming ever busier while paradoxically achieving far less. RescueTime promises to show you how you spend your time online, and also to help you develop the increasingly important skill of self-control.

After installing a Data Collector plug-in, you tell RescueTime the three most distracting and three most productive things you do online. Data Collector then logs the time you spend using your local apps as well as the websites you visit, and can even monitor which of your browser tabs is active. You can also tell it to ignore the time you spend away from the PC so that you get an accurate view of your working day.

Once the Data Collector plug-in has gathered enough data, you can go to your RescueTime account and view detailed reports containing information on everything from the sites you visit to how efficiently you use your time based on how you categorise your activities.

The personal Solo Lite version of the service is free. The paid-for Solo Pro edition ($6 to $9 a month) allows you to block unproductive websites when you visit them too much, and alerts you when Data Collector notices you’re spending too much time dodging work. But you don’t need to splash out: the free service provides a fascinating insight, and helps you to learn a skill that will surely become as essential as using a search engine.

PC Plus Verdict: 4/5

Tags: application, apps, Computer, computers, database, developers, device, Discovery, email, facebook, functionality, Hardware, information, interface, Internet, iphone, linux, Mobile Devices, network, Networking, Personal, Software, Spam, system, system tray, type, web, web application, web applications, widgets, Windows, XP
Jun 14

Linux doesn’t have a CEO. Consequently, there’s no annual keynote hosted by a charismatic alpha male. But if it did, and if there were a conference covering the first half of this year, the first speech would start with three words: ‘Linux is winning’.

Firstly, a market research firm in the US called The NPD Group revealed that sales of Google’s Android platform overtook those of Apple’s iPhone in the first quarter of 2010, propelling itself into second place behind the waning RIM. Android is becoming increasingly competitive, spanning both the smartphone and the emerging tablet markets, with devices from Dell and HP on the near horizon. This might be why Apple has started a patent infringement lawsuit against HTC, using many of its Android-based phones as physical exhibits in its litigation.

Secondly, Google announced its intention to open source the VP8 video codec. This was acquired when it bought On2 earlier in the year and it will be used alongside Vorbis and the MKV container to create Google’s WebM video format. This is vitally important for Linux. The nascent H.264 format, as used by Apple and many HTML5 video streams, is encumbered by patents, and current open-source implementations live under the shadow of legislation. VP8 and WebM have the potential to match it for quality, and while WebM will undoubtedly attract similar litigious trouble, having an umbrella the size of Google should satisfy many Linux distributions, especially when Mozilla, Opera and Adobe have already pledged their support.

Finally, the UK’s new coalition government has published its Programme for Government. There are two points in the section on Transparency that are great news for free software. One states, “We will create a level playing field for open-source software,” while the other adds, “We will ensure that all data published by public bodies is published in an open and standardised format, so that it can be used easily and with minimal cost by third parties.” If these promises come true, it will transform attitudes to open-source software and Linux, and hopefully open the door for its use within government and schools, two areas where it’s ideal.

Many of us used to think that for Linux to be judged a success, it had to be installed and running on more desktop computers than Microsoft Windows. And there are great swathes of Linux users who still feel the same way. But the world of computing has changed. There’s more than one way of judging the success of something that started as just a good idea.

Windows, Linux and OS X are survivors. They’ve lasted this long because they exist within their own ecosystems. Linux, for example, is fed by a curious mixture of enterprise investment, embedded hardware vendors and a community brimming full of zealous commitment. There’s a low-cost threshold to entry and a subsystem that maintains itself with very little investment. It’s these factors that have shaped how it looks, how it feels and how it’s operated.

The ecosystems inhabited by both Microsoft and Apple are equally well-adapted to their environments. The former is the domain of the utilitarians, offering straight functionality for an up-front price. The latter is an increasingly important fusion of fashion and function. But things have changed. The borders between the ecosystems have become indistinct. Apple has surpassed Microsoft in market value, winning thousands of new fans through it’s no-fuss interfaces and lower prices. There’s a shift in the balance of power.

And thanks to Google, Linux is becoming less free and less open, proving that in the new markets where it’s having the most commercial success, it’s becoming more like Apple. ROMs are encrypted and need to be rooted for user-hacking, third-party applications have to be sold through a single vendor and personal information is held in the cloud by a sole provider. If Linux wants a taste of similar success, it might find it if it makes similar concessions to a user’s freedom.

But then we’d have failed. The Linux ecosystem would have become too polluted, bogged down by sponsored kernel additions, paid-for support and short life cycles. It may be a commercial success, but no longer an active one. Our hypothetical CEO might make further compromises, and make judgements against the interest of Linux users. Which is exactly why we don’t have a CEO, and exactly why the success of open-source software is so difficult to judge using the same language as its competitors.

Tags: Apple, application, ceo, Computer, computers, Computing, desktop, device, embedded, Environment, functionality, google, Hardware, implementation, implementations, information, interface, iphone, linux, microsoft, Microsoft Windows, patent, Patents, Personal, Research, sla, Software, system, third parties, web, Windows