Finger info for phaethon@icculus.org...



Raw source and immediate archive at http://www.icculus.org/~phaethon/plan/

Entries are currently sorted in: Newest First

Syntax (time and date in UTC, my local timezone is PST/PDT):
[YEAR].[MONTH].[DAY] <space> ~[APPROX. HOUR] <space> <space> [SUMMARY]
<empty line>
[CONTENT]
<empty line>
<empty line>



2002.11.20 ~08 Blue skies: vt100, ncurses, and Q3VM.

Firstly, I wanted a way to place random text on a random location on
the screen at random times. There is already a function in cgame for
this functionality. A problem arises if I need to shift the location.
If done in all-C, the module needs to be recompiled. Alternatively, I
could write a QuakeScheme wrapper so the position is adjustable from
Scheme... but if I wrap DrawString(), why not DrawChar()? And the
cell-measuring functions? How about the whole font system?

Then there's the cvars method, but then comes the question of having
more than one string to draw. Have a set of cvars like "string0loc",
"string1loc", "string2loc"? Or the dimensions laid out like "0:20:foo"
in a cvar? I can see this method getting very very messy.

I got around to thinking about cells-based positioning, like a tty with
an addressable cursor. Row 3, Column 42. First model that came to my
mind was vt100. One possibility presented by an addressable-cursor
screen is a full-screen text editor. In real life, there already is a
full-screen text editor with a Lisp back-end. Or rather, a full-screen
Lisp acting as a text editor.

Anyone moderately involved with text mode is likely to be familiar with
the curses library, which helps utilize an addresssable cursor terminal
by presenting a terminal-independent interface (an API). The curses API
is fairly well-established in the area of text mode, and so is a useful
basis for C-coding to a full-screen text mode in Q3. One of the free
implementations of the curses interface is "ncurses", which is part of
the GNU system and thus why its most familiar to me.

As an aside, the Q3 UI is based on a 640x480 units coordinate system
regardless of resolution (and scaled up to current screen resolution);
character cells are 8x16 units. This yields a textscreen resolution of
80 cells horizontal and 30 cells vertical.

If I can whip up the necessary glue code to attach ncurses to Q3VM,
other potentials open up. For one, ncurses also comes with a text
windowing system. In a pinch, the ncurses windowing system can fill in
as a half-baked forms GUI. Porting (or rather gluing in...) ncurses
also allows porting ncurses-based programs to Q3VM. Such as... err...
um... tetris??...

Well, here is one far-fetched possibility arising from getting in
ncurses: Q3nethack.


2002.11.18 ~07 Q3VM glib

In another of those mad-scientist streaks, I added enough libc headers
so that glib-1.2 compiles without error. The libc headers are in CVS
for my Q3 mod; glib itself isn't. I haven't tested glib, yet. The
funny thing, I forgot why I wanted glib in the first place.


2002.11.13 ~11 QVMlibc

In the CVS repository for my q3 mod, I added a subset of libc and SUS
(POSIX). Covers ctype, strings, stdio, stdlib, errno, assert, unistd,
fcntl, dirent, time.

With some of the off-the-wall stuff I try, I'm thinking of renaming my
mod to something like: "Nonlinear Experimental R&D-Type Stuff Modding".


2002.11.09 ~13 Compiled vs Interpreted

I actually started on a long-winded entry on my thoughts about criteria
for "compiled" or "interpreted" for a language, when a google trip
turned up this link that is pretty much a superset of my ideas:

http://www.oche.de/~akupries/ics_lang.html

I had pondered over compiled vs interpreted as I mulled over the Q3VM
specs and the way it makes a distinction between code space and memory
space (JUMP to address 0 is vmMain(); a LOAD from address 0 does not
return the bit-level representation of vmMain()). I decided the
dividing line comes down to observing how the Program Counter (or
Instruction Pointer, et al.) acts, whether it branches into newly
created code (compiled) or stays within already pre-existing code
(interpreted). Since a VM has its own (emulated/simulated) PC, this
would mean bytecode would technically be compilation (from the point of
view of the VM), but still interpreted by the host machine (as the host
machine does not branch directly to the byte sequence).

I had considered bytecode to be a middle ground between compiled and
interpreted, but then I wondered if there may be other categories as
well -- echoes of the zero-one-infinity principle. As the mentioned url
illustrates, the whole gig is a matter of how many layers you need to
tear through; "compiled" and "interpreted" are relative terms. Java is
"more compiled" than Bash, Perl is "more interpreted" than C, and so on.


2002.11.08 ~10 Pb rant addendum

Right about now, I feel I'd rather play on a server full of aimbotters
than fucking with Pb. At least when I take out a cheater, I can
righteously gloat haughtily for the rest of the game. With Pb on, you
can't really be sure if a cheater slipped through or not...


2002.11.08 ~09 Punkbuster Burn@g3

