Thursday, April 15, 2010
Organic...Better than Artificial
Within her post she discussed how that the curve demonstrates that technology users adopt technologies and tools at differing rates. Therefore, allowing the statistical rate of adoption to take place in an organization was better given that it was organic. She then stated that one would need to, "Trust that organic structures are stronger than artificially forced ones...." After reading her insightful, well written post I realized that she was correct. Anything that is "artificial" has a high probability of not working within an organizational ecosystem, just as it would not in a natural ecosystem. I then replied to the post with this comment, hoping to increase that trust by providing a quick look at, at least in my view, why organic structures are stronger. In short, I took a page from nature itself.
First, organic structures emerge by leveraging the objects in its environment and therefore better suit the environment. This is dramatically different than an imposed, artificial structure that attempts to change the existing DNA matrix and kills existing organisms (existing ideas and business competitiveness) in the environment.
Secondly, organic structures are more adaptive. Because it is built upon the attributes of its environment, when change in the environment happens it contains the elasticity to "bend without breaking" and can gain an advantage over competing entities.
Finally, because organic structures are more adaptive, more fit organisms (ideas/products/services) emerge more quickly. Artificial structures must first remove competing organisms and then take root in the ecosystem before it can produce the fittest organisms.
Therefore, in my humble opinion, we can rationally and confidently trust that organic structures are stronger than artificially forced ones.
Thursday, April 08, 2010
html:checkbox gotcha
A problem with a checkbox is that the browser will only include it in the request when it is checked. If it is not checked, the HTML specification suggests that it not be sent (i.e. omitted from the request). If the value of the checkbox is being persisted, either in a session bean or in the model, a checked box can never unchecked by a HTML form — because the form can never send a signal to uncheck the box. The application must somehow ascertain that since the element was not sent that the corresponding value is unchecked.
The recommended approach for Struts applications is to use the reset method in the ActionForm? to set all properties represented by checkboxes to null or false. The checked boxes submitted by the form will then set those properties to true. The omitted properties will remain false. Another solution is to use radio buttons instead, which always submit a value.
It is important to note that the HTML specification recommends this same behavior whenever a control is not "successful". Any blank element in a HTML form is not guaranteed to submitted. It is therefor very important to set the default values for an ActionForm? correctly, and to implement the reset method when the ActionForm? might kept in session scope.
Thursday, March 11, 2010
What Level Are You?
Levels 1 and 2 – These levels enable us to communicate with large amounts of people. In a nutshell, social media has made mass communication the purview of the individual. What was once the domain of traditional broadcast media, the common person can now take part and “social-media cast” to thousands. While this level allows one to scale to more people, obviously it is not intimate. The value here is casual contact with the masses. In this venue, clubs and civic organizations can make meeting announcements at virtually no cost.
Another value of levels 1 and 2 is the amount of either positive or negative“buzz” that tools such as Facebook and Twitter provide. For example, you purchased a product and it is not working correctly. You contact customer service but they are apathetic to your plight and give you the normal spiel that, “You can only return the product on the third Tuesday of each month between 1:35 and 1:40 PM with the receipt and a notarized statement promising both your right arm and first born child.” However, because of Twitter and Facebook you now have additional channels and leverage. You tweet (on Twitter) and post a status (on Facebook) about your less than satisfactory experience with the vendor. Others read of your situation and enter the fray. If the vendor is smart, they monitor the “twitterverse” and “facebookdom” looking to remedy what could be a potential run-away PR problem.
Levels 3 and 4 – I put these levels together given that both a Facebook message and traditional email are “push” technologies that do not require real-time interaction. The idea here is that you to not require an immediate response and can send or push the message to the intended recipient(s) and wait for the response at the convenience of the responder(s).
Levels 5 and 6 – Real-time communication is of a higher level of intimacy in that it requires your attention “then and there” and is therefore more intimate. The only difference in these levels is the media. Level 5 is with a mobile hand-held device and level 6 with a device (desktop or laptop computer) that provides a larger form-factor of view and keyboard input. While some would argue that the form-factor size is of no barrier, the larger form-factor, in my view, allows for a more intimate experience.
Level 7 – Here—the handwritten letter—appears to be a dying media. The fact that effort must be made to handwrite the message, the time it takes in forethought to prepare (given that editing a handwritten letter is not easy, especially with a pen), and the tangible properties of the letter (texture and smell of the paper) make this a more personal media.
Level 8 – While this level is difficult to scale, unless you are conferenced into a group or on a speaker phone with a group, this one-on-one media is real-time and auditory. You hear the person which provides a level of intimacy not achieved in the previous levels.
Level 9 – This level is considered more intimate than the lower levels given that the person or persons that you are speaking with are able to be viewed. With technologies such as Skype and an inexpensive webcam, we can achieve a high level of intimacy in spite of geographic location.
Level 10 – The most initiate level is face-to-face, physical presence. Here you have visual and an auditory exchange of signals as well as tactile contact. This results in a more direct attention to the person(s) with which you are communicating.
In summary, humanity has always operated on different levels of intimacy in various environments and settings. With the internet and social media, we have more avenues to operate within these levels of intimacy. More opportunities means learning which media is appropriate for which situation, is it good for personal or professional use, or what are the emerging social norms for the media. Again, what level are you?
Sunday, March 07, 2010
Your Consumed Information--Useful and Valuable?
Sunday, February 14, 2010
Every Garage or Computer--an Industrial Player
Wednesday, February 03, 2010
Dynamic Java String Array
Here is an example of what I did to dynamically insert items into a Java String array:
public class DynamicStringArray {
public static void main(String[] args){
String[] originalArray = {"a","b","d"};
System.out.println("----- Original String Array ----");
for(int i = 0; originalArray.length > i; i++){
System.out.println(originalArray[i]);
}
//create a fixed-size ArrayList from the String array.
ArrayList oldList = new ArrayList(Arrays.asList(originalArray));
//create an ArrayList to hold the inserted items.
ArrayList newList = new ArrayList();
//assume no "b" in the array
boolean hasB = false;
//check if the array has a "b"
for(int i = 0; originalArray.length > i; i++){
if(originalArray[i].equalsIgnoreCase("b")){
hasB = true;//we have a "b" Houston
}
}
if(hasB){//the array has a "b"
for(int i = 0; oldList.size() > i; i++){
if(oldList.get(i) == "b"){//found "b"
newList.add(i,"newB");//replace "b" with "NewB"
newList.add(i + 1,"c");//add "c"
}else{//not "b"
newList.add(oldList.get(i));
}
}
}
//create new String array
String[] newArray = new String[newList.size()];
newList.toArray(newArray);
//pass new String array to old String array
originalArray = newArray;
System.out.println("----- Updated String Array -----");
for(int i = 0; originalArray.length > i; i++){
System.out.println(originalArray[i]);
}
}
}
The above code results in the following:
Sunday, January 03, 2010
Security Management - Better to be loved or feared?
Click here to read and then let me know your thoughts.
Friday, September 25, 2009
5 exabytes in the last 2 days. We better get busy!
OK. We may have generated that amount of data the last few days. And do not misunderstand me. I realize there is intelligence in that data. And yes, let it instruct and assist us. But my thinking is that the 5 exabytes in the last several thousand years is of much better quality and substance that the 5 exabytes in the last 2 days, right? If not, then the quality and substance is hidden therein and let us get busy and mine it out!
Wednesday, August 19, 2009
Digital Utopia--Free?
Gladwell discusses that Lewis Strauss, the former head of the Atomic Energy Commission, famously predicted in the mid-nineteen-fifties, due to the advent of nuclear energy, that “our children will enjoy in their homes electrical energy too cheap to meter.” Gladwell then states, "It is pointless to wonder what would have happened if Strauss’s prediction had come true while rushing past the reasons that it could not have come true."
Strauss appeared not to consider the cost of the infrastructure of energy distribution. In a similar way, with the phenomenum of YouTube, "A recent report by Credit Suisse estimates that YouTube’s bandwidth costs in 2009 will be three hundred and sixty million dollars."
Time will tell but the Achilles' heel, at least for now, that I see for a Digital Utopia of "Free" is the "cost" of distribution. Bandwidth, batteries, e-readers all cost money.
Monday, August 03, 2009
@Erlanger911 offers a nice twitter service for Erlanger, KY residents
Thursday, June 18, 2009
Look mom I sent this from Posterous.com!
I uploaded the Sisyphus the Software Developer image via an attachment!
Saturday, May 02, 2009
IBM's Many Eyes Data Visualization Project
It is that magical moment we live for: an unwieldy, unyielding data set is transformed into an image on the screen, and suddenly the user can perceive an unexpected pattern. As visualization designers we have witnessed and experienced many of those wondrous sparks. But in recent years, we have become acutely aware that the visualizations and the sparks they generate, take on new value in a social setting. Visualization is a catalyst for discussion and collective insight about data.Check it out
Monday, April 27, 2009
Twitter - knowledge or data?
- Data represents a fact or statement of event without relation to other things.
Ex: It is raining. - Information embodies the understanding of a relationship of some sort, possibly cause and effect.
Ex: The temperature dropped 15 degrees and then it started raining. - Knowledge represents a pattern that connects and generally provides a high level of predictability as to what is described or what will happen next.
Ex: If the humidity is very high and the temperature drops substantially the atmosphere is often unlikely to be able to hold the moisture so it rains. - Wisdom embodies more of an understanding of fundamental principles embodied within the knowledge and is essentially systemic.
In fairness, Miguel is correct that information received on microblogs such as Twitter, as all information sources, need to be closely examined and verified.
In summary, tweets, if used properly can augment both knowledge and wisdom.
Sunday, April 05, 2009
Facebook GreaseMonkey Scripts for a better view in Firefox
Click here for the full article with screen shots and links.
Thursday, April 02, 2009
Fittest CMOs and Business Intelligence from Social Media
Given the rapidly "evolving" role of the Chief Marketing Officer (CMO), one paradigm to consider when surveying the swiftly changing CMO phenomenon is to look at natural ecosystems and how ever changing environment pressures facilitate the change or evolution of the organisms in those ecosystems. In this paper, we examine the characteristics of the "primitive" CMO, the new environmental pressures challenging the CMO, and finally the fitness factors that are involved in the survival of the fittest CMOs.Here is Survival of the Fittest CMOs.
Here is a section of the second paper, Business Intelligence from Social Media:
Given the need for understanding the trends and patterns exhibited in data, utilizing the data in a way that can provide a competitive edge is vital. Three particular products or opportunities for this need are systems to store the data, systems to warehouse the data, and systems to mine the data for analysis and decision making. Data storage is a well understood concept of the use of computer systems to store customer information and transactions as well as other business related data. However, data in a data warehouse is different that the data stored by point-of-sale systems.Here is Business Intelligence from Social Media.
Wednesday, April 01, 2009
Favorite Software Dev April Fools Joke
Saturday, March 21, 2009
Visual Facebook Social Graph
Long story short, after downloading their Run Time Environment (RTE) and pasting a URL into the address field of my browser, I installed the CurlGraph application on my system. Then after logging into Facebook with the app, it collected my Friends network info and then produced the following social graph visualization.

