geek.conf.2

あるエンジニアの備忘録

MCPC2級

もりっす。寝不足でした、僕です。

MCPCモバイルシステム技術検定2級とやらに受かったので、ログを記します。

通称MCPC2級ですが、ITスキルとしては、 基本情報技術者初級システムアドミニストレータ取得者相当、モバイルシステムについて顧客の要求(または提案)について理解し、ヒヤリングが可能でシステム構築の概要が判るレベルを認定してもらえます。

 

合格日:2015/11/25

受験日:2015/11/07
点数:未公表
勉強期間:27日(2015/10/11 - 2015/11/06)
勉強方法:
・モバイルシステム技術テキスト第6版

これをひたすら読む。今回は、3周して、4周目は、8章まで読みました。

その他、感想:

モバイルシステム技術テキスト第6版から、満遍なく出題され、その順番は、テキストの章ごとの順ですた。通信方式、速度、変調方式、周波数といった、頑張って、覚えたものが、思ったよりも出題されなかったです。選択肢の文章のうち、一部は合っていて、一部は間違っているような引っ掛けが数問ありましたが、基本的に、ストレートな問題でした。計算は、一問くらい出たよ。基本情報技術者相当らしいのですが、問題の量、質を比較しても、基本情報技術者より簡単と思います。ちな基本情報技術者は持っていません。

                                         f:id:tsubauaaa:20151126200200j:plain

 

 

モバイルシステム技術テキスト 第6版 ?MCPCモバイルシステム技術検定試験2級対応?

モバイルシステム技術テキスト 第6版 ?MCPCモバイルシステム技術検定試験2級対応?

 

 

Test Kitchen Windows でテストしよう Vagrantでね

はい。僕です。
最近、WindowsでChefってできるのかな、と思い、Test Kitchenしてみたので、共有します。
ほぼ、こちらのサイトを参考にしています↓
pinter.org

Test KitchenをWindowsに対してVagrantで行う準備

vagrant plugin install vagrant-winrm

これ↑しないとこうなります。

-----> Starting Kitchen (v1.4.2)
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::UserError
>>>>>> Message: WinRM Transport requires the vagrant-winrm Vagrant plugin to properly communicate with this Vagrant VM. Please install this plugin with: `vagrant plugin install vagrant-winrm' and try again.
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration

WinRMをトランスポートする場合、

gem install winrm-transport

これ↑しないとこうなります。

!!!!!! The `winrm-transport' gem is missing and must be installed or cannot be properly activated. Run `gem install winrm-transport --version '~> 1.0'` or add the following to your Gemfile if you are using Bundler: `gem 'winrm-transport', '~> 1.0'`.
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::UserError
>>>>>> Message: Could not load or activate WinRM::Transport (Could not find 'winrm-transport' (~> 1.0) among 98 total gem(s)
Checked in 'GEM_PATH=/Users/tsubauaaa/.gem/ruby/2.2.0:/Users/tsubauaaa/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0', execute `gem env` for more information)
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration

次に、.kitchen.ymlですが、こんな具合ので、ご利用ください。

---
driver:
  name: vagrant
  synced_folders:
    - ["./", "/vagrant"]

provisioner:
  name: chef_solo

platforms:
  - name: win2012r2
    driver_config:
      communicator: winrm
    transport:
      name: winrm

suites:
  - name: default
    run_list:
      - recipe[iis::default]
    attributes:

Vagrant boxファイルの作成

さて肝心のWindowsのboxファイルですが、
Boxcutter · GitHub
さんが様々なWindowsのboxファイルを提供していますので、こちらを利用させていただきます。
Packerを使ってboxファイルを作成しているので、Packer 0.8.2以上をインストールしましょう。
ちなみにこちらで利用するOSイメージは、評価版のWindows、boxはVirtualboxのでーす。

git clone https://github.com/boxcutter/windows.git
cd windows
make virtualbox/eval-win2012r2-standard

boxをvmwareとしたければ、

make vmware/eval-win2012r2-standard

ですな。
OSイメージをDLして、Virtualboxで起動して、boxファイルが作成されるので、時間がかかります。
boxファイルが作成されたら、

vagrant box add win2012r2 ./box/virtualbox/eval-win2012r2-standard-nocm-1.0.4.box

として、Vagrant Boxとして利用します。
てな感じで。



ハッピーウィンドウズテスツ!!

ある文字列が含まれていたら、これに対応して、分類する@Excel

 

ちす。

今日は、Excelで、ある文字列が、含まれていたら、その文字列に応じて、分類を行うセルを実現する関数を紹介します。

 

つまり、こちらの画像で説明するとですね。

・シート[Sheet1]

f:id:tsubauaaa:20151104184036p:plain

シート[Sheet1]に検索ワードと色の対応表を作成します。

・シート[string_category]

f:id:tsubauaaa:20151104183727p:plain

シート[string_category]のB列(分類対象)にシート[Sheet1]のA列(検索対象)内の文字列

が含まれていた場合に、その隣のB列(色)の値をシート[string_category]のA列に返す。

