Category Archives: Technology

Hard Drive Space

So, I’m having some new issues with hardware: hard-drive space:
  • My 2 x 100GB SSD hard-drive space is running out.
  • I have multiple machines (desktop, laptop. macbook, iPad) for which I want to share files and work on similar projects.
  • I want to have more people work with me on projects, so I need to share files with others easily
What do I do?  Here are some options I found:

Google Drive

This is an excellent place for me to place files I want to share with others.  We can edit files simultaneously, which I have seen work magnificently in several situations.
I use this application for any collaborative documents (or spreadsheets, presentations, etc.) I need built.  Using Google Drive on my iPad has not been as convenient.  For my own notes, I use Evernote, where I can easily sort and manage my documents on many machines.

Dropbox

Dropbox has been a great application to sync my frequently used files between all my machines.  Once any of my machines gets only, Dropbox makes sure I have the current version of these files, and I don’t have to worry about “Did I make those changes here or there?”.  This works well for small files I need to be synced routinely, or when I’m working on a project and don’t want to use my USB stick to transfer files between my machines.
I will continue to use Dropbox to sync frequently accessed files that I keep around for a while.  This week I purchased a pro account to Dropbox.  I will store documents and working files here.  Soon, I will be able to access my files from anywhere, but it will take about 2 weeks to upload everything to their server.  Wow!

Git/GitHub/bitbucket

GitHub is a great source control location to store projects I am currently developing.  I currently have the Micro plan for $7/month which allows me to store 5 repositories.
I am often working on 10+ projects in a given month nowadays.  I need somewhere I can store several projects.  I would even like to store my past projects as well.  Then I could simply download the projects I am currently working on, and my versions would automatically be saved for me.  Also, I could allow others access to the same projects and allow Git to merge our separate changes together.

In writing this blog, I found a list of hosted Git repositories, and read a stackoverflow article which lead me to choose bitbucket, a free alternative to GitHub.  bitbucket charges per user rather than per repository, which I believe will be much more beneficial for my business.  GitHub’s price structure is excellent for a large team focused on a few projects, especially large open-source projects.

Follow-Up to Evaluating My Hardware Situation

So, I wrote a post almost a month ago to help me determine what hardware to buy for my office.  Well, now I have made my major purchases and am very pleased with the results.  Here is what is new for my business:

+16 GB RAM for my Desktop

OK, so maybe I don’t really need 8+16=24GB RAM at the moment, but I am really happy to have gotten rid of the “not enough memory” type warnings.  And when I begin doing more virtualization I will be prepared!

iPad (3rd-Generation)

This has been an excellent investment!  I don’t need to lug my giant backpack with my computer, power chord, mouse, Bible, and other reading material anymore.  I can simply grab my shoulder bag with the iPad and keyboard, and off I go.  I am very pleased with Evernote, too.  I can take notes during meetings, organize these notes, and later transfer all my TODOs to my project management software at the end of the day.
Having a tablet has been amazing.  I don’t know whether getting an iPad is necessarily better than an Android tablet, but I do feel cool…

MacBook Pro

This was at the bottom of my list of items to purchase since I don’t really need a Mac.  Yet I had a friend selling his old 2009 MacBook Pro with upgraded memory so he could purchase a Windows laptop.  I decided to go for it.  Timing-wise, this was great to have while my old laptop was out of commission and I had not yet received my new ThinkPad.
I have a lot to learn about running a Mac.  It is very different than my Windows machines.  I am looking forward to learning what settings and features the Mac has.  Maybe I’ll even find some scenarios where I will use a Mac exclusively, but for now I am leaving this machine for cross-platform and cross-browser website testing.

Lenovo ThinkPad T530

I am very excited for this machine!  The machine has an i7 processor, 8GB RAM, 100GB SSD, and a wide 15.6″ display.  And the cherry on top is a fingerprint reader so I can login without typing my ridiculously long password.  Also, the speakers are amazing (at least when compared to the puny sound coming out of my old ThinkPad SL500).

Conclusion

