Thursday, February 26, 2009

Mike and I went to school together in Iowa City. Someone gave him the nickname of 'McGyver Mike' back in school. Mike had a pretty sweet mullet back then. He certainly is living an action hero like existence.

Tuesday, February 24, 2009

I've believed that the litigation, threats, and the nastiness shown by the trade groups, specifically the RIAA, has less to do with combating losses through piracy and more to do with control and maximizing revenue through their customers.

I'm very curious what the public reaction will be to the next ridiculously inflated lawsuit the trade groups attempt to litigate. I think the reaction will meet far more resistance from the public now that people are finding themselves jobless and out of their homes. People are going to have less sympathy for the industries that employ do all that they can to deliver as little value to their customers as possible while also trying to squeeze as much revenue as possible out of the customers at the same time.

Tuesday, February 17, 2009

I thought a little bit about the viability of using evolutionary computation in the field. That is, using Darwinian principles to design software.

In my writeup of Richard Gabriel's presentation to OTUG, I speculated that using evolutionary design may be a natural extension to the working specification or Test Driven Development principles. Essentially, if a specification can be provided in terms that can be fed into an evolutionary development environment, then the implementation can be left to evolution.

The downside to using evolutionary computation to implement our software is that not many humans may intimately understand how the implementation works. I began to think about how different letting a computer implement our designs is versus what many companies are doing with offshore development.

The model of offshore software development with many companies is to keep the architects and high level designing engineers stateside and send the work in the trenches overseas, i.e., all the finer grained detail work. I believe that many organizations that adopt this type of model are naive in thinking that it will simply work without a significant investment in establishing communication protocols between the high level designers and the people responsible for actually implementing the software.

The designers become an intermediary between the business/business analysts and the implementing engineers. The high level engineers take the requirements from the customers and give them to the engineers. They rely on their ability to communicate those requirements. Their people skills if you will.

The pitfall that friends of mine have encountered when trying to operate as the designer/intermediary reads like a Threes Company episode, i.e., breakdowns in communication cause considerable problems that seem to get discovered so late in the product development cycle that they require either a heroic effort to keep the project on schedule or they cause delays in the product's release.

People complain about the code coming from India being sloppy and difficult to read. It is clear that little attention is paid to considerations, such as future maintenance. Much of this I believe is due to cultural differences between Americans and the people who are hired to write software.

One must question the reasons why an offshore model of software development is implemented. Some organizations do this because sufficient qualified domestic help is unavailable. Company's are trying to save money by shipping work to a cheaper place. That's the theory, but the practice is wrought with more hidden costs and difficulties that often make offshoring more expensive than just doing the work in-house.

If the motivation is having cheaper workers regardless of the added burden and workload of the senior people in house, one should consider the difference between the added workload of the architects and high level designers and specifying the program parameters to a computer to design the software.

If the difference between specifying the acceptance criteria to a program is not sufficiently more expensive than specifying the acceptance criteria to a team of developers on the other side of the globe.

Given sufficient specification and evolutionary cycles, the resulting software will outperform the software that is developed by any human designer.

I think the next step in evolutionary computation is a system whereby human designers specify an interface and behavior and fitness model for software components, and the computer figures out how to meet those specifications as closely to the specification as possible.

Letting a computer handle class implementations, or even class level optimizations, seems like a natural progression from the current state of software development. Consider the level of abstraction that object oriented development and programming in domain specific languages has taken us. We're already trusting much of the implementation to the computers. It only makes sense to push the bar and see what we can do with another level.

Monday, February 16, 2009

I never got into Facebook. If you want to find me, my name is shared by a couple other people, I'm the Paul Wiedel from Naperville, Illinois, in case you, dearest reader, were wondering.

My wife is a big fan of Facebook though. She's constantly getting back in touch with old 'friends' from high school. She enjoys it.

Some of my current friends who I do keep in touch with have been recently discussing whether to get a Facebook account. Some of them cite privacy concerns as a foreboding reason. Others, or maybe just me, think that Facebook is a time abyss and prefer to keep a web presence elsewhere.

