読者です 読者をやめる 読者になる 読者になる

自作サンプリング音源を公開した

LinuxSamplerを使って、サンプリング音源を色々と物色していたら、自分でも作りたくなってきて、勢いで作ってしまいました。 以下からダウンロード可能です。

www.dropbox.com

音源とパッチは仕様がオープンなFLAC+SFZ形式なので、LinuxSamplerですぐに使えます。

TUNEのエレキベース

  • 型式は覚えていませんが、4弦24フレット、アクティブタイプの以下の写真に写っているやつです。

flic.kr

  • フロントピックアップ使用。弦はまあまあ新しいかな。
  • ノイズ除去以外のエフェクトはかけておりません。お好みのEQやアンプシミュレーターをお使いください。
  • ループは使っておりませんが、適当なところで音がなくなります。2秒以上はあります。
  • 半音ごとに1サンプルで弦違いの音やラウンドロビン用の重複音はありません。ベロシティのバラつきもありますので、コンプを使った方がいいです。
  • ライセンスはCC-BY 4.0です。
  • zip形式で10.31MBです。

tmbox.net

ミニガットギター ARIA PEPE

  • audio-technicaの安いマイクを使用。ノイズ除去やEQをかけてノイズや環境音を誤魔化しているため音は悪いです。
  • オクターブチューニングがあっていないため、高音はピッチがずれています。
  • ループは使っておりませんが、適当なところで音がなくなります。元々サステインは短めで、後半はS/Nが悪くなります。
  • 半音ごとに1サンプルですが、多少弦違いの音も収録しています。
  • ラウンドロビン用の重複音はありません。ベロシティや周波数特性のバラつきもありますので、コンプを使った方がいいです。
  • 音が悪いのでライセンスは放棄します。CC0です。
  • zip形式で3.72MBです。

tmbox.net

追記:

配布サイトを作りました。

Sound Library

WebTorrentとinstant.ioを試してみた

WebTorrentのアプリをWindows用とLinux用をインストールして試してみました。

webtorrent.io

アプリにファイルをドラッグアンドドロップするだけで簡単にシェアできるようです。

試しにギターの練習音源をシェアしてみました。 以下のリンクでinstant.ioを使って再生することができると思います。 (ChromeとかFirefoxでないとだめみたい。)

https://instant.io/#e14cef00945a8d99dc74d65cf52dcb892cf48ed1

家のWifiを経由して、スマホの回線から聞くことができました。これはすごいです。

ちなみにこのギターの練習はクレオフーガでも公開しています。

追記:

コンソールで使いたい場合はwebtorrent-hybridを使うとよいです。Dockerfileを用意しておきましたので、参考にしてみてください。

gist.github.com

BitcoinプロトコルをGo言語で少し書いてみた

前回、ビットコインピアと直接通信してみたいという話をしました。

ohac.hatenablog.com

今回はdnsseed-rubyの一部をGo言語に移植して、通信するところまで作成してみました。 プロトコルは下記サイトを参照。エンディアンが入り乱れていて、コーディングしにくかったです。

Protocol documentation - Bitcoin Wiki

以下のgistがソースコード。 ライブラリとかすでにありそうだけど、何も見ずに作りました。(dnsseed-rubyは見てます。) ライセンスはdnsseedと同じにしようと思います。

fake-coind.go · GitHub

以下、実行例。あ、ちなみにビットコインじゃなくてモナーコインで試しています。

$ go run fake-coind.go 
xx.xx.xx.xx
version 104
more data 1 [1]
/Satoshi:0.10.2.2/ 70003 692751
verack 0
alert 165
ping 8
inv 37
1
1
inv 37
1
1
inv 37
1
2
62804b60c5242c9882db6d28a83e0bb87be220d38dee863361edb6ffe890f09f

こんな感じでブロックのハッシュが届きます。

Insight でちゃんとあるかどうか確認するとよいと思います。

Go言語なのでコンパイルすればWindowsでも動くと思います。 試していませんが。

