Showing posts with label technology. Show all posts
Showing posts with label technology. Show all posts

Tuesday, February 19, 2013

History is Repeating Itself...Again


The Internet is like the Caribbean in the Sixteenth Century.  No, I don't mean it's full of Spaniards, French and Englishmen, though they are present on the Internet too.  I mean that the Internet seems to turning into a lawless area prone to increasing levels of conflict.  I'm not talking flame wars here, people, but rather "cyber war".  I personally don't like that term, but I'll use it because I don't have a suitable replacement.  If you read the article I just linked, you'll read an us versus the world story, but the whole time I read that article I couldn't help but draw links to a time centuries ago when the Spanish were probably saying much the same things about the English and French.

The Spanish were constantly shipping silver from Mexico to Spain and their rivals and independent entrepreneurs wanted in on that action.  Eventually, piracy became a huge problem in the Caribbean and led to several wars between the European powers as they fought to control shipping in the Atlantic and Indian Oceans (not to mention their religious differences).  Eventually, things settled down when England emerged as the biggest naval power in the Caribbean and shut down most pirating organizations there.

I've been reflecting on similarities between that period and now.  Right now, on the Internet, it seems that there are lines being drawn and sides taken in this new free-for-all battle happening on the Internet.  The US is on one side, Iran, China and Russia seem to be on their own sides.  Everyone seems to be attacking everyone else out there right now, much like in the sixteenth century in the Caribbean.  If you read the history of piracy there, you'll note that players came and went and eventually, England won out by outlasting the competition.

That could happen with the Internet, too, and brings up several questions.
-Do we really want it to go that far?
-How much virtual destruction, theft and damage will happen if we let it play out like it did in the Caribbean?
-Would there even be an end to the "cyber war"?
-How will the cyber war play out in the real world?
-Will it cause real wars, much like piracy in the Caribbean caused (and was caused by) real wars?

I don't know the answers to these questions, but I would like to posit some guesses.  First of all, I don't think we want events to run like they did in the Caribbean.  We don't want a long period of conflict that only works itself out when one power can dictate how the others will behave.  That path would mean incalculable damage to the world economy and leave one nation in control of Internet security or governance.

That is assuming that one nation (or a coalition of nations) could even win the struggle.  In the modern world, that would mean that the conflicting nations would probably have to fight a real war, or find a way to control an enemy nation's Internet infrastructure (not likely).  I do think that large scale cyber wars would be likely to spill into real world conflict.

For example, let's say that Iran manages to bring down our nation's power grid (not that I'm saying that's possible).  We would go through some amount of time recovering from the event and then figuring out who was responsible.  Do you know what would happen after that?  We'd invade Iran and I don't think there's anyone in the world who thinks that their military really stands a chance against ours.  What would that mean though?  It would be like Afganistan and Iraq all over again.  There would be a long period of occupation and fighting a guerrilla war against foes who have all the time in the world to kick us out and a population motivated to see that happen.

Switch that to China or Russia.  Say one of them decided to initiate a full-scale cyber war against us.  We'd duke it out on the Internet, and then someone would end up declaring war in the real world.  I don't think that anyone really knows how a war against Russia or China would end up, but it wouldn't be pretty and could even end up in Nuclear War.  None of which I'd be excited to have to endure.  Hell, switch it to England or France and you're likely to get the same outcome.  They are our allies right now, but things change.

This line of thinking makes me think of the Chinese curse, "May you live in interesting times".  These are interesting, and scary topics.  I wish I knew what was going to happen, or even what was likely to happen.  I only know that I want things to go smoothly and peacefully.  We'll see if that can happen.

It also makes me think of the far future, when we start mining Near-Earth Objects.  Will space piracy be next?  At least with that, we do have a direct historical reference and not an inference, but would events play out any differently than they did in the sixteenth century?

Tuesday, February 12, 2013

What it Means to be a Consultant


It occurred to me the other day that a lot of people don't really know what I do and how it's different from what a lot of other people do in the IT industry.  If you want a detailed definition of IT, you can go here.   Basically, we make computer systems that do the things we're asked to make them do (most of the time!).  This industry consists of more jobs than just developers and engineers, but I'm not going to explain about the different jobs because it's unimportant to the topic.

