水底

ScalaとかC#とかk8sとか

MSフォント…駆逐してやる! このPCから…一文字残らず!

MSのデフォルトフォント…個人的に大っ嫌いです. 特にMSゴシック. 置き換えとして出てきたメイリオはやたら横長で汎用的を失い, YUゴシックは下手に細くて可視性が迷子. 見出し用フォントでもあるまいに…

というわけでWindowsから徹底的にこいつらを消す方法をまとめ. とりあえずの殴り書きなのでそのうち更新していくかも(?)

置き換え先のフォント

置き換え先のフォントとして個人的なおすすめフリーフォント 【フリーフォント】源暎ゴシック - 御琥祢屋

DTPでも即戦力になるくらいのポテンシャルはあると思う. 好き. 個人的に 源暎ゴシックP Regular をベースに設定しています.

システムフォント

Meiryo UIも大っきらい!! を利用してごっそり置き換えます.

インストール → 置き換え先フォントを指定するだけ.

Google Chrome のフォント

大体の箇所は上記の設定で終わるのですが, Chromeに関しては一手間必要. なお, 設定反映がかなり不安定なので, 突然設定が反映されたり, 再起動で反映されたりとまちまちの模様.

1. 設定

まず chrome://flags を開いて, DirectWrite を無効にする.

後は, 設定タブ → 詳細設定を表示 → フォントをカスタマイズ で置き換え先フォントを指定.

2. フォントの詳細設定

上記の フォントをカスタマイズ 画面の右下にある フォントの詳細設定 で更に設定します. 初回は拡張機能のインストールを求められるはずなので大人しく従う.

インストールできたら同様に置き換え先フォントを設定.

3. 更にフォントを置き換える

世の中にはわざわざCSSで "MS Pゴシック" などとふざけた設定をしているサイトがゴマンと有ります. その対策.

まず以下の拡張機能をインストール.

chrome.google.com

そして新たなStyleとして以下のように設定を追加.

(源暎ゴシックP Regularでの例)

@font-face {
font-family: "MS Pゴシック";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "MS ゴシック";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "メイリオ";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "Meiryo";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "Arial";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "arial";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "Helvetica";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "sans-serif";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "MS PGothic";
src: local("源暎ゴシックP");
}
@font-face {
font-family: "sans-serif";
src: local("源暎ゴシックP");
}

All site にチェックを入れてSave.

ここまで設定することで大抵のサイトから醜いフォントを駆逐できたはずです, というメモ書き.

既知の問題点

システムフォントを変えると Intellij IDEA がすごいことになる. どうすごいことになるか気になる人はやってみるといいと思います.

多数回計測した実験結果をいい感じに集計したかった

のでちょこっとスクリプト書いた. shell系慣れない…

指定したコマンドを指定した回数実行して, 指定した出力ファイルから指定した正規表現で特定の結果を抜き出して, 指定した数だけ最大最小値を外れ値として除いた残りの平均を計算する. それだけ(それだけ)

気が向いたら並列実行に対応させたり汎用性を上げたりしたい.

