銀河の歴史がまた1ページ(日記)

Last Update (2022/06/09 06:20:30)
1997.09.06から数えて counter 番目のアクセスです。

ミラーサイト [www.ceres.dti.ne.jp] [yk.rim.or.jp]

[ホームページ] [日記] [日記ファイル一覧] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

jdiaryの最新(作成)記事ダイジェスト

2022.06.05(日) 15:09:35 NEC Atrem WX5400HP 購入

NEC Atrem WX5400HP 購入

最近、家庭内のWi-Fi接続がなんかうまくない感じになっていたので新ルータを購入。

症状はWi-Fi機器同士でアクセスポイントの取り合いをやっている感じ。 片方がつながると、もう片方がつながらなくなる、そんなイメージ。

前回のルータ購入は2014年だった。 今回の機種は35子機までの接続をうたっているので、しばらくは持つかな?

p.s.

1回ファイルが消えた(!?)ので再エントリー。 Windows 11 って OS reboot がかかるとファイル消えるのかしら? うーん。他のファイルは消えてないな。。。なんぞこれ。

p.p.s. 6/9 追記

自宅のWi-Fiの接続状況は大いに改善された。 ルータのカタログにある子機の接続数は以前より増えていたが本当らしい。 35機も子機ないからMAXまでつながるかはわからないけど。

2022.05.28(土) 22:58:50 宇宙人のガンダム解説チャンネル

宇宙人のガンダム解説チャンネル

tag: anime

アニメ版、各種小説版などいろいろ網羅して調査している。

ニコニコの方はキャラクター解説が独立してて見やすい。

ガンダムの話題だとモビルスーツ解説の方が多くなるのは無理もないけどキャラクター解説の方も増やして欲しいなーこれなー。

シャアが酷い言われようでワロタ。 でも逆シャア見てるとそうなるよなぁ...。

ララァとアムロの解説も面白かった。

しかし、ガンダム知らない人がこの解説動画見るのかな? 全部見る時間は無いけど一応話のネタとして知っておきたいみたいな切り抜き動画的な需要はあるかも。

2022.05.22(日) 16:19:28 ニュートンの業績

ニュートンの業績

数学、力学、光学分野に大きな業績を残したニュートン。

これらの業績の基本部分は、ケンブリッジ大学の先生だったニュートンが自宅待機を強制されていた1665-1667年の間に着想を得たらしい。

当時のイギリスでは感染症が大流行して大学が止まっていたとのこと。

そんなこともあるんだな...。

2022.05.08(日) 13:28:17 kubernetes 1.24.0 出てた (dockershmは無くなった)

kubernetes 1.24.0 出てた (dockershmは無くなった)

tag: kubernetes

予告通り、kubernetes 1.24 では dockershim がなくなったようだ。

そんなわけで、コンテナランタイムとして docker社から寄贈された containerd を使うことにする。

普段、dockerのインストールを以下のように実施している場合、containerd.io は既にインストールされている。

    apt-get install -y docker-ce docker-ce-cli containerd.io

Kubernetesインストール時のkubeadm initに --cri-socket=/run/containerd/containerd.sock オプションを与えて Containerdソケットを明示的に指定すると containerd 対応完了。

docker系コマンドも普段通り使える。

2022.05.05(木) 22:27:24 乙女ゲー世界はモブに厳しい世界です

乙女ゲー世界はモブに厳しい世界です

tag: anime

アニメ版の出来はB級みたいな感じだが原作小説は良い感じ。

ちょっと凝った趣向を毎回提供してくれている。

2022.05.02(月) 19:27:05 Selenium を使って Web の画面をキャプチャしてみた

Selenium を使って Web の画面をキャプチャしてみた

tag: selenium

Twitter がそうなのだが、curl で HTTP GET しただけだと内容が取れない SPA 系の WEBサイトを取得するため selenium を使ってみた。

Selenium は、Chromiumなどのブラウザをpythonから制御するためのdriverやライブラリのセット。 Webサイトへの自動アクセスができたり色々できる。

debian11の場合は以下でselenium環境が整う。

sudo apt install -y chromium-driver chromium python3 python3-pip
sudo pip3 install selenium

Dockerにselenium環境を焼きこんで使う場合は、SeleniumHQさんが作った https://github.com/SeleniumHQ/docker-selenium が便利だった。

