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ってクソ高いのな、今。

ArchLinuxでLyra2REv2マイニング(CPU)

実際のところInstall Battleが面倒くさくてAntergos使っているので、ArchLinuxそのままではないんだけど。

 

https://blog.visvirial.com/articles/499#CPU

こちらを参考に。参考っていうかそのままなんだけど~

 

必要なパッケージを入れようってあるけど、実際どんな必要なパッケージがあるのかしらと思っても、ぶっちゃけわかんないので、取り敢えずビルドしたら何かしらエラー出るだろ、それに対処すればいいだろ…

と思って ./build.sh したら何のエラーもなくそのまま通ってしまった。

 

後はjsonで設定ファイル作って、それを食わせてcpuminerを実行するだけ。

 

何の問題も無かったし普通に動いた。何一つ有用な情報無し!!

 

 

 

追記:

文字見えねーよ!!!!!!

文字見えねーよ!!!!!!

pacmanで「無効または破損したパッケージ (PGP 鍵)」

久々に # pacman -Syuaした時に、

ファイル /path/to/pkg/hoge.fuga.tar.xz は破損しています (無効または破損したパッケージ (PGP 鍵))。

で軒並みパッケージが弾かれた。PGP鍵とあるし、だいぶ前からいじってなかったので、取り敢えず鍵を更新しましょう。

# pacman-key –refresh-keys

結構待っても(20分くらい?)かけらも進んでいる様子が無かった上に通信している様子も無いので、

# pacman-key –init
# pacman-key –refresh-keys

と、先にinitしてからにしたら普通に終わりました。

そのまま # pacman -Syua したらこれも普通に通った。問題無いですね。(たぶん)

Qweenを触ってみる

TweenというクライアントのQtによる実装がある。

Qween | NOSE Takafumi

TweenはWindows用のクライアントだが、Qtによる実装という事で、勿論Linux上でも使えるのではないかね!?と思い、4年ほど前に多少触ったのだけれど、当時は知識も無くまともに使えなかった。

 

ふと思い出して、もう一度触ってみよう、と思って先日調べてみたら、上記の最後の投稿は2010年の3月、何度も案内されているURLであるhttp://qween.tnose.net/もアクセスしても500エラーが返ってくる。

ところが、githubにはそのまま残していてくれていたのである。最終コミットは2010年5月22日と、ブログより少し新しいが、5年前である事に変わりはない。

 

  取り敢えずgit cloneしてきて、コンパイルして使ってみようと思ったけれど、通らない。それもそのはず、Qt4向けに書かれたコードである。我が家の環境はQt5…Qt4向けコードがそのまま通るはずない。 Qt4な開発環境を作っても良かったのだけど、遊びで勉強の一貫で5仕様に書き換えるのもいいかなと思って、弄ってみる事にした。

今もそうだけど、おなかすいた。ぴざたべたい。

1日では終わらない。 だが、数日の後に…

通った。随分日数がかかっているが、あまり作業出来てない日が多かったため #言い訳

 

ブログ記事から察するに、oAuthじゃなくてxAuthしか実装してないみたいだけど、Documentation | Twitter Developersの目次にはoAuthしか無い…xAuth廃止は確かしてなかった(BASIC認証は廃止だったよね)気がするけど、公式はoAuth使って欲しいんだろうなぁ…という事で、oAuthを自力で実装しなきゃダメかなーと。

それから、当時はTwitter APIは1.0だったろうけど(だから1.0に合わせて作られてるだろうけど)、2013年の6月12日未明に残念ながら廃止されちゃったのよね。今は1.1が動いているので、それに合わせて、諸々を書き換えないといけないだろうなぁ、と。

 

当時とは違う部分も他にも多くある(例えばTweetを引用出来るようになったとか)ので、そう簡単には行かないだろうけれど。

 

気長〜にやってこうと思います。うむうむ。

Linuxでクロスコンパイル 〜その1〜

Linuxの上でWindows向けバイナリを吐き出してみるテスト

