読者です 読者をやめる 読者になる 読者になる

Wakotech Blog

技術的にポエムっぽい内容とか他の人のためにならなそうなやつを書きます。役に立てたいのはQiitaに書いています。

isucon6予選に出場した感想

isucon6 予選に参加した。1日目に、LINE社にお邪魔しました。

準備

isucon は初参加だったが、昨年にisucon4 予選の過去問をやっていたので、引き続き勉強っぽい感じで行っていた。

スコア出した記事を事前に読んでいたので、なんとなくやればいいことは以下の感じで想像してた。

  • MySQL(innodb)の設定をパワーを使うように書く
  • 静的ページをnginx で配信する
  • アプリケーションとUNIX domain socket で繋ぐ
  • テンプレートエンジンをやめる
  • 明らかに悪手っぽい処理をやめる(言語ごとの慣習に倣うとか)

参考にさせて頂いた(理解できた/記憶に残った)情報は主に以下。

パフォーマンス測定が大事だというのは分かっていたし、先輩からpprof 使えるようにしておいてと言われていたのだけど、パフォーマンスを見てどうこう、というのができなかった。

業務でパフォーマンスが求められるシーンがあったので、その時からDBとか計算とかは少し意識するようにはなったけど、ボトルネックを探すというところまではできなかった。

当日

当日の試験問題は近いうちに出るだろうので割愛する。

アプリケーションが3つ立っていた。

UI と基本機能を提供するサーバ、json を返すAPI サーバ、アプリケーション内部からのみアクセスされるAPI サーバ、と、マイクロサービス?っぽい感じだった。

isucon 慣れしていなかったので、構築がどうとか、リポジトリがどうとか、my.cnf 書き換えるスクリプトとかは、チームの先輩にやって頂いていた。(ふがいない……)

自分は以下の内容に着手したが、手間取ってしまったり、うまくいかずやめてしまったりした。

  • UNIX domain socket に書き換える。

nginxとアプリケーションをUNIX domain socket で繋ぐのだが、アプリケーションが別のアプリケーションを呼ぶので、その部分で戸惑ってしまった。

完全に準備不足なのだが、sock の所有者を誰にするかで悩んでしまった。結局nginx をアプリケーション起動ユーザで動くようにしたが、良くなさそう。

struct のタグを取り出すのはreflectを使っているので遅い、と聞いていたので、これを外そうとした。

DB から引いてjson にして返す部分はハードコーディングでできたのだが、全件取得して別のマイクロサービスに渡す辺りで設計が分からなくなってしまった。

時間もあまりなかったので、他にできることをやるために断念。

できることがなくなってしまったので、まだされていなかったことをした。

  • Golang アプリケーションからMySQLUNIX domain socket で接続する。

やることが分からなくなったので先輩に指示を仰いだ。業務じゃないんだから……という感じ。

アプリケーションからMySQL への接続をUNIX domain socket に変えてみたが、接続はできるようなのに、Query の処理(database/sql/sql.go のdb.mu.lock() )でnil 参照になってしまった。

パーミッション等かと思ってみたが動かず、時間がないのでできないままになってしまった。

この挙動は謎なので、後日また確かめる。(今日は疲れてよく寝ていたし、掃除をしていたら終わってしまった。)

感想

自分でなくてもできるような変更しかできなかった。非常に悔しい。

準備不足というのもあるし、普段意識していない内容というのもあると思う。

Golang でアプリケーションを作る知識というより、サービス全体の設計の知識が足りないと感じた。

特にパフォーマンスを見てやるべきことを考えられるよう、復習したい。

自作PCのパーツを変更しながらにWindows10をクリーンインストールする

Windows Windows10 PC

Windows10をアップグレード無しに直接クリーンインストール可能な話を見るが、ほとんどがメーカ製のPCの話が殆どである。

Windows10のライセンスが自作PCとあわないという話を見ましたが、問題なかったので手順を記述する。

私の環境では成功したという例です。自己責任にてお願いします。

