Mar 21

How to Implement the Automerge feature that is missing from BitBucket cloud

Recently I was involved in a change over from bitbucket server to bitbucket cloud. It was pretty seemless, but there was one major issue – automerge, which is available on bitbucket server, is not available on bitbucket cloud. For many people, maybe that’s not a big deal, but for us it definitely felt like a step back. We had to do TWO pull requests anytime we did a release, one to master from the release branch and one from master back into the core development branch. In the event of a hotfix… yep, two pull requests there too. In a world of automation being used to make life simpler and to make sure the key steps are done, not having automerge just felt wrong to me and all these other people. So I decided to implement a solution and make it as generic as I could so you can use it for whatever projects you have. I chose to utilize bitbucket pipelines as the driver for this feature. If you haven’t used pipelines you are encouraged to check out their intro here. Let’s check out the solution.

First I describe a more “ideal way”. But I also describe a modified way to implement the same pipeline. The modified way doesn’t require the “bot”… but it’s not as nice. However, it will allow a small group to get things going quick.

Ideal way:

  1. Create a “bot” user – this is really just a dummy user that you will give lots of permissions to so it can do stuff on your behalf.
  2. In the repo, Go to pipelines -> settings
  3. Turn on pipelines.
  4. Go to pipelines -> SSH Keys and generate a set of keys
  5. Copy the public key and go paste it into the bots profile in the ssh keys section.
  6. Go to the repo you want to configure.
  7. Choose the development branch
  8. Give the bot permissions to merge into that branch without a pull request.

Slightly modified way:
If you decide not to go the bot route, you still need to do everything else. You just place the tie the SSH keys you generate into your own user instead. And as long as you have sufficient permissions it will work just fine.

Now that you have pipelines enabled let’s define a simple pipeline that takes whatever is in “master” and merges it to “develop”. The easiest way to it is probably just to copy this one.

# Merges master into development anytime master is updated 
# Is a bit of hack needed because bitbucket cloud does not, at the time of this creation. 
# support automatic merges in their cloud product.
# Built with lots of trial and error. No promises.
# Useful info: https://confluence.atlassian.com/bitbucket/variables-in-pipelines-794502608.html
# More guides at https://confluence.atlassian.com/x/5Q4SMw for more examples.
# Only use spaces to indent your .yml configuration.
# I tried to use variables where possible to keep it generic
# Author: Josh Ahlstrom
# Initial Creation Date: 2019-03-19

# NOTE: Pay no attention to the image utilized below. I chose dotnet, but it probably doesn't matter
#       which one you choose since it is script which means we'll be working "from the shell" anyway.
# -----
image: microsoft/dotnet:sdk

pipelines:
  branches:
    master:
      - step:
         script:
          - apt-get update -y
          - apt-get install git -y
          - mkdir repos
          - cd repos
          # full name variable used to make things generic
          - git clone git@bitbucket.org:$BITBUCKET_REPO_FULL_NAME
          - cd $BITBUCKET_REPO_SLUG
          # variables for git info such as "$GIT_USERNAME" "$GIT_EMAIL"
          - git config user.name "$GITBOT_USERNAME"
          - git config user.email "$GITBOT_EMAIL"
          - git checkout develop
          - git merge master
          - git push

Alright, so now let’s talk about what this does. Keep in mind that a pipeline can be thought of as running in it’s own little linux VM. So you’ve got quite a bit of freedom in what you do.

A quick word of caution: pipelines appear to use “build” minutes. I think they should be called pipeline minutes because you don’t actually have to build in a pipeline, but I digress. If I read it correctly, most accounts come with 50 minutes for free. I ran it a BUNCH of times times getting these scripts set up (maybe 20 times or so) which only totaled about 5 minutes. Anyway, if you have limited minutes that’d you’d prefer to use otherwise then this might not be the way to implement automerge for you – but maybe it’ll give you some other ideas.

Here goes. I’ll show some script and then describe what it does for the whole script.

image: microsoft/dotnet:sdk

First, we tell the pipeline that it’s going to run under an image that knows all about dotnet. There is a docker one, a javascript one… lots of options. I don’t think it matters (as noted in the snippit) which one you use because we’re just doing basic shell commands. It appears that all the images can handle that much.

pipelines:
  branches:
    master:

You can apply different pipelines to different branches, in this case we just want to apply this pipeline to the master branch.

      - step:
         script:

The first (and only) step in our master branch pipeline is to run a script. This just runs it right on the command line BUT has access to certain variables that you can set up in bitbucket, either at the account level or the repo/pipeline level. Some are also global to bitbucket. More on variables later.

          - apt-get update -y
          - apt-get install git -y

The first two lines of the script just install git.

          - mkdir repos
          - cd repos

The next two lines create a directory for us to clone our repo into and move us into that directory.

          # full name variable used to make things generic
          - git clone git@bitbucket.org:$BITBUCKET_REPO_FULL_NAME

The next two lines (including one comment line) actually clone the repo. We use a bitbucket variable here to make things generic and simple to use on multiple repos. The first variable, $BITBUCKET_REPO_FULL_NAME, returns the full name of the repo including the account number.

          - cd $BITBUCKET_REPO_SLUG

Then we “cd” into the repo directory. We use another bitbucket provided variable here, $BITBUCKET_REPO_SLUG. It’s like the shortname of the repo. When you clone a repo from bitbucket and then you look at the directory name it was cloned into… that’s what the value of  $BITBUCKET_REPO_SLUG is.

         # variables for git info such as "$GIT_USERNAME" "$GIT_EMAIL"
          - git config user.name "$GITBOT_USERNAME"
          - git config user.email "$GITBOT_EMAIL"

The next three lines set up the pipeline’s VM git with some made up name and email. This is just because our next step will want to know them.

          - git checkout develop
          - git merge master
          - git push

The last three lines checkout the branch we want to merge into, merge master into it, then then push that branch back up to bitbucket.

We’re almost done!

You might have noticed I used a couple of variables $GITBOT_USERNAME and $GITBOT_EMAIL. Those two I had to create myself. Again, ideally this would just be the username of your real “bot” but even if it is you would want to store it in a variable. You’d just store it in an account variable instead of a repo one. In any case, to set up the variables in the repository you just go to the repository -> settings -> “scroll down” to pipelines -> “then choose” repository variables. Read the little blurb at the top of that page to see how variables work. Basically, don’t include the “$” in your variable name – you only need that to access your variable in scripts.

Finally, to make this work, the “bot” user (or yourself) will need permission to merge into the TARGET branch directly (ie. without a pull request) in order for all of this to work. So make sure you give whichever “bot” / user that got the SSH key you generated earlier permissions to merge directly. You do that in repository -> settings -> branch permissions.

And that’s it! Place this script into a file called bitbucket-pipelines.yml in the top level of your repo and you’re done!

Now when you merge into master, the pipeline should kick off and your automerge should happen as planned!

I hope you found this useful. If you have ideas on how to improve this please feel free to comment!

The seed that spawned this idea came from a similar solution to a similar problem presented here.

Jul 26

Imitation can be Costly Form of Flattery for the Imitated

You may have heard the phrase “Imitation is the sincerest [form] of flattery”. The quote comes from Charles Caleb Colton. And it’s true.  What’s also true is that being imitated online can be costly to those being imitated if they don’t account for it and adjust their way of doing things to minimize its effects.

I recently started a site called Nameinator that was created based on work I’ve done for other sites of my own. I own a bunch of sites about names and I’m working to roll them all into one under that site about name ideas – things from fantasy football team names to boat names.

Historically, what I’ve done was added names to the list and after a certain number were added I’d write a rundown list article of the newest items. But due to imitators (maybe better said thieves), I’m planning to move towards publishing our name ideas articles a little more often instead of adding them straight to one of our lists and then later writing a rundown article that includes them. It seems that doing it the old way we managed to see our names in other peoples articles before we even got to publish an article containing the name ourselves. People were reviewing our lists and taking the names and not linking back – as if the names were their ideas. So we’ve got to do what we can to minimize the effect this can have on us.

For the reader it’s no big deal. Basically we’ll be creating a new type of article that will be less lengthy but very fresh. We’ll still do longer rundown types of articles and we’ll still do articles highlighting user added items. This new way of doing things we hope will allow us to rank on the search engines for our own content before other sites copy it. We want to get our own fresh content straight to you from us rather than someone else giving your their take on our ideas without attribution.

If you’re someone who creates a lot of content you may want to consider posting more often in smaller bits rather than saving up to publish some huge item. Especially if you’re putting the little bits out there in pieces for the convenience of the end reader. Take a little more time and do both so you’ll get ranking for all your hard work.

Feb 02

DOMCOP – A Tool for Domainers Looking to Catch High Quality Dropping Domains

