How to Rethrow an Exception Without Wrapping them - Java Wiki
Some do's and don't's with exceptions
1. Unless you have a very good reason to catch an exception, don't catch it.
2. If you can correct the problem implied by the exception. eat the exception, because you fixed it. However there are some exceptions that it is unwise to catch.
3. If you can provide additional information about the exception. catch the exception, and re-throw it as an inner exception with more information. This is a very good reason to catch an exception, but note that we are still re-throwing it.
4. Always try to catch specific exceptions. Avoid catching System.Exception whenever possible.
Comment regards to "An importance of wrapping variables"
File file = ...
...
logger.info( "unable to open file: file-name={0}", file );
Doing this has three key advantages. The first is that the ease of adding relevant data to the message is trivial. This then encourages messages that truly aid monitoring and debugging. The second is that there is a very low performance cost to logging in that if the message is never used (due to the log level) then the only cost to making the call is loading and unloading the stack.
The second advantage becomes significant for debugging messages. For example, the debug logger call
logger.debug("{0} moving towards {1}", a, b );
is a far less costly to ignore than is
logger.debug( a + " moving towards " + b );
And especially so in a tight loop. One can argue that you can always check the debug level before making a debug call. In practice, however, this tends to not to be done and instead the useful debug message is never written.
The third advantage is that it is trivial in the logger implementation to both quote and escape the message's parameters. My implementation passes them through a JSON converter so that I can also see the internals of the parameter's values.
SaaS + Java + Exchange ideas & tools
If you are a SaaS + Java shop in RI, MA, or eastern CT and would like to talk about tools and processes please contact me at andrew@andrewgilmartin.com.
Co-working in South Kingstown, RI
If you would like to discuss this further please contact me at andrew@andrewgilmartin.com and we can organize a meeting where the first half is informational and the second is planning.
Update: Everyone likes the idea but I was not able to get anyone to commit. When you work for "free" from home, at cafes and at libraries, paying a $100/month is lot less appetizing. It will happen one day. Just not for me this summer.
Apple's Java source and javadoc
/Library/Java/JavaVirtualMachines/1.6.0_22-b04-307.jdk/Contents/Home/
If you are using NetBeans you will need to add this as a new "Java Platform". This posting assumes you called the platform "JDK_1.6". Once you have created the platform you will need to manually fix how javadoc is used. To do this, in the file
~/.netbeans/6.9/config/Services/Platforms/org-netbeans-api-java-Platform/JDK_1.6.xml
edit the //javadoc/resource element so that "!/docs/api/" is appended. For example,
<javadoc> <resource>jar:file:/Library/Java/JavaVirtualMachines/1.6.0_22-b04-307.jdk/Contents/Home/docs.jar!/docs/api/</resource> </javadoc>
For some reason, Netbeans emends the source resource with "!/src/" but not the javadoc resource.
Commutative data types and their operations is a powerful idea.
Downgrading my iPhone to iOS 3
One-liner to find all occurrences of property names within a stream of text
cat * | perl -ne 'while ( /\G.*?([-a-z\.]+\.enabled)/gi ) { print "$1=x\n"; }' | sort -u > /tmp/enabled
This posting is mostly to remind me that 1) print "..." while /.../ does not work and 2) to use \G to anchor the regular expression to the first and/or last match.
Having a Java generic class return a type reference to its specialized class. Aka, using the self-type.
public class GenericsTest {
// We have a generic type here that needs to return from its check method
// a reference to the specialized type (that is, the generic's sub-class).
static class Common<SelfType extends Common<SelfType,ElementType>,ElementType> {
protected SelfType self() {
return (SelfType) this;
}
public SelfType check( ElementType e ) {
// do something here that is general to all sub-classes
return self();
}
// ...
}
static class Foo extends Common<Foo,Integer> {
public Foo doFoo() {
// do something here is is specific to Foos
return this;
}
}
static class Bar extends Common<Bar,String> {
public Bar doBar() {
// do something here is is specific to Bars
return this;
}
}
public static void main( String[] args ) throws Exception {
Foo foo = new Foo();
Bar bar = new Bar();
foo.check(1).doFoo();
bar.check("a").doBar();
}
}
// END
Tools needed to support a simple content organization and workflow
When this happens, it is then possible to create your own tools that support your workflows. (Note that in this posting I am concerned with explorer integration and not command line integration.)
Unfortunately, this has not been the norm and so we have iPhoto, iTunes, etc, having there own content organization that is independent of the file system. These content specific explorers are often created due to the weaknesses in extending the system's explorer but mostly it is because creating another explorer is just easier to both imagine and code. The up-shot is that we have organizational silos with little integration between them. And, worse, the inability to create your own specialized tools from the integrations.
This Sunday I spent far too much time tracking down tools that would allow me to use the file system to collect and organize content as follows:
1. Each content collection is a folder. I am comfortable with using the file system hierarchy for organizing and I am aware of the weaknesses of hierarchical organization. However, most collections can be organized into a primary hierarchy and augmented either by search or linking (aliases on the Mac and shortcuts on Windows).
2. Each folder will have, at least, one plain text file of dated notes. Each note is separated by a simple delimiter, for example, a row of dashes. My experience is that this one file of notes is much easier to review and keep updated than to place notes into individual files. With that said, a good tool that can hide the file-ness of the notes would be acceptable too. Until then, one file of notes and using Merlin Man's tip for adding content to it <http://bit.ly/a1kfV6> will do fine.
3. The primary hierarchy needs to be supplemented with full text search. Tagging is not enough and, moreover, tagging can be achieved via search by using specialized tokens: For example, in normal English typography a colon is always followed by a space and so the expression ":foo" distinguishes the tag "foo" from the rest of the text. Spotlight on the Mac is the system's full text searching facility. It is extendable so that other content types can be incorporated. The plugin I am looking for would index the dated notes in a file as collection of "records". (This Spotlight feature was introduced in OS X 10.6.) The Spotlight plugin is the most specific tool that I need. While it is a Mac only indexing solution it is based on plain text content and so could be indexed easily under other operating systems. Unfortunately, as far as I can tell, and I spent a good amount of time looking, there is no plugin for indexing delimited content as records. There are plugins for content types that somewhat match, for example mailboxes, but there is no documentation on how to use them outside of their intended application. The up-shot that that for this very simple workflow I can not compose a supporting tool from existing parts. Looks like I am going to have to write my own Spotlight plugin: If anyone has skeleton code I can build upon please drop me a note.
Cat & tail
Using gnuplot to plot a time-series in text
2010-11-06T00:00:01 35 2010-11-06T00:05:01 38 2010-11-06T00:10:02 45 2010-11-06T00:15:01 38 2010-11-06T00:20:02 38 2010-11-06T00:25:01 38 ...Note the two spaces between the data columns. The command line & script to plot this data is
gnuplot <<EOH set terminal dumb set autoscale set xdata time set timefmt "%Y-%m-%dT%H:%M:%S" set xlabel "Date & Time" set ylabel "Count" set title "Requests waiting on connection" plot "data" using 1:2 with lines EOH
which outputs
Requests waiting on connection
Count
160 ++--+--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+---+-++
+ + + + + + + "data" using 1:2 ****** +
| ***** |
140 ++ ****** * ++
| ** * |
120 ++ ** * ++
| * * |
| * * * |
100 ++ * * * ++
| *** * |
80 ++ *** * ++
| * ** * |
| * ** * |
60 ++ **** * ++
| * ****** * |
40 +*************** * *************************** ++
*** ******** |
+ + + + + + + + + + +
20 ++--+--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+---+-++
00:00 02:00 04:00 06:00 08:00 10:00 12:00 14:00 16:00 18:00 20:00
Date & Time
Must easier to see the trend in the data.I found the following helpful in figuring this out http://linuxgazette.net/126/peterson.html.
Update: Use the watch command to turn the graph generation into a dynamic visualization. For example watch -n 60 bash plotting_script will run the plotting_script every minute and update the terminal.
Update: See the bash script timeplot for a useful expression of this posting.
Vi and a little macro to step through a file of data
1) creating a macro to find the next datum and move it's line to the top of the screen
qn /^"http- zt q
2) use the macro to move from datum to datum
@n
I found the following helpful in figuring this out http://www.pixelbeat.org/vim.tips.html.
If you want to change the schools RUN FOR SCHOOL COMMITTEE
Windows Phone 7 is worthy addition to smartphone market
"Nobody seems to be committing themselves to optimizing those 10- to 30-second phone experiences. Everyone is focused on building phones that you can stare at for thirty minutes. If this is truly the path Microsoft has followed, then they've made strong and brave choices."
Welcome to Code City!
Prototype of an Open Web App Ecosystem
http://blog.mozilla.com/blog/2010/10/19/prototype-of-an-open-web-app-ecosystem/
The premise of Open Web App that I WANT to install and application in my browser. I don't want to do this because this ties me and the application to the browser I am CURRENTLY using. I don't use one browser. I don't use one machine. Today I regularly use three machines -- one MacBook, one iPhone, and one Windows laptop -- and four browser instances -- two of FireFox, one of Safari, and one of Internet Explorer. Tomorrow I expect to be using even more machines -- iPads, Android pads, setup boxes, Wii, etc. I don't want to be tied to one machine and one browser -- even if I can choose which ones. I want to be free to sit at any browser on any machine and just use an application and my data.
What I really want is for applications and data to be separated so that I can pick which application I want to use today to surface (visualize) a data repository. More on that another day.
Jim O'Neill must not be reelected to the South Kingstown Town Council
A new independence is needed at Town Hall. One that will work with other councilors and interested parties in moving ideas to action. Do not vote for O'Neill this November.
Please share this note with others.