I've been working in IT for over seven years now.  For most of that time, I've been a Consultant.  What does that mean?  It means is that I work for a company who sells my services to another company for a fee.  As a Consultant, I have a full-time job independent on whether or not my company has a contract to sell my work to another company.  This is an important distinction from other people who work in IT.  There are three other groups: Contractors, Full-time Employees (FTEs), and Offshore.

Consultant vs. Contractor

Contractors are people who contract directly to the customer, without an intermediate employer, like I have.  This normally means that the Contractor is taking home more pay, but they are not receiving any benefits (i.e. insurance).  Contractors, by definition, are bound to a contract with their customer, but once that contract is complete, they can either renew the contract (assuming their customer wants that), or move on to another customer.  This is similar to me, but my employer also has a say in where I go.  Contractors typically have to find their own gigs, or pay a placement agency to do so for them.  My employer finds my gigs for me and pays me a full wage when I'm on the bench, if they can't find anything for me.  When a Contractor doesn't have a gig, that person isn't earning a wage.

Consultant vs. Full-time Employee

The first similarity is that a Consultant and an FTE are both fully employed, complete with benefits.  When I'm working for a customer, I behave like that customer is my employer.  When most people ask, I don't say I work for Daugherty Business Solutions, I say I work at Best Buy as a Consultant from Daugherty Business Solutions.  If I'm in a hurry, or don't want to confuse the issue, I just say that I work at Best Buy.  This is also becomes one of the hardest parts of being a Consultant.  When it's time to leave one customer for another one, I've already developed an affinity for the workplace and the people who I have worked with there.  I've worked at eight different customers in the seven years I've been a Consultant.  I'm still in contact with people from those customers through Facebook, or Twitter, etc.

Consultant vs. Offshore

The main difference here is that I work at the customer's location.  Offshore people are typically employees of a company located away from the customer's location (either in another country, or another part of the same country).  As such, I get a lot of face-to-face interactions that the Offshore people don't get.  From my experience, this helps me produce better results.  I've worked with Offshore teams before and the results are always hit or miss.  The main benefit, of course, is that the costs of Offshoring are greatly reduced compared with what a company will pay for my services.  This is a real, calculable benefit, but you should also pay attention to the adage, "you get what you pay for".

Why am I a Consultant?

A Contractor makes more, so why be a Consultant?  There are several reasons for this.  I'm lazy and don't want to have to find my own employment and I'm too cheap to pay someone to do that for me.  Also, I don't have to worry about having a gap of employment when my current contract ends.  If my employer can't find something right away, they'll put me on the bench and I'll do some internal work until they find something.  This is the biggest benefit to me.  The bench is no fun, but I'm still getting paid and I can use the time to improve my skill base or bring some value to my employer through an internal projects.

You can get stability from being a Full-time Employee, why not do that?  Stability there comes with a price, monotony.  If I end up not liking a customer for any reason (commute, people, atmosphere, etc.), I can request not to be renewed there when the contract is complete.  As stated before, I don't have to find a new job then, I can just wait until my employer has found one.  Also, not every company uses the same technology stack to develop their systems.  Moving from one customer to another can increase your skill base and your personal network.

As for Offshore, until companies in the US start selling Offshore services to India and China as their labor costs increase, I'm not going to even begin to think about that.

Summary

Overall, I'm happy with my current role as a Consultant.  I could see myself doing something else, but I just don't think that I'd be as happy in those roles as I feel now.  I have good flexibility, careeer mobility and stability.

Friday, September 14, 2012

Story: The Cause


I wrote another story this week for one of Chuck Wendig's Flash Fiction Challenges.  This one was similar to last week's in that you randomly picked from three buckets of story elements to create your story.  I would have been happy to write in almost any of the genres, and I got cyberpunk.  I love William Gibson, so this pleased me immensely.  For setting, I got Wal-Mart.  Meh, I would have liked any of the other settings, but this would work.  For the element to include, I got a robot.  That would work beautifully with cyberpunk.

My first draft of the story was over 1300 words, which is way over the 1000 word limit.  It was hard to pare down to 1000 words, but I'm coming in at 992 words now.  I had to remove a part of the story that I really liked, but I think that the story is still as good without it.

I hope you enjoy my attempt at cyberpunk, Wal-Mart and robots.

----------------------------------------------------------------------

Gibson sat down at a public terminal in the library section of Wal-Mart.  He glanced around to make sure that no security robots were around before plugging his neural adapter into the connector and transferred his consciousness into the terminal.

