投稿者「krote」のアーカイブ

試験をいったんあきらめた

昨年末のAmazonで行われていたKindle書籍に対するセールでこんなものを買っていたんですよ。

情報処理教科書 プロジェクトマネージャ 2014年版
翔泳社 (2013-09-18)
売り上げランキング: 14,189

特別に必要とされているわけではないんだけど、持っていてもいいかな~と思って、
春の情報処理試験を受ける気でいました。

もう、応用情報を取得したのがずいぶんと前になるので、午前試験最初からの受験になります。
このあたりの問題は、普段の業務で行っていることからするとかけ離れている分野も多いので
一度勉強したこととはいえ、かなりの部分が忘れています。

さしあたって、毎日の通勤で午前問題の問題集向けのアプリを使って勉強。
週末に論文の対策として先に書いたKindleの試験本を用いて行うことにしたのですが…

 

週末無理

 

エントリーを書いていないのでここでは初めて書くことになりますが、
1月に4人目の子供が生まれました。

基本的に妻は産休なので家にいることになるのですが、まだ小さいのも含めて3人が他にいるので
さすがに手が回らない。
長男はもうすぐ小学校に行く年齢なのである程度話は聞いてくれますが、
それでも下の子の面倒を見るにも限界があります。

平日の朝晩はもちろん、土日も基本的には子供中心とした生活が続くことになります。
子供が遊びたいといえば遊ぶし、寝るときは一緒に横になる(そして時々自分も寝落ちする)

 

もちろん、やりようによっては時間を捻出することは出来ると思うのです。
ハードといえばハードですが、無理ってわけじゃない。

問題なのは、試験・資格に対しての気持ちの面がやはり大きい。
もともとの動機が適当なので、それを維持するということもなかなか難しい

無理やり自分で動機づけを作るのが一番確かな方法なんだけど、
今回はそれ以上に私生活面でやることが出来てしまったので、もういいやと。

また、期を見て受けることにしましょう。
せっかく試験対策の本やアプリは手に入れたのでそれはそれで暇つぶしにやるのはいいかもしれないけど。

残る人

気が付いたらもう2月。
2015年最初のエントリーが2月というところが何とも言えないけれど、
最初のエントリーとか抱負みたいなものとは関係ないお話しを。

私はこれまで転職もせずに今の会社でずっと働いている。

15年近くも働いていれば、直属の上司が会社を辞めたりすることも何度か経験したし、
直属の部下やチームメンバーが会社を去っていくことも何度も経験した。

退職のカミングアウトは何度経験してもいいものではないし、急に神妙な面持ちで

「ちょっとお話があるのですが」

みたいな会話の切り出し方をされると正直気持ちがダークサイドに落ちてしまいそうになる。
何かしらの予兆が感じられればいいが、大抵は私にとっては急な話として感じてしまうことが多かった。

そのたびに、自分にガッカリする

一方で、別れ際というのはずいぶんとあっさりしたものだったりする。
もう、ほんと、あっさり。
テレビで見るような壮行会のようなものを行うこともあるが、熱い類の感じはしない。

 

まぁ、何で急にこんなエントリーをしているのかというと、今日、最終出勤日だったメンバーがいたのだ。
仲間内で連れ立って最後に焼肉でも行くようなことを行っていたが、特に誘われてもいないので声はかけなかった。

誘われてもないのに顔を出すというのは、それはそれでウザい感じもするが、
でも一方ではそれだけ思い入れが強いようにも感じる。
そこのところを行動しなかったのは、自分で結局のところその程度だったということなんだろうか。

 

会社を去っていった人たちとのコンタクトは、先方からされない限り、見つけてもこちらからはしないようにしている。
いつまでも上司づらするなよ!って見られるのが嫌だから・・・という気持ちも確かにあったのだが、
単純にどこかでずいぶんとあっさりとした線を引いてしまっているのかもしれない。

 

つまるところ、自己中心的なわけだ。
ずいぶんと面の皮が厚くなったものだなぁ

2014年が終わります

