Saturday, January 14, 2012

MIST 7530 - The Most Expensive Bullets

Hello again from CyberSpace!

It's a new semester, and that means time for more blog posts! The first installation will be about silver bullets and werewolves! Well, only metaphorical silver bullets and no werewolves...

The assignment was to read No Silver Bullet - Essence and Accident in Software Engineering by Frederick P. Brooks, Jr., which discusses the inherent difficulties in improving software programming, and the absence of 'silver bullets' that will advance programming by an order of magnitude, then come up with my own silver bullets, hypothetical as they may be. So without further ado, here is my top three list:

Silver bullet #1: Outcome Visualizer

Like a window into the future, this little gadget will accept a plan, detailed or otherwise, and show you that plan in action. You can see all the good your design creates, as well as any of the shortcomings. Using such a tool with help you to refine your designs, remove the most harmful pieces, and plan for the inevitable damage you will cause. TANSTAAFL; everything we do will surely have issues for the next project team to tackle.

Silver bullet #2: Specification Sniffer

Modern software programming environments, like Visual Studio 2010, have auto-complete functions which will assist the programmer by suggesting the correct function or property from the code. Intellisense, for example, will provide the most common option for the code being typed. Having a similar knowledge base for coming up with project specifications will assist in development. The system will go a step further by suggesting other similar actions, and even negative results associated with the recommended action. If a sniffer can help find common errors at design, the programming process becomes much simpler and more robust.

Silver bullet #3: Organic code

One of the largest issues in writing code is its static nature - the code you write can only do what it's told to do. There are techniques and styles to help reduce the issue, but the problem remains: code can't adapt on its own to changing demands and needs. If code could organically change or repair itself, we would actually need less system design, since systems would be able to grow and meet the current demands.

There you have it - three ways to help software develop as quickly as hardware. Even though none of them exist yet...

Saturday, December 10, 2011

MIST 7500 Final Exam - Blog Post 6

Hello for the last time from CyberSpace!

That's right, this is the last blog post that will be made for this class. ;_;

Don't worry, though, as we have a great topic to go out on - Web Services! Web Services date back to the beginning of the century, as highlighted in this article (check the date), and are basically machine-to-machine communication over the web.

From Web Services and Service-Oriented Architectures

This communication leads to Service Oriented Architecture, where a programs are built from the ground up consuming data from a service provided over the Internet which isn't maintained or controlled locally. In previous decades, all the code in a program had to be housed within that program. Using SOA, someone else's code can be working to provide data to your application, reducing development time and leading to new possibilities. Maybe the code offered is something you couldn't have developed on your own, but with this missing piece, your program can finally see the light of day.

From ReadWriteWeb Cloud.

These services are typically provided by the use of APIs. APIs are web based programs that are set to common standards to facilitate machine to machine communication, making it easy for anyone to use in their programs. You can see by the graphic that the number of APIs is increasing dramatically just in the past 5-6 years. There are several dedicated sites for hosting APIs, such as apigee and Mashery, where you can find a plethora of APIs to meet your programming needs.

With the increasing usage of APIs and decreased development time, one might believe this is all roses. There are downsides to APIs, and one of the most aggravating is downtime. When you rely on someone else's code, which you have no control over, it is frustrating when issues arise. I am personally experiencing this currently while trying to publish the second part of the Final Exam on Amazon Web Services. After several individual attempts with no luck at launching a website, I did some research to find that Amazon was having issues with the east-coast server (mine). As of the time of this writing it is still not corrected, and my grade in this class depends on it. I am glad that I do not have my business website on this server; frustration doesn't cover losing money.

That does it for my MIST 7500 blog. I hope you enjoyed reading as much as I enjoyed writing!

Friday, December 9, 2011

MIST 7500 Final Exam - Blog Post 4

Hello again from CyberSpace!

This post is dedicated to Applications on the Internet and the way that they are made. There has been a lot of movement in this arena over the last decade.

Before we look at the types of Internet Applications available, lets examine the history of the Internet.