Inside, he took a moment to get his bearings.  As with most public terminals, viruses and other malware were prevalent.  He ignored those as they couldn't harm him.  He was on the lookout for either an AI or another user connected to this terminal.

Satisfied that he was alone, he began unpacking the tools that he would use for The Cause.  First, he constructed a worker factory.  Workers would free him up for more important tasks.  Then, he built a firewall factory.  The firewall factory would build pieces of firewall code that Gibson had customized to defend this terminal from outside influence while allowing the traffic that he wanted to flow.

Workers started emerging from the factory and he sent them to clean the terminal.  With the firewall factory finished, he began assembling his firewall as his workers began to tear down the terminal's firewall.

Suddenly, several workers were vaporized and Gibson realized he'd forgotten to disable the terminal's antivirus program.  He cursed himself as he couldn't afford any delays.  Antivirus programs were a joke nowadays, but they were still better than leaving a system free to any virus from the 21st century still lurking around.  Also, they could still identify and kill processes trying to overtly seize a machine.  That's what the worker processes would look like to the program.

Gibson left the firewall and went back to his tools.  He pulled out what looked like an tablet computer and punched some keys and told the terminal's OS to disable the antivirus program.  The tablet made the terminal think that he was an administrator, it complied.

He chided himself for forgetting such an easy step and went back to the firewall.  He knew that he had to hurry because the network security AIs would soon detect his firewall and try to retake control of the terminal.  A human couldn't control an AI and they could easily eject him from the machine if he didn't have his defenses up.  An AI wasn't as clever and adaptive as a human, but they made up for that by being faster.

The firewall work was finished before long, which was good, because a moment later a network security AI hit his firewall, trying to access the terminal.  He shored up the port it was trying to access and sent workers to the firewall to maintain it as the AI would start trying to break it down soon.

Gibson took the tablet computer out and opened an unsecured connection to the security terminal of the Wal-Mart.  The security terminal controlled the security robots.  The plan was to destroy every Wal-Mart, worldwide, from the inside in order to try to break the megacorporation's oppressive control of the world's culture and economy.  The security robots would be Wal-Mart's downfall.  If The Cause could break Wal-Mart, it could free the people of the Earth.

He found the security terminal and ordered his workers to start building a secure tunnel to it.  They opened a port in the firewall and began constructing the tunnel as Gibson pinged the security robots.

Panic set in as Gibson realized that one of the security robots was heading his way.  The network security AI must have sent it to physically check out the terminal.  The defenses would have to hold in his absence.

He removed the neural adapter and shoved it into his backpack.  He moved to another terminal as he gripped the EMP gun he had stashed in his backpack.  He pretended to work on the terminal as he waited for the robot.

He didn't have to wait long.  The robot rounded the corner and said, "Greetings, Wal-Mart shopper.  Is there anyone using this terminal?"  The robot was pointing at where Gibson had been sitting before.

"You just missed him," Gibson said, his grip on the EMP tightening.  He used his other hand to point, and said, "He went off towards the bathroom."

The robot looked down at Gibson.  "The security cameras tell me a different story, citizen.  They..."

The robot stopped speaking when Gibson pulled his gun out.  It tried to raise its own weapon, but Gibson had the advantage of being ready.  He fired and the robot crumpled to the ground.  He didn't have much time now, so he quickly plugged back in.

His found that defenses were holding, but there were now three AIs trying to break down the firewall.  He quickly sent all of his workers there and went to complete the tunnel himself.

Once the tunnel was finished, he entered the security terminal.  Luckily, there wasn't an AI there.  They were probably all at his firewall by now.  Soon, it wouldn't matter.  He pulled a small cage out of his tools.  It housed a virus that The Cause wrote just for this occasion.  The virus would take control of the security terminal and order the security robots to destroy the store.

As he released the virus he felt a breach open in his firewall.  He left the virus to its business and hurried back to the tunnel, only to find he was too late.  Two AIs were in the tunnel heading his way.  Trapped, he knew that he was dead.  He couldn't be harmed by an AI if his consciousness was still in the terminal he was physically connected too, but if the tunnel collapsed, his consciousness wouldn't make it back to his brain.

He glanced back to the security terminal and saw that the virus had taken control and had disconnected the terminal from the rest of the network.  The Cause had won in this store.  As the tunnel collapsed around him, Gibson smiled.  He'd done his part to save humanity.

Thursday, May 24, 2012

Javascript TDD/BDD/Unit Testing