最近はすっかりブログを書くことから離れてしまっていますが、
気がつくと12月最初のエントリーが今年最後のエントリーとなってしまいました。

皆さんにとって2014年はどんな年だったでしょうか。

思い起こすと今年の前半は北海道に出張したりシリコンバレーに研修行ったりと、
仕事の上では普段ない経験をすることができました。

いろいろなことがあったにはあったのですが、正直、自分として何が成長できたのか?と言われると答えに窮するところもあったりします。
結構、遊んでばかりだったかなぁという気もします。

最近はなかなか休日に家を開けることも難しく、また出不精気味になってしまってマラソンもしておらず、
完全にスマホゲームが趣味な状態であります。
趣味といえばまぁそういうのも無しじゃないよねとは思うものの、年の瀬に振り返ると幾分もうちょっとなんかあったんじゃないかと思えてきます。

とりあえず、読みかけになっている本をこの休みのうちに読んでおきたいな。

エッセンシャル スクラム
翔泳社 (2014-08-01)
売り上げランキング: 1,617

Amazonのセールで買ったこの本。
結構面白く読んでいます。

考えてみると、自分の計画というのもこうやって年の瀬になってやっと振り返るのではなく、もう少し短かくスプリントとして考えて計画してみるのも面白いかな?と思い始めています。

2015年は正直いろいろなことが予定されすぎていて、不安とかを通り越えて少し麻痺状態。
激動の年になることだけは間違いないので、うまいこと、年末に美味しいご飯が食べられるように
頑張っていきたいところです。

皆様も良い年を!

Amazon Kindle本セールで幾つか購入

すっかり更新が滞ってしまっていますが、一応生きています。

Amazon で、Kindle本のセールをやっていました
最大50%OFF お買い得セール

特にテーマが決められている訳でもなく種々雑多な本が対象となっています。
熟々と見ていて、ココのところすっかり本を読んでいないな〜と思い、幾つか購入してみました

エリック・エヴァンスのドメイン駆動設計
翔泳社 (2013-11-20)
売り上げランキング: 16
エッセンシャル スクラム
翔泳社 (2014-08-01)
売り上げランキング: 57
1分間マネジャーの時間管理
パンローリング株式会社 (2013-02-17)
売り上げランキング: 1,301
情報処理教科書 プロジェクトマネージャ 2014年版
翔泳社 (2013-09-18)
売り上げランキング: 14,189

続・Windows10 Technical Preview

なかなか落ち着いて触ることが出来ていません。
というわけで、少しだけですが気が付いた点を。

タスクバーにデフォルトでいくつかアイコンが並んでいたのですが「Task View」という見慣れないものがありました。

20141006_01

押すと上記のような画面になって、「Add a desktop」という+印のボタンがあるのみです。
最初、何のことかわからなかったですが、タスクごとに独立したデスクトップ環境を作ることが出来るんですね。

 

20141006_02

こんな感じに。

自宅のMacでは、OSXに似たような機能が付いているので通常用途のデスクトップと開発用のデスクトップで分けてあったりします。
出来れば、再起動後も起動してるアプリをそれぞれのデスクトップに振り分けた形で起動してほしかったのですが、そこまでは出来ていませんでした。

まだ Technical Preview なので、今後どういう形に進化していくのか楽しみですね!

Windows の機能有効化・無効化内に、「EdgeCP model for Config 1.5(en-US)」という見慣れない機能がありました。

20141006_03

しかも、デフォルトでONです。
”en-US”が付いているので、言語に関係したものだとは思いますが、これに関してはイマイチ情報がわかりませんでした。

試しに外してみたけれど、軽く触った程度ではどこが変わったのかはわからず。
なんでしょうね。

Windows10ばかりに目が行ってしまいがちですが、Windows Server の次バージョンも Technical Preview が出ていました。

TechNet Evaluation Center
http://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-vnext-technical-preview

ぱっと眺めた程度しかまだ見ていませんが、役割に見慣れないものがいくつか見えたので、内容を今度確かめれればなぁと思っています。
ただ、Windows Server の新機能ってそんなに使わないんですよね、私は。

