2025年10月11日土曜日

絶滅メディア博物館への寄贈品

 なんか自分で忘れてしまいそうなので、これまで絶滅メディア博物館に寄贈したものをここにメモっておこうと思います。そうしないと「あれ?どこやったっけ?」になりそうなので:-)

博物館の方で収蔵品データが登録されれば、そこにリンクします。随時アップデートの予定。

2024年

Au PashaPa -  Auの携帯電話に後付する小型デジカメ

MPMan - ご存知、テープやdiscではないsolid stateな携帯音楽プレーヤ(MP3プレーヤの先駆け)

 LIBLie - ソニーが出したeInk採用の電子書籍端末。書籍は買い切りではなくレンタル方式だったのが嫌われたけど、実は先見の明はあったのかも

2025年

Nikon Coolpix 100 - Nikon の実質的最初のコンパクトデジカメ。PCMCIA type-IIカードになっていて、PCとのデータ転送ができるが画像表示部は本体にはない

 Nikon Coolpix 300 - Coolpix 100 と同時発売。こちらは画像を表示できるだけでなく、ペンで書き込みまでできるが、PCとのデータ伝送はSCSI

TOSHIBA PDR-2 - これもPCMCIA type-IIカードになってPCに差し込んでデータ伝送するもので画像の表示はできない

OLYMPUS μ - 35mmフィルムフルサイズのコンパクトカメラ。

 

Webブラウザの開いているウィンドウ・タブを記録する (PC移行時のために)

PCを新しいものに移行しようとすると、Webブラウザで開いている多数のウィンドウやタブをどう移行するかで前回も悩んでました。ちなみに前回はWin7からWin10ですね。今回はWin10からWin11。

前回は無理矢理開いているものを新しい方にもっていくのをやってたんですが、そろそろ開いているタブやウィンドウにも重複が激しく、この際減らしたいわけです。。。そう、ガベージ・コレクションですね:-)。

主に使っているのがFirefoxとChromeなので、ちょいと探すと拡張機能でTab-Session-Managerなるものがあり、両ブラウザに対応していると。

これで、現在の開いているウィンドウのすべてのタブのタイトルとURLとか諸々を保存できます。保存したものはJSON形式です。

これを、HTMLでタイトルとURL(リンク)に変換して新しいPCのブラウザで開けばページ内検索でほしいものを探して、再び開くことができるだろうということで、えいやっとPython3で書いたのがこのプログラム。若人はこんな書き方をしてはいけません。プログラマは1週間経つと赤の他人なので、読めなくなります:-)。

2023年6月7日水曜日

Python3 のクラス属性はcopy-on-writeでインスタンス属性になるのか?(そうではなくshadow-on-assignというそうです)

2023年6月11日、色々と調べてくださった方の情報を追記しました。それをみてもらえれば「copy-on-write」というのはやはり的外れでした。ので、タイトルも若干修正。
(2023年6月17日。「shadow-on-assign」はChatGPT命名だそうです→ https://twitter.com/sumim/status/1667680973960654849 )

 オライリーの 入門Python3 (分厚い奴ね:-)と以下の記事を見て???と思ったので実験。

記事: Python クラス変数 と インスタンス変数 の違い https://aiacademy.jp/media/?p=922


テストしたコードはこれ。

class Z:
    y = 'a'

a = Z()
b = Z()
print(f"Z.y = {Z.y}")
print(f"a.y = {a.y}")
print(f"b.y = {b.y}")

a.y = 'x'
print(f"Z.y = {Z.y}")
print(f"a.y = {a.y}")
print(f"b.y = {b.y}")

Z.y = 'q'
print(f"Z.y = {Z.y}")
print(f"a.y = {a.y}")
print(f"b.y = {b.y}")

a.__class__.y = 'r'
print(f"Z.y = {Z.y}")
print(f"a.y = {a.y}")
print(f"b.y = {b.y}")
実行した結果。

Z.y = a
a.y = a
b.y = a
Z.y = a
a.y = x
b.y = a
Z.y = q
a.y = x
b.y = q
Z.y = r
a.y = x
b.y = r

つまり、クラス属性はインスタンス生成時には、そのインスタンスはクラス属性を共有しているが、その値を変更(write)する際には、インスタンス属性としてcopy-on-writeするということでしょうかねぇ。。。

ちょっとcopy-on-writeのところって、分かりにくくないか?。むしろ上記の例なら「a.y = 」で書き換えるのをエラーか何かにしてしまった方がいいんじゃないだろうか?。

勿論、言語の設計はその言語の設計者の自由なんだけど。なんか、これでうっかりして挙動に頭を抱えている人がいないか心配してしまった:-)

2022年4月12日火曜日

Twitterにおける新たな削除機能の提案 (既投稿ツイートの編集機能よりもマシな手法として) / Proposal of a new deletion function on Twitter (as a better method than the editing function of posted tweets)

(Click to English translated version.)

本稿はTwitterの一利用者としての思いつきを書いたものであり、実際に採用するには、実装やユーザインタフェース等の一層の検討が必要と思われる。しかしながら、Twitterがより良くなる一助になればとの思いで書いた。
 

提案する削除機能


本稿で提案したいのは、現在のTwitterのツイート削除機能の変更、あるいは第2の削除機能の追加である。

Twitterでは、個々のツイートにはURLが付与されており、その一つ一つがあたかもWebページのように閲覧できる。次のURLは私が投稿したツイート例である。

https://twitter.com/tsaka1/status/1511731179846012928

WebブラウザでこのURLをアクセスすると、内容が
「This is a test tweet.」
であることがわかる。

このツイートを削除すると、そのURLをアクセスすると
「このページは存在しません。他のページを検索してみましょう。」
のように削除されている旨のメッセージが表示される。そして、このツイートに対するリプライも表示されなくなり、リプライのリンクも解除されていることがわかる。

リプライツイートを見ると、リプライとしてツイートされたことはわかるが、リプライ先ツイートが削除されている旨表示されるのみである。

ここで提案する新たな削除機能では、削除された際に、単に削除されたことだけでなく、例えば
「このツイートは2022年4月11日 0時50分に削除されました」
と削除された日時を表示する。そして、リプライやコメント付RTからの参照は削除前と同様につながったままとするものである。