といったことを実現します。

シート[string_category]の2行目を例にすると、分類対象列に、"リンゴが美味しい"とあり、シート[Sheet1]の2行めは"リンゴ"と"赤"を対応表として定義しています。

この場合、シート[string_category]の2行目のC列には、色分類結果として、"赤"が自動判別され、シート[string_category]の2行目A列は、[=C2]としている、という訳です。なので、シート[string_category]のC列は、非表示にしても良いかもです。

さて、シート[string_category]のC列に、以上を実現する関数が入力されています。

その関数は、これ↓です。

If that contain the string , classified into each ...

 

分解して、説明すると、まず、FIND関数内で、分類対象(B2)に、検索ワード(Sheet1!$A$2:$A$8)が含まれている場合の、左端から数えた検索ワード位置を取得します。さらにLOOKUP(0,0/FIND(Sheet1!$A$2:$A$8,B2),Sheet1!$A$2:$A$8)とあります。これは、検索ワード位置がある場合は、0/[数字] = 0となり、LOOKUP関数は、TRUEを返し、対応範囲である、検索ワードを返します。

※ちなみに検索ワード位置がない場合は、0/0 = #DIV/0!となり、エラーとなります。

そして、VLOOKUP(LOOKUP(0,0/FIND(Sheet1!$A$2:$A$8,B2),Sheet1!$A$2:$A$8),Sheet1!$A$2:$B$100,2,0)は、VLOOKUP("検索ワード","対応表",2,0)

※2は列番号、0は完全一致検索型

となり、検索ワードに対応した、色を返す、という動きになります。

 最後に、IFERRORで、エラー時には、"N/A"を返すようにします。

※LOOKUP関数内で定義するシート[Sheet1]の対応表は、値が入っている行番号までをきちんと指定しないと期待通りに、動かないので、注意です。

という感じで終わります。

rubyでlistVMSnapshot@CloudStack APIを打ちたい

コンチワ。
CloudStack APIrubyで操作してごにょごにょしてます。その際に、cloudstack_ruby_clientを使っているのですが、これ、listVMSnapshotが利用できないんですね。なので、自分でRest API応答をこさえました。その時に、苦労したことがあるので、展開します。

CloudStack APIを叩く時にPortを8080を使う場合、URIに含める署名を作成する必要があります。その署名の作成方法を今日は紹介します。
その前に、CloudStack APIを叩く際のURIを構成する部品を整理します。

URI:http://YOUR_SERVER_NAME:8080/client/api?command=listVMSnapshot&response=json&apikey=YOUR_CLOUDSTACK_API_KEY&signature=YOUR_CLOUDSTACK_SIGNATURE
コマンドパラメータ:command=listVMSnapshot&response=json&apikey=YOUR_CLOUDSTACK_API_KEY
署名:signature=YOUR_CLOUDSTACK_SIGNATURE
秘密鍵YOUR_CLOUDSTACK_SECRET_KEY
はい。それでは、上記の署名を作成する方法です。ちなみにCloudStack 4.3ですね。バージョンは。

1. コマンドパラメータの要素を並べ替え
コマンドパラメータ内の&で区切りられた要素の要素名(apikeyとかcommandとか)をアルファベット順に並べ替えます。
コマンドパラメータ2:apikey=YOUR_CLOUDSTACK_API_KEY&command=listVMSnapshot&listall=true&response=json

2.コマンドパラメータ2をURLエンコード
並べ替えたコマンドパラメータ2をURLエンコードします。(コマンドパラメータ3とする)

3. コマンドパラメータ3を小文字化
URLエンコードしたコマンドパラメータ3のアルファベットを全て小文字にします。(コマンドパラメータ4とする)

4.コマンドパラメータ4をHMAC SHA-1でハッシュ化し、Base64エンコード
小文字化したコマンドパラメータ4をハッシュアルゴリズムHMAC SHA-1でハッシュ化します。さらにBase64エンコーディングし、UTF-8にします。(署名0とする)

5.署名0をURLエンコード
コマンドパラメータ4をハッシュ化してBase64エンコードした署名0をさらにURLエンコードします。(署名とする)

署名の出来上がりです。

これをrubyでこさえるとこんな感じです。※サーバURLやapikeyは外部ファイルから取っています。

command_param = "apikey=#{config['APIKEY']}&command=listVMSnapshot&listall=true&response=json"
urlenc_command_param =  URI.escape(command_param)
data = urlenc_command_param.downcase
base64_sig = Base64.encode64(OpenSSL::HMAC.digest( OpenSSL::Digest.new('sha1'), config['SECKEY'], data)).strip
enc_sig = CGI.escape(base64_sig)
access_uri = URI.parse("#{config['URL']}/client/api?#{command_param}&apikey=#{config['APIKEY']}&signature=#{enc_sig}")

そして、listVMSnapshotを実行して、作成されて1日経過しているものの個数を出力するコードはこんな感じになります。

rubyでCloudStack APIエンドポイントURIの署名作成方法ってあまり、なかったので書いてみました。
おしまい。