I'm not going all the way back to the ARPANET, just 2004 when the term "Web 2.0" was coined. The idea of Web 2.0 was that the Internet is moving from a storefront system, where users are only allowed to look at static pages, to a more in-depth and interactive system for people to actually use. To perfectly illustrate this point, Facebook first launched in 2004.

Ever since then, the trend in web usage has moved to interactive applications, giving users greater control over what they access and more opportunities to contribute themselves. My favorite example of interactive is Google Maps, an interactive map that can be used for all sorts of things. I get the most mileage out of Google maps (pun intended) when trying to get directions, but Google has added traffic, satellite images, and even business names to their maps, making for a very rich user experience. Something you may not realize, however, is that Google Maps is available as an API. This allows maps to be placed into other websites without any coding work on the web-owner's part. See the example below:

View Larger Map

I didn't code that, nor create the map, nor plot anything to the map. I just copied and pasted some code, and I have a rich, interactive map available in my blog. There are several other fantastic web apps available from Google, like Google Docs and Google Sites, but this isn't a sales pitch. Other examples of web apps include streaming video sites like Hulu and social media sites like Facebook and Twitter. Several web apps are not totally web-based and fall into the category of a Client Application, which require some sort of program download that requires an Internet connection to be useful. Probably the best known example of this is Skype.

Hopefully the myriad of examples here demonstrate the vast options of Web-Based Applications. It hasn't been slowing down since 2004, and doesn't show any signs of stopping.

Up next, we'll discuss the data behind all those web applications.

MIST 7500 Final Exam - Blog Post 5

Hello again from CyberSpace!

How many Kilobytes did it take to post this page? Where is it stored? How long will it be available? How many more are just like it (I can think of 30+ similar posts) in the world? There is a lot to consider when thinking about the vast increase of technology usage in the world.

This blog post is dedicated to the data we create while living in a digital society. Data storage isn't anything new when you take a broader look at what data is and how it can be stored. Humans have stored data for thousands of years, including word of mouth and written records. Only recently have we begun to look at mechanical forms of data storage.


Check out the video below on digital data storage:

I thought it does a good job highlighting data storage mediums along with capacities. It can be hard to appreciate just how large a Terabyte is until you have a point of reference.

I'm sure we're all familiar with the more traditional disk-based data storage mediums, from hard-disks to floppy disks to CDs and DVDs. These all operate basically the same way - data is recorded on the disk, which is then spun across a reading device (an arm for hard-drives, a laser for CDs), which un-encodes the data for the computer. While there are several difference between the three mediums, they all work in a similar fashion.

The biggest changes in data storage options within the previous decade are Blu-Ray discs and Solid State memory. Blu-ray discs, a medium released in 2001 by by Sony, are the next generation of CDs and DVDs which offer upwards of 25 gigabytes of data storage. Typically used for High Definition movies, BD has firmly planted itself as the next-generation medium for high capacity storage.

The other option, Solid State memory, which moves away from the standard spin-and-read process of storing data. SSD uses microchips instead of moving parts, which increase the retrieval speed of the memory. These are very common, but in smaller sizes due to the cost of production, and most commonly found in Flash drives. Given the expense, however, they are slow to take over for the traditional hard-disks.

So, until we can write our memory on a grain of sand, we will keep spinning and micro-chipping our way into the past.

Look for the next and final installment in this exam assignment: Web Services

Thursday, December 8, 2011

MIST 7500 Final Exam - Blog Post 3

Hello again from CyberSpace!

This entry is dedicated to the 'other side' of the Internet - Web Servers! Here, all the fun stuff we access on a daily basis.


The basic idea behind a web server is that they process requests from clients. In my previous post, I discussed how the client gets onto the Internet to find these web servers. Once the request is received by the server, they can generate HTML code, search a database, or other useful function, then return the data to the client.  It sounds simple enough, but this can be a daunting task depending on the number of visitors to your site. For example, YouTube had 20 BILLION video views in October 2011! That isn't just generating some HTML, the web server has to find the selected video, stored in a database, then generate the "Related Videos" section, user comments...  It can be daunting work for web servers to handle all the traffic without crashing.