Now I know I have the equipment I need and then some.  I have already made use of all these purchases, and I know the investments are not going to waste.  Business is growing, and now I’m feeling even more prepared.  I still have other dreams for my office (two more large monitors to replace my three smaller monitors), but those are definitely not needed for now.  I’m doing pretty well with what I have for now.
Thank You Father God for Your provisions.  Give me wisdom and guidance to steward your provisions well and to make use of what you set before me.

Evaluating My Hardware Situation

My backpack has been dropped a couple too many times with my laptop in it.  Now the hinge to my laptop monitor is busted and may only have another month or two before another fall fully incapacitates my mobile computer.

What now?  Do I get a newer laptop?  A Macbook?  A tablet?  If a tablet, do I get an iPad?  Android?  Windows 7?  Wait for Windows 8?  Oh, the options are so numerous!

So, in order to answer this question, I decided to look at the bigger picture: What hardware to I need to run my business?  I’ve spent lots of time evaluating software, since that is what I focus on most, but not as much time on what hardware I need.  The rest of this blog post is my attempt to evaluate this question for my business.

Requirements

  1. Develop software using Microsoft products, e.g., Visual Studio, SQL Server Management Studio, etc.  I love the tools Microsoft has made available!
  2. Test operating systems and application configurations.  I would like to be able to test Windows 8, Windows 9 when it comes out, or different Linux systems.  Also, I need to test applications on Windows XP or Windows Vista.  Also, I build and test some websites on Linux servers.
  3. Use source control for version tracking and making application development accessible to multiple machines.  This will also be very useful when I hire other people to help me on projects.
  4. Remote desktop  to my main computer when travelling or meeting clients.
  5. Automatic backup of current documents and general files stored for different projects.  This is useful in case a hard drive fails or some other catastrophic event.
  6. Periodic backups of files.  I keep several backups in case I accidentally delete a file and want to get back to it a couple months later.  I have yet to actually need this since I started, but I have definitely had this issue one time or another in the past.
  7. Test websites in Mac browsers. &ngsp;I actually had an instance this year where there was a bug in a Mac browser, but the PC equivalent did not see the same bug until two weeks later.  This was very hard to troubleshoot on my PC!
  8. Develop applications while travelling or while with clients.  Also while away form my office, I will need to present development websites to clients and manage my projects using OnTime (add features, view burn-down charts, etc.)

Hardware Solutions

  1. My current desktop machine running Microsoft Windows works great (Intel i7, 8GB RAM, 2 x 120GB SSD, 2 x GeForce GTX 550 Ti, etc.)
  2. Virtualization would be a good solution here.  I will need a larger hard drive (1-2TB) to store the virtual machines and more memory.  On the software end, I see two main possibilities: Microsoft HyperV and VMWare Player.  I will likely use VMWare because it has been around longer (hopefully more mature), appears to allow more use of USB, CD burning, etc., and I have already a little more familiear with VMWare Player.
  3. GitHub is my likely candidate right now.  I enjoy using Git and look forward to new tools they will be coming out with for Windows.  Now I need to think through what size of plan will work best.
  4. I am having issues using RDC since I moved my office down town.  The step that seems to be an issue with the router given to us by our internet provider.  I may have to get another router so that I have more control of the firewall.  Hopefully that will smooth out this issue.
  5. Carbonite has been an excellent solution!
  6. I use a couple 1-2TB hard drives.  I store one away from my office  in case a catastrophic event occurs to destroy the backup in my office, and I rotate them regularly.
  7. I may actually get a Macbook.  I wonder if an iPad would be good enough, though.  Getting both may be most appropriate, since their browser capabilities are optimized differently.
  8. Again, I need a mobile machine running Microsoft Windows with the power to run software development applications.  I’m looking forward to see the Microsoft Surface come out with Windows 8!  Until then, I may need to find something different.  I am partial of Lenovo ThinkPads, which I have enjoyed using so far.

Shopping List

So, I think these are the items I will need to purchase next:
  • New laptop running Microsoft Windows
  • New router (for the main office)
  • Another large hard drive (for virtualization)
  • More memory (for virtualization)
  • A paid account to GitHub
  • Android tablet (for fun)
  • Used Macbook and/or iPad if found on a good deal
  • Maybe the Surface when it comes out