Click on the pic to get the larger image.
The neat thing about the app is that I could select anyone represented on the graph and they would then move to the center of the display. You could drag your friends around on the display and sort your social graph by alphabet or by popularity. Note that your Facebook friends are represented as circles. Also the popularity, or size of the circle, is based on the intersection set of friends that you have in common with each friend not on their total set of friends. That is why my wife's circle is large as we have nearly the same set of Facebook friends. Also note that while the bold lines connect my friends to me, the web of relationships that exist from all the friends is visible. This changes when you select a friend with your mouse as the connecting lines from them to your other friends then become bold.
In summary, I find it interesting when finding different ways to visualize data. This certainly tells you more about your Facebook Friend network than a grid of pictures.
Here is Curl's press:
Using Curl, developers can implement a new class of complex, business-critical, Web-based applications that cannot easily be developed with Ajax or other smart client technologies.
Curl allows organizations with legacy client-server applications to move to Web-based delivery, increasing reach, improving processes, accelerating productivity and reducing cost.
Customer driven #marketing? Now that's an #idea! for #social products.
From Bill Taylor's Practically Radical Blog at HarvardBusiness.org. In lean times, there's nothing more valuable than a great new product idea. Why not invite your customers to share their creativity with your company -- and turn the best ideas into actual products! That's what legendary shoe designer John Fluevog has done, with a project he calls open-source footwear.
Wednesday, February 25, 2009
Status Last 10 List for Facebook
In a nutshell, the app displays a list of your last ten status messages that you entered into Facebook. You can display the list on your Wall or Boxes Tab. Much of the blogoshpere speculates that Facebook opened their status API to compete with Twitter.
In any event, the app is coded in PHP. The next step will be to show the code once I get the refactorings completed and share the discoveries. More to come once I get the time.
Thursday, February 12, 2009
People are not shapes on a diagram....they're people
During the discussion they cited a poem from Stephen Vincent Benét entitled John Brown's Body dealing with the U.S. Civil War. Here is the relevant section:
If you take a flat map
And move wooden blocks upon it strategically,
The thing looks well, the blocks behave as they should.
The science of war is moving live men like blocks.
And getting the blocks into place at a fixed moment.
But it takes time to mold your men into blocks
And flat maps turn into country where creeks and gullies
Hamper your wooden squares. They stick in the brush,
They are tired and rest, they straggle after ripe blackberries,
And you cannot lift them up in your hand and move them.
--A string of blocks curling smoothly around the left
Of another string of blocks and crunching it up--
It is all so clear in the maps, so clear in the mind,
But the orders are slow, the men in the blocks are slow
To move, when they start they take too long on the way--
The General loses his stars and the block-men die
In unstrategic defiance of martial law
Because still used to just being men, not block-parts.
Monday, January 19, 2009
Stifling Technological Innovation?
It would appear given the present political fervor of a new administration coupled with the current financial crisis that a perfect storm of over-regulation is on the horizon.
Saturday, January 17, 2009
Value of Shorter Iterations in Project Management
In the initial readings in the Project Management course deal with Work Breakdown Schedules, Organizations Breakdown Schedules, and Work Packages and how to best organize, monitor, and measure each step. As I read I am thinking of the value of shorter iterations within the cycles of a project.
Here is a discussion on the value of shorter iterations within software development that are in my view applicable to project management. Aspects such as more frequent feedback and a better understanding of the work package status makes shorter iterations attractive. With that said, I am sure that as the term progresses I will learn both the advantages and disadvantages to shorter iterations in project life cycles.
Thursday, January 01, 2009
Simple Facebook Application
The application utilizes the ESV API.
Tuesday, December 23, 2008
Resizing an image on mouseover with Flex 2
Enter the mx.effects.Resize class. Using this object you can control the resizing of an image when the user passes their mouse over the image. For example, you have a thumbnail image that you are displaying that is 150 by 150 pixels in your MXML file:
<mx:Image source="yourImgPath/imgName.jpg"You want to enlarge the image to a size of 450 by 450 pixels based on the action of a user. Instead of a link to a larger image, we will enlarge the image when the user passes their mouse over the image. To do this you can utilize the mx.effects.Resize class. Enter the following into your MXML file:
height="150"
width="150"
/>
<mx:Resize id="resizeBig"Then, within the Image instance, modify it with the following:
widthFrom="150" widthTo="450"
heightFrom="150" heightTo="450"
/>
<mx:Resize id="resizeSmall"
widthFrom="450" widthTo="150"
heightFrom="450" heightTo="150"
/>
<mx:Image source="yourImgPath/imgName.jpg"Finally, recompile and you will see that when the user passes their mouse over the image it enlarges without the use of links to the larger image.
height="150"
width="150"
rollOverEffect="{resizeBig}"
rollOutEffect="{resizeSmall}"
/>
Thursday, November 20, 2008
Genetic Algorithm for Network Intrusion Detection Rule Sets
Special thanks to Dr. Frank Braun, class professor, Dr. Richard Fox, Professor and Graduate Program Director in the Department of Computer Science at NKU, and Mr. Klaus Meffert (soon to be Dr. Klaus Meffert) the primary author of the JGAP framework, for their assistance.
Here are the paper, presentation, and related files:
Paper
Presentation
GA Output
XML Output
Thursday, November 06, 2008
Graffiti CMS C# Extended Link List
What it meant for this client was that the setup and intial labor of the site was greatly reduced, thereby saving them money. In any event, I setup an account for the client and placed then in a manager role (which were setup and ready to go), that allows them to publish content via a handy WYSIWYG editor. One thing that the role is not able to do is to use the many widgets that are available for the site.
I posted a question on the Graffiti forum that asked is there a way to allow users in the manager role access to the Link widget where they could create links in a special area of the site where the widget is placed. I found that to date you can not. While looking I did find a widget that extends Graffiti's Widget class called an Extended Link List, that was developed in VB.Net. To better learn how to create extended widgets I ported the project to C# and posted it on CodePlex, Microsoft's open source project hosting web site.
If interested, here it is.
Friday, August 22, 2008
IT's About Business Objectives Stupid
In short, the article is spot on concerning IT programs and the need of those enrolling in them to consider broader aspects of business objectives and not just technical knowledge.
Check it out.
Saturday, August 02, 2008
Please skim this.
In both podcasts the talk touched on the issue of how possibly this instant information has made us less tolerant to large amounts of text in mediums such as books. There was also a mention of an excellent article in Atlantic Monthly by Nicholas Carr that asked the question, "Is Google making us stupid?" The question in my mind, along the same thought, is, "Does micro-blogging technologies such as twitter, IM clients, or text messaging foster a culture that lacks the ability to maintain a sustained period of attention to the formation of ideas and thoughts?"
Ironically, I used Google to find more information on the topic searching with the words, "google learning sustained thought." What I found an interesting article from the New York Times by Motoko Rich entitled, "Literacy Debate: Online, R U Really Reading?"
For those with diminishing attention spans I will get to the crux: some purport that digital text is read by those who otherwise would turn to the television or electronic gaming, and is therefore a gateway to more sustained reading. While that may be true, my concern is along the lines of Rich’s article:
Critics of reading on the Internet say they see no evidence that increased Web activity improves reading achievement. "What we are losing in this country and presumably around the world is the sustained, focused, linear attention developed by reading," said Mr. Gioia of the N.E.A. "I would believe people who tell me that the Internet develops reading if I did not see such a universal decline in reading ability and reading comprehension on virtually all tests."
Then, Rich’s article refers to Carr’s Atlantic Monthly piece:
Nicholas Carr sounded a similar note in "Is Google Making Us Stupid?" in the current issue of the Atlantic magazine. Warning that the Web was changing the way he — and others — think, he suggested that the effects of Internet reading extended beyond the falling test scores of adolescence. "What the Net seems to be doing is chipping away my capacity for concentration and contemplation," he wrote, confessing that he now found it difficult to read long books.
In summary, I think that any technology that helps present, streamline, and make information accessible is good. However, what are the side effects? Good question, but now my attention is distracted and I must move on to something else.
Tuesday, July 29, 2008
Programming: A Social Activity
Joel and I both agree: one of the most effective coding practices you can adopt on your team is interactive, sit-down-with-your-coworker code review. 90% of the things you will learn have nothing to do with the code. I believe programming is a far more social activity than most realize. If you write code, and nobody but you ever sees that code — did you really extract all the benefit from writing that code?HEAR, HEAR!
Friday, July 25, 2008
Notepad2: A light-weight ABAP external editor
OK. It has been awhile since I have posted anything. Reason: I am heavily involved in church and family, working full-time, and going to school part-time. Enough said. Anyway, I have been taking a few SAP classes this summer as part of the Business Informatics graduate program I am in at NKU. One of the classes is an ABAP programming class.
I have to admit that after being skeptical at first, I like ABAP and its development environment. However, while still in the course, I want an external editor that I could use that color codes the syntax to make it easier to read and edit. Granted I will not be able to debug the code but it is nice to have an editor to drop code into, as I do not have to login to SAP, for a quick look.
My favorite light-weight editor is Notepad2 from Florian Balmer. Since it is open source, and I saw where others have added different language-syntax highlighting capabilities, I thought I would give it a go.
First, I downloaded the Notepad2 source from Flo’s Freeware Page and opened the C++ project in Visual Studio 2005. Then, after bombing on my first build, I read the readme file which stated to include the source from the editor that inspired notepad2, Scintilla and tweak one of the source files. After another bomb on the rebuild I set the project property to NOT embed the manifest. Then, it built.
Next, I wanted to get an ABAP lexer working for Notepad2. A quick look on Google and I found another build of Scintilla, SciTE Ru-Board Edition. Now is when the fun begins. What I essentially did was to dig into the SciTE Ru-Board source code, grab what I thought was the needed to implement the Notepad2 ABAP lexer, and then attempt a rebuild. With each attempted build I find various sections that I needed to modify within the Scintilla source code. Finally after about a dozen attempts, I had the Notepad2 project building.
Then, I wanted to update the Notepad2 Styles header and program files (Styles.h and Styles.c ) so that the color coding will work for ABAP files in Notepad2. Once this was completed, I had a light-weight ABAP editor that provided syntax highlighting for files with an ".abap" or ."abp" extension.
Finally, if you pull down the Notepad2 source from Flo’s Freeware Page, do a "diff" on the /src/Styles.c and /src/Styles.h files to see the updates. Also, to see where the Scintilla source was modified diffs should be done comparing the following files: /include/PropSet.h, /include/SciLexer.h, /src/KeyWords.cxx, /src/PropSet.cxx, and /src/StyleContext.h. I also added the /src/LexABAP.cxx file to the Scintilla source (thanks to VladVro [one of the SciTE Ru-Board Edition project owners]) as that is needed by Notepad2.
NOTE: The Visual Studio 2005 Notepad2 project and binary downloads were updated 9/18/2008 with more Object Oriented ABAP keywords.
Click here to get the Visual Studio 2005 Notepad2 project.
Click here to get the binary Notepad2 files.
NOTE: By the way, I added Scott Hanselman’s Ruby lexer to this project for Ruby file edits.
Wednesday, April 23, 2008
JavaScript HashMap
function formFieldArray(){
var myArray = new Array(10);
myArray['myname'] = "Name";
myArray['myaddress'] = "Address";
myArray['mycity'] = "City";
myArray['mystate'] = "State";
myArray['myzip'] = "Zip Code";
myArray['myPhone'] = "Phone Number";
myArray['myEmail'] = "Email Address";
myArray['cardname'] = "Name as it appears on the Card";
myArray['cardNumber'] = "Card Number";
myArray['expDate'] = "Expiration Date";
myArray['cardCode'] = "Card Security Code";
return myArray;
}
function validateForm(){
var theFormFieldArray = formFieldArray();
//iterate thru array and clear values
for (key in theFormFieldArray) {
if(eval('document.myForm.' + key + '.value.length == 0')){
alert('Please enter the value for the ' + theFormFieldArray[key] + ' field.');
eval('document.myForm.' + key + '.focus()');
return false;
}
}
document.myForm.action = "yourNextPage.php";
document.myForm.submit();
}
Sunday, March 02, 2008
Want to be influenced?
Saturday, February 16, 2008
Narrative Thinking
Login Test
Current Steps Planned:
I would describe the steps/tasks that I planned on taking for this date. It could include a list of items, a brief description of what is planned, etc. Actual steps:
- Here I would describe actual steps that I took, thoughts in the process, rationale for decisions, etc.
- I added a check to the Customer.Authenticate method.
if (customer.ID[0].Status != Customer.Validated){
throw new CustomerException(CustomerExceptionType.NotValidated, "Customer Not Validated");
}
- This resulted in an error when attempting to login with the userid and password.
- ......
Here I would describe the steps/tasks that I planned on taking the time.
What I found was this forced me to be more precise in my thinking which naturally resulted in a more precise research and coding process. I have always known that writing makes one organize their thoughts more orderly in order to communicate more clearly. However, I must say I enjoyed the controlling aspect of thinking in a narrative format. It somewhat reminded me of the Test Driven Development in which you are controlled by getting the current test you are working on to pass with the simplest code. You do not have the opportunity to thrash around or run down this rabbit trail or that. You record your processes, organizing and analyzing your thoughts as you go, making sure you are focused and productive.
Tuesday, January 08, 2008
Dynamic and Domain Specific Languages in a Language Tiered Structure?
For example, in an n-tiered layered architecture you would have a presentation tier on top of a business logic tier which is over a data layer. Bini states:
The first layer is what I called the stable layer. It's not a very large part of the application in terms of functionality. But it's the part that everything else builds on top off, and is as such a very important part of it. This layer is the layer where static type safety will really help. Currently, Java is really the only choice for this layer.This layer corresponds to the data layer mentioned above.
The next tier Bini mentions is the dynamic language layer:
This is where maybe half the application code resides. The language types here are predominantly dynamic, strongly typed languages running on the JVM, like JRuby, Rhino and Jython. This is also the layer where I have spent most of my time lately, with JRuby and so on. It's a nice and productive place to be, and obviously, with my fascination for JVM languages, I believe that it's the interplay between this layer and the stable layer that is really powerful.In my paper that I referenced above, I discussed that Groovy has great potential given it is designed for the JVM. Here I see this corresponding to the business logic layer.
The last tier mentioned is the Domain Specific Language (DSL) layer. For a discussion on that, go here. Bini states:
The third layer is the domain layer. It should be implemented in DSL's, one or many depending on the needs of the system. In most cases it's probably enough to implement it as an internal DSL within the dynamic layer, and in those cases the second and third layer are not as easily distinguishable.Finally, in my view, this tier corresponds to the presentation layer. In a similar manner, the business logic and presentation tiers in many applications are often tightly coupled and "are not as easily distinguishable" as they should be. In any event, Bini’s post is an interesting perspective on the use and place for both dynamic and DSL languages.
Saturday, January 05, 2008
MIT’s new Open Courseware (OWC) web site
Of late, I have been diving into the business aspects of development. I must say to my shame I should have had this perspective much earlier in my career. Do not misunderstand me, I have always developed to solve a business need, but I am looking further up the value chain to explore how software applications in particular and technology in general can enhance innovation. With that said, I find OWC’s link to the Sloan School of Management providing helpful resources. For example, the reading list from the Management Information Systems: Generating Business Value from Information Technology provides a list of resources to read. One of the resources listed is an article from Harvard Business Review, October 2002, entitled Six IT Decisions Your IT People Shouldn't Make. A quote from the article states:
Our center runs a seminar called "IT for the Non-IT Executive," and the refrain among the more than 1,000 senior managers who have taken the course runs something like this: "What can I do? I don't understand IT well enough to manage it in detail. And my IT people - although they work hard - don't seem to understand the very real business problems I face."
I want to better understand real business problems and more effectively utilize software to solve them.
Finally, while this does not present an MIT education, it does provide supplemental materials for one’s academic and professional pursuits.
Friday, December 28, 2007
Dynamic Languages and Increasing the Quality of Software and Velocity in the Software Development Lifecycle
My project was entitled Dynamic Languages and Increasing the Quality of Software and Velocity in the Software Development Lifecycle. Within this project I attempted to see if the current literature showed empirical evidence that dynamic languages, particularly Ruby and Groovy, shorted the development lifecycle and increased the quality of the software application.
Click here for the paper from the project.
Thursday, December 27, 2007
General Unification Theorem Proof Concerning Functional Dependencies in Relational Databases
Click here to see the proof.
Tuesday, October 16, 2007
Selenium IDE HTML Compare Pattern
First, get the string values to compare. Then, compare the values. You may need to parse the value as a float via the JavaScript parseFloat() function if working with decimals such as currency. If you use the eval() function (see below), you are good on comparing numbers such as integers. Finally, verify the expected outcome of the comparison.
As stated above the first thing is to get the values to compare:
<!-- get the first account number in the listcontrol -->
<tr>
<td>storeEval</td>
<td>var Account1 = ""; var
accountOptionList =
selenium.browserbot.getCurrentWindow().document.getElementsByName('accountList');Account1
= accountOptionList.item(0)[1].value</td>
<td>Account1</td>
</tr>
<!-- get the second account number in the listcontrol -->
<tr>
<td>storeEval</td>
<td>var Account2 = ""; var
accountOptionList =
selenium.browserbot.getCurrentWindow().document.getElementsByName('accountList');Account1
= accountOptionList.item(0)[2].value</td>
<td>Account2</td>
</tr>
Next, compare the values and place the comparison value into a variable:
<tr>
<td>storeEval</td>
<td>var isLess = false; isLess =
eval(${Account1} < ${ Account2});</td>
<td>isLess</td>
</tr>
Finally, verify that the comparison value evaluated as expected (that
the first numeric value is less than the second if sorted correctly):
<tr>
<td>verifyExpression</td>
<td>${isLess}</td>
<td>true</td>
</tr>
Monday, October 15, 2007
JQuery Demos
For the documentation go here. I have some basic demos here that cover very basic AJAX and drag and drop functionality.
Sunday, October 14, 2007
JavaScript Functions in Selenium IDE HTML Tests
First, declare the JavaScript function.
<tr>
<td>storeEval</td>
<td>
function(input) {var output =""; output = input.replace",","");
return output.replace("$","");}
</td>
<td>replaceText</td>
</tr>
To call the replaceText function do something like this:
<tr>
<td>storeEval</td>
<td>var parsedTotal = 0; parsedTotal =
parseFloat(storedVars['replaceText']('${Amount}')).toFixed(2);
</td>
<td>parsedTotal</td>
</tr>
Now I can use the parsedTotal value later in the test:
<tr>
<td>verifyExpression</td>
<td>${parsedTotal}</td>
<td>SomeValueHere</td>
</tr>
Saturday, October 13, 2007
Adobe's Integrated Runtime - Heavenly
It was at the Bell Event Centre at the Verdin Bell & Clock Museum in downtown Cincinnati. The museum is an old church. What was cool was the majestic atmosphere that the building provided for Adobe’s informative outing. Moreover, as I sat there listening to the content of the presentation and looking up at the interior structure of the church, I could not resist the irony of the situation given the evangelism (of glad tidings for all developers) that was taking place.

