Category Archives: Tech

Solved! reason: File not found when installing Android SDK and NDK

Because this took such a ridiculous amount of time to solve, and because so many people seemed to have encountered it, I figured it would be good to document the error I got, the steps I took to resolve it, and finally what the solution was. First of all the error itself during the install:

Failed to fetch URL
https://dl-ssl.google.com/android/repository/addons_list-2.xml,
reason: File not found

Failed to fetch URL
https://dl-ssl.google.com/android/repository/repository-10.xml,
reason: File not found

If you search for these or variants of these errors with Android search terms you will find a LOT of questions and many similar answers. None of them worked for me, thought I could see how they would be a problem. In my case I was installing on a Windows VM running VMWare Fusion on a Macbook. Here is the log of what I tried, based on suggestions from a variety of sources, StackOverflow high among them:

Ran as administrator
verified no proxy setup
verified can run on this same computer’s mac osx install and load (confirmed no external firewall issues since this is working
tried the check https box
set permissions to folder as myself
set temp folder to folder on drive instead of \\vmware-host\….
set ndk folder to folder on drive instead of \\vmware-host\…

opened windows firewall to c:\windows\system32\java.exe
opened windows firewall to c:\program files (86)\Java\jre7\bin\java.exe
and the same for 64 bit under \program files\
set java_home to 32 bit version of java
added java runtime flags “-Djava.net.preferIPv4Stack=true”

tried bridged mode instead of NAT networking in vm-ware
tried the with my vpn on and off
tried rebooting just the vm
tried rebooting the mac

None of these things made any difference at all. However the early steps about the location of the temp folder and ndk folder were the best clue. The real issue is that java HAAATES spaces in file names and can’t deal with UNC paths, even those in this case mapped with a drive letter.

The answer was….
set the environment variable ANDROID_SDK_HOME to a location on a local drive instead of a UNC path.

Basic Idea Economics

[note: I have been sitting on this post for a long time. I did take the opportunity to comment on software patents but still sat on it. Time to just let it go and take my beatings]

While traveling in Scotland a few years back, I had a sense of history like nowhere I’ve ever been before. It had a lot to do with the its mixture of medieval castles, grass, and sheep, dotted with a few little towns. It just had this feeling to it that many parts of life in Scotland had not changed for hundreds of years. For some reason this got me thinking about the evolution of what we think of capital and it’s new incarnation, intellectual capital. I also had the pleasure one of my many nights learning about single malt scotch to discuss this with an English industrialist. While I have may have glossed over many important details, I think my basic premise is sound. Capital is changing from buying shares in factories and other producers to buying ideas.

IMG_1967

I see it something like this. In feudal times, wealth was based on owning property. Property was the only capital worth anything. If you had property, the property supported agriculture, like crops and the sheep I saw every day. Agriculture produces produce, and the produce was split between the tenants and the owners. The owners sell their portion for income. As a landowner, the more land you owned the  more tenants you could have living on the that land. This led to more production and thus more product you kept for yourself. Grass grew, it was processed by animals, the animals are processed by humans and viola, produce, sales and income. There was one key idea, the production of goods in the traditional way producing the traditional results. The intellectual capital in this was minimal and traditional. I would guess that the very idea would have seemed strange to people of the time.

In the industrial age, things did change. Capital was used to own the means of production in the form of factories. While prestige may have still been associated with ownership of property, the real bang for your buck was in amassing enough capital to build a factory. The factory typically organized a combination of labor and machines into the specialization needed to mass produce a small variety of products. After the factory was built the task of the manufacturer is to try to preserve existing markets, tune the process and equipment where possible to reduce ongoing costs to maximize the investment. This is mostly because of the large expense in building the facility and training the workforce. In this era, the number of working ideas went up quite a lot, but was still somewhat small. You needed the starting idea of the factory, the skills needed to run the equipment, and then after that,  just like in the days of sheep, you would try to preserve your environment and get away with as few changes as possible because change was expensive. Intellectual capital was alive however. Patents got their start, mostly as a way to encourage the large investment in factories by protecting them from competition for awhile, a little monopoly.

The age we are in now, probably dating back to the 1950’s, has had another major shift. I don’t think many entrepreneurs think about building a factory and making it produce for 50 years. Ownership of production is still important of course, but capitalists now own many shares of many companies, all representing many different products, ideas, markets and companies. More and more companies are valued on the ideas and people they represent. The term intellectual capital has become widely used, if not widely understood.

As a person that got his start in the software field working on open source software, the traditional meaning of the term, patents on ideas enforceable by law, has always seemed pretty repugnant to me. The idea is to exercise control much the same way a factory would exercise control over it’s physical assets: don’t use my ideas without my permission. Times have changed. Raw ideas are cheap to get and cheap to copy, and the enforcement effort is rarely worth the expense. Many ideas are encoded into software but software is better served by copyright than patents. In software most of the actual bits of a program are the shared libraries, device drivers, hardware and operating systems of the underlying general computer system. There are absolutely innovative ideas in software, but these are built on the shoulders of other’s works in smaller and smaller increments. The real intellectual capital exists in the heads of people who hold, nurture and grow the ideas and is inherently not patentable.

As I wrote in my letter to the USPTO, I think rather than focus so much on the specifics of how to judge whether an idea represented in software is patentable, we should go back to the reasons the patent was created in the first place. It was to create incentive for investment. Many intelligent people will argue that today that investment is in intellectual capital and it should be protected in the same way as the machinery of a factory was protected in the past. I think the fact is that the patent was to allow for the investment in the machinery that was very expensive and deserved the short term monopoly to patent provided. Today however we are better off focusing on faster delivery of more competing ideas without restrictions. The rapid growth of the internet is a wonderful example of this approach in practice and no one can argue against its overall economic benefits.

Visual Studio + TFS error TF400030 workaround

I have been fighting with an error in Visual Studio I thought would be worth sharing as it seems many are fighting the very same issue. What happens is that if you have Visual Studio 2012, a reasonably large code base and local workspaces setup with TFS, the default, you may run into constant error pop ups with the message:

TF400030: The local data store is currently in use by another operation. Please wait and then try your operation again. If this error persists, restart the application.

According to this post,  Microsoft believes the problem is resolved. It seems worse with Update 2 though and the message states that their refactoring of this code will be available in the next release, i.e. post Update 2. So for now, you may be kind of stuck.

[update, 6/1/2013: MS has responded, but not come up with any good solutions here. Putting branches in different workspaces sounds promising though. Also I think based on the IO involved in how it’s implemented, an SSD is a must]

The workaround I found is pretty simple. Only have the Source Control Explorer open in one or less of your open instances of Visual Studio.

[update: today I had to close it in all my visual studio instances]

Another person on my team solved it a different way. He started removing extensions, and believes it was the Web Essentials extension removal that got him functional again. 

Hope it helps!

Working Remotely

A bit of conversation has been going on around the web first because of Yahoo’s decision to axe telecommuting, and today because of a nicely written article from Jeff Robbins, CEO of Lullabot, the Drupal company. Bob McWhirter who I worked with a long time ago on JDOM, had a very similar spin on this back in 2010 where he talked about how Twine changed from being a distributed team to a co-located team leaving him as a remote worker.

I have worked a lot with off shore remote workers and I am currently working remotely most days of the week. This really can work, but as these articles point out, you must do this very consciously, taking time to think about your communication patterns that (sometimes) are just natural when you share a work location. Based on the number of management seminars, consultants, books and boot camps on leadership, teamwork and communication out there, I have to think “comes natural” is probably overstated. Taking some care to understand how your coworkers feel connected, included, with contributions encouraged and welcomed is important to all teams, but people seldom do this. The result is worse then for remote workers who lack the physical interactions with all their cultural norms to at least partially help people get on the same page.

For the me the key things that are absolutely essential are these:

  • A group chat tool everybody is in all day. Currently I like skype for this
  • A group video conference tool with good screen sharing capabilities.  Currently I like gotomeeting and join.me. Google hangouts are too slow and two fuzzy. So is Skype for the most part which is too bad.
  • IM with presence actively maintained,
  • equal attention to IM conversations that you would give somebody walking up to your desk.
  • Daily “stand up” phone conversations to talk about progress, plans, open (but don’t solve) questions and problems
  • willingness to jump into short, focused phone calls, individually or in small groups when needed
  • A propensity to CC email to more rather than less people. 
  • inclusion in the non-work conversations, babies, cars, trips, bands, all the good stuff
  • face to face get togethers, more often at first as you get to know people, but at least once per month after. I personally like to meet once per week face to face
  • very limited restrictions on what you can actually do remotely. This means distributed source code systems, accessible systems, vpns, whatever it takes to be equally productive remotely. Don’t make the office work 100% better than the remote worker.

I find this works for me, and found it worked with remote teams in other countries as well, at least to the extent that time zones are an issue. If language is an issue, most people can read and write much better than they can speak and hear a second language, so emphasize IM and chat over the phone call.

Mostly, actively include the remote people and you will be fine. Anything else and you will be one of the many people that have failed to incorporate a distributed work force. And too bad for you!

Slides and sample from the Chippewa Valley Code Camp

Here are my slides and samples from the Chippewa Valley Code Camp. Read the readme for details of how to run the code. Thanks to all who attended, the few and proud come to mind!

Visual tracking of workflow is really a useful thing to build into your systems. The list of gotcha’s in the slides and others I’ve found since, mean that this particular approach using the rehosted workflow designer, while viable in certain cases, is probably going to take more work to make it generally usable solution for visual tracking of workflow. The idea presented here to use a custom tracking participant and SignalR to broadcast workflow tracking events is simple and solid and with a little more goo to pick a “topic” using groups or hubs would work very well I think.  A little care will need to be explored to account for scaling if you’d do this with hundreds of users based on the overall design of signalr.

I also would like to point out a few other related projects, one that used a service bus instead of signalr and another that used signalr, but not a wcf behavior or visual tracking. Enjoy your reading!

http://geekswithblogs.net/JoshReuben/archive/2011/06/07/workflow-4.0.1-statemachine—distributed-tracking-visualization.aspx

https://github.com/PeteGoo/Workflow-Service-Tracking-Viewer

 

Stone Porch Consulting is born!

The stone porch of Stone Porch Consulting

This peaceful place is a main living space for my wife and I from about May through September with a few glorious days thrown in during April and October. It is a place where conversations happen, where ideas are expressed, beat up, embraced or tossed out. The conversation might be family, politics, music, art, work, the future, or just people in general. We don’t always agree and are both pretty passionate about things we care about. But, we enjoy our company together here and we deal with issues here and it is OK to disagree. We also meet and watch our neighbors and their kids from here, something we miss a lot by the end of the winter.

In this calm place where things are are always fine, it was decided to launch my own business and leave the security of a good steady paycheck. It represents something missing in the high tech world, and probably in the world at large. This porch is 100+ years old, made of hand placed, rough cut field stone. Though it needs a little love from time to time, the mortar not as resilient as the stone to rain, snow, ice, bugs, vines and moss, it is strong, solid, peaceful, enduring and beautiful. It remains so during all of the changes around it.

Your projects, my work, they are full of potholes, the unexpected, the unintended, the unwanted. Embrace it, it is the real world. But there is a calm peaceful place in which all that can happen. Hopefully you can imagine that place too.

So the name has been chosen, Stone Porch Consulting. Definitely where I want to be, and I think you will too.

Link to my slides and sample code for Twin Cities Code Camp 13

As promised, the sample files and slides are here. Thanks to all who attended the talk.

Speaking at the Twin Cities Code Camp

I’ll be speaking on a updated topic, Intro to Windows Workflow Foundation 4 on  Visual Studio 2012 on 10/6/2012. I did this talk in Appleton in 2010, at Day of .net, but I changed it up quite a bit. This is for code camp after all, so the emphasis will be on .. code. I think developers can get a lot of the basics on their own, so I am going to focus on those topics that workflow offers that really are difficult to do on your own. Mainly that will be long running processes that have to pause, resume at the same location and continue or escalate in the event that something doesn’t complete in time. Flow and even parallelism are pretty easy to do with plain old code these days.

Looking forward to it!

Drupal on Windows experience report

It has been over a year since I first decided to give a try to running Drupal 7 on Windows/IIS/Sql Server  instead of the long trusted LAMP platform. So how did it go? Mostly it has gone well, and exhibit A is the sales page for one of our partners. Check it out and establish a new 401k plan for your company at the same time!

Drupal

At the time in 2011 when we first started this, the database driver(s), both Drupal and PHP, were just short of complete. So there were issues right away in the install. But those issues have long been resolved, other than one nasty issue related to DB independent unique keys that Drupal likes to use. This prompted me to create my first Drupal patch for Drupal SqlSrv driver. So far with this patch (yet to be noticed by the maintainers) the Sql Server transition  has been solid.

We aren’t using any esoteric modules or themes so most of our experience is Drupal Core with custom themes, running in multisite mode. We are using the Domain Access module and the TinyMCE editor and have only dabbled so far in views and custom content types. So a pretty vanilla setup other than the heavily customized theme and multiple domain setup. Domain Access is a pretty powerful tool by the way if you are ever in the need for affiliate type site arrangements.

Really our only issues right now are:

  • the public:// scheme for locating files on the file system and creating relative links is too tied to linux/apache. You can’t run your site from a drive other than C:/ While there is a specific document explaining how to use NFS on linux, you can’t use a virtual directory in IIS AND use the built in upload feature at the same time. This is a pain in the case of a load balanced server. Solution is to use custom code or some time of replication scheme. I was able to use mklink and make it work, but didn’t release that way as most sysadmins are uncomfortable with that tool.
  • Occasionally, I have had some odd errors that pop in and then disappear never to be seen again.
  • When DB errors have occurred it is because of upgrades and schema updates from modules. My patch should correct most of these, but when you have a problem, you don’t have a small army of developers with answers like you do when running Drupal on LAMP.
  • Our Windows/.net oriented staff has had a learning curve on the admin skills to install, deploy, and maintain Drupal. Not a tiny issue when it gets right down to it.

That isn’t too bad for a system that only ran on Linux the last release, version 6.

Not too dramatic, so that is the really good news. Yes son, you can run your Drupal on Windows.

Are you conceptual or detail oriented?

Trajan's Column

Do you see the scenes or the spiral more?

I have spent a lot of time looking at how developers fit into the culture of the businesses that employ them. The disconnect that often exists is legendary and while there are many myths and opinions about the reasons, the disconnect continues. I often really connect with the business people I work and see their frustration, but also have experienced the frustration many developers feel. It comes down to communication but in this case, the communication needs to be between people who genuinely think differently.

Business people, particularly executives and leaders, are often conceptual thinkers in the sense that they see the goals to put in front of them, and hopefully align the right people and (sometimes) the systems needed to reach those goals without a lot of specifics as to how. Often times they believe something is possible because of a combination of their past interactions with the people and processes in place and sense that new requests of the team will be predictably similar. It is driven by their model of the system and their experience which leads them to believe it will react more or less predictably despite a definition of most of the details. Of course, these predictions are based on nothing rock solid if you look at the details and all manner of devils and dragons may still need to be found and slayed. On a bad day, somebody who lives purely in the conceptual frame of mind may resent having to muddy the concept with mind numbing details that can be contradictory and even force the concepts to change. Sound familiar?

Developers are usually very detailed oriented and are by necessity good at building precise sequences of repeatable actions with those details. People who are very detail oriented are invaluable on a team as projects work towards completion making sure every t is crossed and every i dotted. They eliminate uncertainty from outcomes to the degree possible and to the degree time allows. Without detail oriented people able to grasp and wrangle all the details to actually move work through to completion, your system may well *not work at all* or worse appear to be working, but actually be making major mistakes. A detail oriented person sweats this stuff and gets it right. On a bad day though, detail oriented people can be seen wasting tons of time chasing dead ends because they like to see things get completed or do things a certain way. They may over emphasize unimportant tasks because they don’t grasp the concepts that provide the context for prioritization and may avoid alternate or otherwise more appropriate solutions. At the worst case, they may produce a system that executes without errors but fails to solve the problem or opportunity originally envisioned. Sound familiar?

For a system to work all the way from imagination to completion, I think we can call agree that both conceptual and detail thinking is required. But if people can’t communicate well enough, what can be done? I think every participant in the process needs to possess a share of and appreciation of both conceptual and detail skills or you are in trouble. Everyone should exercise both their conceptual and detail skills. If you can’t deepen your sense of details, or step back to understand the driving concepts of your work you really risk delays or complete failure to deliver your projects.

Here is an example from my own life. I really like troubleshooting. Before I can do any sort of repair or troubleshooting, I have to have a model of how I think the thing works. Against this model, I create a hypothesis of problems that could produce the symptoms I am facing. Then I try to prove the hypothesis with various tests, observations and solutions. If the problem wasn’t solved, a couple of things need to happen.

  1. examine why the hypothesis was not correct
  2. improve my conceptual model to incorporate what I’d learned
  3. create more than one additional hypothesis of the next possible solutions
  4. pick the most likely hypothesis to try based on my improved conceptual model
  5. repeat until goal met, problem solved or solution determined

As a troubleshooter, you are often wrong. The way you thought things worked is often confounded by many variables, conflicting bits of evidence and sometimes incomplete vision of the inner workings of the system. Details! Yet, you have to get the thing working. A naive troubleshooter uses only trial and error to go through a list of mostly predetermined courses of action until hopefully the problem goes away. Case in point, “having a problem with your computer, rebuild it”. Results are limited.

It is the deep conceptual model that enables you to think of more possibilities and more accurately dispense with irrelevant details. It is attention to details that allows you to try a hypothesis and really understand what worked and what didn’t and from this improve the conceptual model in your head. These go hand in hand with neither working well without the other. Nearly all projects have the quality of a largely unknown solution to a project request at the beginning, and ever increasing understanding as the project progresses. It really takes your whole brain!

Where are you strong, being able to grasp lots of details, or in being able to think about a system in abstract conceptual terms? There is no right answer, but there is an outcome for you. Work on the one you are weaker in.