Thursday, October 23, 2014

Robo Ebola

If necessity is the mother of invention (or in this case innovation) then the current ebola crisis marks a major milestone of that necessity as it pertains to robotics. In recent years we've seen bots used for more industrial purposes in ever expanding scope from the typical assembly line use-case to the more extreme post-tsunami disaster use-cases. The idea of a surrogate health worker is nothing new, but the ebola crisis presents a use-case that has a tall list of requirements. The Jetson's cleaning bot is way overdue, but I wonder if the reason we don't all have a "Rosie" in our house today isn't in part due to lack of a clear demand beyond the obvious commercial application. Sure people have been working on it, but in comparison to other technology efforts, the progress has been slow. I think these past few weeks may actually go down in history as the time that personal assistance robots went from a nice-to-have to an outright commodity at least from the point of public perspective. So, I thought I'd list out the things that a personal assistance bot (used for medical care or otherwise) might include. Here are the basics: - The ability to move in a bi-pedal manner - Why? Essentially my logic here is: because our living spaces/furniture are built explicitly for bi-pedal access, the need for an assistant (virtual or otherwise) to move in a bi-pedal manner is a requirement with few exceptions. After all if moving around on wheels was so great, wouldn't we all be wearing roller-blades indoors? Can it be done with a roller-maid? Maybe, but it's impact and ability to navigate properly could be impeded by the simplest of things (stairs for instance) without special application features included. - The ability to detect (visually and in a tactile fashion) the presence of "living" things and maneuver appropriately. - What if a well intending assistant robot (weighing in at over 200 lbs) leans over an elderly patient in bed and "rests" its hands or knee on the patient by accident? Or what if while collecting the dirty laundry, picks up the family dog, treating him to the spin cycle. The potential outcomes could be horrific if the robot is incapable of making these seemingly simple distinctions. - The ability to correctly categorize practically any household item (or more.) - Andrew Ng has been involved in a lot of research around this problem and his results show much promise. - The ability to work with a human in very close proximity, taking verbal and visual queues from the human during the process - Think of a robot trying to help someone out of bed. You need to be able to wrap your arm around its "neck" and give it subtle clues as to your intent on timing and pace. Otherwise you (and possibly your expensive robot) could end up in a tangled mess on the floor. - The ability to learn from both verbal and visual instruction. - This is probably the most difficult piece of the puzzle, but unless you plan on programming your bot while reading a 300 page manual translated into 7 different languages (least of which yours) you need a good way of conveying information to the bot. These aren't simple problems to solve, though it seems like some might be easier than others. Contagious disease (it turns out) might just be the most motivational problem there ever was for the advent of the personal robot. While its unfortunate, I think it could be the push the robotics industry has needed to tackle these difficult engineering problems.

Sunday, September 7, 2014

Go Get a Cup of Coffee

Why is it that sites that have a slow processing page always use the phrase "Go get a cup of coffee while you wait"? Do they think they're being clever? Do they really want you to go drink a cup of caffeine-ridden bean juice only to return even more anxious than you were before you had to wait on their rickety background process? How about, "Our technology is poor and really slow, please visit our competitors immediately" instead. Just sayin.

Sunday, June 22, 2014

Scrapped Album

Too little interest/time to round this out. Here for the very few of you that might find it interesting. http://files.j03l.com/media/audio_blog/Scrapped_Album.zip

Thursday, January 9, 2014

pip install pcrypto c compiler problem

I recently upgraded to OSX 10.9.1.  I run macports via the xcode package.  I was setting up my django dev environment and kept getting this error when I tried to install fabric (and thus pcrypto.)


 configure: error: in `/opt/git/myproject/build/pycrypto':  
 configure: error: C compiler cannot create executables  
 See `config.log' for more details  
 Traceback (most recent call last):  
  File "<string>", line 1, in <module>  
  File "/opt/git/myproject/build/pycrypto/setup.py", line 456, in <module>  
   core.setup(**kw)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup  
   dist.run_commands()  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands  
   self.run_command(cmd)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command  
   cmd_obj.run()  
  File "/opt/git/myproject/lib/python2.7/site-packages/setuptools/command/install.py", line 53, in run  
   return _install.run(self)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.py", line 573, in run  
   self.run_command('build')  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command  
   self.distribution.run_command(command)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command  
   cmd_obj.run()  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build.py", line 127, in run  
   self.run_command(cmd_name)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command  
   self.distribution.run_command(command)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command  
   cmd_obj.run()  
  File "/opt/git/myproject/build/pycrypto/setup.py", line 251, in run  
   self.run_command(cmd_name)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command  
   self.distribution.run_command(command)  
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command  
   cmd_obj.run()  
  File "/opt/git/myproject/build/pycrypto/setup.py", line 278, in run  
   raise RuntimeError("autoconf error")  
 RuntimeError: autoconf error  


