Jasper Paulsen

A HumbleRefactorer.

A very good editor, at any rate. Thanks, Jasper!

Jasper, thanks for all of your work on Wiki.

Thanks for the refactoring, nice job. -- DougMerritt

JustaProgrammer, but with experience as a mechanical engineer and as a manufacturing engineer.

Current Employer: Puget Sound Energy (http://www.pse.com)

Email: mailto:jasper@folds.net

Topics I'm involved with or interested in: Good StartingPoints for using wiki:

JP, why do you amend certain spellings to American English even though the original author is not American? Shouldn't we let British authors use British English spelling?

I make these changes for consistency. The C2 Wiki is an American web site, and its standard is to use American spellings. (For example, the spelling checker uses American spellings.) I generally change text written in the voice of wiki (that is, anonymous). I try not to make these changes in signed contributions from Britons, Canadians, Australians, et cetera.

On documents that are consistently in British English spelling, I do not make these changes -- indeed, I choose to use the British English spelling myself. For example, I edited Marcel Tolkowsky's Diamond Design. (http://www.folds.net/diamond). Diamond Design was published in London and New York. Tolkowsky chose to use British English. I consistently kept his British English spelling in the main body of the work, and used British English spelling in all of my editor's notes. Whereas, in my follow up article on diamond girdles, I consistently used American English spelling.

I do not make these changes on wikis that are hosted in Britain, Canada, Australia, et cetera. I assume that the standard on such web sites is to use British English spelling.

You can think of the spelling checker as a kind of Unit Test.

You said: "Because this wiki does not support hyperlinks within a page, it is far easier to cross-link text on multiple pages. This reduces duplication, makes it easier to check whether an idea has already been discussed, and makes it easier to add useful contributions. -- JasperPaulsen"

I'm withdrawing my opposition, but that's in spite of your argument, not because of it. I disagree with your logic; that leads to the notion that all non-trivial pages should be split into many pages. Obviously pages are rarely split simply to allow cross-links, so your argument begs the question: why the Tql pages in particular? -- DougMerritt

I would like to see the TQL pages developed further. They represent either a promising alternative to SQL, or an example of how difficult it is to replace a flawed standard. Either way, the TQL pages have two benefits: Each of the TQL pages is a logical chunk of the material, with enough document-mode content to spend a few minutes reading and thinking about, and a convenient place for people to suggest new ideas to the topic's de facto moderator (Top), and receive his replies. When the TQL pages were in a single page, it was very difficult to suggest new ideas or examples. Partly, the page got to be too long; but also, it was hard to show how the new idea was different from related material already on the page. -- JasperPaulsen

Hmm. Ok, I'll digest (ponder) that. Thanks for your reply. P.S. Re: "promising alternative to SQL" -- is there a comparison to QUEL, TutorialDee, and the RelationalCalculus in there somewhere that I should look at? If the answer is "no", I submit that there should be, since those are three famous SQL alternatives. -- DougMerritt

You might want to mention these languages on QueryLanguage. On the other hand, most of them are already mentioned on RelationalLanguage. -- JasperPaulsen

After working in other languages for several years, I am starting to write C++ programs again. Here are some patterns that I am finding useful.

Why use C++?

1. C++ does not force me to rely on GarbageCollection. I have found GarbageCollection to be unreliable. In the Lisp used for XConq, GarbageCollection strikes at inconvenient times, taking unpredictably long amounts of time. In Java, the results are horrible -- Eclipse destroyed my last computer, by using so much RAM to handle a very small program that the pagefile needed to be defragmented, which in turn further fragmented the pagefile irreparably. In VbClassic (which has the best GarbageCollection-like feature of the languages I have worked with), it is possible to hang the program (when closing the program) by having two forms refer to each other. Fortunately, there is a work-around to this problem in VbClassic.

2. C++ allows ObjectOrientedProgramming.

3. Many useful frameworks (such as the Windows API) are written in C and C++. I can access starter code for my personal projects that uses C / C++ to wrap the Windows API.

4. With C / C++, I do not suffer VendorLockin? to a costly language and IDE that the vendor intends to make obsolete. For example, Microsoft is in the process of abandoning VbClassic; it has already abandoned C# and VB.Net 1.0 and 1.1; and it seems to be continuing a treadmill for C# and VB.Net.

5. C++ provides a migration path for programs originally written in C. As the MozillaProject? infamously demonstrated, and as a company I worked for also demonstrated, it is a very bad idea to try to rewrite a program from scratch. (Joel on Software has a page about this AntiPattern.) Rewriting from scratch is a recipe for bankruptcy. Instead, it is far better to incrementally refactor / improve a program from C into C++ (or another compatible language).

My development environment

6. Unlike Java, C++ requires at least a bare-bones IDE. This is because C and C++ compilers (like g++) produce error messages that are useless without the context provided by an IDE and frequent compilation.

7. Since this is a home project, I want to minimize my cash expense, and I want to avoid VendorLockin?. I have therefore passed on expensive IDEs (such as VisualStudio), and gone with CppIde. (CppIde is pronounced Cee-Pied.) CppIde is designed for teaching C (and a few C++ features). CppIde has features for writing / demoing WindowsCommandShell? programs, and for writing / demoing programs that call the WindowsApi?. It uses the g++ compiler, the gdb debugger, and the SciTe? editor. Due to limitations of CppIde, I also run a session of WindowsExplorer? side-by-side with CppIde.

8. I use ModestIncrement?s. After between two hours and two days worth of work, I will declare that I have reached a logical demarcation point. Typically, this solves between 1 and 5 related issues in the bug_list. I increment the program's version number (such as from 0.007 to 0.008), I updated the bug_list, and I back up my progress (as discussed below).

9. Every project that is used in more than one week needs some form of SourceCodeControl?. For the time-being, I am using the PoorMansSourceCodeControl?. After every ModestIncrement?, I increment the program's version number (such as from 0.007 to 0.008). I copy the program's source code from my working directory to a corresponding folder of my old_code directory. This means that I have all of my source code, for all of my ModestIncrement?s, all the way back to the beginning of the project. If space becomes an issue, I can delete the old object code later. I can use a diff program (like WinMerge?) to compare versions of the source code.

10. I maintain a combined BugLog? / FeatureRequestLog? / ProgressLog?. This log is bug_list.txt, and I treat it like a source code file that happens to not get compiled. Most bug descriptions and feature requests are between one and four sentences long. (In other words, I follow WriteItOnaCard.) Each bug or request is numbered, in the order that I entered it in the log. Each bug or request is rated on this priority scale. Half stars are also possible; they are indicated by SingleQuote?s.

             .++++   Critical (e.g., crashes or won't compile)
             .+++    Makes program unsuitable for public release.
             .+      A nice touch, but low priority.
            -.       A slightly questionable idea.
         ----.       A questionable idea that would take a lot of work.
If a .+ item is easy to implement, I will often deal with the LowHangingFruit before tackling a higher priority (but more time-consuming) item. The log has three sections: unsolved items (sorted by priority, then by item number), solved items (sorted by build number in which they were fixed, then by item number), and items I have decided not to fix (sorted by item number). As the project progresses, I can see a trend of the items being solved tending to have lower priorities.


EditText of this page (last edited November 10, 2008) or FindPage with title or text search