Instead of searching for water on other planets, why not search for space debris?

January 5th, 2012

I came across this image today and it made me think of how scientists have been searching for water around distant plants. If humans have created this much space debris, its reasonable to assume another developing civilization on a distant planet would also have generated this amount of space debris. Perhaps instead of a quest for water on other planets, a more significant find would actually be the discovery of space debris from a civilization capable of space flight. If there is enough debris and operational satellites, they collectively would likely give off a unique photon signature similar to how scientists are detecting water from the refraction of light through the atmospheres of distant worlds. If we could refine this technique enough we might even be able to detect the presence of synthetic materials orbiting the atmospheres of distant planets. Enough debris would surround the planet and refract light in a way that might be unique to synthetic materials. Someday…

Can’t see the forest for the trees – Robots, AI, and the Internet

January 3rd, 2012

I’d like to share some ideas I’ve had today about robotics, ai, and the internet.

First lets discuss robotics. There has been much work in the field of robotics to create bi-pedal humanoid like machines. Much, if not most, of the work pursues what I consider the ideal: being as human as possible. When you look at just the mechanics and kinematics of the quest, you can see we are indeed making great progress. However, when you take into consideration longevity, perpetuation (ie. life-like procreation), energy, and immune systems, we seem a long ways away from that ideal of being human. Not many machines to date can last over 100 years like a human can. Most rust or break and once broken lack the ability to fix themselves like a human can. When we get injured we heal ourselves and life another day. Humans procreate and perpetuate the species and life itself. Humans can gather energy from a multitude of sources whereas most robots are currently electron based. No robot can replicate itself as well as life and we are a long ways away from life-like machine replication. Life and humans are the ideal that a large part of robotics research strives for as a result. If our science would reach a point where we were capable of creating human-like machines capable of perpetuating itself, we would likely end up with exactly what we’ve got already. We wouldn’t likely be using electron based energy sources because its much easier and efficient to generate energy from complex carbon structures like human food. We’d have machines that were capable of building themselves from the tiniest of components like DNA which would essentially be the program to create the robot, concise, redundant, and reliable. The most advanced robots would construct themselves from something like DNA and build itself an immune system to heal itself when it was injured. In the end, we would just be recreating ourselves. Would we do as good a job? How are we to improve upon what we’ve already got when we can’t even match what we’ve already got?

The same argument can be said of artificial intelligence. The ideal is to create an ai that can pass the Turring test and behave exactly as human as a human would behave. While there is no doubt that specialized skills far surpass any of our own and researchers are making amazing progress we still shoot for the ideal. What would an ideal intelligence be like? It would be logical but yet still capable of being creative. It needs to be self motivating and it needs to be able to learn from its mistakes. It needs the ability to store vast amounts of information in a small amount of space and it needs to be able to filter out what’s important from that information as quickly as a human can. I have complete confidence that the singularity will occur but will it be creative enough to keep itself alive? Will it have the motivation and the drive? What purpose would it find for itself? Ultimately, the ideal intelligence that we shoot for is human. We can create special purpose machines that almost seem human but they can’t currently match the complete set of abilities of a human.

Next lets discuss the internet. We’ve created a network of energy transmissions that spans the globe. A magnetic storage device on one side of the planet stores a file that is retrieved over the internet. The magnetic energy is converted to electrons, electrons are converted to wifi, wifi is converted back to electrons, somewhere they may get converted to light and sent over fiber optics only to be converted back into electrons and then converted to radio waves and shot into low orbit to a satellite which bounces the signal back to Earth. The radio waves from the satellite get converted back to electrons, to light, to electrons, to wifi, to electrons and finally converted into to photons again on your laptop LCD screen. All this happening over the span of the entire planet every single second, 24 hours a day. What we have created, whether we know it or not, is the most complex brain we have ever known. Humans are acting as sensors and collectively as the life force behind this brain. We feed it the electricity it needs. We fix it when it breaks. We feed it data constantly and we move data around through the brain constantly.