詳しいことは詳細が決まってから書くけれど、学校で「コンパイルサーバが欲しい」という話を持ちかけられて、そういえばやった事がないのでちょっくらやってみようって感じ。

とにかく取り敢えずで、それらしい感じになれば今回はそれでオッケーという事で。

 

ArchLinuxの上でWindows向けを吐くぞ!!ゲロロロ

 

何はともあれインストール

[tea@teaarch ~]$ yaourt -S mingw-w64-gcc
[sudo] tea のパスワード:
依存関係を解決しています…
衝突するパッケージがないか確認しています…

パッケージ (5) mingw-w64-binutils-2.25.1-1 mingw-w64-crt-4.0.4-1
mingw-w64-headers-4.0.4-1 mingw-w64-winpthreads-4.0.4-1
mingw-w64-gcc-5.2.0-1

合計ダウンロード容量: 136.10 MiB
合計インストール容量: 780.51 MiB

〜以下略

 

恒例のHello world.

$ cat hello.cpp

#include <iostream>

int main(){
std::cout <<“hello ” <<std::endl;
return 0;
}

 

さてコンパイル

$ g++ -o hello.out hello.cpp

$ x86_64-w64-mingw32-g++ -o hello.exe hello.cpp -static

$ ls

hello.cpp

hello.exe

hello.out

 

実行します。まずは普通のLinux用バイナリ

$ ./hello.out

hello

当然想定通りの結果。よろしい。

次はクロスコンパイルしたWindows向けバイナリ

$ ./hello.exe

bash: ./test.exe: cannot execute binary file: 実行形式エラー

実行できない。良さそう

Windowsに移動させるのがめんどかったからwineで実行してみる

$ wine ./hello.exe

fixme:service:scmdatabase_autostart_services Auto-start service L”Mobizen plugin” failed to start: 2
hello
fixme:ole:RemUnknown_QueryInterface No interface for iid {00000019-0000-0000-c000-000000000046}

