Programming Languages

What programming language should I learn, a link I found on Twitter (like most of the other things I seem to find, nowadays) is a nice list and a good map for some one who is learning languages and looking for experimenting more.

I think for each language we can add a set of additional reasons – for example:

php – any work on mediawiki, drupal, joomla etc.
c# – any work on web parts, dotnet components, silverlight RIA
python – any work on django, nltk, machine learning, Plone, zope

In addition, I would add these languages. They are on my list to play around with and build a few prototypes (not sure when I get to them, though)

Boo – A python inspired language for writing DSLs (domain specific languages)
L Sharp or Lisp or Scheme – A list based language for learning programming
Squeak – A small talk based language for building delightful interactive applications
Berkeley Logo – For simulations, nothing beats this lisp inspired language
Prolog – for building logic programs and expert systems (though expert systems are fading away with machine learning based languages)
Haskell – Seems to be catching fire and may be one of the preferred languages for building multi-core apps
Erlang – Another language for building highly robust, scalable, multi-core apps
AIML – Artificial Intelligence Markup Language for buidling chat bots (even has a python AIML engine). Currently working with a student to build a chatbot for SugarCRM
SPARQL – A semantic web query language (easy if you already know SQL)
RDF and OWL – Not really languages in the conventional sense but I consider them as data languages

After writing all this, I decided to put this in my blog since it is worth remembering and updating them.

When I watch some videos on Lisp/Scheme, I understand why Lispers are so religious about their language. I have not seen more efficient/concise ways of solving problems or clarity of concepts.

InfoMinder Alerts – 20th Oct 2008

Some interesting links I got through my InfoMinder Alerts today. I will just add a teaser for each entry. Some of these are blogs. Others are announcements or wiki links.

The Future of Enterprise Software

We are at the beginning of a massive shift from client-server to web-based software in the enterprise.  This move will be even more dramatic than the move from mainframe to client-server.  The move to self-service distribution will lower sales costs and make comparable technology available to enterprises of all sizes on an eat-as-you-go basis.  Having all data in a centralized repository with open interfaces will lead to geometric increases in functionality as customers munge data and functionality together themselves or through third party developers (who will also have access to self-service platforms).

Finally, I predict that Salesforce.com (CRM) will have a valuation higher than SAP (SAP) in 5 years.  Today CRM is just under $8 billion in market value and SAP is just under $68 billion in market value.

What is hot in the Semantic Web Community (discovered through Planet-RDF)

Here are some of the topics that have already been put on the wish-list for the Semantic Wiki Mini-Series (source):

  • usability vs expressivity
  • community building
  • uncovering more implementations
  • HCI: navigation of large, high-dimensional knowledge spaces
  • e-science (especially pharma research & biomedicine)
  • semantic wikis and mashups
  • recommendation and personalization in semantic wikis,
  • knowledge representation (expresivity vs. simplicity)
  • how to make business subject matter experts able to enter, review and validate
    meaningful information without them having to learn new words
  • what dialect of OWL supported
  • integration of semantic resources (Protege / OOR / MW / …)
  • content quality
  • integration of external data
  • a semantic wiki & OOR session
  • experiences with distributed collaboration
  • server-side infrastructure to support semantic wikis
  • survey of semantic wikis for vertical domains (e.g. HCLS)
  • integration with other tools / linking wiki content to other apps

Motorola and the Android Social Networking Phone

Motorola, which is recruiting as many as 350 people to work on Android phones, is gearing up to make its first one:the Android Social Smart Phone. Last week, Android Guys spotted a job posting for the project, and now BusinessWeek has more details, including a mention of the Motorola job posting pictured at left on Monster looking for an Android application developer.

Five Ways to Google Proof Your Business

Google has acquired more than 50 companies, and it’s unlikely the spending spree will stop any time soon, as many of Google’s most recognized services came through acquisitions — including AdSense, Android, AdWords, Blogger, Gmail, Google Analytics, Google Docs, Google Maps, Picassa, and, of course, YouTube Inc.

But there are millions of businesses that will not be acquired by Google. As the saying goes, “Google has plenty of money, but you won’t get any of it.” The reality is, if you’re not one of the lucky chosen, Google can be both a competitor and a phenomenon that marginalizes your business model by making alternatives easy to find, or by turning your paid products into an advertising-sponsored free-for-all.

As an optimist, I’d prefer to think of Google as another arrow in the quiver to be used to expand your Internet business, drive qualifying traffic, improve your brand, and ultimately help support an exit (if you want to be rich) or a viable business model (if you’d rather be king) — or perhaps both.

There are several actions I’d suggest for those looking to make Google a weapon for positive gain. Many of these are mutually exclusive, but some combination warrants consideration for any online business

Design Considerations for Parallel Programming

Parallel programming has all of the correctness and security challenges of sequential programs plus all of the difficulties of parallelism and concurrent access to shared resources.

RDB to RDF Mapping (On Demand and ETL)

We expect cases favoring on demand mapping to be characterized by any of:

  • High rate of change of the data
  • Very large volume of data
  • Relatively straightforward translation between RDF and the data
  • Relatively few RDB’s being integrated.

We expect cases favoring ETL to be characterized by:

  • Large number of heterogenous sources of data
  • Complex application logic needed for transforming the data
  • RDF reasoning being performed on the mapped data
  • Queries with variables in class or predicate positions

LinkLog: Semantic Web

Semantic Web from A Chat with Dave Beckett

Semantic Web…it’s about connecting things together, about getting the jobs done

If every one uses the semantic web data formats, they all connect together.

I think data centric approach is better than API centric approach, because the data will live longer than APIs.

The Semantic Web in one slide from POWDER – Smarter Navigation On The Web

