Subversion caches the passwords you give it, in plain-text files
with hex-code-hash-value names, in a hidden directory under your home.
You can see them all with:
$ <strong>cat ~/.subversion/auth/*</strong>
Naturally, this only works if you store your passwords without
encryption... the file will contain at least this, in Key / Value
To compare the current working copy with other versions, or just
to see what other tagged versions are available, it is handy to know
the revision number, which is what svn bases all its operations on. The
best way to do this is with the long (verbose) form of
svn ls as
shown below. Note, I am in the 'trunk' directory of my AutoNav
bill@charcoal:trunk$ <strong>svn ls -v ../tags</strong>
327606 wlindley Dec 31 11:41 ./
175035 wlindley Nov 18 2009 1.1.8/
175037 wlindley Nov 18 2009 1.1.9/
187455 wlindley Dec 27 2009 1.2.2/
192298 wlindley Jan 10 2010 1.2.3/
193267 wlindley Jan 12 2010 1.2.4/
195857 wlindley Jan 20 2010 1.2.5/
283374 wlindley Aug 31 14:03 1.2.7/
287447 wlindley Sep 09 13:31 1.2.8/
307532 wlindley Nov 03 14:52 1.2.9/
308944 wlindley Nov 07 12:57 1.3.0/
311196 wlindley Nov 13 16:28 1.3.1/
312023 wlindley Nov 15 22:33 1.3.2/
320048 wlindley Dec 07 06:34 1.3.3/
320583 wlindley Dec 08 11:05 1.3.4/
327606 wlindley Dec 31 11:41 1.3.5/
The revision numbers are at left. Now I can do:
bill@charcoal:trunk$ svn diff -r 320583
--- autonav-wl.php (revision 320583)
+++ autonav-wl.php (working copy)
@@ -4,7 +4,7 @@
Plugin URI: http://www.wlindley.com/webpage/autonav
Description: Displays child pages in a table of images or a simple list; also displays
attached images, or images from a subdirectory under wp-uploads, in a table, with
automatic resizing of thumbnails and full-size images.
Author: William Lindley
Author URI: http://www.wlindley.com/
<em>and so on</em>
It sure would be nice if there were a way to combine both local working
copy and a remote tag in an
svn diff command, but that does not seem
to be suppported yet (as of svn 1.6).
see also Other svn tricks here
This was one of the most fun, useful, conventions ever. About 700
folks from all over attended the main sessions on Saturday.
Some highlights and my random notes follow.
[caption id="" align="alignright" width="171" caption="Had a blast!"][/caption]
Friday: Child Themes and Frameworks
Austin Passy led several dozen of us through the use and creation of
child themes, parent themes, and frameworks. Here
is his presentation (you might have to wait awhile for all the bits to
load, before you can advance through it).
First off, the Hybrid theme
shows quite a few configurable items as it uses Hooks almost
exclusively. By applying different classes to elements based on page
content, whether sidebars are active or inactive, and so on, you can
write conditional CSS without any code. We explored how actions and
filters let you customize a site, doing all kinds of magic with just a
tiny bit of PHP. Hybrid Core is a library for building parent themes
(like Hybrid itself is).
front end that lets you move theme elements around on a set of vertical
columns. SaltRiver developers have been working on a similar idea but
this looks exceedingly promising.
Saturday: Main Sessions
In Wordpress 3.1, custom post types (CPT, took me awhile to decipher
the acronym on the program) can have Archive pages, and can participate
in The Loop and RSS feeds with a snippet.
In "A/B testing the WordPress Way" by “Mitcho” Erlewine we heard about
ShrimpTest and discovered that simple text changes, like "See Plans and
Pricing" over "Free Trial" can result in triple the response. His
cocktail-sauce-ready plugin automates the process of trying different
bits of text (or code!) which visitors will see randomly, while
experiencing the same view within a session.
Mark Jaquith spoke on "Theme & Plugin Security," revealing common
pitfalls and relatively simple cures for most of them. SQL Injection
and many other "hacks" can be overcome by judicious use of
$wpdb->update(), esc_attr(), and related functions. Authorization
levels should be regarded with current_user_can() and the nonce system
use wp_enqueue_script() to reduce load and duplication errors.
Corey Eulas's "SEO Master Class" -- Reinforced my view that SEO is 85%
snake oil and 15% pure gold. Highlighting "Competitive Analysis" --
it's less a question of what "tricks" you are using, than how well you
are doing versus your competitors. Finding that, however, can be a bit
of a challenge. There are several services, the one that caught my eye
was "SEOmoz" even though it's a pay site. Google Analytics never really
seemed to work the way I wanted.
"WP for Non Profits" by Amanda Blum raised a few interesting points. No
matter whether you're non-profit or for-profit, a website has to answer
your audience's questions:
Why do I need X in general?
Why do I need your X ?
What do I do after I get X ?
OK, I'm ready, what do I do now?
Plugin suggestions: Gravity Forms; Donation Bucket; and WP-Quotations.
Eyebrow-raising was her suggestion: no advertising! I interpret
this to mean, confine your list of sponsors and donors exclusively to a
"Sponsors and Donors" page, and eliminate
Sunday: Barbecue and Committing to Core
This was our chance to get down and dirty with Core Developers, finding
and closing tickets in Trac, adding plugins and themes to the
repository. Hamburgers, sodas, and Four Peaks on tap!
Blew the socks off 2009's Word Camp. Let's do it again next year!
Although: To the few folks, please, drop the profanity from your
presentations, they are neither professional nor polite. Unless you are
describing a vacuum cleaner large enough to swallow a donkey, please do
not use those kinds of words.
I have always loved a mallard's iridescent green.
In the process of researching some accounting programs I found it
useful to restore the LS Software product DIAMOND Accounting, last
updated 1984. This program originally ran on HDOS (Heath/Zenith), CP/M,
and the original Zenith Z-100 series.
I do have the MSBASIC source code. Note that on those systems, MSBASIC
-- before there was a "gee whiz" GWBASIC -- stored your code in
compressed format. GWBASIC can read compressed files from MS-DOS
MSBASIC / BASICA, but the HDOS, CP/M, and Z-100 versions of MSBASIC all
used slightly different code bytes.
Other minor differences
On HDOS you could use terminate a line with the @ character for line
continuation; that was not true on MSBASIC or GWBASIC. HDOS and CP/M
also required the WIDTH 255 command to ensure a CR/LF was not output in
the middle of an escape sequence. That's right, you had to control the
terminal by printing escape codes (VT-52 style for the Heath/Zenith
series)... and accept escape codes as input. On the IBM PC variants,
you have to translate all that to LOCATE commands and PC keystroke
codes... quite a tall order for 25-year old code.
DOSEMU to the rescue
Even without translating the escape codes and keystrokes, you can at
least get much of the code from HDOS or CP/M BASIC to run with the
Linux dosemu package. If you have a copy of GWBASIC.EXE or possibly
QuickBasic QB.EXE lying about, you are golden. If not you might be able
to Google one.
Note that on Debian, after apt-get install dosemu you will get an error
which is easily resolved. Typed commands are underlined.
$ <span style="text-decoration: underline;">sudo apt-get install dosemu</span>
[sudo] password for youtheuser:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
The following NEW packages will be installed:
0 upgraded, 2 newly installed, 0 to remove and 65 not upgraded.
1 not fully installed or removed.
Need to get 2605kB of archives.
After this operation, 6103kB of additional disk space will be used.
Do you want to continue [Y/n]?
$ <span style="text-decoration: underline;">dosemu</span>
<strong>LOWRAM mmap: Invalid argument</strong>
$ <span style="text-decoration: underline;">sudo sysctl -w vm.mmap_min_addr=0</span>
vm.mmap_min_addr = 0
$ <span style="text-decoration: underline;">dosemu</span>
Now I can run:
C:> basgwbasic start.bas
and it spits out a bunch of VT-52 / H-19 escape codes and asks me
whether I want SY1: or DK0: to be my data diskette. Hmm, this is gonna
take some work. Nevertheless, here is code that has sat idle since
1984, on a 2 MHz Z-80 with 48K RAM, working on a 2 GHz CPU with 4 GB