なんかものっそいエラー吐かれたけど一応「hello」は出たし良いとするか(((

MobizenってこのMobizenかな??

 

クロスコンパイル自体はそりゃ出来るでしょうねって感じでした。

問題はこれにどういうフロントエンドを付けるのかっていうとこなんだけど、というかそもそも鯖にLinuxを使うのかどうかとか、色々決まってない部分があるし、加えて言うなら今回はCっぽい空気だったけど、求められているのはFORTRANなのであった……

 

 

ちなみに

上ではしれっと-static付けているけど、ダイナミックリンクでやるとlibstdc++-6.dllあたりが必要そうなエラーを吐いて実行できない。適切に用意してあげれば実行出来るんだろうけどね。

データの大きさを比べると、

  • test.cpp  84
  • test.exe  11206980
  • test.out  9192
  • test_d.exe 134968

みたいな感じ。スタティックリンクだと11MBくらいになる。(ただのHelloWorldである)

.vimrc書いてた

 

大した事は書いてないんだけどね。

Vundleを入れて、TweetVimを使えるようにしたのをベースにして、そこから楽しそうなプラグインをてきとうに突っ込んでいった感じ

set nocompatible
filetype off

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin ‘gmarik/Vundle.vim’

call vundle#end()

Vundleインストールの時のコピペ

 

Bundle ‘basyura/TweetVim’
Bundle ‘mattn/webapi-vim’
Bundle ‘basyura/twibill.vim’
Bundle ‘tyru/open-browser.vim’
Bundle ‘h1mesuke/unite-outline’
Bundle ‘basyura/bitly.vim’
Bundle ‘Shougo/unite.vim’

TweetVimに使うもの。TweetVimはさらっと呟きたい時に便利。迂闊にmikutterとか開くと作業が捗らない捗らない…

 

Bundle ‘scrooloose/nerdtree’

ツリー状のファイルビューできる感じ

 

Bundle ‘tomtom/tcomment_vim’

大抵の文法でコメントアウトできる。行選択してCtrl+-を2回押すだけ

 

Bundle ‘tomasr/molokai’
syntax on
colorscheme molokai
hi Comment ctermfg=gray

カラースキームを指定している。我が家の環境ではコメントアウトが異常に見難かったのでそれだけ色変更。

 

Bundle ‘nathanaelkane/vim-indent-guides’
let g:indent_guides_enable_on_vim_startup=1
let g:indent_guides_start_level=1
let g:indent_guides_auto_colors=0
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd ctermbg=darkgreen
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven ctermbg=darkblue
let g:indent_guides_color_change_percent=30
let g:indent_guides_guide_size=1

インデントに色を付ける。ネストの状態をサッと確認できて良い。次にするタブ幅の設定が必要らしい(tsとswが同じである事、expandtabが有効であること)

 

set ts=2 sw=2 sts=0
set expandtab

タブ幅の設定。

 

set number
set cursorline
hi clear CursorLine
hi CursorLine ctermbg=darkred

行番号を表示するのと、カーソルが今いる行をハイライトする。

 

Plugin ‘itchyny/lightline.vim’
set laststatus=2
let g:lightline = {‘colorscheme’:’wombat’,}
if !has(‘gui_running’)
set t_Co=256
endif

ステータス行の設定。lightline使って取り敢えずカッコヨサゲになればいいかなって感じ。あんまり真面目に取り組んでない(フォントにパッチ当てると色々表示できて面白いらしいんだけどめんどくてやってない)

 

Bundle ‘miyakogi/seiya.vim’
let g:seiya_auto_enable=1

molokaiで背景が真っ黒にされちゃうのでそれを上書きして背景が半透明に見えるように。molokaiを書き換えてもいいけれど、別のカラースキームにしても手間なく行きたいためこちらを使う。どうやらこのプラグインは随分簡単な仕組みらしくて、それを直接書いてもいいんだけど、2行には収まらないため使わせて頂く。ありがたやありがたや

 

filetype plugin indent on

これもVundleインストールの時のコピペ

 

ずっとviを使っていた(多くの場合viと入力すればvimが起動されると書いてある記事が大変多いけど、我が家の環境ではviとすればきちんとviが起動しました)けれど、楽しそうだし触ってみるか的な感じで、取り敢えず.vimrc書かないと始まらないかなーと

.bashrcにはきちんとalias vi=’vim’を追記しておいたので、むしろviを起動したい場合にはwhich viとかで探して直接実行せねばならぬ。誰得

 

しかし操作がマジに覚えられん。みんな、そんなに覚えてるもんなのかな、怖い

ImageMagickで画像を2値化

スキャナで楽譜を取り込んだのだけど、カラーだったので、全体的に灰色になってしまった。

2値化したればよろしいなと思ったので、ImageMagickのconvertコマンドでパラメータ調べて、mogrifyでゴリゴリっと回してやろうという方針にした。

 

2値化するにあたって、-thresholdオプションを使えば良いというのは知っていた(以前どこかの記事で見た)のだが、その値が訳わからんかったのだ。

-thresholdオプションに指定する値は、閾値となる輝度を指定する。確かその記事では80や120といったくらいの数値だったが、その周辺の値も含めて色々試しに調べたが、ぜーんぶまっしろしろの画像しか出力されない。

入力ファイル名にスペースが入ってるとダメなのかなとか、png形式のままじゃダメかな?とか色々やったけれど状況は改善されず。

半ばやけくそになって設定する輝度をゴリゴリ上げていったら、55000くらいのとても大きい数値で期待した動作が得られた。

 

例示として80とか120とかで紹介していた記事を書いた人、ちゃんと期待した動作が出来たのだろうか?

スキャナで拾った画像だとまた違うとか、ImageMagickのバージョンで状況が違うとかなのかなぁ。

 

ちなみに使ったスキャナはこちら。

2年ほど前にヨドバシアキバで買った時は1万円ギリギリしないくらいだったかな。ArchLinuxの上だったので、てきとうにsaneとか入れてsimple-scanでスキャンしました。

ちなみに色々なところに例示されているGUIフロントエンド、xsaneを使わなかったのは、ただ使いこなせなかっただけです(´・ω・`)