Tuesday, May 7, 2013

Business Strategies in Application Development

Technology has evolved from a niche field to integral to the business process, from the corporate data center to the desktop programmer at a small business. Software development tools such as Open Source frameworks and Microsoft's Visual Studio have brought technology to a level that anyone with interest can deploy sophisticated applications. There is still much work ahead necessary to bring it all together to create an efficient streamlined business environment which also ties into the economy overall.

Efficiency Strategies
Agile programming practices have been hyped recently, and that might not be solely due to their effectiveness, but their relevance to business development. Agile programming is similar to the Lean Six Sigma process that identifies problems in value stream and works to continuously improve, sharpen, production processes.

Development Strategies
It was not long ago that Object Oriented programming was considered new, but now it is essential in any programming environment that seriously wants to extend the life and effectiveness of its applications.  The alternative, Procedural programming, is the path of least resistance when a developer wants to just dive in and make a program work.  But that leads to problems down the line when linear logic needs to be resolved.  The linear logic required for procedural programming will almost always change in years ahead, and that might require a system to be completely rewritten whereas OOP systems consist of extensible objects which can be easily modified and extended.

Bringing it All Together
It is clear that with each passing year we will see new computers, portable devices, phones, and technology we have not even seen that depend on software.  Software does not write itself (yet); rather, it depends on professionals to realize the fundamental philosophies of both programming architecture and business concepts.  Design concepts in programming have reached a state where the beauty in logic of OOP related concepts supersede the language itself, allowing programming aptitude to retain relevance beyond the life of any one language.

The information economy is a serious turning point and with it businesses are required to understand how finances flow through divergent creative systems and their related products that people are willing to buy.  The same concepts used to create business applications are relevant to business, and as time goes on the architects if the systems used to create software will, by virtue of their job requirements, tie together even more, the development process with business needs.

Wednesday, March 20, 2013

Boxy - the really big JavaScript solution to Responsive Design

In my experience, HTML and CSS makes centering DIVs overly complicated if you want them to reposition themselves dynamically in a fluid layout as the user re-sizes the web browser.  As far as I know, there is no way to do this without using the PRE tag instead of DIVs, which inposes some limitation on what you can do.  So finally I broke down and used a lengthy scripting solution, and I thought it worked pretty well, so I'm sharing it with anyone who might have the same dilemma.

This code, when pasted at the bottom of your page, will genter all divs that are inside a parent DIV with an ID "main".


function distributeDivs() {
    var minMargin = 5;
    var i = 0;
    var ww = $("#main").width();
    var startingAt = 0;
    var boxArray = new Array();
    $("#main >div").each(function () {
        boxArray[i++] = $(this);
    });
    while (startingAt < boxArray.length) startingAt = addToBoxArray(startingAt);
    for (i = 0; i < boxArray.length; i++) $(boxArray[i]).css("margin", $(boxArray[i]).css("margin"));
    function addToBoxArray(startingAt) {
        var boxesThisRow = 0;
        var totalBoxWidth = 0;
        var temp = ww;
        var boxWidth;
        for (i = startingAt; i < boxArray.length; i++) {
            boxWidth = $(boxArray[i]).width() + (minMargin * 2);
            if (temp > boxWidth) {
                boxesThisRow++;
                totalBoxWidth += $(boxArray[i]).width();
                temp = temp - boxWidth;
            } else break;
        }
        var margin = Math.floor((ww - totalBoxWidth) / (boxesThisRow * 2));
        for (i = startingAt; i < (startingAt + boxesThisRow); i++) {
            $(boxArray[i]).css("marginLeft", margin + "px");
            $(boxArray[i]).css("marginRight", margin + "px");
        }
        return startingAt + boxesThisRow;
    }
}
distributeDivs();
$(window).resize(distributeDivs);


It's pretty lengthy code, so you can go here to see it in action.


Friday, February 10, 2012

Tuesday, January 4, 2011

Wednesday, March 3, 2010

Web Applications Portfolio

Here is some of the work I've performed lately.  Most of these sites are my own personal unpaid spare-time work. As you would expect, there are some rough edges on the sites I've been doing individually, but I hope to get all the rough edges smoothed out over time.




Buy Woodstock - eCommerce website
After I moved to Woodstock, I thought it was such a beautiful place, that I had to create a website dedicated to it.  Since I'm usually business minded, my thought was to create a place to go for people to buy and sell local.




Like Me In This - social site
This is my latest site, and it's not yet at 100%, but it's online now for filling in content.  I'm hoping to start eliciting traffic for it someday, but for now it's sort of in the shadows where few will ever bother noticing it.




Web Upload - Printing Solutions
This one was for my last employer, and there actually are two versions.  Unfortunately, you'd need to set up a username and password to get in and see everything, but you can always contact me and I can set you up.