リプライやコメント付きRTなどの参照関係を維持することで、ツイート内容の訂正に相当する機能を実現すると同時に、削除したときにスレッドが分割されてしまうような事態を回避する。

例えば、内容を訂正したいツイートがあれば、訂正済内容のツイートをそのリプライとして投稿し、元のツイートについては本提案における「削除」を行う。そうすれば、元のツイートに対するリプライやコメント付きRTのツイートから元のツイートを閲覧しようとすると、削除されていることがわかり、そこにぶら下がっているリプライで訂正後の内容を知ることができる。
 

既投稿ツイートの編集機能との比較


最近、Twitterで既投稿ツイートを編集する機能を設けるべきか否かという話題が盛り上がっている。しかしながら、単純に自由に編集できるようにすると、例えば次のような困ったことが生じる可能性がある。

本来AとBは異なるのに、ある人が「A = Bである」とツイートしたとする。それに対して大勢の人が「このツイートは間違っている」とリプライした後で、その問題のツイートを「A ≠ Bである」と編集してしまうと、リプライの方が間違っているかのように見えてしまうだろう。

以上のことから、ツイート編集機能を設けるのなら、編集履歴を閲覧できるようにするべきだという意見もある。それによって上記のような事態でも編集履歴を確認できれば、後でツイートの内容を覆したこともわかるだろうという考えであろう。確かに、誰もが自由に編集できるWikipediaも編集履歴も自由に閲覧できることからも、妥当な発想に思われる。

しかしながら、例えば[1]などのように、ツイート中のリンク先を見ない人が多いという問題がしばしば話題になっていることを考えると、その編集履歴がどの程度閲覧されるかについては疑問がでてくる。

本稿で提案する削除機能であれば、この例のような場合も、削除して訂正ツイートをしていることがわかり、その削除済ツイートに大勢のリプライがぶら下がっていることがわかるわけである。

以上のアイデアは筆者が昔使用していたUSENET NewsシステムのSupersedes機能の利用経験からの発想したものである。

References

[1] 現代人は読まない…。リンク先を見ずにリツイートしまくる人が大半であると判明 https://www.gizmodo.jp/2016/06/22_5.html


2022年1月29日土曜日

WindowsのファイルにZoneID属性を付与して、外部から持ち込んだOffice系ファイル等の安全性を高める

 タイトルに書いたとおりです:-)

Windows10等では普通にWebブラウザでダウンロードしたファイルには「外部から持ち込んだよ」的フラグがついて、例えばExcel等はそのまま開いてもマクロなど実行されない「保護ビュー」モードになります。

この解除はExcel等の中で保護ビューモードをやめさせるか、エクスプローラーなどでファイルのプロパティを開いて、最下部にチェックを入れる等すればよいのですが、その逆ができるようにはなっていません。

一方、フリーソフトウェアの中にはダウンロードしたファイルにこのフラグを付与しなかったりするものが有ります。また、外部からファイルの持って来る方法として、例えばネットワークドライブとしてマウントするような方法だとフラグは付与されません。

これはちょっと不安なので、フラグを立てる方法を探しました。ぐぐるとなんぼでも見つかりますが、私が注目したのは次のページです。

ZoneID を付与する方法など - setodaNote

なんと notepad.exe で付与できるとあるじゃないですか。。。あと属性の内容を閲覧する際に、more にリダイレクトで与えています。 

ということは、リダイレクトで属性の付与もできるのではないか?と思い、やってみたら無事できました。

その結果を受けて、安直なバッチファイル(CMD.EXE用)を書いてみたのが以下の7行です。

@rem ZoneIDを付与して、Office系ファイルなどのマクロ実行を禁止する
@echo off
for %%f in (%1) do (
  echo %%f
  echo [ZoneTransfer] > %%f:Zone.Identifier
  echo ZoneId=3 >> %%f:Zone.Identifier
)

これで、一応Windowsのワイルドカードにも対応できます。ただ、複数のファイル名を空白などで区切って列挙するのには対応していませんね。その辺がほしければ、コマンドライン引数の受け取り方等をちょいちょいといじればよいでしょう。

例えば、この内容を「addflag.cmd」というファイルに保存して、Windowsのセキュリティで実行許可があるとすれば、次のように実行すると、

addflag *.xlsx

カレントディレクトリにある、Excelのファイルすべてにフラグが付与され、以降解除の操作をしない限りExcelで開くと保護モードになるというわけです。

これで、外から持ち込んだファイルでも多少は安全に開くことができるでしょう:-)

 


2021年4月16日金曜日

(O'Reillyの)PDF電子書籍の目録ページを安直に作ってみた

 まぁ、誰でもやっていると思いますが。

道具はPython3.xにPyPDF2というライブラリを組み合わせて。。。

https://note.nkmk.me/python-pypdf2-pdf-metadata/

とPython公式ドキュメントを見ながらうりゃぁっという感じで書いたので、かなりええ加減ですね。標準出力を 適当にリダイレクトして foo.htmlにでもしてブラウザで開くと。。     

改良の余地はHTMLのリファインの他はソート順とかかなぁ。

import glob
import PyPDF2
import html
import urllib.parse

files = glob.glob('*.pdf')

print("<html>")
print("<body>")
print("<dl>")

for f in files:
    pdf = PyPDF2.PdfFileReader(f)
    # print(pdf.documentInfo)
    print('<a href="{}">'.format(urllib.parse.quote(f)))
    print('<dt>')
    print(html.escape(pdf.documentInfo['/Title'], quote=True))
    print('</dt><dd>')
    print(html.escape(pdf.documentInfo['/Author'], quote=True))
    print('(')
    print(html.escape(pdf.documentInfo['/CreationDate'], quote=True))
    print(')</dd></a>')

print("</dl>")
print("</body>")
print("</html>")

 

2018年3月3日土曜日

Androidからの投稿テスト

Android用にBloggerのアプリがあったので、とりあえずBlackBerry PRIVにインストールしてみました。
これはテスト投稿です。

まぁ問題が生じるとは思ってませんが:-)

2017年10月13日金曜日

Honya Club.comの「店舗受取」に関する懸念?

今日もHonya Club.comで予約した書籍を店頭受取で買ってきました。

便利なサービスで、最寄りの書店の活用にもなるのがいいんですが、気になる点が。。

