2012年01月03日 18:16
久々に設定画面を見たら各種SNSのボタンが用意されてたんでつけてみた。

↑こんなの。
お好きに使ってください。
押すと私が喜びます。
あとついでに、brタグを自動挿入しない設定があった。
このブログは入力欄で改行があるとbrタグが付くようになってて、JavaScript書く時にものすごく不便だったのだが、これで楽になりそうだ。
今までは、ソースを見ると分かるが、全ての行末に「//」を入れて自動挿入されるbrをコメントアウトする必要があった。

↑こんなの。
お好きに使ってください。
押すと私が喜びます。
あとついでに、brタグを自動挿入しない設定があった。
このブログは入力欄で改行があるとbrタグが付くようになってて、JavaScript書く時にものすごく不便だったのだが、これで楽になりそうだ。
今までは、ソースを見ると分かるが、全ての行末に「//」を入れて自動挿入されるbrをコメントアウトする必要があった。
タグ :お知らせ
2011年12月06日 00:27
点字のA~J、あるいは1~0は次のようになっている。
⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚
英字のK以降もこの10文字を基本に下に点を加えたものだ。
⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞ →K~T
⠥⠧⠭⠽⠵ →UVXYZ
さらに言えばア~オもこれらのうち5の点を使わないものを取り出してできたものだ。
⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚
というわけでこの10文字は点字の基本中の基本なわけだが、これの並び順にいまいち規則性が見えなかった。
2進数として見ると1,5,3,11,9,7,15,13,6,14とよく分からない順である。4つの点でできる組み合わせのうち使っていないものがあるのも謎だった。
それが最近突然分かって感動したので以下解説する。
まず4点の組み合わせのうち使っていないものがある理由だが、これは同じ形で位置だけ違うものを除いた結果だという。
つまり上4点の組み合わせのうち、
⠁は⠂⠈⠐と、⠃は⠘と、⠉は⠒とそれぞれ点の並びが同じである。
これらは指で触って区別がつかないから排除するというわけだ。
これらを排除するとちょうど10種類になるわけである。
そして並び順について。
点字は6つの点でできているので26=64種類、スペースを除いて63種類の記号ができる。
これを文字に対応付けるにあたって、ルイ・ブライユは次のような7列の表に並べた。
1 ⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚ →基本
2 ⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞ →基本+3の点
3 ⠥⠧⠭⠽⠵⠯⠿⠷⠮⠾ →基本+3,6の点
4 ⠡⠣⠩⠹⠱⠫⠻⠳⠪⠺ →基本+6の点
5 ⠂⠆⠒⠲⠢⠖⠶⠦⠔⠴ →基本を1段下げたもの
6 ⠌⠬⠼⠜⠄⠤ →余りのうち3の点を含むもの
7 ⠈⠘⠸⠐⠨⠰⠠ →余りof余りs
これを縦に見ると5列目までは規則的に並んでいることが分かる。
つまり、
1列目 : 6点のうち上と中の点のみで構成されている
2~4列目 : 上(中)下の点で構成されている
5列目 : 中と下の点のみで構成されている
図で表せば
こういうことである。
そしてその中の2~4列目を見ると、
2列目 : 左下に点がある
3列目 : 左下と右下に点がある
4列目 : 右下に点がある
という、
●○→●●→○●
の流れが見える。
そして横方向の規則性もこれと同じであった。
10個のみだと分かりづらいので重複を排除する前の15個で見る。
⠁⠃⠂⠉⠙⠑⠋⠛⠓⠊⠚⠒⠈⠘⠐
まず左のみ・左右両方・右のみの3つに分かれる。
「⠁⠃⠂」「⠉⠙⠑⠋⠛⠓⠊⠚⠒」「⠈⠘⠐」
「⠁⠃⠂」ここと「⠈⠘⠐」ここは、上のみ、上下両方、下のみの順である。
「⠉⠙⠑⠋⠛⠓⠊⠚⠒」この部分も、
「⠉⠙⠑」「⠋⠛⠓」「⠊⠚⠒」最初に左側だけ見ればやはり同じ要領である。
以上、5列目までは一貫して左→両方→右および上→両方→下の規則で並んでいることが分かる。
余り物の6列目と7列目も見てみる。
まず6列目と7列目の振り分けは3の点を含むかどうかである。これも左右両方→右のみの流れに従っている。
「⠌⠬⠼⠜」→「⠄⠤」は上→下の規則に合う。
「⠌⠬⠼⠜」は謎である。「⠌⠜⠼⠬」の順なら5,6の点で上→下のパターンなのだが。
「⠄⠤」は左→両方で規則に合う。
「⠈⠘⠸⠐⠨⠰⠠」は、上→上中下→下とは多少違うが、重心が上から下に下がっていくとみれば規則に合っている。
重心が同じ「⠸⠐⠨」の順はさすがに適当と考えていいと思う。
というわけで6列目と7列目を含めても規則はほぼ保たれていることが分かる。
これで覚えやすくなるわけでもないが、規則が見えると嬉しいものである。
さてしかし「⠬」と「⠜」の順は一体何なんだろう…。
⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚
英字のK以降もこの10文字を基本に下に点を加えたものだ。
⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞ →K~T
⠥⠧⠭⠽⠵ →UVXYZ
さらに言えばア~オもこれらのうち5の点を使わないものを取り出してできたものだ。
⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚
というわけでこの10文字は点字の基本中の基本なわけだが、これの並び順にいまいち規則性が見えなかった。
2進数として見ると1,5,3,11,9,7,15,13,6,14とよく分からない順である。4つの点でできる組み合わせのうち使っていないものがあるのも謎だった。
それが最近突然分かって感動したので以下解説する。
まず4点の組み合わせのうち使っていないものがある理由だが、これは同じ形で位置だけ違うものを除いた結果だという。
つまり上4点の組み合わせのうち、
⠁は⠂⠈⠐と、⠃は⠘と、⠉は⠒とそれぞれ点の並びが同じである。
これらは指で触って区別がつかないから排除するというわけだ。
これらを排除するとちょうど10種類になるわけである。
そして並び順について。
点字は6つの点でできているので26=64種類、スペースを除いて63種類の記号ができる。
これを文字に対応付けるにあたって、ルイ・ブライユは次のような7列の表に並べた。
1 ⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚ →基本
2 ⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞ →基本+3の点
3 ⠥⠧⠭⠽⠵⠯⠿⠷⠮⠾ →基本+3,6の点
4 ⠡⠣⠩⠹⠱⠫⠻⠳⠪⠺ →基本+6の点
5 ⠂⠆⠒⠲⠢⠖⠶⠦⠔⠴ →基本を1段下げたもの
6 ⠌⠬⠼⠜⠄⠤ →余りのうち3の点を含むもの
7 ⠈⠘⠸⠐⠨⠰⠠ →余りof余りs
これを縦に見ると5列目までは規則的に並んでいることが分かる。
つまり、
1列目 : 6点のうち上と中の点のみで構成されている
2~4列目 : 上(中)下の点で構成されている
5列目 : 中と下の点のみで構成されている
図で表せば
| ● ● ○ | → | ● ● ● | → | ○ ● ● |
そしてその中の2~4列目を見ると、
2列目 : 左下に点がある
3列目 : 左下と右下に点がある
4列目 : 右下に点がある
という、
●○→●●→○●
の流れが見える。
そして横方向の規則性もこれと同じであった。
10個のみだと分かりづらいので重複を排除する前の15個で見る。
⠁⠃⠂⠉⠙⠑⠋⠛⠓⠊⠚⠒⠈⠘⠐
まず左のみ・左右両方・右のみの3つに分かれる。
「⠁⠃⠂」「⠉⠙⠑⠋⠛⠓⠊⠚⠒」「⠈⠘⠐」
「⠁⠃⠂」ここと「⠈⠘⠐」ここは、上のみ、上下両方、下のみの順である。
「⠉⠙⠑⠋⠛⠓⠊⠚⠒」この部分も、
「⠉⠙⠑」「⠋⠛⠓」「⠊⠚⠒」最初に左側だけ見ればやはり同じ要領である。
以上、5列目までは一貫して左→両方→右および上→両方→下の規則で並んでいることが分かる。
余り物の6列目と7列目も見てみる。
まず6列目と7列目の振り分けは3の点を含むかどうかである。これも左右両方→右のみの流れに従っている。
「⠌⠬⠼⠜」→「⠄⠤」は上→下の規則に合う。
「⠌⠬⠼⠜」は謎である。「⠌⠜⠼⠬」の順なら5,6の点で上→下のパターンなのだが。
「⠄⠤」は左→両方で規則に合う。
「⠈⠘⠸⠐⠨⠰⠠」は、上→上中下→下とは多少違うが、重心が上から下に下がっていくとみれば規則に合っている。
重心が同じ「⠸⠐⠨」の順はさすがに適当と考えていいと思う。
というわけで6列目と7列目を含めても規則はほぼ保たれていることが分かる。
これで覚えやすくなるわけでもないが、規則が見えると嬉しいものである。
さてしかし「⠬」と「⠜」の順は一体何なんだろう…。
タグ :文字
2011年11月29日 01:21
ふと思いついて実装してみたら意外と使いやすかったので。
使い方:
・テンキーの7,4,1,8,5,2が点字の1~6の点に対応。
・数字が続く限り1文字として扱い、その位置の点を出力する。
・順不同。
・一続きの数字の後にはスペースなど数字以外の文字を1文字置く。
・って言うより例を見た方が早い。
例: 「74 27 5 8715 7415 」→「⠃⠡⠐⠝⠗」
テンキーと見比べれば意味が分かってもらえると思う。
使用上の注意:
・Unicodeの点字領域を表示できるフォントが必要。
・無保証あずいず。
・エラー処理してないので変な入力(同じ数字2回とか)は入れてはいけない。
出力:
使い方:
・テンキーの7,4,1,8,5,2が点字の1~6の点に対応。
・数字が続く限り1文字として扱い、その位置の点を出力する。
・順不同。
・一続きの数字の後にはスペースなど数字以外の文字を1文字置く。
・って言うより例を見た方が早い。
例: 「74 27 5 8715 7415 」→「⠃⠡⠐⠝⠗」
テンキーと見比べれば意味が分かってもらえると思う。
使用上の注意:
・Unicodeの点字領域を表示できるフォントが必要。
・無保証あずいず。
・エラー処理してないので変な入力(同じ数字2回とか)は入れてはいけない。
出力:
2011年09月03日 19:32
前回のつづき。
Wiiでもやってみた。

