norinyang メガ進化!

気ままに色々

Golang の開発環境構築

Mac で Go のビルド環境を構築した。
brew で簡単にインストールできたので良いですね

特にこだわりとかないので、最新版を入れておきます

brew update
brew install go

これをやると

As of go 1.2, a valid GOPATH is required to use the `go get` command:
  http://golang.org/doc/code.html#GOPATH

`go vet` and `go doc` are now part of the go.tools sub repo:
  http://golang.org/doc/go1.2#go_tools_godoc

To get `go vet` and `go doc` run:
  go get golang.org/x/tools/cmd/vet
  go get golang.org/x/tools/cmd/godoc

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/opt/boxen/homebrew/opt/go/libexec/bin

こんな感じにな説明が出てきます
最後の PATH 部分は入れる環境によって差があると思います
ぼくは昔遊んだ boxen で homebrew が入っているので変なパスが書かれている

上から順に

golang.org/doc/code.html#GOPATH

How to Write Go Code - The Go Programming Language

The GOPATH environment variable specifies the location of your workspace. It is likely the only environment variable you'll need to set when developing Go code.

To get started, create a workspace directory and set GOPATH accordingly. Your workspace can be located wherever you like, but we'll use $HOME/go in this document. Note that this must not be the same path as your Go installation.

ワーキングディレクトリのパスを通しておく必要があるらしい
ドキュメント中では $Home/go をワーキングディレクトリにしているっぽい
どこでもいいって書いてあるから適当なディレクトリを切ってそこにパスを通す

mkdir ~/Development/Go
export GOPATH=~/Development/Go

ぼくは上記の場所にした

For convenience, add the workspace's bin subdirectory to your PATH:

設定したワークスペースのサブディレクトリ bin を PATH に入れておく必要があるので下記を追加

export PATH=$PATH:$GOPATH/bin

golang.org/doc/go1.2#go_tools_godoc

続いてこちら
Go 1.2 Release Notes - The Go Programming Language

Both binaries are still included with the distribution, but the source code for the godoc and vet commands has moved to the go.tools subrepository.

Also, the core of the godoc program has been split into a library, while the command itself is in a separate directory. The move allows the code to be updated easily and the separation into a library and command makes it easier to construct custom binaries for local sites and different deployment methods.

Updating: Since godoc and vet are not part of the library, no client Go code depends on the their source and no updating is required.

The binary distributions available from golang.org include these binaries, so users of these distributions are unaffected.

When building from source, users must use "go get" to install godoc and vet. (The binaries will continue to be installed in their usual locations, not $GOPATH/bin.)

なんかごちゃごちゃ書いてあるけど、godoc と vet が入ってないって話が書いてあって
分離されていると何が嬉しい、分離されていても不便はない、ということのようだ

とりあえずコマンド実行

go get golang.org/x/tools/cmd/vet
go get golang.org/x/tools/cmd/godoc

これで先ほど指定した GOPATH いかに pkg, src が出来上がっているはず

PATH 追加

You may wish to add the GOROOT-based install location to your PATH:

べつにのぞんじゃいないけど念のため追加

とりあえずできた?

何もやってないけどとりあえずできたはず

指輪型デバイスRingが届いた


Ring : Shortcut Everything. by Logbar inc. — Kickstarter

はめてみる

f:id:norisu0313:20141029222412j:plain
でかい
f:id:norisu0313:20141029222411j:plain
ちょうどいい

正直10分で飽きた

  • Androidアプリがすぐクラッシュする
    • Xperia Z3さんなのでマシンパワー足りていないなんて事は無い
  • アプリ起動してないとジェスチャー認証されない
    • まぁ、わかっちゃいた
  • そもそもRingがでかくて抑えてないとすっぽ抜ける
    • メール掘り起こしたらSize:01で注文してたので一番小さいやつf:id:norisu0313:20141029220746p:plainf:id:norisu0313:20141029220920p:plain
    • サイズ調整用のプラスチック治具ついてたけど効果なし
  • 結局文字が入力できるか謎
    • 上の動画では文字(少なくともアルファベットと数字)が入力できてるけど試せるところがない


指輪型デバイス RingからEngine Yardへのデプロイ - Engine Yard Blog

こちらRingで面白いことされてる記事

感想

一応投資案件だしダメでもともとという気持ちだったけど理想と現実のギャップがすごい
これからもなんかあれば積極的に投資していきたい意欲高まった

とりあえず猫耳ヘッドホンは投資済み!