というわけで、以下は書店等で聞き取り調査等はせずに推測していることなので、事実誤認があれば御指摘歓迎。というわけで、twitterではなくblogにした次第。ただ、ダラダラとした書き方にはなりますが。

その問題は「取りこぼしが多い」ということです。
本稿での「取りこぼし」とは、予約した書籍が店舗に届いた際に、店頭受取のために別に取り置くはずのものを、通常の新刊だと見なして、店頭に並べてしまっている状態のことです。

この「取りこぼし」率が私の経験では1割を超えていて、ヒューマンエラーにしてもちょっと高率過ぎるのが気になる点です。店舗側(の責任ある立場の人)は、その度に謝罪の言葉と「以後気をつけます」とは言ってくれるんですが、実際には改善している様子がない。

ちなみに、予約ではなく、単なる注文の場合には経験したことはありません。

で、これは恐らくHonya Club.comの「店頭受取」のためのシステム設計にエラーを起こしやすくしている点があるんじゃないかと思ってしまうわけですね。
もうちょっとツッコむと、Honya Club.comのサイトで予約注文して、店頭受取を指定した場合に、指定された店舗にその情報がどう伝えられているかに問題があるような気がするわけです。

予約なので、発売予定日まで日がありますから、予約時点で伝えるというのは多分やってないでしょう。実効性を伴わせるとすれば、問屋から出荷したタイミングで通知するか、問屋から届いた荷物でわかるようにしているか、でしょう。
ちなみに、顧客には「予約完了」、「出荷」、「(店舗に)入荷」という3回のタイミングでメールが届きます。

私が考えると、店舗側の手間を省き、間違いが起きないようにするには、店舗に届いた荷物で解るようにするのがベストになります。
一番いいのは、予約分は別の荷物にして、個々の書籍に誰の予約かラベリングしておくことですが、別の荷物にするのはコストがかかるので多分選ばれない。

他の新刊その他の書籍とまとめて送るとして、箱詰めの効率を考えると予約本とそれ以外を物理的に分けておくのもコスト的には多分選びそうに思えません。

とすると、書籍そのものは新刊本としてまとめられているので、書籍だけを見て、どれが予約・店頭受取かを識別出来ないだろうから、別途伝える必要があると思います。

で、素人的には荷物には常識的に送付品リストを添付しているはずだから、そのリストで予約本をわかりやすく明記しておけばいいじゃないかと思うわけですよね。それなら、届いた荷物をリストと照合しながら荷ときしていけば、当然「あ、これは予約だから、取り置こう」となると。
でも、それなら1割を超えるエラーが説明できません。

で、思ったのが「店舗には出荷時に通知するが、その通知は店員が積極的に端末を操作して予約のリストを見ないと分からない」システムになっているのではないかと思った次第です。
で、通常の端末操作では「予約品が出荷されていることはわからず、積極的に予約進出荷リストを表示しないと分からない」とか。。。。いや、まさかとは思うんですが、、、。

つまり、店員が常に「今日は予約品が届いているかもしれないからリストをチェックしよう」と考えて、その操作をしない限り予約品が出荷されたかどうかが分からない、とすれば、「予約品が届く頻度が低い」と空振りな日がほとんどになって、つい、忘れてしまうのではないかと予想した次第です。

人にポリングさせる&頻度が低いとそりゃ無理があるでしょうから、普通は避けると思いたいんですが。。。
で、ミスがあるとしばらくは一所懸命毎日チェック するけど、空振りな日がずっと続くので、やがて他の忙しさでチェックを忘れても実害がなかなか起きないので(以下略)

現に今日も入荷通知が来てないけど、棚に挿してあるのを見つけて店員に聞いたら、一所懸命端末(いやPCですが)を操作して画面をいくつも見て確認してましたし(画面の内容までは私は見てません)。

で、改善して欲しいわけですが、特定の小規模店舗に言っても無理だろうしねぇ。Honya Club.comにユーザとして要望を出すと、私の登録店舗に対して厳重注意、つまり「運用でカバーしろ」になるような気がして、、、。

で、なんで上記のような事になっているように想像したかというと、店頭で予約注文した際の古典的な流れをシステムの設計時にいれたんではないかと。店頭で受ければ、店員側で把握しているし、それなりにわかりやすく伝票を整理しておけば、見落としはそうそう起きないと思うけど、そうじゃないからねぇ。。。

単なる注文の時は、発売予定日前後でもなく、突然既刊本が交じるわけですから、「あれ?注文出したわけでもないのに?」となるから多分気づいて今まではエラーを起こさなかったのかなぁと。

今までは、棚に並べられても私が店に行く閉店間際まで売れずにいてくれたから良かったんですが、売れてたらどうなることやら。(まぁ、そう売れないような本だから予約しないと入らないだろうなぁと予想して予約しているわけですけど:-)

 せっかくのサービスなので、改善して欲しいなぁと思うわけです。

あ、懲りずにこれからも何度も使うつもりですよ。(と言うか今も数冊予約しているし)

2017年6月11日日曜日

Zebra Puzzle

たまたまTLに流れてきた
https://twitter.com/algoRafael0110/status/873469127364534272
に刺激されて、Zebra Puzzleを解くプログラムをPrologで書いてみました。

上記のツイートで言及されているのは、
http://qiita.com/ShunIchikawa/items/6449f492dc38a7201162
「Prolog実践入門 - AIに特化した老舗言語 - Qiita」
の簡易版と、英語版Wikipediaの解説
https://en.wikipedia.org/wiki/Zebra_Puzzle
「Zebra Puzzle - Wikipedia」

元のツイートで「is」述語を使っているのがパット見で気になって、「nth1があるよなぁ」と思いながらQiitaのページをちらっと見た後、自分で書いたら使う必要がなかった。。。

まぁこれで一応最低限は出来たと思います。

?- who(W, Z).

と問えばOK.
先のツイートで上手くいかなかったのを厳密に分析はしていませんが、is 述語はこの手の純粋なパズル系の問題では要注意だというのが私見です。

とりあえず。以下がコード。(SWI-Prologで確認。改行位置がきちゃないのはご勘弁を)

neighbour(X, Y, [X, Y| _]).
neighbour(X, Y, [Y, X| _]).
neighbour(X, Y, [_| R]) :- neighbour(X, Y, R).
right(X, Y, [Y, X| _]).
right(X, Y, [_| R]) :- right(X, Y, R).