見ると結構いろいろなものが映っている。してみると前回のファミコン互換機は電源は入っていても接触不良か何かで何も映っていなかったと見える。
また、垂直同期信号(真ん中辺の黒い線)の左右にファミコン互換機には無かった細かい模様が見える。
これは等化パルスというもので、NTSC信号は1フィールドごとに垂直同期信号の始まる横位置が半画面分ずれるのでそれに追随するためのものである(しかし前回を見るに無くても動くのか…)。
なお等価パルスではない。英語でいうとequalizationだかqualizingだかそんな感じ。
さて次に前回やり方が思いつかないと言っていた画像化だが、プログラムを書いてみたら案外簡単にできた。
上の画像の上から2px目のラインを変換したのがこれだ。

見え方はほぼ想像通りといったところか。
Wiiの「警告 健康と安全のために」の画面なのだが、おぼろげに分かるだろうか。

縦方向の解像度は高いので文章とふりがなの間の隙間まで映っている。横方向もどこに文字があるかくらいは分かる。
さらに、最初の画像と見比べると、垂直同期信号の左の白い線が上下方向に途切れているのが分かる。これは「続けるにはAボタンを押してください。」の部分に対応している。上下方向は時間軸なので点滅しているということだ。
今回は単純にピクセルを並べ替えただけだが、上下や時間軸方向で隣との関係を見て補完すればもっと精細な絵ができるかもしれない。
めんどいからたぶんやらないけど。
最後に今回使ったプログラムのソースを置いておく。
C#、VisualStudio2005。
エラー処理皆無。
今回みたいな何の変哲もないGUIを作るだけなら書くことほとんどない。アルゴリズム部分を書くだけでソフトが作れちゃう。
Wiiでもやってみた。

