みつろぐ

やれることはやってみる

2017年買ったもの

2018年になってしまいましたが、2017年に買ったものの振り返りです。

 

パソコン

https://store.storeimages.cdn-apple.com/4974/as-images.apple.com/is/image/AppleInc/aos/published/images/m/bp/mbp13/gray/mbp13-gray-select-201610?wid=452&hei=420&fmt=jpeg&qlt=95&op_sharpen=0&resMode=bicub&op_usm=0.5,0.5,0,0&iccEmbed=0&layer=comp&.v=1495842439811

使用してから4年ほど経ったMaxBookAirからMacBookProへ買い替えました。

また良い機会なので、ほぼ使用していなかった自作PC(3年物ぐらいですが)も売っ払いました。

 

USB type-C対応Dock

http://itea40.jp/wp-content/uploads/2017/06/belkin-thunderbolt-3-express-dock-hd1.jpg

MacBookProに買い替えたことでモニタの接続から周辺機器の接続まですべて、USB type-Cに支配されてしまったため購入しました。

他にも良い感じなUSBハブを2つほど購入しましたが、モニタの接続と充電が同時にできない(必要十分なワット数が稼げない)という理由で押入れ行きになりました。

結果としてはUSB一本でモニタを含めたすべての機器が接続されるので便利といえば便利なのですが、値段が高いので満足度的にはそりゃそうだという感じでした。

 

トラックボールマウス

f:id:Mitu217:20180104224754p:plain

よく人に勧められていた & Amazonで安売りをしていたため購入しました。

家ではウルトラでワイドなモニタを使用しているのですが、横移動がマウスでは辛かったため非常によかったです。

 

自転車

https://images-na.ssl-images-amazon.com/images/I/71E-I0-2yjL._SX522_.jpg

これまで基本的に移動は徒歩と電車移動だったのですが、何かと歩いて2,30分の場所へ行く機会が多く、その度に自転車欲しいなとなっていたので購入しました。

住居の関係で比較的軽量かつ折りたたみ式のものを購入しましたがとても良い買い物でした。

 

加湿器 

f:id:Mitu217:20180104224118p:plain

部屋の湿度が30%を切ってしまうことがあったので導入しました。

部屋にいるときは基本的に電源ONにしていますが、うっかり電源を付け忘れて寝ると喉がやられてしまうので、やはり健康的にも湿度は大事だなと感じています。

 

食洗機

http://img1.kakaku.k-img.com/images/productimage/fullscale/K0000935869.jpg

食器を洗うことがストレスで仕方がなかったため導入しました。

結果的に無事ストレスからは開放され、同時に手入れが面倒だった水切りカゴなども排除することでよりストレスのない生活を送れるようになりました。

デメリットとしては筐体の大きさや洗浄時の音などもありますが、そこはそれぞれの個人によるのかなと思いました。

 

ゆゆ式OVA

f:id:Mitu217:20180104224526p:plain

心の拠り所でした

 

バイク

http://www.honda.co.uk/content/dam/central/motorcycles/off-road/crf250-rally-2017/Honda-CRF250Rally-overview20-16x9.jpg/_jcr_content/renditions/c3.jpg

詳細は別記事にしたいと思いますが2017年はゆるきゃん△という作品に影響されキャンプを初め、他の方がキャンプ場でバイクに乗っている姿を見たり、youtubeなどでモトブログなどを見ていたらいつの間にか免許の取得とバイクを購入していました。

車種も中古のツーリングセローあたりを探すかなと思っていたのですが、某バイク屋でCRF250 rallyに一目惚れして購入してしまいした。

2018年はバイクとキャンプを一緒に楽しんでいきたいと思います。

GoogleAppEngineでGolangアプリケーションを作る

GoogleCoundPlatformでGolangアプリケーションを開発する際の手順書です

開発環境

Google Cloud SDKのインストール

# パッケージダウンロード
wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-170.0.1-darwin-x86_64.tar.gz
tar xzvf google-cloud-sdk-170.0.1-darwin-x86_64.tar.gz
./google-cloud-sdk/install.sh

# Pathの登録
gcloud components install app-engine-go

Componentsのインストール

GoogleAppEngineに用意されているプラグインを追加します

gcloud components install app-engine-go

初期設定

コマンドを叩くとGoogleCloudPlatform関連のセットアップができます。ちなみに東京のリージョン名は「asia-northeast1-a」になります

gcloud init

動作テスト

以下のようなmain.go, app.yamlファイルを作成します

package sample

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, World")
    })
}
runtime: go
api_version: go1
handlers:
- url: /.*
  script: _go_app

ローカル、リモートでの動作テストは以下のコマンドを実行することで行なえます

# ローカル
dev_appserver.py . --host=0.0.0.0 --enable_host_checking=0

# リモート
gcloud app deploy --log-http --verbosity=debug

ローカルではPCではなくスマートフォンなどからも利用することを考慮してhost,enable_host_checkingのオプションをつけています