calculate avg without outliers(arg1: command, arg2 ...

今年やる

一年の計はなんとやらに乗り遅れ気味だが, とりあえず公開しておくことで自分をやらざるを得ない状況に追い込もうという魂胆.

  • 論文
    さっさと終わらせる
  • サーバ仮想化
    管理楽にしたいよね
  • メディアサーバ作成
    さっさと完成させて録画ファイルの視聴を賢くしたい. ある程度できたら公開する予定.
  • オレオレMarkdownエディタ(or atom拡張?)の作成
    メモ/論文/スライド を楽にしたい. これもそのうち公開したい.
  • セスペ
    DBに続けてNWもなぜか拾えてしまったので, 大してコスト掛からないしついでにこれも取っておこう的な
  • Win+Fedora 環境への乗り換え
    Macはハードに縛られて辛くなってきたので乗り換えたい. vaioはよ.
  • Scala初中級者
    サクサク読み書きできるようになる
  • お絵かき
    人様に見られても恥ずかしくない程度に描けるようになる
  • 積み本
    めっちゃ積まれてるので消化する. 主にFPやDataStructureがいっぱい.
  • 機械学習
    みーはーなので音声合成や画像識別系に手を出したい

TEX yoda を買ってしまった

f:id:x17e:20151227224134j:plain

タイトル通りです. 知ってる人は知っている, MassDropとかで売ってたりするアレです.

欲しいなぁと思っていた矢先, TEX社の FaceBook で, ThinkPad ブランドの TEX yoda が販売され始めたという話を聞いた際に, 「直接メールすれば TEX yoda すぐ買えるよ」という情報も頂いてしまったのでこれは買うしかないなと. 折角なので ThinkPad のやつにしようかと思ったのですが, どうも青軸しかなく, 中国国内からしか買えないらしく断念. メールして買うことに.

メールをするとすぐさま 「Paypal で 291USD 払ってくれ. HAHAHA(意訳)」(ビックリマークいっぱいでちょーラフなメール)と言われ, 言われるがままに支払ったものの数日音沙汰なし. まさか…やられたか…と思っていたら台湾から届きました(ここまで僅か4日)

MassDropとは違い, 完成品でした. ちなみに軸とケース色が選べます.

使ってみて今のところの感想『キーボードってこんなに重かったっけ』

初ISUCONはダメだったので来年の俺に向けたメモ書き的な(scala)

なんか皆さんエントリを書いていたので今更ながら釣られて書いてみます(集団心理の勝利)
※内容的には散々だったので参考になるようなことはありません. 来年リベンジする際に個人的に役立てたい(願望)

なんとなくISUCON気になるなぁと呟いていた所, @uadachiさんにお誘いいただき, @haya14busaさんと3人で Some(null) として出ることになりました. 完全にfunctional programing in scala 大阪読書会のメンバー. ちなみにSome(null)は大嫌いです(scala勢的なアレ)

準備

出場が決まってからあまり日程がなく, 割と直前が忙しかったこともあり, 準備という準備はできませんでした. 過去問を解くという発想もなく, 「ISUCONの勝ち方」のようなエントリを流し見をしたり, mysqlを調べた程度. この時点でかなり雲行きが怪しい.

予選本番

開始

開始が遅れる中, Node.jsの実装はありません を大変そうだなーと人事のように思いながら待ち構えていた所, Scalaの実装は不完全です にまず絶望する.

技術的に自分にできるようなことは少ないので, せめても力になれそうなDB周りをやることに.

なにをともあれでとりあえずベンチマークを走らせる → 何故か通ってスコアが出る. 直後にrubyの実装を動かしていたことが発覚しましたデスヨネー. 改めてscalaの実装で動かして比較した所, 表記やリンクがなにかおかしく, ベンチマークも通らない. バグ取りから始まりました. 並行して他の二人がローカルでの実行環境を整えることに.

scalaでweb…どうせplayだろ?」と構えていた所, まさかのskinny. とはいえ本質的にはあまり関係なかったです. 結論から言うと, templateの変数埋め込みがちょこっとおかしかっただけでした, めでたしめでたし.

中盤

DBのダンプを取ることになったらしく, ローカルでの実行はしばらく足止めを食らう. 後になんとか起動にこぎつけた. 後から考えると, 開発用インスタンス建てたほうが早かったですネ.

バグを取ったことでベンチマークは通るようになったがチョー遅い. ので, てきとうにスロークエリを調べる. 更にpt-query-digestとやらを使って統計を取る. / でどうみてもアレなクエリが大量に吐かれてる事がわかる. @uadachiさんがnginx辺りを, @haya14busaさんがisFriendやらのN+1をやっていたので, 自分はスロークエリから見つけたやたらでかいjoin箇所をなんとかしようとしてました. 他で使っている箇所がなかったので力技で非正規化をすることに.

終盤

スキーマ変更やインデックスの貼り直しで意外と時間がかかったもののなんとか実装. digestを見ていた限り, それなりのボトルネックになっていた部分なのでスコアアガルヤローとか思っていたらベンチマークの並列テスト(?)やらでコケる. いろいろ試したものの, エラーの詳細も分からずこの実装はボツに(チーン)

その他, 他の二人がuserをキャッシュさせたり, N+1を解決したりといろいろしていったもののスコア上がらず. そのまま予選終了してしまいました (俺バグ取りくらいしかやってなくね?気のせい?)

反省とか

ちゃんと準備してから望みましょう(当然)

  • 感覚をつかむためにも, 過去問やる時間が欲しかったですね.
  • ハングアウトで通話しながらやってたんですが, 実際に集まるべきでした. 多分効率が全然違う.
  • 普段の開発じゃないので, 保守性を一切捨てたほうが良かったです. 普段じゃ絶対タブーな手法でもどんどん使おう.

@uadachiさん, @haya14busaさんありがとうございました.

使ってたツール

  • github(でPR管理してました. もっと雑な方法で良かったか…)
  • mysql周り(pt-query-digest)
  • scalaの開発でいつも使ってるものたち(自分にしかわからないヤツ)

これだけ書いておけば, 来年の俺がきっと思い出して良いスコアを出してくれるはず…!!scalaで初予選抜けするぞっ

Scala + activator + Docker + IntellijIDEA (java8)での開発〜デプロイ

なんで

仮想環境上での開発はVagrantベースのものが主流らしい. なぜかDocker版のサンプルは見つからない…

でもDocker使いたい…使いたくない?

ポートやらパスやら名前やら細かいオプションやらは適宜調整してください

CIやdocker-composeを伴わない小規模向けの記事ですが, 調整次第で応用可能と思います

(おまけ程度に) under ver1.5

  • Dockerfileは1ディレクトリに1つ
  • Dockerfileより上位階層のファイルは(基本的に)扱えない

という2つの強い制約があるため結構面倒.

Develop

コンテナ実行後は localhost:5005 にIntellijIDEAからデバッグ接続する

boot2dockerなどを使っている場合はポートフォワーディングを忘れないようにする. ホストにポートマッピング(したく|でき)ない場合は, DockerfileにEXPOSE 5005指定を追加して, 代わりにコンテナのIPアドレスを使って接続するなどして対応.

おおまかな流れ

  • ベースとなるイメージを作成し, 開発ではそのまま利用する
  • デバッグポート5005を開ける
  • リソースはホストと共有
  • 実行はコンテナ上でデバッグポート5005を開けながら行う
  • 開発は上記のポートに接続しながらホスト側のIntellijIDEAから行う
$ cd project_name
$ docker build -t base_image_name tools/dev
$ docker run -d -p 5005:5005 -p 9000:9000 --name develop_container_name -v $(pwd):/project_name base_image_name

project_name/tools/dev/Dockerfile

FROM ubuntu

# install java8
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:webupd8team/java
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
RUN apt-get update && apt-get clean
RUN apt-get install -y oracle-java8-installer

# ONBUILD時, つまりデプロイ時は, `docker run -v` で
# ファイル群を追加するのではなく, COPYで追加する.
# developには直接は関係ない.
ONBULD COPY . /project_name 

WORKDIR /project_name
CMD ["./activator", "run", "-jvm-debug", "5005"]

Deploy

おおまかな流れ

  • developで作成したイメージをベースとする
  • リソースはビルド時にすべてコンテナ上にコピーする
  • デバッグ実行をアプリの起動で上書きする
$ cd project_name
$ docker build -t deploy_image_name .
$ docker run -d -p 9000:9000 --name deploy_container_name deploy_image_name

project_root/Dockerfile

FROM base_image_name

CMD ["./activator", "start"]

(こっちがメインだ) ver1.5 or later

ver1.5からビルド時にDockerfileを指定できる -f オプションが追加された. うれしい. これでver1.5未満にあった制約をすべて回避できる.

おおまかな流れ

  • ベースイメージとして環境構築をする
  • ベースイメージをベースとして, 開発/デプロイ それぞれのタイミングでリソースを 共有/コピー
  • デバッグ等はver1.5未満と同じ

baseの作成

$ cd project_name
$ docker build -t base_image_name -f tools/base/Dockerfile .

project_name/tools/base/Dockerfile

FROM ubuntu

# install java8
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:webupd8team/java
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
RUN apt-get update && apt-get clean
RUN apt-get install -y oracle-java8-installer

WORKDIR /project_name

Develop

$ cd project_name
$ docker build -t develop_image_name -f tools/dev/Dockerfile .
$ docker run -d -p 5005:5005 -p 9000:9000 --name develop_container_name -v $(pwd):/project_name develop_image_name

project_name/tools/dev/Dockerfile

FROM base_image_name

CMD ["./activator", "run", "-jvm-debug", "5005"]

Deploy

$ cd project_name
$ docker build -t deploy_image_name -f tools/dep/Dockerfile .
$ docker run -d -p 9000:9000 --name deploy_container_name deploy_image_name

project_name/tools/dep/Dockerfile

FROM base_image_name

COPY . /project_name
CMD ["./activator", "start"]

sample

ver1.5 or later 用

docker-activator-sample

まとめ

ver1.5未満だと若干トリッキーな構成が必要だったけど, -fの登場でごく自然にできるようになった

attachして様子見ながら開発していけばなんとかなりそう

chinachu on docker container

See Chinachu γ, Mirakurun and Encoder on Docker - 水底 instead

 

chinachuと依存先であるrecpt1, ARIB, pcscなどを出来る限りdockerコンテナ上に載せ, 安定した録画環境を目指す

amaya382/docker-chinachu

ホストの破壊的変更がPT3のドライバ程度になったのは大きい. 早く他のアプリもコンテナに載せて, Pipework辺りと合わせて鯖缶を楽にしたい…