GetGemsをLinuxで使う

Webアプリとかでなくネイティブアプリケーションを使いたい。(常にブラウザ置いておくのもアレだし、タスクトレイに放り込んでおけると嬉しい)

ところでクライアントあるの?

クライアントあるのか?

クライアントあるのか?

・Get it on Google play

・Download on the App Store

・Get the Web Client

これ明らかにWebアプリの事だし他にないじゃん。

 

と、ここでGetGemsはTelegram互換だった事を思い出す。TelegramのWebクライアントには同じアカウントとしてきちんとログインできるのだ。

 

そして、Telegramにはネイティブアプリケーションがある!!(Windows/Mac/Linux揃っている)

 

公式サイトから拾ってくる。それを展開する。

$ tar -Jxvf ./tsetup.0.9.13.tar.xz
Telegram/
Telegram/Updater
Telegram/Telegram

あとは実行する。Telegramはそのまま実行可能なのでこれを起動しても良いし、それかメニューの中に勝手に入るかもしれない。僕の環境ではメニュー→インターネット→Telegram Desktopで入っていた。

きちんと起動した。

きちんと起動した。

 

後は素直にログインしてやれば、こうだ。

きちんとログイン出来た。

きちんとログイン出来た。

 

一応モザイクしたけど、会話相手の少なさがバレるな、これは(笑)

 

refリンク貼っておきますね→http://r.getgems.org/m/WYnwYR3jEo