I don’t remember exactly how it started, but over the last few years I’ve acquired a little over 400 domains. I bought a domain about 10 years ago and carefully built a nice site. It climbed in the ranks over the years, but considering that the domain name was cool only to me and I didn’t already have a lot SEO expertise it just never really had a chance. I diligently worked on the site for 8 years making no more than $1000 per year. I experimented with different revenue streams and models (affiliates, subscription, membership, even pay what you can!), but nothing turned it around because the traffic simply wasn’t there.

Finally I “gave up on it” and decided to move on to another project. It was in the same niche, but just not exactly the same. And it required maybe 1% as much work. It was just much smaller.  I was able to buy some exact match domains to match the concept (mind you at this point I’ve got something like 10 domains) and I coded up the project. I’ll be damned if in the first month I didn’t make what I had made the entire previous year. So I started to see if it was repeatable and bought more domains. BAM by the end of the first year I made 5x what I had made in the previous 8 years combined! Nice. So now I had it all figured out – or so I thought. I basically reinvested most of the earnings and I ended up spending tons of money (tens of thousands of dollars) to buy domains that would fit what I was trying to do. The idea was right, the execution was horrible.

If I could do it all again I’d do it differently. I would not buy from third parties near as much, and I’d buy pre-releases of dropped domains more often. Something I didn’t know when I bought from third parties was that I was buying domains that they’d simply bought off the drop. That means I could have had just as much a chance paying a service to try buying them for $69 rather than several hundred or up to $2000 dollars. It probably cost me $10000 to learn that little lesson.

So I could wait until they dropped if I could spot them before hand, but there is a problem with buying dropped domains. A domain’s age resets to 0 when it deletes / drops. If you can manage to get these domains before they drop you can keep the age bonus that many search engines grant. Basically an older domain has a little more street cred as far as the search engines are concerned. If you want to rank quickly in the search engines then having an aged domain will only help.

If you can get aged domains with a lot of clout (page rank) to point to a site that you want to rank high then you can help that site rank well quickly. The problem is that it’s darn near impossible to find sites with a lot of legitimate link juice and to get them to point to your site. You can (and should) reach out to other sites and share your site with them to get them to see the value you provide, but you can also jumpstart the process yourself if you’re willing to do a little extra work. It’s actually a LOT of extra work unless you know the right tools. That’s where DomCop.com comes in.

DomCop is basically a search engine for expired domains. You can use it to find domains that match all kinds of metrics (Page rank, age, number of links, types of links [gov, edu, etc], alexa rank, and much more). Then, once you’ve found a domain you can try to buy those domains BEFORE they are deleted. Or you can stand ready to snatch them up when they actually are deleted. Their tool makes it so easy to find domains that will help you in your SEO efforts. They’ve even got a pretty great tour to show you how to use their site for maximum benefit.

domcop-screenshot

[Click on the above screen shot for a large clear view]

As you can see from that screen shot it’s a very informative and useful tool. Whether you want to utilize the purchased domain for your main site or you want to build a set of quality links to your main site from high link powered domains DomCop can help you find the domains that will give you the most value for the least effort. I’ve bought a few domains that I found using their engine and I’ll even be using it to enable me to continue to trim my domain holdings. By identifying and buying a few strong domains and letting quite a few weaker ones go I’ll lower my renewal fees (less domains) and have stronger sites helping improve the ranking of those I do maintain.

If you decide to use DomCop let me know how it works for you in the comments section below. Maybe you’ll use it some way I’ve never thought of before and you can help me get even more value from it!

Jun 12

Understanding Behavioral Interview Questions

It’s been a while since I’ve been job hunting, but recently a good friend of mine and I had a conversation where she shared with me how “difficult” a recent job interview had been for her. My friend isn’t much of a complainer so it made me curious about what had been so hard about the interview. She went on to explain that it SHOULD have been easy, but since she wasn’t prepared properly she thought she’d bombed it. That made me even more curious, because I know this girl knows her field top to bottom.

It turns out that the interview was not a technical interview – those measure what you know. This interview wasn’t about what she knew. She wasn’t mentally prepared for it because it was a different type of interview. One that is known as a behavioral interview. Basically, in a behavioral interview the interviewee is asked questions that probe for specific past behaviors with the theory that past behaviors will be a predictor of future behavior. So, if the interviewer wants to know how you’ll react in a situation that you’re likely to face in their workplace then they can ask you how you’ve acted in similar situations before and also “how that worked out”.

