The content on this site is my own and does not necessarily represent my employer’s positions, strategies or opinions.
- I’ve been playing around with Swift, the new programming language from Apple, for a few days and I’ve been quite …
- The Supermoon over Cranberry Lake, New York, in the New York Adirondack Mountains on 11 July, 2014.
- Yesterday IBM and Apple made an important announcement about partnering to significantly growth the use of mobile via Apple devices …
Several years ago I spent quite a bit of time in Second Life when it was the hot 3D social world. The promise was that you could build and visit worlds that had been uniquely constructed by the users. As such, it was dynamic environment that tended to be slow as all the shapes, buildings, and textures were loaded.
People can customize their in-world presences extensively, from body shape to the clothes and decorations worn. Indeed, you don’t even need to look like a person. Note, however, that you probably should not show up to a business meeting in in the form of a squirrel, as my now-retired colleague Irving Wladawsky-Berger once said.
Over time, Second Life fell out of fashion as a world where businesses could set up sites where clients or interested people could visit, learn about products or services, and talk to real people, albeit in avatar form.
For internal business meetings, the lack of truly secure conversation was a problem. We used teleconferences for the voice, and Second Life for the environment. As meetings went on, participants often went inactive, or fell asleep, in Second Life, and we were back to phone meetings as usual.
Second Life lives on today as a social world. That’s never been much of an interest to me, but to each his or her own. It seems to be quite vibrant across a broad range of what “social” means.
My interest in it was always more in the construction aspects, and I’ve written extensively about the techniques involved. See Building in Second Life, By Example. I still get many links to this site from people looking to build moving doors, for example. I also had a long series of blog entries about how to do things in Second Life called My Second Life. Note that this is from 2006, so it is getting a bit old.
You can see all my writings on Second Life by going to the top of this page and entering “second life” in the search box on the right side.
Here is the net for me with Second Life: it is too expensive to be as slow as it is, especially if I only want to use it as an advanced 3D building environment. While new ways of building objects have been introduced, it’s hard to see a lot of difference from the way it was five years ago. I still visit from time to time, but I own no land and spend no money there.
OpenSimulator, or available.for short, is a reimplementation of the Second Life server in open source. It is written in C#, so requires Windows or the Mono environment on Linux. It does not include a browser, but several are
Other than the OpenSim site itself, the best source of information about the technology and the worlds built with it is Maria Korolov’s Hypergrid Business. It is excellent.
Some of the features of OpenSim include:
- an active development community
- better in-world programming options
- the ability to host a world on your own computer, which is completely free
- many online paid hosting options
- the ability to connect your world to several choices of “grids,” or collections of worlds
- teleporting from one world to another across a grid
This means that I could set up a world on my local computer, do all the building I want on it, save an image, and then transfer it to a hosted server. If you can and want to connect your computer to the Internet, you can host your world from there and have others visit it.
To see a modern use of OpenSim, read the article $250,000 project models cities in OpenSim.
Some of the potential downsides are:
- hosting providers come and go, though some have been around for years
- it may be more difficult to find assets you need at the quality you want, for example textures, but there are guides for finding free content
- it is probably best if you have some technical chops or know someone who does
So Second Life costs money to own land and to buy some assets, and is more restrictive. OpenSim and the worlds and grids associated with it provide more freedom, but you are more on your own and there might be some long term risks related to hosting. For me, the freedom is worth the risk.
In 2010 I wrote a blog entry called Virtual Life with Linux: Standalone OpenSim on . I’ve recently gone through the experience of doing this on Ubuntu 13.10. I’ve published some notes on what I did this time to install on my pc in 9.10Virtual Life with Linux: Standalone OpenSim on Ubuntu 13.10.
I’ve been coding, a.k.a programming, since I was 15 years old. Since then I’ve used many programming languages. Some of them have been for work, some have been for fun. I mean, really, who hasn’t done some programing while on vacation?
Somewhat chronologically, here are many of the languages I’ve used with some comments on my experience with them. In total I’ve written millions of lines of code in the various languages over four decades.
Basic: This is the first language I used. While primitive, I was able to write some long programs such as a Monopoly game. In between coding sessions, I saved my work on yellow paper tape. I fiddled with Visual Basic years later, but I never wrote anything substantive in it.
APL: Now we’re talking a serious language, and this is still in use today, particularly by one statistician in my group at . I was editor of the school newspaper when I was a senior in high school and I wrote a primitive word processor in APL that would justify the text. It sure beat using a typewriter. Some modern programming languages and environments like R and MatLab owe a lot to APL. They should mention that more.
FORTRAN: My first use of this language was for traffic simulations and I used a DYNAMO implementation in FORTRAN in a course I took one summer at the Polytechnic Institute of New York in Brooklyn. Forget interactive code editing, we used punch cards! FORTRAN was created at Research, by the way.
PDP 11 Assembler: I only took one Computer Science class in college and this was the language used. Evidently the course alternated between using Lisp and Assembler and the primary language in which the students wrote. However, our big project was to write a Lisp interpreter in Assembler which got me hooked on ideas like garbage collection. No, I did not and do not mind the parentheses.
csh, bash, and the like: These are the shell scripting languages for UNIX, Linux, and the Mac. I’ve used them on and off for several decades. They are very powerful, but I can never remember the syntax, which I need to look up every time.
Perl: Extraordinary, powerful, write once and hope you can figure it out later. Just not for me.
PL/I: Classic IBM mainframe language and it saved me from ever learning COBOL. When I was a summer student with IBM during my college years, we used PL/I to write applications for optimizing IBM’s bulk purchases of telecommunications capacity for voice and data. It was basically one big queuing theory problem with huge amounts of data. It was big data, 70s style.
Rexx: This language represented a real change in the way I viewed languages on the mainframe. Rather than being obviously descended from the punch card days, it was a modern language that allowed you to imagine data in more than a line-by-line mode, and help you think of patterns within the data. It was much easier to use than than the compiled languages I had used earlier. My primary use for it was in writing macros for the XEDIT editor.
Turbo PASCAL: This was my main programming language on my IBM PC in the 1980s. The editor was built-in and the compiler was very fast. I used it to write an interactive editor like XEDIT for the mainframe with it, as well as a Scheme interpreter.
Scheme: A very nice and elegant descendant of Lisp, was considered an important programming language for teaching Computer Science. That role has been largely usurped by Java. I liked writing interpreters in Scheme but I never did much actual coding in it.
VM Lisp: This was a Lisp dialect developed at IBM Research for mainframes. My group led by Dick Jenks there used it as the bottommost implementation language for computer algebra systems like Scratchpad, Scratchpad II, and Axiom. Like other Lisps this had two very important features: automatic garbage collection and bignums, also known as arbitrarily large integers.
Boot: An internal language at IBM Research built on Lisp that provided feature like collections and pattern matching for complex assignments. It had many advantages over Lisp and inherited the garbage collection and bignums. From time to time I and others would rewrite parts of Boot to get more efficient code generation, but the parser was very hard to tinker with.
Axiom compiler and interpreter languages: The IBM Research team developed these to express and compute with very sophisticated type hierarchies and algorithms, typical of how mathematics itself is really done. So the Axiom notion of “category” corresponded to that in mathematics, and one algorithm could be conditionally chosen over another at runtime based on categorical properties of the computational domains. This work preceded some later language features that have shown up in Ruby and Sage. The interpreted language was weakly typed in that it tried to figure out what you meant mathematically. So
x + 1/2 would produce an object of type
Polynomial RationalNumber. While the type interpretation was pretty impressive, the speed and ease of use never made the system as popular as other math systems like or .
C: Better than assembler, great for really understanding how code translates to execution and how it could get optimized. Happy to move on to C++.
C++: Yay, objects. I started using C++ when I wrote techexplorer for displaying live TEX and LATEX documents. I used the type system extensively, though I’ve always strongly disliked the use of templates. Several years ago I wrote a small toy computer algebra system in C++ and had to implement bignums. While there are several such libraries available in open source for C and C++, none of them met my tastes or open source license preferences. Coding in C++ was my first experience with Visual Studio in the 1990s. The C++ standard library is simply not as easy to use as the built-in collection types in , see below.
SmallTalk: Nope, but largely because I disliked the programming environments. The design of the language taught me a lot about object orientation.
Java: This is obviously an important language, but I don’t use it for my personal coding, which is sporadic. If I used it all day long and could keep the syntax and library organization in my head, that would be another story. I would be very hesitant to write the key elements of a server-side networked application in something other than Java due to security concerns (that is, Java is good).
Ruby: Nope. Installed many times, but it just doesn’t make me want to write huge applications in it.
PHP: The implementation language for and , in addition to many other web applications. If you want to spit out HTML, this is the way to do it. I’m not in love with its object features, but the other programming elements are more than good enough to munch on a lot of data and make it presentable.
Objective-C: Welcome to the all world, practically speaking. It hurts my head, but it is really powerful and Apple has provided a gorgeous and powerful library to build Mac and iOS mobile apps. My life improved when I discovered that I could write the algorithmic parts of an app in C++ and then only use Objective-C for the user interface and some library access.
Python: This is my all time favorite language. It’s got bignums, it’s got garbage collection, it’s got lists and hash tables, it can be procedural, object-oriented, or functional. I can code and debug faster than any other language I’ve used. Two huge improvements would be 1) make it much easier to create web applications with it other than using frameworks like Django, and 2) have Apple, , and Microsoft make it a first class language for mobile app development.
Last October, the Harvard Business Review published an article called “Data Scientist: The Sexiest Job of the 21st Century.” I could virtually hear the rejoicing in the work hallways of analysts, mathematicians, statisticians, and computer scientists everywhere. At last, recognition!
While it is debatable in this case if the job really is sexy or even hip and will make you either, there’s really no question that the rise of analytics and big data are making these skills increasingly in demand. Is this the right job for you?
A good place to start to understand what is needed to be a data scientist is at the INFORMS Analytics Certification website. It costs money to get this, but the program information gives you an idea of the kinds of questions on the test, the sorts of case studies with which you should be comfortable, and the books and websites you can use for further learning.
In a more informal way, let me here ask some questions you should answer about yourself and your knowledge to see if this is a career or job you might consider. I’ve included a few technical questions to encourage you to learn more about some of the disciplines involved.
- Do you suffer from math anxiety? Does solving equations, working with matrices, or making sense of table or graphs scare you? If so, this probably is not the field for you.
- Are you comfortable with statistics? Could you in your spare time over the next month do what would equate to a first, solid, mathematically sound statistics course? Would you get an A for your efforts? You’ll need statistics to understand the data and to give yourself sanity checks about the conclusions you are drawing.
- Is Excel or OpenOffice Calc your favorite tool in your office productivity suite? Doing real analytics and big data often goes well beyond what you can do in a spreadsheet, but if this kind of software terrifies you, data science might not be a good match.
- Do you know how services like Netflix choose what movies you would like to watch? Make an educated guess and then go learn some of the techniques. I won’t give you a reference, go explore what you find on the net.
- Do you understand the differences between descriptive, diagnostic, predictive, and prescriptive analytics? Where does optimization fall among these?
- Do you like saying the word “stochastic”? Do you know what it means?
- Who was Andrey Markov and what was his obsession with chains?
- What criteria and analysis would you use to predict who will win the next World Series, Super Bowl, or World Cup?
- Under what situations would you use Hadoop, Hive, HBase, Pig, SPSS, R, or CPLEX?
- How would you go about constructing your personal profile from all the public data about you on the web? This could be from yourself (e.g., your feed) or produced by others. Include your gender, your approximate age and income, the town in which you live, the high school to which you went, your hobbies, the name of your significant other, the number of children you have, your favorite color, your favorite sport, your best friend’s name, and the color of your hair. Does this scare you?
- When can Twitter add to your insight about marketing campaigns and when does it just add unnecessary noise?
This is by no means an exhaustive list, but if these topics intrigue you, you have or are willing to get the technical background, and you know who Nate Silver is, you just might have a career in data science.
Todayannounced some important enhancements to its Mobile strategy for supporting customers looking to grow and transform their businesses, whether they are B2C, B2B, or B2E.
IBM Advances Mobile Capabilities with Acquisition of Worklight
From the press release:
In a move that will help expand the enterprise mobile capabilities it offers to clients, IBM today announced a definitive agreement to acquire Worklight, a privately held Israeli-based provider of mobile software for smartphones and tablets. Financial terms were not disclosed.
With this acquisition, IBM’s mobile offerings will span mobile application development, integration, security and management. Worklight will become an important piece of IBM’s mobility strategy, offering clients an open platform that helps speed the delivery of existing and new mobile applications to multiple devices. It also helps enable secure connections between smartphone and tablet applications with enterprise IT systems.
IBM Announces New Software to Manage and Secure the Influx of Mobile Devices to the Workplace
From the press release:
IBM today introduced new software to help organizations better manage and secure the explosion of smartphones and tablets in the workplace, while also managing laptops, desktops and servers.
IBM Endpoint Manager for Mobile Devices helps organizations support and protect the growing mobile workforce. Through this software, firms can use a single solution to secure and manage smartphones and tablets, as well as laptops, desktop PCs, and servers. It managesiOS, , Nokia Symbian, and Windows Mobile and Windows Phone devices.
The software extends security intelligence to deal with the growing threats from mainstream adoption of the BYOD trend. Organizations can install the IBM software in hours, remotely set policies, identify potential data compromises and wipe data off the devices if they are lost or stolen. The software helps configure and enforce passcode policies, encryption and virtual private network settings.
Why I think this is important
After spending the last several months speaking with customers, I’ve concluded that 2012 will be a very significant year for Mobile in the enterprise. I think this is the year when customers will decide on the mobile platforms and tools that will carry them into the middle of the decade, and begin to discard earlier experiments.
The old category of MAP or MEAP (Mobile Application Platform or Mobile Enterprise Application Platform) is not sufficient anymore. Customers need everything to build, run, connect, manage, and secure mobile applications. Remember that we’re not just talking about the apps on the devices (and there are many devices), but also the backend server infrastructure necessary, and this needs to be enterprise-ready. By this I mean that it needs to scale and you must be able to integrate it with the services, applications, processes and data that are essential to your organization.
Therefore the modern Mobile platform needs device-side and server-side application development and lifecycle tools; support for multiple devices and mobile operating systems; mobile application an device management; security capabilities from the devices all the way to the back-end; and scalable, transaction-capable connections to the IT systems on which your organization depends for its business. This is what IBM is demonstrating today in these strategic announcements in addition to its existing products and solutions.
Join me today in Tweetchats
I’ll be using Twiiter today for 2 one hour sessions to discuss these announcements with Scott Hebner, VP of Marketing and Channel Management for IBM Tivoli.
The first session is planned for 10:30 to 11:30 AM ET and the second for 1:00 to 2:00 PM ET.
Both sessions will use the hashtag #ibmmobile. Myname is @bob_sutor and Scott’s is @SLHebner.
You can follow us via your usual Twitter client or else use the Tweetchat tool at http://tweetchat.com/room/ibmmobile.
Also see these blog entries
- Thoughts on mobile management
- Mobile BYOD is not unbounded
- 10 predictions for enterprise mobile for 2012
- Employee mobile device + work = potential security problem
Yes, it’s that time of year of for predictions for what we might see in the next twelve months. Being in the IT business and in a company like, I’m somewhat hamstrung in what I can say regarding the future because of confidentiality, but here’s my attempt at some prognostications that won’t be giving away anything secret.
These are my personal predictions and not those of IBM.
- There will be a huge rush to fill the developing void being left by RIM and Blackberry, and smart enterprise CIOs will focus on security and management issues first.
- Although there seem to be 1 or 2 new entrants in the mobile device management area every week, potential customers will learn that it takes more than being able to call an API to wipe a device to give you enterprise credibility.
- The differences between mobile application management and mobile device management will become clear.
- Companies that develop multiple applications will understand that some will be web/HTML5 based, some will be native, and some will be hybrid. You don’t need to support just one kind and your application platform vendors shouldn’t force you to do so.
- CIOs will realize that the connection between mobile and cloud is overhyped. CIOs will realize that the connection between mobile and cloud is underhyped. That is, your use of cloud for mobile applications may not be in the way you expect today.
- Traditional networks that support web applications will need to be reconfigured and re-optimized to support an increasing amount of traffic from mobile devices. The number of interactions will dramatically increase, their length will be shorter, and significantly more asynchronous notifications from the server side will all drive a lot of R&D.
- While fans continue to claim world domination and keeps selling more and more iPhones and iPads, look for ‘s relative marketshare to start inching up.
- WebOS is done, but look for a new smartphone/tablet operating system to arise by late 2012 that will start to challenge RIM and Microsoft for the number 3 and 4 market positions.
- will have a serious tablet in the market by mid-2012 that will start to get some enterprise interest. The connection between that and the Amazon cloud will become clearer. The device may not be running Android.
- Apple will make changes to iOS to make it easier to support both personal and enterprise secure personalities on the same device. Yes, I know you can do this on Android today, but we weren’t talking about Android, were we?
Bonus: I will give up my Blackberry and get an Android smartphone for the first time (to complement my personal iPhone and).
I read with interest the recent announcement by AppMobi that they are producing a browser foriOS and eventually that will go beyond the basic HTML5 capabilities.
- InfoWorld: “Have your HTML5 and native app too”
- Press Release: “MobiUs is Here; the World of Web Apps Will Never Be the Same”
Hybrid apps are not pure native and not pure web, but bridge the gap in between. There are several ways of doing hybrid. PhoneGap is a popular open source technology for building hybrid apps, but there are others as well. You get to have all the display capabilities of a browser with the functionality of the underlying device.
Hybrid apps are not for every application design, but can do very well if there is a lot of network interaction, not too much necessary graphic performance, and whatever UI design you can handle in a browser with widgets coming from Dojo, jQuery, Sencha, or similar technologies.
The idea of this new browser is to include the PhoneGap and other APIs so you can write enhanced HTML5 apps with more access to the underlying features.
Is this interesting? Yes.
Does it cause people to think through the implications of native vs. hybrid vs. web? Yes.
Will people rethink app stores and how you can collect and manage apps that run in a browser? Yes.
Will it speed up development of HTML5 and mainline browser support for additional device features? Maybe.
Will this be the browser we are all using in 2 years? I really doubt it.
The web became successful because browsers became standardized. In the early days we had different browser functionality asInternet Explorer tried to set de facto standards and Netscape tried to use real ones. Eventually , Chrome, and Safari all supported web standards, more or less, and competed on speed and quality of rendering. IE eventually caught up though it is losing share as we speak.
So I applaud AppMobi’s attempt to push the envelope here on what can be done in a mobile browser, but I think the mainline mobile browsers will eventually set the standard for how HTML5 and agreed upon extensions work.
We don’t need certain apps to require particular browsers to work. Check out this story from 2005 where the US Federal Emergency Response Agency required people to use IE to apply for aid after Hurricane Katrina.
Also see: Ars Technica – “The end of an era: Internet Explorer drops below 50% of Web usage”
I’ve seen and heard a lot of discussion about how people build applications for mobile devices. While there are literally hundreds of thousands of apps out there for, , Blackberry and other smartphones, I can’t help but think the majority of these are one-off efforts. In this series in the blog, I’m going to tackle some of the issues with developing mobile apps, especially for enterprise use, and along the way propose some ideas for making the process easier and more repeatable.
I’m going to start this series by discussing the basic concepts of how you might develop an application for a smartphone or a tablet. I’m scoping it at this high functionality level and not looking at feature phones, at least not right now. I’ll use Apple as my primary example, but things are similar for other devices and mobile operating environments.
If you have an Apple Apple’s developer website and contains almost everything you need to start creating apps. Like any software you plan to use, make sure you read all the legal terms and conditions before you agree to them. If you work for a company, make sure your manager and local attorney also agree that you can use the SDK. This goes not only for Apple, but for , Blackberry, , or any other SDK provider.or an iPhone, many of the apps use the native software development kit, or SDK. It is available from
Most native apps on Apple devices are written in Objective-C, an object-oriented language. If you’ve developed software using C++, C#, or Java, Objective-C might take some getting used to. If you are comfortable with SmallTalk, however, it should seem much more familiar.
An Objective-C application is developed using the traditional write-compile-link-run-debug iteration, though the Apple XCode environment is quite powerful and makes this loop straighforward. Nevertheless, it is not a whole lot different from what programmers did 10 or 15 years ago. Objective-C is not a scripting language, is not interpreted, and on mobile devices you need to do your own memory management.
That said, when you create an app with a native SDK, you can use the very best and most powerful features on the device. You can optimize your app as much as you want and you have maximum control. This is very important for many software engineers. The app will be as functional, as beautiful, as secure, as bug-free, and as fast as you and your team can make it. It may also take you much longer to develop the app because you need to do all these things yourself.
Yes, the SDK makes your life easier, but it is still the case that when you go the native route you need to do more of the basic development yourself.
Here’s another important issue: if you write an app using a native SDK directly, you will essentially need to completely rewrite it when you use native SDKs for other devices. I say essentially because you may be able to write some of your apps non-UI program logic in C++ and re-use that for Apple, Android, and some other environments. There are some additional but similar tricks available.
To be on the safe side planning-wise, if you decide that you need to support multiple devices and you are using the native SDKs, assume that you or someone else will rewrite the app as many times as necessary to get the broad support you need. It is not uncommon to develop the first app for the iPhone and then outsource the creation of versions for other devices based on the original reference implementation. This can be expensive and time-consuming because you need a lot of people to get this done.
For some apps you will need to go the native SDK route for the reasons I stated above. If you do not have extreme requirements for look-and-feel, device functionality, or performance there are some other choices.
In future entries I’ll look are extending the native approach with libraries, something I call, oddly enough, “Extended Native.” I’ll also discuss the pure HTML5 web approach, and poke at the strange middle ground between Native and HTML5 called “Hybrid.” Tools that target multiple devices such as cross-compilers can also work, and I’ll get to them as well.
Next up: HTML5