あのにのに

僕の雑記

WindowsでKitematicを起動するとクラッシュするようになってたんだけど治った。

最近Windowsで開発環境が整ったワイワイしてたんですが、 なんでか突然Kitematicを起動するとOSごとクラッシュ(ブルースクリーン)するようになってしまった。

クラッシュする直前にVirtualBoxを呼び出そうそしている形跡はあったのだけれど、 そもそもWin10のDocker for WindowsでDockerを動かしているのでVirtualBox使わなくね? と思い、issueを漁ったらあった。

github.com

Windowsコンテナを扱うモード(VirtualBox利用)に切り替えた後戻らなくなるバグのようで、 localStorageを書き換えたら無事治った。 f:id:anoChick:20170420205522p:plain

コンソールを開くメニューがWindows版Kitematicには存在しないのだけれど、 幸い私はショートカットを知っていたので開いた。良かった。

WindowsでWeb開発環境を整える雑記

基本的にはWindows Subsystem for Linux乗る

先日のWindows 10 Creators Updateでかなり使えるレベルになったらしいです。 https://blogs.msdn.microsoft.com/commandline/2017/04/11/windows-10-creators-update-whats-new-in-bashwsl-windows-console/

私が常用しているreact-boilerplateもネットワークインタフェース系がサポートされておらず動きませんでした。 https://github.com/Microsoft/BashOnWindows/issues/468

f:id:anoChick:20170416204908p:plain

これが、Creators Updateを適応したら動作するようになりました。嬉しい。

Bash on Ubuntu on Windows

Bash on Ubuntu on Windowsに関しても、 日本語がずれたり切れたりしていて使い物にならなかったんですが、今回のアップデートできれいに表示されるように修正されました。 f:id:anoChick:20170416204821p:plain

ちなみに、修正される前は http://cmder.net/ Cmderをつかったり(tmuxがマウス操作に反応しない)

f:id:anoChick:20170416204846p:plain

それを回避するために Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。 ↑みたいな感じで Cygwin+minttyからBoWを繋いで動かす。みたいなことをしてつかわれていたそうです。

Docker for WIndows

Hyper-vを使うことでWindows上でLinuxコンテナを動かす感じです。 Web開発をする上ではそれで十分だとは思いますが、最近はWindowsコンテナも使えるようになったらしいです。 WindowsのDocker(コンテナ)対応、正しく理解できていますか?

Windowsを積極的に使っていく気持ち

最近Windowsがめちゃめちゃ良くなってきているのを感じます。 せっかく高性能なWindows機を購入したので積極的に使っていきます。

VR演奏環境作った。

ゲーミングPCを買いました。 家にちょうどOculus Rift DK2があったのでVR開発をはじめてみました。

できたもの

MIDIキーボードの入力が仮想空間内のキーボードにいって音を鳴らすやつ。

MIDIキーボードはmicroKEY airを使いました。

f:id:anoChick:20170326231753p:plain

Unityで作りました。

使ったもの

モデル

MIDI Keyboards Pack

3D Living Room

スクリプト

GitHub - keijiro/MidiJack: MIDI input plugin for Unity

MIDI入力を受け取るスクリプト

f:id:anoChick:20170326232629p:plain

こんな感じ。良い。

感想

吐きそう

昨日今日とHMDで遊んでたので酔いがひどい。 あとDK2は解像度が低いので楽譜読めないです。

今回はあるものを使ったのでほとんどコードは書いていない。 UnityはいろいろなAssetがあるのでいいね。

今後やりたいこと

せっかくの仮想環境なのでもっと立体音響とかやりたい。 部屋の大きさをかえるとリバーブのパラメータが変わるとか、 サンプリングしたり、トラックをシュッと作ったり、 VRのDAWみたいなことしたい。

Unityでスマホのカメラを使う

僕の同僚かつフレンズのid:hiragramがなんかよくわからないカメラアプリを作ってて凄い。

hiragram.hatenablog.jp

僕もそういうのやりたいけどiOS開発やったこと無い。

Unityなら出来る。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour  {
    public WebCamTexture webCameraTexture = null;
    public GameObject plane;

    // Use this for initialization
    void Start ()
    {
        webCameraTexture = new WebCamTexture ();
        plane.GetComponent<Renderer>().material.mainTexture = webCameraTexture;
        webCameraTexture.Play ();
    }

    // Update is called once per frame
    void Update ()
    {

    }
}

f:id:anoChick:20170323002050p:plain

うつった。 テクスチャに投影してるだけなので↓のようにも出来る。

だからなんだって感じではあるけど、 なんかいろいろできそう。

すてにゃんが分報チャンネル消したらしいから僕も消した。

stefafafan.hatenablog.com

といってもただ便乗しただけじゃなくて、