I've been doing some pretty cool stuff at work lately and I think it's time for me to share some of the cool things that we're doing.  Web development isn't anything new, I've been writing HTML since I was 12 years old, but it has changed quite a bit since I wrote my first, very simple, web pages.

Another thing that isn't new for me is Javascript, but I never really got that into it or relied on it to do anything powerful.  Since starting at Best Buy, I've really gotten good at Javascript and have realized that it is quite powerful and can do a lot of good for a website.  I've also realized that it can also do a lot of harm to a website.  One thing that a lot of people omit from Javascript development is testing.  A lot of people consider testing their scripts in the browser to be adequate for their purposes.  I disagree.  Coming from back end systems, I know that thorough testing is very important and I think that this is a component of front end systems that has been lacking across the industry.  That being said, there are ways to automatically test your Javascript without using a browser.

One of the goals of the team I'm on is to introduce an automated testing tool to test Javascript automatically when the project is built.  Our build is written using ant, which I hadn't used since college, but since it's well documented, I didn't have any trouble picking it up again.  Also, I'm using Eclipse as my IDE, so it supports ant syntax highlighting and parsing, which is very helpful.  Ant is very powerful, but since it's written like XML, it can be hard to write complicated constructs like looping and conditions, but we've made it work for us, so far.

I was put in charge of incorporating Code Quality tools into our build.  At first, this was a little overwhelming.  I was just starting to get good at Javascript development and didn't have any experience with testing tools for it, but I started doing research on the internet and quickly found some testing frameworks that I didn't think would be hard to incorporate into our build.  We settled on using Jasmine and I worked on finding a way so that we could call our spec scripts from our build.

This started the frustrating part of our journey.  The people who built Jasmine don't support the different ways to launch the tool (like from an ant build), but only the framework itself.  Okay, I can overcome this, there are some open source tools that I can use listed right on their page.  I started with Jasmine-Node since we were using Node.js for our local web server to test our pages.  I quickly realized that this wouldn't work for us since Jasmine-Node doesn't create a DOM and a lot of our Javascript relies on a DOM in one way or another.

My next attempt was to try Node-Jasmine-DOM.  It has DOM support and Jasmine integration, so I thought I was getting close.  I incorporated it in the build and got it to run in the browser, but there's an aspect to Node development that I didn't realize until it was too late.  Node makes it really easy to use other Node tools as dependencies in the tool you are building.  This is great for reuse, but dependencies are called that for a reason.  One of the dependencies that the Node-Jasmine-DOM tool used had a defect in it and that was blocking our scripts from being tested in the build.  I waited patiently for a couple of weeks after submitting the bug to the owners of the dependent tool, and there was initially some good back and forth about it for a while and someone submitted a workaround for the bug.  I was excited and tried it out on my machine, but their workaround didn't work for mem (in Mac OSX), but worked in Windows.  I went back to the forum and they had closed my defect, so I commented that the workaround didn't work for me and I needed another way to make it work for me.  Another week of waiting without a response and I decided to pursue another way to run our tests.

I started my new search by trying to find a tool that would run Javascript straight from a command-line.  I would do myself what Node-Jasmine-DOM was trying to do (create a DOM and insert Jasmine).  Enter Rhino and Env.js.  I found a blog that had done this before and I was all set.  It took me less than a day to incorporate these new tools into the build and I was immediately running our specs from the build.  At the same time that I was ecstatic to be finally done with this, I was very frustrated that I had wasted so much time trying some of these other tools.

For those curious about what exactly I did, read on.  For those who don't want the technical details, thanks for reading this far!  This next part may not be for you as it will be pretty technical.

Our test target in our ant build does a few steps to run the spec scripts.  The first step is to identify the pages that need testing and has some logic built into it for that.  The next step is to convert these pages into spec runners (example), this means that I needed to insert references to our spec.js files and the Jasmine Javascript files.  Since I wanted to test the Javascript on the page, I just copied the page, changed the extension to *.runner.html and inserted the appropriate spec and Jasmine scripts.

The next step that the build does is to get the list of runner files and run them.  I created an ant macro for this step.  The Build-Doctor guy provided the envjs.bootstrap.js file that I started with, but later customized.  His was very simple and was basically just a for loop that told Envjs to load a page.  I found that that wouldn't work for more than one runner, so I changed it a bit to reload Envjs at the beginning of the loop and then load the runner file.  I also added some console.log entries so that the build is more vocal about what it's doing.

