メモの日々


2002年02月14日(木) 午前休暇の日

会社

  • 眠くて眠くて。
  • 14:45 どうにもWindowsの動作が遅いので久しぶりに再起動してみることにする。果たして速くなるのか?
  • 15:10 速くなった。Windowsがださいのかな。
  • 16:40 地区「その他」のコードが16ビットに収まらない件を何とか切り抜けたところ。これから候補ワインに加える処理を実装してみる。18:00までには完成させるべし。
  • 21:00 候補ワイン関連の実装を終えた。時間かかったな。まあ予定より色々作らねばならなかったので仕方ないかな。もう帰ろうかなあ、どうしようかなあ。
  • 21:35 CLIEに液晶保護シートを貼った。失敗した。

テレビ/本

  • WEB+DB PRESS vol6。Resinの紹介など。読みが分からない。

2003年02月14日(金)

会社

  • (9:05)出社。
  • 色々雑用を。うーむ。
  • え、TECH B-ing?わしズム?TECH B-ing読み終わったら貸してくれるとありがたい。
  • ドキュメント作成中。
  • カラー化後の社内報を捨てた。捨てる前に読み返したが、この短い期間にも色々変わったなと感じた。がんばろう、みたいに書いてあることが全然実現できていなかったり。意気込みだけでは何もできない。
  • 機能設計書完成。完成だ。完成したの。
  • (20:20)退出。遅くなってしまった。早く帰ってADSLの設定せねば。

[etc] バービーボーイズライブで復活

LIVE EPIC25というライブで3日間だけ復活するようです。ソニーミュージックのページに載っていました。エンリケさんは浜崎あゆみのライブの写真で見かけておぉーと思ったりしていたのですが、いまみちさんは今どうしているのでしょう。

[hard] PC注文

注文しました。エプソンダイレクトで以前にも書いたこれ

を。Windows XP Professional で モバイルPentium4 1.8GHz メモリ512MBにしてMS Officeは迷ったけど付けずで送料税込みで190365円。高ーい。PC自分で買うのは初めてです。ちゃんと届くのだろうか。あと一週間くらいかかるのだろうなあ。早々に新機種発表になるかもなあ。

ところでエプソンダイレクトのオンラインショップはIE6で注文処理をしていたら途中でJavaScriptエラーになって先へ進めなくなってしまいました。これでは注文取れませんよー。仕方ないのでMozillaで購入。

あ、あとクレジットカードの番号を入力したのですがそのページSSL使われていなかったような気がします。不安だ。SSLだったらごめんなさい。

[service] 無料ウェブスペース

はてなの国内で無料のHPスペースを提供してくれるサイトを探しています。広告無し・FTP可・CGI可のところのみでお願いしますという質問への回答に色々なサイトが紹介されていました。わがままな質問だけど、該当するサイトは結構たくさんあるのですね。

[web] robots.txt

ロボットについてちょっと調べたのでメモ。「Disallow」と書いてガードするわけだけけど、「Allow」と書いてガードを解除しているサイトもある。この書き方がはやらない理由が分からない。

[service] はてなアンテナ(2)

頑張って登録した。登録するだけならいいんだけど、グループ分けをしようとするととたんに使い勝手が悪くなる。詳細の編集画面がもっと見易くなること希望。ソートできるといいかも。あとこのままだとグループの構成を変えようとしたときに作業量が莫大になりそうなのでその辺のインタフェースを工夫してもらえるといいかなあ。わがままだな。

[service] ADSL(2)

設定しました。特に問題なく接続完了。WindowsUpdateを実行してもすぐに終わる快適さに満足。

で、スピードを計ってみました。結果、下りが1.4Mbps上りが0.8Mbpsくらいでした。12Mで契約しているのでちょっと遅いのかな。でも気にしません。


2004年02月14日(土)

  • たくさん寝てしまった。寿命が縮んだ。
  • 2000年11月の日記を補完。ここが始まり。やっと補完作業完了だ。
  • 完了ついでに過去の日記を読む。面白くてやめられない。こんなの面白いのはおれだけだろうけど。

[etc] 我要

をインフォシークのテキスト翻訳で中→日翻訳すると我が要る物を補ってくれる。その具体的な数字はどこからでてくるのか。

もっと面白い翻訳でてこないかなと思って色々試してみたけど見つからなかった。

やること

  • 決算
  • 納品
  • 請求
  • 契約

2006年02月14日(火)

[dev][soft][howto] SubWCRev

TortoiseSVNにはSubWCRevというツールが付属していて、これを使えばSubversionの作業コピーのリビジョン番号をソースコードに埋め込むことができることを知ったのでメモ。

