;;; root page (use 3e8-html) ;; expects body consisting of blog-entry calls (define (blog . body) `(div (@ (id "main")) (div (@ (class "blog")) ,@body))) (define (blog-entry date title . body) `((h2 (@ (class "date")) ,date) (div (@ (class "blogbody")) (h3 (@ (class "title")) ,title) (div (@ (class "entrybody")) ,@body)))) ;;; main page (render-page "3e8.org" (navskip) (languages 'en) (call-resp (category) "In EBCDIC we trust.") (navbar 'home) `(div (@ (id "content")) ,(blog (blog-entry "June 4, 2008" "Shift-Command-Z" `((p "I redid the site " ,(link "src/" "in Scheme") ". You won't notice any difference."))) (blog-entry "May 24, 2008" "The AA vote" `((p "JEdict (4.5.3) does not let you change the font used in its WebKit web browser, nor does it let you specify a custom user stylesheet. Kill two birds with ... well, two stones:\n") (ul (li "defaults write -app JEDict WebKitUserStyleSheetLocationPreferenceKey -string \"~/css/jedict.css\"") (li "defaults write -app JEDict WebKitUserStyleSheetEnabledPreferenceKey -boolean true")) (p "A minimal stylesheet for viewing something like 2ch ascii art on OS X might be:") (pre "body { font: 14pt MS-PGothic !important; } /* 16.5pt works too -- but not 16 */\n" "table { font-size: 100%; }\n"))) (blog-entry "March 28, 2008" "Jonesing" `((p "I made the following changes to " ,(link "http://annexia.org/forth" "Jonesforth") ", which are " ,(link "/pub/jonesforth-modified.tar.gz" "available here") ":") (p "Tail-call optimization; " (tt "DOVAR/DOCON") " -" ">" " simplified " (tt "CONSTANT") ", " (tt "VARIABLE") ", and " (tt "VALUE") ";" " FIG-FORTH-style " (tt "CREATE ... DOES>") " support; case-insensitive " (tt "FIND") "; Pentium optimizations; " (tt "SEE") " aborts on word not found; constant, variable and " (tt "DOES>") " decompilation (and indicate primitives). Also added optional space-saving " (tt "DOES>") " support, which cannot be decompiled and is probably slower."))) (blog-entry "February 29, 2008" "Schaltjahr" `((p "I use SQLite3 for my searches database and I was looking for a way to create a " "frequency table of search terms--either updating the term count or inserting new terms" "as needed. Evidently, according to " ,(link "http://blog.modp.com/2007/11/sqlite3-and-on-duplicate-key-update.html" "this blog post") ", MySQL has an extension " (tt "INSERT ... ON DUPLICATE KEY UPDATE") " which lets you insert or update as needed. The solution in that post for SQLite3 is programmatic: " "check if an INSERT fails, and do an UPDATE if so.") (p "However, I thought this was not particularly elegant and it also would not work from a trigger. " "Here is the autovivification solution I came up with:") (pre "CREATE TABLE terms(count INTEGER, term TEXT PRIMARY KEY);\n" "...\n" "INSERT OR IGNORE INTO terms(count, term) VALUES (0, 'my term');\n" "UPDATE terms SET count = count + 1 WHERE term = 'my term';\n") (p "Execute these two statements whenever you want to bump a term's frequency. " "The " (tt "ON CONFLICT IGNORE") " (aka " (tt "OR IGNORE") ") causes the INSERT to silently fail " "on constraint violation; specifically, the uniqueness of the primary key. The base " "value of 0 ensures the count starts at 1."))) (blog-entry "February 25, 2008" "And your little spiffy, too" `((p "Persistent connections exhibited the same issue on " (a (@ (href "http://chicken.wiki.br/spiffy")) "spiffy") ", so I wrote a " (a (@ (href "http://chicken.wiki.br/socket")) "socket egg") " which allows you to disable " "Nagle's algorithm (among other socket options) on Chicken TCP connections:") (pre "(http:listen-procedure \n" " (lambda (port backlog host)\n" " (let ((L (tcp-listen port backlog host)))\n" " " (i "(set! (tcp-no-delay (tcp-listener-fileno L)) #t)") " L)))"))) (blog-entry "February 18, 2008" "lighttpd's naggling issue" `((p "Benchmarking lighttpd on OS X with httperf, I found that persistent connections " "that were fetching files of certain sizes (some big, some small) had their first " "request satisfied in under 1ms, but experienced a 40ms delay on subsequent requests. " "Apache did not have this problem. " "Only " (a (@ (href "http://www.webmasterworld.com/apache/3320954.htm")) " one guy on the entire Internet") " reported seeing something like this, and he got (surprise) no response.") (p "Studying ktrace/strace and tcpdumps from both sides indicated it might be a Nagle " "problem, and since httperf does disable Nagling, that left lighttpd. Indeed, " "I found that lighttpd does not (as of 1.4.18) set the TCP_NODELAY " "flag on its sockets. I guess it assumes the OS disables the Nagle optimization " "globally, which is generally true on Linux, but not OS X. Or evidently Solaris, " "since " (a (@ (href "http://www.sun.com/servers/coolthreads/tnb/lighttpd.jsp")) "Sun said") " they patched lighttpd themselves.\n") (p "I rebuilt the lighttpd from MacPorts and added a small patch:\n") (pre "port uninstall lighttpd\n" "port -d extract lighttpd # -d to see extract path\n" ,(link "/pub/lighttpd-1.4.18-tcpnodelay.diff" "(patch network.c with TCP_NODELAY option)") "\n" "port install lighttpd \n") (p "and it solved the issue."))) (blog-entry "February 18, 2004" "Dreamcast hacking." `((p "I've started coding for the Dreamcast again recently, and posted a few things in the Dreamcast section. First, " ,(link "/hacks/dc/#demos" "serpent") ", a version of the KOS bubbles demo that runs about five times faster, due to an optimized assembly loop that transforms and sends vertices to the PVR via the store queues. This sparked a discussion on DMA, and a DMA-based variant coded by Dan Potter was added to the examples tree. Second, " (a (@ (href "/hacks/dc/#demos")) "oceano") ", which uses the specular highlight feature of the PVR to simulate sparkles on water. It doesn't try to be mathematically correct--rather it's meant as a jumping off point for others. Third, " (a (@ (href "/hacks/dc/#demos")) "punch") ", a test harness for benchmarking large polygon performance, originally written to test punch-through polygons. There are also a few " (a (@ (href "/hacks/dc/#patches")) "patches") " I wrote along the way, some of which are in the main KOS tree now."))) (blog-entry "April 30, 2003" "Summary of additions." `(p "Over the past year I've added several items: " ,(link "/hacks/brkout" "brkout") ", a breakout clone for the Dreamcast; " ,(link "/hacks/ultima6/" "u6edit") ", my first world editor for Ultima 6; and several " ,(link "/music/" "musical pieces") ". Today I added " ,(link "/hacks/ultima6" "pu6e") ", which supersedes u6edit and offers many more features."))) ,(sidebar))) ;; There was a (br (@ (style "clear"))) here previously--don't know what it did. However, found this comment on another site: ;; (*COMMENT* "\n\n\n\t\t
My tardiness in updating this page has provoked outrage in my readership community of one, and so I feel the time for such is ripe. Of course, I have been updating Trivial Hacks all along, though I guess nobody noticed.
\n\nBut, tardiness or not, I do have an excuse. Hmm? Yes, I was getting to that. It's simply that I've been too busy setting up my company, Ursetto Consulting, Inc. That's right — Ursetto Consulting, Inc. Check it out, if you dare.
\n\nOtherwise, not much has changed. The Esperanto page is still crusty. There's no Spanish page at all. The links... don't get me started. I haven't even changed the musical intro in years, by Crikey. But who cares? You love me anyway. So stay tuned to this space for more exciting updates, such as the new Music section and the rather explicit Searches page.
\n\t\n\t\n\tThe fates have once again conspired to have me update my home page. Let's see... at this rate, the next update should arrive in January, 2002. Unlike the reconstructive surgery of '98, I don't have too much to add this time around; but the comment about this page being rather crumbly around the edges was itself getting stale. As I'm sure that comment will be in a year or so.
\n
\nChange-wise, 24601.html now reflects the fact that I graduated, and this welcome page has obviously been rewritten. Or is it obvious? I'll have to check the weblogs to see if I got any hits in the last two years.
The Esperanto version of this page is rather outdated. This is because I haven't studied the language for a while, so I can't update it without introducing gibberish. On the flip side, this site might sport a brand new Spanish page soon. A boy can dream...
\n\t\n\t\n\n\tI'd been neglecting my page for quite a while and so it'd become rather crumbly around the edges, much like a lemon cookie. So I decided that, instead of writing a paper, I'd do some autumn cleaning. The result is not quite done but I've got all the previous \"content\" back on line, in a much more palatable format.
\n
\nI've finally produced Esperanto versions of this page and the navigation bar; eventually I plan to esperantize the entire site. I used the Latin-3 (iso-8859-3) encoding, so you'll need the proper fonts to view it. In Netscape, I use the TrueType font Times SudEuro; you can also get a whole bunch of Latin-3 TrueType fonts in one package from ftp.stack.nl. There's more information about Esperanto on the web (and elsewhere) at www.esperanto-usa.org.
\n
\nBy the way, the Esperanto version of this page isn't a straight translation; you'll have to learn the language to see what it says :) Don't worry, it only takes a few weeks to understand a reasonable amount, and less time if you're willing to use a dictionary constantly. In my case, my Esperanto totally cremates my Japanese, and I've studied Japanese for much longer. The proof of this is that there's no way I could write a non-trivial page in Japanese at this point. QED.
\n
\nI always appreciate e-mail, even if the entire message body is only \"your story sucks\". If you stop by, do drop me a line at ursetto@uiuc.edu.
\n