もう少し、新機能をいろいろと生かした会社での運用を考えることが出来ればいいのですが、実際にあれやこれやするとなると、
どうしても今ある資産や会社内での決まり事なんかがあって面倒になってしまいがちです。

Windows 10 Technical Preview を Vagrant で起動させる

先日公開され、早速インストールしてみた Windows 10 Technical Preview ですが、
あれこれと試してみた後で手軽に元に戻したいです。

もちろん、仮想化環境で作業を行っているので、そんな時はスナップショットをとればいいのですが、
それでは少し面白みに欠けるので、Vagrant で立ち上げられるような状態にしてみたいと考えて試みました。
というか、それが目的で Virtual Box を利用しました。

1.事前準備

    • Virual Box のインストール
    • Vagrant のインストール(1.6系)

当初、私のPCにインストールされていた Vagrant は 1.5.4 でした。
1.5系までは Vagrant そのままでは Windows をゲストとして扱うことは出来ず、Vagrant-windows というPluginを使う必要があります。
ただ、何度かやってみたのですがうまくこれがインストールできませんでした。

Vagrant としては、1.6系になって Windows を正式に対応しているので、今回はこれを用いることにしました。

Windows Guests – Windows is now a first-class officially supported guest OS for Vagrant, meaning you can now vagrant up development environments running on Windows.
https://www.vagrantup.com/blog/vagrant-1-6.html#features 

2.Windows10 Technical Preview インストール

基本的なインストール方法は前回のエントリーを参照。

2.1 vagrant が操作可能なように、”vagrant”ユーザーを作成する

パスワードも”vagrant”。
OSインストール時のユーザーをそうしてしまってもいいし、後から追加してもいい。
後から追加した場合は、Administrators グループへ追加する

2.2  UACをOFFにする。

msconfig を起動し、 “tools” から “Change UAC settings”を選んで Launch するとOn/Offまでの時間を少し楽できる
Win10x64-10

2.3 WinRM に関する設定を行う

コマンドプロンプトで以下のコマンドを実行する

