My Best Teaching Is One-on-One


Of course, I team teach and do special lessons, etc.


But my best work in the classroom is after the lesson is over --
going one-on-one,
helping individual students with their assignments.


It's kind of like with computer programs, walking the client through hands-on.
The job isn't really done until the customer is using the program.


Friday, March 29, 2013

Bragging -- milestone on my asm68c project

Finally had enough time to stare at the screen long enough to fix an outstanding issue on one of my projects.

My 6800/6801 assembler can now handle both the standard

LDAA source

syntax and the

LDA source 

syntax as used in the 6809, which I originally designed it with. (Silly me.)

Now I need to decide whether to add the whole test suite to the Makefile.

Oh! There's a Makefile, too!

Or I could just press ahead on making an emulator or adding 6811 support or doing a 6809 emulator/assembler, or seeing if I can construct a framework in which I can build an IDE for Motorola's current crop of 8-bit processors, or, ...

Or I could get my BIF language running on 64 bit architectures, fix the file interface, ...

Or I could get my RanBunHyou project moving again, add the scrambles, ...

Too many things to do, not enough time to do them all and make a living.

Monday, March 25, 2013

Keeping the kids off the computer in the middle of the night.

Our children have the attitude that using the computer is a right, not a privilege. One seems to think that being denied is cause for outlasting his parents into the middle of the night and logging in while we are asleep.


"Fixing" this through technical means is not even a bandaid. It's the wrong thing to do in so many ways. But we need our sleep and this child needs to know some limits.


Here's one way to set some limits on Debian -- Use PAM to limit the time certain users can log in.:
デビアン Linux では制限を設定する一つのやり方としては、特定のユーザー号でログイン可能な時間帯を PAM というものを利用して決めるのです。

In the directory

  • /etc/pam.d

are several files where a PAM module called pam_time needs to be enabled:
に、 pam_time という時間関連の PAM上の一単位部品(モジュール)を有効に指定できる文書(ファイル)は幾つか在ります。つまり

  • login
  • su
  • gdm


