[ Content | Sidebar ]

When Everything Becomes Content

April 26th, 2012

There is a lot of talk around 3d printing these days, and what it will do for manufacturing. How it can democratize the creation of products and move innovation back into a cottage industry alongside big R&D departments. Once again, individuals will be a key creation of inventions, holding patents and other forms of intellectual property.

While this is interesting, there is a bigger picture to be excited for. What does life look like when this technology is commoditized and ubiquitous. Working in technology, there is a pattern that I think will hold true for 3d printing: the technology and hardware lose value, while content is king.

Look at music. MP3 players ushered in a revolution. Now they barely exist. Who buys an mp3 player? It’s a feature of your computer, tv, game console, phone, car. Lots of devices can play mp3s. The money is in the marketplace (itunes), and the content (publishers and artists). Publishers are complaining and have been hurting because they didn’t adapt. With manufacturing taken out of the equation, the barrier to entry it lower. Record labels now compete on the ability to promote artists, content and merchandise, as well as general business acumen. Some will adapt and survive.

So what happens when 3d printing is everywhere? The barrier to entry for general merchandise is lower. Barbie™ is now just content. She is a license. I don’t go to a big box store and buy a plastic doll that was shipped across the country. I buy a license to print a doll for my daughter from some “iTunes for everything” store, and it prints. So now, Mattel’s advantage over the makers of a generic blonde doll (with unrealistic proportions) will be their ability to market and innovate a brand and culture behind the doll. Meaning that packaging, distribution channels and manufacturing are no longer a competitive advantage. Sure, they have a head start with branding, but they haven’t exactly been breaking their backs fending off competitors, have they. But what about when this digital license store for everything is selling a Barbie license for $4.99 and a model made by a home hobbyist that comes with a link to some youtube stories about the doll for $.99?

Which is why companies like Mattel would accept this shift in the first place. Knockoffs or pirated plans for their designs will be on the market before real designs are anyway. Just like music, the big product companies will get dragged into this business by the inertia of the technology.

In this version, a couple of interesting questions come up. Who owns that license store? It’s way too early to guess, but if I had to put money down now, I’d say Apple and Amazon are the leading contenders for seeing this far into the future. Being cloud content providers, they will be on top of the ball realizing that I want to carry these licenses with me, especially once the printer is a commodity.

Which brings up some other interesting areas: maintenance, travel and license enforcement.

I should never need to buy my daughter another doll if it breaks, because I can just reprint one. Thinking of disposable things, how is there recurring value. Once I buy the license to a razor, I never need to buy one again.

For that matter, what stops you from printing razors for your neighborhood? What is the DRM model like for a trivial thing? And who believes there wouldn’t be an open-source razor that was good enough.

Certainly I like the fact that I don’t need to store all these things. Assuming we can print almost anything, then I don’t have a closet full of toilet-paper, I just print a roll when I need it. Think of all the things in your house you don’t need to store, from seasonal tools to disposable goods.

The idea I really love is travel. If my phone/tablet/whatever is my wallet (near field payment) and stores my licenses, then I can travel with just the clothes on my back. Each hotel room would have it’s own 3d printer and I have my preferred razor, toothbrush, and entire wardrobe available.

Highway truck travel drastically reduces in a world where I only need the basics “inks” (raw materials like polymers, metals, cotton) for my 3d printer. My town is now full of service providers and social locations, not big box retailers. Personal travel for errands goes away. The virtual workplace is realistic or more than just information workers, center employees and data researchers. Certainly the remote access of this is huge. Imagine a specialized implant needed in a remote medical center. Or repair parts needed on a space station. Imagine the difference to the Apollo 13 crew if they had a 3d printer.

A lot of this view of the world relies on the ability to easily recycle these materials back into those raw materials (inks). Assuming that, then some things may go away. For instance, if the power used to recycle and reprint an item of clothing is less than the power to wash clothes, then clothes washers go away. You would wear an outfit until done, then put it in a recycling bin. And you don’t need a closet, you just have a license to a variety of designs. If clothes are always new, then will the stigma of wearing the same outfit go away. Will people find 2 or 3 favorite outfits and simply rotate those.