At some point and somehow this complex network will create some type of emergent property. It may be visualized in human behavior such as how social networking is changing the wiring of our brains. It may be realized as societal shifts in thinking or a global consciousness of society. Regardless of how or what happens, this emergent property will rise out of the network as our own consciousness emerges from the complexity of our own minds. The internet isn’t just a network of computers. Its a network of human minds across an entire planet and the consciousness that emerges from that will change society forever. What would a human mind be without consciousness? We call people vegetables when they aren’t capable of thinking anymore after accidents. Is the internet a vegetable? Not at all. The internet is more like a child coming into being slowly gaining consciousness and self awareness. How would we even know if the internet became conscious? It may be that humans may not even realize the internet is a conscious being. Does a neuron in your mind have some conscious understanding that its just another part of a large network of neurons that make up your brain and that somehow a conscious being has emerged from that complex network of neurons? Certainly it sounds ludicrous to think a neuron would have such an awareness and its reasonable to assume we too would be just as clueless as to the emergent properties of the internet.

Perhaps the emergent properties will only happen over many lifetimes in a way that’s not perceivable to a single limited human lifespan but rather stretch generations. Whenever and however it happens, I’m convinced it will though I have little more than this rambling blog entry to justify it.

New Years Resolution: Build my first robot

December 31st, 2011

I’ve been all over the place lately on deciding what I should do and commit my time to. For the past 8 or so years, I’ve been building Ruby on Rails applications and though I’m pretty good at it I don’t find it intellectually challenging. I keep coming back to the idea of going back to school for my PhD. I’m also going back and forth on scaling Onomojo back up and focusing on development of Webster’s Classroom. I’ve decided to keep doing what I’m doing right now but start to do my own robotics research in my spare time. I bought a Microsoft Kinect for the visual sensor and I’m working on gathering the rest of the parts I’ll need to put together my first robot. It’ll be crude no doubt but the process will teach me the basics that’ll get me started. Above is a screencast of the Kinect connected to my Mac thanks to the OpenKinect project.

Investing in myself: Realizing my value as a programmer

December 27th, 2011

Being a programmer, you have an invaluable skill that you need to learn to harness. Investors realize this already which is why they’ll spend stacks of cash to have you build them something that’ll someday be profitable. Large corporations realize the value in good developers and sometimes bend over backwards trying to retain their top talent. To be able to program well is a skill that people clearly value but why do programmers tend to place such little value on their own talents?

I know amazing developers who have spent the last decade building other people a fortune in IP while spending very little of their time building their own software. While its easy to look at the paychecks coming in and be content with your progress as an individual, when you put your progress into the context of intellectual property ownership most developers are left with empty pockets. Investors and businessmen use developers to build intellectual property for their businesses. They pay good money for a developer’s time along the way and usually the developer moves onto something else within a few years and the business finds someone new they can use to extend their growing IP treasure chests.

When I look back on my own past decade, I’ve seen plenty of cash come and go yet the only thing that remains is the software I’ve built for myself in my own time. I put my time and effort into the context of IP and suddenly the value I place on my own time and skill begins to rise. I recently read an article geared towards investors that was recommending keeping good developers on your side at all costs. It argued no matter what a developer was building it was better to keep them busy building you IP and on your team than to lose valuable talent. I read that and taking the context of IP and the value of my time into account I asked myself why I wasn’t spending more of my free time extending my own IP treasure chest? I listened to the advise of that article to investors and I’ve committed to investing more in myself.

Playing the Devil’s Advocate: An Argument for SOPA

December 26th, 2011

There’s much ado online these past few weeks promoting the demise of the SOPA act. Many smart people are arguing it will destroy the internet as we know it. That may be true but that may also be exactly what we need.

We’ve long known about the problems with the current DNS system from its centralization to its lack of encryption. While it seems like a dozen new solutions are proposed each year, nothing ever seems to take off. If SOPA were to pass, it could be the exact catalyst that DNS alternatives need to propel them into the forefront. Until the major players make a stand and adopt DNS alternatives, it will forever be a partial embrace of a better world. If all these people and companies who would be potentially negatively effected by the passing of SOPA would collaborate and embrase one of the dozens of DNS alternatives, it will be enough to push the momentum in the direction of ridding ourselves of our current flawed system once and for all. If we fail to pass SOPA, we may well live in a world where we’re forever stuck with a flawed and insecure centralized DNS hierarchy that’ll already just as easily controlled without SOPA. Department of Homeland security already takes downs domains at will. If that’s isn’t bad enough to force a paradigm shift in DNS then perhaps something a bit worse like SOPA will be enough motivation for us to collectively solve one of the biggest problems facing the internet: the current DNS system.