I checked my local environment and gcc was installed alright, but still got that error indicating that I had no c compiler. I accidentally ran #gcc from the cli and up pops a User Agreement from Xcode for the gcc compiler. I held space to get to the end of the agreement and entered "agree"
After that gcc was re-enabled and pip install pcrypto worked like a charm. Hope this helps.

Tuesday, January 7, 2014

Non-Sentient Artificial Intelligence or Utility AI

I start this year not setting a new goal, but instead renewing a passion to help achieve a very old goal.  For the past 6 months or so I've been doing a good bit of research into "Artificial" Intelligence. Actually to be more specific, my research has aimed at machine learning. I have struggled through 5 weeks of lectures from Stanford's Machine Learning Program https://www.coursera.org/course/ml. I have read a good number of articles and books, watched a good number of videos, and spent quite a bit of time in thought on the subject of machine learning.

Target - What I'm trying to achieve overall is either finding or building a framework on which any number of self-evolving applications can be built.  I think the right classification for this would be actually be Utility Machine Intelligence, but for the sake of the common vernacular, I'll use Utility AI.  

What is Utility AI? - Utility AI is simply non-sentient (non-self-aware) software characterized by the ability to pose questions, create hypothesis, test hypothesis, retain knowledge, and self-improve. While it is easy to think that that last function would automatically lead to sentient software, I'm not convinced this is true.  Furthermore, as it IS software, we have a lot to say about how it evolves and how far it progresses.

Goals
1. My primary goal is to get an idea of where "we" are in the process of achieving this framework that I've derived/imagined from what I've learned so far.

2. My secondary goal is to assess what I need to learn to be able to contribute in a meaningful way to the field of ML and AI.

Primary goal - I've not yet come to any concrete answer to that question of where "we" are exactly. Partly this is due to the private nature of this research.  There are many public-facing projects that are making progress, but I have to wonder how many private projects exist and at what maturity state they persist.  The commercial implications of AI being what they are, it is hard to imagine that there is not significant progress made outside the public's eye.

From what I CAN see we are on track to publicly achieve this in the next 5-10 years.  I would also say that I don't believe that we are currently incapable of this from a technology perspective, the hardware and underlying systems are there. I believe that it is the software (and thus the thinking) around AI that needs more growth. Furthermore, once we have a solid foothold in this emerging field, I'm confident we will see hardware adaptations that better compliment specific use-cases.

I recently came across ML as a service provider Ersatz.  The model they are promoting is in tune with our current consumption of cloud, but using GPU on the backend to achieve much faster results than typical CPU processing permits.

This blog lists out a number of other MLaaS providers.

Another recent AI feat was the ability of software to properly decipher CAPTCHA images - Vicarious 

If you want to keep your finger on the pulse, Kurzweil's blog has an ever-growing list of articles to follow.

To sum it up, the answer to my first question so far is: We are making unbridled advances in the field of AI, but we're still a ways off from the sci-fi depictions that come to mind at the drop of the word.

Secondary goal - In setting out understand what one doesn't know, the answer one often finds can be unsettling.  For instance, my unbound enthusiasm led me directly into the fray of advanced calculus when I started watching the Stanford ML course lectures.  Having skipped the tradition college route, I'm still scratching my head trying to understand the functions of all of those funny symbols...  I'm certainly willing to take a step back and beef up on calculus, but am not yet convinced that it is necessary.  That said, there are a good number of programmatic resources available that achieve the basics of machine learning as it currently stands.

At this point goal two is still incomplete.  The next item towards this goal is to practice implementing existing technology such as neural networks, linear & logistic regression and gradient descent to better understand what's ahead.

Why
The term AI often brings notions of the Skynet, HAL, and Haley Joel Osmond to mind.  There is definitely a stigma of fear surrounding sentient AI.  This is decades of social programming hard at work.  Instead of looking forward to the possibilities that this technology could bring, most people only see the weapon it could be or a threat to the economy (as we now know it.)  Part of this is due to the false implication that if a thing is intelligent, it is by default sentient.  This is not true.  Plants have intelligence, yet we're not overrun by man-eating tomatoes. Animals have intelligence (and are capable of amazingly beneficial feats) and yet we find ourselves more and more their keepers and not their prey.