SubWCRev is Windows console program which can be used to read the status of a Subversion working copy and optionally perform keyword substitution in a template file.

(追記)

上記はリンク切れ。現在は

かな。翻訳もされている。

SubWCRev は、Subversion の作業コピーの状態を読み取り、オプションでテンプレートファイルのキーワード置換を行うのに使用する、Windows コンソールアプリケーションです。ビルドプロセスの一部として、ビルドするものに作業コピーの情報を組み込むのにしばしば利用します。典型的なのは、「About」 ボックスにリビジョン番号を含めるのに使用することでしょう。

やること

  • 決算
  • カレンダーを買う

2007年02月14日(水)

  • だいぶ安定してきたと思ったが、ここにきてややこしい問題を色々発見。もうひと踏ん張りが必要。
  • 職場にマスクをしている人が多い。早くも花粉症らしい。

[soft] Firefox 2でタブの縦置き (2)

昨日の続き。

昨日のsheepmanさんのエントリを読んで、おれもTab Mix Plus Forumを検索してみた。そして、この投稿からWidefox 2.0というページでタブの縦置きが紹介されていることを知った。

このページに書かれているuserChrome.cssの内容はsheepmanさんの書かれていたものとほぼ同じ。で、どちらのuserChrome.cssを使っても、このページに説明されているようにTab Mix Plusの設定で[表示]→[タブバー]→[タブバーの位置]の値を「下部」に設定するとタブを右側に表示できた。ばんざい。

昨日悩んだページの先頭へスクロールしてしまう問題も、Tab Mix Plusの設定を色々といじっていたら直ってしまった。

これでタブ縦置きで生活できるぞ。

[soft][dev] userChrome.css さっぱり分からん

分かるようになりたくてちょっとだけ調べたけどやっぱり分からん。一応メモ。

が関係ある気がしたが違うのかもしれない。

Chrome element names and IDs

The best way to discover how to select an element in the user interface is to use the DOM Inspector.

とあるのでDOM Inspectorを活用すると分かるのかもしれない。

DOM Inspectorについて調べると、

が見つかった。

やること

  • 確定申告
  • 年金

2023年02月14日(火)

[dev] ROS2でノードに対するテストを書く

ROS2にlaunch_pytestというものがあることを知った。これを使えばノードを立ち上げて外部からその振る舞いをテストすることができる。

Writing a simple publisher and subscriber (Python)にあるMinimalPublisherをテストするコードをメモ。

まず、テスト対象ノードと通信するテスト用ノードを作成する。topicトピックを購読して、受信したメッセージをキューに保存するだけ。

from queue import Queue

from rclpy.node import Node
from std_msgs.msg import String

class DummyNode(Node):
    def __init__(self):
        super().__init__("dummy_node")
        self.topic_queue = Queue()
        self.topic_subscription = self.create_subscription(
            String, "topic", self._receive_topic, 10
        )

    def _receive_topic(self, msg):
        self.topic_queue.put(msg)

テスト本体は次の通り。

import queue

import launch
import launch_pytest
import launch_ros
import pytest
import rclpy

from concurrent.futures import ThreadPoolExecutor
from dummy_node import DummyNode

@launch_pytest.fixture
def talker_description():
    return launch.LaunchDescription(
        [
            launch_ros.actions.Node(
                executable="talker",
                package="py_pubsub",
                output="screen",
            ),
        ]
    )

@pytest.fixture(scope="session")
def thread_pool():
    pool = ThreadPoolExecutor()
    yield pool
    pool.shutdown()

@pytest.fixture
def dummy_node(thread_pool):
    rclpy.init()
    node = DummyNode()
    thread_pool.submit(rclpy.spin, node)
    yield node
    node.destroy_node()
    rclpy.shutdown()

@pytest.mark.launch(fixture=talker_description)
def test_talker(dummy_node):
    for i in range(10):
        try:
            msg = dummy_node.topic_queue.get(timeout=2.0 / (i + 1))
            assert msg.data == f"Hello World: {i}", f"index={i}"
        except(queue.Empty):
            pytest.fail(f"no message. index={i}")
  • @launch_pytest.fixture を指定して、launch.LaunchDescriptionの配列を返す関数を定義する。ここにテスト対象ノードの情報を記述することで、テスト時にそのノードが立ち上がる。配列なので複数のノードを立ち上げ可能。
  • dummy_nodeというフィクスチャで先に定義したDummyNodeノードを生成して立ち上げている。ThreadPoolExecutorを使って別スレッドで動くようにしている。
  • テストは @pytest.mark.launch で修飾し、先に定義したlaunch.LaunchDescription配列を指定する。メッセージを受信する間隔がだんだん短くなるようにしているので、ループの5回目くらいでテストが失敗する。