who(Water, Zebra) :-
  Street = [H1, H2, H3, H4, H5],
  member(house(englishman, red, _, _, _), Street),
  member(house(spaniard, _, dog, _, _), Street),
  member(house(_, green, _, coffee, _), Street),
  member(house(ukrainian, _, _, tea, _), Street),
  right(house(_, green, _, _, _), house(_, ivory, _, _, _), Street),
  member(house(_, _, snails, _, old_gold), Street),
  member(house(_, yellow, _, _, kools), Street),
  house(_, _, _, milk, _) = H3,
  house(norwegian, _, _, _, _) = H1,
  neighbour(house(_, _, _, _, chesterfields), house(_, _, fox, _, _), Street),
  neighbour(house(_, _, _, _, kools), house(_, _, horse, _, _), Street),
  member(house(_, _, _, orange_juice, lucky_strike), Street),
  member(house(japanese, _, _, _, parliaments), Street),
  neighbour(house(norwegian, _, _, _, _), house(_, blue, _, _, _), Street),
  member(house(Water, _, _, water, _), Street),
  member(house(Zebra, _, zebra, _, _), Street).

2017年4月8日土曜日

2017年4月8日現在のtwitterの振る舞いアレコレ

ここ数年でtwitterも随分色んな機能が増えたようで、自分のメモ代わりにテキトーに列挙しておこうと思う。テキトーなメモなので、文章がこなれてないのはご勘弁を。
なお、twitter社の方針次第で今後もなんぼでも機能が変わる可能性があるので、あくまでもこのエントリの記述時点のものだということは、言うまでもないので、あしからず。

  • reply(リプライ)は本文に単に「@スクリーン名」が含まれているだけではなく、リプライ先のツイートへのリンクが内部的に付与されている。
  • 本文先頭が「@スクリーン名」の場合は、そのスクリーン名のアカウントのフォロワーのTLにしか出ないのが従来の振る舞いだった。ただ、少し前に発表されたものだと、その形式にかかわらずreplyとしてツイートされたもののみがリプライ先ツイートのアカウントのフォロワーのTLにしか表示されないようにするという。(これが現在の公式Web等のリプライの際の振る舞いにつながっている?)
  • ちなみに、tweetを自動的にmixiに流す設定の場合、リプライ先への内部リンクがあるツイートはmixi側には流れないようになっている(リプライを流さないということらしい)
  • 公式Webやtweetdeckではリプライの際はリプライ先を表す「@スクリーン名」は本文に含まれず、別途編集するようになっている(まるでメールのヘッダのよう?)。その結果、従来「リプライするけど、自分の全フォロワーのTLに流したい」目的で本文先頭にピリオドなどを挿入する手法が使えなくなっている。クライアントによってはまだ使用できるものもあるので、ツイートの内部的データ構造までは変わってない模様。
  • 公式RTについては特に最近は変わってない?
  • コメント付公式RTはコメントとなるツイートにコメント先になるツイートへの内部的リンクがある。ただし、公式Webやtweetdeckなどでは、本文に他のツイートのURLを記載するとコメント付公式RT扱いになる模様。(本文に複数のツイートのURLを記載した場合は確か最後のものに対するコメント付公式RT扱いになったと思います。。。)
  • 通知(Notifications)はフォローされた場合と、リプライ、Likes、公式RT、コメント付公式RTが自分のツイートにされた場合に届く。設定である程度フィルタリング可能。
  • 画像などのURLを本文に含むツイートの場合、その画像のサムネイルが見えるかどうかはその画像を載せているサービスとクライアントに依存。確実なのはtwitter公式の画像サービス。それ以外はクライアントによって見える・見えないがあると思ったほうが良い。
  • 本文中のURLはすべてtwitter側で t.co短縮URLにされる。したがって、サードパーティのURL短縮サービスを使うのは短縮以外に積極的な意味があるかどうかが思案のしどころ。
  • 公式Webやtweetdeckでリプライ先が本文外であるかのようなUIになったのは、リプライ先が本文の文字数にカウントされないようにするため。
  • 色々と本文の長さに数えない要素が出てきたので、旧来のクライアントにとっては140文字を越えるツイートが出て来ることになるので、古いクライアントに対しては140文字を超える場合は、途中から「...」と略し、全文を見るためのURLが記載されるようになっている。その際のURLは「https://twitter.com/i/web/status/ツイート番号」となっている。
  • 通常のツイートのWebブラウザで開く際のURLは「https://twitter.com/スクリーン名/status/ツイート番号」だが、実はスクリーン名のところは実在するものであれば、誰のものを書いても関係ない。(これは大昔から)
  • 本文中にスクリーン名のところを「i/web」に置き換えたURLを書くとコメント付公式RT扱いにならない。クライアントで引用形式で表示されない不便さがあるが、リンクをブラウザでたどるとツイートがちゃんと見える。また、元ツイート主に通知もされない。
  • リプライの内部リンクでスレッド化されているツイートの表示はクライアントに依存する。公式Webやtweetdeckはツイートを選ぶとそのツイートのリプライ先リンクを辿ったものに加えて、そのツイートにつけられたリプライの方も表示するが、janetterでは前者しか表示されない。
とこんなところかな?
将来の仕様変更についてはこのエントリで追従する気はないですが、もし事実誤認があれば、お知らせいただければ適宜修正かコメントをつけたいと思います。

2017年2月24日金曜日

内閣府の「国民の祝日」ページのCSVを使うサンプル

http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
についてツイートでちょっと触れましたが、
https://twitter.com/tsaka1/status/834770830399647744
実はそんなに処理が複雑ではない事に気づいて、しょうもないサンプルプログラムを書いてみました。
Rubyの標準ライブラリにあるDateクラスを使って、年月日を入力するとその日が祝日なら、その名前を、それ以外なら曜日を表示するというものです。Windows上でsjisで書いたプログラムです。

なお、大したことはしてないので、解説は略します:-)

で、問題は来年以降もこのプログラムが無修正で使える形式で提供されるかどうかですよね:-)

#! ruby
# coding: sjis
#
# 「内閣府ホーム  >  内閣府の政策  >  制度  >  国民の祝日について」
# http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
# のCSVファイルを使って祝日かどうかを返すプログラム例
#

FNAME = "syukujitsu.csv"