Instead of asking a candidate for a manager position how they THINK someone should deal with an employee who is often tardy (a question that can be “studied for”) the interviewer can instead ask the candidate to “tell me about a time when you had to deal with an employee who was unable to get to work on time. What was the end result?”

Now, as someone answering these types of questions all you can really do is tell the truth… it’s hard for most people to lie on the spot about specific situations that didn’t happen at all. So that means they’ll get honest answers that are completely relevant and only “fact based” not “what you want to hear based”, right? Well mostly.

In reality, to maximize your interview, you’ll definitely want to tell the truth, but then also ANALYZE the truth out loud. This gives you an opportunity to be truthful, to describe a less than ideal behavior that you’ve acted out before (this gives credibility that you’ve atleast really faced the situation). But then, whether you acted well or not,  you can also add something like “if I was presented with the same situation again I’d do xyz because pdq”. That was where my friend failed. She answered the questions that she could, but several times she told them “true stories” about how she had behaved, but she didn’t follow up with WHY she would or would not do the same thing again.

I only pass this along because she was really upset about her performance and we both agreed when it was done that it was really a good experience that she learned from… even I learned from it!

I, having been out of the market of job interviews (not actively seeking a change in employment), hadn’t really studied up on the topic. I have now. There are several good sites out there with great information on behavioral interview questions categorized by topic (leadership, business acumen, ethical issues, etc) and by position type (managers, leaders, nurses, mechanics, etc).

For some reason I actually like reading the questions I linked to and thinking about my answers… imaging an interviewer sitting across from be being awed by the depth of my experiences and the wisdom it has gained me! (Note: lots of sarcasm in that last sentence… i don’t have that much wisdom and my experiences are deeper than some but no where near the others). Either way, going through the occasional questions allows for some reflection about my previous experiences and corresponding actions / results.

If you’ve got some free time OR you’re at all interested in becoming better in job interviews then I recommend checking out that website. See how you feel about answering the questions that are relevant to the type of position you’d be seeking before you go on your next interview. Look through the job description and see which categories of questions are liable to be important and work on answering a few of them before the interview. Being aware, being practiced, and being prepared might be the difference! Good luck!

Apr 24

Increase someones costs too much and they’ll pay attention – you might not like it

This writeup is in response to an article I just read about the “walk outs” at the fast food restaurants in NY and Chicago recently. In the articles I read there is so much glee about how these people are standing up for themselves and how it heartening to see these people as for what they “deserve”. Here’s another report on it. I will bet you that 90% of these people have no idea what actually goes in to running the company. They don’t care if the owner / operator had to take a second mortgage to make payroll last month due to a mad cow scare. They don’t care if a competing restaurant / shop opened next door and revenue just dropped 10%. They don’t see it and they don’t care. They just want “what they deserve” and they’re free to make up whatever value suits them. They think that what they say they “need” (which is typically how much they “want”… because we American’s are forgetful sometimes that there is a difference) is what they actually “deserve”. It’s simply not true.

If you’ve read my blog for any length of time you’ll quickly find that I’m all for making money and that I want people to do well. I want employees (people who work for other people) to be treated well, and I want business owners, the risk takers, to get as much return on their investment, yes, profit, as possible. If the risk takers can’t be profitable, then their incentive to actually take a risk disappears so its really in everyone’s best interest that profit, even “obscene profits”, continue to be possible.

So what about the employees? Should they get a cut of the profits? If someone works at Wendy’s should they be paid a percentage of what the restaurant makes instead of minimum wage? Should they be paid $15 an hour just because they feel like that is a living wage? I’m not saying that the don’t need to have a certain amount of income to pay their bills. They very well might, but that’s not their employer’s problem, that’s their problem.

As someone who is trying to pull his own business up by the boot straps I am well aware that an employee is often necessary. If I need a job done (or commonly several jobs done but I can only do one) it makes sense for me to find out who can do the other job(s). I’ll interview several candidates and determine which one I think can do the job the best, which one can do the job for the least money, which one will require the least “management”, which one I feel like I can trust, etc.  Then I try to hire the person that is the intersection of those items – or, more accurately, the best mix.