次は実際にブロックをダウンロードできるようにして、さらに並列ダウンロードに対応して bootstrap.dat の高速生成なんかができたらいいなぁと妄想しています。

最終的には electrum-server のお供にできるようにしたいです。

にほんブログ村 その他生活ブログ 仮想通貨へ
にほんブログ村

ビットコインピアと直接通信してみたい

タイトルでビットコインピアと直接通信してみたいと書いてみましたが、実はすでにアルトコインとはDNS Seedというサービスで通信しております。

http://seed.sighash.info/

ソースはこれ。

https://github.com/ohac/dnsseed-ruby

これはdnsseedというPHPで書かれているコードをRubyに移植したものです。

ただ、これで通信しているのは以下のような流れで、ほんの少ししかコマンドを使っていないのです。

  • version, verack でバージョンと最大ブロック高を送受信
  • getaddr で既知のピアの情報をもらう

一方、bootstrap.datを作成するためのblockchain2torrentというのがあります。

https://github.com/ohac/blockchain2torrent

これはRPCで通信しているので、自分で立ち上げたノードとしか普通は通信できません。

これは以下のRPCコマンドを使っています。

  • getinfo - 最大ブロック高を得るためだけに使用
  • getblockhash - 指定したブロック高のハッシュ値を得る
  • getblock - 指定したハッシュ値からブロックそのものを得る

これら3つのコマンドをRPCなしで得られれば、自分でノードを立ち上げる必要がなくなります。

ノードが信頼できるかどうか分かりませんので、なんらかの基準を設けて選定し、さらに複数ノードでベリファイするような処理が必要ですが、実験やbootstrap.datを得るためだけであればあまり慎重にならなくてもよいかもしれません。

さらにbitcoin-abeやelectrum-serverを動かすには下記RPCコマンドも必要となります。

  • bitcoin-abe, electrum-serverに必要
  • electrum-serverに必要
    • sendrawtransaction - 送金などのbroadcastで必要
    • estimatefee - feeの計算で必要
    • getinfo - relayfeeも見る必要がある

ここまでサポートできたらSPVが各種コアデーモンを立ち上げずに実現できるのでうれしいかもしれません。

にほんブログ村 その他生活ブログ 仮想通貨へ
にほんブログ村

Ringoが使えるようになるまでにかかった時間

ようやくRingoの移行が完了しました。

ohac.hatenablog.com

Ringo等を自宅サーバに移す準備をしているのですが、ブロックが500毎に長時間一時停止してしまい、なかなかダウンロードが終わりません。

このあと本日昼ぐらいにようやくキャッチアップが完了しました。

これらは以下の2つのサービスで使っています。

http://abe.sighash.info/

Web Wallet

Ringoはブロックの生成が早いため、すでに90万ブロックに達しております。 500ブロックを5分で処理できたとすると1週間ぐらいかかってしまいます。

Monacoinの方はLitecoinの先端を移植済みでダウンロードは早いし、詰まることもなく問題はありませんでした。

定期的に更新されるbootstrap.datがあればまだましですが、あったとしても手順が増えるので使い勝手はあまりよくないです。 このようなSPVのないアルトコインは初めて使う人には難易度が高すぎるのではないかと思います。

にほんブログ村 その他生活ブログ 仮想通貨へ
にほんブログ村

ブロックチェインのダウンロードが500毎に一時停止してしまう問題

さくらのクラウドの無料枠が終わってしまったためRingo等を自宅サーバに移す準備をしているのですが、ブロックが500毎に長時間一時停止してしまい、なかなかダウンロードが終わりません。

あと、なぜかdnsseedを使っているとルータ内蔵のDNSサーバがハングアップしてしまうようです。

後者はringo.confにdnsseed=0を入れることで対策できました。 rinseed.sighash.infoで提供しているIPの数を減らした方がよいのかもしれません。 それにしても脆弱なルータです。

で、前者ですが、grep -w 500でソースを検索してみると main.cpp と main.h に関係してそうなコードがありました。 両方とも変えて試しましたが、状況は変わらず。おそらく送信側に制限がついているのではないかという気がしてきた。