require("csv")
require("date")

WDAYS = [
  "日曜日",
  "月曜日",
  "火曜日",
  "水曜日",
  "木曜日",
  "金曜日",
  "土曜日"
]

$holidays = Hash.new

CSV.open(FNAME){ | cs |
  header1 = cs.gets
  header2 = cs.gets
  while row = cs.gets
    while !row.empty?
      name, date = row.shift(2)
      if !name || !date
        break
      end
      $holidays[Date.parse(date)] = name
    end
  end
}

puts("年月日を入力してください。入力終了はENTERのみです。")
while keyin = gets
  if keyin == "\n"
    break
  end
  d = Date.parse(keyin.chomp)
  if n = $holidays[d]
    printf("%s: %s\n", d.strftime("%Y/%m/%d"), n)
  else
    printf("%s: %s\n", d.strftime("%Y/%m/%d"), WDAYS[d.wday])
  end
end

2017年1月28日土曜日

FreeBSD11にvirtuoso-7をpkgでインストールしたときのメモ

タイトルどおりのメモです。

詳細なバージョンは以下の通り。

FreeBSD: 11.0-RELEASE-p2
Virtuoso: virtuoso-7.2.4.2_1 (pkgでの名称)

pkg install virtuoso-7.2.4.2_1
でインストール自体は問題なくできるが、実際に起動しようとすると、以下のような設定の調整が必要だった。

 1. /etc/rc.conf.local に設定ファイルの場所も指定する必要があった。標準は相対ディレクトリ指定になっている。
例: virtuoso_config="/usr/local/lib/virtuoso/virtuoso.ini"

2. データベースやログの置き場のディレクトリに virtuoso:virtuoso権限で動くプロセスに書き込み権限を与える必要がある。
例: chgrp virtuoso /usr/local/lib/virtuoso/db && chmod g+w /usr/local/lib/virtuoso/db
(これをしてないと起動した旨 /var/log/messagesに入るけど、実際にはプロセスがなく、エラーメッセージも残らないという羽目に陥るようです。)

3. pkgではvirtuoso.ini を /usr/local/lib/virtuoso/db に置いていますが、設定ファイルでは同じディレクトリにデータベースファイルやログを置くため、書き込み権限を出すから別ディレクトリの方が良いと思います。(私は一つ上のディレクトリにしました。see /etc/rc.conf.local)

以上で、最低限の起動はできますが、当然iniファイルの修正その他は必要ですよね。

PS. これ、pkg作成元に伝えるべきかとも思うけど、個人的にはこのぐらいの手当てが自分でできない人がサーバ運用することには疑問があるので、メモを書いとくだけにします:-)

2016年5月20日金曜日

ノイマンの自然数(非負整数)生成プログラムについて

結城浩さんの一連のツイート に触発されて、「ノイマンの自然数(あるいは非負整数)」表現を生成するプログラムを色々書いてしまった。(要するに現実逃避:-)

まずはProlog (処理系は SWI-Prolog を使用)

nnn(0, []).
nnn(X, L) :-
    length(L, X),
    append(M, [M], L),
    succ(Y, X),
    nnn(Y, M).

これは、双方向に使えます。例えば、「?- nnn(2, X).」のようにすると整数からノイマンの形式に、また、「?- nnn(X, [[], [[]]]).」のようにすれば、ノイマンの形式に対応する整数が得られます。 しかも「?- nnn(X, Y).」とすれば、まず0について、「;」でバックトラックすると1, 2, 3, 4と次々に生成します。

次にCommon Lisp (処理系は CLISP を使用)

(defun nnn (x)
    (if (zerop x)
        nil
        (let ((m (nnn (1- x))))
            (append m (list m)))))

Prologに比べると当たり前過ぎてイマイチ面白くない(こらこら:-)

と、ここまでは「再帰的な構造しているから、プログラムも再帰呼び出し必須だよなぁ」と思ってたんですが、ふと、「COBOL で書けないかな?」と思いついたけど、流石に COBOL は最近触ってないし、可変長データ構造のサポートの現状がわからないので、「そうか、再帰を使わずに繰り返しで書ければ COBOL でも実質書けると言えるか」と思い、Common Lispで再帰を使わずに書いてみました。

(defun nnni (x)
    (prog ((i 0) (r nil))
        loop
        (if (>= i x) (return r))
        (setq r (append r (list r)))
        (setq i (1+ i))
        (go loop)))

いやぁ、 Lisp とは名ばかりなキチャナイプログラムになりました。繰り返しのスタイルが古臭いのは勘弁してください:-)

で、ここまでで一旦掲載。この後他の言語等追加するかもしれません。

それさえもおそらくは現実逃避:-)

以下、追加第1陣(2016/5/20 01:45頃)

さて、非再起な手続き型といえば古のMS-BASICですが、それっぽいものでプチコンV1.2が手元にあったので、それでも組んでみました。あまり頑張ってません:-)

画面ではコードが一部切れているので、手で転記すると、、、

INPUT X
IF X==0 THEN PRINT "{}":END
I=0
R$="{{}}"
@LOOP
IF I>=X-1 THEN PRINT R$:END
R$=MID$(R$,0,LEN(R$)-1)+","+R$+"}"
I=I+1
GOTO @LOOP

となります。(久々の手コピー:-)

というわけで、この辺にしときましょう。


(2016/5/20 23:37頃)
プチコンのBASICプログラムに冗長な行が1行あったので、削除しました。


(2016/5/21 0:40頃)
COBOLでやってみるとか(old)awk、bashではなくshとか、色々考えたんですけど、少し変な言語ということで、Windowsのバッチファイルで書いてみました:-)

ただ世の中でバッチファイルというと16ビット時代からの COMMAND.COM で実行する *.BAT と思われるようですが、今や64ビット時代なので:-)、32ビットWindowsからずっと使えている CMD.EXE で実行する *.CMD として作成しました。というか、 *.BAT では流石に無理があります:-)

@echo off
set /p x=?
if %x% equ 0 (
  echo {}
  goto :end
)
set i=0
set r={{}}
:loop
set /a x1=%x%-1
if %i% geq %x1% (
  echo %r%
  goto :end
)
set r=%r:~0,-1%,%r%}
set /a i=%i%+1
goto :loop
:end

これを越える「変な」言語とすれば、vimではなく元祖viぐらいしかのこってないかもしれない:-)