Here's where I got a little bold and changed the Jasmine.js and Env.js files to eliminate some extra console.log calls that I didn't feel were required and I added some in a couple of places where I wanted visibility.  In the end, it looks great in the build and it creates JUnit style reports that our Jenkins CI server can interpret.

I was planning on covering the other major aspect of our build, Freemarker, but this post is getting pretty long, so I'll save that for another day.  Below are some examples of what I did in our build.

This is the macro I wrote in our ant build.
<macrodef name="runRunnerList">
 <attribute name="runnerList" />
 <sequential>
  <echo message="Running files: @{runnerList}" />
  <exec executable="java">
   <arg line="-jar ${dir.lib}/java/js.jar -opt -1 lib/javascript/envjs.bootstrap.js @{runnerList}" />
  </exec>
 </sequential>
</macrodef>
This is the results of running a spec in our build as seen in the terminal.
     [exec] Launching runner: /trunk/bin/debug/_slider/_sliderTest.runner.html
     [exec] 
     [exec] Runner Started.
     [exec] _slider : should have 100 hundred items after the method addItem is called 100 times ... 
     [exec] Passed.
     [exec] _slider : should have 99 items after the method removeItem is called ... 
     [exec] Passed.
     [exec] _slider : should have zero items after the method removeAllItems is called ... 
     [exec] Passed.
     [exec] _slider : should show slider when content extends past the width of the slider ... 
     [exec] ***FAILED***
     [exec] _slider : should hide slider when content does not extend past the width of the slider ... 
     [exec] Passed.
     [exec] _slider : should remove padding from the left side of the viewport ... 
     [exec] Passed.
     [exec] _slider : should add the class bby-slider-item-first to the first item in the slider ... 
     [exec] Passed.
     [exec] _slider : should recieve the second item out of five and the HTML should match ... 
     [exec] Passed.
     [exec] _slider: 7 of 8 passed.
     [exec] Runner Finished.
     [exec] 
     [exec] Done with runner: /trunk/bin/debug/_slider/_sliderTest.runner.html
This is one of our runner files. The highlighted parts are what the build inserts into the file.
<!DOCTYPE HTML><html lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/__common/__common.css" rel="stylesheet" type="text/css" media="all">
<link href="../css/_slider/_slider.css" rel="stylesheet" type="text/css" media="all">
<script type="text/javascript" src="../js/__common/libraries.js"></script>
<script type="text/javascript" src="../js/_slider/_slider.js"></script>
<link rel="stylesheet" type="text/css" href="../js/lib/jasmine-1.2.0/jasmine.css" />
<script src="../js/lib/jasmine-1.2.0/jasmine.js"></script>
<script src="../js/lib/jasmine-1.2.0/jasmine-html.js"></script>
<script type="text/javascript" src="../js/specs/_slider.spec.js"></script>
</head><body>
<script src="../js/lib/jasmine-dom/jasmine-dom-matchers.js"></script>
<script src="../js/lib/jasmine-dom/jasmine-dom-fixtures.js"></script>
<script src="../js/lib/jasmine.console_reporter.js"></script>
<script src="../js/lib/jasmine.junit_reporter.js"></script>
<script type="text/javascript">
$(function() {
    jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter());
    jasmine.getEnv().currentRunner_.name = "__common";
    jasmine.getEnv().execute();
})
</script></body></html>
I will note here that most of our runner files have actual content in the body. The specs for this runner insert some test content into the body before the spec is run. The scripts in the body are inserted just before the </body> tag.

Friday, October 7, 2011

Return to Java

 If you read my blog, you'll know that I just started a new job last week.  The new job is using Java and I've spent the last week getting re-familiar with the language and tools.  It's been a week of reading a lot of text books and using Eclipse heavily for the first time in several years.

The first thing that I've noticed again is how versatile Java is.  This week, I've played with some server side code, technical layer type code (API to a database) and client side code (web servlets, okay, not really client side, but web side anyway).  I get more and more excited about using Java again every day, even every hour it seems sometimes.  I've already got big plans to build a game engine and other stuff like that using Java.

When I started with Wyde, I had those same big ideas, but it just wasn't viable with the tools available.  First, just to develop with the IDE, you need a license.  That's fine if I'm using my work laptop, but I don't think that Wyde would have liked me getting a limitless license on my personal computer.  Plus, I'd have to compile it down to C++ using Visual Studio, which I didn't have access to on my own PC.