If you abandon the concept of a sentient computer intelligence (at least for now,) the potential benefits are tremendous. Think about a research bot that intelligently seeks out information on cancer research 24/7 and intelligently organizes and prioritizes the results for human consumption.  What if additionally, that bot could make sense of that information and build a hypothesis from the sea of information it has parsed/perused on the subject? Suddenly you have an invaluable tool for speeding up the means by which you identify hypothesis and test them up or down.

Think more mundanely of flying cars.  Why can't we have flying cars? It is (at least in part) that we aren't able to process enough information at one time on our own to navigate thousands of airborne projectiles all flying at different speeds, altitudes, and directions.  This is the perfect scenario for a utility AI.

What about a smart phone connected to google glass that can interactively assist the blind by telling them what's around them, where to go, etc.?  Real-time translation for the deaf?

Interactive language translation software?

Medical self-diagnosis/treatment?

I could go on, but I'm sure you can think of some way that computers could better our lives if they were just a bit "smarter."

My Theoretical Program - I

So far in my journey into the world of AI and ML, I've found myself somewhat lost in a sea of information and restricted by the amount of time I can spend absorbing it. To tackle this problem (at least in my own head) I've outlined a list of questions that I BELIEVE need to be solved by a machine for a machine (or any other mechanism) to actually increase intelligence.  This is just a thought experiment and I'm POSITIVE that there are far smarter people with far better ideas (probably published 50 years ago) that better describe this process than what I have so far.  That said, this is the next step for me to accomplish my primary and secondary goals. By identifying the precise problems that must be solved, I should simultaneously be able to identify existing work and learn to use it by attempting to build my theoretical program.

My program I is intended specifically to flush out the kinds of problems left to be tackled by asking more and more detailed questions of itself over time.  I make the assumption that the output of the program will in fact be application code written by the machine and will execute it in spontaneously generated test environments.

I'll precede the list with the assumption that "I" (in this context) will initially be handled in the 3rd person by the machine (my questions are written in first person) hence the apparent grammatical errors surrounding the use of I.

I

Description: Program I aims to iteratively identify, solve, store, and replicate problems/sets over time.

-----------------------Perceive---------------------
1. Who is I?
1.1) The decision source responding to questions

2. What is a problem?
2.1) An input that has inequitable solutions in I's datasources

3. What is the problem?
3.1) A partially or unsolved problem that currently exists in my records
3.2) Perception of input (graphical, audio, or logistical)
3.3) Direct question from user

4. Why Am I Going to solve this problem?
4.1) To better solve a previous problem (reduce computation necessary to solve)
4.2) To make it easier to solve future problems (to enhance algorithms needed to solve problems)
4.3) To persist (increase the number of solved problems)

-------------------Threat Assessment-----------------

5. Will solving this problem allow me to solve more problems?
5.1) If the attempt at a solution endangers I's ability to solve problems - END
5.2) If the problem itself endangers I's ability to solve problems - END

------------------------ACT--------------------------
6. Do I have a previously existing exact answer/solution to the problem?
6.1) Yes - Apply & END

7. Do I have a previously existing non-exact answer/solution that I can modify to solve the problem?

8. What information do I need to make a hypothesis?

9. How do I get said information?
9.1) I's datasources
9.2) Datasources trusted by weight
9.3) Ask for user input
9.4) *Guess based on solutions to previously solved problems

10. How do I know that information is relevant or true?
10.1) Occurrence rates in multiple datasources
10.2) Trust weight of a data source
10.3) Ask for user input

------------------------Evaluate-----------------------
11. How do I test the hypothesis?
  11.1) Form equivalent tests from previous problems by modifying test parameters by weight and/or randomly
11.2) Search for a hypothesis amongst external datasources
11.3) Ask for user input

11.A Perform tests and weight solutions

------------------------Analyze------------------------

12. Does this solution require I to re-render more than X number of previously solved problems?
12.1) If yes then re-instantiate I as a new program with duplicate current datasources

-----------------------Postulate----------------------
13. How does the answer to this problem relate to previous problems and solutions?

14. Can I make better solutions for previous problems with this solution?

Subsequent Actions:
1) Store Solution/Answer and weight the solution based on results of hypothesis tests and Postulate tests
2) Store the datasource origin(s) weighting the datasource based on relevance to the successful hypothesis



I'm entirely working on my own on this so far and as you can see am still in the very earliest stage of building such a mechanism, even in my head.  That said, any help or direction that you can give is welcome.  I go from here continuing to take classes, read, and learn more while I try to formulate these questions into functional code.


Friday, December 13, 2013

Cycle 143

Never thought I'd say this, but it looks like I have something in common with Beyonce' I dropped my latest album Cycle 143 last night.