The inevitable has thus happened. But a lot sooner than I expected.
Punkbuster managed to fuck itself in the ass with a short one.

Word in the grapevine is that the cheats/anticheats war is divided into
two goliaths: OGC and Punkbuster. Apparently OGC has something to do
with aimbots or other cheats or something. Punkbuster is... well, most
of the quakers know by now. Seems there's a back-and-fro between these
two camps, and the fun-seeking fraggers have gotten the short end of the
stick yesterday. Or the day before. Something.

What I observe: being randomly kicked from a server for "technical
difficulties" in loading "pbag". Whatever the hell that is. The kick
period ranged anywhere from before even seeing the loading screen to 50
minutes tops. The kick effect ranged from a graceful "disconnect" style
(with error messages el al) to a process murder so violent that the
entire computer locked up (fuct vidcard state).

I've tried whatever I could to restore playability, ranging from
restoring from backups to copying files from strange places to
reinstalling Q3 1.32. Results are mixed. As I write this .plan entry,
I cannot play on *any* Pb-enabled Q3 server. For values of any
including local server (dedicated mode) on network loopback.

For fuck's sake, **LOOPBACK**!!!!

Rumor has it the Pb folks (evenbalance.com?) were so eager to push out
an anticheat update that they missed installation or propagation
validity, or somesuch.

To add to the irony further, www.evenbalance.com was unreachable as of
6pm local time. So no manual updating/fixing. An acquaintance
theorized (D)DoS attacks by the counter-punkbuster camp -- take down the
master while Pb updates are broken and still in flux.

I managed to peruse part of the evenbalance forums before it went
unreachable. There was one thread where one very angry server admin was
venting over Pb's b0rk3ness (to the extent that he was getting kicked
off his own (presumably remote) server), calling for the ability to
revert to earlier (unbroken) versions (countered as being contrary to
Pb's lifestyle), or the ability to selectively choose or tweak Pb checks
(countered for similar reasons -- "all or nothing"), or announcing
significant changes in updates (countered as being a loudspeaker
announcement to cheaters). The response from the Pb folks was basically
along the lines of "the EULA you agreed to says you agree to ride along
with whatever updates we push out as they're pushed out; if you don't
like it, don't use it". The server admin's rebuttal was along the lines
of "we shouldn't have to put up with BROKEN updates -- this stuff is
supposed to work transparently". Then the rest of the thread were
basically denouncing the thread starter for being hot-headed and rude,
pointing out "cheats in general", history of cheats, yadda yadda,
without really addressing the points raised. In fact, one responder
even declared there was no point in the post. Then the usual "if you
don't like it, don't use it" fluff.

(I think one of the funnier exchanges in the evenbalance forums was
someone establishing the correlation of punkbuster's appearance with a
lack of cheaters in RTCW as being a purely cause-effect relationship.)

What disturbs me is the "don't use it, then" part. There is no middle
ground, no competitor, no alternative. It either is or isn't. Admins
would like anticheat mechanisms, but as things stand at the moment, the
choices are either Punkbuster (with all its secret agendas, benevolent
or not) or absofuckinglutely nothing at all.

I think that's what disturbs me the most about Punkbuster. Not any
unknowable ulterior motive, not the fact that reflexive voodoo magic is
bound to fuck itself, not that all anticheat mechanisms are
fundamentally breakable. But rather the fact that there is no other
choice, except larking out stark raving naked. An adage from a darker
age of telecommunications comes to mind: "you have any choice of
telephone color, as long as it's black".

You have any choice of anticheat software, as long as it's Punkbuster.


2002.11.06 ~07 The so-called "Super Tuesday"; voting day

Election Day. The ballot reminded me again that the US is based on a
representive democracy (as most so-called democracies tend to be). Five
of the seven pages regarded "whom" to vote for, and the other two were
"what" to vote on.

I prefer not to dawdle and languish over the ramifications of a
so-called democracy that puts into office people easily... "swayed"
by... "donations"... that lead to... er... "sponsored bills" that "help"
the said "sponsors" campaign to put into office said people that were...
"persuaded". So I'll concentrate on something that came mind as I
looked at the voting mechanism doohickey, which sort of relates to
security in general and a little bit on forensics.

The two times I've ever voted in my life (today, and two years ago), the
voting mechanism looked the same. In fact, it still looks the same from
when I went in with my dad a decade ago to watch him punch his ballot.
I don't know if this is an artifact of my city in particular (been here
for nearly 16 years), or the State of California in general.

The (paper) ballot itself has roughly the same area as that taken up by
the typographic ("letter") keys on a typical PC-ish keyboard. The
ballot is basically a souped up punchcard; for those familiar with
Scantron forms, it's like a big version of one that has the choice poked
out to form a hole instead of bubbling-in with a #2 pencil.

