しまてく

学んだ技術を書きためるブログ

Mac上のVM(ubuntu)でdockerを使ってGitLabを立ててみる。

VMvagrant使って立ててみる。

ここのところ猫も杓子もvagrantかdockerですよ。便利ですからね。
ということで今回はvagrantubuntuを起動させてその上でdockerを使いたいと思います。*1

まずはvagrantのインストール

http://qiita.com/moomoo-ya/items/30f9ffdb7dd34caf9ec0

brew cask install virtualbox
brew cask install vagrant
brew cask install vagrant-manager

超簡単です!

vagrantubuntuを動かす

ubuntuのイメージを持ってくる

http://www.vagrantbox.es/
ここから欲しいものを選びます。

今回は ubuntu 15.04 をチョイスしました。

vagrant box add ubuntu15_04 https://github.com/kraksoft/vagrant-box-ubuntu/releases/download/15.04/ubuntu-15.04-amd64.box
VM用のディレクトリ作成する
mkdir gitlab_ubuntu15_04
cd gitlab_ubuntu15_04
ダウンロードしたイメージでVMを作成、起動する
vagrant init ubuntu15_04
vagrant up

停止したいときは「vagrant halt」、破棄する時は「vagrant destroy」ですね。

今回はプライベートIPアドレスで動かす設定を入れる

vagrant initでできたVagrantファイルの中の以下の行のコメントアウトを外します。

config.vm.network "private_network", ip: "192.168.33.10"
設定を変えたら再読み込みをする
vagrant reload

おや、なんか怒られた。

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

stdin: is not a tty
mount: unknown filesystem type 'vboxsf'
ぐぐったところVirtualBoxのGuest Additionが合ってないらしい

http://www.task-notes.com/entry/20150714/1436842800
ここを参考にvagrant pluginを入れてみます。

vagrant plugin install vagrant-vbguest
vagrant reload

今度は怒られないのでオッケー。

docker / docker-composeをインストールする

vagrant ssh

で作ったインスタンスに入ります。

https://docs.docker.com/compose/install/
に従ってインストールをしていきます。 (ここの過程は省略)

vagrant@vagrant-ubuntu-trusty:~$ docker --version
Docker version 1.9.1, build a34a1d5
vagrant@vagrant-ubuntu-trusty:~$ docker-compose --version
docker-compose version: 1.5.1

ちゃんとインストールできました。

dokcer-composeでGitLabをインストール

docker-composeを使って必要なコンテナを一気に構築

http://codeout.hatenablog.com/entry/2015/08/21/012706
このエントリを参考にしてインストール。

docker-composeは関連するコンテナを一気に起動することができる便利なものです。
これがないと、このコンテナを起動してからこっちを起動して、、、というような面倒があります。

(ubuntu上で)

$ curl https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml > gitlab.yml
$ docker-compose -f gitlab.yml up -d

「-d」を付けてバックグラウンドで動作させます。

動いているか確認

http://192.168.33.10:10080/
にアクセス。

無事起動成功したようです。

初期アカウントは以下のものです。

ID:root
PASS:5iveL!fe

ログイン後、別途ユーザーを作り、レポジトリ作成、clone/push/pullちゃんとできました。

*1: docker-machineを使ってdocker使うのもあるけど結局は同じなので今回はvagrantで。

Windows向けパッケージマネージャーchocolateyを導入してみた

はじめに

LinuxMacをつかっているとyumやらaptやらHomebrewやら便利ですよね。

Windowsに戻った時に何かをインストールするときにどうしても

  1. 公開しているサイトに行き、インストーラをダウンロード。
  2. インストーラを実行する。
  3. 不要になったら「プログラムと機能」からアンインストール。

という手順があって面倒くさいです。

ということでWindowsにもパッケージマネージャーがあるといいですね。

そこでchocolatey

https://chocolatey.org/
f:id:cimadai:20151128214605j:plain

公式ページにある通り、コマンドプロンプト

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

と打つだけでchocolateyがインストールされ、chocoコマンドが使えるようになります。

かわいいですね、chocoコマンド。

あとは choco install gitとか、choco install golangとかやりたい放題です。

「-version」をつけると特定のバージョンをインストールすることもできます。

いまのところ登録されているパッケージは約3000ほどあり、大抵のものは揃っている感があります。

drone.ioでBitbucketと連携してGoをビルド&テストしてみた。

こんにちは

実に3年ぶりにBlogを再開してみました。 *1 

文章を書く、というリハビリもかねてゆるゆると技術情報ネタでまた
ブログを書いていこうと思います。

