タグに紐づくdockerイメージとインスタンスを削除するシェルスクリプト

#!/bin/bash

#
# タグに紐づくdockerイメージとインスタンスを削除する
#

export TAG=$1
if [ -z ${TAG} ];then
        export COMMAND=`basename $0`
        echo "usage: ${COMMAND} <tag>"
        exit 1
fi

export ACTIVES=`docker ps | grep ${TAG} | wc -l | awk '{print $1}'`
if [ 0 -ne ${ACTIVES} ];then
        echo "active instances:"
        docker ps | grep ${TAG}
        echo ""
        echo "Abort."
        exit 1
fi

docker ps -a | grep ${TAG} | awk '{print $1}' | xargs docker rm
docker rmi ${TAG}

JavaScript版getDividedList

    var getDividedList = function(list, each_size) {
        var divided_list = [];
        var quotient = Math.floor(list.length / each_size);
        var remainder = list.length % each_size;
        for (var i = 0; i < quotient; i++) {
            var offset = i * each_size;
            var sublist =  list.slice(offset, offset + each_size);
            divided_list.push(sublist);
        }
        if (remainder > 0) {
            var offset = quotient * each_size;
            var sublist =  list.slice(offset, offset + remainder);
            divided_list.push(sublist);
        }

        return divided_list;
    };

Windows上のVagrantでプロバイダにHyper-vを使用する(Hololens開発とか)

Hololensの開発用PCで、VagrantLinuxサーバを立てたいとき、Hololensエミュレータの実行にはHyper-vが必要だが、VagrantVirtualBoxで動かすと競合して動かないという問題が生じた。

VagrantのプロバイダをHyper-vにすると解決する。

以下はその手順。※CentOS 6なのは7で採用されたsystemctrlが好みじゃないから
$ vagrant box add centos/6
プロバイダ一覧からhyper-vを選択する

ちなみにHyper-vのネットワークスイッチの設定に日本語のスイッチ名があると文字コード問題でコケるので、英語のスイッチを追加してやる

Vagrantfileをつくる
$ vagrant init centos/6

共有フォルダはNFSをつかうのでプラグインを入れる
$ vagrant plugin install vagrant-winnfsd

Vagrantfileで共有フォルダのパスを指定するとき絶対パスを指定する
config.vm.synced_folder "C:\path\to\myfolder", "/vagrant", type: "nfs"


vagrant upするときは必ず--provider=hypervを指定する
$ vagrant up --provider=hyperv

xmllintでwell-formed XMLかどうかチェックする

xmllint --noout <filename>

Vagrantで古いboxファイルを使うと/vagrantがマウントエラーになる件

Vagrant 2.0.1 にアップデート後、vagrant init bento/centos-6.7 を実行したら、/vagrantをマウントできないというエラーが出た。

==> default: Mounting shared folders...
    default: /vagrant => /path/to/my_vagrant_dir
Vagrant was unable to mount VirtualBox shared folders. This is usually
(略)

原因はVagrant環境のカーネルバージョンが古いため。

vagrant sshでログイン後、yumコマンドでkernerアップデートして再起動したら治った。

vagrant ssh
[vagrant@localhost ~]$ sudo yum update kernel
[vagrant@localhost ~]$ exit
vagrant reload

vagrant+unicornで立ち上がらない件

vagrantでホストのディスクをマウントしているところに
railsのコードを置いて、unicornを立ち上げたら.sockファイルが作れなくてエラーになった。

config/unicorn.rb の .sock ファイルのパスを /tmp 配下に変えたらちゃんと動いた

/etc/nginx/conf.d/rails.conf

upstream unicorn {
    server  unix:/tmp/unicorn.sock;
}

server {
    listen       8080;
    server_name  localhost;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    root /home/vagrant/myapp/public;

    client_max_body_size 100m;
    error_page  404              /404.html;
    error_page  500 502 503 504  /500.html;
    try_files   $uri/index.html $uri @unicorn;

    location @unicorn {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://unicorn;
    }
}

{rails_root}/config/unicorn.rb

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

listen '/tmp/unicorn.sock'
pid    '/tmp/unicorn.pid'

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end 

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

stderr_path File.expand_path('log/unicorn_stderr.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn_stdout.log', ENV['RAILS_ROOT'])

PythonでURLエンコードされたテキストをデコードする

cat encoded.txt | python decode.py みたいに実行する

# -*- coding: utf-8 -*-

import urllib.parse
import sys

for line in iter(sys.stdin.readline, ""):
  print(urllib.parse.unquote(line), end='')