2020年5月18日 (月)

グローバル共有メモ

グローバルに共有して使うメモのウェブアプリです。

グローバル共有メモ》に動いているサービスがあります。


メモを使うユーザーへのヒント


誰でも書け、誰でも消せます。街中の黒板のようなものです。

メモは 200 個を越えたところで 200個より前のものは消去されます。

「グローバル共有メモ: ログ」ページについて。

日時は世界標準時で、日時の右の灰色の不思議な文字列は偽造防止のための「ハッシュ」です。

日時の左の先頭の丸は、自分が書いたか・削除したか否かを表します。●は自分が書いたもの、○は他人が書いたもの、赤は他人が削除したもので、青緑は自分が削除したものです。赤の●は、自分が書いて他人が削除したもので、注意を要します。

自分かどうかの識別子は 10 日前後で、いっせいに更新されます。その日以降の「自分」は別人とみなされます。


ブログ等で使う場合


グローバル共有メモのウィジェットをブログ等で使う場合、ウィジェットを挿入したい位置に次のようなコードを書きます。

<script type="text/javascript">SHARED_MEMO_WIDGET_WIDTH="auto"; SHARED_MEMO_WIDGET_ROWS=8;</script>
<script type="text/javascript" src="http://jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>


もし、ウィジェットの width を固定したい場合は、次のように書きます。 (200px で固定します。)

<script type="text/javascript">SHARED_MEMO_WIDGET_WIDTH=200; SHARED_MEMO_WIDGET_ROWS=8;</script>
<script type="text/javascript" src="http://jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>


TEXTAREA の rows を変更したい場合は、上の SHARED_MEMO_WIDGET_ROWS に代入する値を変えましょう。

もし IE にも対応したいのならば、IE では height の自動調整が効きませんので、IE 用に height を設定することになります。しかし、height を設定するとそのままでは自動調整は OFF になるので、IE 以外のブラウザで自動調整を残したい場合は、さらに auto_height を 1 に設定する必要があります。 rows を変更するには結局、次のように設定することになります。

<script type="text/javascript">
SHARED_MEMO_WIDGET_ROWS=20;
SHARED_MEMO_WIDGET_WIDTH=200;
SHARED_MEMO_WIDGET_AUTO_WIDTH=1;
SHARED_MEMO_WIDGET_HEIGHT=420;
SHARED_MEMO_WIDGET_AUTO_HEIGHT=1;
</script>
<script type="text/javascript" src="http://jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>

続きを読む "グローバル共有メモ"

2020-05-18 12:30:39 (JST) in Perl JRF 作成ソフトウェア JavaScript | | コメント (4)

2020年5月 9日 (土)

「志村けん問題」を JAGS で解く その2 試行錯誤編

JAGS に慣れていないこともあり、「その1 結論編」に達するまでにはかなり試行錯誤した。その「苦労」を記録しておく。

JAGS は確率に関する Prolog みたいなものという認識で、それがおもしろいと思っていたのだが、「苦労」した結果、Prolog みたいに使うのは間違いかと思うようになった。

続きを読む "「志村けん問題」を JAGS で解く その2 試行錯誤編"

2020-05-09 05:28:58 (JST) in シミュレーション R | | コメント (0)

「志村けん問題」を JAGS で解く その1 結論編

新型コロナウィルス(COVID-19)により稀代のコメディアン・志村けん氏が亡くなった。その志村けん氏がまだ闘病中だったころ、新型コロナについて一つの確率的問題が提起された。

志村けん氏ほどの有名人が新型コロナに罹ったということは、感染者数は言われているよりもっと多いに違いない。…これは本当か。

…というのが、その問題のだいたいである。

「それは本当だ」というのを R 言語上のベイズ統計モデリングソフト JAGS を用いて示せたというのが本稿の主張である。

続きを読む "「志村けん問題」を JAGS で解く その1 結論編"

2020-05-09 05:25:43 (JST) in シミュレーション | | コメント (1)

2020年4月18日 (土)

JAGS でモンティ・ホール問題を解く

JAGS と R 言語の私の入門・練習として、モンティ・ホール問題を JAGS (rjags) で解いてみる。

続きを読む "JAGS でモンティ・ホール問題を解く"

2020-04-18 19:28:13 (JST) in シミュレーション R | | コメント (1)

2020年2月 7日 (金)

Predictor - Actor (- Recollector) モデルと負の学習