ということで再開記念の第一回目は drone.ioを使ってBitbucketに登録している
プライベートリポジトリをビルド&テストしてみようと思います。

*1:昔書いていたはてダ  http://d.hatena.ne.jp/cimadai/ 

続きを読む

MacOSXでAndroid向けにC++をクロスコンパイルする

最終的にうまく行ったやりかた

以下のモジュールをインストール。
sudo port install gmp
sudo port install mpfr
sudo port install mpc
sudo port install ppl
sudo port install arm-none-linux-gnueabi-binutils
sudo port install arm-none-linux-gnueabi-gcc
ロスコンパイルする。
arm-none-linux-gnueabi-g++ --static -o helloworld ./helloworld.cpp
helloworld.cppの中身。
#include <stdio.h>

int main() {
	printf("Hello World!\n");
	return 0;
}
fileコマンドで見てみる。
file helloworld

helloworld: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.4.17, not stripped
実機に転送
adb push helloworld /data/tmp

※実機の「/data/tmp」はあらかじめ作ってあり、ユーザーに書き込み権限があります。

実機で実行
adb shell
$ cd /data/tmp
$ ./sample
Hello World!

ふむ。

試行錯誤

初め「arm-elf-gcc」を使っていたのですが、これがまずかったようでリンク先の3にあるように「[1] Segmentation fault」が出てしまいました。

これを「arm-none-linux-gnueabi-gcc」を使うことでちゃんと実行できるようになったのでオーライですね。

以上。

weinreでリモートデバッグ

JSテクニックバイブルの勉強会でさらーっと触れた後に本家を見てみたらいくつか
変更点があったのでキャッチアップの目的でまとめてみました。

wenireとは

wenireはWebアプリケーションをリモートデバッグするためのツールです。
裏の通信にはWebSocketが使われており、主にスマートフォンブラウザにおける
リモートデバッグを便利に行う事を想定して作られています。

wenireという名前は「Web Inspector Remote」の頭文字から命名されていて、
読み方は公式によると「ワイナリー」か「わいなー」かどちらかのようです。

インストール

npm

Node.jsがインストールされていてnpmが使えるぜ!という方はnpmインストールできます。

sudo npm install --g weinre
バイナリパッケージ

Node.jsはインストールしてないよ!とかどこでも動かしたいからバイナリがいい!という方はこちらの
バイナリパッケージの方法でインストールします。

ダウンロード先

http://people.apache.org/~pmuellr/weinre/builds/

上のURLから欲しいバージョンのファイルをダウンロードします。
ファイルにはjarファイルとMac用のappバンドルがありますが、オプションを指定するためにはjarが必要なので
迷わずjarを落としておけばいいと思います。

インストールといってもzipを解凍するだけですので適当な場所に配置してください。


あ、jarなのでJava*1が必要です。

使い方

wenireサーバーの起動

まずはリモートブラウザを待ち受けるためのwenireサーバーを起動します。
以下の例はサーバーのIPアドレスが192.168.0.4の場合の例です。

  • npmでインストールした場合
weinre --boundHost 192.168.0.4 --httpPort 8888
  • jarファイルの場合
java -jar weinre.jar --boundHost 192.168.0.4 --httpPort 8888

サーバーが起動したら、「http://192.168.0.4:8888」にアクセスすればこんな画面が表示されます。

各項目について見ていきましょう。

サーバーの各項目



書いてある通り、「http://192.168.0.4:8888/target/target-script-min.js#anonymous」をページに埋め込むと
weinreでリモートデバッグが可能になります。

「#anonymous」の部分はweinre側で相手を識別するための一意な名前になっていて、アプリケーションごとに
デバッグのチャンネルを分ける、というような場合に利用します。


デバッグしたい対象のページが自分の管轄外、というような場合でもブックマークレットを使えばリモートデバッグ可能になります。

スマートフォン上のブラウザではブックマークレットが使えるものと使えないものがあるので注意してください。

weinreサーバーへのアタッチ

特にスマートフォンである必要もないのですが、ここではあえて手持ちのAndroidでやってみます。

  • まずデバイス側のブラウザで「target demo」ページにアクセス。(minifyの有無はどっちでもいいです)


  • するとweinre側の「debug client user interface」にアクセスしたブラウザが表示されます。


  • ここで例えばalertをしてみると...


alert("This message shows from weinre console!");
  • デバイス側ではalertが表示されます


  • DOM要素に対してstyleの変更をしてみると...


document.getElementsByClassName("blue")[0].style.color = "yellow";
  • ちゃんと変わっています

まとめ