My shorter version of the TOS is Facebook claim's ownership of everything that is put on Facebook. Considering how people like to put intimate details of their lives out on Facebook, this should be alarming, or at the least regrettable, by many of Facebook's users.

One of the big selling points to Facebook when it became more popular than MySpace is Facebook's privacy settings. People felt more comfortable sharing details about their lives on Facebook because of the privacy settings.

I can imagine quite a few people with very private facets of their lives turned to Facebook for support. Facebook claims exclusive rights to that information.

Take for example people with gambling problems. Perhaps they felt comfortable joining a support group for people with gambling problems. Now Facebook claims that they have the exclusive rights to do with that information what they want. If I wanted to monetize that information I'd build a list of those people's contact information and sell it to casinos.

They can do more than just put your name on a list for telemarketers. People upload and tag images of themselves. Say one of these problem gamblers has pictures of themselves on this list of problem gamblers. This is also valuable to the gaming industry. Casinos use facial recognition software to identify cheats and undesirable people. I find it hard to believe that they wouldn't use the same technology to identify 'desirable' people and make sure that they receive a little extra attention should they fall off the wagon and walk into a casino.

I personally think that something will come to replace Facebook as the preferred platform for social networking. I don't know what it is, but it seems that Facebook is on its way down.

I don't mean to alarm people, but there are people out there who are going to use the information you share with the web against you. If you have a chunk of time, I recommend watching Steve Rambam's lecture about privacy. Rambam is a private investigator who is very good at finding people and finding information about people. He says that people and technology make his job very easy for him.

My advice with Facebook is the same advice that my dad gave me back in 1991: assume everything you communicate electronically is going to be read by the rest of the world.

Saturday, February 14, 2009

BDD is different from Unit Testing and TDD by specifying pieces of behavior for software and testing that that behavior is build within software. Don't take my word for it, check the video out yourself.

Second Gripe: I hate slow reveals. They waste everyone's time. Gabriel's lecture was a slow reveal. The first half of the lecture built context into the concept of Ultra Largescale Systems(ULS), and descriptions of Metadesigns for building them.

I think that it would have been sufficient to state that Metadesigns 1 and 2 are insufficient for developing ULS and proceed straight to the meat of the lecture. Effectively, I think that over half of the lecture was spent recanting things that we already know.

That is the conclusion of my negative criticism.

Conceptually an ULS is a system that is beyond a human's comprehension. Some examples that were given are the entirety of New York City, a healthcare system for every living being on the planet, the entire ecosystem of the planet's oceans. An Ultra Largescale System is by definition beyond the design and understanding abilities of humans.

How do humans build such systems? Metadesign 3: evolutionary design, or using evolution to design the solution.

In my opinion, this is where the lecture started getting interesting.

Never tell people how to do things. Tell them what to do, and they will surprise you with their ingenuity.

I must confess that Genetic Algorithms are a curiosity of mine. I like the idea of tellin a computer what a want, giving it some information and letting the computer come up with a solution.

Thompson's experiment was to use the principles of evolution to dictate computer logic. In the case of Thompson's experiment, the desired trait of his circuit is to produce a circuit that can differentiate the following tones: 1 khz, 10 khz, and every other tone. The building blocks of the circuit are 100 FPGAs, or a 10 x 10 matrix of relatively simple programmable logical components.

A fitness algorithm was set in place that mimics the principles of evolution. Circuit designs that are the most fit carry their traits on to the next generation. Ones that are not deemed to be fit, do not carry their genes on.

...how noble in reason! how infinite in faculty! in form and moving how express and admirable!in action how like an angel, in apprehension how like a god! --Hamlet, Act 2, Scene 2

The evolution was allowed to run for 5000 generations. The first thousand or so produced circuits that performed poorly or outright failed. The circuits improved over time though. The circuits evolved to outperform human designed circuits.

The circuit was analyzed after the experiment and some very curious details emerged. Only 21 of the FPGA gates were used. 79 of the 100 gates could be removed completely from the circuit without affecting the circuit's performance.

5(in gray) Gates appeared to serve no logical function. However, if they are removed from the array, the circuit fails to work. The same circuit's performance degraded when it was duplicated on another array. On software it also was degraded.

The circuit adopted feedback loops and other characteristics of an analog circuit.