とりあえず定期的にストップ、再開するようにしてお茶を濁した。

$ while [ 1 ]; do ringod stop; sleep 30; ringod; sleep 600; done

Electrumでコールドウォレットを試してみた

まだBitcoin Coreが比較的軽かった頃、いくつかウォレットを作っていましたが、もう最近ではリソースを食いすぎて、全く使わなくなってしまいました。

しかし、ちゃんと取り出せるようにしておきたいので、紙に書き出しておいたプライベートキーからElectrumのコールドウォレットに取り込んで、送信トランザクションの作成と署名ができるかどうか試してみました。

ただ、完全にネットから切り離されたPCを準備するのは大変なので、Dockerでネットアクセスできないコンテナを作成して実験することにしました。

gist.github.com

まずはDockerでElectrumをビルドして、イメージを作成。次に実行するのですが、このときに --net=none を付けてネットワークが使えないようにしたいところですが、どうもElectrumはネットワークへの接続を前提にしているようですのでこのオプションは付けないで実行します。

(追記: restoreのときに-o(オフライン)オプションを付けるとよいみたいです。ただし、この場合はその後のpaytoでエラーとなるため、公式ドキュメントに書かれているようにウォッチオンリーなホットウォレットから署名なしのtxを作成し、それをオフラインウォレット側で署名するという手順が必要となるようです。)

$ docker build -t electrum .
$ docker run -it --rm electrum

Electrumの最新をビルドするようになっていますが、本当はちゃんとタグの付いたやつをビルドすべきです。 今はテストなのでこのまま進みます。

最初はネットワークにつないでヘッダを取っておきます。

root@xxx:~/electrum# electrum daemon start

同期するまで少し時間がかかります。 ~/blockchain_headers のサイズでも監視しながら待ちましょう。

root@xxx:~/electrum# ls -l ~/.electrum/
total 2284
-rw-r--r-- 1 root root 2326528 Jun  4 13:37 blockchain_headers

2016/06/04の時点で32MBぐらいでした。結構でかいです。 同期が完了したら、daemonを停止しておきます。

(追記: 停止してもrestore時に開始してしまうので意味がないようです。)

root@xxx:~/electrum# electrum daemon status
{
    "auto_connect": true, 
    "blockchain_height": 400043, 
    "connected": true, 
...
    "server_height": 414752, 

ここで5で始まるプライベートキーを取り込みます。

root@xxx:~/electrum# ./electrum restore -w coldwallet :
Enter argument (will not echo):
Password (hit return if you do not wish to encrypt your wallet):
Recovering wallet...
Recovery successful
Wallet saved in '/root/electrum/coldwallet'

プライベートキーはタイピングかコピペになると思いますが、キーロガークリップボードを盗むようなソフトが入っているとまずいので多少フェイクを入れながら入力するとよいかもしれません。まあ、そもそもそういうコンピュータを使っている時点でやばそうですが。

マルウェアじゃなくてもクリップボードをいろいろと監視するソフトなどが入っているとそこからセキュリティホールができちゃうかもしれませんので、切っておいた方がよいです。Ubuntuの場合はfcitxのデフォルトでそういうのが入っているので注意しましょう。

f:id:ohac:20160604224540p:plain

完了したら、パブリックアドレスと残高を確認してみましょう。

root@xxx:~/electrum# electrum listaddresses -w coldwallet -b
[
    "1xxxx, 1.2345..."
]

送信リクエストの発行と署名を行います。

root@xxx:~/electrum# electrum payto -w coldwallet -f 0.00002 1xxxx... 0.0001
{
    "complete": true, 
    "final": false, 
    "hex": "010...

最後にhexの右のクォートの中をオンラインウォレットでbroadcastすればよいようです。

送信は過去にLitecoinで試したので、これでいけるはずですが、まだ試していません。

ohac.hatenablog.com

まあ、なんにせよプライベートキーからパブリックキーと残高がちゃんと確認できたら一安心ですね。

にほんブログ村 その他生活ブログ 仮想通貨へ
にほんブログ村