Today is a good day to code

Is PRISM Wrong? It’s Complicated

Posted: June 10th, 2013 | Author: | Filed under: Lifestyle, Uncategorized | Tags: , , , , | 2 Comments »

I have been thinking about the surveillance issue a lot over the past few days, and have read a large number of opinions on whether what the NSA is doing is right or justifiable or constitutional.

I think that many people are missing something of the point. The documents we are reading about were never supposed to be released. It is akin to hearing one side of an argument. It is always easy to agree with a single side, you are missing all of the counterpoints which support the opposition’s position.

In the case of surveillance, in the absence of documents that support the need for this level of surveillance we can only speculate about how we got to the Verizon request and PRISM from the Patriot Act. To have a valid public debate, we would need to have access to the FISA court’s proceedings and the analysis of the original signals which led to PRISM.

I don’t feel as though anyone can really say whether or not we should have a program like PRISM, or if we need the massive data mining operations that the NSA has purportedly been undertaking, because all of the documents which would educate us about what is actually happening in the world around us are classified.

What I can say is that I would guess that the justification for this level of intrusion is quite strong. That being said, in the future, we may be glad that what started with carnivore, and has progressed to PRISM has been in place. We just can’t know.

It is unacceptable for our government to just say “trust us, it’s for your own good.” That is not the principal upon which our country was founded. The federal government’s contract with the public is a partnership, not a patriarchy. It would be best for everyone if the federal government’s bias were set back to “what can we have have declassified” from “how can we classify this?”

There is no reason that I can see as to why much of the intelligence leading up to this which is ancient now has to still be completely classified. Some representatives and members of the intelligence community have said that if they redacted the documents to support PRISM, what would be left would be meaningless. Even just the volume of documents could indicate to the public how much support there is for surveillance.

Classifying everything is a cop out. Yes, obviously if we applied the full process of public scrutiny to the realm of homeland security things would take longer, the NSA and DHS would have to respond to legal challenges from all comers. That would be a good thing, we’d probably all end up back where we are today, but we would all be agreed that this is the right thing for the our country given the current environment. Instead, where we are now, is like a mother dragging a kid by the collar to eat their broccoli.

Also, what some have proposed, ceasing use of Facebook, Google, what-have-you, is ridiculous. It is equally ridiculous to call them complicit to something evil or other childish ideas of how companies work. No one at these companies wants to violate the trust of their users in so blatant a way as to immediately destroy their business. To do such a thing would be in breach of their responsibilities to their shareholders. It wouldn’t even make financial sense.

The opposite is actually what is more likely, they will make much more money by doing nothing to exploit your data as far as the government is concerned, rather by using it for marketing intrusions. The only explanation for why they would allow this is that they have no choice. This database is precious to them, if it found its way to a rival company or government it would do real material harm. Even having this double access system is a giant risk, secret or no. They would never do this voluntarily.


There Is A Place For Bitcoin At The Table

Posted: April 22nd, 2013 | Author: | Filed under: Lifestyle | Tags: , , , , | No Comments »

image

While watching the coverage of the recent Bitcoin rise and fall one thing kept striking me as somewhat lacking in the coverage. Most journalists have been constantly speculating about what Bitcoin can do for them in their cush safe federally insured economies, but what they seem to be missing is what Bitcoin cam do for countries with less than stable currencies.

To be fair, I have seen a couple of reports about what Bitcoin means to the rest of the world recently, but I think they are missing a couple of points.  Firstly the media is obsessed with Bitcoin’s worth relative to the Dollar, the Euro, etc…. this is completely irrelevant.  Bitcoin as a storehouse of value is great and all, but to frame it as that limits its potential and belies a lack of imagination.

Right now, if we look at Bitcoin, only those in wealthy nations can mine Bitcoin.  Either you have to have the means to built a quite expensive GPU based miner, you build an FPGA based miner, or you can purchase an ASIC based miner.  All of these things are out of the reach of most in developing nations.  What isn’t out of their reach, however is to make a product or service that would have value on the world market.  Today, for someone in a developing nation to move a product or service, they have to deal with corrupt exporters, or even if they have honest exporters, their goods can not really find their true value on the world market since they are sold to exporters in their probably over-inflated fiat based currencies.

The better way that Bitcoin makes possible is that these entrepreneurs can stake their price in Bitcoin and deal with distributors, shippers, and marketers with currency that has real value, without respect to what their local economy is doing.  This is a more efficient method of rewarding work without the political stigma of a devalued currency attached to it.