手順

  • パーツを新しいものに交換する。(GPUはドライバが必要なので後から取り付ける。)
  • 起動ディスクにWindows7をインストールし、ライセンス認証を行う。(自分はクリーンインストールした。)
  • この時点でライセンス認証ができない場合、MSに問い合わせる。
  • https://www.microsoft.com/ja-jp/software-download/windows10からメディア作成ツールをダウンロードし、インストールメディアを作成する。
  • PCをシャットダウンし、インストールメディアからブートしてインストールを開始する。問題なければ、インストール先のディスクをフォーマットする。
  • インストール後にWindows7のライセンスキーでオンライン認証を行う。
  • システム情報(Windows + Pause)からライセンスが認証されていることを確認する。
  • GPUのドライバをダウンロードしておき、GPUを取り付けて再度起動し、インストールする。(GeForcehttp://www.nvidia.co.jp/download/driverResults.aspx/87933/jpからDL可能。)
  • すべてのパーツを付けた状態でライセンスが認証されていることを確認する。

補足

  • パーツ構成の軸はマザーボードのようである。
  • パーツの構成とライセンスを関連付けて記録するとのことで、一旦新しい構成でWin7を認証した。

参考

YAPC::Asia Hachiojiに行った&LTした

※LTは社名を出してしまいましたが、こちらは個人の感想としてポエムを書きます。


YAP(achimon)C::Asia Hachioji 2016 midに行ってきました。品川に。2日目だけですが。

どう略すのが正しいのかわからないのでリンクを貼ります。

yapcasia8oji-2016mid.hachiojipm.org

エンジニア経験も浅いので参加した勉強会も多くはないですが、YAPCははじめて。特にperlも書かないので。


以下感想。

設計的なトーク(MVWとか)では深い話が聞けて非常に良かった。設計力は全く高くないのだが、心当たりのある部分や、なるほどとなる部分が多かった。

取り組み方、意識的な話も、あるあると思いつつ楽しく聞けたのでよかった。

全体的に1ジャンルでなかったので幅広く話がきけたが、自分が初心者すぎてついていけなくなる部分もあったので精進。

LT枠では、「ES6の現場でjs初心者が どうにかキャッチアップできた話」というタイトルで話させて頂いた。

内容的にも高度でもなく、エモ寄りになってしまった。見返してみるとどうにも微妙な資料で、これもまた精進。

テンパって自己紹介もしっかりできなかった気がする。人が多くて緊張した。

終えてみて、まずは自分のこと名で人に話せるほどの技術力をつけるために修行するのが第一だな、と感じた。

とはいえ、非常に良い経験ができたと思う。LT枠をもらうことの重み?も少し感じることができた。次の機会では良い発表をする。

登壇資料は以下。

speakerdeck.com


トークで学びを得られ、LTをしてみることもでき、非常に楽しい1日だった。

主催のuzullaさんをはじめスタッフの皆様方には感謝の限りです。

来年も楽しみにしています。ありがとうございました。

ErgoDox EZのキーマップを変更して1週間程度使った

到着まで

購入概要については前回の記事を参照。

yutaszk23.hatenadiary.jp

106円/ドルのタイミングで購入したのと、カード会社の上乗せ分(2円程?)が入り、35,000円程度での決済だった。

到着までだいたい2週間。関税の支払いを受け取り時にするので、対面受け取りが必要。(1300円だった)

台湾から発送で、海外購入の業者から来ますが、土日の再発送だったのでクロネコヤマトに引き渡してくれた。便利。

リマップ

jackhumbert/qmk_firmwareからcloneなりforkなりする。

元のキーマップはkeyboard/ergodox_ez/keymaps/defaultに存在するので、これを元に自分用のディレクトリを切る。

keymap.cに配置情報が書かれているので、これを編集する。当然ながらコメントを実装コードの両方の編集が必要。

引数をいい感じに改行してわかりやすくなっているので、これをなるべく崩さないようにするのが良い。

特殊な挙動を当てるキーコードについては、主に以下を参考にした。

qiita.com

リマップしてからしばらく使っていると、主に親指まわりが納得いかず何度も修正することになる。

1週間経った現在でも安定していないので、結構長い戦いになりそう。

なお、半角/全角切り替えは、OS側でのリマップが必要だった。

モディファイアキー/任意のキーでのMod/Tapを設定し、任意のキーをOS側でIME制御に割り当てた。

残念ながら、この任意のキーは殺すことになる。自分はF15/16に死んでもらった。

OS XならばKarabinerのprivate.xmlでKeyToKeyを書く。WindowsIME設定から設定できる。

(この時代にXMLを真面目に書くの、つらい気持ちがある。)

現在の自分の配置は以下の通り。

github.com

感想

  • 元のキーボード(HHKB)を使った時に肩がきついことを感じるようになった。
  • 小指を酷使しないようにリマップしたので、指の負担が減った気がする。
  • 親指を変に動かすとこちらが疲れるので、意外と親指で色んなことはできない。
  • レイヤー機能でメタキーをOS上のソフトウェアに頼らず実装できるので、安定する。
    • 特にWindowsのリマップが貧弱だったのが解消されたのは嬉しい。

練習にe-typingをやったが、はじめはE評価だった。脳に指がついてくるようになるには、慣れが必要。

ErgoDoxを注文した

Gadget Keyboard

注文について

  • ErgoDox EZを買えば完成品で届くらしい。
  • Tilt/Tentキット、リストレストはほぼ必須らしい。
  • Ergo Dox EZ Bundleを選択すれば上記2つとのバンドルになる。
  • 基本的に初期の配列から大きくキーマップを変更するらしいので、無刻印(Blank)にするのが無難そう。
  • 本体$295 + 日本への送料$30 = $325での注文となる。この他に関税がかかる。(報告を見る限り1000円程度とからしい。)
  • 「軸の色は後で確認のメールを送る」、と書いてある。(デフォルトは赤軸?)
  • 決済はクレジットカードのみで、paypalは使えない。為替レートは手数料込のレートがあるらしく、決済までタイムラグもあるため、注文時の円ドルレートにならない点に注意。
  • 最近は2週間程度で届くとの話もある。(量産体制が整ったとか。)

購入背景

  • 小指が痛い。
  • 親指が痛い。
  • 肩幅が広いタイプの人生なので、キーボード入力中の息苦しさや肩の調子の悪さを解消したい。
  • キーボード側で配置変更やSandS実装ができるので変なリマップをしなくてもどのOSでも使えるのが良い。
  • 右下のカーソルキー遠いけどWindowsだとemacsキーバインドとかうまくできないのでつらい。
  • リマップに起因する競合っぽいアレソレが解決されるので色々幸せになれるはず。
  • そもそもモディファイヤキーが簡単に届く範囲にあれば問題が全部解決されるはず。

参考

まだ注文しただけなので、この文章はReafforceで書いている。

MVNO SIMのテザリングロックをMac/homebrewで解除する

MVNO SIM Gadget Android

SIMロック解除や、docomo系のMVNOを使う場合、通信はできてもテザリングができないという場合があります。

端末を有線接続し、本体を操作することで、root権限不要でテザリング可能に設定を変更することができます。

(変更の可否は端末によります。今回はXperia Z3 Compactで行いました。)

Windowsの場合はAndroid SDKの設定手順が多く大変ですが、Macの場合brewで環境が簡単に整います。

homebrewが入っていない場合はこちら

Homebrew — OS X 用パッケージマネージャー

以下、実行に必要なコマンド


  1. brew install android-sdk android-sdkのインストール

  2. android -v android-sdkがインストールされたことを確認

  3. android update sdk --no-ui --filter 'platform-tools' android adbのインストール

  4. adb -v android-adbがインストールされたことを確認

  5. スマートフォンをUSBデバッグモードにしてMacと接続

  6. adb shell 接続された端末にコマンドラインからログイン。ユーザ名が端末名になっていることを確認

  7. settings put global tether_dun_required 0 端末内でテザリングを有効化

  8. exitで端末からログアウトし終了


Macでは以上のコマンドで操作が完了します。

その他細かい点については、他に詳しいブログがあるので、そちらをご参照ください。

Android標準で用意されているコマンドの実行ですが、ご利用は自己責任でお願いいたします。

WindowsでCDからflac、mp3にエンコードする(foobar2000)

Windows Audio

SONY製品が多いのでMedia Goで普段CDを取り込んでいたが、HDD増強したしホームシアター買いたいしで、flacにしてもいいんじゃないかと思い環境を探した。

foobar2000は開発も続いているし、UIも今はわかりやすいので、今回はこれを使用した。

foobar2000でのエンコードの場合、主に以下の設定が使用できるのが嬉しい。

  • ファイル保存の際のディレクトリ構造やファイル名を変数を用いて指定可能
  • エンコーダが詳細に設定可能
  • プレイリスト表示の高度なfilter、表示設定

導入手順

以下の手順でfoobar2000flaclame(mp3)をインストール

foobar2000

https://www.foobar2000.org/から最新版をダウンロードしインストール

最初にUIを聞かれるのでお好きなものを選択

flac

https://xiph.org/flac/download.htmlからdownload項のWindowsにあるリンクからダウンロード

解凍後に含まれるflac(exeファイル)をfoobar2000のディレクトリ(標準であればProgram Files (x86)以下)に配置

lame

http://www.rarewares.org/mp3-lame-bundle.phpからダウンロード。64bit環境の場合はそちらを選択

foobar2000からは参照を指定するため、配置場所は自由。Program Filesに配置するのが無難か

あと、Lame Ain't an Mp3 Encoderって名前がかっこいい

foobar2000設定

エンコードの手順を行う中で都度必要な設定を行う

  1. CDを読み込んだ状態でFile > Open audio CDを選択

  2. CDドライブが認識されるので、選択しDrive settingsを選択

    Read offset correctionは右のautoボタンで自動設定

    Ripping securityはstandardを推奨。以上を設定したらOKをクリック

  3. RipボタンをクリックしCD詳細画面へ

    Information lookupのSourceをfreedbに変更し、Lookupボタンで日本語の情報も取得できる

    Verify with AccurateRipにチェックを入れると次回も同じようにCD情報を取得する

    Process to the Converter Setup dialogをクリックし、エンコードの設定へ

  4. エンコード設定を行う

    右側のOutput formatからflacを選択しbackをクリック

    Destinationをクリック。Output pathからSpecify folderに選択を入れればデフォルトの保存先を設定できる

    Output style and file name formattingからファイル名を設定する。右の...ボタンをクリックすることで複数種類の中から選択可能

    例えば%album artist%/%album%/%track%. %title%とすれば、アーティスト/アルバム名/01. 曲名となる

    設定が完了したらbackをクリック

  5. Saveボタンでエンコード設定を保存する。名前にはflac等と指定する

  6. mp3のエンコード設定を作成するため、Output formatをクリック

    Add newボタンで新規作成する。EncoderからまずMP3を選択してからCustomを選択すると初期情報が入っているので楽になる

    Encode fileに先にダウンロードしたlameファイルを指定する

    Extension(拡張子)はmp3と入力

    Parameterは最高音質にするのであれば、-S --noreplaygain -b 320 - %dと入力。固定(CBR)320kbpsとなる

    Bit depthのformatはlossy、Highest BPS mode supportedは24を選択

    Displayの項目で表示される名称を入力。MP3(320kbps)/320/CBRとするのが良いだろう

  7. エンコーダを指定してリッピング開始

    flacの設定を指定し、convertボタンでエンコードを実行

    次回以降はRip now using one of the existing presetsから設定を指定して実行できる

    エンコード中のShow output tracks when doneのチェックを外すと、終了時に結果表示がなくなる

  8. flacからmp3にエンコード

    リッピングしたflacからmp3にエンコードする方が、CDから取り込むよりも早い

    取り込んだファイルを開き、右クリック > Convertから、mp3(320)の設定を指定して実行

    複数ファイル選択し同時に実行できる