My job as the business owner is to make sure that my hire is profitable, right? I mean, it’s got to at least break even or it’s just throwing money away. Hell, breaking even isn’t all that great unless I build a nice salary in for myself rather than taking the profits home and living off of them. If I believe that hiring you will cause me to be more profitable then that’s what I’ll do. If you’re up against someone else and I believe that hiring them would make me more profitable than if I hired you then guess who I’m going to hire? Seriously, if YOU were running the business which one would you hire? The one that helped you make payroll and put a little aside for reserves for the lean months or the one that made it possible to keep treading water? (As an aside, this is why many people have jobs created FOR them by simply approaching the interview process the right way. If you can walk in the door and, instead of saying you need a job, say that you can help make me more profitable… you’ve got my ear… the same is true for any business owner)

For the sake of argument, let’s say the employees involved in these strikes do know something about the business and ownership financials. Let’s say they understand and all they really want is what they think will allow the company to “break even” and the owner to a “reasonable profit”. Well, as an investor, as a risk taker, I’ll tell you to take a hike if you make me an offer where I take risk and only you get the guaranteed reward. If I have to deal with people who take no risk, but who want to tell me the right way or make demands of me then then that actually ups the required profit incentive needed to get me to take a risk myself. The bigger the PITA (pain the the arse) the bigger the need for a bigger profit.

If we assume I’m in  business to make a profit then we’ve got a problem when my labor costs go up. That dips into profits, right? Well, then I’ve only got a few options – assuming eating the loss is not an option. Obviously I’d just close shop before I keep eating a loss if I saw no way to turn it around.

But how might I try to turn it around? I can lay off some workers and require the others to be more efficient so that labor costs go back to where they were. I can cut some other expense, maybe close earlier (so I won’t pay as much electricity and I won’t have to pay as many labor hours). None of those are good for my employees or my customers so maybe I need to find some to new revenue instead. Let’s see… I either need to add a new revenue stream (find something to sell that I wasn’t already selling) or I need to increase my prices on my existing product. Customers don’t usually like that, but they might put up with it up to a point, but eventually, they will not, and business will suffer.

There is another solution though. Robots. Laugh if you want, but I’m serious. Utilizing robots a business can keep prices where they are, and maybe even lower them! They can actually increase their hours of operation – in fact it would make sense to do so. The customers will be happy! But guess who won’t… that’s right, the employees that were so ecstatic about getting their raise. Guess who else won’t be happy, the tax collector who doesn’t get the income tax money, the social security tax money, the unemployment tax money, etc. They’d be wise to stay out of business… not make it more difficult.

Let me ask you this: Did you ever get a cable bill and go “WTF? Why did it go up another 10%? I’m not getting any more value so why are they charging me more?” This may result in “I’m switching to satellite!” or “I’m dropping my cable and I’ll just spend more time reading”.

Well, that’s how an employee that can be replaced with a robot looks eventually. The employer may not want to do it. It may actually be painful for the employer to make that change on a number of levels. But the labor is a significant cost that just got significant raised and that could be lowered. It’s a cost that in an ideal world would never have been allowed to get that high. The cost probably can’t be walked back down. There’d be too many hard feelings and too much animosity in the work place among people who were to immature to see what problems they were causing. You probably can’t just lower the cost… you have to get rid of it and then replace it.

The sad thing is that when the employee was making a lesser amount it wasn’t even worth the employers time to think about a costly and cumbersome replacement that would have major effects on the way the day to day business is operated. But when the employee demanded (and used pressure) to receive a raise that was too large it gave the business owner a kick in the rear. It woke the employer up and demanded of them to find a “better”, sustainable, affordable solution.

That’s where we’re heading I think. There are robots that make chinese noodles. There is increasingly good voice recognition software and apps that be can used to order at a drive through. There are robots that can fill drink cups. There are robots can make fries and burgers. All of these things will only become better AND cheaper. All the while, many of the people who currently do these jobs are becoming more demanding of higher wages and benefits. It might not have been worth it for some of these operations to look into robotic employees while wages were in line with costs, but when a significant change in costs takes place employers will shift their attention to finding cost savings.

These workers have done nothing but started the process of signing their own termination of employment letters. The bright side is that at least they will have helped create jobs for robotic techs and the slew of other jobs this growing industry will create! Here’s hoping that with the extra money these workers are demanding from their employers they are buying training (investing in themselves) to work in the field that takes over their own jobs that they caused to disappear.

Dec 04

IF (by Rudyard Kipling)

True in sports, business, and life in general:

IF you can keep your head when all about you
Are losing theirs and blaming it on you,
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
If you can wait and not be tired by waiting,
Or being lied about, don’t deal in lies,
Or being hated, don’t give way to hating,
And yet don’t look too good, nor talk too wise:

If you can dream – and not make dreams your master;
If you can think – and not make thoughts your aim;
If you can meet with Triumph and Disaster
And treat those two impostors just the same;
If you can bear to hear the truth you’ve spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to, broken,
And stoop and build ’em up with worn-out tools:

If you can make one heap of all your winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breathe a word about your loss;
If you can force your heart and nerve and sinew
To serve your turn long after they are gone,
And so hold on when there is nothing in you
Except the Will which says to them: ‘Hold on!’

If you can talk with crowds and keep your virtue,
‘ Or walk with Kings – nor lose the common touch,
if neither foes nor loving friends can hurt you,
If all men count with you, but none too much;
If you can fill the unforgiving minute
With sixty seconds’ worth of distance run,
Yours is the Earth and everything that’s in it,
And – which is more – you’ll be a Man, my son!

Aug 28

Some thoughts on Software Patents

I have read a lot of what I consider to be fairly convincing arguments relating to software patents and whether the courts should “allow them” or “ban them”. Before I had the insight I’m going to share below I was definitely a fence hopper, but I think I have finally satisfied myself with an answer. It takes a wee bit of imagination and a willingness to be somewhat philosophical to get there, but I think the thought process will get you there.

 

If you’ve seen “The Matrix” you know that almost the entire movie involves real people living and acting in a virtual world. If you’ve seen “The Matrix Reloaded” you’ll remember a scene where a ship is returning to realworld city of Zion and they are getting ready to enter the gates to the city. The city is very mechanical and computers are utilized to control everything, but do the people of Zion who operate the computers sit behind a keyboard? No they don’t. Instead they “plug in” in the real world transferring they minds into the virtual world in which someone (presumably other humans) has programmed all of these controls. The controls cool thing about these controls is that not only can they be laid out like a keyboard, but they can also be like a lever. It’s their own virtual world so they can build it however they want. They just need to be presented with an environment that they can manipulate to get “the job” done.

 

Now imagine current earth humans being able to allow their mind to live or work inside of a virtual world. Everything in that virtual world is actually software! Nothing is physical though it could be designed to look it and feel it. It may be designed such that your physical actions (ie grabbing a lever and pulling / pushing it) causethe software to behave in different ways, but it’s still not actually physical. How you interact with that software simply causes some state change in the outside world, but what you are interacting with IS software. Yes, the changes you introduce by manipulating the controls made available to you will cause some other software to cause changes in the outside world which will in turn cause a change to the view of the world presented to the those in the virtual world (and in the physical world). But it’s still software making it all work. The tools are software. The connections are software. The actor could even be software.

 

Once these types of systems are possible, and especially once they are common place, there could be a rush of what, in the physical world of today, we would call innovative people coming up with new widgets that can be used inside of this virtual world. These innovations will almost surely come with a price that would be paid by the programmer. In that case there would be a need for protection under some type of law in order to encourage people to create, test, and perfect them. Do we have a system that provides this sort of protection today? Yes, we do, and it is the patent system. It would also be applicable to this sort of situation considering the new types of “tools” that people would “physically” interact with inside the virtual world. All manner of things are possible in the real world today that we just knew wasn’t possible before (until someone innovated a way to do it), and the same will be true in the virtual world. Ways of doing things never even thought of will be, given the right motivation, not only thought of but implemented and improved upon. Different ways of looking at problems will cause unique solutions to become apparent. The solutions would be “obvious” once pointed out, but would be nonobvious prior. Why would someone dedicate their time to looking for alternate solutions if the answer will net them no reward? History shows us that they won’t… not to the same degree anyway.

 

Q: What about a hammer vs a “virtual hammer”? Would you really allow a patent on a virtual hammer that does the same thing in software world that it does in the real world? That seems like everything would get repatented with the only difference being that it is “in software”.

 

