来世ガチャ乱数調整日記

Lily, Bass & Programing

SyntasticにMoonScriptを追加

こんにちは、びしょ〜じょです。 さて本題


VimプラグインにSyntasticというものがあります。簡単に説明すると、ググってください。

で、今回は新たにMoonScriptシンタックスチェッカを導入しようという感じになって書いた。

どちらかというとMoonScriptのインタプリタがしょぼくてエラーメッセージが貧弱すぎるので、Luaに変換してからそれをluacheckでチェックし、メッセージを整形してSyntasticに投げるという形になりました。シェルスクリプトがあまりにも雑なのはご愛嬌。

ハマったところ

結局はluacheckのエラーメッセージを拝借しているので、Syntasticのluacheck.vimを参考にした。「まるっとコピペして:%s/lua/moon/gとかすればええやろw」みたいな気持ちでいたら、Syntax errorもWarning扱いになって困りまくった。さてこちらを参考にすると、Vimのerrorformatには%tというものがあって、略。ともなればもはや話は簡単で、適当に書いたシェルスクリプトに数文字加えて終わった。

💀

Gtkアプリケーションのキーバインド

こんにちは、びしょ〜じょです。さて、あなたはVimのキーマップをガンガン追加するタイプですか。~/.xmodmapをガンガン書くタイプですか。

(中略)

GTKアプリケーションのキーバインドを適当に変える方法をかく。Googleで調べてもEmacs風のキーバインドにするみたいなことしか出てこず、若干情報が古かったりディストロの差異で無効だったりしたので困った。対象の環境は最新のArchLinuxです。

とりあえず$HOME.theme/THEME_NAME/みたいなディレクトリを作る。もちろんTHEME_NAMEはお好きに。

2.0系

mkdir -p ~/.theme/THEME_NAME/gtk-2.0-keyでディレクトリを作り、そこにgtkrcを書く。

binding "gtk-THEME_NAME-text-entry" {
    bind "<alt>w" {"move-cursor" (words, -1, 0)}
    bind "<alt>e" {"move-cursor" (words, 1, 0)}
    bind "<shift><alt>w" {"move-cursor" (words, -1, 1)}
    bind "<shift><alt>e" {"move-cursor" (words, 1, 1)}
    bind "<alt>d" {"delete-from-cursor" (word-ends, 1)}
    bind "<alt>c" {"copy-clipboard" ()}
    bind "<alt>v" {"paste-clipboard" ()}
}

binding "gtk-THEME_NAME-text-view" {
    bind "<alt>c" {"copy-clipboard" ()}
    bind "<alt>v" {"paste-clipboard" ()}
}

binding "gtk-THEME_NAME-tree-view" {
    bind "<alt>c" {"copy-clipboard" ()}
    bind "<alt>v" {"paste-clipboard" ()}
}

binding "gtk-THEME_NAME-menu" {
    bind "<alt>e" {}
    bind "<alt>w" {}
    bind "<alt>c" {"copy-clipboard" ()}
    bind "<alt>v" {"paste-clipboard" ()}
}


class "GtkEntry" binding "gtk-THEME_NAME-text-entry"
class "GtkTextView" binding "gtk-THEME_NAME-text-entry"
class "GtkTextView" binding "gtk-THEME_NAME-text-view"
class "GtkTreeView" binding "gtk-THEME_NAME-tree-view"
class "GtkMenuShell" binding "gtk-THEME_NAME-menu"

みたいな感じになる。他にもinsert-at-cursorなどのコマンドがあるので調べてみてください。undo/redoが欲しかったけど見つからなかった。


追記 2015 02/10 12:05

GtkTextView

ここを参照するといいかもしれん。


gyk-mytheme-text-entryはテキストボックス内の挙動で、text-viewは他(?)か。よくわかっていない。

そして$HOME/.gtkrc-2.0の適当な場所にinclude "/PATH/TO/.theme/THEME_NAME/gtk-2.0-key/gtkrc"を追加する。$HOMEなどの変数は展開してくれないので絶対パスを書く。

これで、上記の例でいけばAlt+e/wで単語単位でカーソル移動ができる。ターミナルからアプリケーションを開くと無効な記述があれば教えてくれるのでデバッグ用につかおう。

3.0系

mkdir -p ~/.theme/THEME_NAME/gtk-3.0でディレクトリを作り、gtk-keys.cssを編集する。