2014/10/29 23:35 追記

iOSAndroidで大して変わらんやろと思っていたけどあまりにもうまく動かないので手元のiPad mini 2で試してみることにしたらレスポンスが劇的に良くなったしできる操作が多い

Android開発者募集してたの思い出されて良い

audioタグを使うときの注意

最近Webサービス自分で作ろうと思ってこそこそ色々してるんだけど
audioタグを使ったらすごくレスポンスが悪くなったので備忘録
ちなみに、audioタグを50個とか並べたときの話です。1つとかなら気にしなくて大丈夫

起こった事

最近は僕のようなデザインなんて全く分からない人間でもなんとかなるようにいろんなテンプレートがあるのでそれを使ってレスポンシブルなサイトを作っていた
確認端末は

基本的にはMBP Chromeで確認しながらつくって、携帯端末でも追加で確認という感じ

audioタグで音が再生できるようになったのでいざiPhoneで確認してみるとレスポンスがが返ってこない
サーバ側の応答を確認してみると即座に返しているように見える
ただ、jsやcssが読み込まれにくるのがやたらと遅い

ドキュメントを返してから、そのドキュメント内で呼ばれているファイルを取得する迄30秒近くかかってしまっている

しかも遅いだけならまだしも、Safariが操作不能な状態に陥ってあげくクラッシュしおる。。。
まぁ、もうすぐiPhone6が出ようかというときに5で検証してるのでスペックの話はあるんだけど、いくらなんでもひどすぎる

考えられそうな事

  • jsのイベント登録が遅い
    • js読まれる前段階がすごく遅いので関係なさそう
  • 画像の量が多すぎて読み込みが遅い

— audioタグつける前は許容範囲に収まっていた

  • やっぱaudioタグ?

まぁ、考えてみるとやっぱaudioタグ怪しいよね!って事で

色々やってみる

  • preload=“none” を試してみた
  • srcの中身を空にしてみた
  • audioタグを全部消してみた

audio タグ消す意外の方法は全く効果がなかった。。。
どういうこっちゃねん。。。

しゃーないのでごにょごにょしてみた

htmlの中にaudioタグを埋め込むのは諦めて、Javascript使ってどうにかします

<span class="track-preview" data-track-id="912271090">
  <i class="start-track-preview icon-play" data-preview-src="http://a625.phobos.apple.com/us/r30/Music4/v4/4d/3e/6c/4d3e6c6d-8a55-6a24-8b20-881a20c2d0cb/mzaf_4364382391745539868.plus.aac.p.m4a"></i>
  <i class="stop-track-preview icon-pause" style="display:none"></i>                  
   誰でもロンリー
</span>
<span class="track-preview" data-track-id=...
<span class="track-preview" data-track-id=...
<span class="track-preview" data-track-id=...
( function () {
  audio = document.createElement("audio");
  trackId = undefined;
  $('.start-track-preview').each( function (index, value) {
    $(value).on('click', function (event) {
      var trackPreview = $(value).closest('.track-preview');
      trackPreview.find('.stop-track-preview').show();
      $(value).hide();
      previewSrc = $(value).attr('data-preview-src');
      if (previewSrc !== $(audio).attr('src')) {
          if (trackId !== undefined) {
            audio.pause()
            $('.track-preview[data-track-id=' + trackId + ']').each( function (index, target) {
                $(target).find('.stop-track-preview').hide();
                $(target).find('.start-track-preview').show();
            })
          }
          $(audio).attr('src', previewSrc);
      }
      audio.play()
      trackId = $(trackPreview).attr('data-track-id')
    });
  });
  $('.stop-track-preview').each( function (index, value) {
    $(value).on('click', function (event) {
      var trackPreview = $(value).closest('.track-preview');
      trackPreview.find('.start-track-preview').show();
      $(value).hide();
      audio.pause()
      trackId = undefined;
    });
  });
} ) ();

あらかじめAdioElementをJavascript内に用意しておいてそのsrc属性を入れ替えて音声を再生したり、停止したりしています
ちょっと雑な方法だけどとりあえずコレでレスポンスに関しては解決した

まとめ