This new view of the world of things is very interesting to me. On one hand it has a utilitarian view, where we can have much less stuff around us on a regular basis, and people can more easily live wherever they want. On the other hand, it doesn’t have the cold feel of many utilitarian views of the future, because of the freedom and ease of design, redesign and distribution. If the printer can use almost any material and the recycling can keep efficiency pace, it could really be a stunning new world where we have real ways of dealing with scarcity. Materials are used more efficiently in this manner, and products only need to exist during small windows of time. An for an even bigger change, imagine what happens the minute organic material can be printed in this, namely food and replacement organs.

Post to Twitter

Lessons of a Failed Startup(s)

April 11th, 2012

A couple of months ago, I finished reading Eric Ries’ The Lean Startup. It got me to thinking about startups and small projects I’ve been a part of in the past.

In particular, I think of a social site for readers that I was apart of that failed. I think of the the end, where I was trying to make the case to launch something and let users drive the feature list. What I find really frustrating is that I did such a poor job of communicating that at the time. Reading the book, I hear a much better way of emphasizing the point of customer feedback loops. The minimum viable product with hypothesis and user testing driving the next steps; it has so much value. Additionally, that movement has a number of successful followers to their name, so they have credibility with their message. Timing and other market factors may have doomed us anyway, but I can’t help but thinking of what could have been different armed with some of that information at the time.

The other part of the book that really resonates with me is how hard successful startups are. People are so afraid of there idea being stolen. In the book, Eric Ries suggests that you try to have someone steal your idea (it’s hard to do). He’s right. If someone actually wants to steal your idea, at least it validates that other people think it’s a good idea.

I get approached by people with startup ideas a lot, looking for programmers who want to work for equity. For young developers with the time, I think they should get involved, it’s a great way to learn the realities of business and to get some extra experience. But beware of how much of a longshot it is to get the product successfully to market. It has to be a good idea, successfully built, successfully marketed, and fill a timely need. Miss any of those categories, and you probably won’t do much.

I’m not suggesting people avoid startups. They are a great learning experience and some of them work out. But go in with your eyes open to the amount of work you have in front of you. And be discriminatory about where you choose to invest your time. Are the others involved willing to put in the same effort you are? Will this new organization be capable of all of the things needed to be done to launch a product?

My advice for evaluating an idea: run a set of books for the project (meaning keep accounting). If you’re working for equity, keep track of time anyway and what you could have been paid at your regular rate to do that work. How long will it take for the project to pay that back? That question opens a lot of eyes. Say what you will about money as a measuring tool, but it’s the standard for all projects and companies. It’s relatively objective, and very compatible with math. The same can’t be said of a subjective goal like “let’s take over the XYZ market.” Presumably, you have your day job because you make someone more money than you cost them. If you can’t say the same of your startup project within the first year, then your project doesn’t even have the ROI of your “boring old day job” (you may love your job, my point here is that people thing of startups as high risk / high ROI and that may not be the case). Every time you sit down to put more into the project, you’re saying that you will get that back in cash on the other end. Is that true, or are you kidding yourself?

There can be other reasons to do a startup. I’ll use a personal recent example. I built VicinityBuzz, and iOS application around Social geo-search (also coming soon to Android and WP7). It’s been slow out of the gate so far, but I’m hopeful that some of the new features coming in the next update and some marketing ideas I have will help. Regardless, I’m certainly a long way from paying myself back for the time I put in. But I have been working in cutting edge technologies more and mobile is a real focus. I knew even if the project never paid for itself that it was valuable time learning and to put the project into my portfolio of work. I went in with those realistic expectations, but try really hard to exceed them.

If there is intended to be a single message of this post, it is to apply measurable goals to your projects, and evaluate and pivot your direction as often as reasonbale. If I had to boil down the message of the book to one sentence, that would be it.

Post to Twitter

Boiling the Ocean (or Attempting to Keep Up With Tech)

April 10th, 2012

I was asked by a fellow developer how I keep up to date on the variety of technologies that I’m expected to understand when doing my job. I intended to write a short answer, and generate a blog post as a longer answer. I got this idea from Scott Hanselman, who in his talks about productivity mentions saving keystrokes, and the idea that when you answer a question for someone, you should share that in a way that is useful to you and others. With that in mind, here’s the advice I would give if you find yourself taking on a job that requires a broad knowledge of the technology and software.

