Thursday, May 15, 2014

Software Tools



The term "software tools" is a pretty vague and broad term that can apply to many things. Software tools can be the actual programs we use to help us achieve a task, parts of other programs we can use to write new code, or tools to help organize our thoughts and processes when programming.


Tools are important for each of those examples in computer science. Tools like the Agile programming method and Scrums are used to emphasizes empirical feedback, team self management, and build properly tested product increments within short iterations. These kinds of tools help keep a software development team focused and working on the important tasks at hand.


A recent post of mine, found here, details the software tool Git and Version Control Systems. These types of tools really help in maintaining code and are crucial in the development process.


My favorite types of tools to use are API's, or Application Programming Interfaces. API's are tools written by other people or companies that can be used to extend the usefulness of your own applications. API's can unlock new and exciting aspects of a program you may be working on, making it easier for you to build so you don't have to rewrite something that someone else may have already made.

References:
http://agilemethodology.org
http://en.wikipedia.org/wiki/Application_programming_interface

Wednesday, May 14, 2014

Version Control

Having version control experience  has become a majorly important part of developing software in the current job market.  Version control is a method of recording changes to a single file or sets of files over time.  Being able to record the changes enables developers to write code and create iterative changes without the fear of losing the previous working copy of the code.  It makes it easy for large teams to work on the same code by 'checking it out' and 'checking it in' without the fear of overwriting someone else's changes.  Because of this, several people can be working on the same code and then merge their changes back into the Master copy of the file.


One of the most popular version control systems is called Git.  Git is a type of version control called Distributed Version Control System, or DVCS.  What this means is that the clients who are working on some piece of code done just check out the latest snapshot of the files, the fully mirrors the entire working repository.  Essentially, every checkout of the code is a full backup of all the data.



Git allows you to do many things to keep projects and files organized.  You can revert files or entire projects back to previous states,  review changes made over time, see who last modified something or even recover lost files.  Software companies are looking for people with experience in version control because almost all companies creating software are using them.  Its an incredibly valuable tool to keep track of code and making changes.

References:
- Getting Started with Git.  http://git-scm.com/book/en/Getting-Started-About-Version-Control

Wednesday, April 30, 2014

Beta Testing

Beta testing is the last stage in development testing of a software application before it is ready for final release.  Beta testing usually takes place on the almost final version of the software and is used by the developers to find bugs that everyday users may encounter that they had not accounted for.  Many development companies will put out an open call to their existing user base or people who have shown interest in the product to be beta testers for them.


Public beta testing has become very popular in the video game industry lately.  Developers are able to leverage it in several ways.  Not only do they get real users helping to find bugs and break their games, but they also use it as a way to generate buzz and even funding for their games.  A lot of developers are selling early access to their games, sometimes at a discounted price, to be involved in the beta testing of the game.  

Beta testing is extremely important, especially for applications that use the internet for connection or syncing.  Sometimes, even the most well designed programs can crash and burn under the weight of a large amount of users at one time.  That kind of unforeseen load can cause things to come to a screeching halt pretty quickly.  Beta testing allows the developers to gradually increase the amount of users they have active at one time to get an understanding of how well their server software can handle large amounts of data requests.  

References:
What is Beta-Testing. http://www.kaspersky.com/downloads/beta_testing

Friday, April 18, 2014

Usability Testing


Usability testing is a subject that often goes over looked by computer science students.  Its very easy for a developer, who is so focused on how the back end of a program works, to forget that people are actually going to need to interact with the application or software they are working on.  Even the most impressive or useful algorithm will fall into obscurity if the applications design is not functional and easy to use by the end user.   This is where usability testing really shines.

Usability testing is a scientific approach to understanding how humans interact with software.  Its how developers and computer scientists build an understanding of their users to see not only what they want and need, but what is valuable to them and their abilities and limitations.  Crafting a good user experience is finding a balance between what is useful to the user and what is valuable.  Peter Morville demonstrates this balance with what he calls the "User Experience Honeycomb".



Morville uses his honeycomb to demonstrate the most important parts of a good user experience.  For information to valuable, it must also be usable; useful; desirable; accessible; findable and credible.

Usability testing is most effectively accomplished by building quick prototypes of the interface and studying how users interact with it.  These prototypes can be as simple as drawing interface mock-ups on paper and having users simply point to items they like or dislike.  Simple paper drawings are a easy and cheap way to quickly discover what works and what really doesn't work.  More advanced prototypes can be made in later iterations to get closer to what a real application is going to look like and behave like.  There are many companies like proto.io  that specialize in web apps that make it easy to create robust user interface prototypes in a very short amount of time.  Tools like these make it very easy for developers to get through many rounds of usability testing to develop a useful and meaningful user experience.

References:
The User Experience Honeycomb by Peter Morville
Proto.io Wireframes with Actions.

Tuesday, April 1, 2014

Blogs

A Blog is a web site used for personal discussions or as an informational site for other people to read.  The term "Blog" was coined as being short for "Web Log".  There have been many social blog sites created that help people develop and maintain their personal blog as well as discover and connect to other blogs that may be interesting to them.  Sites such as Tumblr, Blogger, Wordpress, and even Facebook to name a few.  Blogs are a great tool for communicating and sharing interests and for finding other people who have the same interests.  Some blog sites have become major social networks for people to find and create new social circles based on particular interests.  Users on these sites can comment and share their thoughts with the original poster or even 'reblog', meaning to share the original content with their own followers.
Creating blogs can be helpful to a persons career as well.  Many companies that are hiring technical people like to see a potential candidate has a technical blog.  This shows that the candidate has a personal interest in what they are talking about that extends outside of just their job functions.  It shows an interest in growing and learning new things, as well as participation in a technical community.  Blogs are a great way to showcase personal projects and to get others interested in the work you are doing.
The Nielsen Company estimates that, as of 2011, there are over 156 million blogs in existence and that number is continuously rising.  This shows that Blogs as a platform has an incredible potential to reach millions of people.