audioタグがあるだけで何かiPhone Safariさんはなんかするんかね?
教えて偉い人!
Mac Safari だとどうなるか調べてないけどダメなんかね?
(自分でやれってかんじですね
そもそもaudioタグ並べるなって話もあるかもしれない
つらみある
Videoタグだってにたような感じになるんかね?

ChefでMackerelをインストールする方法

Chefを最近勉強している
そもそもRubyよくわかんないしつらい気持ちになるけど
日本語の記事があるからなんとかなるという感じ

Calling for Beta Testers! Mackerel: A Revolutionary New Kind of Application Performance Management

はてなが作っている「新しいアプリケーションパフォーマンスマネージメント」ツールMackerelをChefでインストールして設定ファイルかいてスタートしてみる

エージェントをインストールする

f:id:norisu0313:20140831181553p:plain

いろんな方法が用意されているみたいだけど、とりあえずCentOSに入れたいのでrpmでインストールされてほしい
yumリポジトリが用意されているのでそれを使ってインストールしてみる

yumリポジトリを追加する

opscode-cookbooks/yum · GitHub

これを使ってyumリポジトリを追加する
自分で書いてもいいけど使えるものは使っていきたいし、再利用性高そう
仕事で使うとかなら色々考えるけど
そうじゃないのでいいや!

knife cookbook site install yum -o site-cookbooks

これでsite-cookbooks以下に上記のコードが落ちてきてさらにgit commitまでされます
このままだとMackerelのリポジトリが追加されないので
site-cookbooks/yum/recipes/default.rb
を編集して追加されるようにします
yum_globalconfigで色々かかれているけど、今回は必要ないのでとりあえずコメントアウト
Mackerelリポジトリ用の設定を追加します

#yum_globalconfig '/etc/yum.conf' do
#  cachedir node['yum']['main']['cachedir']
#  keepcache node['yum']['main']['keepcache']
#  debuglevel node['yum']['main']['debuglevel']
#  exclude node['yum']['main']['exclude']
#  logfile node['yum']['main']['logfile']
#  exactarch node['yum']['main']['exactarch']
#  obsoletes node['yum']['main']['obsoletes']
#  proxy node['yum']['main']['proxy']
#  installonly_limit node['yum']['main']['installonly_limit']
#  installonlypkgs node['yum']['main']['installonlypkgs']
#  installroot node['yum']['main']['installroot']
#  distroverpkg node['yum']['main']['distroverpkg']
#  releasever node['yum']['main']['releasever']
#  action :create
#end

yum_repository "mackerel" do
  description "mackerel-agent"
  baseurl 'http://yum.mackerel.io/centos/$basearch'
  gpgkey 'https://mackerel.io/assets/files/GPG-KEY-mackerel'
  action :create
end

わすれずにrun_listに"recipe[yum]"を追加!

mackerel-agentをインストール

もうyumリポジトリ追加されているのでmackerel用のcookbook作ります

knife cookbook create mackerel -o site-cookbooks

site-cookbooks/mackerel/recipes/default.rbを編集してインストールされるようにします

#
# Cookbook Name:: mackerel
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
# mackerel をインストールしてある状態にする
package "mackerel-agent" do
  action :install
end

こんだけ!簡単!

Agentを起動してみる

今度はmackerel-agentを起動して、OS起動時のサービスを有効化してある状態にする

# mackerel を起動して、OS起動時のサービスを有効化してある状態にする
service "mackerel-agent" do
  action [ :enable, :start ]
end

とりあえずこれで動くはずなのでやってみる
わすれずにrun_listに"recipe[mackerel]"を追加!

knife solo cook [user@ip]
    ================================================================================
    Error executing action `start` on resource 'service[mackerel-agent]'
    ================================================================================

あかんかった。。。
いろいろ調べてみるとどうやら設定ファイルがかかれていない(存在しない)のがよくないみたい

「Mackerelエージェントをインストールする」ページにいってみるとちゃんと起動する前に設定ファイル書くようにかいてある
API Keyなにかわからないとそりゃ動かんだろうししょうがないか

設定ファイルを用意する

というわけで設定ファイルが書かれるようにする
とりあえず環境べつに設定分けたいとかないのでtemplate以下に設定ファイルおいてそれが渡されるようにする
site-cookbooks/mackerel/templates/default/mackerel-agent.conf
に設定書いておいておく
Mackerelにサインインすると確認できるのでそれを参考に
API Keyだけなのでここは割愛

# mackerel
template "mackerel-agent.conf" do
  path "/etc/mackerel-agent/mackerel-agent.conf"
  source "mackerel-agent.conf"
  owner "root"
  group "root"
  mode 0644
  notifies :reload,'service[mackerel-agent]'
end

ここでポイントなのはこの設定を書く場所
Service Startする設定の前に書くこと!

全体にするとこんな感じ

#
# Cookbook Name:: mackerel
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
# mackerel をインストールしてある状態にする
package "mackerel-agent" do
  action :install
end

# mackerel
template "mackerel-agent.conf" do
  path "/etc/mackerel-agent/mackerel-agent.conf"
  source "mackerel-agent.conf"
  owner "root"
  group "root"
  mode 0644
  notifies :reload,'service[mackerel-agent]'
end

# mackerel を起動して、OS起動時のサービスを有効化してある状態にする
service "mackerel-agent" do
  action [ :enable, :start ]
end

これで大丈夫!

まとめ

Mackerelいろんなことができるみたいだし日々機能追加されているみたいだし楽しみ!
Chefも少しずつ勉強してちゃんと使えるようになっていきたいし、頑張る予定

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

会社のインフラエンジニアに聞いたらこの本がよいらしいのでとりあえず買ってみた
コマンドしっかり書かれていてなぞっていくと色々できるようになるのでわかりやすい!

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

前にこの本を買って読んでいたんだけど
このときは実際にコマンドうたずに本当に読んでいただけなのであんまりみになってなかった
ちなみに上の本にはこの本の内容も含まれているので上買っておくのが良さそう

flickrでprivate設定の写真を共有しようとしてめっちゃはまった

f:id:norisu0313:20140707002323j:plain

flickrは基本的に全部private&only you設定にしていてただの画像ストレージとしてつかっているけど、最近写真を共有したくなったのでGuest Pass作ろうとしたらめっちゃはまった

flickr基本的に全部英語でかかれているから日本人には結構つらい感じになっている
一方でいろんなことを厳密に設定できるから何をどう設定したら変わるのかがすげー分かりにくい

とりあえずググる

なんにせよやり方調べようと思って検索してみた
flickr 共有」とかで検索すると、Guest Pass作る方法をいろんなサイトで説明されている
例えば下のサイトとか
[Flickr]非公開(プライベート)写真を家族や身内だけに共有する方法について調べてみた件 | ツインズパパの徒然日記 Ver.2

基本的にかいてある方法でやってるつもりなんだけどAlbum(昔のSet)共有することができない
右上のボタン押しても「Grab the link」が出てこない
f:id:norisu0313:20140707002750j:plain
Moreってボタン押しても何も出ない
f:id:norisu0313:20140707002752j:plain

なぜ。。。???

全くもって原因がわからないので、とりあえず色々な設定を変えまくってみて原因が分かった

Safety level of this photo という設定

個別の写真詳細ページに行くといろんな設定をみることができる
下の方(一番下)に行くと画像のように権限設定が色々かかれている
f:id:norisu0313:20140707003302j:plain
このSafety level of this photoという設定が重要
エキサイト翻訳にかけてみると「この写真の安全レベル」
はい、意味が分かりませんね
Flickrの使い方 - Flickr FAQ 日本語訳/コンテンツフィルタ
こちらをみると
ようは、レーティングのことみたい
ゲームで言うならCERO
ここが「Restricted」になっているのが問題(ちなみに「Moderate」でもダメ)
f:id:norisu0313:20140707003305j:plain
このように設定を「Safe」にすると誰にでも見せてよいことになるらしい

Albumないのファイル設定を全部変える

やり方は検索したら出てくるので割愛
Flickrで写真の公開範囲(private/public)を変更する方法
これは公開設定だけど、にたような感じで変えれる

これでゲストパスがとれるようになった

これで、一番最初のURLの通りGuest Passを取得できるようになった
f:id:norisu0313:20140707004636j:plain

便利!!

まとめ

Upload時のデフォルト設定でとりあえず全部ネガティブな方向へMAXにしていたからはまったぽいけど、検索しても日本語情報出てこなかったので備忘録かねて記載
とりあえず、flickrは日本語の説明とかも追加してほしいけどローカライズ基本的にめんどくささしかないし対応されなさそう
flickrアカウントある前提で友人と話できないから日本だとつらい
設定多すぎて使い方分かんない&米Yahooアカウント必要なので勧めづらいというのもある
なにはともあれ解決できてよかった

Sublime Text 3 でカーソルを見失う問題

Sublime Text の カーソルとカーソル行ハイライトが全く主張してくれなくてどこにいるかしょっちゅう見失う
もっと、原色ばりばりに光り輝いてほしい

という訳で、どうにかしてみた

http://tmtheme-editor.herokuapp.com/

Sublime Text のテーマを自分で作れる&プレビューがみられるちょういけてる便利ツール!

がしかし、このツール初見だとどうしたらいいかいまいちわからんし
そもそも自分が今使っているテーマをベースに編集したいけどどうすんの?
ってなる
英語厳しい

ベースとなるテーマを選ぶ

デフォルトではMonokaiというテーマが選ばれているはずで、どこからかえればいいかわからない
URL構造みればどうなってるかわかるが、Monokaiってなってるところをベースにしたいテーマ名二かえたらよいが
対応してる/してないとかあるしGUIからやる方法を知っておく方が何かとよい
f:id:norisu0313:20140219020813j:plain

画面左上このボタンを押すとテーマの一覧が出てくる
f:id:norisu0313:20140219021213j:plain

こんな感じ

好きなテーマを選んでクリック!

今回はみんな大好き Flatland を選択しました。

カーソル行ハイライト色を変える

カーソル行ハイライトの設定がは General タブ内なので切り替え
f:id:norisu0313:20140221010709j:plain

Line Highlight って項目がある
f:id:norisu0313:20140221010935j:plain

この項目がカーソル行ハイライトの色になるのでこれを書き換える
Color の部分クリックすると GUI のカラーパレット出てくるので適当に変更

残念なことにプレビューにちゃんと表示されないので、うまくいっていない訳ではないです

実際に Sublime Text 3 に適用

まずはいじったカラーテーマをファイルとしてダウンロード
f:id:norisu0313:20140221011300j:plain

Mac なら
/Users/[ユーザー名]/Library/Application Support/Sublime Text 3/Packages/Color Scheme - User/
にダウンロードしたファイルをおいて
Sublime Text をきどうして、普通に追加されたテーマを選べばOKです

Windowsだとパスが違うので注意

だがしかし

さて、ここまでやって思った、カーソル行の色濃くしたから行はわかるようになったけど、行の中でカーソルがどこにあるかわからない問題解決してない!?
元々vimerでかつSublime TextでもVintageモード使っている身としては
f:id:norisu0313:20140221011909j:plain
こう
なんというかブロックぽくなってほしい

Sublime Text 2 の場合は
SublimeBlockCursor - Packages - Package Control
このパッケージを入れたらカーソルをブロックにすることができる

しかし Sublime Text 3 は未対応で、直接 github から落としてきてパッケージの下にぶち込んだりしても動きません

ST3 Support · Issue #21 · netpro2k/SublimeBlockCursor · GitHub
完全に放置されてることがわかる

という訳でこの Sublime Text 3 で使えるように直してみた
といっても、解決方法は上記URLに書かれているのでそれを実践

まずは落としてくる

cd /Users/[ユーザー名]/Library/Application Support/Sublime Text 3/Packages/ 
git clone git://github.com/netpro2k/SublimeBlockCursor

SublimeBlockCursor.py の書き換え

変更するべきなのは2箇所

6行目

    def view_is_widget(view):

となっているところを

    def view_is_widget(self, view):

に変更

25行目

        if view_is_widget(view) or (is_vintage_mode and not command_mode):

となっているところを

        if self.view_is_widget(view) or (is_vintage_mode and not command_mode):

に変更

これでブロック調こカーソルになったはず

f:id:norisu0313:20140221015237j:plain

Facebook/Gunosyからはてなブックマークする

IFTTTとPocketを使ってはてなブックマークしてみた - norinyang メガ進化!

昨日こんな日記を書いたんだけど、どうもFacebook/Gunosy等のアプリから連携するとまどろっこしい
#hatebu って毎回うつの結局こすとあがってて糞みたいな感じである

なので別の手がないか調べてみた
ようはPocketに保存できたらいいので

ページが見つかりませんでした
(なんかタイトルが出ない場合がある)
122: Gunosy→Pocketへ、URLをコピーするだけで送れるClippedが便利!無料!
http://nhnl.yosshi7777.com/archives/1682/

こちらの記事を参考にしてみた

このアプリを使うとPocketに簡単に追加可能
アプリ自体はいろいろなサービスに対応していてよい感じ

この方法でいけてないのは

  • あらかじめアプリを立ち上げる必要がある
    • まぁ許容範囲
  • 割と頻繁にバックグラウンドで立ち上げてるclippedのセッションが切れる
    • 切れたらclippedをもう一度立ち上げないとダメ

なんかもっといけてる方法ないかなー?