Site Sponsors:
Pay-As-You-Go -v- Global Initialization 
While easy to understand in Java, the opportunity to initialize data & classes prior to their use is a well known technique.

Here is a Java:


static ColorPair[] colors = null;

static {
List<ColorPair> array = new ArrayList<ColorPair>();
Color[] ccc = {
Color.BLACK,
Color.BLUE,
Color.CYAN,
Color.DARK_GRAY,
Color.GRAY,
Color.GREEN,
Color.LIGHT_GRAY,
Color.MAGENTA,
Color.ORANGE,
Color.PINK,
Color.RED,
Color.WHITE,
Color.YELLOW
};
for (Color a : ccc) {
for (Color b : ccc) {
if (a == b) {
continue;
}
array.add(new ColorPair(a, b));
}
}
colors = new ColorPair[array.size()];
array.toArray(colors);
}


Indeed, when we are guaranteed to use static content, then taking the time to pre-initialize objects is a common practice. Why would anyone want to do anything else?

Yet when calculating the total latency in pre-execution load times, on more than one occasion I have been found re-factoring static initializers so as to allow programs to be more responsive.

Pay As-You Go


Given that the above example has been defined as package-protected, surely it can be declared private.


private static ColorPair[] colors = null;


After so hiding the data structure, the very next thing to do might be to expose the structure with a more visible member function.


public static ColorPair[] GetDefaultColors() {
return colors;
}


Once so exposed, a far less costly initialization strategy can be created. -Specifically, rather than requiring colors to be pre-initialized, we can now pay-as-we-go by only allowing the initialization loop to run when the data are needed:


private static void init() {
List<ColorPair> array = new ArrayList<ColorPair>();
Color[] ccc = {
Color.BLACK,
Color.BLUE,
Color.CYAN,
Color.DARK_GRAY,
Color.GRAY,
Color.GREEN,
Color.LIGHT_GRAY,
Color.MAGENTA,
Color.ORANGE,
Color.PINK,
Color.RED,
Color.WHITE,
Color.YELLOW
};
for (Color a : ccc) {
for (Color b : ccc) {
if (a == b) {
continue;
}
array.add(new ColorPair(a, b));
}
}
colors = new ColorPair[array.size()];
array.toArray(colors);
}


Note in the above that the initialization still takes place as before, but not every time our program is loaded. Rather, we can "pay as we go" by allowing the structure to be initialized only if, as well as when, the data are required:


public static ColorPair[] GetDefaultColors() {
if(colors == null)
init();
return colors;
}


Conclusion


Whenever I find myself migrating a bit of code from a project into a support library the first thing I look for is an opportunity to convert any global / static initializers into a pay-as-you-go strategy. Of course, given that one of the first principles of good Object Oriented Design is Encapsulation, from a puritanical point of view many often find very little justification for doing anything else.

Enjoy the Journey!

-- Rn

[ view entry ] ( 990 views )   |  permalink
UML: Getting Started 
I've no idea why so many software developers seem to be afraid of creating & sharing diagrams. --Not only is a picture worth 1,000 words, but when we work with others to chart-out the things we need to do, a set of diagrams will often save a similar number of defect, meeting, & R&D hours.

Of course diagramming common knowledge is often a guaranteed time waster, as well! --But when requirements are vague and / or the tasks are complex, then knowing how to depict systems in an industry-standard manner should be of obvious value?


So please allow me to share our free training on the Unified Modelling Language (UML). By way of a bonus, the video series includes an example of an Open Source Project designed by using a very few UML artifacts to both capture & describe project operations.

[ view entry ] ( 1038 views )   |  permalink  |  related link
Software Release: The Hershey Font Explorer 
Almost a year after the initial release we have been able to share a version of the Java Desktop Application created to explore, repair, and convert the Hershey Fonts.



Designed to show-off Dr. Hershey's accomplishment, by way of a bonus one can also review the marvellous efficiencies of the "R Format:"



Feel free to download the Java here.

You may read more about the project here.



The HTML5 + CSS3 + SVG Rendition also looks marvellous (even if I do say so myself :)




Enjoy the journey!

-Rn

[ view entry ] ( 1875 views )   |  permalink  |  related link

<<First <Back | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Next> Last>>