What tools do you use that may be considered rare in that aspect that you have only seen a few people use it? It may be any tool that may be valuable for programmers.
I myself use UPX [1] on occasions.
Common Lisp.
An elegant weapon. For a more ... civilized age.
Also see:
[1] http://stackoverflow.com/questions/169946/choosing-a-new-language#170117[Humour on]
I try to stay off old legacy code editors because of the learning curve ;)
(From
Steve Rowe's Blog
[1].)
[Humour off]
[Actual answer]
I am pretty sure not everyone is using a
QR-code
[2] editor like this one:
[1] http://blogs.msdn.com/steverowe/archive/2004/11/17/code-editor-learning-curves.aspxIt is used to store addresses and URLs that may appear in magazines, on signs, buses, business cards or just about any object that users might need information about. Users with a camera phone equipped with the correct reader software can scan the image of the QR Code causing the phone's browser to launch and redirect to the programmed URL.
AWK [1] - for lots of data processing tasks it is just the right level of abstraction - more powerful than sed, less work (and learning curve) than Perl.
[1] http://en.wikipedia.org/wiki/AWKI use Richard Feynman.
Seriously. He used to advise that until you can explain something to a child, you don't really understand it. Exaggerated, but the principle is true.
If you cannot explain the "why" of your code to another person, you will be kicking yourself 6 months from now when you must maintain it. Or when the maintenance programmer breaks into your home with a knife clenched between his teeth.
Graphviz [1] as an aid for visually understanding complex dependencies among modules, classes, packages, etc.
[1] http://en.wikipedia.org/wiki/GraphvizI use that rarest and most precious of tools - time.
Sadly, one all too often sees developers jumping right in to coding milliseconds after getting an assignment.h
I would guess 70%+ of the time I spend on a program is up front just ruminating, cogitating, and percolating, with an occasional snippet of code to fiddle with something I'm unsure of.
Makes managers real nervous.
It's not until I know EXACTLY how things are going to be laid out, and KNOW it is the way to go, do I start coding in earnest.
I used to use a PS2 Dev Kit back when I was doing console development.
It's basically the unholy marriage of a PlayStation 2 console and a PC running some ancient version of Red Hat Linux [1]. It lets you download code onto the console and run it, and even step through it in a debugger. You don't actually interact with the Linux portion aside from a socket API that's very opaque. The only reason I know it runs Linux is that to upgrade its firmware you upload RPMs into its web interface.
When we were testing a game that had 2-on-2 network play, I actually had to have four of them on my desk with a bunch of TVs to display all the output.
[1] http://en.wikipedia.org/wiki/Red%5FHat%5FLinuxI like to use UnxUtils [1] for some good old Unix command-line tools on Windows. (Some people prefer cygwin, but that never did it for me.)
[1] http://en.wikipedia.org/wiki/UnxUtilsI use Paint for graphics.
Brains. They shouldn't be rare, but judging from much of the code I've seen, they are. :-(
PowerBuilder IDE
I use SciTE [1] as a lightweight cross-platform text editor. It has one feature that I love very much - changing font size from the keyboard. It's very handy for me to set a small font for huge log files and a big font just by pressing Ctrl+"+", Ctrl+"-".
[1] http://www.scintilla.org/SciTE.htmlI use OllyDbg [1] quite a bit for debugging, reverse-engineering, analyzing and tweaking assembly language code.
[1] http://www.ollydbg.de/Internet Explorer 6.0
(Ok, it isn't rare, but it should be)
Code generation with a twist -- I've got my own set of macros ( Common Lisp [1]) that generate all of my data access layer (stored procedures, DTO [2]s,) output entirely in C# / VB.NET.
[1] http://en.wikipedia.org/wiki/Common%5FLispOf course, something I think is rare can actually be used by lot of programmers! Stuff I use and don't see my co-workers using:
SQuirreL SQL Client [1] is still my tool of choice to access various databases, even after trying some others.
AutoHotkey [2] isn't a very nice language (although it came from a long way) but it is very convenient to do a quick tool with GUI. I made an uninstall tool with it, a little form to fill a database table (using Oracle's command line tools), etc. Plus its management of hotkeys is just excellent.
Lot of other tools, like the Sysinternals' ones, Wireshark (not so rare, actually), etc.
Screen Ruler [1] is great for any kind of visual development where you want to count how many pixels high or wide something is.
Bare Tail [2] is a 'tail' replacement for Windows that is great for monitoring log files. It's GUI-based and lets you assign filters to colorize log output (E.g. red text for Exceptions, light grey on white for debug output you want to ignore).
[1] http://www.microfox.com/Smalltalk ! ( Squeak [1], GNU Smalltalk [2], the free edition of Cincom VisualWorks [3], but mostly Pharo [4] in practice).
Not as old a language as Lisp, but quite fun too :)
[1] http://www.squeak.orgSadly, common sense.
I don't feel entirely comfortable calling them 'rare', but I've installed packages from the gnuwin32 [1] toolset as I need them, and as a result have pretty much the whole lot installed now. It seems to be unusual among my coworkers to use command-line tools but they are utterly brilliant for some problems - for example AWK [2] for mass manipulation of text data (which tends to come up frequently in this job).
[1] http://gnuwin32.sourceforge.net/I use:
Common Lisp/CLOS for programming - I was exposed to Lisp in the 1980's, been through ObjectPascal (MacApp), C/C++, Java, Perl, Python, etc. but I always return to Common Lisp because it's so much more productive.
Allegro Allegroserve/Webactions web server running under screen. I can connect to the running process and compile in new Common Lisp functions at any time.
LaTeX for documentation - I live in Emacs, I write code, mail, browse the web, and write documentation in Emacs.
PostScript for drawings. I used to "draw" pretty hairy illustrations in PostScript. Now I use more PGF/Tikz.
SystemVerilog/VHDL for living...
I am using PL/Scheme to write procedures stored in PostgreSQL in Scheme. Most of my project is in Common Lisp, and Scheme allows me to minimize the cost of context switching. Of course, I would prefer to have Common Lisp as the PL, but nothing like that exists (yet, I hope). Curiously, it feels like Guile is a bit faster than PL/Python (though I don't have any real proofs for that).
Agent Ransack - for a grep-like tool with a nice UI on Windows - http://www.mythicsoft.com/agentransack/
and
CS-Diff - for a free Diff tool with a nice diff display - http://www.componentsoftware.com/products/CSDiff/index.htm
I use Joe's own editor [1] for quick and simple edits. I haven't met anyone else who uses it, although it seems to have a large user base.
[1] http://sourceforge.net/projects/joe-editor/Spin [1]
Great for finding concurrency issues in multithreaded or multitasked applications.
[1] http://spinroot.com/spin/whatispin.htmlI use WinHex [1] and IDA Pro [2] occasionally.
Com0Com [1] for creating connected virtual serial ports. I can fire up two VMs and use com0com on the host to connect the VM's serial ports together. Great way to test/debug serial port applications all on my workstation without having to break out any hardware.
[1] http://com0com.sourceforge.net/I often need to implement communication protocols. DockLight [1] is a great tool for testing and debugging communication. It targets serial communication (RS232,RS485), but it's also nice when doing TCP/UDP stuff.
[1] http://www.docklight.de/SETL [1].
Great for topological sorting [2] and similar algorithms if you want to invoke them from shell scripts.
Example (similar to unix tsort [3])
tokens := [t in split(getfile(stdin), '[ \t\r\n]+') | t /= ''];
edges := {[tokens(i-1), tokens(i)]: i in {2, 4 .. #tokens}};
nodes := domain edges + range edges;
(while exists x in nodes | x notin range edges)
print(x);
nodes less:= x;
edges lessf:= x;
end;
[1] http://en.wikipedia.org/wiki/SETLLibero [1] for generating Finite State Machines. And it never occurred to me, that AWK or Graphviz are supposed to be exotic...
[1] http://legacy.imatix.com/html/libero/VampirTrace [1] for tracking down performance problems (sequential, threading, and MPI)
[1] http://www.tu-dresden.de/zih/vampirtraceObjconv
I use it to translate object file compiled with GCC to the VS.NET C++ world. Also works great help when porting GCC inline-assembler to VS.NET (It does the ATT style to Intel style).
I use an incremental copy program of my own invention on a daily basis and can't figure out why I'm the only one thinks its essential. (That's why I wrote my own: Nobody else seems to have one that works exactly like I need.)
It's like directory diff program, comparing a source and destination directory and showing me which files are newer /older and of different size. It helps me to incrementally copy files, ignoring unchanged files, and preventing me from unintentionally overwriting newer files with older ones.
I use xfig [1] for diagram drawing, though mostly not for development but for articles preparation.
[1] http://xfig.orgXSLT. Most people don't realise it's Turing complete [1]. You can do some clever things transforming Ant [2] build files and generating XML configuration files, and that sort of thing. Nicest thing I did was generating GraphML [3] from an XML version control log.
[1] http://en.wikipedia.org/wiki/Turing%5FcompletenessCygwin, Dia, joe - not shocking.
Out of the ordinary: Free Pascal using the (Turbo Pascal-like) textmode IDE for "scripting" (quick throwaway programming).
Unfortunately, my company uses Lotus Notes, and I find myself using Lotus Domino Designer [1] quite a bit.
[1] http://www-01.ibm.com/software/lotus/products/dominodesigner/I used to use "cdecl", a command line tool capable of turning very complex C type declarations into English language descriptions (unsigned char** foo == "A pointer to another pointer which points at unsigned characters").
It could also go the other way, though I never used that part.
Once upon a time I had to use Avenue, finding later her son, AVPython [1].
[1] http://avpython.sourceforge.net/We have a part of our build script that is written using AWK / SED to generate some static content pages for our application. There is talk of migrating this to Ruby/ERB but it just hasn't happened.
I am currently writing an interpreter for a DSL we are using, the parser is written using QLALR [1] a parser generator
[1] http://labs.trolltech.com/page/Projects/Compilers/QLALRI use Microfocus Cobol 3.
010 Editor [1] whenever I'm doing protocol design or working with binary file formats
[1] http://www.sweetscape.com/010editor/I do code from time to time some snippets in Ada. It's a very nice language.
I use Far Manager [1] (a text mode file manager for Windows) a lot. Perfect for creating prototypes in Ruby and any other language that doesn't need a compiler.
[1] http://www.farmanager.com/[HumorMode=On] Brains?
I use a program transformation engine call the DMS Software Reengineering Toolkit [1] capable of specifying programming langauges, and custom program analysis, and mass program changes. I use DMS daily to define/extend the syntax and semantics of various programming langauges, and to build and test tools based on DMS.
Such tools include test coverage, profiling, code obfuscation, duplicated/dead code detection, lanaguage translation, static analysis, ...
DMS is designed so others can do this too.
[Full disclosure: I'm the architect].
[1] http://www.semanticdesigns.com/Products/DMS/DMSToolkit.htmlI use Dr.Python [1] IDE I personally find it very useful. However fellow Python coders prefer to use text-editors than IDEs , I guess it is 'different blokes, different strokes' !
[1] http://drpython.sourceforge.net/XML Explorer [1]. Lightweight XML file viewer (.NET/Windows only). Includes copying of formatted XML data, evaluation of XPath expressions, and XSD schema validation.
[1] http://www.codeplex.com/xmlexplorerOne rare tool I have used is Ebase Designer and Ebase Application server which is used for building electronic form applications. I have only ever seen it used in UK local government though I know some private sector companies use it.
It's a great tool for chucking together an online form quickly, though you never see any job listings that want this as a skill.
For printing out arbitrary text files in multicolumn compressed text, I find that PrintFile [1] is useful and flexible. It does PostScript files nicely too.
[1] http://www.lerup.com/printfileZTreeWin [1] file/directory manager for Windows. Very useful and very easy to use, there is a menu which shows the keys for various commands. I don't understand why more people don't know about it or use it, it's not free but it is inexpensive.
[1] http://www.ztree.com/html/ztreewin.htmZtreeWin file manager too - never could warm up to Norton Commander, even in the old DOS days :)
Plus Araxis Merge [1] - a powerful two- or three-way file (contents) AND directory differ and merger - one of the few I know that can diff an ANSI and a UTF-8/UTF-16 file and even make changes to both - excellent stuff, highly recommended.
Cheers!
[1] http://www.araxis.com/merge/index.htmlgcov [1] for code coverage of C/C++ code.
Some time ago I used the KDE Source Code Checker [2] to validate my own Qt [3] code.
[1] http://en.wikipedia.org/wiki/GcovI use REALbasic for a lot of stuff. Most developers I talked to have never heard of it, so I guess that qualifies it as rare.
AppMaker (the original Mac programming tool for drawing interfaces and generating code).
I'm pretty sure I"m one of the few people left on the planet still using it, either for porting code I import from Mac resources or working on legacy AppMaker-based GUIs. I'm in the middle of a classic Mac to WPF rewrite at present, using AppMaker on an old Mac to get the UI regenerated into clean XML.
JScript Debug [1], for tracing JavaScript execution in Internet Explorer.
[1] http://www.skillfulsoftware.co.uk/software/jsd/jsd.asp
classdump
[1] is a very useful tool, for inspecting closed source objective-c frameworks. You can figure out much of the same information using the builtin otool
utility, but classdump provides a more convenient interface.
hfsdebug [2] a similarly useful tool for exploring HFS+ filesystems.
[1] http://www.codethecode.com/projects/class-dump/I used khexedit [1] when developing a parser/generator for an unusually complex binary format. it was very pleasant to use.
[1] http://home.online.no/~espensa/khexedit/Thought. I've found judicious application of this tool saves me hundreds of hours of work. I wish more of my co-workers had used this tool in the past.
We work quite a lot with VBA, where development interface is really a pity (I guess this is THE reason why most developers stay away from this language). MZ-TOOLS for VBA [1] (there are other version for VBs) saved us hundreds of hours or work, and hundreds of headackes and depressions. It automatically numbers lines, generate error procs, documentation, gives complete search results, etc.
Another most usefull tool, though it is not really a programming tool, is " File Compare Tool [2]", with its command line mode. This allowed us to integrate it in our own source control tool for VBA.
[1] http://www.mztools.com/index.aspx