読者です 読者をやめる 読者になる 読者になる

Vultrが更にお安くなっていた

東京リージョンのある格安VPSとして有名なVultrですが、3/1に料金改定したようです。 いろいろ安くなっているみたいなのですが、気になっているところを。

www.vultr.com

最安プランが2.5ドル/月に変更

時間あたり4セント。 これまでの最安プランは、5ドルメモリ756MBでした。(Digital Oceanに比べて)

お値段据え置きでメモリ、SSD増量

5ドルプランもメモリ1024MBに増強されてます(これならjenkinsやelasticsearchといったjavaベースのアプリケーションも試せそう)

CPU4コア/メモリ8Gで、40ドルはかなりコスパいいのではないのでしょうか?

CPUあまり使わないタイプのサーバーなら、今までより1つ下のプランにするのも有りですね。 (なお、現行のインスタンスは従来通りの料金設定のようなので、一旦構築し直す必要があります。)

ソフトウェア開発手法やその隣接分野と、いわゆる文系の学問について

いわゆる文系(人文、社会)の学問に対して、それが役に立つのかという批判がよくなされる。 自分もエンジニアとして就職した後、社会科学系の知識を直接仕事に活かせた経験が正直ない。

ところが最近、ソフトウェア開発の手法やその隣接分野の元ネタいくつか知って、意外な分野にいきつくことがわかった。

文系寄りの学部を卒業した身として痛感したのは、多少かじってたことがあっても、使いこなせるかっていうのは別だなということ。

デザイン思考と現象学

経験の拡大というプラクティスは、 エスノメソドロジーをベースにしている。

文化人類学者が自分とは異なる文化に暮らしている人を観察する時に感じるような違和感を追って我々の周りの日常の世界を見る見方は、エトムント・フッサールによって提唱された現象学によって始められ、その考え方は社会研究に応用された。 ナチスの時代にヨーロッパからアメリカに亡命したアルフレッド・シュッツが日常生活の構造を研究する現象学的社会学を始め、その弟子でアメリカの社会学者であるハロルド・ガーフィンケルが、それをエスノメソドロジーというフィールドワークの方法としてまとめた。本章で紹介するエスノメソドロジーをベースにしている。『デザイン思考の道具箱』

フッサールにシュッツにガーフィンケルである。 噛み砕いて書いてあるけど、我々の周りの日常の世界=生活世界ってことか。 学生の頃、竹田青嗣の入門書をずっと読んでいて、社会システム理論の現象学的なものの見方を理解しようとかやっていたけど、こっちに活かせていれば。。。と。

この前発売した『Joy.inc』という本にも「デジタル人類学者」という単語がでてくるし、Jim Coplien『組織パターン』にも人類学的基礎という章がある。

システム思考と一般システム理論、システムダイナミクス

入門本を読んだときか、ループ図書く研修に行った時かあいまいだが、そこでローマクラブの『成長の限界』がちょこっと紹介された。あとで気になって検索してみたら

簡単にいうと、システム・ダイナミクスのうちコンピューターを使用する複雑な数学の部分を省いた手法がシステム思考> です。システム思考では、もっとも基礎となるプロセスのみを活用しますが、システム・ダイナミクスでは、問題の構造> を正しく把握しているか、検討する解決策がどのような成果を出しうるかなどを確認するために、コンピューター・モデリングを用います。

www.change-agent.jp

源流をたどれば、ベルタランフィ『一般システム思考』にいきつくとのこと。 さらに、システム思考も、システム理論の発展を取り込んでいるらしく

また、その後、生物学者のフランシスコ・バレーラオートポイエーシス理論(理論そのものは70年代)なども取り入> れられてシステム理論(システム思考)は発展してきました。

ワールド・カフェのアニータ・ブラウンも著書の中で、バレーラに言及していました。

d.hatena.ne.jp

社会システムを対象にしていて、オートポイエーシスとか言い始めたら、ニコラス・ルーマンに言及しだすまで後一歩なのでは。。。

Scrumと野中郁次郎

開発者だと、いくつかのアジャイル開発手法(Scrum/XP/Kanban/Lean等)の元ネタの一つは、トヨタ生産方式や竹内/野中論文だというのはよく耳にする。 どうも社会科学の分野では、あまり伝わってないらしいと最近聞いた。 (野中先生自身も、知らなかったと書かれてたのを見た気がする。)