(There is so much misinformation about this, and so much old information, on the web, it's not at all funny. Since PAM will evolve, this post will get old, and it isn't going to be the same for Fedora or other non-Debian distros, but for now this is how it's done on Squeeze.)
(インターネット網上で調べてみると、もう、まったく面白くないほどの誤情報や賞味期限切れ情報がどっさりと出てくるのを…。まあ、 PAM の進化次第この投稿も賞味期限に着くし、フェドラ Linux などのデビアン以外の配付版では違いますが、現在のスクイーズ版ではこういうやり方です。)

In the files login and su, there are already appropriate lines, commented out:
login 及び su という文書に、注釈化されて無効になっている適切な指定行は既に在ります。つまり

# account    requisite


Remove the hash mark from the head of the line:

account    requisite


Or, you might want to copy the line and remove the hash mark from the copy so that you remember that it was commented out in the stock version of the files. Or you can leave comments like this:

# Enabled 2013/03/25 JMR

Then, in the file gdm, you need to add a similar line:
続いて、 gdm という文書に似た文を足す必要があります。つまり、

account    required


before the line

@include common-auth


At least, that's where I added it and it's working for me now. You might want to leave comments here, as well:

# Added 2013/03/25 JMR


Now you need to restart PAM. I just reboot. Even if you have tools that are supposed to remember (and re-calculate) all the order dependencies for you, by the time you look it all up and get it straight in your head, you could have just rebooted and been done with it long ago.
PAM を再起動させる必要が在ります。ボクにしては単純にシステム全体を再起動します。例え、それぞれの順番と依存関係を纏めて、必要によって再計算してくれる道具が在ったとしても、その命令と使用法を調べて全部を理解して適用でる間に、もうはるか以前にシステムの再起動が終わって新しい指定が効いているのです。

The above lines are necessary to tell PAM (Pluggable Authentication Modules) that it can read the following file:
以上の指定文があって、付け替え可能・認証機能・単品群 PAM に次の


and accept the rules it finds there.

This file is where you finally add the rule that blocks the login accounts they use during the hours they are supposed to be sleeping. If user1, user2, and user3 are the user ids under which they log in, and the banned time is from 11:00 pm to 5:00 am, 
やっと、子供らが使ってログインしている帳簿(アカウント)を寝ているはずの時間帯に無効にする指定文を、このファイルに足すと効力が有って差し止めることができます。たとえ、ログインしているユーザーイッドは、 user1, user2, 及び user3 になっているとして、禁止の時間帯が午後11時から午前5時までであると


should do the trick.

But test it first with 


and make sure it blocks only these user ids.

Check the messages in /var/log/auth.log and /var/log/daemon.log, too, after trying to log in. You can use ls and tail:
ログインを試みてから、 /var/log/auth.log内や、 /var/log/daemon.log内のメッセージをも見ておくのをおすすめします。以下のように、 lstail の命令は使えます。

sudo ls -lart /var/log
sudo tail -40 /var/log/auth.log
sudo tail -40 /var/log/daemon.log

Then change the time range to the range you think you should ban, 24 hour clock, military style. Make sure you check the logs again.

Mind you, if you have to resort to this kind of thing to discipline your kids, you're going to have to use strong passwords, and keep the passwords where the kids won't find them. But you should be using good passwords anyway, since weak passwords can often be guessed by people out there trying to log in to your computer through the internet.

Hiding your passwords in plain sight is a topic for another rant, but I have to go.

Friday, March 22, 2013

bc on MSWindows

Now that you have MinGW installed and running on your PC, it's time to install bc.

bc? basic calculator.

I've mentioned bc before. It's a great little basic calculator for *nix systems. Programmable. Quite literally all the precision you could ever want, if you want it.

If you remember using the old BASIC language interpreters as a substitute for a desktop calculator, and don't like having to open up a spreadsheet document just to check your math on something, bc may be what you're looking for.

bc is one of the packages available for cygwin distribution, so the following is not by any means the only way to get it onto your MSWindows PC. But you can use MinGW to install it, here is how.

bc is not an official package of MinGW, so this is a good way to practice compiling and installing free software by hand.

First, find the source code. As I type this, the wikipedia pages have a link to the source code (alpha, too) on the gnu servers. (The pages also have a link to the bc package from the separate GnuWin32 project on SourceForge, but then you wouldn't get the practice.) (Surprisingly, searching at google for "bc basic calculator source code" did not yield the gnu repositories on the first pages. It did bring us back to the wikipedia pages, so it got close.)

So, download the source code from the gnu servers. (Not the alpha version, I haven't yet figured out how to get that to compile and run on MinGW. Unless you're good at debugging these, in which case, please leave some suggestions in the comments.)

You get a tarball, which stock MSWindows does not know how to deal with. But that's okay, because MinGW should have the tar utility installed with it. (If you type "tar" at the msys shell command line and it says it doesn't understand, check the packages and install the appropriate package with "mingw-get install". But mingw-get isn't going to work without tar, so I guess that should never happen.)

Save or copy the tarball into your user's home directory:


If you don't already have an msys shell running, go to the MinGW folder in the Start menu and get an msys shell running. (Not the uninstall icon, of course.) Enter the following commands at the prompt:

tar -zxvf bc-1.06.tar.gz
ls bc*

(tar didn't used to accept leading hyphen on the options, now it does.) The directory list should show that the tarball has been unpacked. Move into the bc-1.06 directory that tar just made and tell the configuration script to tell you what it can do:

cd bc-1.06
./configure --help
You probably want to add the readline option or the bsd version of it. (Don't need both.) If you plan, for some reason, on cloning your installation and distributing it to others, use the bsd version to keep yourself in conformance with the license. (I assume you are not going to cloning your installation tree, but I'll remind you just in case.) Here's how to configure it with the bsd version of line editing:

./configure --with-libedit

This will take a few minutes and tell you lots of things you may not really understand. Scan the output but don't worry about the stuff you don't understand unless it says "ERROR!" and stops. Warnings, you don't need to worry about just yet, either. Sort of.

When the prompt returns to you, unless there have been errors, you can make the executable:


Make handles the compiler commands for you. Are you let down? Don't be. Look back at the compiler output. ("make clean; make" again if you've lost the output.) You'll see some key warnings. The ones about memset and related functions are not that important, but you can edit lib/number.c (the file number.c in the directory lib) and add the line

#include <string.h>

at the end of the other include lines to get rid of that.

Make it again. (You may want to do a "make clean" just to be sure.) Test the results by typing the command


Once you get the copyright message so you know you are in the bc shell, type

scale = 100

You should see 1.5454 ... stretching out for 100 places. Now type


to get back the the msys shell and type

bc/bc -l

to start bc with the math library. This is where things get good. Except you have to fix something first. In bc, type

4 * a(1)

That's 4 times the arctangent of 1. It should type the value of pi out to twenty places. (The last digit will be incorrect.)


But it probably won't.

Until somebody at decides to update the package, it will probably complain about segmentation faults and the like. I looked on the web for "bc segmentation fault string.h save_adr" or something like that and found an archived mailing list thread and a patch from the linux-from-scratch project.

If you wanted to practice applying patches you could have applied it before you added the line to #include string.h. If you really want to practice, rename this directory, unpack the tarball again, and apply the patch there.

But it's easy enough to do by hand. Open bc/load.c (the file "load.c" in the directory "bc") in your text editor, and look around line 159. You'll find the line

program_counter save_adr;

On that line, save_adr needs to be declared static. Change it to

static program_counter save_adr;

and save it. Run make again, and repeat the tests. Just for fun, try this:

scale = 1000
4 * a(1)

That should give you pi to a thousand places (the last digit being incorrect again).

Way cool, huh? Now you need to make bc more generally accessible, so you don't have to type the whole path all the time.

make install

and bc is now available as just "bc". (dc is also fun to play with.) After you install it, the manual pages should be available, so you can type

man bc

to get more information about the cool things you can do with it. You can also look in the Examples directory for ideas.

I'll be using bc in some of my posts to the math-and-English blog, too.

Free C on MSWindows -- MinGW -- エムエスウィンドーズ用の自由型C言語 -- ミン・ジー・ダブリュー

I do a lot of my programming work in C. That tends to make it inaccessible to many most of the people I associate with in the real world. (Ergo, disconnected from most of the people in my network.)

Which is frustrating. But there's something that might help (a little).

I'd known about MinGW (Minimalist GNU for Windows) and CygWin (Cygnus tools for Windows) for quite a while, but it was only recently that I tried MinGW to solve one of the problems I have trying to help the PC club at the school where I have taught for the last five years.

[A little note here, I am currently (May 2015) recommending CyGwin instead of MinGW for beginners. Install and use is similar.
--Joel Rees 20150530]

C is about the most essential tool in programming. Absolutely fundamental.

But it is hard to get system administrators to let you put a compiler on your workstation, if your job does not seem to require it. Compilers cost money, but that's not the problem. The Intel processors and the MSWindows OS still do not properly protect the system from the adventuresome user, and compilers allow the adventuresome user to go adventuring in the system.

C is considered especially dangerous because of pointers.

Anyway, C is scary. So sysadmins don't help you get it. In fact, they may scream if you follow these instructions on your work PC. But C is important if you want the freedom to use your tools well, and if you want to teach the fundamentals of computer science in a relevant way.

Anyway, this is something you can do at home on you own PC. And it may help at work if there is a way to get the system admins to allow its installation.

MinGW is small. You can download quickly, or carry it around on USB media, and install it quickly. You can even run it from USB media. The footprint is minimal, so it doesn't leave much behind. Especially, it leaves very little at all behind when MSWindows OS systems are set up to restore the system configuration to the official state at boot-up.

Of course, you shouldn't install it at work without permission, but it's small enough and clean enough that your system administrator may be willing to let you.

So, it provides one potential solution to one part of the problems faced when trying to teach the kids in the computer club how to really use computers. It also may allow me to distribute tools I build for teaching that I write in C. (I plan to write more on that on my Math and English [or maybe programming fun] blog.)

(The other big problem is the students' interest. You can't force interest in programming, and trying to make it artificially more interesting than the latest youtube video or free on-line game tends to teach them the bait, not the real reward. Solving this problem just requires patience and creativity and time spent getting to know the students.)

Once you have the permission issues settled, installing MinGW is actually pretty straightforward. The project hosts their distribution on SourceForge, at (But you really want to check the link on MinGW's pages, of course. Search for it with your trusted search engine, satisfy yourself you are going to the right place to download the real thing.)
許可の問題をクリアしたら、そのインストールの手段はそれほど複雑ではない。プロジェクトはソースフォージの に掲載して公開配布しています。(日本のソースフォージにすると ですが、自動的にできたページですのでそれほどの情報がありません。ちなみに、自分で MinGW のサイトに行って、リンクを確認して下さい。自分の信用できるサーチエンジンを使って調べて、本物のダウンロードページに行っていることを確認して下さい。)

Hosting on SourceForge gives a project's potential users some level of confidence that the project is not bait for installing malware, but, ultimately, you have to judge the danger factors for yourself.

They have a GUI installer, so you can download that. Look for the "Getting Started" link. On that page, find the link to "mingw-get-setup.exe". (It will be the same file as you will find on the installer section of the SourceForge download files page.)
グラフィカル感覚のインストーラはあります。それをダウンロードしていいです。"Getting Started" のリンクを探して下さい。そのページには "mingw-get-setup.exe" へのリンクを探したら良いです。(ソースフォージのダウンロードページのインストーラセクションで見つかるファイルと同じです。)
 For comparison, the url I have for the getting started page on the MinGW site is
and the link for the Installer download files at SourceForge is

確認するために、ボクが指摘したい MinGW サイトの getting started ページのアドレスは
です。一方、日本ソースフォージサイトの MinGW のこのページ

The graphical installer is small, so it doesn't take long to download, and it manages the rest of the download for you. The rest of the download does take about ten minutes to a half an hour if your computer is reasonably new (within the last five-ten years) and your internet connection is reasonably fast (1 Mb/S or better).

(Click the information button (i in a circle) on the files page in the sourceforge project to show the checksums, if you plan to check those.

There's a chicken-and-egg problem with getting software to check the checksums. I suppose I should do a write-up on gnupg, too, to show how to start the bootstrap of trust at a different site.)
チェックサムを確認するソフトウェアを獲得することに、鶏と卵の問題があります。 gnupg の使い方を説明する投稿を私が書くべきです。ね。信用の関係をまた異なるサイトでブートストラップ法を案内すべきです。)

If you click the download link, you get an executable, so you don't have to unzip it. If you want to check the checksum, you should do that before you launch the executable the first time, of course.

The installer has the usual stuff explaining what it does, and asking if you really want to install. Read it. If you are not familiar with the GPL license, go to the license pages on and get yourself comfortable with the license terms.
インストーラは通常の「ご使用にあたっては」の説明が出てから、「本当にインストールしますか」と聞きに来ます。頑張って目を通して下さい。 GPL の利用許諾条件はあまり詳しくない場合は のライセンスページを是非、参考して下さい。よく考えて、意味を充分理解して、納得できてからご利用になっていただきたいのです。

If you have questions about the license, more reading is available at the Electronic Frontier Foundation and the Free Software Foundation.
この許諾書について質問が出てきたら、 Electronic Frontier Foundationウィキペディアの記事)及び Free Software Foundationウィキペディアの記事)のサイトで更に詳しく案内してくれるのです。

Check the certificate. It something looks funny, ask someone. MinGW has a mailing list. (If you ask me here, I'll try to respond, but no guarantees that I'll get back to you very soon.)
証明書を見て下さい。何かおかしいと思われるなら誰かに聞いて下さい。 MinGW はメールリストがあります。(ボクにも聞いていただいてもいいですが、ご返事を指していただきたいのですが、どれほど速やかにできるかは、ごめんなさい。約束できません。)

If you don't feel comfortable, take your time. Back out of the installer. Think about it. Wait for someone on the mailing lists to respond. Patience is part of the cost of freedom.

If you decide you are ready, launch the installer again and proceed to the dialog about which components to install and where. Leave the place (path) to install to as it is, unless you really know you want it somewhere else. (If you know such things, you aren't bothering to read this, now, are you?)
もし納得して、用意ができたと思われるなら、また起動して、何の部品をどこにインストールするかのダイアログまで進めば、インストール位置、いわゆる「パス」=="path" をそのまま置きましょう。(本当にその意味がわかって、別の場所に置きたいなら、この説明をなぜ、わざわざ読む必要があるかが、気になるはずです。)

At the package selection dialog, you want the C package, of course. You probably want C++ too, unless you know you don't. Select both.

Unless you know you don't need msys, you need it. Select it.
そして msys のパッケージは必要だと思うべきです。確実の不用だとわかっている場合以外は選択して下さい。

The MinGW developer toolkit is likely to be useful, too, and doesn't take that much time or space, I'd suggest getting it, too. If you want to compile anything big you will need it. Yes. Select it.
さらに、MinGW developer toolkit の開発者用の道具箱も役に立つはずです。それほどの時間も場所も食わないので選択するのをお薦めします。大きいプログラムをコンパイルする時には絶対に欲しいのです。選択して下さい。

Ada, Fortran, Objective-C? Select them if you think you might be interested, and can stand five to twenty more minutes of download/install time. Or you can get them later with the mingw-get command-line package tool. (Which I describe a bit below.)
他の言語の AdaFortranObjective-C については、面白いと思われるなら選択してもいいでしょう。さら5〜20分掛かるだけです。また、後にコマンドラインのツールの mingw-get を使ってダウンロードできます。(以下は少しだけ触れますが。)

Hit the proceed button and wait. At the end, it asks if you want the shortcuts installed. You probably want at least the one in your "Start Menu". Check that.

Click finish.

There is some talk in the documents about modifying your system path in the control panel. Unless you know you need to, don't. Sure, it's fun to run a C compile from the MS-shell command prompt, but you don't need to do that right now.

Once you have it installed, you can go to the Start menu and find MinGW, and start up a MinGW shell. (You did select msys, didn't you?)
インストールを完了してから、スタートメニュの中に MinGW を見つけて MinGW のシェルを起動させることができます。(msys を選んでいるでしょうね。)

You can type in your helloworld.c program using MSWindows's own Notepad text editor accessory, or you can use vim (You did install the developer tools, didn't you?). Well, okay, if you are still reading this blog instead of playing with exploring MinGW, you probably want to type in your first program with Notepad, not vim, but finding where to save it is a bit tricky.
ここでは、エムエスウィンドーズのノートパッド文字エディターを使って helloworld.c のプログラムを打ち込んで良いです。それとも、 vim を使っても良いです。(Developer tools も選んでいますね。)まあ、まだ遊べだしている、探検しだしているのでなければ、 vim よりもノートパッドの方が楽でしょうが保存する場所を見つけるのはちょっとコツがあります。

If you left the install path as the installer suggested, your msys shell's home directory for you is at
インストーラの推薦の位置にパス("path")を置いているならば、 msys シェルのホームディレクトリは

(The version may progress from 1.0 sometime. The username will be your MSWIndows login user name.) That's where you should save your first program. (Oh, and get used to the slashes. MSWindows will show them as it does, yen sign in Japan, backslashes most other places in the world. msys will show the path name separator as Unix would, with a forward slash.)
(いつか、バージョンが 1.0 から上がっていくでしょうけど。ユーザ名はエムエスウィンドーズのログイン名になっているはずです。)この位置に最初のプログラムを保存すれば良いです。(ああ、そうです。スラッシュに慣れるしかないのです。エムエスウィンドーズはエムエスウィンドーズのまま、日本では半角の"¥"、世界のほとんどでは半角の"\"で表示し続ける一方、 msys はパスの区切り文字を Unix の世界に従って、正スラッシュの"/"の半角文字で表示します。)

Not sure what program to type in for your beachhead program? Here's a variation on the typical helloworld.c program:
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char * argv[] )
  printf( "The compiler is working.\n" );
   printf( "1 + 1 = %d\n", 1 + 1 );
   return EXIT_SUCCESS;


Save it under your msys home directory, as something like "testing.c".
msys のホームディレクトリの下に "testing.c" のような名称で保存して、

Then go to your msys shell and type in
msys シェルに行って
and hit the enter key. It should show the name you saved the source under in the file listing.

Now assuming you saved it as "testing.c", type
それで、 "testing.c" という名前で保存した場合、
cc -o testing -Wall testing.c

If the compiler gives you warnings and errors, check what you typed in the program source. If the compiler says nothing, it worked. Check the results by typing "ls" in the shell and hitting enter again. You should see the executable object, testing.exe in the list, along with the source file.
コンパイラが警告やエラメッセージを発生してくれるなら、打ち込んだプログラムソースをもう一度確認して下さい。しかし、何の文句が発生されない場合は完成です。結果を確認したいので、もう一度シェルに "ls" を打ってエンターキーを押と、リストの中に、ソースファイルと一緒に testing.exe も出てくるはずです。 

Now try running it. Type 
and hit Enter.

If it prints out what the source would lead you to expect it to, you have a functioning C compiler. Cool enough, hey?

Now, about the mingw-get command. Let's get a list of components. type:
では、 mingw-get の命令はどうしましょう?部品をリストアップしましょう。次の命令を打ち込みましょう。
mingw-get list

(I don't know the difference between list and show yet.) That scrolls by too fast to get a good look at. Try this, instead:
(今のところ、ボクは list と show の引数の違いがわかれりません。)アアアッ!スクロールが早い!何が入っているか読めない。ヨッシ!次の命令をやってみよ。
mingw-get list | less

You can hit the enter key or the spacebar to scroll through the output.

If that's still too much trouble, or if less somehow didn't get installed, try this:
それはまだ面倒なら、あるいは less はなんとかインストールしていない場合は
mingw-get list > packagelist.txt

and open packagelist.txt with Notepad or vim. That allows you to look at the packages available.
と打って、この命令でできるはずの packagelist.txt を Notepad 若しくは vim でを開けば良いです。ゆっくりとダウンロード可能なパッケージを閲覧できます。

You can get the documentation manual pages for installed packages by doing "mingw-get install" on the package from the command line. After the download, it will complain that the package is installed, and then it will proceed to install the manual pages. Which is just what you want.
インストール済パッケージの説明書の man ページをインストールするにはコマンド行から "mingw-get install" を送ることができます。ダウンロードが済んだら mingw がパッケージがもうインストール終わっているのだ文句を言って man ページをインストールしてくれるのです。これで結構です。

Let's check by looking at the man pages for vim:
vim の man ページを出して確認しましょう。
man vim 

If less or man or something else important didn't get installed, or if you need man pages, scan through the packagelist.txt file I just told you to create, find the package name for it, and mingw-get install it. For example:
less とか man など、大事な物や、他の man ページなどがちゃんとインストールされていない場合、先ほどの作り方の説明の packagelist.txt ファイルを見て、そのパケージ名を探して、 mingw-get インストールしましょう。例えば、
mingw-get install msys-less

will install less if it hasn't been installed, and it will install the man pages for less either way.
とすると、 less のインストールができていなければ、 less をインストールします。どちらにしても、 less の man ページもインストールしてくれるはずです。

And, of course, there's the help option, to find out what else you can do with mingw-get:
それで、 mingw-get で他にどんなことができるかを見たいでしょう。ヘルプを出しましょう。
mingw-get --help

That should get you started with MinGW.
英語はちょっとつらいけど、これで MinGW を始めることができます。

You can also compile, test, debug, and maybe install software you pick up the source code for elsewhere, of course.

My asm68c and bif-c projects compile okay, but they seem to have some issues in addition to the bugs I'm already trying to make time to fix.
ボクの asm68cbif-c プロジェクトはコンパイルしますが、只今対処中のバッグ以外に何らかの不具合あるらしい。さて。

Especially, you can compile and install the *nix basic calculators in the bc package.
特に薦めたいのは *nix 世界の基本電卓の bc パッケージをコンパイルしてインストールできます。

bc is way cool.
bc はすごいです。

Wednesday, March 20, 2013

Putting people in jail for our own misunderstanding.

I should be writing a post on my math and English blog about simple series. Or exercising.

I'm thinking about weev.

Being put in jail for a non-crime under one of the many laws that turns the US national laws into a mockery of law.

And the CFAA. 

How can you respect law when laws like this exist?

Well, okay, specific laws that can't be respected have existed forever. Or, at least, ever since humans started trying to codify law.

Respect for law requires not getting your internal systems tangled up about specific laws that cannot be respected.

Analogy time: Grammar.

People do not speak according to rules of grammar. Grammar exists as our collective attempts to explain how people speak. Explaining how people speak is not, in and of itself, necessary, but grammar is very useful when you try to figure out what people have put in writing, when they aren't around to explain it themselves. (Well, putting in writing includes audio tracks in this modern world.)

Grammar also helps you dig into your own deeper motivations, when you look at something you said or wrote and wonder why?

Tying the analogy to the thought people do not behave according to the laws that people write down. Legislated law exists as an attempt to help us understand, post-facto, how society should respond to what people do. You can't tell whether any particular act will be good or bad until after the act is done. (Often, well after.) That's why the US Constitution is supposed to prevent laws that would make it possible to charge people with crimes they haven't yet committed.

Supposed to. But that is not directly the topic of this rant.

Bad law exists. It always will, as long as humans write law.

We don't want to just turn a blind eye to bad law, but we also don't want the existence of bad law turn us against law-in-general.

I have lots of friends like weev, people who live significant parts of their lives in deliberate contradiction to the written law. If we put all of them in jail, I would be awfully lonely out here.

Yeah, I mean, from the odds I calculate, if we send to jail all the people who have deliberately done things as bad as what weev has just been sentenced for, there would be more people in jail than not.

Examine yourself and ask, have you ever put unknown persons at risk for deliberately breaking a "minor" law, or a law that "should not be a law"?

Putting people at risk is not the question here, the law, and your attitude is the question. The risk is the reason for the question.

If weev should go to jail for the part he played, so should the engineers who designed the database he casually walked into.

Hmm. Put scare quotes on that: "engineers" so-called.

No. Let's not judge them until we can judge their managers. Chances are that management at AT&T played a significant part in putting that travesty of a database live on the web.

They broke laws. Deliberately. For profit, or, at least, to avoid losing the profits somebody in the company had irresponsibly projected. Yeah, we pull the thread and it connects, well, everywhere. Bean-counters who push bad projections, anyone?

But weev is the arrogant one, the one who sticks out. I'd talk about the old ritual of scapegoats, but that would cloud the issues.

The problem is that we misunderstand computers.

Computers are not magic boxes that, if we can figure out the right incantation, will somehow magically fix all of our problems.

Computers consist of three things:

Memory is just fancy paper that can be indexed, and can be re-written (written and erased and written again) at will, at high speed.

The cpu is just the fancy pen that writes and re-writes. And it can calculate. And it can be directed where to write or re-write next. And it is fast.

There are specific features, but there is no magic.

(If there is magic, it is in what we do with them, but that's beside the point.)

We can do good or evil with computers, just like any other tool at our disposal, if we will take the responsibility to learn the tools.

Think about this. If you saw a battered notebook sitting on the sidewalk outside some company's store, what do you do? You probably ignore it. But someone you know might pick it up and notice it belongs to the store. Then what?

There are principles of courtesy that weev ignored. Courtesy is not supposed to be law. When courtesy becomes the law, it ceases to be courtesy. That takes all the meaning out of courtesy, and never fails to codify stuff that ends up out of context, and wrong.

And, had weev followed all the principles of courtesy that have (not yet) been (properly) established, the current record is that he still would have been charged with doing something illegal.

Some people say weev is just grandstanding, just trying to get attention. I could not argue with that, I'm not sure weev himself would argue with it. Is grandstanding such a crime? Is it worth burdening society with four years of keeping him well fed and away from "computers", away from the rest of society out here?

Wherever "out here" is.