@binding-set gtk-THEME_NAME-text-entry {
    bind "<alt>w" {"move-cursor" (words, -1, 0)};
    bind "<alt>e" {"move-cursor" (words, 1, 0)};
    bind "<shift><alt>w" {"move-cursor" (words, -1, 1)};
    bind "<shift><alt>e" {"move-cursor" (words, 1, 1)};
    bind "<alt>c" {"copy-clipboard" ()};
    bind "<alt>v" {"paste-clipboard" ()};
}

@binding-set gtk-THEME_NAME-text-view {
    bind "<alt>c" {"copy-clipboard" ()};
    bind "<alt>v" {"paste-clipboard" ()};
}

@binding-set gtk-THEME_NAME-tree-view {
    bind "<alt>c" {"copy-clipboard" ()};
    bind "<alt>v" {"paste-clipboard" ()};
}

@binding-set gtk-THEME_NAME-menu
{
}

GtkEntry {
    gtk-key-bindings: gtk-THEME_NAME-text-entry;
}

GtkTextView {
    gtk-key-bindings: gtk-THEME_NAME-text-entry, gtk-THEME_NAME-text-view;
}

GtkTreeView {
    gtk-key-bindings: gtk-THEME_NAME-tree-view;
}

GtkMenuShell {
    gtk-key-bindings: gtk-THEME_NAME-menu;
}

~/.config/gtk-3.0/settings.inigtk-key-theme-name = THEME_NAMEを追加する。これは2.0系とは違いパスは要らずTHEME_NAMEだけで良い。

ついでに

OpenboxとawesomeのデフォルトではGTK+3.0系のアプリケーションを開くとウィンドウの縁が透明になっていてなんか鬱陶しかったと思うんですがボクだけですか。以下を~/.config/gtk-3.0/gtk.cssに書く。

.window-frame, .window-frame:backdrop {
box-shadow: 0 0 0 black;
border-style: none;
margin: 0;
border-radius: 0;
}

.titlebar {
border-radius: 0;
}

がんがん魔改造しよう。

LuaRocksとの戦い

こんにちは、びしょ〜じょです。 今日はLuaRocksと戦ったことについてちょっと書きます。

LuaRocksとは

Luaのパッケージマネージャっぽいものです。詳しくはググってください。


さて、こんなものを作りました。今回はこれ自体に用はなく(他でもっとじっくり書きたいが今はとにかく疲れている)、これをLuaRocksで引っ張ってくるまでの奮闘記を書く。

これが参考になったりした。

先に結論

# at MODULE's root dir
luarocks write_rockspec MOD VER .
sed -ie "s/https/git" MOD-VER.rockspec
luarocks-admin make_manifest .

LuaRocksを使う(GitHubリポジトリ)

例として上のluakatsuを使う。バージョンを1.0-0(メジャーバージョン1.0、サブバージョン0という感じ)としよう。

rockspec

雛形

まずluakatsuモジュールのルートディレクトリに行き、以下のコマンドでrockspecの雛形を作る。gemspecみたいなものですかね。gemspecほとんど知らないけど。

luarocks write_rockspec luakatsu .

するとluakatsu-.-1.rockspecというファイルができる。なんだこれは。命名規則<MODULENAME>-<VERSION>.-<SUBVERSION>.rockspecかな。どこかに書いてあった。

とりあえずこの名前はまずい感じなのでluakatsu-1.0-0.rockspecとでもしておく。 luarocks write_rockspec MOD VER .としておくと良い。

整形

さて中を見ての通り実態はluaファイル。if文とかも使えたりするっぽい。しかしところどころ欠落している。

package = "luakatsu"
version = ".-1"
source = {
   url = "*** please add URL for source tarball, zip or repository here ***"
}
description = {
   summary = "*** please specify description summary ***",
   detailed = "*** please enter a detailed description ***",
   homepage = "*** please enter a project homepage ***",
   license = "*** please specify a license ***"
}
dependencies = {}
build = {
   type = "builtin",
   modules = {
      luakatsu = "luakatsu.lua",
      uakatsu = "uakatsu.lua",
      ['luakatsu.bin.char_setmeta'] = "luakatsu/bin/char_setmeta.lua",
      ['luakatsu.bin.which_school'] = "luakatsu/bin/which_school.lua",
      ['luakatsu.character.idols'] = "luakatsu/character/idols.lua",
      ['luakatsu.character.others'] = "luakatsu/character/others.lua",
      trash = "trash.sh",
   }
}

luarocks help write_rockspecを見てもらえばわかる通りオプションで雛形にもう少し肉付けができるが、自分で書いたほうが早い(気がする)。

package、version

packageはモジュール名のlowercaseが良いらしい。version is まずい。1.0-0にする。

source