As the faithful, seekers of inspiration, and the skeptical gathered the Adobe AIR clergy (team) was prepared to deliver a message of hope. The sermons (presentations) consisted of building an AIR application with Adobe Flex, HTML and JavaScript, and utilizing JavaScript frameworks in AIR applications.
The content was inspiring (informative) and Adobe’s integrated runtime shows much promise (potential). In addition to the miraculous (cool) features such as ability for JavaScript developers to utilize ActionScript objects via script bridging, the sermons (presentations) contained the occasional rebuke (pokes) at Microsoft for their heretical ways (.Net platform), at which the congregation (those in attendance) responded with various utterances of “amen” (chuckles and head nods).
Although I left the service (event) unconverted from my agnosticism (the belief that no one technology can meet every business need), I was inspired to look to the holy city (Adobe) for more revelation (documentation) to see how AIR could potentially be the way (an answer to a business need).
Confession: You know I have to admit that I had fun with this one.
HTML ListBox Quick Item Select JavaScript
A coworker and I came up with the following. The referenced JavaScript file is here.
The trick here was utilizing the onkeyup event. The entered text is appended to a string that is compared to the listbox content. If there is a match, it is added to an array of matched items. On each onkeyup event, the first matched element in the array is selected in the listbox control. If the listbox loses focus, then entered string is set to an empty string.
Wednesday, August 01, 2007
Polyglot Programming?
When discussing using multiple languages many would say, "That's crazy talk!" However, Ford points out that we are already polyglot programming. We are using Java, XML, SQL, and JavaScript. Moreover, the learning of different languages help us think more broad about business problems.
Will have more coming on dynamic languages such as Groovy, which runs on the JVM. In a recent post I show a test drive of pre-alpha release of IronRuby (Ruby on the .Net CLR).
If we can dispel the delusion that learning about computers should be an activity of fiddling with array indexes and worrying whether X is an integer or a real number, we can begin to focus on programming as a source of ideas.
Harold Abelson
Sunday, July 29, 2007
Test Drive with IronRuby and System.Windows.Forms
After building the IronRuby solution, I took the rbx.exe, along with the related assemblies, and dropped them into a new folder. Here is a look at the folder content.