In the case that the good is a digital good, such as a book, or music, the musician entrepreneur for example can now produce music, distribute it via bittorrent, and take payment in Bitcoin.  They can do this all without any middlemen.  This is a beautifully efficient system of value exchange that the world has long needed.


How Google Can Save Retail and Give Amazon a Black Eye in the Process

Posted: October 10th, 2012 | Author: | Filed under: Amazon, android, Apple, artificial intelligence, Companies, Google, iPhone, Lifestyle | Tags: , , , , , | 1 Comment »
Closed down retailer

Montgomery ward closed down

Looking at Google’s new maps inside view, it brings to mind a general problem with physical shopping vs online shopping.  With online shopping, I know exactly who has the item that I wish to buy, and I know what the price of that item is.  I can instantly perform comparison shopping without leaving the comfort of my home.  This convenience has a down side as well, when I do not know exactly what I want to buy and am just shopping for entertainment the online experience lacks substance.  It is much more fun to peruse best buy than it is to scroll down a page of picture of gadgets.  This is where Google can help.

One of the things that Google has done that has no clear immediate value to the company is to map the world in extreme detail, this has come to include the inside of stores.  Amazon does not have this capability.  In addition, Google has its hangout technology which, when leveraged with this inside indexing gives Google both a search index of the real world, and the ability to have a high-fidelity experience with an actual salesperson.

Imagine, Google indexes all of the shops in the world, coffee shops, hot dog stands, I mean everything along with real-time inventory of the items in search results.  Then they index those images using OpenCV or some other image recognition technology.  Alongside that, every retailer in the world assigns one or more salespeople inside of the shop to carry a tablet capable of performing a hangout.  Again this represents a giant biz-dev nightmare, but keep bearing with me.

Now comes the beautiful part, I, at home am surfing the web on my tablet when I get the itch to go shopping.  Instead of hopping into my car, I allow Google to suggest stuff that I might be interested in ( Amazon has a huge lead here, but Google will likely catch up due to their having more signals ).  While I’m looking through the suggestions, I see a watch that I am very interested in, so I click into it and it shows me a map of all of the places around me that have that watch.  I click again and ask for a horizontally swipable, inside view of the top 5 locations that have the watch.

I can actually browse the inside of the store, see the display with the watch in high resolution.  There will be a little place that I can click inside the store if I need help as in the watch is not on display, or the shop keeper will be notified that I am browsing.  At this point, the shop keeper can signal that they want to have a hangout with me in g+, or I can swipe to the next place at any time and browse that place.  If I do want to discuss the item in a hangout, I can either initiate or respond to an invitation from the shop keeper.  While on the hangout, the salesperson can express their craft, showing me alternate items, asking me to send data over, such as measurements, we could exchange documents, etc…

This future would be tremendous, and it is something that only Google can do.  But wait, there’s more!  Imagine that at this point with my Google Glasses, now I can have a full AR view with the details of each item coming up in my heads up display along with other shops’ more aggressive deals ( read ads ).  It would be ridiculously awesome!

Ultimately this will level the playing field with online as well as brick-and-mortar retailers, with the brick-and-mortar guys having a slight advantage until the online retailers start hiring sales reps for g+ hangouts or an equivalent technology.  I believe that this will bring a pretty large increase in the number of sales people employed and reverse the current employment drain that retail is experiencing.  It makes perfect sense as to why Amazon is trying to build out its mapping technology as quickly as possible.  It will be interesting to see who wins.


Teaching my 7 Year Old Daughter to Code (Crypto)

Posted: August 24th, 2011 | Author: | Filed under: Lifestyle, Parenting, Programming, Ruby, Teaching Coding, Uncategorized | Tags: , , , , | 1 Comment »

When I started teaching programming to my children, I thought starting with JavaScript was a good idea. I still think that JavaScript is one of the most important languages to learn early in a programming career.  It just doesn’t seem to be the right choice for teaching someone to program when they are 7.

The reason is likely not what one would naturally think, the code isn’t too opaque, and the syntax wasn’t much of a problem for her.  It was just so much work to get output.  With my son, we worked on a really simple Python program working on his hand-me-down OLPC, my daughter was upgraded to an Acer Aspire 1 for her birthday.

With the Python, I felt like we made more progress due to the availability of a REPL.  We were able to make changes to the core code that was solving the problem and see results on the command line quickly.  With the JavaScript, we had to create an HTML page, load it into it, create some sort of markup output, etc… It just wasn’t as clean an approach to programming.