Man, Java is so much easier.  The best IDE (Eclipse) is free.  Most of the other good tools and frameworks are free.  Google has server space for your apps that is free.  Once again, I can't state how exciting this is.

Now, don't get me wrong, working for Wyde was one of the best experiences in my life.  I learned a lot about projects, business, insurance and myself during my time there.  I know that I can lead teams, run and participate in projects and design components in a larger application.  All of that I learned at Wyde.  Even if my knowledge of Wyde's proprietary language isn't particularly useful, the technical, personal and management skills that I learned there are invaluable to growing my career.

I think that I'm getting a little off topic, so I'd like to conclude this post by giving you all a link to my AppSpot and saying that you should check back there often.  Right now it's just a little "Hello world" app, but soon it will be so much more.  I'm planning something big that I hope you all will enjoy.  I will, of course, keep updating my blog with updates to the app that I'm building, but more frequent updates will come from my Twitter or Facebook pages.

Monday, October 3, 2011

Job Change

Those of you who know me personally probably have heard the news already, but here it goes: I've started a new job!  This time it's for real, unlike last time.  :)

The decision to leave the company that I'd been with for nearly five years was a difficult one.  There have been many frustrations over the years there, but the number one reason that I chose to leave (at least at the start of the process) was travel.  I've been travelling almost constantly for work for five years now.  I've had a couple of slow periods where I would get to stay home for a month or two, but overall, I'd say that I have spent about fifty percent of my time with Wyde on the road.  By itself, travelling isn't that bad.  I do enjoy visiting new places and meeting new people, but with a family (and especially two small children), travelling is very taxing.  Now, don't misunderstand me, I'm not saying that my family makes it hard to travel; I'm saying travelling makes it hard on my family.  I just couldn't live with it any longer.

The other thing to understand is that I wasn't looking for a new job.  One of the things that I hate the most in life is job hunting!  When I graduated from college, it took me ten months to find a job in my field!  Ten months!  Granted, that was at a particularly tough part of the recession, but the hardest part is getting your hopes up and then being rejected.  I couldn't count how many times I heard, "we're very interested," or, "we'll be in touch," or any other saying that leaves a candidate with hope just to have it all come to nothing.  A couple of times I had been told that they wouldn't give me a formal offer right away, but that I would get one within the week, but never heard back from them.  Well, I'm getting a little off topic here, so I digress.

My point is that I wasn't looking.  I've been getting a call from headhunters about once a quarter for the past year or two and I would go through the motions, maybe have an interview or two and then not hear anything.  I took it all in stride, not getting my hopes up for any of it.  This last time, about a month ago, I had another head hunter call that went a little differently.  The recruiter handed me right off to the interested company and they wanted to interview me right away and in person.  I was, unfortunately, out of town, but they were cool and we scheduled for the next week.  They acted fast and got me an offer the same week that I had the second interview.  Now, I'm not going to go into the details of what happened next, but there was a counter offer and then a counter-counter offer and I ended up accepting the new company's counter-counter offer.  That's another thing that I wasn't trying to do (get a bidding war over me going), but it's nice to feel wanted!

So, what's different now that wasn't when I'd gotten other interviews?  Well, for one, the new company has a different outlook on what it takes to be a good developer.  They feel, similarly to how I feel, that if you know the theory/concepts of object-oriented programming that a language is easy to learn.  It's surprising to me how most other companies don't grasp that.  I hadn't done Java programming since college and this company was willing to take the risk based on my interview and hire me as a Java developer!  I was amazed!  Another reason is that I am more experienced now than I was out of college.  Duh, right?  Well, I didn't really fully realize that until I started talking to this company and they asked me certain questions that a newbie might not know about.

You may have noticed that I haven't mentioned the name of my new company.  The reason is that I'm not sure how they would take me writing a blog about this whole thing.  Maybe after I've worked here for some time I'll share with you all that information, but for now I'll keep it quiet.

Another main benefit to switching jobs is that I get to work using Java again.  I've been reading training manuals now for a while and the more I read the more I remember why I liked Java.  It's also made me realize how important a good design is to having a successful product.  I'm just going to leave it at that.

So, it's exciting news!  At the same time that I'm sad about leaving Wyde and leaving the friends that I made there, I'm happy for this new opportunity to return to Java and do something different.  It's a good opportunity to grow my skillset and to see how other companies do this consulting thing.  Also, yay for no travel! :P

