· · Coding
· · · Java
Silly Java Strings
· Being a hyper-pedantic note about turning bytes into Java strings and a small fix for a smaller and almost-purely-aesthetic but ubiquitous problem. [Update: Heavily revised with a better solution.] ... [13 comments]
Puzzling IDE Evidence
· Eclipse’s Ian Skerrett reports that their market share is up to 65% and growing, and that NetBeans sank in the last year, based on a plausible-looking survey from BZ Research (publishers of SD Times and Eclipse Review). David Berlind is thinking about me buying him dinner next year. But wait: Roman Strobl ripostes, showing the numbers of unique instances of NetBeans that are used enough to be calling into the update center looking for patches; and it shows quite a different picture. First, this is a genuinely interesting statistical anomaly. I don’t think for a second that either Ian or Roman is lying; there are some good suggestions as to what might be going on in both Ian’s and Roman’s comments. Second, I love this competitive spirit; when engineers try to top each other, customers win.
· What happened was, I got coder’s block; facing an icky part of my Sigrid/Zeppelin side-project, I procrastinated for weeks because all of a sudden everything else became more interesting. Well, I’m supposed to talk about it at Java One and I’ve refactored large parts of it to the point where it doesn’t work any more. So I’ve increasingly been spending my time slaving over a hot NetBeans 5.0. There is absolutely no better way to find out the truth about software than actually using it to get real work done. Note: I’m doing all-POJO low-level infrastructure, so I don’t know the first thing about JSF’s and Layouts and Web Services and all that stuff. Having said that, for what I’m doing, NB5.0 is fucking good software. Among other things, it’s really really fast on my PowerBook, and speed is a feature (although to get the most out of it you need a bigger screen). Yes, the Ultra 20 is faster on compiles, but I’m having trouble getting it on VPN so it can talk to CVS, and for interactive on-screen work, the difference isn’t significant. Anyhow, I’m keeping a running RFE list; for those not in the software biz, that stands for Request For Enhancement; they arise when a customer says “Your stupid software is broken, it should do X” and some hard-ass manager with his eye on the ship date says “That’s not a bug, it’s an RFE.” If I were a Good NetBeans Citizen I would go find the right web forms and submit bugs and RFEs and so on, and maybe I will. But right now I’m in a hurry and (muahahaha) I’m a blogger! So I’ll just use this post as a place to track ’em. The rest of this is only of interest to IDE interface geeks and NetBeans phanatics ...
Nexenta/NetBeans/OS X Notes
· I’m running NetBeans 5 on my Ultra 20, using Nexenta GNU/Solaris as the OS. This buys a lot of performance, but I only want to have one screen/keyboard, so I’m routing the UI through my Mac via X11. I don’t know how common a scenario this is going to be, but early indications are it’s a damn productive working environment. I’m discovering some things, so I’ll post them here as I go along in case other people run across some of the same issues. [Update: Keymapping progress, whines, and bugs] ...
· It’s hit the street. I use it, I like it. Hmm, looking at the list of new stuff, I think that “I use it” statement is potentially misleading. I’m a POJO kind of guy, I probably only use a quarter of the features. So I guess I can say for sure that I like 25% of it. In particular, I can say that each of these point releases gets a little sweeter for us Macintoshians.
· I’m happy to announce that sometime in early 2007, David Berlind will be buying me a nice dinner. Today, David wrote a piece noting that Lattix (interesting outfit, by the way, check out the demo) is joining Eclipse, and concluding “Is it time for NetBeans to finally throw in the towel?” Misguided of him, I thought. So I’ve proposed a bet: we’ll have a nice dinner together first time in ’07 that we’re in the same city. If, at that time, David still thinks that throwing in the NetBeans towel is a good idea, I’ll buy dinner. Otherwise he buys. Fortunately for David, my tastes in food and wine are fairly plebian.
· I tried out Joshua Marinacci’s recent Netbeans on Mac Tip (different GC setting) and it worked like a charm. I suspect that this ought to be the default setting for NetBeans on most systems. I talked to a NetBeans insider in Prague and he mumbled about hard-to-reproduce weirdness with this setting on previous NetBeans & Java releases, but I haven’t seen a single hiccup. It turns out that on the AMD64 systems, lots of people are running more or less everything Java in
-server mode. Hmmm.
· I just shifted to the Beta 2, which is nice because I’d been running the nightlies to get around an irritating little bug, and that’s kind of living dangerously. Herewith a progress report, a practical warning about a CVS gotcha, and a predictable gripe. If you’re interested in this stuff I’ve written about it lots. [Update: Dave Johnson offers some slightly-tougher love.] ...
· The NetBeans guys have been doing a lot of chest-thumping about how great the CVS support is in the beta. I’d never tried it, but I wanted to check in a bunch of code today. I’ve been doing command-line check-in from my Mac to my servers for a long time and it’s Just Worked. Only I hadn’t done any CVSing for a couple of months and furthermore I needed to create a whole new top-level project. Here’s a confession: I’ve never actually set up or administered a CVS, someone else has already done that and I’m basically just a status/diff/update/commit script kiddie. But how hard could it be? After a half-hour I was getting irritated because I just couldn’t figure out the (doubtless obvious) incantation to get my code in. So I went back to the NetBeans beta and said “import this project” and it asked a couple of sensible questions and then it all Just Worked. Then I made some minor changes and did some check-ins to make sure it wasn’t just smoke & mirrors. I’m always a little nervous when software automates away something that I’ll probably have to know how to do someday (“pay no attention to the
cvs -d behind the curtain”), but so far it’s really smooth.
NetBeans 5 Beta
· Late on Tuesday the 27th, the NetBeans guys I was talking to in Prague had to break for a go/no-go meeting on the Beta. I said “Mind if I come along? I’ll just listen.” Of course when they went around announcing the people at the table and on the phone (NetBeans is very distributed) someone piped up “Tim Bray’s here and he’s gonna blog every word.” I won’t, but I do have some entertaining stories about the visit and the launch ...
NetBeans 5 Beta
· Yesterday I was in fly-on-the-wall meeting in Prague when they decided to ship the 5.0 Beta; today I’m sitting in pina, an Internet café in Koper, Slovenia where the WiFi is free as long as you drink, and just heard that the button has been pushed. I don’t have time now to tell my interesting NetBeans stories; I’ll post them here, but in the meantime, go check out that beta.
In or Out?
· I have previously questioned the what seem like weird method names in Java’s newish ProcessBuilder API. It turns out that its not-newish-at-all close personal friend Process is little strange too: it has
getInputStream which respectively get you pipes to the process’ standard input and output. Data comes out of the Process and you want an
InputStream, so it has to be
getInputStream. But how can
getOutput get you the input while
getError gets you the error? OK, call me anal, I can take it. But I’m writing a class right now kinda like
Process, and I simply absolutely can’t bring myself to call the input the output and vice versa. So I have
getTaskError, which produce output, input, and input streams respectively. We all have to deal with the confusing nature of reality in our own ways.
· I’ve been running the NetBeans 5.0 pre-beta for a week or two now, and I thought I’d post some real-time notes for what I turn up. Summary: some really neat stuff, fewer bugs than you’d think, one major disappointment. [Update: Alt-P is gone, good.] ...
· I was pretty upset by Elliotte Rusty Harold’s flame the other day—not upset at Elliotte, but at the legal barbed-wire someone had set up in front of NetBeans. I, among others, rattled some cages, and then today this cautionary tale showed up on Tim Boudreau’s blog. As I read it, I got madder and madder and madder, because it seemed like Tim was on the wrong side. I’ve worked with some of the lawyers at Sun and been very impressed, so I assumed that this issue was just an oversight to be corrected; but it sounded like Tim was saying “if you hold your head sideways and squint, you can see that black really is white”. I was getting ready to do a little flaming of my own, then I got to the end of Tim’s piece, and it turns out they’re going to do the right thing. So whether black is (legally) white or not, nobody else is going to have to turn their head sideways and squint.
· Item: For those of you who migrated from Emacs, you can easily teach NetBeans control-F/B/N/P/U/D: go to Tools - Options - Editor Settings - Global Key Bindings. Huge time-saver, and this should be the default on OS X, since basically every other text control has those bindings wired in. Item: I upgraded all at once to OS X 1.4, and Java 1.5, and NB 4.1 (from a release candidate), and a lot of JXTA libraries, and things are slowing down. I don’t like this; in particular I hit control-space for autocomplete or F9 for compile and it sometimes has to think for a second first, which is nuts. [Update: Fixed it! I had stupidly put all the support libraries that JXTA needs to run into the compile-time list, so they were going on the classpath. Take ’em all out and it’s back to nearly instant.] Item: Project Coyote is coming along nicely, and it’s increasingly obvious that dynamic languages on the JVM are going to be huge. Item: NetBeans Day at Java One looks like it’ll be serious fun. Item: (This is not NB-specific.) When I go grab a new API, it’s just way too much work to tell the IDE about it and get the jars and Javadocs in place. There ought to be a standard way to package a Java API so that you can point your IDE at some URI and it All. Just. Happens. Item: Here’s a nice feature, does any IDE have it? When I say
Ziggarut z = new Ziggarut(bricks, stones);
then the IDE should figure out that that’s a
com.textuality.3d.Ziggarut and insert the appropriate
import statements for me, it’s a total waste of time for me to go poking around trying to remember where that was. [Oops: NetBeans has “Fix imports”, Eclipse is pro-active about suggesting it, and the IDEA cult assured me (as usual) that they have something even better.]
How To Make NetBeans Better
· I had a revelation today: while I sometimes work with a big screen, I normally leave NetBeans at the default size for my laptop screen. I try hard to keep methods small, so it’d never occurred to me to hit the little green “maximize” button. Today, one of my (JXTA-wrangling) methods kept growing and growing, and without thinking I threw 2.3 million pixels at the problem. Holy cow... I’ve been coding with one arm tied behind my back. Developers everywhere: get more pixels. You need them, whether you know it or not.
· Now online here. First impressions including complaints, and a blogging-policy conundrum ...
· Last Wednesday, NetBeans 4.0 was released, and I have a little add-on announcement too. I’ve written before about NetBeans here, here, here, and here: it’s fast, it’s slick, it’s Ant-based, it does what I need. The only thing they’re excited about in 4.0 that I haven’t already talked up is the fact that J2ME/MIDP and Tomcat are built in; in fact, the NetBeans guys like to point out that you can do most things out of the box without having to hunt down and install plug-ins. In bad news, I have a significant gripe with NetBeans. In good news, we’re doing something about it ...
· It’s pretty clear that dynamic languages are a hot area, maybe the hottest, in the world of software development. We need to do more to make them easily usable by people in the Java ecosystem. So on Tuesday we held a summit here at Sun, with a few of our internal Java leaders, and on the dynamic-languages side, Larry Wall and Dan Sugalski (Perl and Parrot), Guido van Rossum, Samuele Pedroni and Sean McGrath (Python), and James Strachan (Groovy). It was an educational day for us; herewith some take-aways and pictures ...
· Which in English means “NetBeans 4.0 Release Candidate 1”. I’d been distracted from work on the Zeppelin project for a couple of months but have upped tools again and the tool is NB4RC1. The news is mostly good ...
IDEs and their Projects
· I just finished moving my project Zeppelin development over from NetBeans 3.6 to the 4.0 beta. It’s really very nice now that I’ve got it going. The problems were all in the Projects subsystem, which in my experience is often the Achilles’ heel of IDEs ...
NetBeans Profiler Yee-hah!
· This will be (blush) my first unqualified over-the-top fannish rave about a piece of Sun technology. Those who are not Java geeks, and those who don’t worry about application performance, and those who are embarrassed by unabashed boosterism can all move right along, nothing to see here. Well, there’s also a funny Emacs/Gosling footnote [... which I updated since many people wrote me that I had misattributed Emacs] ...
· Via Moazam Raja, a pointer to the truth, the whole truth, and nothing but the truth on Java garbage collection. This will be interesting to only 1% of even the hardest-core geeks, but for those people it will be real interesting. My current skunkworks is called Project Zeppelin, and I just know that I’m going to need to know this stuff. Moazam has more goodies—his own, nothing you can find at docs.sun.com—here.
· Well, I think Genx is pretty well put to bed. (Need to generate XML? Need digital signatures? You need Genx.) So, in between endless phone/chat about WS-Uncluttering and Jython packaging and IETF process, I managed to start sketching out some next-project ideas today. And it’s going to be Java, I’ve been in the C-language mines for the past few years and that’s OK, but I work for Sun now and I ain’t going near Solaris internals, so Java Roolz OK ’round here, you hear? Wow, it’s grown since the last time I was in the neighborhood. Hey, I just loaded Ustr into NetBeans and it Just Worked, even got JUnit to run all the tests. This “object-oriented” stuff, it’ll catch on, just watch.
By Tim Bray.
I am an employee
of Amazon.com, but
the opinions expressed here
are my own, and no other party
necessarily agrees with them.
A full disclosure of my
professional interests is
on the author page.