Translate

Thursday, June 17, 2010

Code work starting on 5.0

Looks like I'm starting code work on Class Viewer 5.0, which may sound strange--don't I know?--but things are different when you're a single developer with a somewhat mature product as Class Viewer is now over 6 years old (first on SourceForge February 2004).

The thing is, you wear all hats. Which means I end up in weird kind of arguments with myself. So the project administrator is worried about a stable baseline, ok have a new beta-5.0 branch, the developer in me wants to toss in all kinds of new features--um, are you sure?--and the project manager is trying to schedule times around my busy schedule for the actual codework. Plus any other jobs that just don't occur to me now while typing this post up quickly.

But at least I feel like I've resolved a lot of issues in my mind that have hampered my interest in development and I'll admit that one longterm possibility is coding for cellphones. And it also turns out that Class Viewer is my primary development tool, so when I think about doing more coding, and opportunities appear to be emerging in doing apps for cellphones, I start looking at ways that it can be a more robust tool for me, and maybe that means something more for others as well from this project (but maybe not).


James

Sunday, June 06, 2010

Back to basics, re-learn Java?

While I've done a little programming here and there--usually a little bit of code for some math research--it's been a while since I've done full-time computer development so I needed to buy a book and found that Head First Java has worked out.

Nicest thing though? It doesn't look to me like I forgot much! But I'll know for sure as I ponder making more changes to Class Viewer. So far so good though with the latest minor update release, but it remains to be seen how much I really still know as I contemplate bigger changes.

Sunday, April 11, 2010

Method searches with Class Viewer

Part of the design philosophy of the Class Viewer project is getting the best method you need for a particular object or to return a particular object, where I also like to warn that one problem with that philosophy is that there is a drop in emphasis, oddly enough, in actually memorizing all the methods associated with a class.

Understanding how powerful Class Viewer is in searching for the perfect method is best done by seeing it in action, where my favorite example is to use the String class, which gives the main screenshot for the Class Viewer project, where you need to know what methods take chars or return them. Using Class Viewer now I can copy and paste to show them:

static String valueOf(char[])
static String valueOf(char[],int,int)
static String valueOf(char)
char charAt(int)
boolean contains(CharSequence)
boolean contentEquals(CharSequence)
static String copyValueOf(char[])
static String copyValueOf(char[],int,int)
byte[] getBytes(java.nio.charset.Charset)
void getChars(int,int,char[],int)
static String join(CharSequence,CharSequence[])
static String join(CharSequence,Iterable)
String replace(char,char)
String replace(CharSequence,CharSequence)
CharSequence subSequence(int,int)
char[] toCharArray()

And that's it. Everything that can possibly give or receive a char in the entire String class, so if you're developing and wonder if there is anything else, nope, not in the String class. That's it. And I did a search on "char", highlighting a method that had "char" from the left window of the app.

But hey, there is another class that can handle chars which is StringBuilder, and yes, you DO need to keep up with knowing classes, just not the methods in them, so it pushes you to only know your classes, as you can just pull out which method you need based on what you will hand them, and what you want them to give back to you.

That is key to the design philosophy: what thing do I have that needs to be given to a class and what do I need it to hand back to me?

Now if you open StringBuilder in Class Viewer you may notice--as I did while pondering what to say in this post--that it has a LOT of methods with "String" in them. But let's say I only want methods that receive just a String, here they are:

AbstractStringBuilder append(String)
StringBuilder append(String)
int indexOf(String)
int lastIndexOf(String)

And that's it. There are no other methods (of course I'm only talking public methods) which will take just a String, and how did I achieve the feat of finding them? I did a search on a method in the left window, highlighting "(String)". That's the easy way. To get just those methods using the "Search String" box in Class Viewer you actually have to search on: (java.lang.String)

You can get fancy searches by what you highlight and search on from the left window, like here's a fun one: "String "

It gives:

String toString()
String substring(int)
String substring(int,int)

And those are all the methods in the StringBuilder class that return a String. That one is kind of tricky as I actually highlighted whitespace, which you can only do with searches on the left hand window. But that can be a very powerful tool. So it's important to emphasize that whatever you highlight in the left window is what is searched, even special characters, like whitespace.

But notice if you were wondering how to get a String from StringBuilder those are the only ways.

Curious about any one of them? Then double-click on the method in the right hand window, and you get taken to javadocs. Here's the link that Class Viewer built for me for the third one:

http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html#substring-int-int-

Which is the final piece to helping you get the best method possible as if you have questions you can go directly to javadocs at the method, which I call deep linking.

So the focus is on what you want the class to give you. Or you can focus on what you wish to hand the class and that is where Class Viewer can help you a lot.

Results above valid with Java 8 SDK.


Editorial notes:

9/27/12 Updated built link to go to latest Java SDK. ___JSH
7/08/14 Updated copied searches and built link to go to latest Java SDK. ___JSH

Friday, November 27, 2009

Class Viewer as an applet

Oh yeah, you can run Class Viewer as an applet. For a while I did have it up at my SourceForge site as an applet but I wasn't sure that was ok, and didn't want it to turn into some kind of reference site.

But anyone can just throw it on a webpage, maybe with their own code's javadocs bundled up in the jar file so that they can access their class information from the web.

Class Viewer is a hybrid app--it runs on the desktop or on the web, with less functionality from the web.

I think hybrid apps are the future of app development.

Saturday, August 22, 2009

Handling low light, two camera review from Pogue

Link above goes to: The New York Times

Quote from the Source:
STATE OF THE ART
Low Light Becomes a Highlight
By DAVID POGUE
Published: August 20, 2009
New cameras from Sony and Fujifilm come with redesigned sensors that mark an important step forward in personal photography.


An interesting review from David Pogue, which has good information about sensors. I'm putting this up partly as a reference for myself later for when I might pick up a camera good in low light as I have been frustrated trying to take nighttime city-scape shots of San Francisco.