bloglet: Collaboration to Advance Neuroinformatics

Naren Ramakrishnan, associate professor of computer science, and his students will collaborate with K.P. Unnikrishnan, research scientist at the General Motors Research and Development Center, to create new algorithms that will process the massive amounts of data neuroscientists are now able to collect from the brain. Ramakrishnan and Unnikrishnan will be the co-directors of the laboratory.

Collaboration to advance Neuroinformatics

I was wondering what GM had to do with this subject and started reading the news story. Here is the answer:

Unnikrishnan is a member of GM’s Discovery program, which undertakes basic research on questions that may appear unrelated to the interests of a motor company.

I have recently developed some interest in this space.  So it was nice to read about this effort. Brain machine interactions is certainly the next frontier.

bloglet: Cognitive Assistant that Learns and Organizes

CALO is in the news. I heard about it from Adam Cheyer about four years ago, when it was just starting. In fact, we were looking at integrating HyperScope into it some how. May still be a good idea.

CALO is  a massive, four-year-old artificial-intelligence project to help computers understand the intentions of their human users. Funded by the Defense Advanced Research Projects Agency (DARPA), and coordinated by SRI International, based in Menlo Park, CA, the project brings together researchers from 25 universities and corporations, in many areas of artificial intelligence, including machine learning, natural-language processing, and Semantic Web technologies. Each group works on pieces of CALO, which stands for “cognitive assistant that learns and organizes.”

bloglets: Google Enterprise Solutions

I got an email from Google today. Browsing around, I found a bunch of things happening that I was not aware of.  OpenSocial and Android have been getting a lot of coverage recently. Here are a bunch of others:

Google Apps

Google Enterprise Solutions Gallery – just a trickle at this point in time

Google Apps Solutions

  • Admin: Admin solutions provide additional options for addressing compliance requirements and integrating Google Apps into existing IT systems.
  • Calendar: Synchronize your Google Calendar with other calendars, offline clients, and mobile devices.
  • Start Page: Start Page Gadgets consolidate relevant information from your organization, including previews of your inbox and calendar and dashboard views of other systems.
  • Migration: Products that assist data migration from existing systems to Google Apps.
  • Small Business Setup Services: Google Apps setup services specifically designed for the needs of small businesses
  • Professional Services: Leverage the expertise of Google Enterprise Professional partners and other third parties to get more out of your Google Apps deployment. Offerings include quickstarts, training, and customization packages.
  • Other Solutions: Products that integrate with one or more applications in Google Apps.
  • Universal Search Solutions – Products that connect and extend Google Search

Is there a market in building, extending, training, supporting Google Apps? Something to think about. How long will it be before the big consulting firms start showing up in these directories with products and services?

Bloglets: The World has lots of Smart People

Everyday you read a bunch of stuff. I like to keep the links around to share with others. First I used to bookmark them. Then social bookmarks (like del.icio.us) came along. So I started putting them up there. It became a habit. Now I book mark things I want to read (tag: readinglist, to:read). Some material is so compelling that I have to read. Like Khalid says, if you think like me, you will like these links. Even if you don’t think like me, you may find something useful.

bloglets are little blog entries with a link and less than one para of text.  Here is one:

Learning shouldn’t hurt. Let’s share the insights that made difficult ideas click from Khalid’s Better Explained.

I guess I think like him – a bit. But I did not when I was his age. Hence the fascination. The world has lots of smart people. Some of them blog. Which is a blessing. It is also an inspiration.

Math: Developing a Mindset

You keep hearing about Mathematical thinking. What is it? How do you develop a Mindset for Math?

Khalid has a nice post on How to Develop the Math Mindset.

Math uses made-up rules to create models and derive relationships. When learning, I ask:

  • What relationship does this model represent?
  • What real-world items share this relationship?
  • Does that relationship make sense to me?

I will add a couple of more:

  • How does one develop a mind-set for thinking beyond mere numbers, formulas and low level concepts.
  • How can we take these insights that come out of that mindset and apply to real problems

One of the slides I used to have on my “Thinking About Thinking” talks was to ask the audience (mostly CS students) to do a few of the following multiplications, mentally.

19 X 21

25 X 15

Very few actually find the simple algebraic patterns, till you point them out.

That brings us to one more insight (not my own):

  • A lot of problems can be solved by looking for patterns and applying some existing knowledge

The more mental models we build, the easier it is to apply them.

Getting Excited About Connections

I have been active on Facebook the past couple of months. Forming groups, inviting friends, interacting. And I do a bit of the same on LinkedIn and Sulekha and in my Yahoo Groups and Google Groups (even though the social interactions in groups is limited). Is there a way to simply store my connections to people and objects so every one of these social applications can get it?  Graphs are the answer. Graphs are nodes and connections. The nodes can be people or places or things. The connections? Well, the connections will evolve into more than mere links. We need several graphs – a Social Graph, an Interests Graph, a Work Graph and so on. Some of it may be private. The other parts may be shareable. Tim Berners-Lee: Giant Global Graph got me thinking.

Biologists are interested in proteins, drugs, genes. Businesspeople are interested in customers, products, sales. We are all interested in friends, family, colleagues, and acquaintances.

If we can address these resources on the web uniquely, we can talk about them. We can connect them to other related resources.

if only we could express these relationships, such as my social graph, in a way that is above the level of documents, then we would get re-use.

A simple link between one resource and another is just a starting point. We need to enrich these with additional semantics in a way that any application can understand.

It is about getting excited about connections, rather than nervous.

In the long term vision, thinking in terms of the graph rather than the web is critical to us making best use of the mobile web, the zoo of wildly differing devices which will give us access to the system