I have been asked by many about using “kid friendly” programming languages.  I think the people working on those are doing good work, however there is nothing “kid unfriendly” about the languages that I use for programming as an adult.  I think that in general when educating our kids, we need to stop coddling them so much.  Creating an approximation of an already dumbed down environment to write software to drive machines will not help them.  Most of the kids that I have seen are already beyond logo and they don’t even know it.  What they seem to want to do are real world things, and there is no reason they can’t.

What I settled on was to use Ruby for the tasks.  It is a language that has a great REPL, and is easier to read.  It also has the benefit of having a sane shell input mechanism as well as not requiring a ton of objects to get started.

We discussed what she wanted to do, there were several things, all of them were deeply social, but the one we settled on, I thought was the easiest to implement.  I thought that encrypting messages to her friend where only she and her friend had the crypt key would be enlightening.

She agreed, so we started into coding it up.  First we ended up working through a few encryption techniques on paper, taking short messages, converting them into their character codes and then shifting them by adding the char codes of each letter of the crypt key to each letter of the message.

def encode msg,key
	coded_msg = ""
	msg.each_char do |letter|
		coded_msg = coded_msg + add_cipher(key,letter)
	end
	return coded_msg
end

def add_cipher cipher,letter
	code = ""
	cipher.each_char do |cl|
		code = code + pad(cl[0] + letter[0])
	end
	return code
end

def pad num

   length=num.to_s.length

   if length > 3 then
      num.to_s
   else
      padded_id='0' * (3-length)  + num.to_s
   end
   return padded_id
end

At first, she put the crypt key into the program, but we discussed that it would be a bad idea since anyone with the source code could then crack the message.  She then asked me how her friend would decode the message.  I told her that the only way was for her to create a “pre-shared key,” something that she told her friend verbally that they would both have to remember, only then could that key be used to decrypt the messages.

What we did was to create a multi step command line program to accept the key and then the message.  We haven’t gotten around to the demux yet, but here is the mux:

print "Enter the crypto key, or die!: "
key = $stdin.gets.chomp

print "Tell me what to do ( 1 for encode, 2 for decode ): "
op = $stdin.gets.chomp

if(op.to_i == 1)
	print "Enter message to encode: "
	message = $stdin.gets.chomp
	coded_message = encode(message, key)
	print "Here is your message: \n"
	print coded_message
else

end

The nice thing about all of this is that the code is approachable, and the execution path makes sense… this happens, then this happens, etc… she can easily understand the flow of this program. We had significant problems with the flow of a client web application.

One of the first things that my daughter noticed was that whenever you make the crypt key longer, the message gets a bit longer, and that the encrypted message was many times longer than the original.  So it is working, not only is she understanding programming, but basic cryptography as well.  The only thing I am concerned about now is what happens when she is encrypting her posts on the social media site du jour at 16 with quantum encryption techniques.  How will I ever crack her codes?


The Post Tablet Era

Posted: July 30th, 2011 | Author: | Filed under: android, Apple, Companies, Google, iPhone, Lifestyle, Media | Tags: , , , , , , | No Comments »
google chromebook

Chromebook

The tablet entered with a huge bang a few years ago.  It was staggering, Apple sold in an incredible number of iPads and forced all of the netbook manufacturers and Google to scramble to produce and release a tablet OS, namely Honeycomb, that was arguably not ready for release.

The result with both the iOS and Honeycomb are two excellent tablet OSs, and Ice Cream Sandwich promises to be a stellar tablet and smartphone OS.  What I have been discovering over the past year plus using both versions of the iPad and the Galaxy Tab 10.1 is that I don’t really need a tablet for general computing.

This is surprising to me.  I built an IDE for the iPad and iPhone after all, and found myself using my own product more on the iPhone for quick edits than I did on the iPad.

I watch an awful lot of netflix on the iPad, and I play games most of the time that I am using it.  I have found that with the Galaxy Tab, my patterns are much the same gaming, watching videos, occasionally reading ( although I still prefer my Kindle hardware to the tablet versions ).

So I am coming to the conclusion that the pundits were right initially, tablets are clearly for content consumption, not content creation.  The reason, however that these devices are not suitable for content creation is worthy of debate, and is an issue that I’d like to take up now.

Natural User Interfaces

The user interaction that most tablets sport as the default is something that is being called a natural user interface, that is an interaction that uses some of the users other senses, such as motion, to perform an on screen action.  The current crop of tablets mainly use touch instead of a dedicated hardware component to facilitate user interaction with the interface.