2015年1月27日火曜日

地デジ受信でブースターを入れるかどうか?

このエントリは今日ツイッターでポータブルテレビでうまく受信できないという件があったので、そのアフタフォローとして書くので、必ずしも一般的なものとは限りません。

*テレビについて
そのテレビは地デジは俗に言うフルセグ(地デジのハイビジョンの放送)とワンセグに対応していて、電波が弱いと自動的にフルセグからワンセグに切り替わる機能を備えている。

*状況
以前使っていたフルセグのテレビは問題なく受信できたけど、今度のものは電波が弱いということでワンセグに切り替わり、画質が低くなってしまう(「ざりざりな画像」)。

*確認結果
他の通常のテレビに使っていたアンテナ線などにつなぎ替えても状況は変わらず。当然それら他のテレビ(フルセグ)は普通に受信できている。

*考えられる状況
当該ポータブルテレビの受信感度が他のテレビに比べて低い。あるいは、何らかの不具合で受信不良を起こしていると思われる。

*切り分けたいこと
そのテレビが不具合で受信不良を起こしているのか、それとも正常だけど感度が低いだけなのか?

*確認事項
他のテレビで「アンテナレベル」の表示を行い、十分なレベルになっているかを確認する。以下はREGZAの例(アンテナレベルの表示方法はテレビの取扱説明書を御覧ください)。
バーのレベルが左から赤、黄、緑になっており、緑は十分なレベル、黄はやや弱く場合によっては画面が乱れたりして放送が見れなくなる場合がある。赤は見ることができない。という目安になっている。この例ではやや低めであるが緑なので、十分なレベルとなっている。

*診断パターン
A. 他のテレビで十分なレベルの場合(上の例で緑の範囲に十分入っている場合)、そのポータブルテレビの感度が極めて低いと思われ、不具合や故障の可能性が考えられる。販売店等に点検や修理の相談が適当と思われる。(ブースターを入れても改善しない可能性がある)

B. やや低いレベルの場合(上の例の黄、あるいは緑と黄の境目ぐらいの場合)、ポータブルテレビの感度がやや低いだけの可能性があるので、そうと思われる場合は、市販のUHFブースターをアンテナ線の途中につなぐことで改善が期待できる。(ただし、不具合の可能性も0ではないので、販売店に相談する方が良いかもしれない)

以上のような感じになるでしょうか。なお、もしブースターを購入する際は地デジのみであればUHFブースターで十分です。CSやBS、FMなどのブースト機能は不要ですね。

とりあえず。

2014年6月28日土曜日

sshポートフォワードなRDP経由で音楽再生を試みた

いや、書いている通りですけどね:-)

自宅でサーバ的に動かしているPC(Win7Pro)があって、ウォークマンを使っている関係でその上でxアプリでCDリッピングとか音楽データの管理をしているんだけど、ウォークマンをいちいち持ち歩くのも面倒だし、出張や帰省を除くと大学の研究室等でほぼ固定で聞くのが主なので、ネットワーク経由で再生できればええんでないの?と。
(注: 私は自律的移動をしているときなどにわざわざ耳を塞いで我が身を危険に晒すようなことはできないのです:-)

自宅ではサーバ(もちろんFreeBSD)も稼働させているし、固定アドレスも取得しているので、sshのポートフォワードでRDPを使えば、リモートデスクトップで再生できるよねと。
ただ、仕事に使っているマシンは普段ミュートしているし、変な負荷は与えたくないので、、、。

ふと気づくとアンドロー梅田な携帯端末にRDPクライアントが純正(?)であるじゃないかと、、、。

というわけで、今日昼間にちょいと再生テスト。端末は携帯SHL22を使ってみました。研究室内無線LAN経由となります。ただし、sshポートフォワードをかけているのは大学に設置している私のFreeBSDサーバ。

で、でんでん問題なくブライアン・フェリーのSlave to Loveが聞けましたとさ。

で、携帯電話のバッテリをこういう用途でというのもアレなので、自宅で隠居していたアンドロー梅田なタブレットなどを充電してテストして大学の研究室に置いとけば良いかなというわけで、充電ちう。

ネットワーク経由で自分のMP3ライブラリを再生するってのはもっとエレガントなやり方もありそうなんだけど、とりあえず、自分の経験値のあるソフトの組み合わせでお手軽にできるってのがポイントです。。。

2014年6月22日日曜日

ディレクトリへのsymlinkをmvの注意点

えー、今日ちょっとびっくりしたので、忘備録として。。。

FreeBSD9.xでの挙動だったので、GPLなcoreutilsベースなものだったりすると違うかも知れませんが。

 前提: 以下のようにディレクトリへのsymlinkがあった。

/foo/bar -> /baz/bababa/

カレントワーキングディレクトリを以下 /foo とします。

ここで、barをbar.bakにmvしたいと思ったが、ちょっとサボってtcshのファイル名コンプリーションに頼ってしまい、

mv bar/ bar.bak

を実行して、ls とすると、なんと bar.bak の他に bar も残っている。。。。
なんと、

/baz/bababa というディレクトリを /foo/bar.bak にmvしたという。。。
いや、そういう振る舞いをするソースコードが思わず頭に浮かびましたけど:-)、ちょっとご無体な、、という気分。
で、/foo/bar は存在しない /baz/bababa を指しているという。。。

慌てて元に戻しましたけどね。

2014年3月9日日曜日

twitterの公式RTと気になる慣習+自分の慣習についてのメモ

ツイートしてまとめるのもいいんだけど、140文字単位が面倒そうなので、こちらで簡単に。。。

タイムラインに時々、公式RTした後でその内容についてコメントする際に「○○△△ですね >RT」のように書く人が結構います。が、これがしょっちゅうどのツイートについてコメントしたのかが自分のタイムラインを見ているだけではわからないことが多いんですよね。

実は公式RTは「(まだ見てないであろう)フォロワーにこのツイートを見せる」というものだという想定のようで、公式RTした元ツイートを書いたアカウントをフォローしている人のタイムラインには「公式RTしたタイミングでは出現しない」のです。なので、上記のようなことを自分がフォローしているアカウントのツイートを公式RTしたものだったりすると、そのコメントしたツイートの近傍には現れないわけでして。。。