Question: Somebody in your position obviously needs to understand a lot of technologies to be able to pick the best solution for a project. How do you approach learning and having an understanding of all the new stuff that is constantly coming out? Obviously you can’t sit down and learn every tiny detail, but do you just obtain a high level understanding of how things work and then flush out the details once you start a project in a technology that you’ve never used before?

I use Google Reader a lot, I just checked and I have 121 rss/atom feeds going into it. They are not all work related, and it’s not like I read every article. But I star stuff I want to read, or put it in Instapaper and then go back to it. I try to read a mix of updates on what I already know and interesting things about what I don’t.

As for how to learn and retain, and relate technology, that is a harder question. I’d love to tell you that you just get a high level exposure first and then fill in the details when needed, but my mind doesn’t work that way. I hated classes like Systems Analysis in college that only talked about systems in generic terms, because I couldn’t relate those terms to specific examples.

My own take is that in the beginning of your career, you just have to learn practical skills and learn the tools you work with well. When you start wanting to learn about systems and being able to evaluate, compare, select, recommend, etc, then you pick up as follows:

Let’s say I’ve never used a database, and I’m assigned to work on a project that will use Ruby on Rails and PostgreSQL. Take the on the job time to learn the tool as well as you can, focusing on the aspects you need for your job. Where possible, try to understand and separate product names / features from conceptual names / features. In this example, that means understanding what database and schema mean in generic terms, and why they mean different things in the PostgreSQL than they do in some other products (like Oracle or SQL Server). Spend a little bit of off time playing around with an easily attainable (usually open source) alternative. Spend a night or two doing those same types of tasks in MySQL. You’re not looking to be a dba, just doing similar tasks as to what you do. Finally, talk to people who use other products and compare. This works great with products that are hard to get a hold of because of cost, etc. In this example, talk to an Oracle DBA or App Developer. What features do they like about their product that would prevent them from switching. If you don’t know one, ask the question online. Quora, LinkedIn, Twitter are all great places for this kind of question.

At this point, you’re out of work time (so not counting your project time working with PostgreSQL because you would have done that anyway) is 4-6 hours on MySQL and maybe another hour in conversation. But you should have a really good idea of the concepts surrounding relational databases.And you should know what the different projects compete on in that arena and what some of their strengths and weaknesses. If you spend time away from that field and come back in, you should have the conceptual understanding and just need to buff up on the implementation details and latest trends.

Two other quick pieces of advice. First – After getting the practical experience on a type of tool, read the Wikipedia page. Most pages are at most a 15 min read and they lay out the purpose and strategy behind any tool type, and usually list the major players in that area. Second – Try to keep personal opinion from having to much sway. We all prefer different tools, but every tool can be criticized. That’s important to do, and know it’s weakness, but don’t dismiss the tool outright. They were built for a reason, a context. And many of the weaknesses relate to some tradeoff the programmers / vendor made that has a good reason behind it.

Post to Twitter

Strange NuGet Error

March 13th, 2012

One of the projects that I work on uses NuGet for library management. We have a rake task that runs build, clean, etc. One of the rake tasks runs NuGet.exe which is stored in a tools directory. That way, everyone uses the same version of NuGet even if they have different versions installed in their program files directory.

For some strange reason I was getting errors when running the rake task that updated the packages. Sometimes it was a generic error, sometimes “Archive file cannot be size 0″. I verified that the NuGet version hadn’t changed. I tested on other machines. I tried running the command by hand to take rake out of the equation. On one machine, it wouldn’t work. Every other machine fine.

I even wiped the folder and checked out again with git. No luck. Finally, I decide to look for a NuGet local cache and see if I had bad packages. Delete the contents of C:\Users\YourUsername\AppData\Local\NuGet\Cache\ and this problem will go away. Hopefully this info saves you some time.

Post to Twitter

VicinityBuzz: Writing A Mobile App

March 8th, 2012