今回も失敗した実験である。改造した MountainCarContinuous のアルゴリズミックな学習で、アルゴリズミックな中では、確かに部分的な成功もあるのであるが、しかし、ランダムで単純な学習と比較した場合、早さはもちろん、学習が進むためのステップ数でも、最終的な到達点でも、アルゴリズミックな方法のほうが負けてしまったのだった。悔しいが、今回のアルゴリズミックな方法は、まったくの無駄だったと結論せざるを得ない。何か活かせる方法を今後、考えたい。

そのアルゴリズミックな学習とは、まず第一に、「環境」+「行動の提案」→「予想」を行う Predictor を学習しておき、その誤差逆伝播法を利用して「環境」+「予想」→「行動の提案」を行う Actor を学習するというもの。逆伝播がちゃんと使えるかが問題としてあったが、概ね使えるという実験結果を得た。

次に、Predictor と Actor の同時学習も試みた。その際に、Actor の「行動の提案」と、Predictor から逆伝播された「行動の提案」がどちらが良いかというのが以前私がレポートした「競争的学習」のようになっていると考えた。それについて「負の学習」を試み、それが学習を早くするという結果を得た。

しかし、この二つのアルゴリズミックな学習の結果・部分的な成功は、先に述べたように、ランダムで単純な学習と比べると負けていたのだった。

続きを読む "Predictor - Actor (- Recollector) モデルと負の学習"

2020-02-07 01:45:07 (JST) in Python 人工知能・機械学習 | | コメント (1)

2019年5月16日 (木)

ニューラルネットで負の学習: 競争的な学習の実験 その2

概要


競争的学習において、勝った例を負けた側が学習するだけでなく、負けた例と「若干」逆側になるように勝った側が学習することにより、学習が劇的に改善した。

競争的学習とは、ここでは、単純な2入力2出力(入出力いずれもアナログ値)の関数の学習を3層のニューラルネットワークで行う。ただし、別の初期値を持つ同じモデル二つについて、学習の際は、正解の出力がわからないが、その二つのモデルのうちどちらがより正解に近いか、すなわち、その「勝者」がどちらかだけはわかるという設定とする。

「若干逆側」にするときは、悪い例が離れていればすでに悪くなるのは避けられているのであるから、影響は 0 に近くする。悪い例が予測とほぼ一致するときは「逆側」を強く定めることができないので、これもしかたなく影響を 0 に近くする。そこそこ近い悪い例についてのみ逆側にしっかり倒して学習するようにする。

続きを読む "ニューラルネットで負の学習: 競争的な学習の実験 その2"

2019-05-16 05:49:50 (JST) in Python 人工知能・機械学習 | | コメント (4)

2019年1月26日 (土)

機械学習の練習のため競争的な学習の実験をしてみた

単純な2入力2出力(入出力いずれもアナログ値)の関数の学習を3層のニューラルネットワークで行う。ただし、別の初期値を持つ同じモデル二つについて、学習の際は、正解の出力がわからないが、その二つのモデルのうちどちらがより正解に近いか、すなわち、その「勝者」がどちらかだけはわかるという設定とする。

Ptyhon を用いた実験により、初期値の与え方が普通とちょっと違うのもになったが、そのような設定でもちゃんと学習が進むことが確かめられた。

なお、それを便宜的に「競争的な学習」と私は呼んでいるが、Wikipedia にある "Competitive Learning" (競合学習) とは別物のはずである。

続きを読む "機械学習の練習のため競争的な学習の実験をしてみた"

2019-01-26 00:23:09 (JST) in Python 人工知能・機械学習 | | コメント (7) | トラックバック (0)

2018年4月13日 (金)

Exhaustive Lock Dependency Emulator その3 修正とチェック

略して ELDE。マルチプロセスの最も簡単な lock/unlock 機構において、そのロックの依存を総当たり的に調べるプログラムを書いた。その1で「虚実行」も数え上げていたのを修正し、「実実行」のみを対象とするようにした。

前回は、意図しない「虚実行」を含めていたため、他の人がやらないような実装になり、その意味では個性があったかもしれないが、今回こそ、特に工夫のない「車輪の再発明」になっていると思う。ただ、前回の怪我の功名で、違う考え方で作った二つの実装が同じ結果を出すのを確かめることで、エミュレータの正しさを多少ともチェックしているのは優位点かもしれない。「証明」がないのは相変わらずではあるが、いくつかの例で、チェックはできた。

前回も書いたとおり、これはマルチプロセス環境を Perl 上でエミュレートするという話ではまったくない。プログラム自体は、シングルプロセスで終了する形をとる。