References:
The Neilsen Company- Millions More Bloggers. http://www.nielsen.com/us/en/newswire/2012/buzz-in-the-blogosphere-millions-more-bloggers-and-blog-readers.html

Saturday, March 15, 2014

QR Codes

QR Codes are a modern way of passing and accessing information quickly.  QR stands for 'Quick Response', and can be quickly read from a QR code scanner such as a cell phone.  They are a robust form of data that holds more information than a standard bar code.  QR codes can store web addresses,  product details, coupons, geo-coordinates, and much more.  Part of the reason they are becoming so widely used is because so many people now have access to a QR Code reader on their phone.  Using just an app on a modern smart phone, you can take a picture of the QR Code and instantly have access to the information within.

QR Codes are also incredibly stable.  They can still be read with up to 30% of the code being obscured or damaged.  That is an impressive improvement to standard bar codes that are useless if a little piece of it is unreadable.  

QR Codes are also very easy to produce.  There are many websites, such as www.qrstuff.com,  that you can go to and have one auto generated for you.  Initially, they were developed for industrial purposed for tracking parts because it allowed for high speed data scanning but they can easily be used for business cards or self promotion and are frequently used in advertisements and coupons.  

References:
QRCodes. www.qrstuff.com

Cyber Security

Cyber security is a hot button issue in our modern technological society.  As the amount of personal information people store and share in cloud based sites and digital marketplaces increases, so does the risk of having that information stolen.  Not only are individuals storing information, but large companies and retailers are storing vast amounts of data about their customers in massive data centers.  These massive data centers have become a major target for hackers looking for personal information.  A recent example of this was the major data breach at the big box retailer, Target.  Targets data center that stores customers private information and credit card numbers was hacked into and all that info was stolen.  This lead to a major backlash from not only Target's customers who were exposed to credit and identity theft, but also all the way up to Congress who are now trying to understand the modern cyber threats and pass legislation to prevent it.

Who are the hackers and why do they want the data?  There are several reasons why a hacker would want to gain access to this type of data.  One reason is they want your credit card information so they can make purchases using your accounts.  Another reason is because they want to sell your credit card information to other people who will use it for those same reasons.  Also, this data can be sold to other companies who are looking for data about your previous purchases for the purpose of future marketing.

As our lifestyles are becoming more and more digital, it becomes increasingly important to understand and develop Cyber Security.  The biggest challenge in cyber security is that it is a reactive type of security.  No matter what type of system that is developed to keep people out, there could always someone who finds a way.  The best way to deal with that is to be very quick to react and adapt to new forms of intrusion.

References:
US Department of Homeland Security. http://www.dhs.gov/cybersecurity-overview

Saturday, March 1, 2014

Open Source

There is a lot of really awesome stuff happening in the world of Open Source software but there is also a bit of confusion about it as well.  A lot of people hear the term 'open source' and equate that with 'free' software.  That is actually not the case, and some people, like Richard Stallman, are going to great lengths to educate people on that exact topic.  While a lot of open source software can be free to the end user, that is not what the definition of open source means.  According to the Open Source Initiative, "Open Source software is software that can be freely used, changed, and shared (in modified or unmodified form) by anyone".  What its really saying is that the code can be used by anybody to create anything, and as long as they give the credit and license, they can do what they want with it.  Open source software can be used in software that is not for free.



Whats so interesting about open source software to me is that there is such a rich community of people working on just about anything, with no expectation or desire for monetary gain.  This is really unique in any type of production of a product.  With so many people freely working and sharing things they have worked on, there is a real benefit to improvement and security.  Its like having hundreds of great minds coming together to share their ideas and expertise.

Another cool thing about working on open source software is that employers love it in potential employees.  They like to see programmers giving back to the community and not only does it show that you have valuable skills, but also that you are passionate about programming.  I see it on job postings all the time.  Employers asking for a link to your personal Github or examples of your open source projects to include on your Resume.   Not only could it be good for your career, but its also a great learning experience and helps you grow as a programmer.  I have always felt that in all aspects of life, if you want to get better at something you like, find people who are better than you and hang out with them.  There is no better learning experience.

References:
The Open Source Initiative. http://opensource.org

Sunday, February 23, 2014

Linkedin Summary

As a Software Tools Developer , my roll is to build software and automation for data collection.  I focus on data collection tools on Mac  OSX and iOS for Thermal engineering and Product Design.  

My passions include using software to solve problems, test automation and data collection, software tool design and programming, and web design and development.

In my roll, I have designed and built a UI automation suite for data collection of thermal characteristics of iOS devices. My automation suite and tools are currently being used by cross functional teams, both in Cupertino and on the production line in China.  I have designed and built a web based vacation request service for a team of 10 people, using HTML, CSS, Javascript and MySQL databases as well as a web based device tracking system for a team of 20 people, using HTML, CSS, Javascript and MySQL databases.


If you are looking for a software tools developer with a passion for automation and data collection and analysis, please send me an email and lets talk!