swift2.0でStringの先頭、最後を削除する
swift2.0ではdropFirst,dropLastがなくなったのでタイトルの動作をどのようにすればよいのか調べた。
What is the most succinct way to remove the first character from a string in Swift? - Stack Overflow
こちらのstackoverflowの回答でいくつか良い方法が挙がっている。こういったユーティリティ的な動作はふたつ目の回答のようにextensionにしておくのが良い。
swift2.0からadvance関数はBidirectionalIndexTypeのadvancedByに変わっているのでそこを直すと以下の様になる。
extension String { func chopPrefix(count: Int = 1) -> String { return self.substringFromIndex(self.startIndex.advancedBy(count)) } func chopSuffix(count: Int = 1) -> String { return self.substringToIndex(self.endIndex.advancedBy(-count)) } }
JSONからモデルを自動生成する
JSONからその要素に対応したモデルを作る際に手打ちで作成するのは非常に面倒です。
こちらのJSONExportというツールはこの作業を自動でやってくれるので非常に便利です。
Ahmed-Ali/JSONExport · GitHub
こんな感じで左側にJSONを入力すると右側に指定した形式でモデルが出力されます。
対応している形式は以下のとおりです(Version 0.0.9)。
最近きているRealmだけでなくSwiftyJSONや
SwiftyJSON/SwiftyJSON · GitHub
ObjectMapperといったライブラリにも対応しています。
Hearst-DD/ObjectMapper · GitHub
個人的にはObjectMapperにお世話になっているので非常にありがたいです。
dockerでgitbucketを起動する
dockerでgitbucketを起動するメモ。
インストール
docker
Installation on CentOS
こちらの公式にある方法を使います。
sudo yum install docker-engine
インストール後dockerサービスを起動します。
sudo service docker start
このままだとdockerコマンドを使用するには毎回sudoする必要があります。回避するためにdocker groupにユーザーを追加します。
sudo usermod -aG docker your_username
docker-compose
docker-composeはdockerのシステム構成をymlで定義し、管理できるツールです。
使わなくても良いのですが、とりあえず使ってみます。
インストール方法はこちらも公式をそのまま使います。
Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
ymlは以下のとおり。
docker-compose.yml
gitbucket: image: f99aq8ove/gitbucket ports: - "29418:29418" - "8080:8080" volumes: - ${PWD}/gitbucket-data:/gitbucket
imageは
f99aq8ove/docker-gitbucket · GitHub
を使います。これでgitbucketをインストールしたイメージを作成できます。
やっていることは以下のコマンドと同じです。
docker run -d -p 8080:8080 -p 29418:29418 -v ${PWD}/gitbucket-data:/gitbucket
f99aq8ove/gitbucketイメージからコンテナを作成し、ホストの8080,29418ポートをコンテナの8080,29418ポートに転送します。
また、コンテナ内のディレクトリ/gitbucketにホストのディレクトリ${PWD}/gitbucket-dataが割り当てられます。
gitbucket起動
準備ができたのでdockerコンテナを立ち上げます。
docker-compose.ymlがあるディレクトリで
docker-compose up -d
を実行します。-dを指定するとバックグラウンドで起動します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e2a7682dcd8c f99aq8ove/gitbucket "java -jar /opt/gitb 8 hours ago Up 8 hours 0.0.0.0:29418->29418/tcp, 0.0.0.0:8080->8080/tcp gitbucket_gitbucket_1
立ち上がった後はhttp://localhost:8080/にアクセスすればgitbucketを使うことができます。
coocapodsでThere was an error reading '...CocoaPods-version.yml'.
pod install時に以下のエラーが出た。
$ pod install Updating local specs repositories [!] There was an error reading '/Users/xxxxxx/.cocoapods/repos/master/CocoaPods-version.yml'. Please consult http://blog.cocoapods.org/Repairing-Our-Broken-Specs-Repository/ for more information.
調べたところpsychというgemが悪さをしているらしい。
$ gem list psych *** LOCAL GEMS *** psych (2.0.15, 2.0.8)
バージョンがでかい方をuninstallしてみる。
gem uninstall psych -v 2.0.15
これで動いた。
$ pod install Updating local specs repositories ...
Vagrantで AWS EC2インスタンスを立ち上げる
はじめにvagantのプラグインをインストール
vagrant plugin install vagrant-aws vagrant plugin install dotenv
.envファイルに以下のようにawsの認証情報を記述する。
AWS_SECURITY_GROUPにはセキュリティグループ名ではなくIDを記述する。
AWS_SSH_USERNAME="ec2-user" AWS_SSH_KEY=xxxxxxxx.pem AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_KEYPAIR_NAME="" AWS_SECURITY_GROUP="sg-xxxxxx" AWS_SUBNET_ID="subnet-xxxxxx"
Vagrantの内容は以下のとおり
# -*- mode: ruby -*- # vi: set ft=ruby : Dotenv.load ENV['VAGRANT_DEFAULT_PROVIDER'] = "aws" VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.provider :aws do |provider, override| override.vm.hostname = "vagrant" override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" override.vm.box = "aws" override.ssh.username = ENV['AWS_SSH_USERNAME'] override.ssh.private_key_path = ENV['AWS_SSH_KEY'] override.ssh.pty = false provider.access_key_id = ENV['AWS_ACCESS_KEY_ID'] provider.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] provider.keypair_name = ENV['AWS_KEYPAIR_NAME'] provider.region = "ap-northeast-1" provider.availability_zone = "ap-northeast-1a" provider.ami = "ami-c9562fc8" provider.instance_type = "t1.micro" provider.instance_ready_timeout = 120 provider.terminate_on_shutdown = false provider.security_groups = [ ENV['AWS_SECURITY_GROUP'], ] provider.tags = { "Name" => "vagrant", "Description" => "vagrant-aws", } provider.block_device_mapping = [{ "DeviceName" => "/dev/sda1", "VirtualName" => "VagrantDisk", "Ebs.VolumeSize" => "8", "Ebs.DeleteOnTermination" => true, "Ebs.VolumeType" => "standard", }] provider.associate_public_ip = 'true' provider.subnet_id = ENV['AWS_SUBNET_ID'] provider.private_ip_address = "x.x.x.x" provider.elastic_ip = false override.vm.synced_folder "./", "/vagrant", disabled: true end end
最後にvagrant upする。
vagrant up --provider=aws