Upgrading Webster’s Classroom from Rails 2.3 to Rails 3.1

December 26th, 2011

I’ve recently tasked myself with performing a major upgrade for Webster’s Classroom. It includes both a complete site redesign and an upgrade to the latest version of Rails. We all know its a bit of a pain to upgrade from Rails 2 to Rails 3 but the longer you put off the upgrade the more painful it becomes. The app was written as a proof of concept many years ago and despite its growing user base it doesn’t have a strong enough foundation to allow it to continue expanding. We build it too quick and sloppy years ago and as a result we are testless and in need of major refactoring.

The lack of tests actually makes the upgrade easier in some respects because instead of having to hassle of fixing a bunch of sloppy tests I’m building everything from scratch both the app and the tests. The refactoring needed for this upgrade is like writing the application from scratch anyway. The existing code I’m using more or less as a rough sketch of feature requests and I have full intention of throwing all that code away if it makes sense to in this new context. Instead of trying to upgrade the inline Prototype Javascript to jQuery and UJS piece by piece, I’ve decided its best to just throw all the old Javascript out the window and start fresh. I’m committed to getting as close to 100% test coverage as possible these days so as I’m doing the upgrade and redesign I’m making damn sure there’s proper tests in place this time around.

I’ve upgraded a handful of apps to Rails 3 from Rails 2 already and in the past I’ve started off trying to upgrade within the current code base. I’ve had numerous problems with this approach and unless you’re really meticulous on every single file, you’re going to end up with a bunch of old junk files laying around and likely some missing new ones that you’ll want. This time I’ve taken a different approach and started off with a fresh default Rails 3.1 install and began moving over the legacy code file by file. I’m happy with taking this approach and instead of trying to take my Rails 2 code and upgrade it to Rails 3. Starting with a fresh Rails 3.1 code base and moving over code where it needs to be has given me the chance to move things into places they ought to be like moving code outside of the environment configs and into initializers. If I had just tried to upgrade the old code inline, I wouldn’t have spent the same amount of attention on cleaning up that mess. Once this upgrade it deployable, Webster’s Classroom is going to be in a position to really expand dramatically and rapidly.

Recent developments

December 9th, 2011

Its been quite some time since I posted anything so I feel a necessity to publish something. I’ve started many posts since the last one but I never really liked how they turned out so I discarded them. I’ve learned plenty of new things which I tried to share but never had enough time to devote towards a solid post about any of it. Considering that time seems to be always something I’m lacking, I will just post a random rant about what I’ve been up to.

I’ve started working on a Facebook app for a client called Redflag. Its an app that lets parents monitor their child’s Facebook accounts for potential bad friends. Its a fairly complex app written in both node.js and Ruby on Rails. Node.js was something I hadn’t worked with before this project but I really like it. Its a little confusing thinking in terms of asynchronous execution of code in our app because there’s a ton going on behind the scenes and its a little difficult to visualize how thing all tie back together through callbacks. The complexity of our node.js backend makes it extremely difficult to test well but we do have a small but growing suite of jasmine tests for it.

I’ve been continuing to work with San Francisco Soup Company on their kitchen management application and have hired another developer, Jose, to help out. He’s an excellent developer and writes some really solid code. We’ve migrated the site to Rackspace’s cloud and I’m really liking Rackspace over Amazon’s EC2 these days. Their web interface is much more usable and I can actually get ahold of someone when there’s a support issue. The server seems to run much faster than similar EC2 instances and is cheaper so I’m pretty happy with Rackspace so far. We’ve been working on refactoring the code and building a more comprehensive test suite which is coming along extremely well.