今回のアイデアのキモは、グローバルな単一ロックのみを扱うため、ロックは重ならず、プロセスをまたいでそれぞれのロックをシーケンシャルに整列して捉えることができるという点にある。その列をロック仕様として総当りで数え上げ、それに基づくよう実行していく。処理の重なりのうち、簡単なものは省いて効率化する。

なお、「プログラム」をコンテクストに関し「関数的(functional)」でなければならない…という条件を課すのは今回も同様である。すなわち、コンテクストが同じように(同じ lock/unlock 順序で)与えられれば、常に同じ「出力」をしなければならない。

続きを読む "Exhaustive Lock Dependency Emulator その3 修正とチェック"

2018-04-13 21:00:17 (JST) in Perl シミュレーション 関数型言語・定理証明器 | | コメント (1) | トラックバック (0)

2018年4月11日 (水)

組み合わせと順列の数え上げのアルゴリズム

Perl で組み合わせの数え上げが欲しかったのだが、CPAN からのインストールには C が必要なようなので、できれば避けたい。これぐらいなら、Perl 自体で書けるだろうと、参考となるサイトを探すと…意外にない。

そして見つけたいくつかの日本語のサイトでは、nCr = nCr=(n-1)Cr + (n-1)C(r-1) の式を使って示していた。いや、もっと効率の良い方法があったはず…と海外のサイトを調べると、最近、私が勉強している Python でアルゴリズムを示しているサイトがあったので、それを Perl に書き換えてみた。

なお、「数え上げ」という言葉を使ったが、数を求めるのと区別するために、組み合わせや順列の「生成」と言ったり「列挙」と言ったりもするようだ。

続きを読む "組み合わせと順列の数え上げのアルゴリズム"

2018-04-11 21:48:01 (JST) in Perl | | コメント (3) | トラックバック (0)

2018年1月 6日 (土)

Tweet Sig: ウェブ上の三文判?

This is a support page of the Tweet Sig (for the Mozilla Firefox or for the Google Chrome) and the Tweet Sig for Android. This page also supports the simple social page poster which is a Facebook web app and is used in the Tweet Sig. You can write comments on this page, even if you can't understand Japanese blow. If you need explanation of the extension in English, show the English main page of the Tweet Sig.

ブラウザ拡張 Tweet Sig を作った。Web Extension 規格に順って作ったので今後、様々なブラウザで利用できるようになるかもしれないが、今のところ Mozilla Firefox と Google Chrome でしか動かないようだ。

Tweet Sig の説明は、専用ページで行った。まずそちらを読んで欲しい。このページは「サポート」を行うのがメインである。

一応、ここでも軽く説明しておくと、Tweet Sig には、二つのモードがある。一つは、右クリックメニューで選ぶ(for PC)またはボタンを押す(for Android)ことで、セレクションの内容を投稿し、投稿した URL をクリップボードにコピーする。もう一つは、ボタンを押すことで、'#tweet-sig-in' の内容を投稿し、その URL を '#tweet-sig-out'にコピーするというものである。三文判程度の認証に使うことを想定している。

以前から私は、似た用途として、時間記録デバイスを提案している。それは、読み出しと追記のみができる USB メモリのようなデバイスで、契約文書を作ったとき、それをこのデバイスに書き込むと、その文書にデバイスメーカーによる署名が付されて、保存される…といった用途を想定している。

しかし、そのようなデバイスは今にいたるまで使われていない。それに替わるものとして、時間が記録されるもの…というと、Twitter などへの書き込みがあるな…として今回、このようなものを作ってみた。専用ページで書いたように削除ができたり非公開にできたりするのは不便だが、まったく似た用途に使えないわけではないと思う。

なお、このアドオンを作ったときの感想が [cocolog:88703123] に書いてある。

配布物


PC 用のアドオンは、AMO (Mozilla Add-ons) または Google Web Store のページから手に入る。Android 用は AMO for Android から手に入る。このページでは、一応、提出した際のソースのアーカイブを公開しておく。次のリンクが最新のもののはずだが、より以前のものはコメント欄をご参照いただきたい。

なお、tweet_sig.zip には manifest.json が含まれていない。かわりに manifest_for_firefox.json と manifest_for_chrome.json が含まれている。どちらかを manifest.json にリネーム(またはコピー)して使っていただきたい。
更新: 2018-01-06,2018-01-19
初公開: 2018年01月06日 17:12:04
最新版: 2018年01月19日 17:24:35

2018-01-06 17:12:01 (JST) in JRF 作成ソフトウェア Firefox JavaScript | | コメント (7) | トラックバック (0)