This post is intended to go through the process of writing and publishing an app. It will be a high-level introduction. The idea is that future posts that will dig into specific topics in depth. This post will be updated to link to those future posts as an index of mobile development topics. The app I’m describing is VicinityBuzz and it’s available here.

Product Vision

While I had been thinking about writing a mobile application for a while, I needed an idea to stick with to completion. The app stores are relatively young, but they are fairly saturated, and bringing something new to the table was a challenge. Recently I read Eric Ries’ The Lean Startup and I do like the idea of MVP(Minimum Viable Product), so I didn’t feel the need to have a telephone book of requirements. I was just looking to have an original idea for the app stores.

In the case of VicinityBuzz, I have always felt that there are not enough good ways to search social media, particularly by location. There are social media sites like FourSquare solely dedicated to location, but I’m referring to something else. Using networks where content is the reason (not location) but by location. For instance, at a conference, users often hashtag their tweets with the name of the conference. But not always. And the hashtag will draw attention from people not at the conference. That’s fine, and there can be useful conversation by just using the hashtag, but what if I want to see posts of all users that are actually at the location.

app screenshot

This is particularly true of news events. On the day of the shootings at Chardon High School, I used the application to see what students and families in the area were posting about. They were each telling their own version of the story. It was heartbreaking and much more informative and up to date than the news being released to the public. Hashtags were useless in this case, for two reasons. First, the students weren’t hashtagging their posts, they didn’t need to. They were posting to their real-life friends and thus already connected on twitter. Second, the tag was full of a lot of the reaction from the public around the globe. That was interesting too, but it wasn’t was I looking for. I wanted facts and eye-witness accounts. It was like CNN’s iReport, but on steroids.

Platform Selection

Native or not? As a web developer, I chose PhoneGap. It’s a mobile platform framework that uses html and JavaScript, which are skills I already have. And the application didn’t have very many device needs that would require native access. GPS is the only device call I make, and that is easily accessible from the PhoneGap JavaScript API. I knew it would be faster than for me to learn the ins and outs of the Cocoa framework and Objective-C, although I am in the process of doing that now for future apps. I have written some small applications in the native iOS sdk, and even paired with some developers to help bootstrap their iOS work, but I just didn’t feel comfortable writing an app consumable by the general public yet. Along with PhoneGap, I’m using jQuery mobile.

Essentially PhoneGap provides project templates for your platform (Android, iOS, WP7, and more) that create a shell of an application that hosts a browser control. All of your files go in a directory (like resources) and get loaded up by the browser control.

app screenshot featuring controls

Using PhoneGap gives me a version that is easily ported to Android and WinPhone 7. Although those markets lag Apple’s AppStore in terms of developer revenue, I want to cast the widest net possible with this application for obvious financial reasons, and also to learn. The more feedback I can get on the application, the better I can make it.

At some point I may go ahead and do a native rewrite. But for now, I’m very happy with what is possible in PhoneGap and jQuery mobile.

Prototyping

I started development with jQuery UI in a browser. Using the built in JavaScript debugger in Chrome was easy. Note you could just as easily use Firebug in Firefox, or the IE Developer tools. Once I was satisfied with functionality, I swapped jQuery mobile in place of jQuery UI and moved the app into the PhoneGap container. More on that in the next section.

One note: If I had to do this over again, I would have simply started with jQuery mobile. It’s not that hard to get started with as the docs are great, and it’s best to just start down that path.

App Store Submission

Thus far, I can only speak to the Apple Store submission process. After going through the steps provisioning portal, it was fairly easy to test the app on a device. In order to submit to Apple, you then create a profile for the application (screenshots, contracts, payment details, etc) and submit a signed binary to Apple for review. The process of signing a binary for release can be a little tricky, but the walk-through on Apple’s developer portal helps a lot.

One thing to note: Apple requires you have a support page. I stole an idea from the Trello folks, and used a public trello board for this purpose. It took less than 5 minutes to setup.

Marketing

I created a basic web page with a description of the application. Apple has a page for making the link to their store. If you are interested in opening the store automatically, either see the options in this stackoverflow post, or add the query paramter “ls=1″ to the url you get from the link maker.

What’s Next?