A: This question stems from one of the common errors untrained people make when judging patent validity. You can’t just look at the title, or the summary. Think about it. A software hammer wouldn’t be the same thing as a hardware hammer would it? Software doesn’t have physical nails to drive. But maybe a software hammer can be made such that it easy automates the binding of two or more components using a single connective module. Something that used to take 10 virtual actions can be easily rolled  up into the action of hitting the objects with a hammer. The hammer basically just does all of those steps that “physically” had to be done before and elminates them through some ingenious “piece of code”. Testing this peice of code and finding just the right tweaks for it came with a cost of thousands of lost operations (cpu cycles), mangled data, and even memory leaks that had to be dealt with before it became stable to be used in the virtual world. Why would someone give up these precious resources if it would not gain them some advantage? Now that it is done it is a easily copyable solution so what’s to stop another from copying it and using it without having put their own butts on the line? Copyright doesn’t do the trick as code can be rewritten (hell, translate it to another language and you’ll have to modify it to do so). You’re still using the same algorithm, but it obviously not the same code. Yes it is and you shouldn’t be allowed to steal the code, change the language, and call it new.

 

It is my belief that as things become more virtualized and as virtual reality starts to become both more real and more immersive that we will see more need for patents on things in the virtual world. These things are no doubt software. But they are also no doubt in need of protection.

 

To be continued… or is this one step too far?

 

And if we know that software should be patentable in the case of said eventual world, then software should be patentable now due to the simple fact that the simulation argument leads there.

 

May 04

Do it yourself… atleast once

Not too long ago my wife and I purchased a new house. Well, actually, there’s nothing new about this house. It’s about 40 years old and full of “issues”. Some of them are purely a product of neglect (it was vacant for almost 2 years prior to our purchasing it), some of them are due to the house’s age, and some of them are simply “things I wish were different”. I’ll be learning a lot of new skills on this one…

I have a tendency to avoid paying someone else to do something until I myself have done the same thing. For example, when I was 19 or so I decided I wasn’t going to take my car to get the oil changed. I’d change it myself. It did not end well…  I emptied the wrong fluid. I dumped the manual transmission fluid when I pulled the plug ( which explained why my oil was purple) and before I knew it my car was in the shop anyway… for a more expensive fix. I went ahead and finished the oil change myself though first.

So why did I decide to do it myself? Is it because I like working on cars? Nope, not really (though I do like to understand how they work just in case). It’s because I wanted to know (1) can I do this myself and save some money and (2) If I can do it myself for less money, can I save enough money to make it worth my time. If there answer to (2) is “no”, then I simply won’t do it anymore. I’ll pay someone else, but I want to know what I’m paying them to do.

I felled a tree with an axe last weekend. It was very satisfying. The tree was approximately 40ft tall with a trunk diameter of around 10 inches. It was a lot of work. And despite the satisfying feeling of watching the tree fall to the ground caused by my sweat and determination I now know WHY I would pay someone to cut down any tree bigger than that one. It is simply not worth my time / pain / equipment / etc to do it myself. Previously when getting estimates I might have thought “200 dollars for that tree… is this guy trying to rip me off?” or “I have to get 5 estimates just to be sure everyone is in the right ballpark”. But now, having done it myself, I know what I would quote myself, and I know that it likely takes me two or three times as long as a “pro” so I can adjust accordingly. I also know that I can spend the time I would spend on the tree working on a new computer program… or doing some house maintenance I’m actually good at… which is likely a far better use of my time. Heck, I might be able to make the $300 working on computer stuff in the amount of time it would have taken me to cut down the tree and haul it out to the curb. In that case, I can rest well knowing that both the contractor and I win. I can write that check with confidence and without regrets or hesitation.

When possible, I suggest doing the things you would pay someone else to do atleast once. Maybe you’ll find you like it and are good at. Maybe you’ll just reaffirm your decision to let someone else do it. Either way, odds are you’ll learn something useful.

(I pay someone to change my oil. I can get it changed for about $13 at the right time of day and it only takes about 10 minutes. I can barely buy all the supplies for that price, and it would likely take me an hour. I know how, just in case, but for now, it’s worth my time and lack of frustration to write the check and rest well knowing that it truly is the right decision as opposed to the “easy” decision.)

Dec 26

Link checker – Bad neighborhood

I often get requests for me to add links to my sites. Usually it is just someone looking for something simple that will deliver them some relevant traffic.
What I have found though is that one should ALWAYS verify that the link destination is okay. It should not be in a bad neighborhood. In addition, it should not link out to bad neighborhoods. These bad neighborhoods will get sites that link to them penalized in the search engines.  That’s right – the sites that you link to can get your site penalized. Not only that, but the sites THEY link to might get your site penalized.
The link below has a bad-neighborhood checker. It will scan a URL and determine if there are questionable links. Then it will scan the linked to pages to see if any of their links are questionable in nature. It’s a great little tool and I highly recommend using it.