見ると結構いろいろなものが映っている。してみると前回のファミコン互換機は電源は入っていても接触不良か何かで何も映っていなかったと見える。
また、垂直同期信号(真ん中辺の黒い線)の左右にファミコン互換機には無かった細かい模様が見える。
これは等化パルスというもので、NTSC信号は1フィールドごとに垂直同期信号の始まる横位置が半画面分ずれるのでそれに追随するためのものである(しかし前回を見るに無くても動くのか…)。
なお等価パルスではない。英語でいうとequalizationだかqualizingだかそんな感じ。
さて次に前回やり方が思いつかないと言っていた画像化だが、プログラムを書いてみたら案外簡単にできた。
上の画像の上から2px目のラインを変換したのがこれだ。

見え方はほぼ想像通りといったところか。
Wiiの「警告 健康と安全のために」の画面なのだが、おぼろげに分かるだろうか。

縦方向の解像度は高いので文章とふりがなの間の隙間まで映っている。横方向もどこに文字があるかくらいは分かる。
さらに、最初の画像と見比べると、垂直同期信号の左の白い線が上下方向に途切れているのが分かる。これは「続けるにはAボタンを押してください。」の部分に対応している。上下方向は時間軸なので点滅しているということだ。
今回は単純にピクセルを並べ替えただけだが、上下や時間軸方向で隣との関係を見て補完すればもっと精細な絵ができるかもしれない。
めんどいからたぶんやらないけど。
最後に今回使ったプログラムのソースを置いておく。
C#、VisualStudio2005。
エラー処理皆無。
namespace NTSCSignalParser {
public partial class Form1:Form {
public Form1() {
InitializeComponent();
numericUpDown1.Increment = 0.1M;
numericUpDown1.Maximum = int.MaxValue;
numericUpDown1.Minimum = 1;
numericUpDown1.Value = 3200;
numericUpDown2.Increment = 1;
numericUpDown2.Maximum = int.MaxValue;
numericUpDown2.Minimum = int.MinValue;
numericUpDown2.Value = 0;
textBox1.Text = @"h:\t\ntsc_wii.png";
}
private void button1_Click(object sender, EventArgs e) {
Bitmap bmp0 = new Bitmap(textBox1.Text);
Bitmap bmp = parseNTSC(bmp0, (double)numericUpDown1.Value, (int)numericUpDown2.Value);
pictureBox1.BackgroundImage = bmp;
}
private Bitmap parseNTSC(Bitmap bmp0, double pixelCount, int offset)
{
int imgWidth = 3200;
Bitmap ret = new Bitmap(320, 263);
double pos = 0;
for(int x=0;x<ret.Width;x++) {
for(int y=0;y<ret.Height;y++) {
pos = y*ret.Width+x;
pos/=(ret.Height*ret.Width);
pos*=pixelCount;
pos = Math.Floor(pos);
ret.SetPixel(x, y, bmp0.GetPixel
(((int)pos + offset)%imgWidth, 2+(((int)pos + offset)/imgWidth))
);
}
}
return ret;
}
}
}今回感じたことだけど、Windows上でGUIのプログラムを作るなら.NETに限るね。ものすごく楽。今回みたいな何の変哲もないGUIを作るだけなら書くことほとんどない。アルゴリズム部分を書くだけでソフトが作れちゃう。
2011年08月27日 13:42
ふとNTSCのコンポジット映像信号をキャプチャしたくなったのだが、そういう機械は持っていない。
だがPCには映像入力はなくてもマイク入力がある。
映像も音声も所詮は同じ電気信号。線も同じのを使ってるんだしきっと似たような電圧だろう。
というわけで、PCのマイク入力に映像の黄色いコードをつないでキャプチャしてみた。
結果から見せよう。これだ。