Web servers can be split into several different layers for processing requests. This adheres to the principal of Separation of Concerns. The split makes it easy to update and maintain the code, and typically consists of Presentation, Business, and Data layers. There are other methods, but most follow this pattern. The reason for the structure is that it is easily maintained, so much so that it is a part of Apache Web Servers and recommended in Java EE Coding Tutorial.

Up next, we will look at the types of applications hosted on these web servers.

Wednesday, December 7, 2011

MIST 7500 Final Exam - Blog Post 2

Hello again from CyberSpace!

In this, the second blog of a six part series, we will discuss Internet Infrastructure.

The best way for me to describe the structure of the Internet is through a video. Feel free to watch below, but it isn't as short as the awesome graphics imply.



In case you don't have 13 minutes to watch, I'll summarize the video. Whenever you make a request on the Internet, you send data to your router. The router manages lost data, decides the paths to follow between servers, manages protocols, and other important tasks required to move to your requested location. Simplifying it down to this level is about the same as saying "Oh, you're just hauling rocks in that wheelbarrow", but that is essentially how the process works. The simplicity is not intended to downplay the importance of the router. Without it, we wouldn't have the Internet as we know it.

Packets and Routers have been around since the beginning of the Internet. The scale has certainly increased, and continues to increase thanks to the number of Internet connected devices. The increase is so rapid, in fact, that we have assigned all available IPv4 addresses. Imagine trying to active a phone for the first time, only to find out that we are out of phone numbers. Same idea, but with the your new Desktop instead. In response, IPv6 is now available, which should handle many more devices than its predecessor.

Once you fire up the ol' browser (a Client Application), get an IP address, and hook up with a router, you can be surfing the 'net in no time flat. Next blog we will examine the final destination of those browsers and packets - Web Servers!

MIST 7500 Final Exam - Blog Post 1

Hello again from Cyberspace!

It's time for finals, and we're going to celebrate with marathon blog posts! In a series of 6 blog posts, I'm going to cover Client Applications, Internet Infrastructure, Web Servers, Applications, Data, and Services.


The doorway into any of these topics is Client Applications. These are the side of the internet most users are familiar with, as they are the part of the process users interact with directly. Rather than keeping all the necessary data on a local hard drive, these programs can interact with a server over the internet to display HTML code, gather data, or use a web service to produce the finished product.

A great example of a Client Application is the web browser you are using right now to read this blog. The browser itself doesn't contain anything particularly interesting on its own, but is able to translate HTML, JavaScript, and other code from servers out in the Internet to become much more than the humble program resting on your hard drive.

There are lots of options for Client Applications, and while the main player was web browsers five years ago, we are not as limited anymore. With the increasing number of web services and smartphones, there are more ways to consume data across the network that doesn't live in your device.

Probably the biggest change for Client Applications is the iPhone app. Despite being a device and not a Client Application, the processing power and limited storage, along with its almost-anywhere connection, the iPhone and its relatives rely on the internet to provide content. Apps on the phone may not hold anything substantial on the device itself, but can connect to the web or a web service to provide a great experience.

In a nutshell, the Client Application is moving to the forefront of computer usage. Stay tuned for the next entry in our series: Internet Infrastructure!

Wednesday, November 9, 2011

The 'colorful' Gary Vaynerchuk

Hello again from Cyberspace!

I watched Gary Vaynerchuk In a Seminal Performance at the 2011 Inc 500 Conference, as listed on Rizzo Tees blog. If you choose to watch for yourself, watch with caution as there is some coarse language used. This is not for the f-bomb squeamish. Or you can read this swear-word free synopsis!

Gary is a very energetic character, and is completely sold on the affect that social media is having on the business world. After a little history of Mr. Vaynerchuk's business history, he speaks to his vision of the future of marketing. There were a few interesting crowd polls that he used, for example, most of the people in the crowd use Digital Video Recorders to record all their TV and skip every commercial, or how, if 1 in 4 people are texting while driving, how can they see the road, much less the billboards they are passing? I was did several of the things he suggested (but no texting and driving!).