Apple just announced “the new iPad” so I have to do some updating to support that. I haven’t read the new docs, but I assume this means a high-res iPad splash screen and icon. All of my other assets are web assets and scale accordingly.

My next steps are to add a simpler user workflow, a refresh button to update your current search, and add some social networks like Facebook and Instagram.

After that, I’m going to start porting to Android and WinPhone 7. Since the application is already written, it should be as simple as getting a PhoneGap project running for each environment. I have also considered the Mac App Store and the upcoming Win 8 Marketplace for desktop application versions.

Finally, I’ll blog more in depth about some of the topics covered, and provide links to those posts on this page. Mobile development is rewarding, but can be challenging for those coming from a web or desktop background. I’d like to pass on some of the things I learned so that others working in mobile can save some time.

Feel free to provide feedback and questions if you have something in particular you’d like me to cover. And checkout the application!

Post to Twitter

Getting Started With iOS Development

February 20th, 2012

I’ve been playing with development in several of the mobile platforms over the last year, and for iOS in particular. Many developers are intimidated because of the differences between objective-c and other languages and the differences between cocoa touch and other frameworks. How to get started is one of the most common questions around.

First you’ll need an apple computer. There are some ways around this, but they are on the gray-side of the law and certainly outside of the OS X terms of use.

Next, you’ll need Xcode. Download it for free at https://developer.apple.com/xcode/. Xcode is the development environment for both OS X and iOS based applications. You can develop for free, and even test iOS apps in a simulator. If you join the iOS developer program, for $99 / year you can deploy to devices (up to 100) for testing purposes. You can sign up for the program at the iOS portal, which also hosts all kinds of tutorials and guides available to members and non-members.

Apple just recently posted this a getting started guide that will walk you through the basics. They have many other great docs available on the iOS developer site, including this objective-c primer and a longer version here.

I recommend The Big Nerd Ranch Guide for iOS. Among the iOS developers I know, it’s considered the best book to start with.

And for troubleshooting, no post about iOS would be complete without mentioning stackoverflow. It is the best site for any programming question, not just iOS / objective-c questions.

If you take the time to use the resources available, and work with (not against) the platform and supporting guidance, I think you’ll find iOS to be a friendlier platform than it’s reputation would suggest.

Post to Twitter

Dealing With An ORA-01440 When Altering a Table in Oracle

February 13th, 2012

When altering a table to an Oracle reduce a columns size, you’ll get a ORA-01440 error, indicating that you can’t make the adjustment because of the potential data loss.

I had to do this to recently to a bunch of columns, as I had incorrectly specified the size of numbers that would end up as integers in the application. Note that Oracle can treat any column as an integer by specifying a scale of 0. But for entity framework (via the Devart providers) to map to an long (Int64), you want the precision and scale to be Number(19,0).

Since the fields were left at the default size, they were too large. And being that many of these fields were a primary key or foreign key, constraints were also and issue. So the table had to be backed up, and restored. In order to safely do this, any triggers needed to be disabled.


Rather than do this repeatedly for many tables and risk missing something, or making typos, I created a script generator. You enter the table, and add any foreign key constraints, and then generate a script. All that is left to do is to add the columns to be re-sized to the alter statement in the middle of the script.

The generator is available here.

The script and generation code is all written in javascript, using jquery and jquery templates. If you’re interested in the code, I have it up on github.

Post to Twitter

Deming on the Financial Crisis From Beyond the Grave

December 12th, 2011

Tell me these aren’t relevant. Tell me it isn’t like a summation of Wall Streets mistakes leading up to 2008. Deming died in 1993.

Deming’s 7 Deadly Diseases of Management*

  1. Lack of constancy of purpose
  2. Emphasis on short term profits
  3. Evaluation of performance, merit rating or annual review
  4. Mobility of top management
  5. Running a company on visible figures alone
  6. Excessive medical costs
  7. Excessive legal damage awards swelled by lawyers working on contingency fees

*http://en.wikipedia.org/wiki/W._Edwards_Deming

Post to Twitter

Flex is a Relic and Silverlight is a Zombie

December 9th, 2011