This lends itself obviously to gaming, and a “kick back” experience of sorts.  The user can use touch, or the gyroscopes to control a character on the screen, this makes logical sense to just about any user.

As an example, many role playing games have a 3/4 view of the game board, that is, the camera is typically at 5 o’clock high, or somewhere thereabouts.  The control scheme for most of these types of games is to touch a place on the screen to send the character to that location.  Role playing games work particularly well on tablets for this reason, they are almost better with a touch interface than a controller.

As another example, car racing games use the accelerometer in the tablets to control an on-screen car.  This works well, unless you are in a position in which your motion is constrained, such as the bed, most of these games provide some sort of alternate touch based interaction that replaces the accelerometer based input.

The problem with using on screen touch points in auto and first person shooter games is that the controller now covers part of the screen, or your hands end up covering important parts of the game world, causing the player to miss part of what is happening.  I know that in my case, it takes away from the FPS experience and makes it so that I typically don’t buy those sorts of games on tablets, but instead prefer to play them on a console.

Natural user interfaces only work when the content is modified such that the user can interact with it sensibly using the available sensors, gyroscope, touch screen, microphone, et cetera.  In a famously bad case of using a natural user interface to interact with content from a platform that uses traditional input, Numbers presents the user with a typical spreadsheet like the one you would find in Excel for your Mac or PC.  The issue here is that Apple didn’t modify the presentation of the content such that it matches the platform.  Arguably there is no way to do this in a form that makes sense.

The interface for Numbers features beautiful graphic design elements, and is generally pleasant, but when you tap on a grid element, a virtual keyboard pops up and you are invited to type into the fields.  Apple has made a numeric keyboard interface which is pretty nice, but anytime you display the virtual keyboard, you haven’t thought hard enough about the problem.  Displaying a grid of content is not useful on this device, it is amazingly useful on the desktop, but it just doesn’t work here.  Inputting large amounts of data is frustrating, and the virtual keyboard makes mistakes all to common, either because of mistyping or the misguided autocorrect.

Modifying Content for the Natural Interface

Most of the people who are buying tablets today appear to be tolerating these issues, my belief is that they are doing this because tablet computers feel like a piece of the future they were promised when they were children, useful or not.  Eventually, they will likely stop using their tablets at all in favor of ultralight laptop computers, or they will relegate the tablet to the living room table as a movie watching and game playing platform.

It is possible to make significant user input acceptable on a tablet, perhaps even pleasurable, by using a bit of creativity.  First, they keyboard is a complete failure.  It has its place, but in most cases it can be replaced by effective gesture (non touch ) and speech recognition.  This is the only viable way for bringing large amounts of content.

On the visualization front, using our example in Numbers, perhaps a flat grid is not something that makes sense on the tablet, maybe we should send the data to a server for analysis and present it as a series of graphs that can be changed by the user, manipulating the graph directly with touch actions, or with spoken commands.  The result of the changes would flow back into the spreadsheet, updating the numbers behind the visualization.

Many would argue that this would not be a rich enough interaction for some of the complex spreadsheets, pivot tables, etc… that they work with, indeed, it likely would not.  Most of these users would not perform these actions on the tablet, instead they would use a MacBook Air, or other lightweight laptop computer.  It takes a huge amount of creativity and intelligence, as well as significant amounts of computer power to manipulate data in this way.

Imagine a speech interface for a word processor that could use the camera to track your facial expressions to augment its speech accuracy.  It could, and should, track your eyes to move the cursor and ask you to correct it when you make a bad face at a misinterpreted sentence.  An application like this could make word processing on a tablet a wonderful experience.

The technology to do most of these things is here.  It is either fragmented with each part patented by a different company, some without any sort of tablet such as the Microsoft with the Kinect.  Or the effort to produce a piece of software to utilize the features of tablet computers to best effect is too great to justify the investment.  For example, doing that sort of work for a word processor doesn’t make sense when people will just jump over to their laptop to use Word.  Would anyone pay $100 up front for an iPad word processing application?  I don’t think so.  Would anyone pay $25 per month for the same application as a service on the iPad?  Its equally doubtful.