Webサイトにもよるが https://www.yahoo.co.jp/ のように X11 画面が無いと selenium からの chromium 起動に失敗するケースがある。

SeleniumHQさんが作ったdocker-seleniumでは、VNCの仮想Xサーバをdockerイメージの中で起動しているのでX11画面が必要なサイトでも selenium + chrome が動作する。 (力技だw)

docker-seleniumでは、ポート番号4444でremote selenium driver接続を受け付けているので、そこのURLを指定してdriverを初期化する感じになる。

画面を撮影したりドキュメントタイトルを取得したりするpython3スクリプトを以下に示す。

cat > access-url-and-screen-shot.py << "EOF"
#!/usr/bin/python3
#
# 指定されたURLにアクセスしてスクリーンショットを撮影する
#   Web サイトの document title も 取得する
#   スクリーンショットも採取する
#
# 結果はJSON型文字列として標準出力に出力する。
#   title : document title
#   screenshot : base64 encoded screenshot (PNG format)
#
# 環境変数 SELENIUM_URL または 起動オプション --seleniumurl に指定がある場合は、ネットワーク経由のselenium driverに接続する。
# 指定が無い場合は PATHに指定がある chromedriver コマンドを起動する。
#
# https://www.selenium.dev/documentation/webdriver/  Web Driver のドキュメント
# 
# https://qiita.com/DisneyAladdin/items/431e9fd0c1cf709347da 【Python】Seleniumでスクリーンショットを撮る - Qiita
#
# https://github.com/SeleniumHQ/docker-selenium SeleniumHQ/docker-selenium: Docker images for the Selenium Grid Server
#     SeleniumHQ さんが作った Dockerimage https://hub.docker.com/u/selenium
#     これを使えば selenium docker image を自作しなくて済む
#     helm chart 版もある模様 https://github.com/SeleniumHQ/docker-selenium/blob/trunk/chart/selenium-grid/README.md
#     内部にVNCのX Serverを起動しているので、画面はあるからスクリーンショットも撮影可能。
# 
# https://qiita.com/ryoheiszk/items/93b2d52eec370c09a22e DockerでPython-Seleniumスクレイピング環境を立てた - Qiita
#     上のSeleniumHQを使ったサンプルアプリ
#
# 2022.04.10
#
import os
import sys
import argparse
import json
import base64
import time
import subprocess
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def browser_fetch(url, verbose, screenshot, fullscreenshot, cmdscreenshot, waitsec, seleniumurl):

    # デフォルトの待機秒数は 5
    if not waitsec:
        waitsec = 5

    # 出力用の辞書型を作成
    result_dict = {}

    if verbose:
        print("url="+url)

    # output file name
    # filename =  os.path.join(os.path.dirname(os.path.abspath(__file__)), "screenshot.png")
    filename =  "screenshot.png"

    # 引数で seleniumurl が指定された場合は、それを使う
    # 指定が無い場合は、環境変数 SELENIUM_URL を読み取ってみる
    if not seleniumurl:
        seleniumurl = os.getenv("SELENIUM_URL", None)

    # seleniumurl の指定が無い場合は、localにあるchoromiumコマンドを起動してみる
    if not seleniumurl:
        # 起動オプション設定 (普通にlocalにあるchromedriverコマンドを起動する場合)
        options = webdriver.ChromeOptions()
        options.add_argument("--headless") # ヘッドレスで起動するオプションを指定
        options.add_argument("--disable-gpu") # GPU使用しない
        options.add_argument('--disable-extensions')       # すべての拡張機能を無効にする。ユーザースクリプトも無効にする
        options.add_argument('--proxy-server="direct://"') # Proxy経由ではなく直接接続する
        options.add_argument('--proxy-bypass-list=*')      # すべてのホスト名
        # options.add_argument('--start-maximized')          # 起動時にウィンドウを最大化する
        # create driver (普通にlocalにあるchromiumを起動する場合)
        driver = webdriver.Chrome(options=options)
    else:
        # ネットワーク上にあるchrome driverに接続する場合
        options = webdriver.ChromeOptions()
        driver = webdriver.Remote(
            command_executor=seleniumurl,
            options=options
        )

    # 要素指定時の最大待機秒数を設定
    driver.implicitly_wait(5)

    # access web site
    driver.get(url)

    # timer 強制的にwait
    time.sleep(waitsec)

    # get title of the page
    title = driver.execute_script("return document.title;")
    result_dict["title"] = title
    if verbose:
        print("document title is "+title)

    # chromium コマンドを直接使ってスクリーンショットをとるww
    if cmdscreenshot:
        # chromium --headless --disable-gpu --screenshot URL
        subprocess.run(["/usr/bin/chromium", "--headless", "--disable-gpu", "--screenshot", url])

        # Read Screen Shot file
        f = open(filename, "rb")
        data = f.read()
        data64 = base64.b64encode(data)
        str64 = data64.decode('utf-8')
        result_dict["screenshot"] = str64
        f.close()

    # 画面サイズはdoumentのサイズに応じて変更しない
    if screenshot:
        # Get Screen Shot
        driver.save_screenshot(filename)

        # Read Screen Shot file
        f = open(filename, "rb")
        data = f.read()
        data64 = base64.b64encode(data)
        str64 = data64.decode('utf-8')
        result_dict["screenshot"] = str64
        f.close()
        if verbose:
            print("screen shot save to "+filename)

    # 画面サイズはdocumentのサイズに応じて変更。webpage全体を撮影する。
    if fullscreenshot:
        # get width and height of the page
        w = driver.execute_script("return document.body.scrollWidth;")
        h = driver.execute_script("return document.body.scrollHeight;")

        # set window size
        driver.set_window_size(w,h)

        # Get Screen Shot
        driver.save_screenshot(filename)

        # Read Screen Shot file
        f = open(filename, "rb")
        data = f.read()
        data64 = base64.b64encode(data)
        str64 = data64.decode('utf-8')
        result_dict["screenshot"] = str64
        f.close()
        if verbose:
            print("screen shot save to "+filename)

    # Close Web Browser
    driver.quit()

    # output result JSON
    print(json.dumps(result_dict, indent=2, ensure_ascii=False ))

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("url", help="access url")
    parser.add_argument("--screenshot", action="count", help="save screen shot, default window size")
    parser.add_argument("--fullscreenshot", action="count", help="save screen shot, whole web page")
    parser.add_argument("--cmdscreenshot", action="count", help="save screen shot, with chrome command")
    parser.add_argument("--verbose", action="count", help="save document title")
    parser.add_argument("--waitsec", type=int, help="wait page load in seconds")
    parser.add_argument("--seleniumurl", help="selenium service url , like http://selenium-chrome:4444/wd/hub ")
    args = parser.parse_args()
    browser_fetch( url=args.url , verbose=args.verbose, screenshot=args.screenshot, cmdscreenshot=args.cmdscreenshot, fullscreenshot=args.fullscreenshot, waitsec=args.waitsec, seleniumurl=args.seleniumurl)