The point he is making is that we will be consuming our advertisement through word of mouth thanks to social media. Most people will buy things their friends recommend over any other form of marketing. The future of marketing is in the context where the ad is consumed more than the content. It is especially difficult today to capture peoples attention and break through the 'noise', so companies must move with social media to capture customers.

There was a lot of interesting factoids, perspectives, and plenty of foul language. It is obvious that Mr. Vaynerchuk is passionate about business. I enjoyed the video, but I have my suspicions that this will help many companies change their marketing strategy. What Mr. Vaynerchuk described was more of an attitude than actionable items. I had a hard time seeing any actionable items in his speech, but it was very entertaining none the less.

Are Your Web Services well RESTed?

Hello again from Cyberspace!

This post is going to answer several questions regarding web services as posted by my professor, Dr. Craig Piercy.
What is a Web Service according to the W3C?
A Web Service, as defined by the W3C, is any system of software designed to facilitate machine-to-machine interaction via a network with an interface is in a machine-readable format.
What is a "Big Web" service? Describe in detail including important components/protocols and examples of use.
A "Big Web" service is one that requires XML and Web Services Description Language (WSDL). The XML, in SOAP format, is then read automatically by other machines. These instructions dictate how the machines will communicate, as well as other nonfunctional issues like transactions, security, addressing, trust, and coordination. Amazon uses Big Web Services in some of their Could services.
 
What is a "RESTful" service? Describe in detail including important components/protocols and examples of use.
REST stands for Representational State Transfer, and is becoming popular as an alternative to other methods of web based services due to its simplicity of design, according to IBM Technical Topics. The popularity is due to the lack of complexity from the Big Web Services, and are useful for ad hoc integration scenarios. Some specific attributes of RESTful web services are
Using HTTP methods explicitly
REST methods utilize HTTP methods according to the proper format and with a high level of detail. While there may be easier methods of using the HTTP methods, REST requires that they be used completely and properly.
Is Stateless
A RESTful service includes all necessary data in the HTTP request, which means that there is no additional translation required.
A real-world example of a RESTful Web Service is Sun Microsystem's Cloud,

Big Web vs. RESTful. Compare and contrast advantages/disadvantages of the competing protocols. When is one better to use than the other?

This is a much more subjective issue. Big Web services require more setup and the systems must be compatible, but offer a highly defined structure for system-to-system communication. RESTful services, on the other hand, excel at smaller or ad hoc interactions, as mentioned. The current opinion across the web seems to be more in favor of RESTful services due to their scalability and statelessness, but I'm sure that there will always be a place for the larger, structured Web Services.

Saturday, November 5, 2011

Lecture from Guest Speaker Chuck Hudson

Hello again from Cyberspace!

This post will cover a lecture from guest speaker Chuck Hudson. Mr. Hudson is currently Director of Applications at Control4, a member at PayPal Developer Council, co-author of HTML5 Developer's Cookbook at Pearson Education, co-founder at Control UI, LLC, and part time instructor at the University of Georgia, according to his Linkedin page.

The topic of the lecture was Mobile Development, and had a thorough explanations of key topics for mobile app development including:
  • Monetary Models
  • Mobile Design
  • Technical Challenges
  • Developer Accounts/Resources
  • Android Specific Challenges
  • iOS Development
  • Planning App Release
  • Localization
  • Beta Testing
  • Apple Distribution
  • Android Distribution
  • Measuring your success
  • Supporting your Apps
Mr. Hudson was very detailed in his explanations, and gave good advice, specifically about what an app should do and how to chart his flow. His recommendation is to make an app do 1 thing really well for the initial release, then add functionality in future releases. He also covered some localization topics, and pointed out a pitfall that I fall for - if you add the functionality in your first release, you have to support it for every subsequent release. I often find myself getting caught up in the 'cool' factor of a feature, then I have to provide support for that feature later when I don't have the time or resources.

In addition to the topics above, Mr. Hudson demonstrated some 'under-the-hood' code for both Android and iPhone apps via desktop sharing. We saw the code behind the apps, the setup of the files, screenshots, and the publishing screens to a limited extent.

Overall, I was very impressed with the scope of the topics, and the knowledge of Mr. Hudson was evident throughout the lesson.