• Allows machines to process the meaning of data

• Data is distributed and extensible

• Machines can automatically deduce facts and relationships

• (which means you can offer users more of what they want and less of what they don’t want)

LinkLog: Enhancing the semantics of your web pages

A simple, easy to understand introductory video on RDF, triples, how to embed RDF in XHTML (known as RDFa)

  • A triple consists of subjects, predicates, objects
  • subjects and objects typically represent resources (people, places, events)
  • predicates represent relationships
  • A vocabulary provides a set of common (shared) understanding of relationships
  • You can embed RDF triples in a very simple easy way in your web pages, thereby enhancing the semantic content

This video is shortest simplest demonstration on how to do this:

[youtube=http://www.youtube.com/watch?v=ldl0m-5zLz4&rel=1&border=1]

Implementing an Innovation Process

I came across this nice blog on Innovation Process Framework, by Jeffrey Philips (via Innovation Weblog)

.innovationprocesssoftware.gif

The blog is a nice read and tries to outline a framework for Repeatable Innovation. Towards the end Jeffrey appeals to the readers to provide feedback.

If you care to, please comment or provide your feedback. I think if we practitioners, consultants and interested bystanders can create a consistent vision for the future of innovation and the tools and processes necessary for success, we can help our clients and business partners become more successful.

I have been experimenting with a few tools and some ad-hoc processes for innovation (in small product groups). So let me start out with a few tools and see how we can start putting together, elements of this framework.

You can start with any simple content management system (Drupal, Plone, Dotnet Nuke or even a Wikimedia engine).  It is also possible to use commercial portal products like Sharepoint, BEA or IBM portal servers. Let us see how we can go about building a prototype of the tools required to bootstrap your Innovation Process based on the framwork described by Jeffrey.

1. Trend Spotting

You can use several products that exist in the marketplace to track trends. The tools I list here provide you information to detect trends. Here is a list.

  • Google Alerts- A service to receive alerts based on certain keywords
  • InfoMinder - Our product to track specific web pages for changes (you can optionally specify filters) and receive notification. Unlike Google or alerts, InfoMinder is specific to the pages you want to track.
  • Digg, delicious, Techmeme, reddit or any of your favorite social bookmarking service (you can look for specific trends or retrieve information using tags)
  • Technorati or Google Blog Search tools
  • Tag Clouds (many of the services mentioned above provide tag clouds that tell you the more popular trends) or you can create your own tag clouds.
  • Google Trends – A product from Google that allows you to see trends based on searches
  • A set of high level Text Mining and Tech mining tools ( a subject that deserves almost a blog of its own)

A combination of these services and other customer serivces, can be used to perform trend capture. You need to figure out a way to make sense of trends from these different pieces of information (Trend Spotting). Fortunately many of these tools provide RSS streams or APIs. You can easily integrate them with several content management systems.

2. Generate Ideas

You can set up a workflow where people with the role of Generators, look at the captured trend information, combine it with other sources and generate ideas. These can be either stored in any relational database like MySQL, Postgres SQL.

3. Capture additional Information
In the system, Ideas are just a specific type of document with certain metadata like creator, date of creation, source of idea, description etc. It will be nice to add the capability for anyone to tag ideas. Based on tags and other criteria, ideas can be routed to Evaluators.

4. Evaluate Ideas
The evaluators can add comments, additional tags, classify the ideas to be further researched and send them back into the system. With each iteration, the circle widens. Ideas are further validated, combined with others or split into multiple ideas and put back into the system. Since Ideas trigger ideas, this process of combining and splitting will work well.

5. Develop and Launch

Stakeholders are found, prototypes built, ideas developed and launched as products/services.Your content management system can be used as a record keeper in this phase. In every step of the process from ideation to launch, it may be worth engaging small communities of users. Connecting to social tools like Twitter, Facebook, LinkedIn may be a good way to build and grow these communities.

6. Workflow/Process Automation

This is functionality built into several content management systems. Ideas can move from one stage to another (nascent, researched, validated etc.)

7. Idea Archetypes

One of the important aspects of the design of Idea Archetype is the progressive addition of information. Some ideas are listed here:

  • State – specifies the current stage of the idea. As it goes through the system, the state of the idea keeps changing
  • Strength – an indicator of the strength of the idea. As ideas float through the system and gather support, the strength can be progressively increased. Support increases this value and opposition decreases this value.
  • Next Steps – For each idea there can be a sequence of steps which can be started by the creator of the idea and collaboratively edited by others. For example, the legal department may add a patent search as a next step

8. Process Maps

Argument maps, Concept maps and other mapping tools can be loosely integrated (most of them export data in XML, JSON or CSV  format).

9. IdeaLogs

Ideas can also be published in blogs (private if they are meant for a small internal groups). Many portal products or content mangement systems come with their own blog software. You can also integrate some of the popular blogging software like WordPress.

10. Wikis as Collaborative Knowledge Bases

Wikis can be used as a knowledge bases to share, collaboratively edit and archive ideas. Wikis are alternative to idea archetypes,  mentioned earlier. Many of the wikis now provide templates for creating structured pages.

Any portal framework that supports content management, custom content types, workflow, collaboration, authentication can be used to jump start the Innovation Process in an organization. It is easy to bootstrap an innovation process using this framework and existing tools in a few weeks.

The best approach is to start with something as simple as a portal, set up some simple workflows, use a single page with extensible metadata as a basis for collaboration.

Update

Pretty much everything I described here can be done using many other portal frameworks, as well. One of recent favorites is Drupal especially since it has started providing support for RDF ( core language  for the semantic web as well). You can also custom build this framework using web frameworks like Rails(Ruby), Django(Python).