blogs.itmedia.co.jp

www.publickey1.jp

スコープを削るのがストレスという話

働き方について考えたことをメモ。

前提

今の会社は、働く時間や場所をかなり自由に決められる。リモートで、出社時間も自由で、カレンダー上の休日に休まなくてもいい。 今のメインの仕事は、リリース日が固定されてないので締め切りに追われて残業するということは起こらない。 どちらかというと、調子が良い時に働きすぎることが問題だと思っている。(一緒に残業しなければならないということはない。) 一律に深夜や休日に働かないとすると押し付けになってしまうので、何かいい方法はないかなと。 いつ働くかの自由は担保しつつ、休息がとれていることが重要だと思うので

スコープを削るのはストレスになりうる

一般的には、時間を固定して、スコープを調整するのが良い方法とされると思う。 時間や予算に裁量がある場合でも、より重要なタスクに絞り込む効果が期待できるので、スコープを柔軟にしたほうがいい。

アジャイルサムライ』の「奇跡によるマネージメント」のくだりの直前に書いてある。

プロジェクトの作戦として、固定した期日を優先するにせよ、中核となるフィーチャのまとまり(フィーチャセット)の提供を優先するにせよ、スコープは柔軟にできるものと捉えておくことが重要だ。
計画を実現可能な状態に保ち続けるには、君とお客さんとがこの考えに慣れ親しんでおく必要がある。
これは開発チームが自ら手に余ることを企ててしまう事態に陥ってしまわないためにも必要な考え方だ。

Be Lazyとはこういうことだと思っている。

simplearchitect.hatenablog.com

simplearchitect.hatenablog.com

ただ、やることが減って楽になるかというと、必ずしもそうならないと思う。 「やりたくない、つらい仕事」の場合は心理的にも楽になるだろう。 問題は「やりたい、おもしろい仕事」の場合である。 特に時間の設定に裁量がある場合は、目標を変更するほうが大きなストレスになる。

モチベーションが高い時に、途中で切り上げようと介入するのは無粋だとも思う。 steve_yeggeのエッセイに、読み返していたら(アジャイル良い悪いは置いといて)結構共感した。

いいアジャイルと悪いアジャイル

現実世界においては、プロジェクト関係者の1人ひとりが人間であるということがわかる。
私たちには調子のいい日も悪い日もある。ときにはエネルギーが満ちあふれ、18時間ぶっ通しでコードを書けると感じる。
ある日には、エネルギーはあるが、コーディングに集中する気にならないということもある。ある日にはすっかり疲れ切っている。
みんな生物時計とバイオリズムを持っており、それについて自分ではほとんどコントロールすることができない。
そしてその時計は、チームの時計が日とか1週間の半分といった単位で動いている場合には、チームの時計とずれがちなものなのだ。

個人的な時計については言うまでもない。仕事以外の生活でも様々な出来事が起り、仕事時間中に注意を向ける必要が出ることもある。

これらはどれも悪いアジャイルでは問題とされない。
大きな納品のあと、気持ちが高揚していても、狂ったようにコーディングしようとはしないだろう。
次の大きな全力疾走に備えてエネルギーを貯めておく必要があるので、少し安静にしていようと思うのだ。
このインピーダンスミスマッチにより、優れたエンジニアが並の働きしかできなくなる。

心理的に負荷が少ない形で、自然に調整ができたらいいのだけど、しっくり来る方法が見つからない。

見積もりして、毎朝残り時間確認してバーンダウンチャートひいてみたいなのはちょっとしんどい感じがする。

ただ、時間を伸ばすとスコープの調整タイミングがわかりづらくなるので、働くタイミングは自由でも、総労働時間は一定のほうがいいと思う。 勤務時間インターバル制とか、土日働いたら月曜代休みたいなことも考えたけど、いまいち守れる気がしない (ノー残業デーが機能しないのと同じ感覚で、だんだん形骸化してしまいそう。。。一々言挙げするのも押し付けがましい)

今できそうなのは、動いてないタスクを目立つようにして、数日動いてないものは、チケットを分割するか目標を下げるとかかな。

好きなアニメについて書いてみたらとアドバイスを受けたので

一挙に軽い話題

今期はまだアニメ見ていない気がする。 書き出してみたら、作品数はそこそこだけど、続きを見れてないのが大半である。