リモートではデプロイ時のログを確認したいため必要なオプションを追加しています

【Unity】編集しているシーンとは別のシーンから再生し、終了時に元のシーンへ戻る方法

Unityでゲーム開始時のシーンとは別のシーンで作業をしている時、デバッグのためにシーンを遷移しなければならないのが億劫だったのでエディタ拡張を用意しました。

下記スクリプトを適当なAssets/Editor以下に置くと使えるようになります。

[InitializeOnLoad]
public class StartGame : ScriptableObject
{
    static StartGame()
    {
        EditorApplication.playModeStateChanged += (a) => {
            if (EditorApplication.isPlayingOrWillChangePlaymode && ! EditorApplication.isPlaying) {
                EditorPrefs.SetString("editScenePath", EditorSceneManager.GetActiveScene().path);
                EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo();
                EditorSceneManager.OpenScene ("Assets/Scenes/Main.unity");
            } else if (!EditorApplication.isPlayingOrWillChangePlaymode && ! EditorApplication.isPlaying) {
                EditorSceneManager.OpenScene(EditorPrefs.GetString("editScenePath"));
            }
        };
    }
}

やってることとしてはEditorApplication.playModeStateChangedでPlayMode(ゲームの再生/終了)が切り替わったときにシーンの切り替えをやっているだけです。

Golangで複数DBの設定を管理する方法を考えてみる

最近Golangを勉強中です。

Golangなアプリケーションで、複数のDBへ接続する機会があるかどうかはさておき、調べても良い方法が見つからなかったので書いてみた。

今回は設定ファイルの管理に BurntSushi/toml を使ったが、go-yaml/yaml でもよさそう。 ちなみに設定ファイルは以下のような形式を想定してる。

[hoge.master]
database = "hoge"
user = "root"
password = "root"
host = "127.0.0.1"
port = 3306

[hoge.slave.0]
database = "hoge"
user = "root"
password = "root"
host = "127.0.0.1"
port = 3306

[hoge.slave.1]
database = "hoge"
user = "root"
password = "root"
host = "127.0.0.1"
port = 3306

実際に設定を読み込むコードがコチラ

package config

import (
    "log"
    "os"
    "strings"

    "github.com/BurntSushi/toml"
)

type Database struct {
    Name     string
    User     string
    Password string
    Host     string
    Port     int
}

var databaseConfigs = loadDatabaseConfigs()

func loadDatabaseConfigs() interface{} {
    var fpath = "resource/config/database.tml"
    var configs interface{}
    if _, err := toml.DecodeFile(fpath, &configs); err != nil {
        log.Fatalln("[ERROR] : failed to read '" + fpath + "'")
    }
    return configs
}

func GetDatabase(args ...string) Database {
    var config = databaseConfigs
    for _, arg := range args {
        config = config.(map[string]interface{})[arg]
    }
    c := config.(map[string]interface{})
    return Database{c["database"].(string), c["user"].(string), c["password"].(string), c["host"].(string), int(c["port"].(int64))}
}

BurntSushi/toml のサンプルコードではパースした結果の構造体が定義されているサンプルがあるが、interfaceを活用してパースの結果を受け取ることもできる。 結果的に、GetDatabase("hoge", "master")とかGetDatabase("hoge", "slave", "0")とかすれば、簡単にDBの情報が取得できるようになった。

設定ファイルの読み込み先などを環境変数によって制御するようすれば、local環境やprod環境での切り替えもできると思う。

いつでもAffectionな気持ちになりたい

これはゆゆ式AdventCalendar 2016 11日目の記事になります

本AdventCalendar初日にid:esuji5さんが取り上げてくださっているように新作OVAが2月22日に発売が決定、新OP/EDとキャラクターソングアルバムに加えてイベント開催決定と来年もゆゆ式な1年になると思うと胸が熱くなります。
d.hatena.ne.jp


さて、ゆゆ式といえばOP「せーのっ」で五臓六腑に染み渡る津田さんの歌声もいいですが、個人的にはすべてを忘れて脳汁だけが流れ続けるED「Affection」も好きです。
「せーのっ」を拝聴し続けるとすぐに歌いそうになってしまうため、今回はいつでもAffectionな気持ちになれるツールを作ってみました。
f:id:Mitu217:20161211220021p:plain

画面右下に表示されるデスクトップアイコン的なアプリとなっているため、少し容量は思いですがぜひ使ってみてください。zipファイルを解凍してでてきたAlwaysAffectionというファイルが実行ファイルとなります。
AlwaysAffection


以下は作成記録です。NW.jsの導入方法やビルド方法については今回触れません。

  1. まずはAffectionを拝聴しながら素材をゲットします

f:id:Mitu217:20161211220837p:plain

  1. いい感じにGIFへ編集します。今回はあまり時間がなくPhotoShop先生に頼りきってしまいましたので、あとで調整したい…

