動かざることバグの如し

猫ゆえに。。。

RubyでUTF-8をShiftJISに変換するならnkfを使うべき

WindowsとかいうゴミOSを考慮するせいで、もうすぐ東京オリンピック開催の2020年に近づいたというのにShiftJISで出力したいケースがある。

.encode()使えばいいんでしょ?

RubyはもともとUTF-8なのでUTF-8→ShiftJISの変換になりstr.encode(Encoding::Windows_31Jでいける。訳がなかった

irb(main):001:0> str = "〜鎌倉幕府〜"
=> "〜鎌倉幕府〜"
irb(main):003:0> str2 = str.encode(Encoding::Windows_31J, undef: :replace).encode('UTF-8')
=> "?鎌倉幕府?"

は????なんで文字化けしてるんだ

というのもUTF-8にあたる文字がShiftJIS(CP932)にないため。

そこで前もって該当する文字列たちを変換する処理をしていたのだが、(このあたりはString#encodeが変換できそうで変換できない文字 - ネットの海の片隅で参考)

def encode_to_jis(str = '')
  mappings = {
    "\u{00A2}" => "\u{FFE0}",
    "\u{00A3}" => "\u{FFE1}",
    "\u{00AC}" => "\u{FFE2}",
    "\u{2016}" => "\u{2225}",
    "\u{2212}" => "\u{FF0D}",
    "\u{301C}" => "\u{FF5E}"
  }
  mappings.each{|before, after| str.gsub!(before, after) }
  str.encode(Encoding::Windows_31J, undef: :replace)
end

が、時々例外が発生する。何故かはよくわからん(検証面倒

解決策

結局nkf使ったほうが速かったって話

require "nkf"
NKF.nkf("--ic=UTF-8 --oc=CP932", str)

icが入力の文字コード、ocが出力の文字コード。置き換えがないぶんこっちのほうが速かったりする。

置き換えできなかった文字は下駄記号に変換したい

下駄記号ってのはこれ --fb-subcharオプションをしたいすればおk

NKF.nkf("--ic=UTF-8 --oc=CP932 --fb-subchar=0x3013", str)

結論

ShiftJIS(CP932込)は○ね

広告を非表示にする

locateコマンドでディスク全体から一発検索

例えば「libjpeg.soを含むファイルをディスク全体から検索したい」ってときは今までfindコマンド使っていた

find / -name "*libjpeg.so*"
/usr/lib/x86_64-linux-gnu/libjpeg.so.8
/usr/lib/x86_64-linux-gnu/libjpeg.so
/usr/lib/x86_64-linux-gnu/libjpeg.so.8.0.2

が、当然/を軸にfindしてるので時間がかかる

最近locateコマンドと言う存在を知った。

locate libjpeg.so
/usr/lib/x86_64-linux-gnu/libjpeg.so
/usr/lib/x86_64-linux-gnu/libjpeg.so.8
/usr/lib/x86_64-linux-gnu/libjpeg.so.8.0.2

一発で検索できる。しかもコマンドも楽

出ないじゃん

なぜ早いかって言うとLinux側がもっているファイル名データベースの情報をもとに検索しているだけ。これはリアルタイムに更新されているわけではないので、直近にできたばかりのファイルはヒットしない。

そんなときは

updatedb

で更新される。

広告を非表示にする

H.264対応のffmpegをLinux環境でビルドする

FFmpegは言わずとしれた動画音声変換用アプリケーションだが、ビルドが結構煩雑である。

ビルド済みのバイナリダウンロードしてそれつかえばええやんって話だが、ライセンス的な関係上、H.264のコーデックを使いたい場合は自分でビルドしなければならない

ってことでビルドメモ

環境

まずはH.264に必要なライブラリのビルドから

yasmのビルド/インストール

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xvfz yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix=/usr/local
make
make install

nasmのビルド/インストール

wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2
tar xjvf nasm-2.13.03.tar.bz2
cd nasm-2.13.03
./autogen.sh
./configure --prefix=/usr/local
make
make install

いよいよx264へ

x264のビルド/インストール

git clone git://git.videolan.org/x264.git
cd x264/
./configure  --enable-shared --disable-opencl --prefix=/usr/local
make
make install

ここでライブラリの再読込

ldconfig

ffmpegのインストール

いよいよffmpegのビルド マシンのスペックにもよるけど結構時間かかるので注意

git clone --depth 1 git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --enable-gpl --enable-libx264 --enable-nonfree
  • enable-libx264 x264の有効化
  • enable-nonfree,enable-gpl GPLライセンスの承認 これがないとx264使えない

./configureしたときに以下のエラーが出たときはライブラリのロードあたりが間違っている。makeできてもおそらく実行できないだろう

WARNING: using libx264 without pkg-config
config.h is unchanged
libavutil/avconfig.h is unchanged

あとはいつもどおりうまくいくことを願いながらmake

make
make install

make成功したけど、実行時に以下のようなエラーが出るときはやはりライブラリの読み込みに失敗している

ffmpeg -i test.mp4 -b:v 1000k -b:a 128k -vcodec libx264 output.mp4
ffmpeg: error while loading shared libraries: libx264.so.155: cannot open shared object file: No such file or directory

/etc/ld.so.conf.d/user.conf

/usr/local/lib

余談

以下のサイトが神レベルでまとまっていたのでメモ いやすごい

nyanshiba.hatenablog.com

広告を非表示にする

Appleペンシル高くて買えないマンはAbidaタッチペンを買え

先日iPad(Proじゃない方)を買った。バンドリ用に()

iPad買ったのは初めてだったので画面の綺麗さとサクサクっぷりには感動しつつ、せっかくなので現モデルから対応したApple Pencilも試してみようと思った。

が、なんとお値段公式価格10800円(税別) 「ただの鉛筆」って言いはるぐらいならもう少し安くしろボケ

ってことでお流れになってたけど先日Amazonでいいジェネリック品を見つけた。その名もAbidaタッチペン極細

メリット

  • 安い
    • 公式の約1/3の価格である てかこのぐらいが適正でしょ
  • 書き味が良い
    • 公式のApple Pencilも触ったことあるけど謙遜ないレベル
  • 転がらない!
  • これが公式ペンより勝ってる点だと思う 鉛筆みたいに六角形になっていてストッパーになっている

書き味どんな感じ

なんか無駄に箱がリッチだった

f:id:thr3a:20180718220136j:plain

ペン先こんな感じ

f:id:thr3a:20180718220127j:plain

電池持ちとか故障率とかは使ったばかりだから分からんけどとりあえずペンほしいけど純正高いわボケって俺みたいな人にはおすすめですはい

広告を非表示にする

AWS EC2でUbuntu 18.04の公式AMIを使う

いつの間にかAMIが公開されていた。

AWS Marketplace: Ubuntu 18.04 LTS - Bionic

ただ、実際にこのAMIでインスタンスを作成するときは若干癖があって、

  • インスタンスの作成」をクリックしてAMIの選択画面へ
  • 左のタブの「AWS Marketplace」をクリック
  • 検索フォームにて「bionic」と入力 エンター
  • 一番上の「Ubuntu 18.04 LTS - Bionic」を「選択」
    • 大丈夫だと思うが販売者 Canonical Group Limitedになっているか確認

でおk

広告を非表示にする