The voting machine is all-mechanical. It's a mostly plastic thin box,
just large enough to house the ballot. The machine's business face is a
grid of hole masks (to guide the holepunch). Stiff paper pages with the
meaning of the particular holes are bound between columns of holes
(rotating on fine metal rods). Laid horizontally, the pages flip down
to hide all but one column at a time. The end result is that the voter
turns to a particular page, and the printed choice points with an arrow
to the exposed hole representing the choice. As a neat trick against
improperly inserted ballots, another layer of plastic hole mask lies
just under the machine main grid of holes, spring-loaded against the
ballot, such that the two holes do not line up (blocking the holepunch)
unless the ballot is properly inserted deeply. An equally simple
mechanism at the insertion end uses small plastic posts that the ballot
end slips over to keep it anchored against the springs. Should the
ballot slip out, the spring pops out the ballot and de-aligns the two
layers of hole masks to prevent any punching.

(ASCII art, monospace font required)
  punch holes
 contents | semi-blank page
  V V V more pages>>
+-------------+-+-------------+-+-+
|#OFFICE FIO=>|o| |#|#|
|# ERI=>|o| |#|#| <- # = zebra codes (!)
|# RUMI=>|o| ========> |#|#|
|# |o| GO TO |#|#|
|#FOO YES=>|o| NEXT PAGE |#|#|
| NO=>|o| | | |
| |o| | | |
| GOATSE YES=>|o| check for | | |
| NO=>|o| chad | | |
+-------------+-+-------------+-+-+
  next column on ballot
  |
(next page) V
+-+-------------+-+-------------+-+
|#|#PROP X YES=>|o| |#|
|#|#blah NO=>|o| |#|
|#|#blahblah |o| ========> |#|
|#|#blahblah |o| GO TO |#|
| | |o| NEXT PAGE | |
| | MEASURE Q |o| | |
| | blah YES=>|o| | |
| | blah NO=>|o| check for | |
| | blahblah |o| chad | |
+-+-------------+-+-------------+-+

Eh... where was I...

Oh yeah. I mulled over my choices "on the spot", taking it SATs-style
(mark what I dunno, mark it for return (but on another sheet paper!), go
on to others, come back later). Yeah yeah, should've researched, yadda
yadda. But while I did, I noticed bits of chads in the holes, of
choices I didn't decide on yet. So much for secret ballots. Well, OK,
so I don't know who was at it before, but it's certainly disheartening
when you see a bit of chad in the "No" hole when you're thinking "maybe
Yes...". Even more disheartening when the chad doesn't fly away despite
all your blowing and realizing the only way you're going to get rid of
it is by punching it through into the chad collector... as your choice
(can't do it with ballot removed -- the holes masks don't line up).

Anyway, I was thinking, despite all this effort to make the ballots
"secret", something so insignifcant as a random cruft of paper sticking
to an anonymous holepunch on its way out can still give away so much
information.

I find it intriguing how something so insignificant as a tiny tad of
chad can say so much. Security is one thing, secrecy another. Security
through obscurity rests on secrecy, and then some tiny bit (literally)
in just the right/wrong place can blow this kind of security.

Hrm. I forgot where I headed with this.


Life: No Life found.

Project:
1. Project FI, Quake 3 mod (http://www.icculus.org/fi/)
 a. provide an extensible environment for a Q3 mod. The intended notion is that of "mutators" in Unreal Tournament.
 b. FI:WFC, a more faithful reproduction of Q2WF for Q3 than WFA.

2. QuakeScheme
 * Extensible language for Project FI.
 * Builds on TinySCHEME (http://tinyscheme.sourceforge.net/)
 * Deal with idiosyncrasies of Q3VM not handled by most other Scheme impls.

3. Q3VM libc
 * Implementation of Standard C Library for Q3VM bytecode.
 * Implementation of a subset of Single Unix Specification v2 (SUS v2).
 * Help import third-party library into Q3VM.

4. QS GUI/widget set
 a. Need to research advanced OO and GUI of Scheme derivatives and Common Lisp.
 b. Replication/extension of boxy widgets in Q3TA (Q3 PR 1.27+).
 c. Pie menus -- just to annoy theoddone33.

5. Q3 compilation toolchain
 [X] q3lcc sources (official version out with Q3A SDK 1.32)
 [X] q3asm - get static to work, dammit.
 [ ] q3as - assemble-only (.asm to .o).
 [ ] q3ld - link-only (.o/.a to .qvm).

5. PalmOS stuff
 a. PiNGer (gfx viewer)
  * generalize interface to a "any-gfx" viewer (libpnm?)
 b. ZBoxZ (file manager)
  * beef up its appness: menus, dialogs, pen actions


When this .plan was written: 2002-11-20 04:25:56
.plan archives for this user are here (RSS here).
Powered by IcculusFinger v2.1.27
Stick it in the camel and go.