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!)


Wednesday, September 25, 2013

LinkedIn and Branding: The Company of Yourself

So many people, so many skills.


Job hunting, networking, and managing a professional image are all part of pro-active diligence that all students should take advantage of. That said, every individual should manage a professional image online, where everything is tracked, cached, or viewed in a persistent manner. Just as it's easy to mar your credit history, having unethical, illegal, or immature web posts or other content may end up haunting you down the line. There are exceptions, yet in the scope of Software Engineering, competence, maturity, logical clarity, and responsibility are favored. One way to mitigate and allow yourself to breathe a bit and 'be yourself' without worrying about scarring professionalism is to segregate your professional image from your private one. Differentiating emails, nicknames, and group on networking sites help make a statement whether the content you create is work related, or on your own time. Facebook, Twitter, Reddit, and myriad other websites are places where people communicate and share with each other. These and others will be a good place to begin separating professional from casual accounts.

LinkedIn is a place to take a stand and promote yourself in a professional manner. It is recommended you only include professional assets and skills, other than supportive secondary skills which inspire or help to show who you are in a positive light for employers. Being transparent and simple are keys to unlock opportunities. Many people 'try too hard' and add in a bunch of people that aren't really active or supportive to their careers on LinkedIn. Use less to say more, and go with quality over quantity. There are many important things to consider when adding a profile besides skills and active people you've networked with, however. Job history, or timelines are also extremely important. What do you do in your spare time? Does it say that you are passionate about your chosen field? Are you committed and serious? It matters!

zombies need not apply, link to smart skills critiquing, image copyright www.humanworkplace.com

See what I did there? ;)

Soooo... click the image link above and check out some ways to present yourself without sounding like a zombie. It may just help you look at yourself in a different light! Then take a look below and get some insight into how endorsements can work for you.. or against you. It may not be as straightforward and intuitive as it seems. You are your own company, brand yourself as such, and shine.

LinkedIn Endorsements, no signal, lots of noise! (CLICK ME!)


Thursday, September 12, 2013

QR Codes: Quick and Easy

So! That's what those are called?


Barcodes have been a useful invention for quickly referencing information. At the library, checkout counter, or warehouse, we've been scanning things in, and out for longer than many students have been alive. In the last decade, the codes have been getting increasingly complex. They hold more information in as much room, and are written using a hard-coded error detection algorithm so that even partially obscured labels may function.

facebook headquarters QR Code on the roof image.

Facebook's 42' QR Code scans from satellite footage.

Many companies and individuals are taking advantage of QR Codes to provide immediate access to deals, websites, and menus. Suffice to say, they're popular for ease of use, and little to no cost. On the top left of my blog, for instance you'll see that my QR Code is more than just a black and white label. I took advantage of the fact you can read partially obscured codes in order to brand it with my name, and show off a bit of my design skills. The fact you can promote your brand in the same space you provide a label is huge. Simplicity wins, and on a business card, real-estate (card space) counts!

QR Codes are getting more and more popular as more people own iPhones and Androids, but the knowledge of their use is somewhat low still. Japan has the highest saturation of QR Code use, promoting a trend that the UK, US, and Canada are picking up on. So keep your eyes out for them in magazines, coffee shops, and other businesses, scan it with a free app like QuickMark, and get fast access to some deals, data, or details.

Some innovative QR Code uses (CLICK ME!)