What you come to eventually is that, for interacting with content that either naturally lends itself to, or can be easily modified for, the tablet, it is fantastic.  Currently, however it is severely overpriced for how it is being used.  After all, you can get a fairly cheap notebook that can play Netflix and casual games for $200, or 1/3 the price of most tablets.  If you have to carry your laptop anyway, why would you have a tablet at all.  Why wouldn’t you take the Air with you and leave your tablet at home.  It can do everything the tablet can do, and it also can handle any of the content creation that you care to try.

Thinking about the situation, we need to find better business models that will allow for the development of applications that can handle the modifications to content that we need for tablets to be generally useful.  This will take a while, and in the interim it is likely that some companies will produce tablet hybrids, the ASUS Eee Transformer is one tablet that comes to mind.  It is very popular, runs a mobile tablet operating system, but becomes a keyboard wielding notebook in a second.

The Google Chromebook is another example of a lightweight, even in software, laptop that can do most of what a tablet can do, as well as most of what the typical laptop does.  In my own use, excluding building applications for tablets, I always reach for my Chromebook instead of my tablets.  All of this is excluding the huge difference in the difficulty of building applications on the platforms.

Writing applications for tablets is extremely hard with a doubtful return on investment, unless you are making a media or gaming title.  While writing applications for the web is easy and potentially extremely lucrative with many variations on possible business models, and little interference from device manufacturers.

I am starting to think that Ray Ozzie was right when he said that Chrome OS was the future.  It feels more like the near future than the iPad at this point.  The tablet will always have its place, and perhaps with significant advances in natural user interface technology, with accordant price reductions it will start to take over from the laptop.  I am fairly bullish on the natural user interface over the long term, but at the same time I pragmatically understand that we aren’t there yet.  The devices, software, and consumers have a lot of work to do for us to really enter the era of the computerless computing experience.  I am committed to getting there, but I think that the current crop of tablets might be a false start.


Teaching my 7 Year Old Daughter to Code (Mazes)

Posted: February 5th, 2011 | Author: | Filed under: Lifestyle, Parenting, Teaching Coding | No Comments »

Today we advanced in our lessons.  I started teaching my daughter how to code about a month ago.  I started when I was about 7, so I thought it was about high time I got her going.  I bought her an Acer Netbook a while back.  Windows 7 Starter is a bit weird, but it does what we need it to.

I started teaching her JavaScript / CSS / HTML because I wanted for her to be able to see her work immediately, and  UI work is usually best for that.  We went through some basic typing, data structures, and some general information like number systems, hexadecimal, etc… She stayed with me.  We did that for a few lessons.

I typically keep her for about 1 hour per session.  Sometimes she wants to go for longer, sometimes she loses interest after about 20 minutes.  I always let her go when her attention starts to waver.

Today we started on our real project.  The first few things we built were simple, a list of her favorite things, some colored blocks, drawing some lines with the canvas element, but the end goal is to make a maze game for her brother, who loves mazes and is 3.

At first her suggestion was to make mazes manually, but after we thought about it a bit more, she realized that she would need to build many, many mazes to keep her brother busy.  So we started to think through how we could make the computer create the mazes.

My Daughter's Maze Generation Algorithm

My Daughter's Maze Generation Algorithm

Some of the problems we thought through were firstly how the machine should visualize the maze.  We thought through 3D constructs, which were crazy complicated and I suggested we do those later, and eventually we settled on a battleship style construct.

The next thing we started was to define the rules of movement through the maze for the computer while it is creating the path from the beginning to the end.  She decided that the computer should choose an entry point and an end point, and after some discussion we decided that they should be on the outside of the grid.

Then we thought about whether or not we wanted the entry and exit to possibly be the same.  My wife suggested we play simon says for a bit since we were talking about instructions, which was very helpful.  Then we decided that the computer, and her little brother, couldn’t move diagonally, but we needed a way to write a rule that the computer would understand.  The number and letter thing she came up with toward the end of the hour.

Teaching her how to hack is going surprisingly well.  I do not think that I have an overly gifted daughter, but I think that teaching coding by writing code is the best way.  For defining a set of rules though, a piece of paper is always a good first step.

The ultimate difficulty is that she wants to put the game on the iPad, and eventually in the AppStore.  We’ll see how far we get with that.  I suspect that most of the iOS coding will be done by me ;-).  I am hoping that this helps other software engineer parents who want to figure out how to teach their kids the art.  I’ll try to chronicle my setbacks, as well as my successes in subsequent posts.


Pre-Superbowl Geeking Out

Posted: February 4th, 2011 | Author: | Filed under: Lifestyle | 1 Comment »