PS: It still amazes me that Word likes "travelling", but Firefox wants it to be "traveling".

Monday, August 1, 2011

Change is Inevitable

I've been told before that change is inevitable.  I don't disagree with this, but there are times when I absolutely hate that things change.  Change can be good or bad, but it always brings with it a level of uncertainty.  I hate uncertainty.

There has been a major change at my company today.  Wyde has been bought by an Indian company called MphasiS, a subsidiary of Hewlett-Packard.  You can read more details about this here and here.  We had a companywide phone call this morning when the news was dropped.  I tweeted about it here.  Needless to say, it was quite a surprise.

I've been with Wyde for four and a half years now.  Being with a company that long gives you some idea at what your career prospects are like within the company.  I knew where I was and where I was likely to go and I was happy with that.  Now, though, this change has introduced a large amount of uncertainty to that path.  Sure, management told us several times that we would remain a separate entity and that nothing would be changing.  I'm not so sure.  I'd like to believe that, but if management didn't want anything to change within the company, why would they sell it to MphasiS?

They explained that MphasiS would bring us more opportunity and I do believe them.  One of our problems of late is getting large insurers to take us seriously due to our size.  While the company has at least grown by four times in the time that I've been there, two hundred employees doesn't make us a large company.  MphasiS will solve that issue because of their numbers.  They will allow us to create an off-shore team in India that can support Wynsure development efforts.  Their size brings a certain amount of credibility to Wynsure and a guarantee that Wyde won't just disappear off the face of the earth at any moment.

I never really write about my personal life, so why am I writing about this?  Good question.  Well, I have been filled with a tumultuous sea of emotions ever since I heard the news and I thought that getting it all down into a blog post would help me sort out my feelings on the issue.  Also, because I don't really write a lot about my personal life.

So, what are my feelings about all this?  Well, I don't really like the uncertainty that this change brings to the table.  I'd like to think that I've cemented my reputation and career path within Wyde and this has cracked that foundation.  Why would Wyde use me as a project manager when I'm sure MphasiS has many project managers chomping at the bit to get on one of our projects?

Of course, there is the feeling of hope that this change brings.  Lately, I haven't been terribly satisfied with my job.  Sure, it pays well enough and I certainly am good at it, but I've been having a lot of trouble lately caring about it.  I do the job from day to day, but I haven't been putting any feeling into my job.  The hope here is that this change forces me to care or forces me to find something else.  Since I'm kind of lazy and hate job hunting, I'm hoping that this shakes things up a little for me and gives me a reason to care again.

So, what does this change mean for me right now?  Nothing.  Right now I'm going to play the wait and see game.  I'll be prepared, of course, the best I can.  I've tried to stay positive and that's the best that I can do right now.  Is this change good or bad?  I think it's too early to say, quite yet.  I'll let you know as soon as I know.

PS: I almost titled this post "How I became a third tier HP employee".  Is that a better title?  :)

PPS: Since change is inevitable, I've changed my Twitter handle.  I'm now @geekonablog!

Wednesday, June 29, 2011

The Cloud - A Breakdown and Opinion

Image courtesy of Wikipedia
So, a few weeks ago, Apple announced iCloud at E3.  Amazon launched their Cloud services earlier this year.  The "Cloud" seems to be the current hype nowadays in many technology fields.  Even in insurance we've started getting questions like "Does Wynsure take advantage of Cloud Computing?"  You might be saying, "What does that even mean?"  Well, in this post, I will explain the "Cloud" and tell you about the pros and cons of using it, as I see them.

What is "The Cloud"?
The Cloud is really the Internet.  I remember from my networking classes, several years ago, my professor talking about the internet was like a cloud.  You couldn't see all the little parts (like the raindrops in a cloud) from the outside, but you knew that they were there.  So, when Amazon or Apple talks about storing your data in the "Cloud", they are talking about storing this information on the internet somewhere.  What you need to know is that your data will not be floating about the internet.  It will be stored on secure* servers owned by these corporations, but accessible from anywhere you would have access to the internet.  While "the Cloud" has become mainstream, the concept of the cloud is quite old.  Organizations have been using the cloud for decades.  SETI has been using "Cloud Computing" for a long time to try and find hidden radio transmissions in all of the static and background noise of the galaxy.  Apple and Amazon have opened this up to the public for several reasons: hardware is cheaper than ever; they see a demand for this with all of the handheld devices out there; it's another easy way for them to charge whatever they want for a service that costs them very little (relative to the potential income).

