In the dark ages before the rise of the Internet, application security had once been a comparatively minor concern in software development lifecycle. Most programs were completely internal to a company, and unavailable to public access through telephone or modem. A large portion of applications had no network connectivity whatsoever, and resided solely inside a user’s PC. In this environment, junior developers could rarely cause serious damage to the IT infrastructure. While a foolish mistake could delete an important table or database, these errors were relatively easy to fix through a restore operation, and security permissions helped make this a rare occurrence.
Continue reading
Software Design Patterns in C#
Yet another series of design patterns in C#? Has the world not seen enough dry and thoughtless regurgitations of the GoF? Yes and no.
What started out as a thoughtful attempt to categorize good principles of software design by a roving band of computer scientists named the “Gang of Four” has turned into the poster child of the Bloated Code movement. Vexilla Regis prodeunt Inferni. Decorators and Observer patterns for all!
Continue reading
Multilingual Web Architecture
When developing websites for global brands, a key component of a site’s success is its multilingual and region-based capabilities. Global sites need to appeal to audiences across national and cultural borders, targeting their brand and marketing approach to the needs and personalities of the local audience.
Continue reading
Simply Integrating Open Source Packages
Ah, the tempting lure of open source packages. The El Dorado of software development, open source packages promise all of the advanced features users crave with absolutely none of the cost. The software is often even free to modify to suit any need – all we need is for that obstinate developer to simply tweak it to our application – what is their issue against using open source software anyway?
Continue reading
Networking Fundamentals Part 3 – The TCP Protocol
If the IP protocol is considered the backbone of the Internet, TCP is heart and veins that bring it to life. As the primary protocol used by most of the Internet, from web browsing, to database access, to many multimedia applications, TCP lets computers talk to each other, and makes sure that the message gets through reliably.
Continue reading
Meta Languages vs Programming Languages
Programming is one of the few practices where, in addition to using tools to accomplish an end, individuals can also use tools to create more tools. Through re-usable functions, libraries, and development frameworks, developers are able to simplify both present and future development, reducing unnecessary overhead and streamlining maintenance and updates.
Continue reading
Refactoring Complicated, Bad Code
One of the most difficult challenges in programming is fixing someone else’s bad code. This situation can often happen when taking over maintenance of existing software from a different company with inexperienced developers. While writing good code by itself is difficult enough, fixing previously written bad code requires first wading through the code in every execution scenario, and then writing replacement code that accomplishes the same results. Although this process often takes several times as long as initially writing a good version of the program, refactoring a key function or form can reap significant return on investment throughout the course of system support.
Continue reading
The Intangibility of Great System Design
With new and hot technologies skyrocketing across the software industry on a regular basis, most of the attention in system development is turned towards tools, development methods, and user experience, as opposed to the software architecture itself. The system architecture, consisting of the software requirements and specifications, database design, and high-level system organization, defines the cohesive vision that guides construction of the software. More than any other factor, the system architecture will define the reliability, maintainability, flexibility, and scalability of an application.
Continue reading
Review: A Model-Based Approach for Crawling Rich Internet Applications
Researchers at the University of Ottawa and IBM have developed a new search engine crawler for the Deep Web of AJAX applications. Indexing most modern AJAX web apps can be a challenge, since the state of the page is based on much more than just the URL – it is also based on the server state, client JavaScript state, cookies, and the DOM, or document object model that defines the page’s HTML.
Continue reading
Searching a MySQL Database for Text
When maintaining applications built with MySQL, it can sometimes be necessary to search an entire database for a text string. For instance, if a website’s domain name has changed and links in the site’s dynamic content had been hard-coded with the full URL, it can be useful to search the entire database for all occurrences of that particular string.
Continue reading