Social Networks like Facebook are just the beginning. It is all about connections and context.

Ideas and Snowflakes

A movement caught my attention. I suddenly looked up from my reading. I could see a few snowflakes falling. I watched with fascination. As I was watching, they started disappearing. It is almost turning into light rain.

What is the life of a snow flake? A few seconds? A few minutes? Where does it end up? Some of them melt up before they ever touch a surface. Some of them land softly among other snowflakes. The early snowflakes melt fast. The later ones stay on a bit.

Ideas are like snowflakes. Some of them vanish before they have time to land somewhere. Some of them turn into concrete action. I wonder how many ideas simply appear and disappear before you can grab them. Ideas, like snowflakes are some times transient.

I am in Chicago for Thanksgiving at our son’s place with the family. Really happy to be here among the loved ones. Happy Thanksgiving. Happy Holidays.

Eye-ball Centric Web Apps

Kingsley Idehen in Why we need Linked Data.

The Data Web is about Presence over Eyeballs due to the following realities:

  1. Eyeballs are input devices for a DNA based processing system (Humans). The aforementioned processing system can reason very well, but simply cannot effectively process masses of data or information
  2. Widgets offer little value long term re. the imminent data and information overload dilemma, ditto Web pages (however pretty), and any other Eyeballs-only centric Web Apps
  3. Computers (machines) are equipped with inorganic (non DNA) based processing power, they are equipped to process huge volumes of data and/or information, but they cannot reason
  4. To be effective in the emerging frontier comprised of a Network Computer and a Web OS, we need an effective mechanism that makes best use of the capabilities possessed by humans and machines, by shifting the focus to creation and interaction with points of “Data Web Presence” that openly expose “Structured Linked Data“.

Social Networks are about people, resources, interests, events, relationships and interactions. If you abstract this one level higher, these are all end-points (entities) and relationships (links).

How Can We Make Development Fun?

 From Web bots, spiders and screen scrapers:

Without a little fun, it’s easy for developers to get bored and conclude that software is simply a sequence of instructions that do the same thing every time a program runs. While predictability makes software dependable, it also makes it tiresome to write. This is especially true for computer programmers who specialize in a specific industry and lack diversity in tasks. At some point in their careers, nearly all of the programmers I know have become very tired of what they do, in spite of the fact that they still like to write computer programs.

The author, Michael Schrenk suggests developing web bots to throw a little unpredictability into software development and make it fun. He has a point. Conventional web applications where you routinely, take form data and stick it into a database or query database and stuff it into forms is getting to be a repetitive boring work.  This may be as boring to the developer as it is to the user.

What are some ways you can make programs fun to write? Here are some thoughts:

  1. Automate the boring part of development (many web frameworks and model driven development help you move in this direction)
  2. Write little program generators  and have them do as much of the boring work as possible. When you write program generators, you are also solving the meta problem.
  3. Introduce some intelligence into the applications. Applications that learn a bit from user behavior and adopt themselves may be much more fun to write and much more fun for the user, as well.
  4. Throw a bit of intelligent interaction as one of the user interface options. Imagine how much more fun it would be to use a Search engine that is like Alice Chatbot? It will make the search experience a bit more enjoyable. Alice is based on AIML (artificial intelligence markup language) which is a fun way to build next generation interaction applications.
  5. Write a few bots (read Mike’s book, Spidering Hacks and check out Simile)
  6.  Dive Into GreaseMonkey
  7. Borrow a few techniques from Game Programming. Their model to engage users young and old is unparalleled.

It is time we infused a bit of life into our applications, throw a few pleasant surprises to our users and make software interesting to write and use.

If you know of any techniques, please feel free to add them to comments.

Programming Language Popularity

Thanks to a link from programming.reddit.com, I found this fascinating study today. It is different from TIOBE Programming Community Index.

This study looks at programming language popularity from the following angles:

  1. Search results
  2. Job listings from Craig’s list
  3. Book counts from Amazon
  4. Open source projects from Freshmeat
  5. Bookmarks on del.icio.us

Finally the data is normalized, and here are the top 5 languages based on this effort.

  1. C
  2. Java
  3. PHP
  4. C++
  5. JavaScript

Note the popularity of C based languages! Please take a look at the original study since it lists over 10 languages (yes my favorite Python figures in there too). In addition, it also tracks the number of bookmarks in several social networks and discussion groups.

If you are looking at Programming Languages, normally your first instinct is to go for the well known ones. If you are a developer, it increases your chance of getting a good job. But most of us know more than one language. It may be worth adding a scripting language (Python, Ruby, PHP) to your list. If you tend to look a bit towards future, you may want to add a functional language too.

Different languages are useful for different applications.

Python, for example is great for system administration, quick prototyping as a glue language to tie different application, for system configuration.

PHP seems to be popular for rapid building a dynamic web sites.

So there are some other angles from which you can look at these programming languages, if you are a beginner.

  1. How easy is it to read small programs and understand them,  even when you do not know it.
  2. How well is it supported on your preferred platform?
  3. Is there an active discussion group for the beginners and advanced users? Is there a local group where you can go and meet people and brainstorm ideas?
  4. Availability of free learning material, tutorials, wikis, blogs?
  5. Can you quickly learn to write some simple programs in a day?
  6. How many job listings are there in your city for the language?
  7. How is the tool support – IDEs, editors (or editor extensions), profilers, debuggers
  8. Can you think comfortably in the language?
  9. Are there cookbooks where you can simply take the code and modify it for your use?

If you are a seasoned developer, many of these questions still apply, but you may want to add other questions to the list (like performance, scalability, availability of frameworks etc.)