Opening SQL Server Compact Files

Today I am taking a look at some code someone else developed.  They used SQL Server Compact database files (.sdf), which I have read about but never personally used.  I went on a little journey to simply open the file and see what is inside.

Of course, my first assumption was, “Use SQL Server Management Studio.”  Alas, the file would not open in neither SSMS 2008R2 nor SSMS 2010.  After Googling for a little bit, I realized Visual Studio was the place to go.  All I needed to do was install the SQL Server Compact Toolbox:

  • Open Visual Studio 2010
  • Click Tools >> Extension Manager
  • Click Online Gallery and search for “SQL Server Compact”
  • Click “SQL Server Compact Toolbox” and Download
Then, to open the .sdf file, I had to
  • Go to the Server Explorer section
  • Add a new connection
  • Change the data source to Microsoft SQL Server Compact X.X (in my case 3.5 worked)
  • Find the database using “Browse” and test the connection
And there it was!  Now I can explore the data tables as I expected to.  Now to see how this program works…

Unit Testing while using Entity Framework

I have been recommended to use Entity Framework (EF) instead of LINQ to SQL while building .NET applications. So I pulled out some reference materials, learned the beginning concepts of EF, and started to build an application.

Then I started trying to figure out how to do Unit Testing and Test Driven Development (TDD) while using EF.  What I had read about EF showed me how to build a SQL Server database and then have Visual Studio build the entities for me. I had to design the entire database first and then leave all the classes tied to the database, both of which are incompatible with TDD and Unit Testing.

So I started my Google search, and these are the documents I found really helpful. In the end, Unit Testing and TDD are compatible with EF!  Here is where my journey took me:

TDD and ADO.NET Entity Framework
This late 2008 posting has several people sharing their concerns about using TDD with EF, which is where I was yesterday morning.

Walkthrough: POCO Template for the Entity Framework
Feature CTP Walkthrough: POCO Templates for the Entity Framework
These articles shows how to use the  ADO.NET C# POCO Entity Generator and the Microsoft ADO.NET Entity Framework Feature Community Technology Preview 3 assembly to separate a .edmx Entity Framework file into two groups of classes: the persistence ignorant entity classes (not connected to the database), and the data context class which talks with the database.

Feature CTP Walkthrough: Code Only for the Entity Framework (Updated)

This posting illustrates how to build an EF from code only, without using Visual Studio’s automated generators.  In this process, they were able to keep the persistence ignorant entity classes separate from the database context classes.  This technique required the Microsoft ADO.NET Entity Framework Feature Community Technology Preview 3 assembly.
These articles illustrate how to practically use TDD and EF together!
Now I feel prepared to move forward using Entity Framework together with Test Driven Development methodologies!

Current Reading Materials

My library is steadily growing. Here are some summaries of what I have been reading recently, in no particular order:

Pro C# 2010 and the .NET 4 Platform by Andrew Troelsen
I realized C# is my language of choice now, so I am giving myself a more formal education on the subject.  This book is amazingly written for me.  The author gives great explanations of the programming concepts, uses code in a very informative manner, and keeps moving.  For a book that contains 1700 pages, I am very much enjoying the read.

Integrating Agile Development in the Real World by Peter Schuh
I very much appreciate this introduction to agile development.  The book is very pragmatic, and there is plenty of realism shared about how to get started with agile methodologies, what are the likely pitfalls for businesses, and how/when to partially implement different practices.  I am now sold on the concept of agile development!  I realized while reading the book that I had started trying to use certain practices, and this book helped me understand how to actually make these plans work!

The Art of Unit Testing by Roy Osherove
Unit testing is the next major concept I want to learn and incorporate.  So far, this book seems to be pretty light reading, peppered with very useful concepts for me, the beginning unit tester.  I appreciate his simplicity and useful tips/wisdom.

Agile Principles, Patterns, and Practices in C# by Robert C Martin and Micah Martin
This is a phenomenal book.  Right now I am amazed by chapter 6: A Programming Episode!  This chapter is the dialog reenactment between two programmers while building a simple bowling scorecard program.  I got to actually see how they implemented Test Driven Development, what their thought processes were, how they handled refactoring, and why they approached decisions as they did.  I am excited to keep reading more!