winrm quickconfig -q
winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
winrm set winrm/config @{MaxTimeoutms="1800000"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
winrm set winrm/config/service/auth @{Basic="true"}
sc config WinRM start= auto

 

2.4 Virtual Box Guest Additions  のインストール

Virtual BoxのゲストOSウィンドウから 「デバイス」→「Guest Additions のCDイメージを挿入」を選び、
ゲストOS側でインストーラーを起動する。

ただ、Guest Additions のインストールは Windows 10 Technical Preview ではうまくいかなかった。

Win10x64-02

単純にインストーラーを実行すると上記のようにエラーが発生してしまい、そもそもインストーラーがまともに動かない。
こちらへの対策は互換性設定を行うことになる

Win10x64-03

一応、上記のように Windows8 互換で動作するようにしておけばインストーラーは動くには動いた。
ただ、最後の最後までは正しくセットアップされてないように感じる。
この理由は後述。

とりあえず、ゲストOS側の設定は以上となるので、Windows10 をシャットダウンします。
お好みでリモートデスクトップ設定をしておいてもいい。

3. Box の作成と追加

早速作った仮想環境を、Vagrant で扱えるようにパッケージングします

>vagrant package --base "Win10x64" --vagrantfile Vagrantfile.txt
==> Win10x64: Exporting VM...
==> Win10x64: Compressing package to: C:/VM/Win10/package.box
==> Win10x64: Packaging additional file: Vagrantfile.txt
The executable 'bsdtar' Vagrant is trying to run was not
found in the %PATH% variable. This is an error. Please verify
this software is installed and on the path.

vagrant package で、 base として指定している”Win10x64″は仮想環境の名前になりますが、エラーが発生しました。

このエラーが発生する場合、Vagrant へのパス設定がうまくいっていないので”Vagrant\embedded\mingw\bin”をPATH環境変数に追加します

>vagrant package --base "Win10x64" --vagrantfile Vagrantfile.txt
==> Win10x64: Exporting VM...
==> Win10x64: Compressing package to: C:/VM/Win10/package.box
==> Win10x64: Packaging additional file: Vagrantfile.txt

今度はうまくいったようです。
ちなみに、Package する際に Vagrantfile.txt を指定していますが、これは必ずしも必要ではないと思います。

続いて、作成した”package.box”を Vagrant へ追加するため、 Vagrant box add を実行します

>vagrant box add Win10x64TP package.box
==> box: Adding box 'Win10x64TP' (v0) for provider:
    box: Downloading: file://C:/VM/Win10/package.box
    box: Progress: 100% (Rate: 752M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'Win10x64TP' (v0) for 'virtualbox'!

同じ名前でも構わないのですが、なんとなく Box の名前は Win10x64TP としてみました。特に深い意味はありません。

これで一通りの準備が整いました。

4. Vagrant UP へ

適当なフォルダを作って、起動のための下準備を行います。

>vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

いつも通り init して、出来上がった Vagrantfile を編集します。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.guest = :windows
  config.vm.box = "Win10x64TP"
  config.vm.communicator = "winrm"
  config.vm.network :forwarded_port, guest: 3389, host: 13389
  config.vm.network :forwarded_port, guest: 5985, host: 15985, id: "winrm", auto_correct: true

 <中略>

 config.vm.provider "virtualbox" do |vb|
 # # Don't boot with headless mode
 vb.gui = true
 #
 # # Use VBoxManage to customize the VM. For example to change memory:
 # vb.customize ["modifyvm", :id, "--memory", "1024"]
 end

 <略>

最初の場所で、OS周辺の指定を行います。
また、通常は SSH でやり取りしますが、Windows の場合は WinRM を利用するのでこちらも記述します。
現状ではポート周りの設定もついでに書いておきます。

ちなみに、このvm.communicator の指定を winrm としなかった場合、立ち上がるには立ち上がりますが、応答がないために延々とリトライしてしまいます。

また、通常 Vagrant の場合は SSH で操作を行うために GUI は切られていますが、ここでは Vagrant up した際に Virtual Box の画面を出すようにしてあります。
これは、基本的に最初に作られた Vagrantfile でコメントされているところを戻しただけです。

ようやく準備が出来たので Vagrant up である

>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'Win10x64TP'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: win10tp_default_1412433990299_77042
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 3389 => 13389 (adapter 1)
    default: 5985 => 15985 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Mounting shared folders...
    default: /vagrant => C:/Dev/vbox/win10tp

見て分かる通り、 Guest Additions 関係のエラーが出ていて、うまく認識できていないことがうかがえる。
ちなみに、当然かもしれないがリモートデスクトップではうまく接続できなかった。

とはいえ、 GUI をONにすればリモートデスクトップはそれほど必要がないのであまり気にしないでいいだろう。
簡単ではあるけれど、 vagrant halt しての停止。 vagrant destroy。そして vagrant up と一通り動いているように見える。

5. 失敗例

実は、Guest Additions を互換性設定せずにインストール。つまり、インストールに失敗したままで進めた場合に、Box のパッケージングや Add までは成功するが、いざ Vagrant up するとエラーになった。

>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'Win10x64TP'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "C:/Users/username/.vagrant.d/boxes/Win10x64TP/0/virtualbox/box.ovf", "--vsys", "0", "--vmname", "Win10x64TP_1_1412225893803_7237", "--vsys", "0", "--unit", "10", "--disk", "c:\\Users\\username\\VirtualBox VMs\\Win10x64TP_1_1412225893803_7237\\box-disk1.vmdk"]

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting C:\Users\username\.vagrant.d\boxes\Win10x64TP\0\virtualbox\box.ovf...
OK.
0%...
Progress state: VBOX_E_FILE_ERROR
VBoxManage.exe: error: Appliance import failed
VBoxManage.exe: error: Could not create the clone medium 'c:\Users\username\VirtualBox VMs\Win10x64TP_1_1412225893803_7237\box-disk1.vmdk'.
VBoxManage.exe: error: VMDK: Compressed image is corrupted 'C:\Users\username\.vagrant.d\boxes\Win10x64TP\0\virtualbox\box-disk1.vmdk' (VERR_ZIP_CORRUPTED)
VBoxManage.exe: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Appliance, interface IAppliance
VBoxManage.exe: error: Context: "int __cdecl handleImportAppliance(struct HandlerArg *)" at line 779 of file VBoxManageAppliance.cpp

正直、うまくいかなくてまっさらから作り直したので必ずしも Guest Additions が関係しているかは不明だけど、一応参考まで。

うまくいったケースでも、 Guest Additions のインストールは最後までうまくいかなかったので、やりようによってはもう少しちゃんと出来るのかもしれない。

 ※参考サイト

 

実践 Vagrant
実践 Vagrant

posted with amazlet at 14.10.04
Mitchell Hashimoto
オライリージャパン
売り上げランキング: 274,281

Windows 10 Preview を早速入れてみた

Windows 10 Technical Preview が公開されました

Windows Technical Preview
http://windows.microsoft.com/ja-jp/windows/preview

まだ最初のPreviewなので、今後の更新によって大きく変わってくる可能性はありますが、スタートメニュー周りやストアアプリ周りでの修正が気になったので早速ダウンロードしてみました。

入れ先としては、Hyper-Vもよかったのですが、少し遊ぼうと思って VirtualBox に入れることにしました。

1.仮想マシンの作成

image

当然のことながら、バージョンに該当するものはないので「Other Windows (64-bit)」を選択します。
が、後述しますがこれではダメで、「Windows 8.1」あたりを選ぶ必要があります。

メモリやHDD周りは適宜設定して、ダウンロードしたISOイメージを読み込ませて起動させるのですが、

image

エラーになってしまいました。

原因ははっきりとつかんだわけではないですが、このエラーが出た場合、仮想マシン設定上に問題があるケースがあるようなので、先ほどのバージョン指定を「Windows 8.1」に変更することでエラーを回避できました。

2.Windows インストール

Win10x64

このあたりは基本的にWindows 8 以降は大きく変わらないですね。

Win10x64-02

今回の Technical Preview では日本語版が用意されていないので、英語版で進めていくことになります。

Win10x64-03

Microsoftアカウントを聞かれてきますが、正直 Preview の設定を変な風に持ち込みたくはないので、
手持ちの Microsoft アカウントは用いずに、新たにローカルアカウントを作成します。

Win10x64-06

ここまでで、設定完了。

Win10x64-07

デスクトップが出てきました。

Windows10 では、Windows8 とは異なり、基本的にはデスクトップをメイン画面とします。

ストアアプリはなくなったわけではもちろんないのですが、

image

デスクトップ上で動作する他のアプリと見た目が近い状態になります。
(上の絵はニュースアプリです)
もちろん、フルスクリーンにすれば以前のような見た目になるのでしょうけど。

image

ちなみに、IE は 11 でした。
手元のWindows 8.1 では IE のバージョンは 11.0.9600.17278なので、若干バージョンが上がっている感じですね。

ここのところ、OS が更新されるたびに IE のバージョンも上がっていたのですが、Technial Preview ではそのまま。
ただ、IE のバージョンアップスピードは以前とは違って上がってきているので、本リリースまでにはまず IE12 が入ってくるのではないかと
勝手に思っています。

やはり、大きな変更として見えるのはストアアプリですかね。
それ以外にもいろいろと変更点はあるのでしょうけれど、正直情報収集を怠けていたせいで把握し切れていません。

ストアアプリの変更は確かに大きいですが、ストアアプリ自体を利用している人がどれくらいいるのだろう。
そういう意味では、影響度という意味においては私はそれほど感じていないんですよね。

いずれにしても、もう少し、どういう点が変更されたのかを追いかけてみる必要がありそうです。
何かおすすめがあれば教えてください。

AWS 環境の自動停止スクリプト

AWS を必要な時だけ立ち上げておきたいんだけど、人が操作するとどうしてもうっかり落とし忘れてしまう。
そこで、SDK を使うことである時間が来た際に自動で落とすような状態にしておきたい。

立ち上げるのは、必要に応じて自分で手動で行えばいいので、あくまで落とすことを優先させる。

AWS の SDK はいろいろな言語で出ているが、今回は Ruby を使ってみることにした。
あまりこれまで触れたことのない言語だったので。
理由はそれだけ。面白そうだったからに近い。

EC2 を落とすことは比較的簡単にできる。

予め、定義を作っておいて

[aws-config.yml]
access_key_id: <ACCESS_KEY_ID>
secret_access_key: <SECRET_ACCESS_KEY>
ec2_endpoint: ec2.ap-northeast-1.amazonaws.com

 

止めるための文を書く

[stopall-ec2.rb]
require 'aws-sdk'

AWS.config(YAML.load(File.read("./aws-config.yml")))

ec2 = AWS::EC2.new

ec2.instances.each do |ins|
  ins.stop if ins.status == :running
end

 

EC2 は比較的すんなりと行ったんだけど、RDS はよくわかっていない。

RDS の場合、そもそも停止という機能が存在していないため、本来の停止手順としては

  1.  一世代前の Snapshot の削除
  2. Snapshot の作成
  3. Instance の Delete

で、起動時には

  1. Snapshot からの RDS 作成
  2. セキュリティグループやパラメータグループ付け替え
  3. RDS インスタンスの再起動

という感じになると思う。
Snapshotをいつ削除するのかは好みなのかもしれないが、作成直前まで保持しておけば
バックアップとしても使えるし、もう少し手を加えて世代管理をしてもいいと思う。

EC2 と異なり、RDS は Snapshot からの起動となるので、手操作による名前付けミスは避けたい。
そういう意味では、起動まで自動化したくなるところではあるかな。

ただ、そもそも RDS の一覧が取れないように感じる。

[stopall-rds.rb]
require "aws-sdk"
rds = AWS::RDS.new(
  :access_key_id => <ACCESS_KEY_ID>,
  :secret_access_key => <SECRET_ACCESS_KEY>,
  :rds_endpoint => <RDS_ENDPOINT_URL>
)

rds.db_instances.each {|instance|
  p instance.endpoint_address
}

 

試しに Github 上で見かけたコードを元にこんなのを書いてみたけど、接続の時点で

C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:878:in `initialize': execution expired (Net::OpenTimeout)
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:878:in `open'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:878:in `block in connect'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:877:in `connect'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:857:in `start'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/http/connection_pool.rb:321:in `start_s
ession'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/http/connection_pool.rb:125:in `session
_for'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/http/net_http_handler.rb:55:in `handle'

from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:253:in `block in make_sync_re
quest'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:289:in `retry_server_errors'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:249:in `make_sync_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:511:in `block (2 levels) in c
lient_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:391:in `log_client_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:477:in `block in client_reque
st'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:373:in `return_or_raise'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:476:in `client_request'
from (eval):3:in `describe_db_instances'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/rds/db_instance_collection.rb:56:in `_each_i
tem'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/collection/with_limit_and_next_token.rb
:54:in `_each_batch'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/collection.rb:80:in `each_batch'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/collection.rb:47:in `each'
from stop-rds.rb:11:in `<main>'

のようにタイムアウトしてしまう。

と、ここで RDS 側の Firewall 関連の設定じゃないかと気づく。
RDS の構築を自分で行った環境ではなかったので気づくのが遅れた。

RDS を構築する際、 “Enable Public Access” って項目があって、通常は同じ VPC 内からのアクセスのみ許すようになっていた。
一時的にこれを変更して試してみたら、エラー内容が変化した

C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (OpenSSL::SSL::SSLError)
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
from C:/Ruby200-x64/lib/ruby/2.0.0/timeout.rb:66:in `timeout'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:857:in `start'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/http/connection_pool.rb:321:in `start_session'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/http/connection_pool.rb:125:in `session_for'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/http/net_http_handler.rb:55:in `handle'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:253:in `block in make_sync_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:289:in `retry_server_errors'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:249:in `make_sync_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:511:in `block (2 levels) in client_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:391:in `log_client_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:477:in `block in client_request'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:373:in `return_or_raise'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/client.rb:476:in `client_request'
from (eval):3:in `describe_db_instances'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/rds/db_instance_collection.rb:56:in `_each_item'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/collection/with_limit_and_next_token.rb:54:in `_each_batch'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/collection.rb:80:in `each_batch'
from C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/aws-sdk-v1-1.52.0/lib/aws/core/collection.rb:47:in `each'
from stop-rds.rb:17:in `<main>'

 

はて・・・。困ったな。

ちなみに、

rds.db_instances["<INSTANCE_ID>"]

という形では AWS:RDS:DBInstance オブジェクトへアクセスできる。ここから delete を呼び出すことは出来そうなので、ID を指定すればできそうだ。

逆に、 EC2 のように each で無条件にインスタンスを落とすことは出来ないのかもしれない。

AWS:RDS 以外に AWS:RDS:Client も RDS の操作する手段としてはあるので、こちらを使えばもしかしたらいけるのかな?
エラーとなっている、 db_instance_collection の each_item 実装を見てみると client.describe_db_instances を呼び出しているみたいなので、
AWS:RDS:Client の使い方を習熟することがエラー解決への近道なのかもしれない。

まぁ、実際の問題としては RDS がそんなに増えることはないだろうから、とりあえずこれでやってみようかな・・・。

なんか、もうちょっとうまいこと行くとうれしいんだが。。。

エクセルのファイルサイズがやけに大きかったお話

少しエクセルで資料を作っていたら、1シートで20行未満、20列未満という程度の情報量に対してファイルサイズが 5M を超えていた。
特に図形も絵も張り付けているわけでもなくテキストのみでこのサイズはどう考えてもおかしい。
ちなみにフォーマット形式は XLSX なので圧縮が効いているはず。100K すら普通はいかないはずだ。

XLSX 形式であれば、中身を確認することが出来るので調べてみることにした。

拡張子を ZIP へ変更し、中身を解凍。
変な絵が張り付いていないことを確認して、問題のシート情報のファイルを確認する。
今回はシートは一つだけなので

./xl/worksheets/sheet1.xml

を確認してみると・・・・

80Mを超えている。

このファイル。普通にエディタで開こうとするとファイルサイズが大きいのでまともに開かない。
しょうがなく、ファイルを分割して中身を確認すると、入力したデータ以外に

<row r=”7609″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7609″ s=”16″/></row>
<row r=”7610″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7610″ s=”16″/></row>
<row r=”7611″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7611″ s=”16″/></row>
<row r=”7612″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7612″ s=”16″/></row>
<row r=”7613″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7613″ s=”16″/></row>
<row r=”7614″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C7614″ s=”16″/></row>

<row r=”1048575″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C1048575″ s=”16″/></row>
<row r=”1048576″ spans=”3:3″ x14ac:dyDescent=”0.15″><c r=”C1048576″ s=”16″/></row>

みたいなものが大量に書かれている。なんだこれ

 

想像してみる

データというわけではないので、セルに対しての属性情報が付与されていて、それが悪さをしているように感じる。
ただ、行の削除を行っても消すことが出来なかったので、行を選択した何かというよりはシート全体もしくは特定の列に仕掛けられた設定が生きているのだろう。

困った。

row タグは行データを取り扱っているとすると c タグが CELL を対象としていそう。
row タグ中の r 属性は行番号で、 spans 属性と x14ac:dyDescent 属性は謎だ。

c タグ中の r 属性は被るかもしれないが現在位置を表しているように見える
んー。cell の s 属性は 16 となっているのは何だろう。

 

調べてみた

dyDescent に関してはMS公式に説明が書いてあった。

http://msdn.microsoft.com/en-us/library/dd926776(v=office.12).aspx

要するに、double型の定義がされているということらしい。それだけ。ということは、x14ac のネームスペース中の定義として double と読むことが出来るのであれば、
x14ac はよくわからないけど Excel を意味するのではないだろうか。

と思ったら、ファイルの冒頭に

xmlns:x14ac=”http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac”

とあったので、大体理解があっていそう。

span 属性に関してはこちらに書いてあった

http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.row(v=office.14).aspx

要するに、データが入っている範囲を示すようで、この値はすべて同じになるようだ。
とすると、変だ。

現状では19行R列までデータが入っているので、

spans=”1:18″

になるはずなのだが。。。

 

ちなみに、シートのコピーではダメだったが新しく作ったブックにコピペしたら 22KB 程度のサイズになって、 spans も想定した値になった。

spans が変だったのは気になるのだが、それ以上に大量の row タグが作られてしまった原因のほうが問題なのだろう。

フォーマットの中身がなんとな~くわかってきたけれど、じゃ、どうすれば同じ状態を引き起こせるのか?という部分がさっぱりだ。
spans 属性の定義から言うと本来入る値とは異なっているので、ありていに言えば何かの操作の際にファイルがぶっ壊れたと考えたほうがいいのかもしれない。

うーん、壊れたのだとすると、これ以上追いかけてもあまり実りはないかな~。
とりあえず、少し調べ方に関して知ることが出来たので今日のところはよしとしようか

Softlayerを勉強してきた

以前のエントリで AWS をいじり始めたという話をしましたが、AWS だけでなく、Softlayer の研修も IBM で受けてきました。

会社では Microsoft の Windows Azure も利用している部署もあるのでより取り見取りですね。
私としては、これまでなんとなーく AWS が一番デファクト的な位置づけだと考えていたのですが、
単純にそれはその他を知らないだけという話でもあるかもしれないと考え、少し周りを調べ始めています。

AWS

AWS は言わずと知れたクラウドですね。

EC2 をはじめとして様々なサービスが提供されているので幅広い用途に使うことが出来ます。
個人的にはこのサービスの豊富さとその規模からくる価格メリット。そして成長・進化のスピードが AWS の強みに感じています。

まぁ、ろくに AWS を使っているわけではないので偉そうなことはあまりいうことは出来ませんが。

 

Softlayer

Softlayer は、もともとは独立したクラウドベンダーでしたが、IBM が現在は買収しています。
特徴的なのは、機器構成の自由度がかなりあるところです。

AWS で時々話があがるのは、インスタンスがどこに作られるかわからないので、同居しているインスタンスによってパフォーマンスに当たり外れがあるという話です。

Softlayer では、仮想ホストを共有する通常の形以外に、自分だけでホストを占有するタイプの仮想を選ぶことが出来ます。
(これをPrivateクラウドと呼ぶので混乱させているような気がしないでもない)
さらには、物理サーバーそのものを同じように Softlayer ポータルから借りることもできてしまいます

企業案件等でパフォーマンスがシビアに要求されるケースでは、ハイパーバイザーのオーバーヘッドを嫌がることもあると思います。
そういう意味では、Softlayer は自分たちで構成をゴリゴリと組みたいけどオンプレミスとして保持したくないというようなケースにおいては最適なのかもしれません。

もちろん、その場合のユーザー側の責任範囲は大きくなりますが。

一方で、サービス面に関しては AWS のほうが充実している印象を受けています。

クラウドで DB を利用しようとした場合、AWS であれば RDS を利用することが出来ます。
Softlayer ではバックアップを含めた運用管理は、よりオンプレミスに近い構築能力を要求されるとともに、Oracle 等を利用しようとした場合にはライセンスを用意する必要が出てしまいます。

クラウドの場合、やめようと思った時にやめられるのも利点ですが、こういったライセンスを時間貸しで利用できないのは、それが本来の形とはいえ辛いですね。
まぁ、MySQL や MongoDB 等のオープンソース系で行けばいいだけの話なのかもしれませんが。

AWS にしろ Softlayer にしろ、日々進化しているのである一時を切り出して優劣をつけていくのはなかなか難しい気もします。
ただ、それぞれの提供している特色というか特徴といったものがこの二つは分かれているので、すみわけは出来そう。

一方で、Microsoft の Azure は正直私が不勉強でよくわかっていないところが多いです。
どうなんだろうな