Team. The leader of the local JAVA User's Group (JUG) provided us with some resources on Source Code Management (SCM). He suggested that using a Git repository might be a better choice than Subversion (SVN). Java.net offers Git as an option for the repository so we will consider this over the next couple of weeks.
We hope that this project has sparked some ideas which you might find useful in your own projects. Reflection is a very powerful feature of JAVA, and we have only used a small portion of its strength when dynamically invoking methods.
"Reflection is commonly used by programs which require the ability to
examine or modify the run-time behavior of applications running in the
Java virtual machine. This is a relatively advanced feature and should
be used only by developers who have a strong grasp of the fundamentals
of the language. With that caveat in mind, reflection is a powerful
technique and can enable applications to perform operations which would
otherwise be impossible."
- Oracle Learning Trail on Reflection
http://docs.oracle.com/javase/tutorial/reflect/
There is a computational overhead associated with reflection and dynamic invocation in JAVA. This is true with all compiled languages which support dynamic invocation such as C/C++, but the benefits of the CABOOSE approach is shorter development cycles, simpler application maintenance, and lesser developer learning curves. These are simply the trade-offs.
This performance penalty will also be in present in the compiled C# when we develop our .NET port. But, based upon how one dynamically invokes a method in the interpreted scripting languages: PERL, PHP, and Python, this computational overhead might not be as "great".
Remember: Hunt. Peck. Think...Enjoy This Day...La-La.
Notes on the development of a general-purpose controller for JAVA Enterprise Edition web applications plus various topics in computing and software engineering including Oracle's MVC 1.0 Ozark product.
Monday, March 30, 2015
Saturday, March 28, 2015
Progress on SCM - JUG Help
Team. We are making progress on placing the local source repository online at java.net. We will be getting some help from a leader of the local JAVA Users Group this weekend since we have not received any response from the java.net team yet. Our biggest concern is making a decision that limits the flexibility of the online repository in the future, results in time consuming data transfers for future builds, or requires intervention on the part of the administrators at java.net. So, we thought that we would ask someone with more experience.
If we have not received any guidance by next Saturday, we will simply do our best and learn from any mistakes that we make. We hope that you enjoy this weekend! La-La.
If we have not received any guidance by next Saturday, we will simply do our best and learn from any mistakes that we make. We hope that you enjoy this weekend! La-La.
Wednesday, March 25, 2015
A KIS Approach for String Substitution Projects | Simplifying Make and JAVA's Ant
***Synopsis***
In
short, we will process all of the tile elements with an order attribute of zero
first. Then those with a order of one and so on. We will let the JEE
engineer determine what this order should be. This will occur if we implement the string substitution projects since such an approach simplifies the complexity of the required methods. We feel this is consistent with our Keep It Simple (KIS) design goal. In term of Lines Of Code (LOC), it is also minimizes the size of the code base.
*************
Team. One of our members has a rather active imagination and
while enjoying some light exercise on Monday evening, he claims that he had a
moment of inspiration. This inspiration came in the form of the remembered
voice of a childhood friend who shed some light on simplifying the
implementation of our string substitution projects. He was thinking of a
completely different subject and considered the importance of “Keeping It
Simple”. Then, the echo of the young voice of his childhood friend said “Just
number them, duh!” Then he remembered that the simple things of this world
shall confound the wise and a child shall lead them.
Immediately, he
thought of the string substitution projects plus the implementation cost of
creating data structures for representing graphs and determining the critical
path, depth, for each node. These tasks should only be done once. We decided
that these string substitution “project management computations” should be done once
at design-time by the JEE engineer and “hard-coded” in the view instead of
being computed by the general purpose servlet upon every view-request. This choice will simplify the
design of the general-purpose web-script. In the future, we can always provide
a developer’s utility which reads directory.xml
and makes these calculations. This would ease the developer’s tasks, and
we would make it available sometime after the implementation of this feature.
The notion of string substitution projects was somewhat of a
“brainstorm”. We were not sure it they are absolutely necessary; however, a
condition might occur that requires the processing of stencil replacement tiles
in a set order. Because we are “highly-learned” individuals, we first
considered the approach used in make files and building directed acyclic
project graphs for resolving these dependencies. But, we also promised that we
will Keep It Simple (KIS), because “educated” fools have ways of
confusing ourselves and others. So, we unlearned a few things in order that we
might create a simpler implementation of this concept.
We will let the JEE engineer design the substitution project
on paper in the form of a PERT chart with directed edges of length one and
describe the project in the tile elements of a view using the optional attribute
“order”. All tiles without an “order”
attribute will be given an order of zero. Tiles will be processed based upon
their given order until all of them are exhausted. If “TILE_B” should be
processed after “TILE_A” and before “TILE_C”, it should have an order greater
than “TILE_A”’s and less than “TILE_C”’s. Also, for processing efficiency the
maximum order should be minimized. We might still allow for the “parent”
attribute which we discussed on 03.23.2015. This will document dependencies but
not serve any processing purpose. Such documentation will simplify the view’s
maintenance.
For more on PERT chart view the first section of this Adobe PDF file :
It was likely prepared for a students of a software engineering or business management course who were learning about project management. You can ignore the section on probabilistic PERT charts and crash times. Those concepts are for managing the uncertainty of task completion in the times allotted by management.
Befuddled? If so, we apologize. For those of you familiar
with JavaScript, CSS, and Dynamic HTML, you have probably encountered a
property of graphical user interface objects called a z-order. This is the
ordering in which the objects are rendered along the z-axis which extends
perpendicularly from the screen. Zeroth order objects are shown first with
first order objects stacked on top at the appropriate (x,y) or (left, top)
coordinate. Second order objects appear above these and so on. In the same
manner that a web browser renders its visual objects, we will process the
string substitutions for a view based upon a sequential ordering. Hopefully,
this explanation unravels the conundrum. As said before, this feature will not be
in the first release and will probably occur at the same time as keyword
translation.
Interestingly enough, this might enhance the speed of a make
utility’s processing. But that is only speculation. We have never built make or
JAVA’s ant from scratch; however, we have briefly worked in an environment
where the product make took over an hour. The dependencies among files were
basically stable, but there were hundreds of them. And, they required resolving with each build.
We will keep hunting, pecking, and thinking. Please do the
same. La-La.
Monday, March 23, 2015
Direct Web Remoting | JUG Presentation in May
Team. Direct Web Remoting (DWR) is another technology found at java.net that might be worth learning about. It creates a convenient connection between client-side JavaScript and server-side JAVA servlets. Its index page is at www.directwebremoting.org . We are reviewing the coding, documentation, and testing. We will do our best at deploying the source without support for keyword translation or string replacement projects in a few weeks. Our first presentation of the CABOOSE concepts are scheduled at the local JAVA User's Group in May. Happy Coding. La-La.
Friday, March 20, 2015
Long-term Goal for CABOOSE - String Substitution Projects | Housekeeping
Team. I dawned on us that the order in which one replaces the tile variables in a CABOOSE stencil might have internal dependencies. In other words, #TILE_B# must be replaced after #TILE_A# and before #TILE_C#. It seems that, in some cases, the process of string substitution will follow the pattern of a mini-project which one can describe with a PERT chart, an acyclic directed graph. We felt that the best way of addressing this condition was adding an attribute in each tile element called, parent, which list all of the tiles upon which processing in the current one depends. Of course, as with project management we will start at an initial placeholder task and then process each of it descendants in a breadth-first manner. Also, we will only attempt replacing each tile once. It would be best if one created highly cohesive tile handlers which did not effect the efforts of any other, but this might not be achievable in all instances.
Also, we will add a pair of housekeeping tiles which will expect empty-strings by contract. One will be #BEFORE# and the other will be #AFTER#. #BEFORE# will occur before the start substitution tasks and #AFTER# will occur following the finish task. This will allow for any housekeeping that one might consider doing for one or more of the application views. One could simply create a common before or after handler for more than one of the views. This lets us partition certain aspects of view processing well!
A few thoughts before the weekend which we hope that you enjoy! La-La.
Also, we will add a pair of housekeeping tiles which will expect empty-strings by contract. One will be #BEFORE# and the other will be #AFTER#. #BEFORE# will occur before the start substitution tasks and #AFTER# will occur following the finish task. This will allow for any housekeeping that one might consider doing for one or more of the application views. One could simply create a common before or after handler for more than one of the views. This lets us partition certain aspects of view processing well!
A few thoughts before the weekend which we hope that you enjoy! La-La.
Wednesday, March 18, 2015
03.2015 JAVA Users' Group
Team. We enjoyed a wonderful JAVA Users' Group (JUG) meeting yesterday evening. The topic was functional programming with groovy. A classic text by Michaelson on functional programming can be found at:
http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ref=sr_1_2?ie=UTF8&qid=1426684397&sr=8-2&keywords=Functional+Programming
Also, there is an O'Reilly text on functional programming with JAVA by Dean Wampler. It also has some value, but if you can only purchase one the text by Michaelson would be best since it is basically "language neutral". Besides, the Wampler text (2011) is pre-JDK 8 which has support for lambda expressions.
For those who love the notion of "free", here is an Adobe Acrobat file on functional programming for your e-reader:
http://usi-pl.github.io/lc/sp-2015/doc/Bird_Wadler.%20Introduction%20to%20Functional%20Programming.1ed.pdf
With the proliferation of the map-reduce paradigm on computing grids and JAVA, the new COBOL, having support for lambda expression in its eighth release, functional is fashion-able again. When categorized by the nature of the instructions, there are four primary paradigms for computing: imperative, functional, declarative, and logic.
Examples of imperative languages are: COBOL,FORTRAN,Algol, PL/1, Pascal, Modula, C/C++, JAVA, PERL, PHP, Python, and etc.
Examples of languages used for functional programming are: LISP, Scheme, Clojure, JAVA, Haskell, Miranda, C#, JAVA, ML, Python, and Scala.
Examples of languages for declarative programming are: JAVA Fx, Prolog, and SQL.
And, the best known logical programming language is Prolog.
You will see that some languages fall in more than one category and JAVA is in three of four.
Remember, JAVA has a dual goal of universality, being ubiquitous and applicable for every computing need. This is quite a daunting task. If the custodian of JAVA, currently Oracle Corporation, achieves this, JAVA will be the first "universal" high -level language in history. This is something which many claim is impossible, but JAVA is gradually approaching its goal as the JAVA Virtual Machine (JVM) proliferates.
If you are interested in learning more about the various types of languages, visit this Wikipedia article:
http://en.wikipedia.org/wiki/List_of_programming_languages_by_type
We will keep you abreast of our progress. La-La.
http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ref=sr_1_2?ie=UTF8&qid=1426684397&sr=8-2&keywords=Functional+Programming
Also, there is an O'Reilly text on functional programming with JAVA by Dean Wampler. It also has some value, but if you can only purchase one the text by Michaelson would be best since it is basically "language neutral". Besides, the Wampler text (2011) is pre-JDK 8 which has support for lambda expressions.
For those who love the notion of "free", here is an Adobe Acrobat file on functional programming for your e-reader:
http://usi-pl.github.io/lc/sp-2015/doc/Bird_Wadler.%20Introduction%20to%20Functional%20Programming.1ed.pdf
With the proliferation of the map-reduce paradigm on computing grids and JAVA, the new COBOL, having support for lambda expression in its eighth release, functional is fashion-able again. When categorized by the nature of the instructions, there are four primary paradigms for computing: imperative, functional, declarative, and logic.
Examples of imperative languages are: COBOL,FORTRAN,Algol, PL/1, Pascal, Modula, C/C++, JAVA, PERL, PHP, Python, and etc.
Examples of languages used for functional programming are: LISP, Scheme, Clojure, JAVA, Haskell, Miranda, C#, JAVA, ML, Python, and Scala.
Examples of languages for declarative programming are: JAVA Fx, Prolog, and SQL.
And, the best known logical programming language is Prolog.
You will see that some languages fall in more than one category and JAVA is in three of four.
Remember, JAVA has a dual goal of universality, being ubiquitous and applicable for every computing need. This is quite a daunting task. If the custodian of JAVA, currently Oracle Corporation, achieves this, JAVA will be the first "universal" high -level language in history. This is something which many claim is impossible, but JAVA is gradually approaching its goal as the JAVA Virtual Machine (JVM) proliferates.
If you are interested in learning more about the various types of languages, visit this Wikipedia article:
http://en.wikipedia.org/wiki/List_of_programming_languages_by_type
We will keep you abreast of our progress. La-La.
Monday, March 16, 2015
Draft Verification Document
Team. We found a couple of hours this morning for quickly sketching a draft verification document.
Verification Document
It can be found on Google Drive at:
https://drive.google.com/file/d/0B101EUHMgepNNElETnZVaTB3ZW8/view?usp=sharing
This is only a quick draft and will be revised in the future.
Subversion Repository
We are still waiting on a response from the java.net team about how we can properly place the repository online without putting limits on future revisions.
Enjoy This Day. Hunt-Peck-Think.La-La.
Verification Document
It can be found on Google Drive at:
https://drive.google.com/file/d/0B101EUHMgepNNElETnZVaTB3ZW8/view?usp=sharing
This is only a quick draft and will be revised in the future.
Subversion Repository
We are still waiting on a response from the java.net team about how we can properly place the repository online without putting limits on future revisions.
Enjoy This Day. Hunt-Peck-Think.La-La.
Saturday, March 14, 2015
Revised Posting Schedule
Team. As we move forward. There likely will be new post on Monday and Friday of each week. Many of the ideas which we have related with general-purposeness, concern partitioning, and web services have been presented in the earlier notes. Also, only posting twice per week will free up some time for other pursuits. This ultimately will result in more hours for the CABOOSE project.
For the outstanding tasks, the test cases are on the way, and we have not heard a response from java.net about properly transferring the repository. We will try dumping our local repository and the loading the online repository with the output "dump" file. We will compare our activities with our last plan and forecast what we will be doing for the next few week in a future post. Enjoy This Day. La-La.
For the outstanding tasks, the test cases are on the way, and we have not heard a response from java.net about properly transferring the repository. We will try dumping our local repository and the loading the online repository with the output "dump" file. We will compare our activities with our last plan and forecast what we will be doing for the next few week in a future post. Enjoy This Day. La-La.
Tuesday, March 10, 2015
Notes on Prototyping. Apologies
Team. There is an interesting paper on prototyping available from some folks at Apple. It can be found at : https://courses.cs.washington.edu/courses/cse440/12au/readings_files/Houde-Prototypes.pdf . The video went well this weekend, and, besides the papers, we are wrapping up a short non-technical book which has been delayed for three or four months, so bear with us on those test cases. They are coming. Hunt. Peck. Think. and Enjoy Your Day. La-La.
Friday, March 6, 2015
Interesting JAVA User's Group - Talk by Venkat S. on Reactive Programming
Team. We had an enjoyable and informative talk by Venkat S. of www.agiledeveloper.com on 03.02.2015 at our local JAVA User's Group. He spoke of agile development and the new derivative paradigm called reactive programming. You can visit his website for more details. If he speaks in your area, do not miss his great talk.
Also, there might be another week's delay in the test cases. It looks as if our Saturday person-hours will be allotted for creating a memento video for a family whose near relative received NFL Team Hall of Fame honors last Fall. We simply must take this iron out of the fire and cannot postpone this effort past this weekend. It probably will take about all of our weekly eight hours in the creation and editing of this multimedia photo montage. We will do our best at politely saying "no" when asked if we can help with projects that will compromise our time on this CABOOSE effort in the future.
We are waiting on a response from JAVA.net about the proper method we should for placing our local repository online. Should we dump and load, mirror with svnsync, or do something different. We do not have a resource with much experience in SCM repository management and administration.
Enjoy this weekend. Hunt. Peck. Think. La-La.
Also, there might be another week's delay in the test cases. It looks as if our Saturday person-hours will be allotted for creating a memento video for a family whose near relative received NFL Team Hall of Fame honors last Fall. We simply must take this iron out of the fire and cannot postpone this effort past this weekend. It probably will take about all of our weekly eight hours in the creation and editing of this multimedia photo montage. We will do our best at politely saying "no" when asked if we can help with projects that will compromise our time on this CABOOSE effort in the future.
We are waiting on a response from JAVA.net about the proper method we should for placing our local repository online. Should we dump and load, mirror with svnsync, or do something different. We do not have a resource with much experience in SCM repository management and administration.
Enjoy this weekend. Hunt. Peck. Think. La-La.
Monday, March 2, 2015
Test Cases Delayed | Unrelated Papers Pending
Team. The test cases will be delayed for about a week. Events arose that wiped out our Saturday's work effort. This is the only day during the week in which we can get much done. Also, the message posting this week will be sporadic. It should resume with regularity next week. A couple of paper deliverable dates are pressing and taking time away from CABOOSE.
In the meantime, here are some documents outlining coding conventions in various languages:
JAVA
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
NET
https://msdn.microsoft.com/en-us/library/ff926074.aspx
PERL
http://perldoc.perl.org/perlstyle.html
PHP (Pear)
http://pear.php.net/manual/en/standards.php
Python
https://www.python.org/dev/peps/pep-0008/
Following coding standards is important, and it is likely that the current CABOOSE codes deviates from the JAVA style guide above. We will revise the instructions as necessary so they are consistent with what Oracle expects. This is a project for future weeks.
Also, we have contacted the java.net staff with questions about creating the online Subversion repository. We are not well-versed in Subversion and Source Code Management (SCM) repositories and are hoping that we can avoid making an irreversible choice that will limit the CABOOSE project in the future.
We also are quite excited about the upcoming local JAVA User's Group which discusses reactive programming. If you have not attend such a meeting, you have missed out on a very informative and enjoyable time. We will keep you abreast of our progress on CABOOSE. Have aWonderful Week. La-La.
In the meantime, here are some documents outlining coding conventions in various languages:
JAVA
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
NET
https://msdn.microsoft.com/en-us/library/ff926074.aspx
PERL
http://perldoc.perl.org/perlstyle.html
PHP (Pear)
http://pear.php.net/manual/en/standards.php
Python
https://www.python.org/dev/peps/pep-0008/
Following coding standards is important, and it is likely that the current CABOOSE codes deviates from the JAVA style guide above. We will revise the instructions as necessary so they are consistent with what Oracle expects. This is a project for future weeks.
Also, we have contacted the java.net staff with questions about creating the online Subversion repository. We are not well-versed in Subversion and Source Code Management (SCM) repositories and are hoping that we can avoid making an irreversible choice that will limit the CABOOSE project in the future.
We also are quite excited about the upcoming local JAVA User's Group which discusses reactive programming. If you have not attend such a meeting, you have missed out on a very informative and enjoyable time. We will keep you abreast of our progress on CABOOSE. Have aWonderful Week. La-La.
Subscribe to:
Posts (Atom)