Teaching my kid about designing football plays, in honor of the impending superbowl with ZigZag Board

Pre-Superbowl Play Designs for the Steelers

Coaching my Kid


Google’s Vision of the Future is Correct… But They May Not Be The Ones Who Implement It

Posted: January 8th, 2011 | Author: | Filed under: Companies, Google, Lifestyle | Tags: , , , , , , , , | No Comments »

On a drive from Colorado to Las Vegas this past week my daughter and my son were in the back seat of our car using my daughter’s netbook, she has recently turned 7 years old so I bought her a netbook and I am starting to teach her how to code.  My son wanted my daughter to change the video that they were watching and she began to explain how the internet works to him.

She told him that all of her stuff was on the internet ( emphasis mine ) and that the movie that they were watching was the only one that was on her netbook, she explained how her computer was barely useful without the internet, that the internet came from the sky and her computer needed to have a clear view of the sky to receive the internet.  In addition she said that since we were in the car and the roof was obscuring said view that they couldn’t get the internet, and couldn’t change the movie.

Listening to this conversation gave me a bit of pause as I realized that to my children, the internet is an etherial cloud that is always around them.  To me it is a mess of wires, switches and routers with an endpoint that has limited wireless capabilities.  When I thought through it, however, I realized that my kids had never seen a time when someone had to plug in their computer to get to the web.  Plugging in an ethernet cable is as old school as dial-up.

Once that sunk in, I understood that the Cr-48, Google’s Chrome OS netbook is a step in the right direction, and while I am very enthusiastic about several aspects of Google, and in all fairness others’ vision of a web based future, I do not feel that the current approach will work.

A centralized system where all of users’ data lives, and all communications go through is not an architecturally sound approach.  As the number of devices that each user has goes up, the amount, size and types of connections is going to stress the servers exponentially.

It is already incredibly difficult to keep servers running at internet scale, we need entire redundant data centers to keep even small and simple web scale endeavors running.  When you take a step back you realize that a system like Facebook is barely working, it takes constant vigilance and touching to keep it running.  It isn’t like a body where each additional bit adds structural soundness to the overall system, instead each additional bit makes the system more unwieldy and pushes it closer to breaking.

Google is another example of a system that is near the breaking point, obviously they are struggling to keep their physical plant serving their users, and like Facebook they are so clever that they have always been able to meet each challenge and keep it running to date, but looking at the economics of it, the only reason this approach has been endorsed is because of how wildly lucrative mining usage patterns and the data generated by users has been.

I don’t think this will continue to be the case as the web reaches ever larger and larger groups of people. I don’t think any particular centralized infrastructure can scale to every person on the globe, with each individual generating and sharing petabytes of data each year, which is where we are going.

From a security and annoyance perspective, spam, malware, and spyware is going to be an ever increasing, and more dangerous threat.  With so much data centralized in so few companies with such targeted reach, it is pretty easy to send viruses to specific people, or to gain access to specific individuals’ data.  If an advertising company can use a platform to show an ad to you, why can’t a hacker or virus writer?

The other problem that is currently affecting Google severely, with Facebook next is content spam.  It is those parking pages that you come across when you mistype something in Google.  Google should have removed these pages ages ago, but their policy allows for them to exist.  Look at all of the stack overflow clones out there, they add no real value for themselves except for delivering Google adsense off of creative commons content.  What is annoying is that because of the ads, they take forever to load.  Using a search engine like Duck Duck Go things are better, but this is likely only because it is still small.  DDG also says that it will not track its users, that is awesome, but how long will that last?

It is possible for a singly altruistic person to algorithmically remove the crap from the web in their search engine, but eventually it seems that everyone bows to commercial pressure and lets it in in one fashion or another.

Concentrating all of the advertising, content aggregation, and the content in a couple of places seems nearsighted as well.  The best way to make data robust is to distribute it, making Facebook the only place where you keep your pictures, or Google, or Apple for that matter is probably a bad idea, maybe it makes sense to use all three, but that is a nuisance, and these companies are not likely to ever really cooperate.

It seems to me that something more akin to diaspora, with a little bit of Google wave, XMPP, the iTunes App Store, and BitTorrent is a better approach.  Simply, content needs to be pushed out to the edges with small private clouds that are federated.

This destroys most of the value concentrated by the incumbents based on advertising, but creates the opportunity for the free market to bring its forces to bear on the web.  If a particular user has content that is valuable, they can make it available for a fee, as long as a directory service can be created that allows people to find that content, and the ACLs for that content exist on, and are under the control of the creator, that individual’s creation can not be stolen.