TOEIC 第202回 (僕は初回)

試験日:2015/07/26
結果発表日:2015/08/17 正午
点数:L:335, R:240 T:575/990
勉強期間:20日(2015/07/06 - 2015/07/25)
利用した参考書:1. はじめての新TOEICテスト完全攻略バイブル
        2. TOEICテスト究極の模試600問
勉強方法:
 まず、1. のはじめての新TOEICを3週し、次に2. の究極の模試600問を2週しました。
 これだけ。
 究極の模試での1週目の成績はテスト1:500、テスト2:540、テスト3:490、2週目は
 もちろん100点以上上がりました。
感想:
 思ったより、スコアが良かった!ここまで来ると600行きたかたが、
 Reading、、もっと勉強すれば、600行けたかなぁ

sensu + graphiteでのメモ

・rabbitmqのWeb管理画面へログインするためには?
URL:http://hostname:15672
ユーザ名/パスワード:以下の手順で作成する

rabbitmqctl add_user admin password
rabbitmqctl set_permissions admin ".*" ".*" ".*"
rabbitmqctl set_user_tags admin administrator

※ユーザadminを作って、権限を付与して、ロールを設定

・graphiteへのメトリック情報をクリアする
sensuに登録済みmetricスクリプトを編集して収集するメトリックに変更を加えたい時、
whisperデータベースを削除しないとgraphiteに変更が反映されない。以下のように削除する。

rm -f /var/lib/carbon/whisper/

vagrant/chef-soloでいろいろprovisioningしたvmware fusionをbox化してAtlasにアップロード

※ローカルはmac OS X Yosemiteです。

1. Vagrant plugin for vmware fusionをインストール
# vagrant plugin install vagrant-vmware-fusion
# vagrant plugin license vagrant-vmware-fusion license.lic
※license.licはhashicorpから買う。確か$79だった。

2.centos6.4のvmware fusion用boxをadd
www.vagrantbox.es
から適当に。
# vagrant box add centos6-vmware_fusion https://dl.dropbox.com/u/5721940/vagrant-boxes/vagrant-centos-6.4-x86_64-vmware_fusion.box

3.vagrant up --provider=vmware_fusionする
このままprovisioningすると以下のエラーがでる。
default: Waiting for HGFS kernel module to load...
これを回避するためにprovisioningせずにただupして、sshして以下のコマンドを実行する。
echo "answer AUTO_KMODS_ENABLED yes" | sudo tee -a /etc/vmware-tools/locations

4.一旦box化
# cd .vagrant/machines/default/vmware_fusion/xxxxxxxx/
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d Virtual\ Disk.vmdk
※Defragment
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k Virtual\ Disk.vmdk
※Shrink
# rm -f vmware*.log
# tar cvzf centos-6.6-vmware_fusion-tmp.box ./*

5.box addする
# vagrant box remove centos6-vmware_fusion
# vagrant box add centos6-vmware_fusion centos-6.6-vmware_fusion-tmp.box

6.chef-soloでprovisioningしてserverspecでテスト
Vagrantfileでvagrant up --provider=vmware_fusion
※cookbookやらspecは適当に。
Vagrantfileについて
config.vm.box = "centos6-vmware_fusion"とする。
ミソはconfig.ssh.insert_key = falseを追加すること。
なんかv1.7.0以上だとinsecure keyっていうここのキーペアを利用している場合、replaceするらしい。DLしたvmware fusion用boxはここのキーペアを利用しているので、とりあえずreplaceしないようにconfig.ssh.insert_key = falseを追加する。

あとsudoレシピでvagrantユーザを追加しています。じゃないとserverspecをsudoでやると失敗します。

7.正式box化の準備
vagrant sshでprovisioningしたvagrant boxにログインして
box化のためのお掃除をする。
# vagrant ssh
$ sudo yum clean all
$ sudo rm -rf /tmp/*
$ sudo rm -f /var/log/wtmp /var/log/btmp
$ history -c
$ sudo shutdown -h now

8.正式box化
# cd .vagrant/machines/default/vmware_fusion/yyyyyyyy/
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d Virtual\ Disk.vmdk
※Defragment
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k Virtual\ Disk.vmdk
※Shrink
# rm -f vmware*.log
# tar cvzf centos-6.6-vmware_fusion-cust.box ./*

9.正式box add
# vagrant box remove centos6-vmware_fusion
# vagrant box add centos6-vmware_fusion centos-6.6-vmware_fusion-cust.box

10.vagrant up からのserverspecでprovisioning
# vagrant up --provider=vmware_fusion --provision-with serverspec
※エラーが出ないことを確認する

11.Atlasにアップロード
centos-6.6-vmware_fusion-cust.boxをAtlasにアップロードする。
tsubauaaa/centos6.6-tsuba

12.box add
vagrant box add tsubauaaa/centos6.6-tsuba --provider=vmware_fusion
※とかアップロード先のAtlasのbox名およびproviderを指定する。

コードはこちら:tsubauaaa/Vagrant/centos6_vmware_fusion

vagrant