f:id:Mitu217:20161211221022g:plain

  1. NW.jsでGIF画像を表示するだけのアプリを作ります
{
	"name": "AlwaysAffection",
	"main": "index.html",
	"version": "1.0",
	"window": {
			"width": 200,
			"height": 250,
		"icon": "icon.png",
		"transparent": true,
		"toolbar": false,
		"frame": false,
		"always_on_top": true,
		"show": false
	}
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>いつでもAffection</title>
</head>

<style>
html {
  height: 200px;
  width: 200px;
}
body {
  margin: 0;
  height: 100%;
  width: 100%;
  background-color: rgba(0, 0, 0, 0.0);
  color:#fff;
  -webkit--app-region: drag;
}
.content {
  position: absolute;
  bottom: .25rem;
  right: 0rem
}
</style>

<script>
  var gui = require('nw.gui');
  var win = gui.Window.get();
  win.moveTo(
    window.screen.availWidth - win.width,
    window.screen.availHeight - win.height
  );
  win.show();
</script>

<body>
  <div class="content">
    <img src="Affection.gif" width="200" height="200" border="0" align="center" hspace="10" vspace=10 loop=infinite ondragstart="return false;"  oncontextmenu="return false;">
  </div>
</body>
</html>
  1. あとはビルドをして実行すれば完成!

f:id:Mitu217:20161211221909p:plain


動きがそこまで激しくないため常に表示しても邪魔に感じないので、さすがゆゆ式というところです。


雑な記事になってしまいましたが、以上となります。
明日はid:masaybloveさんで4コマ漫画を書いてくれそうな雰囲気で非常に楽しみです。よろしくお願いいたします。

ThinkPadx260とWigigDockの使用感とか

先日購入したThinkPadX260とWigigDockの使用レポート的な記事です。購入の経緯などは過去記事を参照ください。

mitu217.hatenablog.jp


ざっくりと良かった点、気になった点は次の通りです

ThinkPadX260

  • 画面サイズは小さくなったがそこまで気にならない
  • キーボードとトラックポイントは安定している
  • SDカードEthernetが直接させる安心感
  • (3セルだと)バッテリーの持ちがイマイチ
  • 指紋認証の精度がイマイチ…

WigigDock

  • 電源Onから5秒前後でPCと接続される
  • USBも自動で接続されるので便利!
  • 接続中のバッテリー消耗率は気にならない
  • ファンの音が気になる
  • 出力できるのはHDMIかDPのどちらか
  • 4k出力ができない(2kまで)


ThinkPadX260については以前使用していたMaxBookAir(Mid2013)との比較になります。
購入の際、新型MacBookProも候補ではありましたが写真の取り込みやらスパイのOS焼きなどでSDカードを頻繁に使う私としては直接読み込みが出来るのは大きな利点だったと感じています。まだUSBtypeCのケーブルはハードルが高い…
ただ今回失敗したと感じた点はバッテリーのセル数を増やさなかったこと、指紋認証をつけたことです。前者は今後バッテリーを買い足せば良いので問題ないのですが、後者はせっかくログインなどに使用できるのに残念で仕方がありません。今後アップデートなどで精度が改善される可能性もありますが、今のところオプションとしてつける利点は低いかなと感じました。

WigigDockについてはすごく未来を感じました。
現在メインモニタにDELLU3415Wを使用しているため、デスクトップ機とキーボードやマウス、スピーカーの共有をモニタ側でおこなっているのですが、USBケーブルをDockに接続しただけで無事に動作しました。
これにより、Dockの電源さえつければモニタ拡張,キーボード,マウス,スピーカーが接続された環境が即座に完成するようになりました。
前述させていただいた気になる点についてはファンの騒音だけは気になるところですが、他は仕様と割り切れば気にせず十分利用が可能だと思われます。


手元に到着してから約10日ほど経過し、ハードウェアというよりはWindowsそのものに疲弊することはありつつも、下手に新型MacBookProのあのペタペタキーボードを使うよりは満足度は高かったのかなと感じていますが。現時点でインターネットにあるレビューを見る限り「慣れれば使える」というコメントが多く、全く褒めてる記事が見当たらないですからね…
以上、簡単な使用感レビューでした。

ThinkPadX260購入 + おまけ付き

これまでUnity以外の開発はMacBookAirを使っていたのですが、バッテリーが充電されにくいなどの現象が頻発するようになり買い替えを検討していました。

タイミングよく新型MacBookProが発表されるも、「あんだかな~」という気持ちだったので思い切ってWindowsにしてみようとThinkPad購入に踏み切りました。

以下、購入したスペックとかとか
f:id:Mitu217:20161116235453p:plain

ちょうど42%OFFクーポンを利用できたので、最終的には138,748円ぐらいでした。
カスタマイズ時にはHDDを選択し以下のSSDに換装しました。新品を即日換装するのはドキドキです。
Amazon CAPTCHA


これまでより画面が小さくなるので、慣れるまで大変かなと考えていたのですがいい意味で裏切られました。

同時にWigigDockも購入したため、後日それらのレビューもしていきたいと思います。


f:id:Mitu217:20161117000752j:plain