EOF

chmod +x access-url-and-screen-shot.py

2022.05.01(日) 20:12:46 パリピ孔明 OP曲 ちきちきばんばん

パリピ孔明 OP曲 ちきちきばんばん

tag: anime

原曲(ハンガリーの曲らしい)とアニメ版カバー曲と、比較動画があったのでリンク。

音節と母音をあわせて日本語版の歌詞作ったらしく、言語は違うけどハモってて笑うww

原曲の紹介(ついでにJolly日本デビュー)もしてたらしい。 avex ようやるわ。

2022.05.01(日) 18:24:05 Ryzen Master 再び

Ryzen Master 再び

tag: ryzen, host-vermeer, ryzen-master

久しぶりに試したら Ryzen Master が Windows 11 に対応していたらしく、インストールに成功。

クロックダウン方向の設定はあまり無いようだ。

2022.04.30(土) 13:59:53 1つのサーバーで複数の証明書が使える、SNI(Server Name Indication)って?

1つのサーバーで複数の証明書が使える、SNI(Server Name Indication)って?

tag: sni, ssl, tls

従来のSSL通信は、はじめにサーバー(グローバルIPアドレス)に設定されたSSLサーバー証明書に対して通信経路を確立させ、その中でデータをやり取りしているため、SSLサーバ証明書は設定された1つしか利用すること出来ないのです。 そこで登場したSNI (Server Name Indication)という技術によって、1台のサーバーでも複数のSSLサーバー証明書がドメイン名(URL)単位で利用できるようになったのです。 仕組みとしてはSSL通信時にドメイン名を通知することで、サーバー側がどのSSLサーバー証明書を利用すべきか判別するのです。