More interestingly, I’ve started partnering with different businesses to expand my development and design resources. These additional resources will allow me to expand Onomojo in new directions and produce better results than I could just by myself. My focus is on partnering with companies that have solid development processes or are at least adaptable enough to conform to my own methodologies and best practices. By partnering primarily with businesses instead of individual talent, I will be able to provide more consistant results for my clients without the HR headache that comes with managing a team of remote developers. I have an agressive growth goal for 2012 and with the partnerships I’ve been building I believe Onomojo is in a good position to realize those goals.

I’ve also made great progress towards getting back into graduate school. I am working on a plan that will let me continue being CEO of Onomojo but allow me the flexibility to get my PhD. I’ve retaken the GRE and got a great score. I’m still working on narrowing down my school choices and drafting my applications. I don’t expect to apply anytime soon though. I need to have my ducks in a row before I jump back into academia. I won’t be applying until next year at the soonest with a starting date of 1.5 to 2 years from now.

Review of “How to Grow a Mind: Statistics, Structure and Abstraction”

July 19th, 2011

This was an amazing lecture by Josh Tenenbaum. He presents motivation for determining the type of data structure for representing knowledge without knowing how the knowledge is best organized a priori. He presents the ways children learn and how they organize knowledge at an early age starting at a very simple structure and building up to a more accurate model. He points out that current methods seem to either take pre-existing knowledge about the best data structure to use or they simply make the data fit the predefined data structure. He presents many examples of current research using this general concept and finally takes some questions with regard to the speech. This lecture is extremely upbeat and motivating for me to research more in depth the examples presented in the lecture.

How to Grow a Mind: Statistics, Structure and Abstraction. Josh Tenenbaum

Review of “Latent Factor Models for Relational Arrays and Network Data”

July 19th, 2011

This was an excellent video lecture on latent factor models by Peter Hoff. The speaker goes over various other models that may fit social network data. He presents a comparison of the models to a sample data set of a highschool. The comparisons show that the latent factor model is able to fit characteristics of real data, such as the total number of triangle relationships in the network or high correlation between connections of students with the same race, better than the other models.

In the second part of the lecture he gives a few examples and shows the performance of each of the three presented models on the examples. Next he shows mathematically why latent factor models are more flexible and much more general than the other two models. He references some software he’s written to aid in latent factor modeling of relational data on his website. He provides a few more examples and in particular data in relational arrays rather than just social network data. He goes into some depth describing how relational arrays can fit into latent factor models as well.

This was was an excellent introduction to latent factor models albeit a bit heavy with statistics for most people. It gives a really good coverage of the three other statistical models presented and how they compare to the latent factor model.

Latent Factor Models for Relational Arrays and Network Data. Peter Hoff

Review of “On Three-Layer Architectures”

July 18th, 2011

The author goes into a detailed history of robotics control systems and in particular how “Subsumption”, or SSS, revolutionized the field which was previously dominated by sense-plan-act control systems (SPA). Next the point out the major flaw in Subsumption was the complexity at higher layers. Higher layers depended on lower layers and therefore were increasingly complex. The evolution from there was the three-layer architecture, or 3T, which take the concept of states and breaks it into three layers: stateless, memories of past state, and predictions of future state. The three layers correlate to the three-layers of the architecture: controller, sequencer, and deliberator. Each component runs independently in a multi-thread environment.

The author then go into more detail on each component and the specific constraints the three-layers architecture has on each component. They use two specific examples to aid the discussion: RAPs and ATLANTIS.

Next the author provides a case study of a robot called Alfred and describe the architecture it used for a robotics competition. The paper describes each of Alfred’s the three components in depth and highlights how it conforms to the three-layered architecture it previously described. In conclusion, the author reminds us that three-layered architecture isn’t concocted from theoretical considerations but rather an evolution of robotic architecture over time based on empirical observation.

Overall this paper was a great overview of the evolution of robotic software architecture. The paper was published in 1998 and it leads me to many questions about the progress made since that time. Given that three-layered architecture was used in the DARPA Grand Challenge contest winner, I’m curious what type of extensions and advancements have been made to the core three-layered constructs presented in this paper.

Gat, E.; Others, (1998). “On three-layer architectures”. Artificial Intelligence and Mobile Robots: 195–210. Retrieved 2008-04-06.