Sunday, October 27, 2013

The formal or informal meanings of "hacking"

Hacking can be described as something that is very negative for the cyber world. When we hear about hacking we think of money, software, source code, credit card, or other very personal information being stolen or used for some kind of malicious intent.

Formally, the term "hack" usually implies that one person, or perhaps several people, is responsible for intruding upon a closed system in order to take data or control. However, taking control of a system should not only be associated with malicious intent. For instance, devices such as smartphones can be hacked, though usually when this happens it is not for malevolent purposes. Rather, the goal is to unlock the system for more extensibility. Unfortunately, this tends to be a lesser-known benefit of hacking.

What do I mean by this? Well, imagine the iPhone. If you hack the system you can install special plug-ins that allow you to do certain things that wouldn't normally be possible. One such example called biteSMS replaces the default application responsible for text messaging. What features does it add? One in particular allows you to respond to any incoming text message from wherever you are in the operating system. This means when you turn on your phone's screen, it might show a new text message that you've received recently. You can then choose to reply from this screen rather than going through options, unlocking the OS itself, finding the messaging app and then typing your reply there. It sounds very simple and even unnecessary, but once you've used it a few times you'll realize quite how useful it really is. There are plenty of other systems that can be hacked for similar applications. The best way to describe this is "freeing" your device/system from restrictions.

via iDownload Blog
Regardless, hacking doesn't always need to be labeled as a malicious activity as it can be used as an educational tool as well.

*http://courses.cs.vt.edu/cs3604/lib/Hacking/MacMillan.Hacking.html

Sunday, October 13, 2013

The Ultimate Resource and Collaboration Tools

There are two very special benefits of using version control and revision control systems. One of the most prevalent principles when working with files on a computer is rather simple: "Don't forget to hit 'Save' every few minutes or you risk losing everything you've done so far!"


Version control as well as other ways to keep track of software and its respective source code have become an important of a programmer's daily workflow. Systems like Git, Mercurial, Apache Subversion, and others all have a very similar goal: to allow a person to backup their work as many times as necessary while working. In fact, these are actually a double-sided coin so to speak. The main purpose of such tools is to keep work and data secure. An alternative purpose lies in how they can be used to publish code. The latter is known as "open-sourcing." To make a set of source code public means just about anybody with access to the Internet can access and use that code in some way.

There are various licenses that dictate how the source can be used. Usually, open-sourcing code allows for debugging or extending the product by people from all types of backgrounds. For instance, one of the most popular and current examples of this type of product would be reddit.com. Reddit is an extremely large forum online devoted to a nearly limitless array of topics. Last month, the number of unique visitors to Reddit was roughly 81,431,088*. Github.com is an online repository where the Reddit source code is hosted publicly. Users of Github can, for example, explore a page devoted to showing a list of bugs (organized by priority). They may find one that interests them and then proceed to debug it. Once that has been done, they can resubmit the related code with either a fix or theory of what might be causing the problem. As Reddit consists of such a large community that includes a sizable number of programmers, the opportunity to help out here and there adds to the experience of using the website.


Reddit is just one example of many. Github tends to be one of the most popular sites for open source code as it is based on the Git versioning system, which is quite secure**. The Git platform is a distributed revision control and source code management that makes working on new features simple and protecting progress.

Another immense advantage of open-sourcing code is that the average person can use what they find for inspiration and as a resource in different ways (permitting the respective project's license is appropriate). When I write code for iOS or OS X - among other platforms - I look online for examples of how other developers have accomplished certain tasks. The best analogy to explain this is: "why reinvent the wheel?" Not only that but sometimes entire libraries or frameworks of code can be included in a project as long as the original authors are cited.

Yet I think the best overall value of using open-sourced code is the idea that practically any person with sufficient skills can interpret it. Relating back to Reddit earlier, if you're a frequent visitor of the site and really appreciate a certain feature, you can actually dive into the code and learn how it was built. Open-source presents a level of education unparalleled in just about any other area.


*http://www.reddit.com/about/
**http://git-scm.com/about/info-assurance

Sunday, October 6, 2013

AGILE: Is fast efficient?

In this rapidly changing world, I have found that production of some kind of object or service needs to be incredibly fast-paced in order to be moderately to extremely well-received. One answer to this complex situation came in the form of AGILE.



AGILE was devised as a methodology for completing software products according to a strict schedule. Through Scrums, typically a week or some other defined set of time, engineers and product managers can quickly push iterations of their product. This can be incredibly helpful. Small goals to keep to while working seem to increase productivity. Successes can result almost immediately in some cases, which will boost self-esteem of the workers.

While AGILE seems to have a broad appeal, and for good reason as it can spike a team's level of success, it does have its cons. Product development cycles do not necessarily work very well when a strict deadline has been given. Certain features will almost always take a good deal longer to build. One can take a few hours, another can take a day, and perhaps a more important one can take anywhere from two weeks to two months.

For these reasons, AGILE can be both helpful and detrimental. If a team's objective is to push out a product in some form as soon as possible, then AGILE's methodology can work wonders. The cycle will move fast, allowing for the software to be grown sort of like a tree that begins small and increases in girth. However, in some cases it would be much better to have a product finalized to an extent before release. If that is the requirement, then AGILE would probably be the wrong way to develop it.

Above all, the AGILE system is definitely situational. Though you can keep in mind how adaptable it is as well. It is really not meant to have one solid process that cannot be changed.