ApacheとかNginxとかを使って、1台のWebサーバ上に複数のホスト名ベースのVirtual Hostを建ててSSL/TLSを設定した際には内部でSNIが使われている。

curl でSNI(Server Name Indication)設定しているサイトにアクセスする場合には、TLSハンドシェイクの段階で接続先ホスト名を指定しなければならないので、 curl -H "Host: example.com" のようなHostヘッダ設定では対応できない。

そんな時には curl -v https://example.com/ --resolve example.com:443:XX.XX.XX.123 みたいな感じで --resolve オプションを使う。 (まだDNS設定していない時)

もしロードバランサーを使う場合には、SNIに対応しているかチェックが必要。(SNIには対応していないLBは結構あるらしいがこれに当たるとハマる。)

SNIはiOS 3.x時代とかAndroid 2.x 時代にはブラウザが対応していなかったらしいが、今なら平気だろう。

2022.04.21(木) 17:38:06 Happy Hacking Keyboard から ロジクール K835OWB 有線 メカニカルキーボード 青軸 に変更

Happy Hacking Keyboard から ロジクール K835OWB 有線 メカニカルキーボード 青軸 に変更

久しぶりにメカニカルキーボードを使いたくなって検索したところ、以下がヒット。

ロジクール K835OWB 有線 メカニカルキーボード 青軸 クリッキー テンキーレス コンパクト メカニカル キーボード 有線 有線キーボード オフホワイト windows surface K835 国内正規品

日本語配列しか製品ラインナップが無いので日本語配列を購入。

この製品は青軸なのでかちゃかちゃ音がして楽しいww

ロジクールには赤軸の製品ラインナップもあるので、もうちょい静かなキーボードが欲しい人にはそちらをオススメ。

結構長い間英語配列を使っていたのでしばらく混乱する予定。 たぶん一番面倒なのがゲームのキー設定変更か。

2022.04.18(月) 12:17:48 パリピ孔明

パリピ孔明

tag: anime

笑うわこんなんww

挿入楽曲に奇妙に力が入ってて草

ご丁寧に三国志の計略の話を前振りでやってからライブ会場で再現して見せてくれるの好き

2022.04.13(水) 12:16:29 git sparse checkout の新型 (つーても2年前だが) (git 2.25以降)

git sparse checkout の新型 (つーても2年前だが) (git 2.25以降)

tag: git

Git 2.25以降で使用可能。Gitサーバ側の対応も必要だが2年前の記事だし今なら普通に使える。

使い方は以下。

git clone --filter=blob:none <repo>
cd <repo>
git sparse-checkout init
git sparse-checkout set <path-to-directory>

上のリンクは以前の sparse checkout の紹介記事だが、今回の新型は簡単に使えてgit tag情報も使えるので便利になった。

2022.04.09(土) 15:03:53 bash 5.1 以降のブラケットペーストモードを off にする (複数の改行を含む長大なテキストをペーストした後に選択モードとなり Enter 入力が余計に必要になるのを回避する)

bash 5.1 以降のブラケットペーストモードを off にする (複数の改行を含む長大なテキストをペーストした後に選択モードとなり Enter 入力が余計に必要になるのを回避する)

tag: bash

bash 5.1 以降にデフォルトで有効になった余計な機能のようだw

回避方法は ~/.inputrc に以下のように記載する。

set enable-bracketed-paste off

または、 ~/.bashrc に書く場合は以下のように記載する。

ただ、 bash の bind は元々キーバインド編集用のコマンドなので、bashが端末に接続されていない時(scpとかで内部的に~/.bashrcが読み込まれる場合)に警告が出るのでオススメしない。

bind 'set enable-bracketed-paste off'

2022.04.08(金) 01:06:45 Java 18 で file.encodingのデフォルトcharset が UTF-8 に ... gradle / maven コンパイル時警告やテスト結果表示が文字化け

Java 18 でfile.encodingのデフォルトcharset が UTF-8 に ... gradle / maven コンパイル時警告やテスト結果表示が文字化け