sourceはtableになっており、urltagが入る。今回はGit(Hub)のリポジトリでモジュール管理ということなので、url = git://github.com/Nymphium/luakatsuとしておく。httpsではなくgitとしておくことがミソ。 luarocks install MOD --verboseとするとLuaRocks君の働き振りがうかがえ、urlos.execute()で実行されるコマンドの引数に渡しており、httpsとするとcurlgitとするとgit cloneとかで引っ張ったりしている。これが分からなくて7時間溶けた。どこにもそんなこと書いてねぇぞ…💢💢

description、dependencies

大体見たとおりな感じで、homepageにはhttp://aikatsu.netとか書いておけば問題ない(本当か?)。maintainerには自分の名前を書いたりね。

dependenciesは文字列のtableで、{"lua >=5.2", "luasocket >= 2.0.1"}とかそんな感じで必要なものを書いていく。

build

buildについて、LuaRocks君が雛形を作るときにだいたいは察してくれるが、よく見るとモジュール自体とは関係ないものも(dot files(.git, .gitignore, etc.)とREADME、あとLuaRocksで必要なものは無視されるのかも)突っ込んじゃったりしているので消す。上記の`trash = "trash.sh,"とか邪魔ですね。

type種類を指定できる。この種類というのはpure Luaとかmakeが必要とかそんなアレや。詳しくは公式ドキュメントBuild rulesを見てくれ。

今回はpure Luamakeとかいらないので"builtin"ですね。

さて、source.urlhttpsから始めるとcurlでHTTPサーバからディレクトリを頂いていくみたいな動きをして、build.modulestest = "--version"とし、luarocks --local MOD install --verboseでLuaRocks君の動きを見てみると何故かGCCのバージョンが見えたりする。 build.modulesにあるvalueはそれぞれファイル名であり、build.typeが"builtin"の時おそらくLuaRocks君は拡張子を見てos.execute()で何を実行するか考えるんだろう。だいぶ危ない気がする。

manifest

manifestというリポジトリのインデックスファイルを作る。rockspecを作ったディレクトリと同じ場所で以下のコマンドを実行する。

luarocks-admin make_manifest .

Luaのバージョンごとにmanifestindex.htmlができる。index.htmlにはrockspecのdescriptionの息吹がうかがえる。

git push、そして伝説へ…

だいぶ雑だがこれでとりあえずはOK。では使おう。

luarocks --local --from=https://github.com/Nymphium/luakatsu/raw/master install luakatsu

lua -luakatsu -e Aikatsu\(\) # 私のアツいアイドル活動、アイカツ! 始まります! フフッヒ

source.urlの仕様についてまったくわからない時だいぶ苦しんだ。途中まで何度もgit pushしてはluarocks --local install MODするというだいぶ無駄なことをしていた。途中からはRubyでHTTPサーバをワンライナーで作っているモジュールのルートディレクトリに建てることでだいぶ楽になった。そこはluasocket使えよみたいな話はあると思いますが、それはGoogle先生がサジェストしてくれなかったのでダメです。

追記(20015 2/4 08:52)

HTTPサーバワンライナーとかしなくても、

luarocks --from=/PATH/TO/MOD search MOD

でもできたんですね。お母さん知りませんでした。

終わり。

ArchLinuxでもBlu-rayをリッピング

こんにちは、びしょ〜じょです。今更ながら『アイカツ!』と『青い花』のBDを買った。さてArchでBDを観る方法は…うっ、ArchWikiでもあまり参考にならない…。

さて本題。


ArchLinuxでBlu-rayリッピングする

最新のArchは光学ディスクが/dev/srX(X = 0,1,…)となる(雑)。で、これを適当な場所にマウントして、HandBrakeとかを使う

mount -o loop,ro /dev/srX /mnt/tmp

# example
ghb /mnt/tmp

リッピングとかせず観るだけでも、/mnt/tmpmplayerVLCで開くことで観ることができる。VLCopen-disc → BD → /mnt/tmpという感じで開く。

MakeMKVとかもあるが、評価期間を過ぎると厳しくなる。ちなみにMakeMKVで作ったmkvファイルをmp4にするには

ffmpeg -i INPUT.mkv -vcodec libx264 -acodec aac -strict experimental -ab 128k -aprofile aac_low -ac 2 -ar 44100 OUTPUT.mp4

ロスレス変換になる。コーデックはH.264

以上です。『アイカツ!』BDBOX第1弾には鋭かった頃の美しき刃さんや、あのクリスマス回やデブ回などが入っていてお得。

アイカツの感想、12/26は藤堂ユリカ様の誕生日、Windowsで日報を書く

こんにちは、びしょ〜じょです。

これはcoins Advent Calender 2014の21日目の記事とも言えます。

さて、本当に書きたいのはアイカツの感想なので一番初めに言及したいところですが、coins Advent Calenderということなのでそれっぽいことを先に書きます。


Windowsで日報を書く

ボクのバイト先ではWindows上で様々な開発が進んでいる。この時点でかなり個人的に厳しさを感じるので、バイトが始まってから3ヶ月ほどだが縁の切れ目を探している。

それはさておき、バイト先では行くたびに日報を書いている。テンプレートがMarkdownだったのでそれに従ってMarkdownで書いているが、それをHTMLにするとかそういうことはしておらず、Markdownのまま印刷してノートに貼って提出という感じ。

(中略)

Vim on WindowsでMarkdownを書いて、Previmでプレビューしましょう。

まずVimを入れます。KaoriYaあたりから適当にバイナリを引っ張ればいいんじゃないですかね。

KaoriYa

適当にパスを通して、さてPrevimを入れよう。neobundleなどで管理するといいかもしれん。

Previm

さて、:PrevimOpenでプレビューしてくれるコマンドを選択したいところですが、Windowsはぶっちゃけカスでlet g:previm_open_cmd='firefox'とかやってもダメで、let g:previm_open_cmd='C:\Program Files\mozilla\firefox.exe'とかでもダメで、あぁWindows死ねやみたいな気持ちになってきて付き合いきれないのでopen-browserを入れます。

open-browser

これでPrevimでのプレビューをよしなにしてくれます。おそらく開かれるのはデフォルトのWebブラウザでしょう。

結論: Windows(上での作業)はクソ、WindowsVimを使わないほうがいい


12/26は藤堂ユリカ様の誕生日

これまた重要です。お祝いしましょう。


アイカツの感想

12/13(土)より公開された『劇場版アイカツ!』についての感想です。

本当に最高でした。話としては1、2期の集大成という感じ。わがままを言うと『輝きのエチュード』はフルで聴きたかったなぁ…。

あかりちゃんがDreamyCrownのドレスを持っていて、紅林さんが出ないあたりから推測するに時期としては107話あたりでしょうか。

追記:アイカツ112話をまだ観ていませんでした。適当なことを言って申し訳ございません。

いちごちゃんのコンセプトどおり、「観てくれたみんなが素敵な明日を迎えられるような」素晴らしい出来でした。はい。

作画もテレビアニメ版以上に丁寧だし、モアザントゥルー(回想)やスプラッシュ、さらには三ノ輪ヒカリさんが出てきたあたりに制作陣の気合と愛情を感じました。

エンディングのドット絵も可愛いかったし背景のステージも完成度が高かった。

感想を書くのが下手なのでこれ以上はやめておきます。映画を観て感想を語り合おう。おわり。


口癖カウンター

「血を吸うわよ」2回

「穏やかじゃない」1回

「オケオケオッケー」2回

non-root userでVim+Lua

こんにちは、びしょ〜じょです。

これはcoins Advent Calendar 2014 - Adventar8日目の記事とも言えます。

大学、計算機室。こちとら学費を払っているいわば顧客やぞ、なめた環境しやがって。

T大情報学群情報科学類の計算機室に入っているVimはちょいと古い。OS Xでビルドすると途中でコケて面倒だしOS Xは個人的に好きじゃないので放置。


さて本題に入ります。タイトルの通りnon-root userでVimLuaをビルドします。

え、大学のVimneocompleteとか使いたいと思いませんか。はい。

1. readline

pentasでLuaをビルドするとreadlineが無いなどで怒られます。ということでまずreadlineをビルドします。

mkdir ~/local
mkdir ~/tmp
cd ~/tmp

wget https://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz
tar xvf readline-6.3.tar.gz
cd readline-6.3
./configure --prefix=${HOME}/local
make -j32
make -j32 install

pentasはXeon E5-2650を積んでいる!!8 core 16 threadsすげえ!!makeはええ〜〜っぴゅぴゅぴゅ〜〜〜

2. Lua

ということでreadlineがビルドできた。続いてLua行きます。

wget http://www.lua.org/ftp/lua-5.2.3.tar.gz
tar xvf lua-5.2.3.tar.gz
cd lua-5.2.3

そういえばここで罠が発生します。このままLuaをビルドするとVimLuaインタプリタが入りません。悲しい。

Makefileに細工をする必要があります。

ではこちらをご覧ください。

ここでまた罠が発生します。上記の通りだと./configureでコケます。

liblua.soの部分をliblua.so.5.2(wgetで引っ張ったバージョンと同じにする)に書き換えます。

これでOK。

make linux -j32 MYCFLAGS="-I${HOME}/local/include" MYLDFLAGS="-L${HOME}/local/lib -L/usr/lib64" MYLIBS="-lncursesw" cd src && make -j32 linux
make -j32 install INSTALL_TOP=${HOME}/local/lua

OK。~/local/luaができたと思います。

3. Vim

さて本題のVim

hg clone https://vim.googlecode.com/hg/ vim
cd vim/

./configure  --with-features=huge \
        --enable-rubyinterp=dynamic \
        --with-lua-prefix=${HOME}/local/lua \
        --enable-luainterp=dynamic \
        --enable-fail-if-missing \
        --enable-multibyte \
        --libdir=/usr/lib64 \
        --prefix=${HOME}/local \


make -j32
make -j32 install

$HOME/local/binVimが爆誕しました。パスを通してください。ついでにLuaもあるので是非使ってください。

おわり

12/3は冴草きいちゃんの誕生日、ゆるゆり劇場版を観た、鎌倉に行った、XperiaZ2を無くした、Lua

追記 2015 03/18

"l\\u\\a\\5.3 utf8"で優先言語を日本語にしてGoogle検索するとこの記事が上位に来るなんて書いてる時に思ったわけ無いだろ!

今見ても内容がお粗末すぎるので勘弁してください。追記終わり


こんにちは、びしょ〜じょです。

言いたいことの9割はタイトルに書きました。


12/3は冴草きいちゃんの誕生日

最重要事項です。みんなで祝おう。

XperiaZ2を無くした

バイト先に行く途中のバスで無くした。送迎バスなので玄関のすぐ手前まで行き、ボクはそこで下車する直前まで触っていたのだが…。

もう1周間近く経ったので多分見つからない。

ゆるゆり劇場版を観た

@__mukiさんと公開初日に観に行った。感動した。作画はアニメ版と同じく安定しており、購入したパンフレットに書いてあったとおり画風は原作に寄せた感じだった。
なんといっても背景が(原作、アニメと比べ)繊細に描かれている!!
内容は割といつもの通りの日常だった。ゆるゆり12巻初回限定版についてくる小冊子の内容をもう一度読もう。
ネタバレは大罪なのでこの辺で。ただ一つ最高に可愛かったことは言っておきたい。

鎌倉に行った

なんとなく鎌倉の呼び声が聞こえた。T大の推薦入試による5連休最後の日―ゆるゆり劇場版を観た次の日にあたる―、祖母と行った。
津田沼からJR横須賀総武線快速で1.5h。近いような遠いような。
ちなみにT市から津田沼駅までも同じくらい。
1300くらいに到着した。

鎌倉といえば『青い花』を筆頭に、しばしば物語の舞台として扱われる。
少しくらいは聖地巡礼したいという気分もあったが、90%ほどはなんとなくな感情が覆っていたので鎌倉を舞台とした作品の予習なんていう時間は無かった。

大晦日でも何でも無いのに大勢の人が居た。
鎌倉って観光地だったのか…ところでJR鎌倉駅を降りたらデカい神社があるんですよ。
鶴岡八幡宮とかいう名前で有名なんですって。
そんなことすら全く知らないで行った。
神社を回ったら結婚式らしいものが行われていた。めでたい。 黒漆の白旗神社が格好良かった(小並感)。

それから江ノ電に乗った。ローカル線だし静かなんだろうと呑気なことを考えていたらとんでもない乗客量に仰天した。
ただでさえ4車両で小ぶりなんだぞ、もっといたわり給えよ。
窓から手を出せばひとんちの壁にぶつかってしまう区間がだいぶある程に地域密着(物理)型だった。
ボクはど田舎育ちで、実家から一番近い駅は17kmくらい離れていて全く使えなかったし、電車に乗る機会は帝都に出た時くらいなので、単線はだいぶ新鮮に映った。

なんとなく来たとは言ったが、なんとなくの中に海に行きたいという思惑が埋まっていたので、初めて車窓から海が見えたところで駅から降りた。七里ヶ浜駅。
とはいえ行くあてはなかったので海沿いの道を歩いた。砂浜もちょっと歩いた。

気づけばひと駅分歩いていた。浜辺で波に濡らされた靴を引きずる祖母と共に、鎌倉高校前駅から藤沢駅までまたオノデンに乗った。
藤沢駅についたのは1530。神社の参道から昼飯は食べようと思っていたが、鎌倉では何が名産で、どれを食べれば徳が積めるかなど考えていたら結局今の今まで何も食べないでいた。
祖母が虫歯を患っているらしく、固いものは食べられないようで。彼女は特にグラタンを所望していたので、駅ビルのイタリアン飯屋で遅い昼食をとった。ハイカラ娘め。

WORDのOBの方がご飯をおごるという会がその日の1830からだったが、ボクがチバラギスタン南部を発ったのは1830で、もうアホかと。
とりあえず行ったらタダ飯会はほとんど終了していた。
とりあえず小籠包と水をもらった。

Lua

最後までどうでもいいルポを読んだ人は多分ここを読まないし、ルポを読み終えなかった人はここまで読まないだろうから、一番どうでもいいことは最後に書こう。

最近Luaという言語を始めました。Luaの詳細はウィキピーディア先生などに聞いてください。
簡単に説明すると、高速な動的型付けのスクリプト言語だと思います。ウィキピーディア先生の概要のあたりを見れば多分もうすこしまともなことが書いてあります。

  • 唯一のデータ構造はtable{}

    いわゆる連想配列です。

t = {1, 2, 3, "a", "b", (function sum(a, b) return a + b end)}    
print(t.sum(1, 2)) --> 3    

なんでも入れられる。要素に名前も付けられて、上記では関数にsumという名前をつけてt.sum()という感じで関数を呼んでいる。
これはt["sum"]の糖衣構文で、後述するようにオブジェクト指向型言語テイストな書き方に貢献している。

ついでに--で以降右の文字はコメントになる。他にもコメントの方法はあるがカツアイ。

さらに言うと標準ライブラリは_Gというtableに入ってる。

  • マルチパラダイム

    関数がファーストクラスだったりクラスっぽいものを作って継承っぽいことをしたりできる。

(function (x) print(x) end) (3) --> 3

無名関数とかできる。かっこいい(雑)。

function addx (x)
    return function (y) return x + y end
end

functionも返せる。カリー化とかできるぞい。

t = {}
mt = {x = 1, y = 2}
setmetatable(t, {__index = mt})
print(t.x) --> 1

先ほどのtableにメタテーブルというものをくっつけることでtable同士で二項演算をしたり、別のtableから要素を持ってくるなどができる。

  • 速い

    Luaインタプリタ型言語だが、だいぶ速い。その理由はボクではなくGoogle先生などの有識者に聞いていただきたい。

  • 多機能

    コルーチンとかある(雑)。
    a, b = b, aという代入が許されているのでtmp()とか書かなくていい(雑)。

  • 残念な点

    • amazon内で"Lua"で調べるとタロット系の書物がいっぱい出てくる。スピリチュアルや。

      • 最近はLuaの本が増えているようだ。よかった。
    • 文字に弱い

      • Rubyを書いたあとにLuaを書くと文字のあたりでつまづく。ボクは日本人で日本語をよく使うので、マルチバイト文字をちゃんと扱ってほしいという願いがふつふつとこみ上げる。
string.len("a") --> 1
string.len("auieo") --> 5
string.len("あ") --> 3
string.len("あいうえお") --> 15

string.len(str)は察しの通りstring型strの文字数を返す関数だが…。Luaがブラジル発祥なのが悪いんや…。

  • ただしこれはLua5.2までの話で、Lua5.3ではutf8という型が生み出され、utf8.len("あいうえお")は大和の民に5を返してくれる。

  • とはいえstring型がUTF-8に対応したというわけではなく、悲しさはにわかに残る。

  • Rubystr.to_iにあたるtonumber(str)も、strに二項演算を書いてもうまく動いてくれなくて厳しい。

tonumber("51") --> 51
tonumber("51-2") --> nil
tonumber("51*1") --> nil

え、tonumber()ってそんな用途に使わないんですか。っていうくらいtonumber()の中身で計算をしようとしている人が居ない。ごめんなさい世間的にはボクが悪いようです。

追記(12/04 16:09)

function tonumber_ext
    local f = loadstring("return " .. str)
    return f()
end

でいけますね。作れっていうことでした。追記おわり。

  • regexpとpattern

    • Luaはpatternという正規表現風味なものをサポートしている。が…。

      バックスラッシュの代わりにパーセントを使っていて、繰り返し{}と後方参照がない。

      ギャハハーPOSIXBasic Regular Expressionくらい普通っしょ〜w

  • 1オリジン

    なぜなのか。

  • Luaユーザが少ない

    ツイッターLuaの悪口を言っても、Luaの疑問点を言っても、あまり反応がない。まぁ、多少はね。

Lua 蛇足

Luaは完全に名前で選んだので、何に使われているかしっかり調べるまで全く知らなかった。当初はC/C++の組込みを目的に作られ、最近ではゲームエンジンで活躍している。
アイマス2も一部Luaが加勢しているらしい。ほかにはNginxとかLuaLaTeXとかヤマハルータとかヴォカロとか。
現在ボクがデスクトップpcのArchLinuxで使っているタイル型WM "awesome" もLuaで記述されている。 二度目ですが詳細はウィキピーディアを見ろください。

めちゃくちゃどうでもいいんだけどはてブのMD記法ゴミ

百合について

こんにちは、びしょ〜じょです。だんだん秋らしくなってきた。読書の秋。百合の秋。

今年はなんとなく自分を否定してみた。愛飲しているコカコーラは実はまずくて、惰性で飲んでいるとか、本当は百合は好きじゃないとか。
だが、なんとなく自分のTwilogを見たら、自分は最低でも週5日は"百合"が含まれるツイートを必ずしていた。さらに、1周間の"百合"が含まれるツイートを合計すると最低でも20個ほどになった。やっぱ好きなんすね〜。


百合について


そもそも百合との出会いはと言われると記憶が曖昧だが、『ゆるゆり』1期は観たし、2012年の正月にお年玉で『ささめきこと』1〜8巻を購入して9巻を爆速で予約注文したことは覚えている。『ゆるゆり』かもね。 しかしプリキュアも無印から全部リアルタイムで観ていたしなぁ。
まぁそこは置いといて。百合も言ってしまえば恋愛モノの一ジャンルなわけだ。では、他の恋愛モノとの違いは何なのか。
ボクが思うに、両者ともに女の子であることですね。いや、まぁそうなんですが。以下をご覧ください。

男性が女性を養う、守るという形から、女性同士で支えあっていく、対等な関係であることが自分の中では矛盾なく入ってくる。
先に言っておくが、女尊男卑とかそういう話をするわけではない。
物語の初期ではフニャチンな男がこれといった成長もなく、最終話で俺が守ってやるみたいなケースはいくつか散見されうんざりする。
百合においては(少なくともボクが見てきた百合作品では)いっしょにがんばろうエイエイオーといった相互の補完関係になり、納得の行く物語になる。

もうひとつは、男性が居ない、あるいは脇役になるので、作品の中の登場人物で物語が完結する。
これは何かというと、ノンケモノで言うところのヒロインに対する恋人♂、つまり読者♂の二次元写像に当たるものがおらず、読者に媚びる必要が減るのである。
これにより不可解な温泉回やチラリ、ラプラスの魔も予測不能なラッキースケベなどによるテンポの悪さが解消される。

そして、友達のような恋人のような甘酸っぱい、なんともいえない間柄である。
街中を二人で手をつなぎ歩いても、一緒にお泊りしても、背中流しっこしても、女の子同士なら付き合っていなくてもそれほど不自然ではない。ノンケカップルでこれをやられたらもう非難轟々ですね。 女の子同士だから付き合う前にこんなイベントを(読者に不自然がられず)することができる。しかも付き合ってもこのイベントたちは何度でも起き得る。この感じはノンケモノでは再現不可能だ。


男性が出なければ百合というお前は一つ大きな勘違いをしている。お前が百合と信じて見ている作品を見ているお前の股間を見てみろ。それから作品をよ〜〜〜く見てみろ。作中の女性と目が何度か合うだろう。作中の女性の谷間や尻がお前の目に映るだろう。
そうだよ、その話は彼女たちで完結していない。視聴者、読者であるお前を含めて物語を進めている。お前に見られているていで話が進んでいる。
上に書いたものは一部間違いであり、話の受け手のクローンが物語に直接関わらなくとも、登場人物は暗に受け手に対する話し手という役割を担っている。
話し手が受け手を意識しすぎると、その物語は受け手であるお前を登場人物の一人として舞台にマッピングしている。透明人間か、あるいは汚いおっさんか。 透明人間の男が物語に登場してしまうと、その男を喜ばせるための物語になる。それは百合と呼べるかー否。
その点で、(百合作品ではないが近い存在として挙げると)『ゆゆ式』は完全に彼女らで話が完結している。


なお、これらは全てボク個人の考えであり、云々。

9/15と(終)

夏休み中は毎日日記を書いている人間がいてすごいなぁと思ったので便乗した。


1100

起床。親に頼んでおいた米が届いた。起床、荷物を受け取り、アイカツを観、風呂に入っても1300だったので驚いた。

1500

登校。

1700

イーアスに行く。ギタークロスと編集部の紙コップ500個を購入。

1900

飯。お好み焼き。道頓堀花畑店。食べ放題で食べまくって食べ過ぎた。途中店内で幼女先輩がコップを割ってさらにその上に立ってしまったので肝が冷えた。肝を冷やしながらお好み焼きを頂いた。うまい。


0400(論理的9/16)

寝る前にtmuxのステータスラインが気になった。メモリ使用率、CPU使用率とそれぞれ一番食っているプロセス名とその割合を表示しているが、psコマンドを加工していてtopコマンドを見て比較するとどうにも精度が悪い。
じゃあtopコマンドを用いて表示するかということになった。最初はtop -n1awkで受け取るという感じだったがなんか微妙だ。適当にファイルに出力してvimで見てみるとエスケープシーケンスやらなんやらが入っていてこらアカンわとなった。
manを見たりググったりすると「topコマンドにはbオプションというものがあってだな…」ということだった。

top -bn1 | awk 'NR==8{printf "#[fg=yellow]Max:%s(%2.1f%)", $12, $9}'

こんな感じで一番CPUを使っているプロセス名とその割合が出た。

topをメモリ使用率でソートして出すにはtop -o %MEMがいいという話を@polamjagくんから頂いたので上記のものを流用してすぐにできた。
概ね満足したので眠りについた。


自分が日記を書くのはモチベーションがある程度ないと難しいということが今分かった。毎日日記を書く人はすごい。
昨日の話を今書いているあたりで察して欲しい。

Centifolia

こんにちは、びしょ〜じょです。
さて、なんとなく最近入手したものを羅列してみる。

  • 椅子と除湿機 ― 6/9
    • 良い。夏は除湿機。
  • ディスプレイ( http://amzn.to/1vDXAJJ ) ― 6/12
    • ディスプレイソムリエではないのでとりあえずでかければ良い。
    • ディスプレイがデカいと横長〜〜〜なJavaも行端で折り返しみたいなことになりにくい。
    • アイカツを大画面で見る。感動する。生を実感する。それだけでいい。
    • FLOWERSをやる。百合を見る。明日も生きようと思える。
  • 百合漫画多々
    • 百合は最高。
  • あかすり(手袋タイプ) ― 7/26
    • ごっつい手袋でゴリゴリ垢が取れる映像に影響された。ボディソープが要らない。
  • Xperia Z2 SO-03F(docomoの回線付) ― 8/9
    • 落下落下また落下による打撃を受け、画面が破損しタッチセンサが死に始めたiPhone5(16GB、黒)に張り付いていたSoftBank回線を生贄に生成した。iPhone(というか林檎社)はなんとなく肌に合わなかったので去年の暮れあたりから変えたいと思っていた。個人的な感想でiPhone5君(docomoSoftBank)と比較すると、
      • 林檎社のようなオレオレ感が無い。素晴らしい。
      • インプットメソッドを変更できる。素晴らしい。
      • デカいので文字を打ちやすい。
      • LTEの範囲が広い。
      • カメラが高解像度
      • ...
    • テザリングも充分な働きをしてくれたが、iPhoneで使ったテザリングアプリは純正ではなかったので比較するのはかわいそうだ。とはいえデフォでテザリングくらいさせてくれよという気もあるのでやはりZ2に軍配が上がる。Z2(というかソフト)の悪い点はデフォルトアプリ(メール、音楽プレイヤー)が微妙、イヤホンジャックの位置、防水のためなのはわかるがmicroUSBのカバー。カメラボタンも個人的に使いどころがわからない。
    • とはいえ使い始めてから1周間も経っていないので数日後には意見が変わっているかもね。しかしハードの性能の優位性はZ2であることに変わりはないだろう。まぁLTE+テザリングが充分な働きをしているのでもうお腹いっぱい感もある。
  • 光学ドライブの位置に挿せるハードディスクのベイアダプタ(?) ― 8/12
    • つまりこんな感じのもの( http://amzn.to/1q70RJc )。ツクモで買った。
    • 自由課題でやっている、独自のLinuxディストロを作るというものの役に立てたい。合計してSSD256GB+HDD500GBになった。
    • ついでにUSBメモリとmicroSD(Z2用)も買った。
  • スイッチ付き電源タップ(1穴) ― 8/12
    • 以前買ったUSBライトのために引っ張ってきたが、よく考えたら電気スタンドで良かったのではという気持ちになり使う気がなくなった。

さて…。