Goのクロスコンパイルに関して

Goのクロスコンパイルができるように設定しました。 参考にさせていただいた素晴らしいエントリーがあるのでそちらを紹介します。

Go のクロスコンパイル環境構築 - Qiita

このスクリプトは build をするための shell の関数を作ってくれるのですが、 zsh となんか相性が悪いので使ってません。環境変数だけなんで、適当に自分で shell を書く程度で間に合いそうです。

と書いてあったので適当にシェルスクリプトを書いておきました。

naclをGOOSに指定して実行すると、普通にこけるのでシェルスクリプト内のリストから外しています。 (2014/08/24 現在) naclを指定した場合は以下の通りエラーが起きます。 必要としてないのであえて深追いしてないです。。。

go tool dist: open /usr/local/go/src/pkg/runtime/defs_nacl_amd64.h: No such file or directory

golang-crosscompile もnaclをサポートから外してるようです。

remove support for nacl/*, fixes #18 (again) · 9b2d5bd · davecheney/golang-crosscompile · GitHub

また、クロスコンパイル時、 -o オプションでファイル名を指定できるようです。C言語と同じですね。

GOOS=windows GOARCH=amd64 go build -o main-windows-x86_64.exe main.go

参考

compiler - Cross compile Go on OSX? - Stack Overflow

画像のリサイズをGoでやる

Go

Go言語でこんなものを作りました。

nikuyoshi/go-resize-image · GitHub

バイナリを叩くと↓こんな感じ。 第一引数に画像ファイルを、第二引数、第三引数にそれぞれ幅と高さを設定しています。

☁  ./go-resize-image image/before.jpg 100 100
2014/08/21 0:00:00 Wrote out after.jpg

Before(2048 × 1365)

f:id:nikuyoshi:20131116153354j:plain

After(100 × 100)

f:id:nikuyoshi:20140821043730j:plain

画像のリサイズをGoのimageパッケージだけで何とか済ませようかと思ったらそんなものがなかったので、下記パッケージを利用しました。 素晴らしいものがあった。

nfnt/resize · GitHub

あとはコマンドラインツールっぽく使えるように、下記パッケージも使用しました。 設定が簡単でこれも素晴らしい。

codegangsta/cli · GitHub

仕事でちょくちょくリサイズで困らされたことがあったのでちょうど良いのができました。 ImageMagickをインストールしてコマンド叩けばいいじゃん!、レタッチソフトインストールして加工すればよくね?っていう話はとりあえず無しで、インストール作業なぞ無しでバイナリ一つ置けば何とかなる素晴らしさを実感しています。 状況に応じてはインストールなぞ許されない環境もあるのです。

Goをはじめました

Go

Goが流行ってるということで前から気になっていたものの、今までずっと手を出せなかったのですがようやく手を出してみました。

まずはA Tour of Goを終わらせて、どんな感じの言語かをざっくりと理解しました。 丁寧なC言語だというのが第一印象。 言語自体にテストが組み込まれていたのも好印象。 オールインワンやで。。。

チャネルの仕組みがよく分からなかったので、そこだけ別途調べて理解を促進しました。 この資料が素晴らしい。

Vimだと心細いので、IDEだと何が良いか調べたところ、Sublime Textが結構良いとのことで、暫定で済ませています。結構補完してくれてて良いです。 もっと良いのが出てきたら乗り換えよう。

チュートリアルも終わり、エディタも揃ったところで早速何かを作ろうと思い早速作ってみました。

続く

追記

$GOROOT、$GOPATHを以下の通りに設定しました。 $HOME/workspace直下にEclipseプロジェクトなどを配置していたため、暫定でここにしておきました。

#Go
export GOROOT=/usr/local/go
export GOPATH=$HOME/workspace/go
export PATH=$PATH:$GOROOT/bin:$GOPATH

Googleドライブの1週間分のドキュメントをメールで送信するGoogleAppsScriptを書いた

タイトル通りのGoogleAppsScript(GAS)を書きました。 Googleドライブの中でもこのメールに添付されるものは下記の赤枠線内のものだけです。

f:id:nikuyoshi:20140819002353p:plain

Evernoteが使えないような状況だと、自分はよくGoogleドライブのドキュメントにメモを残しています。 毎週、一週間で何があったのかを金曜夜に振り返っているのですが、自分はこのメールに送られてくる覚書を参照しながら実施しています。

↓こんな感じでメールが送られてきます。

f:id:nikuyoshi:20140819004423p:plain

サンプルは添付ファイルが一つだけですが、直近一週間のものを探索して全て添付します。 GASのトリガー設定も下記のようにしています。 定時頃にメールが送られてきます。

f:id:nikuyoshi:20140819011606p:plain

MacBook Pro RetinaのSSDの容量が足りなくなってきたので掃除した

Mac

先日結婚式のカメラマンを担当してきたのですが、撮ったRAW画像をMBPにおりゃーって入れたら今までの蓄積と相まって、SSDの容量が足りなくなってきました。 いい機会だと思って今回久々に掃除しました。SSDの容量は512GBです。

↓普段はこんな写真を撮ってます。 結婚式の画像は顔が写ってるものばかりなので公開しておりません。

Hiroki UCHIDA / 500px

Flickr: Nikuyoshi's Photostream

やったこと

  • もう加工する必要のないRAW画像をTime Capsule(NAS)に移動
  • iPhoneのバックアップをローカルストレージからiCloudに保存
  • 不必要なVMイメージの削除

上記3つのことをやって、使用量が435GB→192GBまで落ちました。 普通のことしかやってません。。。

☁  ~  sudo du -gx -d 3 / | awk '$1 >= 5{print}'
23  /Applications
6   /Library/Application Support
10  /Library
5   /lost+found
6   /private/var
6   /private
6   /System/Library
6   /System
78  /Users/nikuyoshi/Documents
6   /Users/nikuyoshi/Dropbox
17  /Users/nikuyoshi/Library
29  /Users/nikuyoshi/Pictures
138 /Users/nikuyoshi
138 /Users
192 /

ついでに、RAW画像、LightroomのカタログファイルをTime Capsuleにコピーするシェルスクリプトを書きました。 Terminal起動時に下記スクリプトが起動するようにZshに設定してあります。

結婚式のカメラマンを担当したのが今回で4回目なのですが、結婚式の次の日にSSDの容量が20GB増えるとかザラです。 増え続けるRAW画像をこれからどう扱うかが最近の悩みです。 RAID組めるNASを購入するか、それともクラウド上で保存するか。。。

参考

ハードディスクの空き容量が極端に少なくなる場合の対処方法 | Apple サポートコミュニティ

「このmacについて」で表示される黄色の領域について | Apple サポートコミュニティ

OS X:「この Mac について」の「その他」の容量とは?

VMware Fusion上のCentOSがインターネットに接続できなくなった時のメモ

環境

CentOS 6.5 (Mac OS X 上のVMVMware Fusion 6.0.3 を使用。)

今回の原因と対策

/etc/resolv.conf に nameserver IPアドレス の一行が抜けていたことが原因でした。 解決した後にいろいろと調べたところ、NetworkManagerデーモンが悪さをしていたようです。 このデーモンが起動をしていると、 /etc/resolv.conf を上書きしてしまうため、使わないなら chkconfig でデーモンが起動しないような設定が必要です。

[nikuyoshi@centos01 ~ ]$ sudo service NetworkManager stop
NetworkManager デーモンを停止中:                           [  OK  ]
[nikuyoshi@centos01 ~ ]$ sudo chkconfig NetworkManager off
[nikuyoshi@centos01 ~ ]$ chkconfig --list | grep NetworkManager
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off

調査概要

ネットワーク→セキュリティ→DNSと確認していきました。

ネットワーク周り

  • ip addr showifconfigで基本的な設定が間違えていないか確認
  • VMware Fusionのvmnet8の設定確認
  • route でルーティングテーブルの確認
  • ping で通信できるか確認
  • traceroute でネットワーク経路の確認

セキュリティ周り

DNS周り

  • /etc/resolv.confの設定確認

ざっくりとした構成図

インターネットに繋げなくなるまで、下記の構成で設定していました。

調査内容

DHCPではなく、CentOS固定IPアドレスの設定をしていたため、まずCentOSのeth0の設定が変わっていないかを確認しました。 ip addr showifconfig で確認し、特に問題無いのが分かりました。 サブネットマスクも問題なし。

[nikuyoshi@centos01 ~ ]$ ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ---略---
    inet 172.16.182.3/24 brd 172.16.182.255 scope global eth0
    ---略---

次に、VMware Fusionの設定が変わっていないか一応確認しました。 ブリッジ、ホストオンリーではなく、NATで設定しています。 設定ファイルである、 /Library/Preferences/VMware Fusion/vmnet8/nat.conf を確認しましたが、これも問題ありませんでした。 一応知らない人のために補足をしておきますと、この設定ファイルにVMware FusionのNAT設定がつらつらと書かれています。デフォルトゲートウェイのアドレスが何かを確認するのによく見るファイルと認識しています。 実際のファイルの中身は下記の通りです。

# VMware NAT configuration file

[host]

# NAT gateway address
ip = 172.16.182.2
netmask = 255.255.255.0

# VMnet device if not specified on command line
device = vmnet8

...

NAT設定ファイルも問題ないということで、 CentOS上でroute を叩いてルーティングテーブルがどうなってるのかを確認しました。

[nikuyoshi@centos01 ~ ]$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.182.0    *               255.255.255.0   U     1      0        0 eth0
default         172.16.182.2    0.0.0.0         UG    0      0        0 eth0

デフォルトゲートウェイの向き先も /Library/Preferences/VMware Fusion/vmnet8/nat.conf のIPアドレスと一致しているので問題ありません。 ping 172.16.182.2 を叩いてデフォルトゲートウェイまで通信できていることも分かりました。

インターネットまでの経路がどうなっているのかを確認していなかったので traceroute 173.194.117.216 を叩いたところ、きちんとデフォルトゲートウェイを 通ってました。 はて。。。

getenforce の結果はPermissive*1だし、iptables のルールも問題なし。 ファッ!?ってなってたところ、どう考えても 途中で叩いているコマンドがおかしいことに気づきました。 なんで traceroute google.co.jp でやらなかったんだ。。。 わざわざwhoisで正引きIPアドレスを 調べる必要はなかったのに何故やっちゃったんだ。

[nikuyoshi@centos01 ~ ]$ sudo traceroute google.co.jp
google.co.jp: 名前またはサービスが不明です
Cannot handle "host" cmdline arg `google.co.jp' on position 1 (argc 1)

上記の結果から、DNS周りがおかしいことが判明したので、CentOSの /etc/resolv.conf の設定を見たところ設定が消えているのが分かりました。 nameserver 172.16.182.2 の行を追加して無事解決。 冒頭に書いたとおり、NetworkManagerの設定も変更して完了です。

DNS周りをすぐに調べる習慣があまり無いので、確認する習慣を身につけたいですねぇ。 障害対応時にもいかせるはず。

参考

*1:Zabbix ServerがCentOSに乗っていて、ポリシーを書くためにPermissiveにしています。どこかのタイミングでEnforcingに変更したいと思ってます。。。