tag: java, java18, maven, gradle, windows-terminal

Windows Terminal + pwsh 上で実行した場合 gradle と maven のコンパイル時警告とかが文字化けしててつらい。

java -Dfile.encoding=COMPAT 指定すれば従来通りの動きをするらしいが、ちょっと様子見。

Windows版のjavaも環境変数LANGを見て処理変えてくれればいいのに。

ちなみに、以下のコマンドで各種システムプロパティ設定が見物できる。

java -XshowSettings:properties -version

p.s. 4/8

■Javaの臨時対策(環境変数による臨時対策)

Javaのデフォルトオプション指定は環境変数 _JAVA_OPTIONS で指定できる。

javaのコマンド側の機能。

export _JAVA_OPTIONS="-Dfile.encoding=COMPAT"

上の指定でビルド時の文字化けは直った。

とりあえずの回避策としてはコレかな。

余談だが java -jar hogehoge.jar と実行したjava単独アプリの起動時には (というか java hoge みたいに存在しないクラスを指定しての実行時にも ) コンソールに以下のように環境変数を使ったぜ!と表示が出る。

Picked up _JAVA_OPTIONS: -Dfile.encoding=COMPAT

■mavenの場合の対策 maven-surefire-plugin (pom.xmlに記載する)

さて、ウチの場合、Javaのソースコードは全部UTF-8になっている。

文字化けするのはテストコードの中でSystem.out.printlnしている所で、コンソール出力の日本語が文字化けする(テスト自体はパスする)。

テスト実行時のコンソール出力だけなんとかなれば良い。

pom.xml に書く場合は以下。 maven-surefire-pluginはテストを実行する時のplugin。 ここでJava VM に渡すオプションを指定する。


<project ....

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>

  <build>

    <plugins>

      <!-- 2022.04.08 Java 18 から file.encoding=UTF-8 がデフォルトになったが 
           テストの System.out.println の結果は Windowsの場合は SJIS で出力される前提らしいので COMPAT を指定 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
          <argLine>-Dfile.encoding=COMPAT</argLine>
        </configuration>
      </plugin>

■mavenの場合の対策 cargo-maven3-plugin (環境変数による臨時対策)

プラグインごとに対策が異なるのが泣けるw

cargo ( https://codehaus-cargo.github.io/cargo/Tomcat+10.x.html ) は、mavenの中からTomcatを起動してwarアプリを動かすplugin。

起動したTomcatのログ出力はコンソール出力されるのだが、pom.xmlに設定を書いても回避はできず、環境変数 _JAVA_OPTIONS="-Dfile.encoding=COMPAT" 指定しないと文字化けが止まらなかった。

うーむ。

■gradleの場合の臨時対策 (環境変数による臨時対策)

gradleの場合、build.gradleに書いて回避する方法はまだ発見できていない。

結局、Javaコマンド側の機能に頼って環境変数 _JAVA_OPTIONS="-Dfile.encoding=COMPAT" を設定することで回避。

export _JAVA_OPTIONS="-Dfile.encoding=COMPAT"

ウチではJavaのソースコードはUTF-8なので、build.gradleにソースはUTF-8にしてくれと書いておく。

// Javaのコンパイル時オプション。
// ソースコードのエンコーディングは UTF-8
// jdk10を使っていて jdk8 向けのバイナリを作るなら --release 8 が必須
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
    options.compilerArgs.addAll(['--release', '8'])
}

これでこちらも文字化け解消。

■全体的な感想

ビルドツールの中で(おそらく)子プロセスとしてjava.exeを起動して、System.out.printlnなどのコンソール出力をさせているヤツは普通に全滅って感じ。

コンソール出力も普通に $LANG 見て動いてくれた方が良かったんじゃ...。

■Oracle製 Windows版 java.exeのコンソール出力は cmd.exe の chcp 指定に従う (対策その2)

Oracle製 Windows版 java.exeは、 コンソール画面ウィンドウに対して cmd.exe上で chcp により設定されたコードページを読み取ってそれに従ってコンソール出力の文字コードを変動させる特殊機能が入っているようだ。

ただし、Windows 11 では、Windows Terminal 内部で実行された cmd.exe の上で実行された chcp 65001 だけが正常に動作する。