登録待ってまーす(

Anonymous Adsから払い出しがあった

Anonymous Adsを入れたで書いたように、広告を表示するようにしてみたんだけど、早速払い出しがあった。はやい。

 

今回払い出されたのは10004Satoshi。アクセス殆どされてないと思うけれど、そんなので1万Satoshiももらっちゃっていいのだろか

 

Ad UnitのStatsに表示されている、unique impressionsが自分自身のアクセスではない事を祈りつつ…

Anonymous Adsを入れた

要はただのWeb配信広告なのだけど、Bitcoinで報酬が頂けるという点が普通と違う。それから少額からでも払いだしてくれる。

他にはCoinURLとかもあるけど、そちらとは違い、審査が無い。無料ブログサイトは登録できないとかいう残念な状態にもならないみたい。

 

サイトを眺めている感じだと、広告を掲載する事も可能な感じ。というかみんながそうやってBTCを払って掲載した広告が配信されるんだろうか?

 

まだ設置したばかりで実際のところ払い出しもないしどのくらいになるかわからないけれど(というかこのブログ見てくれる人いるのかすらわからないけれど)、まぁ暫く様子を見てみましょう。

 

自分もやりたいゾと思ったなたは↓のリンクからどうぞ

Advertise with Anonymous Ads

CLIからツイートするだけのプログラム書いた

書いた。

ツイートする時で、mikutterが起動している時はmikutter、Vimが起動されている時はTweetVimという感じだったんだけど、mikutterが起動してもいなくて、Vimが起動してもいないという状態では、Webを呼び出すかVimを呼び出すかだった。

TweetVimもいいんだけど、日本語入力モードのON/OFFで非常に面倒なところなので、もう日本語入力モードがどっちでもいいような感じでターミナルからサクッと呟けるプログラムを用意すればいいじゃないと思った。

どうせ探せばあるだろって思ったけれど、どうせなら自分で書いたろという事で、書きました。

https://github.com/ottyajp/cli_tweet

細かい事はそっちのREADME.mdに書いてあるので割愛。

 

書く上で参考(というか丸パクリな部分が多いけど)にしたのは以下のページ。

プログラミングメモ日記 Qtのコンソールアプリの基本構造

mole-studio C++/QtでOAuthを使ってTwitterに投稿する

 

今後やりたいと思っているのは、(README.mdに書き忘れたんだけど)oAuthを真面目に実装する事。いつになるか知らないけど。

monacoinをビルドするPKGBUILDを書く

特に意味は無いけれど(普通にビルド出来たし)、makepkgを一発叩くだけであとは待ってれば完了する状態というのもいいかなと思って勉強がてら書いてみた。

/usr/share/pacman/PKGBUILD.protoを雛形に、それらしく書く。

$ cd ~
$ mkdir monacoin_build_test && cd monacoin_build_test
$ cp /usr/share/pacman/PKGBUILD.proto ./PKGBUILD
$ vi PKGBUILD
$ cat PKGBUILD
# This is an example PKGBUILD file. Use this as a start to creating your own,
# and remove these comments. For more information, see 'man PKGBUILD'.
# NOTE: Please fill out the license field for your package! If it is unknown,
# then please put 'unknown'.

# Maintainer: Your Name <youremail@domain.com>
pkgname=monacoin
pkgver=0.10.2.2
pkgrel=1
pkgdesc="peer to peer crypto currency Monacoin full client."
arch=('i686' 'x86_64')
url="http://monacoin.org/"
license=('MIT')
depends=('boost-libs' 'qt4' 'qrencode' 'protobuf' 'db4.8')
makedepends=('boost' 'qrencode' 'protobuf')
source=("https://github.com/monacoinproject/monacoin/archive/v$pkgver-hotfix.tar.gz")
md5sums=('cffdf0e505820b62fe8104c9c47d8fa9')

build() {
cd "$srcdir/$pkgname-$pkgver-hotfix"
./autogen.sh
./configure
make
}

package() {
cd "$srcdir/$pkgname-$pkgver-hotfix"
# make DESTDIR="$pkgdir/" install
install -Dm755 src/qt/monacoin-qt "$pkgdir"/usr/bin/monacoin-qt
install -Dm755 src/monacoind "$pkgdir"/usr/bin/monacoind
install -Dm755 src/monacoin-cli "$pkgdir"/usr/bin/monacoin-cli
install -Dm755 src/monacoin-tx "$pkgdir"/usr/bin/monacoin-tx
install -Dm644 share/pixmaps/bitcoin128.png "$pkgdir"/usr/share/pixmaps/monacoin128.png
install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
}

dependsとかmakedependsとかpackage()とか、大部分をlitecoin-qtを参考にてきとうに埋めた。

makepkg出来るかチェックする。

$ makepkg
~略~
==> 作成完了: monacoin 0.10.2.2-1 (2015年 11月 18日 水曜日 18:02:04 JST)

なんとかうまくいった。出来上がったパッケージが正常かチェックする。pacman -Qlp(Qip)やnamcapで調べ、実際にパッケージをインストールして動作チェックする。

$ pacman -Qlp monacoin-0.10.2.2-1-x86_64.pkg.tar.xz
monacoin /usr/
monacoin /usr/bin/
monacoin /usr/bin/monacoin-cli
monacoin /usr/bin/monacoin-qt
monacoin /usr/bin/monacoin-tx
monacoin /usr/bin/monacoind
monacoin /usr/share/
monacoin /usr/share/licenses/
monacoin /usr/share/licenses/monacoin/
monacoin /usr/share/licenses/monacoin/COPYING
monacoin /usr/share/pixmaps/
monacoin /usr/share/pixmaps/monacoin128.png
$ pacman -Qip monacoin-0.10.2.2-1-x86_64.pkg.tar.xz
名前      : monacoin
バージョン   : 0.10.2.2-1
説明      : monacoin full client.
アーキテクチャ : x86_64
URL : http://monacoin.org/
ライセンス   : MIT
グループ    : なし
Provides : なし
依存パッケージ : boost-libs qt4 qrencode protobuf db4.8
提案パッケージ : なし
衝突パッケージ : なし
置換パッケージ : なし
圧縮した容量  : 4.10 MiB
インストール容量: 15.25 MiB
パッケージ作成者: Unknown Packager
ビルド日時   : 2015年11月18日 18時01分56秒
Install Script : No
Validated By : なし
署名      : なし
$ namcap PKGBUILD
PKGBUILD (monacoin) W: Description should not contain the package name.
$ namcap monacoin-0.10.2.2-1-x86_64.pkg.tar.xz
monacoin W: Description should not contain the package name.
monacoin W: ELF file ('usr/bin/monacoin-tx') has executable stack.
monacoin W: ELF file ('usr/bin/monacoin-qt') has executable stack.
monacoin W: ELF file ('usr/bin/monacoind') has executable stack.

Descriptionにはパッケージ名突っ込むなって書いてあるけどまぁほっとこ、大した事じゃないし…

他にも3つもWarning出てるけど、まぁErrorじゃなくてWarningだし…ほっとこ()

$ sudo pacman -U monacoin-0.10.2.2-1-x86_64.pkg.tar.xz
[sudo] tea のパスワード:
パッケージをロード...
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (1) monacoin-0.10.2.2-1

合計インストール容量: 15.25 MiB

:: インストールを行いますか? [Y/n] y
(1/1) キーリングのキーを確認 [########] 100%
(1/1) パッケージの整合性をチェック [########] 100%
(1/1) パッケージファイルのロード [########] 100%
(1/1) ファイルの衝突をチェック [########] 100%
(1/1) 空き容量を確認 [########] 100%
(1/1) インストール monacoin [########] 100%

monacoin-qt, monacoind, monacoin-cliなど使ってみて正常に動作しそうな事を確認(割愛)する。monacoin-txは使い方よくわかんないので放置。それらしい場所に入っている事もhashで確認する。

$ hash
hits command
2 /usr/bin/monacoin-cli
1 /usr/bin/monacoind
1 /usr/bin/monacoin-qt

 

うまくいった。一応削除しておく。

$ sudo pacman -R monacoin
[sudo] tea のパスワード:
依存関係を確認しています...

パッケージ (1) monacoin-0.10.2.2-1

合計削除容量: 15.25 MiB

:: 以上のパッケージを削除しますか? [Y/n] y
(1/1) 削除 monacoin [######################] 100%

 

 

死ぬほどてきとうに書いたから(一応動いたって事でおしまい)どうなるかわかんないけど、これでいいや

monacoindをビルドする

環境はArchLinux(つーかAntergosだけど)

何が必要かよくわからないので取り敢えずcloneしてきて様子を見よう。

$ git clone https://github.com/monacoinproject/monacoin.git

http://qiita.com/monapay/items/8642ea58e7d959e380c2 によると、 monacoin/src の中で $ make -f makefile.unix しろって言っているけれど、 makefile.unix なターゲットがないゾ、と怒られるので、素直に INSTALL 読む。

See doc/build-*.md for instructions on building bitcoind(以下略)

と書いてあるので、それらしい doc/build-unix.md を見て対応。

$ ./autogen.sh
$ ./configure
configure: error: Found Berkeley DB other than 4.8. required for portable walltes (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)

怒られた。 build-unix.md の Dependencies の項を見てみると、 libdb4.8 が Wallet storage に必要らしい。

only needed when wallet enabled

とあるけれど、ま、ウォレット機能は必要でしょ。db4.8(https://aur.archlinux.org/packages/db4.8/)を入れてからリベンジしたら通ったので、次の工程へ。

$ yaourt -S db4.8
$ ./configure
$ make

うまくいっていれば、monacoin/srcの中に monacoind や monacoin-cli が出来ているはず。

動作チェックは割愛。

 

Monacoinをソロマイニングする

Lyra2REv2になってから、Diffが比較的下がっているので、しょぼいCPUでも多少ブロックが発見出来ている(poolのBlock finderで見るとalgo変更から10個は少なくとも見つけている)のだが、得られたMONAは22程度。本当はもっと沢山掘り当てているのに。

という訳でソロマイニングに挑戦する事にした。

 

まずはウォレットを拾ってこよう。

$ wget http://monacoin.org/files/client/0.10.2.2-hotfix/monacoin-0.10.2.2-hotfix-linux64.tar.gz
$ tar -zxvf ./monacoin-0.10.2.2-hotfix-linux64.tar.gz

さて、起動だ。

$ cd ./monacoin/bin
$ ./monacoind
Error: To use monacoind, or the -server option to monacoin-qt, you must set an rpcpassword in the configuration file:
/home/tea/.monacoin/monacoin.conf
It is recommended you use the following random password:
rpcuser=monacoinrpc
rpcpassword=D7J12oDp372pCxjvEqU28MgcxESwD6iqRZQ2tdQpeZcg
(you do not need to remember this password)
The username and password MUST NOT be the same.
If the file does not exist, create it with owner-readable-only file permissions.
It is also recommended to set alertnotify so you are notified of problems;
for example: alertnotify=echo %s | mail -s "Monacoin Alert" ad min@foo.com

Failed to create backup boost::filesystem::copy_file: No such file or directory: "/home/tea/.monacoin/wallet.dat", "/home/te a/.monacoin/backups/wallet.dat.2015-11-14-01.41"

エラー落ち。出力を見つつてきとうに対応する。

$ cd $HOME
$ mkdir -m 700 .monacoin
$ vi .monacoin/monacoin.conf
$ cat .monacoin/monacoin.conf
rpcuser=monacoinrpc
rpcpassword=hoge

 

リベンジという事でもう1度monacoindを起動すると、起動したっぽいけど、猛烈にCPUを食う(おさまる気配無し)し、通信もあまりしているように見えない。GUI版のmonacoin-qtを実行しても大して状況は変わらない。addnode=192.168.0.15みたいな感じでLAN内にいるmonacoin-qt(が実行されているWindows機を今回は使った)を指定してみるとサクッと繋がって同期が始まった。

同期の完了を待ってマイニングのための設定を行う。monacoin.confを修正。

$ cat .monacoin/monacoin.conf
server=1
daemon=1

rpcuser=monacoinrpc
rpcpassword=hoge

rpcallowip=127.0.0.1
rpcallowip=192.168.0.0/24

rpcport=9332

addnode=192.168.0.15

 

 

server=1 : JSON-RPCを受け付けるようにする
daemon=1 : daemonモードで起動
rpcuser : JSON-RPCのためのユーザ名
rpcpassword : JSON-RPCのためのパスワード
rpcallowip : JSON-RPCを受け付けるIPアドレス(ここで指定したアドレスからのアクセスを受け付ける)
rpcport : JSON-RPCのためにlistenするポート

他のPCから接続させるためにはファイアウォールをなんとかしといた方がよさそう。

# ufw allow 9332/tcp
# enable

設定は完了したのでmonacoindを起動(別にmonacoin-qtでも良い)した上で、cpuminerに設定を渡す。

$ ./cpuminer -a lyra2rev2 -u monacoinrpc -p hoge -o localhost: 9332 --coinbase-addr MPnUpEhXHH4NUSofzYEsfMfZSErdo5AFbL

 

–coinbase-addrでウォレット上のアドレスを指定する必要がある。

https://github.com/monacoinproject/Monacoin-exp

0.8.7.1と異なり、ソロマイニングの際には自身のウォレットアドレスを指定する必要があります

jsonで設定を渡すのでも同様。”coinbase-addr”:”MPnUpEhXHH4NUSofzYEsfMfZSErdo5AFbL”が必要になるだけ。

 

ブロック見つけられてないからこれで本当にうまくいってるのかは確証が得られないけれど、まぁ処理はしてるようなのでうまくいったんじゃなかろかね。

 

 

次はMPOSを触って俺々プールを作るか、それかmonacoindのビルドとかやってみるかな。

TSファイルをm2v+wavにDemuxするバッチファイル

TSファイルをm2v+wavにDemuxする…というのはBonTsDemuxを使えばいいんだけど、っていうか使うんだけど、バッチファイルにする意味は一応ある。

アプリケーションへのドラッグアンドドロップが使える時と使えない時があって死ぬほど面倒くさい(起動するたびに不安定に変化する)。BonTsDemuxもそうだし、tssplitterでもそうだし、aviutlでもそう。その場合でもExplorerの上ではきちんと動作する。このパソコンのシステムに何かしら不都合があるんじゃないかと思うんだけど、それを追求するのも、面倒だなぁと。

という訳で、ドラッグアンドドロップしたファイルごとにBonTsDemuxを呼び出すようなバッチを作れば良いねという判断になる。

@echo OFF

:LOOP
if "%~dpnx1" == "" goto END
echo Input: %~dpnx1
C:\dtv\BonTsDemux\BonTsDemuxC.exe -i "%~dpnx1"
if %ERRORLEVEL% == 0 echo completed.
if %ERRORLEVEL% == 1 echo error occurred.
echo;
shift
goto LOOP

:END
echo all jobs were completed.
timeout /t -1

いつもいつもWindows batはクソわかりにくいなって思って逃げてたからよくわかんなかったので、死ぬほどてきとうに書いた。

GUI版を使う必要もねーかなって感じなのでCUI版のBonTsDemuxC.exeを使った。

このままaucとか使って自動でaviutlに突っ込んで行くのもいいかなと思ったけれど、引数をshiftしていってるので、処理を戻せない(shiftは引数を右から左に移動させるけど、左から右に移動させる手は無いんだったはず)あたりがちょっと面倒かなぁといった感じ。引数を使わず自分で処理リストを作ればいいんだけど、それはそれでひたすらに面倒な気がして。

 

ひとまず今日のところはこんな感じで。

標準入出力からクリップボードを使う

Macではpbcopyとかpbpasteがあるらしいんだけど、Macじゃないので、無い。

 

xselというコマンドがあって、これがクリップボードを取り扱える。xselが入ってなかったので取り敢えずインストールしておいてから。

$ pacman -S xsel
$ echo "test" | xsel -i -b
$ xsel -o -b
test

こんな感じ。オプションは、-iが入力である事を示していて(-oは出力)、-bがクリップボードでの処理をするって感じ。

オプション毎度付けるの面倒なのでaliasを登録しておく。Macに習ってコマンド名はpbcopyとpbpasteにしてみた。Mac持ってないけど。

alias pbcopy='xsel -i -b'
alias pbpaste='xsel -o -b'

上記は $ echo .bashrc | grep xsel | pbcopy みたいにして拾ってきた。

今までTerminalからクリップボードへのコピーは、マウスで選択→右クリック→コピーってしてたけど(Shift+Ctrl+Cっていうショートカットキーあるけどいつも忘れてた)、範囲選択しないといけないのが面倒なところ、pipeでそのまま渡せばいいので楽ちんという感じ。

VPCS14AFJに入れたArchLinuxでNFCを使う

https://www.sony.jp/support/vaio/products/vpc/vpcs14afj.html

SONYだった時代のVAIOである。これにはNFCのリーダ/ライタがついているので、これをなんとか使って遊べないかなぁといじってみた。

 

「ついている」というのは、埋め込まれているという事で、きちんと認識しているのかどうか確認。

$ lsusb | grep FeliCa
Bus 001 Device 005: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]

認識しているようだ。さて、使えるか?

それらしいライブラリ(libnfc)を発見するも、使えたり使えなかったりして不安定。S330が搭載されているのにS360として認識したり、使い物にならない。なんとか原因究明出来ないかと四苦八苦したが断念。

 

別のライブラリを使う。libpafe。毎度の事だがaur死ぬほどお世話になってる、ありがとうございます。

yaourt -S libpafe したら最後に

To use PaSoRi
# udevadm control –reload-rules
Make ‘plugdev’ group and add your user

と言われたので、やっておく。

$ sudo udevadm control --reload-rules
$ sudo groupadd plugdev
$ sudo usermod -G plugdev tea

さて、テスト。

$ pasori_test
PaSoRi (RC-S330)
firmware version 1.30

きちんと認識しているようだし、firmware version拾えてるからPaSoRi自体は使えているっぽい。さて本当にFeliCaを読めるかどうかチェック。

$ felica_dump
# lpdump : Tue Nov 10 11:33:52 2015
# --- IDm info (FeliCa) ---
# Manufacture Date = 2013/2/15
〜以下略〜

以下データが連なる。データの中身についてはこれから調査する予定。この時使用したのは学生証だが、Suicaを置いた時には何も出力されなかった。これは不明。

ネットで拾ったSuica残高を表示するスクリプトを実行してみる。https://gist.github.com/Akkiesoft/6450764

rubyで書かれているのでlibpafe-rubyをインストールしておくのも忘れずに。aur何でも揃ってるなといった感想(こなみ)

$ ruby iccard-check.rb
1226

Suica普通に取り扱えてるみたいだし、felica_dumpに何かしらのバグがあったりするんだろうか。

 

よし、C++からlibpafe触って見るぞ。ネットで拾ったコードを元に書いてみる(ほぼパクリ)

#include <iostream>
#include <string>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>

#include <iomanip>

#define hexformat(fill,wd) hex<<setfill(fill)<<setw(wd)

extern "C" {
#include <libpafe/libpafe.h>
#include <libpafe/pasori_command.h>
#include <libpafe/felica_command.h>
}

int main(){
using namespace std;
 pasori* p;

 if((p = pasori_open()) != NULL){
 felica* f;
 pasori_init(p);

 if((f = felica_polling(p, FELICA_POLLING_EDY, 0, 1)) != NULL) {
 uint8_t idm[16];

 felica_get_idm(f, idm);
 for(int n=0; n<7; n++){
 cout<<hexformat('0',2)<<unsigned(idm[n])<<":";
 }
 cout<<hexformat('0',2)<<unsigned(idm[7])<<endl;

 free(f);
 }
 }
 pasori_close(p);
 return 0;
}

これをコンパイルして実行してみる。

$ g++ ./felica.cpp -o ./felica /usr/lib/libpafe.so
$ ./felica
xx:xx:xx:xx:xx:xx:xx:xx

うまくいったっぽい。

 

あとはlibpafeのREADMEに書いてある事見ながら色々遊んでみようと思っているところ。FeliCaなカードは安く買えるっぽいので何かしら遊んでみよう。

 

普通に買うとRS-S330ってクソ高いのな、今。