年末にデレマス、正月にFGOを始めて、艦これの備蓄を再開したため、そっちに時間取られているのが大きい。 また、今期は、学園恋愛もの増えた印象だったのも影響してる気がする。

セイレン

二話のみ視聴。実に紳士だと友達と話しながら見るのがいい。

あやねるが恋愛もののヒロインやるの新鮮な気がする(たぶん全然そんなことはないはずなのだが。) 「デース」で笑ってしまった。

うらら

きらら枠 卓球娘楽しかったので、中の人つながりでうらら観てる。opがなんかもにょもにょする。 セイレンの紳士ネタは楽しめるのに、こちらのお腹推しはどうも乗り切れないのはなんでだろう。 かやのんのキャラがアリシアさんっぽいのだが、意識してるのかな。

メイドラゴン

卓球娘つながりその2。

政宗くんのリベンジ

小十郎くんかわいいですな。

このすば2

まだ見れてない。

信長の忍び

前期スルーしてたけど、テンポ良くて面白い。 opは前期のほうが好きだな。

書き出してみて

アニメ観るの好きな割に、(小並感)ってつけたくなる文しかでてこない。 話数ごとのレビューみたいなのが書けたらよかったのだけど。

箇条書きメモ以上に長い文章を書けないので練習を始める

とにかく文章を書くのが苦手だ。読ませるとか、わかりやすいとか以前に、絶対的な量が足りない。 1つの段落あたり3文以上つけるのが苦痛で、日々の技術文章ですら出来上がる頃に定時近くになっている。

自分が書きたいテーマについて、内容はともかく、2~3時間以内にそれなりの量を生成できるようになりたいと思う。

手始めに、正月あたりからtwitterでつぶやくのを再開した。短い文ならいけるやろという安直な理由。 ずっと書いてないと1行つぶやくのすらつらくて結構へこんだ。 2週間ぐらいしたら、1日2~3ツイートぐらいなら大丈夫になってきてる。 そろそろ次の段階に進みたい。

何が原因なのか列挙してみる

今まで苦手ななりに、メジャーな文章術は読んだし、たくさん本を読みましょうみたいなアドバイスは一通り試した(と思っている)

それなりに本は読んできたから、書こうと思っている分量にたいして、情報のインプットが足りていないということはなさそう。どちらかというと、引用だらけになって、自分の主張がなくて詰むことが多い。

箇条書きはできるのだから、論理構成を考えるのが壊滅的にだめってことはないと思っている。(この文章はめちゃくちゃだが。。。)

筋を書いて肉付けしている力尽きるというか。

いろいろ悩んできた末に、ひとつ仮説があって、小さい頃に「難しい言葉を使うな。簡単な言葉で説明しなさい」言われたというのが結構ボトルネックになっている気がする。

たとえば、↑の文章を書き出す時に、「衒学な文章」という言葉が思い浮かんだけど、それを「難しい言葉」と脳内で置き換えてからタイピングしている。実際の読み手が衒学という言葉を理解しないとは思ってないが、すべての熟語やカタカナ語に対してこの処理にリソースが割かれているとすると、結構負担になっているのではないか。

大人の話に首を突っ込んで生意気だと怒られる年齢でもないし、難解な語彙を使いこなせるから偉いみたいに思ってるわけでもない。とにかく考えたことがスムーズにでてくれば、形式は問わないわけで、鼻につくところは書いてから直せばいいやぐらいに思ってやっていくことにする。

ここまで書いて力尽きた。。。

Windows7+Cygwinな環境からvagrant-aws使ってみた。

経緯

DockerとかAlminiumとか試したいものがいろいろあるのだけど、たいだい64bit版OSでないと入らなくなってきてる。 自宅のPCは一応64bitマシンなのだけど、vt-xが有効にできないため、仮想環境で64bitOS使えない

なるべくお金かけずに出来ないかなと考えた末 昨年もらったAWSの無料利用枠の期限が迫ってきてるのを思い出したので、使ってみることに。

やり方

naoyaさんの記事を参考に

Vagrant 1.1 で EC2 を vagrant up - naoyaのはてなダイアリー

Vagrantの公式サイトからwin版を落としてきてインストール