Once the web is truly pervasive then this sort of system can be built, it will, however, require new runtimes, new languages, protocols, and operating systems.  This approach is so disruptive that none of the existing large internet companies are likely to pursue it.  I intend to work on it, but I’m so busy that it is difficult.  Fortunately, however my current endeavor is has aspects that are helping me build skills that will be useful for this later, such as the Beam/Erlang/OTP VM.

The benefit is to individuals more than it is to companies, it is similar to the concept of a decentralized power grid.  Each node is a generator and self sufficient and the system is nearly impossible to destroy as long as there is more than one node.


When is Mides Going to get its Bugs Fixed

Posted: December 19th, 2010 | Author: | Filed under: iPhone, Lifestyle, mides, Objective-C | Tags: , , , , | No Comments »

A few people have been asking me when Mides is going to get its bugs fixed.  A few others are asking about Git & Subversion, yet a few others have been asking me about code completion, syntax highlighting and shortcuts.  I thought I would take a moment to post about what I have been doing, what the future of Mides looks like, and what I hope to be doing.

A few months ago, 5 to be exact, I thought I was in a stable place, where the coding challenges were hard, but not too hard, I worked with some great people, and we were having a great time.  Well, most of that was true, unfortunately the stability thing became an issue, and I started looking for a new job.  I was contacted by an awesome founder looking for a technical co-founder to help revolutionize the concept of whiteboarding with a strong focus on usability.  I accepted, and am now the CTO and Co-Founder of ZigZag.

Since we are a lean / agile outfit, we have an iteration loop that consists of building stuff and putting it in front of customers, and repeating.  I am having so much fun, and there is so much to do that there just isn’t time to do anything else.  When I was working at my old job, the breakdown looked like this:

My Brain Capacity Before ZigZag

My Brain Capacity Before ZigZag

I just had the ability to do a ton more stuff, and one of the things that I really wanted, and still want to do, is make it possible to do serious development while mobile.  The thing is that right now I just flat out don’t have time to work on it.  My available time and space for working on other projects looks more like this now:

After starting work for zigzag

Brain Capacity After ZigZag Board

So what do I see as the future of Mides.  Well, after ZigZag gets funded, which will take a ton of work, fortunately less from me since I have a non-technical co-founder who is awesome at sales, and we can hire a few quality engineers and usability people, I’d like to come back to it.  Its a tool that I currently use for working on our RoR web stuff, and since we use GitHub, pivotal, and AWS, I’d like to build in more integration with those tools.  I originally built Mides so that I could be more efficient, and I still see it as a tool for doing that.  Some things that likely will go away are plain old FTP access.  It is too complicated to support FTP, and I can’t find a library that isn’t encumbered by the GPL, so that probably will go away since I have to write it all from scratch for it to work.

What will stay, and get added?  Some other things that I would like to add include code coloring, git and subversion, more RoR support, a shell to work in AWS, a service to compile and run code in an on-demand instance, some other goodies like that.  I am currently thinking about that kind of stuff in the few seconds between when I am hacking Erlang, and Objective-C…  Granted those seconds are precious and hard to come by, so while I am not saying that I will be dropping work on Mides entirely I am not going to be doing any sort of hard core coding on it until ZigZag Board is completely off the ground and flying, which I hope is soon, I am putting everything I have into it.

Me as the CTO of ZigZag

How I Feel Every Day I Get to Work at ZigZag

The good side is that when I do start working on Mides again, the quality of the implementation will be much higher as my Obj-C skills are improving by leaps and bounds.  I am constantly amazed by the stuff that is possible on the iPad and iPhone, not that it isn’t challenging to work with, but it is an awesome platform.

Changing jobs was a great decision for me, I am challenged by something new and different every day that I log in.  I was atrophying before, and now I find myself asking myself what is important to do right now, and what can we ship right now so we can learn from our customers.  It is a much healthier place to be in, even though it is tinged by paranoia about money.  I am becoming a much more focused developer, and working with a co-founder who can clearly articulate his vision for the product, and who is also well versed in lean / agile, is hopefully going to make me an even better leader than I have been in the past.  Unfortunately my other projects will have to take a seat way, way back in the balcony.

Plans for Mides

Future Plans for Mides