横3200pxあるのではみ出しているが気にしない。
図の見方だが、この図の1ラインが映像の1画面(正確には1フィールド)に相当する。
つまり黒い線は水平同期信号ではなく垂直同期信号である。水平同期信号は全体にぽつぽつとある黒い点の方だ。
垂直同期信号付近の水平同期信号は他と違う形になるはずなのだがこれはなっていない。安物だし省略しているのだろうか。
この画像の1ラインを黒い点を基準に分けて(262分割)並べると1画面が再現できるはずだが、うまいやり方が思いつかないのでやらない。
これで横解像度が12ドット、同期信号を除いて9ドットくらいあるので、大きな絵なら判別できるレベルの画像になるんではないかなと思う。
最後にこの画像の制作過程を一応説明しておく。
・映像出力はファミコン互換機から。
・PCのマイク入力端子に映像コードをつなぐ。
・WaveSpectraというソフトでサンプリング。周波数は最高の192kHz。
・8bitモノラルでWav書き出し。
・幅を計算する。
NTSC信号は60フィールド/秒なので、192[kHz]/60[フィールド/秒]=3200[サンプル/フィールド]。
・GIMPで横幅3200ドットの画像を作り、白~黒のグラデーションを描いてグレースケールでbmp保存。
・バイナリエディタで、さきほどのbmpのヘッダ部分だけを取り出す。
・コマンドプロンプトからcopy /bでbmpヘッダにwavファイルを結合。
・GIMPで開いて上下反転、色が逆だったので階調反転、見にくかったので適にレベル補正。
・できあがり。
続編
だがPCには映像入力はなくてもマイク入力がある。
映像も音声も所詮は同じ電気信号。線も同じのを使ってるんだしきっと似たような電圧だろう。
というわけで、PCのマイク入力に映像の黄色いコードをつないでキャプチャしてみた。
結果から見せよう。これだ。