先週あたりから消そうかどうか悩んでたんですが、 すてにゃんが消したということで踏ん切りがついて僕も消したという感じです。

分報チャンネルの用途

前提として、僕の分報チャンネルの使い方はだいたい以下のような感じでした、

  • 業務でのゆるめな悩みつぶやき
  • 業務外の技術的なはなし
  • 雑談
  • にゃーん的感嘆詞
  • 自分用bot[栗山さん]

f:id:anoChick:20170322072240p:plain

栗山さんbotはYaya製です 他にもwebhook受け取ったり、色々やってくれます

anoninoni.hateblo.jp

やめた理由

最近Twitterで全然ツイート出来ていないのが辛くて、 なんでツイート出来ないんだろうって考えてみたら、 Twitterと分報チャンネルどっちで言おう→分報チャンネル ってケースが多くあって、結果としてツイート量が減ったんだと思いました。

あと分報チャンネル見てる人って実はそんなに居ないんですよね。 最近社内のSlack利用者がめちゃめちゃ増えてて、ノイズ感すごくなってきたので、 だいたいのチャンネルは入ってるけどミュートしているものと思ってます。(わたしはそう) join数三桁の分報で発信した気になって実は誰も観てないなんてことも普通にありえます。

発信先の分類が面倒で自分の好きにできる領域にPOSTしちゃってるんだと思うんです。

それだけです

情報発信先チャネルの最適化をもっとしていかないといけないなと思いました。

Yaya作った

github.com

こんなんつくりました。

導入

1.用意するもの

2.Herokuにデプロイ

https://github.com/anoChick/yaya

↑の[Deploy to Heroku]ボタンを押します f:id:anoChick:20170306031846p:plain

HerokuにログインしていればApp作成画面が出てくると思います。 環境変数をいれていきましょう

[SLACK_API_TOKEN] SLACKのAPIトークンをいれてください。 [ROOT_URL] アプリケーションのROOTURLを入れる所なんですが、まだ生成されていないので適当な文字列を入れておいて下さい。 f:id:anoChick:20170306032129p:plain

Deployボタンを押せばデプロイされます。

デプロイが完了したらwebページが生成されるので、そのURLをROOT_URLに設定しておいて下さい。 (Settingsの[Config Variables])でできます。

slackのbotがオンライン状態になったらデプロイ成功です。 f:id:anoChick:20170306033026p:plain

動かす

GraphQLのfieldに付くresolveをTypeによって指定する。

GraphQLでDateTimeを扱う時、フォーマットを指定する。 - あのにのに

前回の記事で 「DateTime型とかはクエリ側で出力フォーマットを引数として指定できると便利!」 って話をしました。

ついでに課題として

  • DateTimeTypeって作ったけど意味なくない..?

  • いちいちresolveにフォーマット付与を記述するの面倒じゃない?

という物があったのでこれを解決したいと思います。

やること

Typeが**ならresolveでxxをする。と言うような仕組みを作ります。

今回の場合だと 「fieldのTypeがDateTimeTypeの場合、そのfieldに引数[:format]を用意し、resolveではformatに応じで出力フォーマット通りに書こうするようにする。」 になります。

これができるようになると、DateTimeTypeが付いたfieldは全て[:format]が使えるようになります。

ちなみに使用するgemは前回に引き続き

https://github.com/rmosolgo/graphql-ruby

です。

やってく

今回はGraphQL::Define::AssignObjectFieldをモンキーパッチをあてる形で動かしてみます。 GraphQL::Define::AssignObjectField#callの程よくfieldが得られたタイミングで

if field.type.to_s == 'DateTime'
  field.arguments['format'] = GraphQL::Argument.define(name: 'format', type: -> { GraphQL::STRING_TYPE })
end

f:id:anoChick:20170201041027p:plain

ついた!

次にリゾルバを作ります。

class DateTimeTypeFormatResolver
  def initialize(attr_name)
    @attr_name = attr_name
  end
  def call(obj, args, ctx)
    return obj[@attr_name].strftime(args[:format]) if args[:format].present?

    obj[@attr_name]
  end
end

こんな感じ。あとは

if field.type.to_s == 'DateTime'
  field.arguments['format'] = GraphQL::Argument.define(name: 'format', type: -> { GraphQL::STRING_TYPE })
  field.resolve=(DateTimeTypeFormatResolver.new(name))
end

とか書けばok

f:id:anoChick:20170201041249p:plain

一応これで完成。

割りと便利な気がする。

今回新たにうまれた課題としては

  • 他でリゾルバを記述したくなったらどうするんだ
  • この書き方だとModelの属性名とTypeのfield名が一致している場合しかつかえない

次↑について考えます。

あとはその他便利拡張あればやる。