もちろん、DOM要素のインスペクトやconsole系のAPIも使えるので
「気になる要素をインスペクトして直接DOM編集」とか
「ガシガシログを出すようにしてweinreで確認」という事が簡単にできちゃいます。

スマートフォン向けのWebサイトを作る場合に、実機でのデバッグにはめちゃめちゃ便利なのでぜひ使ってみてください。

*1:あなたとJAVA、30億のデバイスで走るJava(http://java.com/)

誕生日を迎えました。

9/6で28歳となりました。

学生の頃思っていた28歳は大分オッサンで、いろいろくたびれているかと思ってました。

いざ自分がなってみると自転車買って走りまくったりダイビングしたりスノボしたり、
書籍の執筆をしたりとかなり充実*1していて驚きです。

28歳の一年はさらに加速していろいろとチャレンジしていきたいと思います。

みなさんにお願い

さて、今日は僕の誕生日です。
誕生日と言えばプレゼントです。

でもプレゼントはいらないので代わりに『JavaScriptテクニックバイブル』を買ってくれるとすごく嬉しいです!!

それでは

みなさん今年も一年よろしくお願いします。

*1:あとは彼女がいればリア充

「JavaScriptテクニックバイブル」を執筆しました。

お久しぶりです

しばらく日記も書かず、若手IT勉強会も開かず、他の勉強会にも参加せず。
めっきりIT界隈のアクティビティが下がっておりました。


それもこれも決して遊び惚けていたわけではなく、タイトルにありますように
JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技」という
書籍を執筆させていただきました。

ちょっと振り返り

4年前から細々と続けている若手IT勉強会では、その名の通り若手を中心として
主にJavaScriptを主テーマとして各種書籍を読んだり、コードリーディングを
したり、時にはハッカソンをしたりと活動してきました。


その中で早期から若手IT勉強会に参加してくれていた、すがまさおさん(@sugamasao)
の紹介で技評の方とお会いする機会を得ました。


そこからは一気に物事が進んで、若手IT勉強会のメンバーで今まで得た知識や
Web上の各地に散らばっている情報をまとめた本を作ろう、という事になりました。


現在JavaScriptの本は非常に溢れており、初級者用・中級者用・上級者用と
様々なレベルをカバーした書籍がありますが、最新に追随した情報で、かつ
広く散らばった情報を実用的なレベルでまとめた書籍はなかったと思います。

本の内容の紹介

この「JavaScriptテクニックバイブル」は、
「開発環境」や「各種デバッガの使い方」 「デバッグ手法の紹介」といった初心者向けなレベルから、
ユニットテスト」 「カバレッジ計測」「Jenkinsとの連携」といった開発する上で必要不可欠な情報、
「prototypeオブジェクト」や「オブジェクト指向」「スコープ」など関数にまつわるテクニックや、
「クロスドメイン通信」や「WebSocket」「ServerSentEvents」「画像の事前/遅延読み込み」など
ネットワーク通信に関する事柄、パフォーマンス改善などなど、中上級者でも楽しんで頂けるような
構成になっています。

書いた人

本書の執筆は、私(嶋田 大輔 @cimadai)の他、中村 真人(@masahito) 氏、
池 徹(@rokujyouhitoma) 氏に本書の内容の案出しから執筆、校正まで協力していただきました。
また、岩永 賢明(@kiris) 氏、浜辺 将太 氏、藤木 祐介 氏には締め切りの窮地を救ってもらいました。

この場であらためて感謝します。

読んで欲しい人

この本は上でも触れた通り、初心者から中上級者まで広く楽しんでいただけるのではないかと
思っています。それを踏まえた上で、主な対象としては以下の方をメインにしています。

  1. JavaScriptの入門書(サイ本とか)を読み終わり、実践的なことを始めようと思っているエンジニア
  2. JavaScriptを普段業務で使っている1年目から2年目のエンジニア
  3. 普段なんとなくjQueryを使っているエンジニア

上記以外でもただJavaScriptに興味がある人や、執筆陣に物申したい人など多くの方に読んで
いただければ幸いです。


JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技」は8月31日に発売予定と
なっています。皆様ぜひ読んでみてください。よろしくお願いします。

JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

レビューをして頂いた方のエントリ

@sugyan
http://d.hatena.ne.jp/sugyan/20120831/1346347998

@hagino_3000
http://d.hatena.ne.jp/hagino_3000/20120906/1346866998

誤植や間違いを見つけた方へ

Twitterで@cimadaiに報告頂ければすみやかに確認して正誤表を作りますのでよろしくお願いします。