Windows 11 では、コマンドプロンプトとかWindows PowerShell 5系で使われていたコンソールウィンドウは使われなくなり、Windows Terminal の中で cmd.exe とか PowerShell.exe とか pwsh.exe が動くようになったのだが、Windows Terminal + powershell.exe + chcp 65001 とか Windows Terminal + pwsh.exe + chcp 65001 という組み合わせは文字化けを呼ぶ。

今回ウチでハマったのは Windows 11 + Windows Terminal + pwsh.exe 環境だったからのようだ。

(Windows 10なら、PowerShell 5系で使われていたコンソールウィンドウの中で動く powershell.exe から実行した chcp 65001 のコードページ設定を Oracle製 java.exe は正常に読み取ってコンソール出力を UTF-8 に切り替える。)

なお、Windows Terminal の中の cmd.exe + chcp 65001 で Windows Terminal に設定したコードページは、子孫プロセスまで有効なようで、以下のような小技が使える。

これがJava 18文字化け対策その2。

Windows Terminal 1.12 + cmd.exe + chcp 65001 しか勝たん...。

ちなみに、maven plugin の cargo:run だけは、この Windows Terminal + cmd.exe + chcp 65001 技が効かなかった。 これは 環境変数 _JAVA_OPTIONS="-Dfile.encoding=COMPAT" で文字化け回避した。

さらにちなみに、cygwinとかMSYS2で使うmintty.exeをコンソールウィンドウとして使った場合、Oracle製Java.exeはコンソール出力をSJIS固定で出力する。 (端末ウィンドウのコードページが取得できないからだろうけど、file.encodingもガン無視してSJIS固定ってなんやねんwww)

普通に環境変数 LANG 見て切り替えてくれよん。

p.s.

UTF-8表示実験するときは、フォント設定も大切。 コードページ設定が原因で文字化けしているのかフォントが足りないので表示できないのかで混乱するので。

p.p.s 4/10 追記

windows 10 のコンソールウィンドウは conhost.exe だったらしい。

一応、 Windows 11 でも 設定 -> プライバシーとセキュリティ -> 開発者向け -> ターミナル の所で、 Windows ターミナル から、 Windows コンソールホスト に設定を変更すると、Windows 10 までの標準コンソールが使用できるようになる。

しかし、上のようにして設定変更しても、 起動した conhost.exe + powershell.exe + chcp 65001 上では Java 18 の文字化けは発生する。 (この組み合わせ Windows 10 なら動いてたけどな)

ちなみに、conhost.exe + cmd.exe + chcp 65001 なら、java.exe はコードページ設定を読み取ってコンソール出力できる。

みたいな都市伝説はここから始まるのか

p.p.p.s 4/16

おおう。 F#もoutput指定無視してカレントコードページでコンソール出力するのか。 なんかMSのコーディング規約とかあるんかね。

2022.04.02(土) 21:57:26 ロシア vs ウクライナ戦争

ロシア vs ウクライナ戦争

開戦4日目といえば、キーフ陥落も時間の問題か?みたいな雰囲気だったけど、当時からロシアが負けると理由付きで解説していた Kamil Galeev さんの連ツイの翻訳があったので紹介。

p.s.

続きの連ツイを紹介。

2022.03.25(金) 17:57:52 Windows標準機能でHDDのデータを完全消去する cipher /W:dirname コマンド

Windows標準機能でHDDのデータを完全消去する cipher /W:dirname コマンド

tag: windows10

メモメモ。

OS起動ドライブに対して使う例は紹介されていないけど、一応動くことは動く。

cipher /W を使う場合、埋め用ファイルを作成するディレクトリ名を指定する必要があるので 実際の使用方法は以下のようになる。

C:
cd \
mkdir hoge
cipher /W:hoge

Copyright(c) 1996-2022 George(小濱 純). All rights reserved.
私の作成したページへのリンクはご自由にどうぞ。
このページに間違いや要望などがありましたら george@yk.rim.or.jp まで御連絡ください。
メール本文に 6020-5440-3372 とか私の 本名 を漢字で書いて頂くと、ウチのSPAMフィルタを通過できます。

[ホームページ] [日記] [日記ファイル一覧] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>
(I am using white list SPAM filter. To avoid it, please write 6020-5440-3372 in mail body. This key word is valid since 2009-06-14 until 2022-12-31.)