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アダプタのコンセント部分が付け替え可能で色んな形状のがついているのは当然でしょうね。

そんなところかな。