…or some other catchy metaphor that will grab your attention. These technologies were hot over the last 5 years. Flex gained a particular amount of popularity in the Java community where UI technologies have a bit of a spotty record (that’s like saying my Bengals have a bit of a spotty record over a lifetime). Silverlight gained a lot of traction among Microsoft developers who actually cared about design and UX. Many alpha-geeks of the Microsoft space were running around giving conference talks about the MVVM pattern, and sharing code on codeplex. So what happened?

Both of these technologies are going to fade on the public web. Tablets and mobile devices are too big a share to ignore. Html5, phones and tablets did them in. The heavy hand of Steve Jobs probably gets credit for the coup de grĂ¢ce. The browser vendors and phone OS creators have really put their weight behind Javascript and Html5. If you have have that skill-set right now you can create:

  • Web Content
  • Mobile Web Content
  • Mobile Apps via Appcelerator
  • Mobile Apps via PhoneGap
  • Windows 8 Metro Apps

That’s a pretty wide reach for a markup / scripting language set.

So what do you do if that’s your trade? You work as an AIR/Flex developer or Silverlight developer, what do you do? There are good options for each camp, and some universal options.

Flex Developers

I think this is the slightly less promising path in the long term (despite it hitting a much higher peak than Silverlight). That said, Flash and Air will live on for a while, and you have some time to make a transition. Additionally, the ability to use the Adobe tools to make mobile applications provides a bridge to the hot mobile market. And you can make long term plans to transition to another cross-platform tool (PhoneGap, Appcelerator, etc), or go native. If you’re in the Adobe camp, new tools like Edge are likely to ease the transition to the standards-based technologies of the web.

Silverlight Developers

Similarly, Silverlight won’t be gone tomorrow. Intranet applications that need rich functionality (and simple deployment) are still a nice fit for Silverlight Desktop applications. And the adjustment to WindowsPhone 7′s flavor of Silverlight is straightforward, though I would be cautious and investigate the financial realities of that market. Finally, while Windows 8 Metro Apps don’t specifically use Silverlight, they can use C# with XAML and a subset of the .Net libraries that emphasize a security sandbox and async data connections. Sound familiar? That’s because they re-animated the corpse of Silverlight and made it an option for writing Metro apps. Long term, you should probably learn to use the Html5 / JavaScript hooks for Metro due to the ubiquitous nature of those skills. But isn’t it nice that you can learn the new API (WinRT) while keeping C# and XAML, and then make the languages switch at your leisure.

For Everyone

Both camps should embrace these newer web technologies and the UI skills they picked up during their time with the respective technologies. Good user experience and design are rare skills in developers, and retraining the languages and tools should be the easy part. Keep your black turtlenecks and invest in the next tools rich applications. You already have a leg up.

Post to Twitter

Windows Search Service Fix/Hack for Windows 7

December 6th, 2011

I’m not sure why, but Windows Search Service is broken on my installation of Windows. I’ve posted on Microsoft forums, and found other people with the same issue, but no fixes that have worked for me. The service will work, but every time I reboot, the service is disabled and stopped. I have to change it to manual or automatic, and start the service. It’s annoying, and if I forget to do it, I get messages (and slow searches) when using OneNote or Outlook.

Finally, it occurred to me to powershell this. It’s a 2 line script:

Set-Service -Name WSearch -StartupType Automatic
Start-Service -Name WSearch

Then I created a scheduled task that runs the script file on windows startup. The job is something like the following, depending on your path:

powershell.exe -noexit D:\tools\scripts\WSearchFix.ps1

The Scheduled Task

Note a couple of things. First, WSearchFix.ps1 is just what I named the powershell script from above, name it as you please. Second, the -noexit is not necessary, especially once you’ve run the script and verified it works from the task scheduler.

The most common problem is that if you don’t use powershell scripts, they are disabled by default. You can either sign them and use a semi-secure policy, or just open it up with:

Set-ExecutionPolicy Unrestricted

Finally, I went into the advanced options for the schedule tasks trigger and put it on a 2 minute delay. This is just a hunch, but I think something is setting the service to disabled on boot, so I wanted that to be done before the fix ran.

Of course this is a hack, and I would like to just have the service work and stay disabled. But all things considered, this is a band-aid that works.

Post to Twitter