I then created a file named example.ir.

Next, I ran the IronRuby exe with the new file.

This resulted in the window below.

After clicking the Click Me button:

On a side note, the shot above of the example.ir file is from Notepad2. The syntax highlighting, even with an .ir extension, is from changing the custom scheme in Notepad2. Look at a previous post to see how to change the schemes for syntax highlighting. If you want a build of Notepad2 with Ruby syntax highlighting, go to Scott Hanselman's blog for the build and source code.
Saturday, June 23, 2007
Notepad 2 for MXML and ActionScript 3
I was looking for a way to get color coding, for my favorite lightweight code editor for Windows, Notepad2, for Flex 2’s MXML files when I came upon Josh Tynjala’s blog entry on how to enable color coding support for ActionScript 3 files.
Since MXML files are XML they can use the same color coding syntax information. Here’s what you need to do to enable support for MXML files (or any other file type for that matter).
- Click on the View menu and choose Customize Schemes….
- Choose the XML Document type.
- In the input that contains xml;xsl;svg;xul;xsd;xslt;axl;rdf;vcproj;manifest, add ;mxml to the end. Note the semi-colon.
- Open an *.mxml file to see the wonderful color coding.
Friday, June 15, 2007
CAPTCHA (a.k.a Are you man or machine?) to reCAPTCHA
We have all been to sites where we have to type in a word or phrase that demonstrates that we are not a spider or spam bot but a human attempting to access a page or purchase an item. When you look at the word or phrase it looks like a warped rendering with distorted letters. The program that provides the fuzzy looking words is called CAPTCHA. According to recaptcha.net, “The term CAPTCHA (for Completely Automated Turing Test To Tell Computers and Humans Apart) was coined in 2000 by Luis von Ahn, Manuel Blum, Nicholas Hopper and John Langford of
I always understood the funky phrase or word was to stop Optical Character Recognition systems from deciphering them, submitting the words back, and falsely validating itself to as a human being. While it does that, recaptcha.net wants to use that few seconds of human effort of typing in the words into a textbox for noble purposes.
About 60 million CAPTCHAs are solved by humans around the world every day. In each case, roughly ten seconds of human time are being spent. Individually, that's not a lot of time, but in aggregate these little puzzles consume more than 150,000 hours of work each day. What if we could make positive use of this human effort? reCAPTCHA does exactly that by channeling the effort spent solving CAPTCHAs online into "reading" books.
reCAPTCHA improves the process of digitizing books by sending words that cannot be read by computers to the Web in the form of CAPTCHAs for humans to decipher. More specifically, each word that cannot be read correctly by OCR is placed on an image and used as a CAPTCHA. This is possible because most OCR programs alert you when a word cannot be read correctly.
To help with this go to http://recaptcha.net/learnmore.html. Moreover there is an API at http://recaptcha.net/apidocs/captcha/.
Hey, in about 30 seconds I helped digitized five words!
Thursday, May 24, 2007
There's a new, well kinda new, user group in town
Wednesday, May 09, 2007
The Selenium storEval Method in Action
A little digging on the OpenQA site in the reference for Selenium and I found the storEval method. According to the reference this method, "Gets the result of evaluating the specified JavaScript snippet. The snippet may have multiple lines, but only the result of the last line will be returned." That was just what I needed.
Here is where the method is used in the test that is stored in an HTML file:
<tr>
<td>storeEval</td>
<td>var d = new Date(); var mday = d.getDate();
var mmonth = d.getMonth() + 1; var myear; if (navigator.appName == 'Microsoft
Internet Explorer') {myear = d.getYear();} else {myear = d.getYear() + 1900;}
if (mday.toString().length == 1) { mday = '0' + mday; } if
(mmonth.toString().length == 1) { mmonth = '0' + mmonth; } todaysDate = mmonth
+ '/' + mday + '/' + myear;</td>
<td>todaysDate</td>
</tr>
<tr>
Note that the todaysDate variable above is passed the formatted current date. I then use it later in the test to assert that this is what is entered into the beginning and end date text boxes.
<tr>
<td>verifyValue</td>
<td>searchBeginDate</td>
<td>${todaysDate}</td>
</tr>
<tr>
<td>verifyValue</td>
<td>searchEndDate</td>
<td>${todaysDate}</td>
</tr>
Wednesday, April 18, 2007
Selenium IDE with an XPath Locator
Here is how I did it.
Tuesday, April 10, 2007
Dreaming in Code Book Review
Unlike other tech related books this was composed by a journalist that kept the book moving and informative, all the while viewing software development from an entertaining, fresh perspective.
I highly recommend this book for not only software developers, but for those who work with them. Project managers, software testers, program managers and the like will benefit from the view point of a man who watched the unfolding of the Chandler open source project for a three year period.
As the book details, software is hard:
Why is good software so hard to make? Since no one seems to have a definitive answer even now, at the start of the twenty-first century, fifty years deep into the computer era, I offer, by way of exploration, the tale of the making of one piece of software -- a story about a group of people setting their shoulders once more to the boulder of code and heaving it up the hill, stymied by obstacles old and new, struggling to make something useful and rich and lasting.
Saturday, March 24, 2007
Ubuntu Desktop in Microsoft's Virtual PC 2007
I setup the VPC machine with Vista and then created a copy of the VPC to test drive. This enables me to play with it, and even break it with no issues. If I mess it up I just make another copy of my master VPC and go at it again. This is great for development and testing.
I even got the Ubuntu Desktop on a VPC machine thanks to a blog post from Arcane entitled Installing Ubuntu 6.10 on Virtual PC 2007 Step by Step.
Saturday, February 10, 2007
OpenID - open, decentralized, free
In a previous show he discussed identity and Microsoft's CardSpace and in this podcast, mentioned that Microsoft is collaborating with OpenID.
All I can say is get your's today!! Open, decentralized, free--why not!
Sunday, February 04, 2007
NSpec: .Net's Behavior Driven Development Tool
Go here to find out more about NSpec.
Monday, November 20, 2006
Setting up menu items in Ubuntu's Edgy Eft build
Anyway, I have a brief article on how to setup a menu item in the Edgy Eft build of Ubuntu.
Wednesday, October 18, 2006
An Open Source Team
One thing I am thankful for is a group of co-workers who do not hold their knowledge close to themselves but are ready and willing to share and teach. When I have a question, they are helpful and provide the needed information. Moreover, they have an array of tips and tricks that they provide.
That is the core of a successful team. When members understand that by sharing information, they open themselves up to receive more knowledge. It has been my experience that the more knowledge I share the more I learn.
Wednesday, October 04, 2006
A GoDaddy Ready MySql.Data.dll for .Net 2.0
A blog reader, Bill Clark, recently asked me if I could post the assembly that I created for others to use.
Here you go.
The file includes the compiled (specifically for GoDaddy) MySql.Data.dll assembly that you will reference. Also included in the zip is ICSharpCode.SharpZipLib.dll assembly that is referenced by the MySql.Data.dll assembly.
Thursday, August 17, 2006
Dynamic vs. Compiled Languages
This show dealt with a discussion on Dynamic vs. Compiled Languages with a particular emphasis on the advantages of Ruby.
The show also details the values of Test-Driven Development and the next rev of C# with more potential dynamic language features.
Sunday, August 06, 2006
Is Untested Code the Dark Matter of Software?
In cosmology, dark matter refers to matter particles, of unknown composition, that do not emit or reflect enough electromagnetic radiation (light) to be detected directly, but whose presence may be inferred from gravitational effects on visible matter such as stars and galaxies.I find it interesting that just like untested software, dark matter has observational evidences such as gravitational effects on galactic motion but we really do not fully know what it is. Our calculations detect its presence, but due to obvious limitations, we lack the current ability to conduct extensive empirical investigations. Similarly, in software development, (not because we can't do extensive test but because we won't) we will run limited tests on a module and observe a small scope of expected behaviors. In essence, like the observable effects of dark matter on stellar objects, we infer that the software is coded correctly because of its observable outcomes. However, if not properly tested with the array of possible circumstances the module may not function as planned.
I understand that the limitations for software programming are different than cosmological research. Shear distance and inconclusive understandings of gravitation hinder a fuller understanding of dark matter. With software development, customer expectations, unmitigated risks, and changing requirements can hinder proper developer testing and confidence. However, if we really want to, unlike the astrophysicist, we have the ability to test and empirically understand most of the potential effects of the software we write.
What do you think would become of an astronomer who had the opportunity to more closely research dark matter and did not because of time pressures at best, and laziness at worst? Now that matter is dark.
Wednesday, August 02, 2006
Microsoft's Port 25 - their Open Source Software Lab
My hope is that Microsoft will support cross-platform efforts in the open source community. I am already fond of DotNetNuke, NUnit, and other open source tools that are, at least in part, supported my Microsoft for the Windows platforms. We shall see if they support Mono and the like.
Saturday, July 29, 2006
Moving from Windows XP Pro to Ubuntu
After booting from the Ubuntu CD, you can test drive it to see if you want to install it on your hard disk. If so, there is a handy install icon. Select the icon, answer a few standard questions for language, timezone, userID, and password and it will install.
Then, I inserted my Linksys WPC11 wireless NIC and Ubuntu recognized it lickety split. I added my WEP settings info via the Administrator|Network tool and I was browsing.
I have to say that this was the most trouble-free install of any linux distribution I have seen. Then, with the help of the Urban Puddle blog, I was able to get Ruby, Rails, and MySql installed.
See my messing with Interactive Ruby (IRB) below on my new Ubuntu install.

Also of note was that Ubuntu was able to browse to my Windows server shares as Server Message Block (SMB) shares. I did not even have to mess with SAMBA. Sweet!!!
Sunday, July 23, 2006
If you are hosting ASP.Net 2.0 on GoDaddy and using the MySql .Net Connector for MySql please read
After installing the MySql .Net Connector, in VS 2005 Add an Existing Project to your solution by browsing to C:\Program Files\MySQL\MySQL Connector Net 1.0\src\ MySql.Data.csproj file.
After adding the project, open the MySql project and add the following to the AssemblyInfo.cs file in the perspective locations:
using System.Security; //added for GoDaddy HostBuild the project and then either reference the MySql project or browse to the new MySql.Data.dll assembly directly.
[assembly: AllowPartiallyTrustedCallers()] //added for GoDaddy Host
Special thanks to a post from Alek at GoDaddy’s Support team on Microsoft’s Asp.Net Forum site. Apparently, as of June 22, 2006 GoDaddy.com, "has updated the custom medium trust configuration to allow the MySql.Data.Dll to work in a medium trust environment for the .Net 2.0 development environment." He then goes on to instruct you to set the AllowPartiallyTrustedCallers attribute in the AssemblyInfo file. Also thanks to others for pointing out the referencing the System.Security namespace in the AssemblyInfo file.
UPDATE: By request I have posted the compiled MySql.Data.DLL Assembly. Get it here.
Saturday, July 22, 2006
The value of multiple input

For the unacquainted, Nickel Creek is a progressive, blue grass group that many would not even label as blue grass. Any way I always read of the various blues and other world music that was the influence of Led Zepplin. I also know John Paul Jones played mandolin at least on Led’s fourth album song, Going to California. The point of this post is to be aware of the value of various influences. One should resist the temptation to limit oneself to only what is comfortable. I then thought of the literary influences that were listed by futurist Alvin Toffler in a recent C-Span interview. He spoke of a array of topics on which he regularly reads. Moreover, he explicitly stated that one needs to expand the genre and subject matter of what one reads to get a better, holistic view.
How does this apply to technology and business in general and software development in particular? One general application is that inputs of various topics helps one to better anticipate the ebb and flow of the information technology market and adjust one’s direction accordingly. Secondly, and more specifically, a broader understanding of things makes one more able to understand the various business domains for which one will have to write software solutions. Finally, the understanding of various programming languages enables one to develop a broader knowledge base by applying the concepts, idioms, and problem-solving patterns of one language to another, potentially combining the strengths of two or more languages to a solution.
Friday, July 21, 2006
Learning the Ruby Array via Specifications with RSpec
See the code and the outcome of running the executable spec.
Sunday, July 16, 2006
RSpec and the Empty Executable Spec
Click here for more.
Wednesday, July 12, 2006
Hegel's (or rather Jim Weirich's) Ruby Dialectic: the synthesis of Design by Contract and Behavior Driven Development
With that said, the potential of Jim’s experiment with BDD and DbC is rich in its bringing together two divergent methodologies into a potentially better one. The question that the experiment is attempting to answer, from my understanding of the presentation, is can the thesis of DbC and its emphasis on getting the specifications completed upfront, pre and post conditions, and assertions combined with the antithesis of BDD’s executable specifications (a.k.a unit tests in Test Driven Devlopment) and short iterations produce synthesis of the two--a clearly understood contract (or set of contracts) between customer and developer that is the requirement for a short, iterative BDD’s executable specification(s)? Moreover, are there any unanticipated results that will emerge from the experiment that can be immediately useful or spawn more questions? One might state this is similar to an "alchemist experiment to see what comes to the top of the mixture of the two elements."
In summary, after showing us his Ruby framework to support Design by Contract, Jim explicitly stated that the experiment’s result(s) are not intended to replace Test Driven Development, BDD or DbC. However, in my view, it could produce a client initiated contract that can be solved in a few iterations with BDD. Or, sticking with the previous alchemist analogy, Jim's experiment could provide some proverbial "gold from silver and copper."
Sunday, July 02, 2006
Testing .Net Properties with FIT
In more detail, fixtures deriving from RowFixture have instantiated classes with public variables, instead of exposing the instantiated object’s members via public properties. With these modifications you can write fixtures directly against objects under test, which are typically the actual application classes, exposing properties instead of variables to the RowFixtures. This enables the .Net developer to avoid writing additional code beyond the fixture and the actual application objects under test.
Here it is.
Thursday, June 29, 2006
Re-writing and copying HTML files with Ruby Refactoring
Wednesday, June 28, 2006
Php 4 Quick and Dirty Model and View Separation Example
See how I, at least somewhat, did this here.
Monday, June 26, 2006
Re-writing and copying HTML files with Ruby
I thought about just rewriting the HTML but having to create 12 separate files, one for each month, was not what I wanted to do. Why not, as I am learning to use Ruby, use it to parse the existing HTML into a new file, a txt file in this case and then run script to rename the new into the old files, with links that use the traditional target attribute to open a new browser.
Click here to see what I did to parse the existing HTML files into TXT files.
Click here to see the copy of the TXT into HTML files.
Saturday, June 10, 2006
What are we thinking?
What got me thinking about this was an article that I ran across by Dave Hunt and Andy Thomas entitled, Software Archaeology. In it the authors state:
Archaeologists generally don’t make wisecracks about how stupid a particular culture was (even if they did throw dead bodies into the only good drinking well). In our industry, we generally don’t show such restraint.
As stated above, it has been my experience that in the software development field, we are too quick to criticize. They then go on to write:
But it’s important when reading code to realize that apparently bone-headed decisions that appear to be straight out of a "Dilbert" cartoon seemed perfectly reasonable to the developers at the time. Understanding "what they were thinking" is critical to understanding how and why they wrote the code the way they did. If you discover they misunderstood something, you’ll likely find that mistake in more than one place. But rather than simply "flipping the bozo bit" on the original authors, try to evaluate their strengths as well as weaknesses. You might find lost treasure—buried domain expertise that’s been forgotten.
Therefore instead of just asking, "What were they thinking?” we need to consider “What and how are we thinking?" to get the most out of the code that we sometimes unearth and/or must excavate.
Sunday, May 21, 2006
Ego is not your friend
It has been my experience that my ego, if not monitored, can cause me to view my present lack of understanding in an incorrect way. The reality is not that I lack the ability to understand the information, but rather I lack exposure to the information. From that aspect, I am now informed about what I need to learn. Moreover, if I do understand a topic better than someone else, this does not mean that my level of intelligence is greater. It simply means that I have been made aware of the topic and have taken the time to learn. Otherwise, my ego could falsely cause me to think that I am more adept than I am in reality and cause me to not consider various aspects of a topic, since I think I understand more than I do in reality.
In summary, either by causing one to think they can not improve or that they have no need to better their understanding, ego is not your friend.



