Showing posts with label tools. Show all posts
Showing posts with label tools. Show all posts

Jing: A SnagIt alternative for Mac OS X

No comments:
Wow! One of the big things I've been missing in the switch to OS X is an alternative to the excellent SnagIt, by TechSmith. And I have found it in Jing - a free (SnagIt costs $50) utility that is actually much better than SnagIt. Sweet! (Interestingly TechSmith makes both products.)

There are a couple of features that I rather like above and beyond SnagIt:
  1. A nifty sun on the upper left of the screen that invokes it.
  2. In-place editing of the image
  3. Coordination with IM, web, blog, and email. (capturing and sharing video is particularly slick)
  4. History! (This is an incredibly useful feature that shows all the captures you've recently done, whether to disk or to clipboard.)
Alas, there are two important features missing.
  1. Crop.
  2. Capture window contents.
There are some other SnagIt features that I barely used, like funky capture profiles (capture to printer), scrolling capture, and no doubt a few other things.

But overall I'm pleased.

[I would use Jing to show you how it works, but unfortunately it doesn't capture itself! ]
[I found jing by googling "screen shot osx" and reading a macrumors.com page.]

Micro Templating from John Resig: a code review

5 comments:
John Resig (author of jQuery) wrote a little script that implements client-side templating in JavaScript. This is of particular interest to me because I had to write something similar a few weeks ago. This code has a bunch of interesting idioms and features in it. It's unreadably short (IMHO) but here's a breakdown, statement by statment (generally going from outside in):
  1. (function(){})(); This is a new idiom to me; it's just a terse way to define a function then execute it. Contrast this with the YUI idiom that is YAHOO.namespace = function(){}; which usually attaches to a browser event at some point to start things off.
  2. var cache = {}; A private data area. It's a hash because you have to index the cache on the input string. This is an example of memoization.
  3. this.tmpl = function tmpl(str, data){...}; A somewhat verbose way to declare a function, but it combines with #1 to install a function on the global object. Generally, this isn't a very good idea, as there can be namespace collisions there.
  4. return data ? fn(data):fn; This is currying, I guess. (Return the transformed data, or the transformation if there is no data).
  5. var fn = expr0 ? [expr1] || [expr2] : [expr3]; This is idomatic JavaScript. Well, the expr1 || expr2 is idiomatic - it's a common way to say "if expr1 doesn't work, try expr2", very similar usage in perl. The nesting inside a ternary operator, and with complex multi-line expressions, just adds to the fun.
  6. !/\W/.test(str) - \W matches non-word characters. This is a handy way to say "if str only has word characters". Knowing what this means requires both regex and RegEx knowledge, if you know what I mean. (I personally hadn't run across the RegExp.test() method before). [Thanks for the correction!]
  7. new Function("obj", [method body]); I didn't know this, but JavaScript allows an alternate method of doing meta programming, the Function constructor, which doesn't require eval(). The Function() constructor takes arbitrary numbers of string arguments, the first of which are interpreted as names of declared parameters, the last being the function body. In this script, you call it by assigning to a var then calling the var as a normal function. Neat.
  8. var p=[],print=function(){p.push.apply(p,arguments);}; No idea what this does. push() is an array function that returns a number, so I'm not sure how "apply" is even defined here!
  9. with(obj){p.push(' - I know what this does, but not sure why it's here. Seems like p will have only element at this point. Yes, I realize this is the "outer push". Egads!
  10. split().join() is a fast way to do static replacement (according to John).
  11. with(obj){}; Flanagan's book (JavaScript: The Definitive Guide) warns against using "the with statement". However Resig uses it here so that the template expressions are evaluated relative to the data object. (Anyone who's coded in VB knows the with statement - I personally really liked it and wish it was in Java and was usable in JavaScript)
So, there are some moving parts here that I don't completely understand, especially the use of push() inside the with() expression. I mean, why bother with that? I'm pretty sure the answer will come eventually, but for now I find myself puzzled, just like when the post-doc TAs would skip like 10 steps doing that line integral. I'm pretty sure it has something to do with that wierd print assignment.

Dashcode for iPhone web development

No comments:
Interestingly Apple is applying the Dashcode IDE to iPhone web development. Although Dashcode was designed for makeing Dashboard widgets, this makes a lot of sense - I've written before how similar mobile and widget development is.

The nice thing about Dashcode is that you can get a working prototype going quickly. And it has lots of juicy iPhonish assets right out of the box - saving considerable Photoshop time.

The naughty thing about Dashcode is that it's just not a very good IDE, and the code it generates is rather awful, especially for mobile deployment. I mean, if you want to write a mobile app that degrades to a non-Javascript version, you are essentially out of luck. Additionally, the pages it creates are really heavy, and feature lots of inline JavaScript (which can't be cached.)

Granted, I just discovered Dashcode yesterday, but so far it looks like I'll just be pulling assets out of it and using my old stand by tools.

(Sorry about the lack of hyperlinks - feeling a bit lazy. Use Google!)

More MacBook goodies

No comments:
I'm not too thrilled with the Dock. But to make up for it, at least I have Quicksilver and Fink. Roughly, these are (significantly better) versions of Google Desktop and Cygwin, respectively.

What continues to astound me is the dearth of window management options on the Mac - everyone seems to think that the only problem with the Dock is it's launching functionality!

FreshBooks - looks like a nice invoicing solution for freelancers

1 comment:
Invoicing clients is not my idea of a good time - I'm a programmer, not an accountant. FreshBooks is a service that allows me to create and send invoices with relative lack of pain. (Looks like a Rails app, too). I'm going to try it out and see how it works.

As nice as FreshBooks looks, I'm actually looking for a more comprehensive solution that includes planning and time tracking. However, my needs are quite specific and it's something I'll probably end up writing myself.

MetaBlog: making the case for blog-through-the-mail

No comments:
ScribeFire has turned out to be quite unreliable, at least for long term storage of notes. At work I left my computer on for about 10 days, with Firefox (and Scribefire) open. When I came back, a memory leak (I think) had rendered the computer unstable and I had to force quite Firefox, and reboot the machine. When it came back up, Scribefire informed me that my notes file had become "corrupted".

Not good. I had a lot of work stored in those notes - mainly research, links, and a rather large idea bin.

There are other problems with Scribefire, such as it's inability to consume the Tab key for increasing indent (a problem which just recently arose). This is a critical problem for someone like me that uses nested lists alot.

I've come to a few realizations, in no particular order: Blogging through email is the key. This allows you to store 3 copies of your work, even in draft: a local copy, a draft copy on the email server, and a draft copy on your blog. Now that's a backup strategy. In addition, if you have multiple blogs, keeping track of where you're blogging to can be tricky - Scribefire was never very good at keeping all that straight. Finally, a single source of posts is easily searchable, and that's quite nice. Some difficulties that arise include tagging (some blogs are better than others - I still haven't found a way to indicate categories or tags in a blogger email). But of course a huge benefit is that the data remains in easily re-published form - you could publish your work to a different location if need be.)

On occasion you may want to post through the web or even with a tool like Ecto or Scribefire. The solution here is to funnel the post back into your email, with email notifications.

Now, this is all well and good, but Scribefire has a few really compelling features worth emulating - browser embedding foremost among them. An email client with strong composition tools embedded in the browser? What exists? A search reveals "not much".

Another feature that I would like to see in Scribefire is a "post to multiple blogs". This feature would either publish a copy to many blogs (not optimal) or publish to one, then publish a link to the others. This would be handy for those "globally interesting" entries that also have more specific applicability.

The MacBook Keyboard

2 comments:
There are, alas, some keys missing from this keyboard. There is only one delete key, but no backspace. There are no page up page down keys. There is no home or end key (very handy in a text editor). It's funny how you aren't aware of the shortcuts you use until you lose them, such as CTRL+Arrow (move word), or even CTRL+Backspace (delete word) - yes, you can do these with the Option key, but it's funny how off putting the change is. I'm used to doing sequences like "CTRL+X CTRL+V CTRL+Left Arrow".

Home and End are actually very handy ways to get to the beggining and end of a text field - or a document. They are also missing. Sigh. Hopefully I will find a keyboard remapper and map some of the function keys to these badly needed additions. And in the meantime, there is a guide that tells you what shortcuts exist.

Vista vs. OS X Leopard

No comments:
I've had a bit of a wild ride this last week on my quest to find a good computer with 4G (or more) of usable RAM, and a better CPU, primarily for software/web development. (Eclipse + FF + MySQL + everything else is a bit of a hog.)

My first thought was to go with Vista 64-bit running on a quad-core speedy machine. The first machine was very fast, but very big and noisy, so it went back almost immediately. The second machine was a very nicely made Gateway machine running Vista Home Ultimate 64 bit edition. The machine was good enough that I was able to keep it long enough to realize how bad Vista really is.

The key problems with Vista were very poor driver support, very poor application support, and file manager and system preferences that are impossible to navigate and butt ugly. And then the sheer sum of minor niggles was very long - UI elements were moved apparently at random, and most menu bars were removed. Many of my utilities from XP wouldn't run. I spent some time trying to address these issues individually, but in the end I gave up, mainly because I knew it didn't have to be this hard.

It's true that I could have installed Linux (probably Ubuntu) on this machine and been happy. But then I realized how crazy the whole idea of moving to a desktop was (I like to move around too much), and how important usability was, and how there's a little company in Cupertino who makes products for people like me called Apple Computer.

And you know what? I bought one (white MacBook 2.1GHz 1G 120G Penryn, home-upgraded to 4G, 200G 7200RPM). And I'm quite happy so far. The system is pretty and quiet and unobtrusive (very different than most PCs! Even the Thinkpad, by far my favorite PC, has a rather muscular, angular look in comparison). But what is really a breath of fresh air is the OS, OS X Leopard. I've come to understand why we pay people to improve the usability of software products - they earn their money, many times over, both literally and, I would like to think, spiritually. I mean, after all, isn't it nice to create things that leave people feeling happier, or, at the very least, no worse off than when they started using the product?

I think the key ingredient to Apple's success is simply this: they got the drivers right. To have a relatively stable platform to develop for has got to be wonderful. As any web developer knows, it is a sheer delight to write an app that only has to run on a single, modern browser (that isn't IE). I am sure that the same holds true for operating system programmers. One can really optimize the experience when you know approximately what hardware the user has to work with. And this frees programmers and UI people to do what they do best: a strange combination of "thinking outside the box" and obsessing over details that yields beautiful, functional software.

There are several simple things that Apple gets right with OS X. For example, the whole "disk image" thing, or dmg, for installing software is really sweet. The Windows notion of treating zip files as psuedo folders (introduced in XP SP1, I think) is brain dead in comparison. Having a real command line is huge for programmers (and end users benefit too because a happy programmer makes happy programs). I can't tell you how glad I am to get past Cygwin - not that Cygwin itself was bad (it's been too useful for me to call it that), but that terrible terminal and the file system skew drove me batty.

What's really interesting (and wonderful) is the sheer lack of things I have to install. For example, I no longer have to install ctrl2caps because you can remap the caps lock key using built-in and easy to use system preference dialogues. I've not had to install a firewall, anti virus (although I may install that), spyware blocker, or any of those sysinternals utilities designed to help make up for and recover from Window's deficiencies (although I have to add that a process explorer equivalent would go nicely). I don't have to install any "helper" software for multi-display or network setup (e.g. the Thinkvantage utilities that come with the Thinkpad) - the built in stuff works about 10x better anyway.

Then there are the pile of peripherals I don't need to buy or configure. Wifi is built in of course, but so is bluetooth and a webcam - and the last two are far from common on PCs. I won't need a firewire adapter if I get into video. And there are a bunch of utilities I don't need, like CD burning software because the Mac software just works. I don't need to install a better Explorer because Finder works. I may not install Thunderbird because Mail works (well, a lot better than Outlook anyway). I don't need DVD playing software because the Mac utility just works. (And I can't say the same for the Windows equivalents).

That is not to say the Mac is not without it's issues. Some sort of media reader would make a lot of sense (particularly an SD card slot). But more seriously, the way the mouse moves needs to be more adjustable. I'm used to a very linear mouse response curve, and the Mac seems to demand that you use a lot of acceleration - I do hope to find a solution for this as my hand is already aching. It would be nice to have some sort of docking port for the Mac, so that the tangle of cords (well, the power and external monitor cord, anyway) would be both hidden and easy to (re)connect. A second mouse button on the laptop itself would be greatly appreciated. I would like an easier way to move windows around, along the lines of the (sadly buggy) NiftyWindows for Windows. And there are some Windows things, like the excellent Fiddler debugging proxy and SQLyog, that I know I'll have to run in a VM (I hear Parallels is good), if at all.


Serious problems with Fiddler

1 comment:
Fiddler is a very handy web developer tool written by Eric Lawrence (probably not the same Eric J Lawrence as the KCRW DJ). Fiddler is Live HTTP Headers on steroids, or Wireshark with lots of HTTP specific goodies, and it's a good reason to do web development on Windows.

However, it just doesn't want to start on my machine, and I don't know why. When I try to start it it just errors out with "Fiddler has encountered a problem and needs to close" followed by some Dr. Watson stuff.

The symptoms point to a corrupt .Net runtime, but reinstalling .Net that didn't seem to help.

Maybe if I was Mark Russinovich, the McGyver of Windows troubleshooting, I could figure it out. But I'm not.

The Google Command-Line: Goosh

No comments:
This little web2.0 application "Goosh" is a command line for Google. I'm not sure if it will make it's way into my day-to-day toolset, but it does make keyboard-only navigation of google and it's search results quite painless, especially combined with tabbed browsing and the CTRL+W shortcut.

I like the CLI UI, but goosh is lacking some important features of ordinary CLIs, first and foremost piping. One important feature that would make goosh more useful would be to introduce the notion of context - in it's simplest form, to build up a search one term at a time. "Command history" would also make a lot of sense.

I'm glad to see that people are thinking outside the box, and look forward to seeing how goosh, and the inevitable copy-cats, turn out.

Ultimate Defrag

No comments:
Ultimate defrag is a pretty, fast, free defrag utility for Windows. Your data looks like it's smeared all over the disk, which is pretty accurate. Kind of puts it all in perspective.



Sun is in the virtualization game, too. Why?

No comments:
Turns out Sun has a virtualization solution, too. It's called VirtualBox (pretty good name, actually) and it looks like it's dual licensed open- and closed-source.

Just out of curiosity, I downloaded and unpackedthe "Open Source Edition". There was nothing obvious to click - just a bunch of files that looked like they were designed for CLI compiler invocations. It was kind of like downloading a Linux distro only to find you got just the header files! Needless to say, not a good experience.

The documentation seems to describe a different experience - no doubt I dl'ed the incorrect file.

I may try the other download. In the meantime, I have to wonder: why create yet another product? The field is rather thick at the moment: VMware, Virtuozzo, Virtual Iron, Virtual Server (from Microsoft), Xen (which powers Amazon's EC2), Parallels (for the Mac) and a variety of other niche products, like User Mode Linux. (Check out the full list of virtual machines on wikipedia)

This is especially puzzling since Sun is on Xen's advisory board. Things that make you go "hmmm".

The rise and fall, and rise of the thick client

No comments:
I've switched from Gmail to Thunderbird. Why? Two things: Firefox's instability and memory hogging ways, and Gmail's IMAP support.

The fact is that my firefox.exe process was getting into 400MB range and was crashing all of the time. It's not surprising: I was running gmail, meebo, firebug, and a bunch of other, smaller plugins. Firefox was essentially serving as a simple operating system.

Time to lighten the load. Thunderbird for email has been a big win - Firefox 2 never ran gmail very well, and Thunderbird is like a breath of fresh air. However much I miss email search and organizing messages by conversation, I like being able to write an email without fear of a crash even more. Plus, thick clients have other benefits like offline operation and better integration with other apps (e.g. I can use the "email this document" option in my applications now).

Meebo actually runs very stably, but it does take up a good deal of browser memory, and it doesn't do "auto detect whether I'm at my computer" thing - which has misled others to think I'm online when I'm not. Miranda does the trick (although it doesn't support Google Talk).

Another nifty tool for Windows: Taskbar Shuffle

No comments:
Doing development these days requires a LOT of programs to be running at once. A couple of shells, an explorer window or two, a browser (or two or three) a database client, Eclipse, etc.

(there is something to be said about the fact that having this many applications open at once is rather wasteful, as it spreads one's attention too thin. That's true, and if the startup time for these applications was fast enough I would happily close all of them except for the one I currently needed.)

But alas, the reality is that this is what we must do. And I've often wanted to reorder the taskbar, but could not. Until now.

Taskbar Shuffle lets me do that. Neat.

(Yes, if I was running OS/X this would be built-in.)

Optimizing the Build Test Debug (BTD) loop

2 comments:
Ran across JavaRebel today. Glad to know there are people out there as frustrated with slow BDT loops as I am. JavaRebel is Hotswap on steroids. I look forward to trying it out with the JBoss/Hibernate/80 Mavenized projects they've got going on at youmail.com.

The ZeroTurnaround site has a short article on doing webapp development with JavaRebel. I actually had no idea you could do symlinks in Windows! Indeed, I downloaded sysinternal's junction.exe utility, and was off and away creating symlinks. Very cool.


The problem with wikis

No comments:
Wikis seem to go stale really fast. I know this because I've used internal wikis at every company I've worked for or with in the last 8 years, and in each case the wiki was never an important part of anything. (Indeed, the wiki was often used by managers as a kind of threat - "add it to the wiki" is a way of saying, "please do some meaningless work that will never be read and will be quickly forgotten.")

But all writing on the net gets stale fast. Why does it feel so particularly bad with wikis?

I have a theory. I think it's because wikis set your expectations differently than, say, a blog. You don't expect a blog to stay relevant. Wikis feel static, and you expect them to stay relevant. It's a classic UI problem, actually. In truth, wikis and blogs are both just representations of an author's activities. One is merely presented in a different way. I believe that blogs are actually closer to representing the moment - one has a thought, one writes. Wiki's still subscribe to the conceit that this is an article, something that is correct and timeless and that fell out of the sky. Wikis hide the serial nature of authorship, while blogs do not.

Review: Google Notebook

No comments:
Google Notebook[Caveat: I just installed it 5 minutes ago]

An odd little tool, Google Notebook. It's kind of like a blog. But not. Check out a little example.

A good find: EasyEclipse.org

No comments:
I was researching a method to uninstall or disable Eclipse plugins (I was having problems with subclipse) and ran into this nice resource, easyeclipse.org. It reminds me of Pulse but it's open source and some of their plugins look really neat.

Clever Ant script for Eclipse installs

No comments:
I wrote about Pulse earlier; here's the lightweight version using Ant. Haven't tried it yet so don't sue me if it doesn't work

Genuitec Pulse for Eclipse

No comments:
This is definitely one step closer to solving the CJAN problem. Basically Genuitec is offering a "free" tool that helps manage Eclipse configurations, in return for putting their non-free plugins up for sale in front of you. Not a bad trade off, actually.

I still have questions though. Like, what the heck is going on in the background? I'd love to just "not worry about it" but with a new meta-tool like Pulse, I think a bit of assuaging is in order. Also, it's great that you can share a "profile" but why can't you just install all of the features you want into one Eclipse profile? It seems like a recipe for disaster to maintain mutiple profiles on top of Eclipse's ability to offer multiple "Perspectives". That said, I've seen how plugins can step on each other (especially HTML and XML plugins), so perhaps it's not such a bad solution.

And what about workspace settings? That, actually, would make Eclipse profiles handy because you might have a "GWT" profile that uses a special code convention (in case you want to submit patches to Google). This is getting very close to having a "push button" installation manager, but it's only a month old and I'll have to keep an eye on it. Obviously Genuitec has big plans.

[Update: I can't recommend Pulse. It doesn't have an uninstaller. It doesn't have much in the way of plugins. I think that EasyEclipse.org is a better alternative.]