Tuesday, October 29, 2013

Data Structures: Smart and Accessible

Trees, Lists, and Maps for Great Justice!


As a Computer Scientist, data structures are a daily meal. I won't get back into lunch time metaphors while detailing what they mean to me, but I will see about preparing some food for thought. We use data structures to organize and store data in formats that we can easily access, modify, set, and retrieve. The first thoughts that should go into deciding on whether to use an array, linked-list, queue, or hashmap should be on how the data is to be used. For LIFO/FIFO configurations, a simple stack or queue may suffice as they model similar concepts in real life situations. (FIFO is last in, first out, similar to a line at a bank, while LIFO models something closer to a stack of something where you remove the last one that was 'stacked.') Arrays and lists are great for accessing data in a linear manner, or by specifically calling particular items by their respective places. Trees and hashmaps are great for storing data that needs to be organized as it is added, while linked lists and array lists are great for expanding dynamically to fit large amounts of data. The data structure used can make or break the efficiency of the program, so it's best to take a close look at what structures are used in order to have an efficient running program that is easy to work with.


Some things to look at when trying to determine what to use:

  • size of the data (how many elements?)
  • does the data change?
  • does the list need to be in a particular order (sorted)
  • if so, are the elements added already partially, completely or un-sorted
  • how is the data meant to be accessed? (Linear iteration, specific element by place, groups of elements, etc...
As I've lightly touched on, deciding on a data structure is not always easy. As with all software development, pro-active time and effort spent in design is both necessary and well spent.

Bonus! More Snazz on Data Structures.(CLICK ME!)


Sunday, October 27, 2013

Hacking and other concerns...

Rule number one... click not on untrusted links.


Taken from an FBI site on Cyber-Protection is the following metaphor, likening hacking prevention to defensive driving practices:

  • "Don't drive in bad neighborhoods."
  • "If you don't lock your car, it's vulnerable; if you don't secure your computer, it's vulnerable."
  • "Reduce your vulnerability, and you reduce the threat."
It makes sense that the best solution to avoid being hacked is easily modeled by other practices. These might go in order of abstaining from using non-trusted sources, close any open ports you have, use secure, lengthy passwords with multiple cases, numbers and valid symbols, use a well configured software firewall in addition to a router when possible, keep Internet use on public networks simple and safe, avoid 'free' sites with a ton of advertising when plausible, click on trusted site links, block cookies and scripts with browser plugins such as AdBlocker and NoScript, run Spyware and Adware programs frequently, update drivers and files from trusted vendors, check email headers for evidence of spoofing (mimicked address or subject fields to imitate emails in order to get information or harm you,)

How to protect yourself from hackers Infographic

Bonus! Device hacking concerns, and solution seekers.(CLICK ME!)


Monday, October 14, 2013

Open Source: It's out there....

...because there's stuff to be shared.


Open source refers to something that is publicly accessible and modifiable. As such, open source software is available via the internet, and is typically developed in joint efforts via forums, version control, and production suites likewise open source. For instance, Open Office is an open source office suite with similar features to Microsoft's Office Suite. The difference is that due to being open source, it's use is free for all to use, develop, and distribute.

As a programmer, I like to be able to look under the proverbial hood of the software written by a collective of programmers to learn something, improve it, or just muse over the choices they've made. Open source arguably helps people save money, and aids in providing useful tools that aren't otherwise readily available. Sharing promotes knowledge, productivity, and developer rapport.

Below I've linked one of many hangouts of open source software, though there are many many many groups out there to check out.

SourceForge.net... because Open Source.(CLICK ME!)


MVC: (and B)... Model, View, Controller, Bananas.

Objects and MVC... stuff!


Software Engineers break down complex problems into manageable chunks of deliciousness. The problems are broken into components by pulling nouns and verbs from it's written form. The nouns are tasty things, which can be represented by objects. Verbs are made into actions by writing functions/methods that perform the desired logistics with/from savory objects. Often these nouns and verbs are aggregations/relationships of smaller nouns and verbs, thus are further broken down before being represented in code. It's like Jenga with cookies... or maybe I'm just hungry.

The relationships of objects are observed and implemented using similarities in an MVC pattern. There they are separated into the Model, View, and Controller. The Model represents data, the View is the interface which displays the Model, and other pertinent information, and the Controller handles coordinating between user input, and Model-View interactions.

MVC is a strong pattern as it segregates tasks to promote clarity and cohesion (grouping of 'similar' ideas.) I'll keep this short and sweet, like a caramel flan... and go eat lunch.


Tuesday, October 8, 2013

AGILE: It's what's for dinner.

Story time for developers!


Story time, say what? Developing anything can be complicated and messy as there are usually a lot of people involved. This requires coordination, communication, and moderation in order to maintain work flow. In response to these necessities, processes and structures have been developed in order to facilitate productivity and precision in development. One such process is AGILE. Put simply, AGILE breaks things down into user stories. The user is typically a generic stereotype of the client's target audience/user base. They tell a tale in simple, concrete formats about an action which may be traced through development, iteratively.

Stories in this case aren't whimsical fairy tales, but short sentences describing the desire to perform action(s). A basic example of this is, "As a [type of user], I want [some goal] so that [some reason]." I might say as an internet browsing user who comes across the site, "I want to create an account so that I may purchase an item." Simple, yes? These simple sentences describe use-cases that make up the entire application, and are worked on in tandem by priority. Each goal is defined by a projected time allotment called a Sprint, with small stand-up meetings called scrums. While these may sound simplistic, the idea is to come together and check up on progress, then get back to work as fast as possible, while maintaining focus. Larger meetings are planned based on scrum results as needed to tackle roadblocks.

What is scrum? Standing around and answering three basic questions. That's really all it is. Three answers to the questions, "What have you accomplished since we last met?", "What do you plan to accomplish before our next meeting?", and "Is anything hindering completion of your task(s)?" Short and sweet, then back to work! That's the bottom line of development... to produce!

More on AGILE (CLICK ME!)