# awsプラグイン
$ vagrant.bat plugin install vagrant-aws
# 適当にディレクトリを切って移動
$ mkdir -p ~/work/aws && cd ~/work/aws

$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
$ vagrant.bat init
$ emacs Vagrantfile

バージョンアップしてVagrantfileの鍵の指定方法が微妙に変わってたのでこちらを参考に修正 vagrant 1.2を使ってみる - Qiita

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id     = ENV['AWS_ACCESS_KEY_ID'] 
    aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
    aws.keypair_name = "ec21" #先にWeb上でKeyPairを生成するか、インポートしておく必要あり

    aws.ami = "ami-0d13700c"
    aws.availability_zone = "ap-northeast-1a"
    aws.region = "ap-northeast-1"
    aws.security_groups = ['test'] #先にWeb上でセキュリティグループを設定する必要(sshのポートあけないと繋げない)
    aws.instance_type = "t1.micro"

    # ログインユーザーと秘密鍵の指定部分
    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "~/.ssh/ec21.pem"
  end
end

アクセスキーを環境変数に設定するスクリプト

env.sh

#!/bin/bash
export AWS_ACCESS_KEY_ID=<アクセスキーID>
export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー>

加えて、cygwin環境だとvagrant upの最期に共有ディレクリをつくろうとしてエラーがでる。 sudoerの中で、requirettyされてるため

vagrant-awsを使う際はuser_dataを設定してみよう - akadama vagrant-awsでmkdir -p /vagrantで失敗する - あんこの成長記録

強引だけど適当にソースいじってmkdirしないようにしてしまった。

$ emacs ~/.vagrant.d/gems/gems/vagrant-aws-0.4.1/lib/vagrant-aws/action/sync_folders.rb 

 50            # on windows rsync.exe requires cygdrive-style paths
 51            if Vagrant::Util::Platform.windows?
 52              hostpath = hostpath.gsub(/^(\w):/) { "/cygdrive/#{$1}" }
+ 53              return

実行

$ sh env.sh
# 立ち上げ
$vagrant.bat up --provider=aws

# 接続
$vagrant.bat ssh

# 止める(インスタンスを消すとき) cygwinからだと--forceをつけないととまらないっぽい
$vagrant.bat destroy --force
 

cygwinだと、vagrant upでなくvagrant.bat upを実行しないと証明書関連のエラーがでる。

An error occurred while executing multiple actions in parallel.
Any errors that occurred are shown below.

An unexpected error ocurred when executing the action on the
'default' machine. Please report this as a bug:

Unable to verify certificate, please set `Excon.defaults[:ssl_ca_path] = path_to
_certs`, `ENV['SSL_CERT_DIR'] = path_to_certs`, `Excon.defaults[:ssl_ca_file] =
path_to_file`, `ENV['SSL_CERT_FILE'] = path_to_file` or `Excon.defaults[:ssl_ver
ify_peer] = false` (less secure).

C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/ssl_socket.rb:76:i
n `connect'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/ssl_socket.rb:76:i
n `initialize'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/connection.rb:373:
in `new'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/connection.rb:373:
in `socket'
C:/Users/malmrashede/.vagrant.d/gems/gems/excon-0.28.0/lib/excon/connection.rb:122:
in `request_call'
(略)

感想

週に2~3時間起動する程度だったらVPS借りるより安くすみそう。 $0.020 /1 時間だから 1ドル=100円 1ヶ月5週として 0.020 * 3 * 5 = 3ドル 300円程度

ServersMan@VPS(490円/月)

digitalOceanも気になる。 徳丸浩の雑記帳: 試験環境用VPSとして1時間1円から使えるDigitalOceanが安くて便利

絶対パスでrequire_onceしているクラスをなんとかテストする

php

状況

パフォーマンス最適化でrequire_onceのパス指定を絶対パスにしている場合、 phpUnitでテストする際に呼び出しにくい。

指定先にファイルを置くのが自然だけど、sudo権限持ってないと置けないパスだったり、修正のたびに配置し直す必要があったり意外と面倒。

そこで、強引だがテスト前に外部コマンドでrequire_onceをコメントアウトすることにした。 これで、tmp以下のファイルをrequire_onceすれば、元のクラスを呼び出すこともできるし、テストダブルを差し込むことも可能になる。

サンプル

絶対パスでrequire_onceしているクラスをなんとかテストする

参考