実はこの公式RTをタイムラインに出現させる挙動は使用しているクライアントに依存します。が、ツイッター標準のWebと今はツイッター社に併合されたtweetdeckで共通しているので、これが公式な挙動なのでしょう。でも上記の慣習をお使いの方々はそれ以外の異なる挙動をするクライアントを使用している可能性が濃厚です。

まぁ分からないだけならいいんですが、タイムラインでコメントしようとしたのと全然違うツイートの公式RTが直前に現れる可能性もあるので、誤解される危険があるんですよねぇ。。公式RTは元ツイートをした人が削除してしまうこともあるし、、、。

なので、私はメンションとかリプライではなく、あるツイートにコメントしたいだけの時は、そのツイートのURL(https://twitter.com/スクリーン名/status/番号 ってやつですね)をツイートに含めるようにしています。これなら、確実。ただ、携帯電話やスマフォ等の不便な 環境の不便なクライアントではそのURL先のツイートを表示できないこともあるとは思いますが、それは「見えないけど、このURLについてコメントしている」ことは伝わるし、誤解される心配もないと思うので。。

というわけで、私が選んでいるクライアントはそういうツイートができるかどうかが結構鍵だったりします。Janetterはギリギリセーフ。ツイートのURLをコピーすることができるので、ツイートする際にそれを貼り付ければ良いので。いわゆるtwitter社の公式アプリが問題で、PC上のWebならブラウザにURLがあるので、コピーすればいいんだけど、スマフォ等のものではそれができない。
(どなたかBlackBerryBold9900でいいツイッタークライアント知りませんかねぇ?:-)

ちなみに、URLではなく、最後の番号だけを書くってのをやることもあります。これはあえて機械的な手段で辿れないようにしたい時ですね。広めたくはないけど、コメントしたい場合。。。
 実はツイートのURLって上記の「スクリーン名」のところは実在する名前であればどれでもよくって、ツイートの識別自体はできるのですよね。。。
なので、URLだけで誰のものかを決めつけるのは危ないです。URLをブラウザで開くと、ちゃんとツイートしたアカウントの方にリダイレクトされますが、、、。

うーん、こんなところかな。後で書き加えたり、修正するかもしれませんが。

2013年8月28日水曜日

IO-DATA製NAS、HVL-A/ATシリーズの制約について

ここに書くことは2013年8月27日現在のことであり、既にIO-DATAのサポートには要望を伝えているので、近い将来改善されるものと期待しています。

IO-DATAのHVL-AシリーズHVL-ATシリーズSonyのnasneから自動ダウンロードする機能があり、重宝するわけですが、そこにちょっとした制約があります。

nasneからHD解像度(優先)でダウンロードした場合は問題なく、HVL-A/ATから他のDTCP-IP/DLNA対応NASにムーブすることができますが、SD解像度(優先)でダウンロードしたものは同じHVL-A/ATシリーズにしかムーブできないようです。少なくとも同じIO-DATA製のHDL2-Aシリーズにはムーブできませんでした(ムーブ先候補に出ません)。また、やはりIO-DATA製のRHDM-U500HRでHVL-A/ATからダウンロードムーブしようとするとSD解像度のものを選ぶとダウンロードしようとして失敗します。

このような映像形式によって再生できたりできなかったりというのはDLNAではよくある話なのですが、再生ではなくNAS同士のダビングでも生じるとは思いませんでした。

このような制約があることは説明書などにもなく、その上HVL-A/ATの「コンテンツ操作」画面ではそのコンテンツがHD解像度なのかSD解像度なのかが識別できません(録画時間とデータ量からある程度の推定は可能ですが)。

さすがにこれは使い勝手が悪いので、IO-DATAさんには制約を取り除くか、制約の存在を明記して、かつわかりやすくしてほしい旨の要望をしました。

なお、HVL-A/ATのファームウェアは現時点での最新、1.21です。

2012年10月8日月曜日

ゼンハイザーRS180雑感

というわけで、ツイッターなどでちょぼちょぼ呟いてましたが、Kleerがapt-Xよりもずっと無線LANにも強いし、非apt-XなBTのような笑っちゃうような遅延も起きないことをTDKTH-WR700で確認したけど、密閉型というのもちょっとしんどいなと思い、奮発してSENNHEISERRS180を買いました。

ヘッドホン端子にもつなげるのですが、テレビのライン出力につなぎました。このトランスミッター自身ライン出力があるので、既にライン出力に機器をつないでいても間に入れることができます。

 トランスミッターがヘッドホン台を兼ねていて、ちゃんと乗せると充電してくれるのですが、16時間。。でも、付属の単4ニッケル水素電池は正真正銘のeneloopだったので、最初は急速充電しました。面白いのは電池は左右のユニットに1本ずつ入れること。それから電池を入れる際にイヤーパッドを外してという、、、。ちゃんとしたヘッドホンなので、イヤーパッドは消耗品で交換可能にするから、そこを蓋にしちゃえ、、、って感じですね。こういう発想って見ると合理的だと思うけど、日本ではあまり見ない気が、、、。

装着感は実はギリギリです。イヤーパッドにはちゃんと耳がすっぽり収まるけど、微妙に耳たぶはパッドに当たるので、もうちょっと大きい耳だとだめでしょうね。あと、ヘッドバンドを最大限に伸ばしてちょうどって感じ(これはTH-WR700でもそんな感じだった)でした。。まぁギリギリだけど快適です。でかいけどオープンエアなので、閉塞感もあまり感じないし。。

音質には不満はないんですが、ボリューム調整が指先だけではちょっとわかりにくい。。あと、ALC機能をオンにすると結構でかくなって、ボリューム最小でちょうどぐらいになるのは、、。まぁ世の中でかい音を鳴らしている人が多いからかなぁ。。残留ノイズのようなものも感じません。これは合格。

まぁちょっと高いけど、映像作品鑑賞も含めたワイヤレスでかつ無線LAN使いまくってます、って向きにはオススメでしょうね。

なお、これより下位機種は密閉型だし、イヤーパッドが微妙に小さいので、ハナから対象外でした。最上位機種RS220にしなかったのは、100g程重いのがやはり、、、。あと、やはりヘッドバンド最大に伸ばすはめになるけど、そうするとトランスミッターに置いた時、イヤーパッド部が下について、ちゃんと充電されないという。。。RS180はそんなことないんですが、、、。

面白かったのはケーブルを束ねるチューブまでついていたことかな。あとクイックガイドは紙だけど、利用者マニュアルがCD-ROMで、PDFでした。。。PC全く関係ない機器なのに。。。ACアダプタのコンセント部分が付け替え可能で色んな形状のがついているのは当然でしょうね。

そんなところかな。

2012年9月30日日曜日

「特撮博物館」雑感

えー、あと1週間ほどになってやっとこさ例の「特撮博物館」に行って来ました。で、ツイッターだと連投しているうちに支離滅裂になりそうだし、訂正も難しそうなので、こちらに書くことにしました。ちなみにそんな高尚なことを書く気はないです。あくまでも一特撮ファンとして思った感想です。苦労された関係者の方々には多少失礼な内容も含まれてしまうかもしれませんが、そこは特撮作品を見る側の思いが暴走していると解釈して軽く流していただければと、、、、。(言い訳を先に書いてどーする:-)

なお、特撮博物館の開催情報は以下のページを御覧ください。

「館長庵野秀明 特撮博物館 ミニチュアで見る昭和平成の技」

 でも、日テレがいつまでこのURLを維持するかわからないので、庵野さんの公式ページの告知も貼っときます。

「『館長 庵野秀明 特撮博物館 ミニチュアで見る昭和平成の技』 開催中」


さて、全体を通した素朴な感想を一言で書くとともかく「詰め込みすぎ」ではないかと思います。いや、特撮好きのマンガ家さん等創作業の方々が「4時間は必要」とかいうの見ている時点で予想はしていたのですが、、。

その副作用として、私がツイッターでフォローしている方も言っていたのですが、同時期に埼玉で、年末年始に水戸(私はこっちに行った)でやっていたウルトラマン展の方が良かった感があるのです。やはりそこは展示内容をある程度絞り込んで統制感があるかどうかではないかと思う次第。

私が見た感じでは展示の内容が
  • 昭和の特撮作品の回顧
  • 平成(前期)の特撮作品の回顧
  • 昭和~平成(前期)の特撮技術の解説
  • 昭和~平成(前期)の特撮に使用されたスーツ・ミニチュアの展示
  • 同複製品の展示
  • 「巨神兵東京に現わる」の上映
  • 「巨神兵東京に現わる」メイキングと解説(これは昭和~平成(前期)とは少し変わっている)
  • などなど
といろいろあり過ぎてかえって焦点がぼやけているかなという印象を受けた次第。特に巨神兵の映像上映は浮いているかなと思いました。人の流れも止めちゃうし。「特撮」の説明なら既存作品でのメイキングもあったりしたので、新たにここでしか上映されてないものをというのはわかりにくい。(客寄せなのかもしれないが、それでよってきた客は果たして目的にあっているだろうか?)

いや、要らないものがあるという意味ではなくって、どちらかと言うと特撮の常設展があって、それに時々企画展がという方式でそれぞれあるといい感じになるとは思うんですけどね。いや、そう思う人が一杯出てきて、予算などの確保もできて常設展が実現できればいいとは思うんですけどね。それができれば時々ワークショップで自分で特撮してみるなんてのもあるといいなぁとか。。

上の項目によっては人の流れ方も随分違うので、一気にやったのが混雑にもつながっていると思うんですよね。

あと、私は借りなかったのですが音声ガイドも時々「これ長い」とつぶやいている人もいましたから、そっちも詰め込み気味だったのかも。。。。

で、気づいたのは昔から言われる「オタクは相手をよく見ずに自分の話したいことを情報過多気味にまくし立てる」ってのを地でいってないか???という連想。。。
 まぁ、それは半分冗談としても。。。

まぁ、確かにチャンスが少ないので、そこに詰め込んでしまう気持ちはわかりますが、果たして本当に訴えたい相手にそれで伝わっているのだろうか?と心配になった次第。

多分、今回の展示は私のようにノスタル爺ぃばかりではなく、特撮に思い入れとかが薄い人に訴えるのが目的かなぁと思うのですが、これでは「引かれてしまう」のではないかと、、、。

私の周辺の20代前後と思しき若人(男性)には、

「(第1作のスチル等を見て)ゴジラってそんな昔にやってたんだ」
「(35mmシネカメラを見て)これって8mm?」(フィルムのシネカメラ=8mmと思い込んでいる風、35mmが何を表すかが分からなかった模様)

なんてことを連れと話しているのがチラホラと。。

一方同世代な女性はモスラとか出てくるキャラをある程度把握している風(でも特撮技術にはどうなのか?)。。。

でも、ミラーマンとかジャンボーグ9(正確にはウルトラマンシリーズ以外のヒーロー)には「なにこれ?わかんない」だったり、、。

一方、最後に主要作品シーンを編集した映像のところで、怪獣の名前を全く間違えず言ってのける小学生(親がギリギリ特撮世代?)がいたりと、、、、、。

これは今の20代が親になって、その子供だと、、戦隊物と(既に全然違うけど)仮面ライダーシリーズしか、、、。

と書いてわかったが、戦隊と仮面ライダー関係のがすっぽり抜けている。最後のコーナーの玩具展示にはライダーはあったけど。

しかも、今はオプチカルプリンターは使わずにコンピュータ処理しているのに、CG関連技術の解説があまりない、、というか「こうやってます」という絵はみせるけど、本当の技術解説はどうなんだろう?音声ガイドでやっても限界あるしなぁ。。。

ミニチュアやスーツを使う特撮とCGの住み分けの今後みたいな展望も本当は欲しかった。ノスタルジイだけなら新作(巨神兵)はいらないことになるしねぇ。。

うーん、うまくまとめられませんが、、、。今の若い人はこの展示を見ると「うわー、昔は色々色々苦労してやってたんだねぇ」という印象しか残らないという危惧が、、、。

で、こう書いていて気づいたんですが、この展示、特撮に思い入れのある立場の主観が先に立っていて、客観的な視点を感じられなかったのが「博物館」としては最大の問題かも?。つまり、特撮ファンとか特撮で飯食って来た人ではなく、「映像作品を専門とする学芸員」によってCGなどとの対比も込で構成してみるとどうなるのかが興味深いですね。

追伸: ピープロのミニチュアやマスクの類が結構良い状態で残っていたのが印象的でしたねぇ。。