2020 Recycling



Wildwood Park



Galena Retreat



T-Bird Flowers and Such



And Many Others.
If you need to make a payment for a website I have created, or need to reserve work, please use the PayPal button below:

Payment Amount

Wednesday, February 3, 2010

Interactive Book

I created another flip book here. Many thanks to Ely Greenfield who designed the API.

Friday, January 22, 2010

The Purpose of Object Oriented Methodology in Business


Here are some broad thoughts I've been formulating about application development. Many developers and teachers are certainly more familiar with the topic of OOP.  My specialty is merely using their tools, not inventing them, but I felt compelled to formulate some thoughts on the topic. 

I have found many explanations of how OOP works, but few delve deeply into the purpose of each individual component. Personally, I like to know purposes.  I've created dozens of applications which work perfectly fine without using many of the objects that are available.  I imagine others have too.  Still, programmers tend to look at how things work, rather than why they were designed to work that way, so I thought I'd write my own folksy explanation of the most common, yet optional, objects.  (I currently use C# but these concepts tend to be universal.)  So why do all these objects exist?  There are 3 reasons I can think of:

1 - The main reason OOP exists, in my opinion, is because it promotes structuring teams of programmers and separating their work in a way that the technical supervisor can better understand.  By providing such clarity to supervisors, the business can more quickly adjust its workflow to accommodate their objectives.

2 - Linear logic often works fine the first time through a project, but coming back to code after requirements change, the initial linear logic might be broken, so one might find that it would have been easier to modify the behavior of objects.  OOP is so profoundly different than linear code, that writing spaghetti code would be nearly impossible; however, it is debatable whether readability of OOP is better or worse since the logic is no longer visible all at once.  What is the point of avoiding spaghetti code if, even in simple projects, the logic is no longer readable?  I'm not sure.

3 - In rare cases, OOP might be the only reasonable approach.  Multiple objects might need to exist in a way that they all have frequently changing states.  Say you are making a video game and you have dozens of spaceships flying around that all have their own AI, and they have the ability to spawn child crafts.  In that case, they might be better off handled as objects rather than referenced from an array or a list.


Interfaces

Interfaces are in a separate section that will implement methods in a class.  They do not need to expose all of the class methods, only the ones that will be used by others and yourself.  You might not want others to see all your methods.  You might not want to see all your methods yourself.  By looking at your interface, you can see only the methods that matter.

Assemblies

Assembly is a fancy word to describe a "unit of deployment", and  "unit of deployment" is a fancy phrase that means a project, in the case of C#, which is compiled into an .exe or .dll when deployed.  But that's stating what it is, without stating its purpose.  In business, this depends on the framework, so in regard to .Net which can have only one language per project, I'd say its most relevant purpose is to group people together who are proficient at the particular language.

Attributes

Attributes are specific to .Net, and they appear to be metadata placed in square brackets before classes and methods.  They break the rules of typical OOP interaction and allow code to communicate with other parts of a project, such as telling a View in MVC that a text field should be displayed as required.  As with everything else in the world, Attributes are not necessary in order to write code, but they provide a more readable element to what is otherwise usually indecipherable.

Abstract Classes

Classes are the fundamental building block of all object oriented languages (C++, Java, C#, Ruby, etc), which also happen to allow for the use of linear logic.  Meanwhile, the use of abstract classes are the mark of a true OOP programmer.  It would be difficult to use abstract classes without truly understanding OOP in all its glory.  Abstract classes are similar to interfaces but provide all the power of code, enabling inheritance and reuse of code by making it possible to override classes.

Access Modifiers

Access modifiers control access to methods in various parts of an assembly.  More creative individuals might name all of their methods in a very distinct manner in order to avoid having multiple OrderTotal methods, for example.  However, if there are multiple methods with the same name, and they are all publicly accessible, that can cause confusion.  Access modifiers (public, protected, internal, private) allow the programmer access to methods only where they are meant to be used, eliminating the possibility of error.

Properties and Accessors 

I'm combining Properties with Accessors, since they are used in conjunction with one another.  Properties are created inside classes in order to retain data that applications need to compute.  They can be avoided by linear programmers who simply pass data into and out of methods.  Using Properties is intuitively cleaner than allowing data to float randomly inside an application where is could get lost or mismanaged; however, the programmer must deal with the slight overhead of creating an object and then knowing what to do with it.  Properties are similar to regular methods except they have 'get' and 'set' Accessors designed to allow class objects to assign and retrieve data.

Namespaces

A namespace is to computer programming what a file folder is to file storage on your hard drive.  Saying anything more would just add unnecessary confusion.  They are optional, yet appear by default in projects in order to provide a place to store objects.  Projects most often will need more than one conceptual unit, which is wordier than saying 'namespace'.

More to come...