横3200pxあるのではみ出しているが気にしない。
図の見方だが、この図の1ラインが映像の1画面(正確には1フィールド)に相当する。
つまり黒い線は水平同期信号ではなく垂直同期信号である。水平同期信号は全体にぽつぽつとある黒い点の方だ。
垂直同期信号付近の水平同期信号は他と違う形になるはずなのだがこれはなっていない。安物だし省略しているのだろうか。
この画像の1ラインを黒い点を基準に分けて(262分割)並べると1画面が再現できるはずだが、うまいやり方が思いつかないのでやらない。
これで横解像度が12ドット、同期信号を除いて9ドットくらいあるので、大きな絵なら判別できるレベルの画像になるんではないかなと思う。
最後にこの画像の制作過程を一応説明しておく。
・映像出力はファミコン互換機から。
・PCのマイク入力端子に映像コードをつなぐ。
・WaveSpectraというソフトでサンプリング。周波数は最高の192kHz。
・8bitモノラルでWav書き出し。
・幅を計算する。
NTSC信号は60フィールド/秒なので、192[kHz]/60[フィールド/秒]=3200[サンプル/フィールド]。
・GIMPで横幅3200ドットの画像を作り、白~黒のグラデーションを描いてグレースケールでbmp保存。
・バイナリエディタで、さきほどのbmpのヘッダ部分だけを取り出す。
・コマンドプロンプトからcopy /bでbmpヘッダにwavファイルを結合。
・GIMPで開いて上下反転、色が逆だったので階調反転、見にくかったので適にレベル補正。
・できあがり。
続編
タグ :画像