I hope to get through even some of that for Mides eventually, if I can, then my vision for Mides will be complete.  It might take a couple of years, but I still want to do it.  Building tools is extremely difficult, not the least because developers are frequently not willing to pay for tools ( thanks Sun! ), they are incredibly critical of said tools, and getting the usability story right is nearly impossible.  That non-withstanding, I have learned a bunch from people using Mides, other developers are typically very clear about bugs, and the offers of support and help have been wonderful.  Well, that’s the news, I felt I should update everyone on the status of Mides.  It is definitely a side-project, and is likely to remain one, I can’t really see any reasonable business behind it, it is fun to work on, and will continue to be.


How Having a Family Changed My Technical Focus

Posted: August 3rd, 2010 | Author: | Filed under: Companies, Lifestyle, Programming | Tags: , , , | No Comments »

When I first started coding, I was interested in building the geekiest, most technical solutions to problems that I could find for fun;  Stuff like IDEs ( Before Mides ), JavaScript dynamic UI generators, stuff to make programming more efficient.  After having my kids, and advancing through the ranks, however I found out what was most important.  I stopped wanting so much to acquire power for power’s sake, I stopped wanting to accumulate stuff, I stopped wanting overwhelming amounts of money to do thing X.  What I wanted in greater quantities was time.

Time is the only truly non-renewable, non-discoverable resource.  For any other physical thing, one can imagine a future in which such a thing is renewed, discovered somewhere out there, or produced from something else, but time can only be conserved.  It is this focus that has driven me to keep getting better as both a businessperson, manager, and programmer.

A few years ago I realized that I had the technical ability to build whatever I wanted, perhaps not as efficiently or elegantly as more experienced developers, but I could get it done.  I got pretty complacent for a while, and I lost the understanding of why I am developing software.  It was then that I fell in with a bunch of user experience people after the bubble burst and I had to find a normal job.  I was building online classes for the Academy of Art University.  I met some of the most amazing graphic and user experience designers I have ever worked with during that time.  They exposed me to another function of code, one that has stuck with me and has become part of my technical focus, that code could provide a better interaction through transferring some value to an end user.  Namely, a well-designed efficient user interface could reverse the clock as it were for some users.  A good UX design could give time back to the user, time spent learning an arbitrary interface with no organic mapping, no feel, time spent being made to feel ignorant, all of that could be given back to the user of the software.  Bonus points could be awarded if it were to make something that the user wanted to do more efficient, such as finding a good restaurant, or figuring out who in the organization was the best person at solving their specific problem.

I became a user interface builder, hoping to figure out some of the magic of user experience design, as this is clearly the most important part of any application.  I got pretty good at it, and being able to make users smile was definitely what kept pushing me to get better, but once I got married, and had kids, I became one of those users, the ones with no time, the ones who wanted stuff to just work.  Some interesting changes began to occur.  The first was that I ditched more complicated tools that provided less value for the time invested and started using Apple computers and software, not because I couldn’t understand the PC stuff, but because I didn’t want to waste the time on making it work the way I wanted it to when I could be spending time with my wife and kids instead.

As I rose in various organizations, I found an entirely new level of wasted time, work consisted of aimless meetings that propagated like a bad virus, developers didn’t document or test their code, leaving me to have to read for hours just to figure out what the code path was in some cases.  In other words, while the goal of the company was to build products to provide value to their customers, that wasn’t what they were spending the bulk of their collective time on, it was just in organizing itself, or fighting divergent agendas.

It is this last set of issues that has once again given me purpose.  I want to give hours back to working people through the code that I write, the teams that I lead, and the businesses that I associate with.  I believe that it is through good internal processes, healthy channels of communication, and heavy use of technical efficiencies that I can give time back to the people that I work with.  I believe that it is through developing software for regular working people at all levels to remove obstacles and to enable them to accomplish more in less time that we can all spend more time with our families, playing video games, developing new businesses or technologies, or just plain loafing around, whatever makes you you.

Part of that is a focus on making every user interaction as excellent as possible given the technology available, and the rest is to choose to build software that has a direct and measurable impact on organizational efficiency.  Some people say that having a family and responsibility slows a developer down, in my case it has sped me up.  I have learned how to delegate, how to focus on what is important.  Most importantly, I have figured out how to execute.  I think that I have learned how to spot time wasters and find / build ( or ask someone with more experience ) solutions to get rid of them.  Only time will tell if I have actually got a handle on this, but I think with some good strategic alliances to shore up my blind spots, I have a good shot at building software that can help keep our time expenditures down.  Time saved is time saved, no matter how difficult it is, its worth making every effort on this front.