Fire Someone Today by Bob Pritchett
This book has many great insights about running a business.  After building his own computer software business and learning from his mistakes, the author has shared much wisdom that he has learned and been taught.  The book is an easy and fun read, his writing style is very entertaining, and I have seen many great nuggets of wisdom to learn from as I grow my own technology business.

Here are a couple other resource books that I have also been using lately:

Pro ASP.NET 3.5 in C# 2008 by Matthew MacDonald
I LOVE this book!  This book has helped me understand ASP.NET in amazing ways!  I appreciate his ability to reach deep into concepts and bring a clear explanation of what is going on, why, and how to practically implement this technology.  I refer to this book often.

Programming Microsoft LINQ by Paolo Pialorsi and Marco Russo
This is an OK book.  I do not always find what I am looking for, but I do have it, and it at least gives me a good start on what I want to know about using LINQ.

Technologies Overview

Here I will describe some of the technologies I have been studying for the last couple years. Of course, this list is not exhaustive by any means.

I will start with the basics here, and hopefully write about some of the programming and database technologies I use soon.

Basic Website Technologies

HTML (Hypertext Markup Language)/XHTML (Extensible Hypertext Markup Language)
The main infrastructure of web technology is HTML. When I started building websites, I was amazed to find out that so much can be done in Notepad or any other text-editor! You can write all the HTML in a text document, change the file extension to .htm or .html and then open the file in a browser. It works!

There are plenty of WSYWIG (What You See Is What You Get) editors out there. I personally like to write my own HTML code rather than use WSYSWIG so that I have full control over the website design. When my website does not work in a certain browser, I have the control to tinker and eliminate problems. Also, when something does not work, I can take full responsibility rather than blame a piece of software because I trusted it to do what I wanted.

For the best place to get started learning HTML (as well as several other technologies), I highly recommend w3schools.com. They do a great job setting a solid foundation from which to build, and they have several resources and when you need to find out what a tag does, or what your options are.

As good practice, I used HTML strictly to set the structure of my website and add content. Separating presentation and content is very helpful as I will explain with CSS below.

CSS (Cascading Style Sheets)
Before CSS was created, all aspects of presentation (fonts, colors, sizes, alignments, and other formatting) were listed inside the HTML tags using attributes. When building a themed website, each page would have to be created in a similar way. If the background color were to be changed from red to blue, this would mean every single page would individually need to be edited.

CSS is glorious! Now HTML can be used to contain mostly the HTML tags and the content of the web pages. A single CSS file can contain all the formatting necessary for an entire website and each HTML page simply needs to have a link to the CSS file.

Alternatively, several style sheets may be used for a website. I like to have one style sheet describe positioning, sizes, and fonts and I have other style sheet describe different color schemes. This allows me to easily change “themes” for different parts of a website while maintaining a consistent infrastructure. As another option, different style sheets can be used for different types of browsers, such as a desktop/laptop, a mobile browser, or a printer.

Browsers
There are several browsers out there. The main ones I have installed on my machine are Chrome, FireFox (FF), Internet Explorer (IE), Opera, and Safari. I love using the Google Chrome. It is simple and fast, which I really enjoy.

I started using Opera a little when dinking around. I really like how fast and smooth it works. I was really impressed with my first impressions. Since I was already using Chrome, I did not see a strong advantage to switching, but I would have if I had not met Chrome first.

FireFox is pretty neat. FF is definitely better than IE. Their FireBug plugin is a definite must-have for any web designer or developer. FireBug lets you look at the different elements of the rendered webpage and see what tags and styling were used. This tool has helped me in many, many instances where I could not figure out why parts of my site looked the way they did.

Internet Explorer is burly and sluggish. I tend to only use it when I need to access SharePoint or other sites that were built to work with IE. Also I use it just to see what 40-50% of the people out there will see since IE is still pretty popular.

I have not worked with Safari much.

Resources
• www.w3schools.com

Next Time…
Later I hope to do some summaries of the more advanced technologies I have been using, such as client-side and server-side programming languages and databases, which I really enjoy working with.