What's truly amazing to me is the design. It is something that is outside of the realm of human comprehension. Nobody would think to design a circuit this way because it doesn't make sense to include seemingly disconnected and worthless elements.

I shouldn't speak for others, but I would never think to include the extra elements of the circuit because it would strike me as wasteful and cluttered. The result looks like a maintenance nightmare.

The circuit is truly amazing. Experts don't have a clear understanding of why all the elements are necessary. Only by removing them are they able to see that they are.

My own speculation is that there are small variations in the FPGA gates and only through evolutionary exhaustion were they found.

This is fascinating to me for many reasons and the implications of using the principles of evolution through natural selection to design solutions to find optimized solutions to problems.

Consider the current results of evolution through natural selection. Life, is truly amazing. Consider the diversity of animals, plants, and microbial life. Life is able to adapt exceptionally to myriad environmental conditions. Life at an evolutionary level is unforgiving, you fail, you die, and there aren't any little ones like you after you're gone.

The same rules work surprisingly well with software. I think that it can be complementary to Test Driven Development. I wonder if evolutionary design could actually replace the human part of development.

Consider the differences between TDD and evolutionary software development: both can state their acceptance criteria upfront and both provide a solution to the problem until the acceptance criteria can be met.

The advantage that evolutionary design has over human designed solutions is the absence of any human prejudice. Evolution is really a results oriented environment--maintainability, comprehension, beauty, personality, and all the other human influences are not part of the equation--well unless they are defined as part of the acceptance criteria. Given enough generations, an evolutionary design will produce the most fit solution as defined by the acceptance criteria.

By letting evolution manage the implementation of our goals, implementations that exceed the abilities of human comprehension can be produced. In essence, the programmer is god like in her ability to create programs that exceed her own ability to create a program.

Gabriel said that the results of evolutionary design is troubling to creationists and evolutionists. The trouble to creationists should be obvious. It shouldn't be a concern to the rest of us though. There are plenty of examples where observable reality should be troubling to those who buy in to a religious dogma. For example, if the universe is only 6,000 years old and we are able to observe stars that are 5 million light years away--and much further for that matter--and we know the speed of light to be constant; how can one honestly continue to believe that the universe is 6,000 years old. Something has to give.

For those who believe in evolution, Gabriel asserts, the results of evolutionary design should be troubling because we, humans, may not be able to explain the results. Are we to believe that an intelligent designer stepped in and created the results of the evolutionary design? The results actually affirm my belief in the viability of evolution.

But I digress, evolutionary design certainly does raise some issues that some may find in conflict with their faith. Gabriel did mention a computer scientist who refused to work with evolutionary design because, presumably, of her beliefs.

Other questions arise though. Who should take ownership and responsibility of the results of evolutionary design? Certainly the first person to claim ownership of something that can be monetized will want to claim ownership, but what about responsibility. Will that person accept the liability of the software that they claim to own. What if an evolutionary designed program turns out to cause people harm? Who should be held liable? The concept of ownership can be challenged by this method of design.

Second Life for Software

Gabriel concluded with a proposition that for evolutionary designed software to take the next step and be integrated into an ULS an environment where software can interact must be created. He suggested a Second Life be created for software. His proposition is a virtual world where humans and software can interact. In this world software would take on physical characteristics of volume, mass, odor, color, shape, and sound.

In this world software would be free to evolve. The software that is useful or beautiful to humans would thrive. Gabriel kind of lost me at this point. I'm going to have to think about it for a while.

Saturday, February 7, 2009

There's nothing I don't like more than thinking I've found an answer to a technical problem only to find that the solution is on the Experts Exchange.

For those who have not had the misfortune of running across the Experts Exchange, it is a web site that purports to have 'expert' solutions to technical questions. It very well may have the solutions, but they want more money for the solution that I have yet to be willing to part with.

They actually do offer the solution for free, but it's buried under a ton of spam quality ads. It has been a long time that I've needed technical help so desperately that I would wade through an Experts Exchange page, but alas it is no longer necessary. Coffee Powered offers instructions for bypassing the spam and getting to the good stuff with the help of the Remove It Permanently plugin for Firefox.