Pros to using the Cloud:
1. Using the cloud will allow individuals and corporations to offload the costs of hardware maintenance and upgrades.
2. Cloud services are guaranteed not to ever have data loss**.
3. Especially in the case of iTunes using the cloud, you would never have to buy songs over again.

1: If all of your files are stored in the cloud, you don't have to have as much hard drive space on your servers and personal computers.  In fact, Apple is planning on launching a laptop that doesn't come with a hard drive that uses the Cloud to store the users' files.  This would be cool since you wouldn't have to keep buying bigger and bigger hard drives to store your ever growing library of ripped music and movies.  They would just all be out in the cloud.

2: Corporations spend a lot of money on fail-safes and backups to prevent data loss.  Recovering data after a loss is also very expensive.  This one is kind of an extension of #1, but I wanted to call it out specifically because most people ignore backups until it's too late.  I know that I am guilty of this as well.

3: I have songs that I know that I've purchased from iTunes, but I can't seem to find them on my computer.  So, I just haven't bought them again.  I'm sure that I'm not alone in this.  Also, Apple has offered to upload your non-purchased music to the cloud and they will allow you to count them as purchased if you pay their yearly service fee.  This in particular interests me.  I know that I have over 10000 songs in my library at the moment, but I also know that I've probably lost a couple thousand to moves from computer to computer.  Apple's service would prevent that loss.

Cons of using the Cloud:
1. Losing "possession" of your data.
2. Tracking my use and files.
3. Securing my data.

1: This fear of mine might be a little paranoia, but I'm worried that if I'm storing all of my files in the Cloud (like if I used that particular Apple laptop), couldn't Apple do whatever they want with my files?  If I have a particularly nice picture, couldn't Apple take that picture and sell it to an advertising agency?  Now, you might say something like, "They can't do that.  In their Terms of Service, they state that I retain ownership of my files."  Well, let me tell you two things about that my friend.  One, "possession is 9/10 of the law".  Two, Terms of Service change all of the time.  You may or may not have heard about a recent change to Twitpic's Terms of Service.  In it, you still retain "ownership and copyrights", but in the same Terms of Service you give Twitpic the rights to sell your photos.  That's some doubletalk right there.  Once whoever has your files, how are you going to be sure that if you end your contract with them that they aren't keeping your files?  There's no way to be sure of that.  In fact, they'll probably tell you that they're keeping your files for in case you want to join their service again in the future.  That just rubs me the wrong way.  I don't trust it.  Of course, I do recognize how untrusting and crazy this might sound.  I probably sound like someone who refuses to put any of their money in the banks.

2: Just think about it, if Apple and Amazon can track how many times you've played a particular song, isn't that the perfect market research?  Then, they can pitch you the artists (or e-books, movies, etc.) that match your plays.  Maybe that's not all bad, but I don't like having my activities monitored that closely.

3: With all of the hacking that's been going around lately (LulzSec and Anonymous and the other hacking groups targeting large corporations), eventually someone will hack into Amazon's or Apple's cloud servers.  Mind you, this isn't an "if", it's a when.  Now, how deep they get in is really up to Apple and Amazon (and whoever else starts offering these services).  Security is something that is often overlooked by a lot of companies because it's expensive to maintain and there are so many vulnerabilities being discovered all of the time.  Frankly, that's part of what would motivate a corporation to use a Cloud service in the first place.  But, how am I going to be sure that the data is secure?  After all, I would have thought that a huge technology company like Sony wouldn't be vulnerable to the most basic of exploits.  Let's just hope that Apple and Amazon learn from the mistakes of others.

Conclusion
So, will I be jumping on the Cloud bandwagon?  Not if I have a choice.  It's just not worth the risk and unknowns to me.  On the other hand, I've heard rumors of the WiiU using the cloud to store your game saves, and I would be alright with that.  My Wii has run out of hard drive space and that wouldn't be a worry then.  Will I be uploading my gigs and gigs of music and movies to Apple?  No.  Maybe (and that's a big maybe) once the service has proven itself.  For now, please excuse me while I go bury my files in my back yard.

*See part 3 of the Cons section.
**There is no such thing as "no data loss".  Servers and hard drives die, it's a fact of life.  Cloud services will obfuscate this so that you never see the data loss.