今日のAWS
terraform ちょっとだけ触りました
resource "aws_s3_bucket", "woshidan-terrafom-test" { # 追加する種類のリソース, リソース名 # s3の場合 bucket = "woshidan-terrafom-test" path = "/" acl = "private" # acl = "..." で設定しているのはAWS側によってあらかじめ定義された既定ACL # privateはデフォルト設定。所有者はすべての権限を持つが他のユーザにアクセス許可はない # http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html#canned-acl # 既定ACLに付け加えて記載するポリシー. JSON形式で書く policy = << POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "aws-portal:View*", "Resource": "*" } ] } POLICY }
AWS S3のACL
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html
AWS S3 アクセスコントロールリスト(ACL)では、バケットとオブジェクトへのアクセスを管理ができる。各バケットとオブジェクトにはサブリソースとしてACLが付与されていて、ACLには
- 所有者
- 被付与者(AWSアカウントまたはグループ)
- 付与されたアクセス許可
の要素がある。
PolicyとPolicy Attachment
Policyのリソース( aws_iam_policy
)は別個に定義することができて、下記のようにさらにAttachmentリソースの定義でユーザーやグループと結びつけることで、管理画面でやるようにユーザーが所属するグループの食い合わせによってそのユーザーが持っている権限が定義される、というような管理の仕方ができそう。
resource "aws_iam_policy" "WoshidanTerraformTestFullAccess" { name = "WoshidanTerraformTestFullAccess" path = "/" description = "terraform hello world" policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:List*", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:DeleteObject*", "s3:PutObject*" ], "Resource": [ "arn:aws:s3:::woshidan-terrafom-test/*" ] } ] } POLICY }
resource "aws_iam_policy_attachment" "WoshidanTerraformTestFullAccess" { name = "WoshidanTerraformTestFullAccess" users = [...] roles = [] policy_arn = "${aws_iam_policy.WoshidanTerraformTestFullAccess.arn}" }
Cocos2d-x用の日本語対応フォントファイルをGlyph Designer2を使って書き出し
Glyph Designer 2 の入手
Glyph Designer - A Bitmap Font Generator for Mac · 71Squared
よりDLした後、ライセンス(月900円~)を購入してアクティベイトキーを入力。
日本語フォントの追加
【cocos2d/unity3d】簡単に日本語表示用のフォントが作れる「GlyphDesigner」の使い方 | albatrus.comを参考にしつつ、 Font Systems
のアプリケーションから利用したいフォントのフォルダを開いて、フォントファイル (.otf
)を Glyph Designer 2
から開くことができるパスへコピーします。
なお、今回利用させていただいたフォントはこちらのりぃ手書きNです。
そのフォントを Glyph Designer 2
のメニューの File > Load Font
で開きます。
すると以下のように利用可能なフォントとして追加されます。
設定ファイル上で日本語を利用できるようにする
このままでは設定ファイルは以下の文字しか対応していません。ゲーム上で利用した場合、日本語は利用できなくなっています。
それでは困るので、フォントの設定にひらがなとカタカナを利用可能な文字として追加することにします。
真ん中の目のアイコンを押すとプレビュー画面が開き、実際にフォントを利用した場合の様子を試すことができます。
設定ファイルのexport
esaやGitHubに検証結果貼りつけたいが、 tableタグや img タグなど書くのが面倒な時用のスニペット
esaやGitHubに検証結果貼りつけたいが、 img
タグなど書くのが面倒な時用のスニペット。
出力用コード
require 'yaml' require 'erb' puts ARGV[0] file = File.open ARGV[0] raw_str = file.read @tests = YAML.load(raw_str) template_path = File.expand_path('template.erb', File.dirname($0)) erb = ERB.new(File.new(template_path).read) puts erb.result(binding)
erbテンプレート
<!-- HTML --> <% @tests.each do |test| %> <h3><%= test["title"] %></h3> <table> <tr> <td> </td> <% test["rows"].each do |row| %><th> <%= row %> </th><% end %> </tr> <% test["cols"].each do |col| %><tr> <th> <%= col %> </th> <% test["rows"].each do |row| %><td> <% if test["with_image"] %> <img src="" alt="<%= "#{col} x #{row}" %>" width="<%= test["image_width"] %>px" /> <% end %> </td> <% end %></tr> <% end %> </table> <% end %>
# Markdown <% @tests.each do |test| %> ### <%= test["title"] %> | <% test["rows"].each do |row| %>|<%= row %><% end %>| |---<% test["rows"].each do |row| %>|---<% end %>| <% test["cols"].each do |col| %>|<%= col %><% test["rows"].each do |row| %>|<% if test["with_image"] %> <img src="" alt="<%= "#{col} x #{row}" %>" width="<%= test["image_width"] %>px" /><% end %><% end %>| <% end %> <% end %>
使い方
$ ruby build_table.rb sample.yml
入力として用意するYAML
- with_image: true image_width: 100 title: AとBの条件についてテスト(要スクショ) rows: - A = 1 - A = 2 - A = 3 - A = 4 - A = 5 cols: - B = 1 - B = 2 - B = 3 - with_image: false title: AとBの条件についてテスト(スクショ不要) rows: - A = 1 - A = 2 cols: - B = 1 - B = 2 - B = 3 - B = 4
出力
HTML
<h3>AとBの条件についてテスト(要スクショ)</h3> <table> <tr> <td> </td> <th> A = 1 </th><th> A = 2 </th><th> A = 3 </th><th> A = 4 </th><th> A = 5 </th> </tr> <tr> <th> B = 1 </th> <td> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/w/woshidan/20171018/20171018132818.png" alt="B = 1 x A = 1" width="100px" /> </td> <td> <img src="" alt="B = 1 x A = 2" width="100px" /> </td> <td> <img src="" alt="B = 1 x A = 3" width="100px" /> </td> <td> <img src="" alt="B = 1 x A = 4" width="100px" /> </td> <td> <img src="" alt="B = 1 x A = 5" width="100px" /> </td> </tr> <tr> <th> B = 2 </th> <td> <img src="" alt="B = 2 x A = 1" width="100px" /> </td> <td> <img src="" alt="B = 2 x A = 2" width="100px" /> </td> <td> <img src="" alt="B = 2 x A = 3" width="100px" /> </td> <td> <img src="" alt="B = 2 x A = 4" width="100px" /> </td> <td> <img src="" alt="B = 2 x A = 5" width="100px" /> </td> </tr> <tr> <th> B = 3 </th> <td> <img src="" alt="B = 3 x A = 1" width="100px" /> </td> <td> <img src="" alt="B = 3 x A = 2" width="100px" /> </td> <td> <img src="" alt="B = 3 x A = 3" width="100px" /> </td> <td> <img src="" alt="B = 3 x A = 4" width="100px" /> </td> <td> <img src="" alt="B = 3 x A = 5" width="100px" /> </td> </tr> </table> <h3>AとBの条件についてテスト(スクショ不要)</h3> <table> <tr> <td> </td> <th> A = 1 </th><th> A = 2 </th> </tr> <tr> <th> B = 1 </th> <td> </td> <td> </td> </tr> <tr> <th> B = 2 </th> <td> </td> <td> </td> </tr> <tr> <th> B = 3 </th> <td> </td> <td> </td> </tr> <tr> <th> B = 4 </th> <td> </td> <td> </td> </tr> </table>
esaに貼り付けてみたときの見た目
画像入れてく部分は画像が入ってなかったらaltに条件の文字列入れてるのでどの条件のテスト終わってないかわかりやすい。
XCodeのRun Scriptを試しに触ってみる
iOS用アプリケーション、ライブラリのビルド前後にちょっと作業がしたい場合、XCodeの Run Script
でシェル(やシェル経由で起動できる各種言語のプログラム)を起動させることができます。
今日はちょっと試してみました。
簡単なスクリプトの実行
# hello.sh echo "hello"
こういう超簡単なスクリプトを用意して、
上図のように、実行したいスクリプト hello.sh
のパスを設定すると、ビルド時のログに hello
と出力されます。
スクリプトのパスを指定する代わりにそのまま書く
以下のようにそのまま実行したいスクリプトをベタがきすることも可能です。
上記を実行すると
ちょっとビルド自動化の際など環境変数を調べたいときに便利そうです。
指定したファイルのパスを変数に与えて実行
下の方の欄にある input files
にファイルのパスを与えると、スクリプト中にて $SCRIPT_INPUT_FILE_N
(Nは数字) という変数名で取得可能です。ちょっとやってみましょう。
// Test.xcodeproj/project.pbxprojの冒頭 // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = {
出力結果の2行目はビルド時に書き加えられたものです。 Run Script
の中に書いたスクリプトや実行ファイルのパスは XCode
のプロジェクト設定ファイルの中に記録され、管理されます。
スキームごとに接続先などを変更したいけど、コードの中に残したくない、という場合*1などに置換処理を行ったりできるのではないでしょうか。
現場からは、以上です。
参考
- http://jpmartha.hatenablog.jp/entry/2016/02/18/141028
- https://qiita.com/kakignu/items/352aa1d11eb46bc202c2
- http://geme.github.io/xcode/2016/10/27/BuildPhaseLoopOverInput.html
*1:書いてみたけどコードの中に残した方が人間が読む上で素直な気がする
今日のAWS
AWS ELB
ELBのメリット
- 複数AZに対して分散を行える。1つのAZがオフラインになった場合でももうひとつのAZで処理を続けられる
- HTTPS/SSLを利用できる
- 正常なインスタンスのみ振り分け可能
- ユーザセッションを維持する スティッキーセッション をサポート
- セキュリティグループポリシーを適用でき、柔軟なセキュリティを実現できる
AZ(アベイラビリティーゾーン)って何?
- AWS(EC2)のロケーションは、リージョンとアベイラリティゾーンという概念がある
DNSのCNAMEってなんだっけ
- Aレコードは ドメイン名と対応するIPアドレスを
ドメイン名:IPアドレス = 1:n
で定義- 同じIPと別ドレインを並べて定義すれば
IPアドレス:ドメイン名 = 1:n
にもなりうる
- 同じIPと別ドレインを並べて定義すれば
- CNAMEレコード
参考
iOSアプリをxcodebuildでビルドする(途中)
Appiumの前段階として、Simulatorなどにインストールするビルド済みのAppファイル*1*2が必要です。
メモ
そういうわけで、ターミナルから xcodebuild
を使って Appファイル
の作成を試します。
$ xcodebuild xcodebuild: error: The directory /Users/woshidan/path/ios-project/root/ does not contain an Xcode project. $ cd path/to/XcodeProject $ ls TestApp TestApp.xcodeproj TestAppUITests build
まずは、 XCodeで作成したプロジェクトのあるところ( .xcodeproj
ファイルのあるディレクトリ ) へ移動します。
依存しているライブラリのクラスのヘッダが見つからない ...
xcworkspace など依存ライブラリの設定が入ったファイルを、 -workspace
で指定しましょう。その際、 schema
も指定が必要です。
// # CocoaPodsを使っていてxcworkspaceを指定してビルドする $ xcodebuild -workspace ../../Test/TestLib.xcworkspace -scheme TestApp
CompileStoryboard TestApp/Base.lproj/Main.storyboard というメッセージが出てStoryBoardがビルドできない
Xcode
のバージョンによっては、特定の設定がないとビルドができないものがあります。そう、古い設定は新しいXCodeのバージョンが出るたびにビルドできなくなる可能性があるのです*3。
というわけでそういう場合は、xcodebuildで利用するXCodeのパスを古いものに xcode-select
で切り替えます。
# xcode-select -s /Applications/__oldXcode.app/Contents/Developer
シミュレータでビルドしてもらうよう指定する
-sdk iphonesimulator
オプションを追加してビルドします。
$ xcodebuild -workspace ../../Test/TestLib.xcworkspace -scheme TestApp -sdk iphonesimulator
のはずなんですが、めっちゃいっぱい ❌ /Applications/__oldXcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/include/sys/_types.h:76:9: unknown type name '__uint32_t'; did you mean '__uint128_t'?
が出てつらいんで解決したらまたなんか書こう...。
*1:.appファイルはXCodeでビルドが完了すると $(PROJECT_DIR)/build/Release-iphoneos/xxxxx.app のようなパスに作成され、これを Payload フォルダに入れて圧縮 -> 拡張子を変更したものが .ipa ファイル https://developer.apple.com/jp/documentation/IDEs/Conceptual/AppDistributionGuide/TestingYouriOSApp/TestingYouriOSApp.html http://lain.heavy.jp/lain/2012/01/13/462 参照
*2:appiumのcapsファイルに指定するファイルは .ipa でも .app でもよさそう...?
*3:若干、いいすぎですが、メジャーバージョンが2~3離れたりしたら厳しい
今日のbash
&
... コマンドをバックグラウンドで実行する
参考: http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230589
例
$ heavy_command&
case
文 ... 他の言語のswitch と同じ
参考: http://shellscript.sunone.me/case.html
case 値 in パターン1 ) 処理1;; パターン2 ) 処理2 ;; パターン3 ) 処理3 ;; … パターンn ) 処理n ;;
)
の記法がマジでびびる。
getopts
参考: https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/com.ibm.aix.cmds2/getopts.htm https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb
コマンド・ラインの引数を処理し、有効なオプションを検査する。
こないだrubyでちょいとしたスクリプト書いてる時に引数検査をARGVでeach回してぐるぐるしてたんですけど、 あったわ〜 シェルにあったわ〜
って感じです。
getopts OptionString Name [Argument...]
OptionString
は、使用したいオプションの文字列。よくある例としては h
や help
で使い方を出力する、といったもの。
:
をつけるかどうかで振る舞いが変わり、 OptionString
の後ろに :
をつけると、そのオプションは引数を必要とするようになります。
指定していないオプションや引数を使った場合に
# https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb より引用 ./test.sh: option requires an argument -- d ./test.sh: illegal option -- x
のようにエラー表示が出て終了しますが、 OptionString
の全体の前に :
をつけるとこのエラー表示は行われなくなり、自前でのエラー処理を行うことができます。
https://qiita.com/b4b4r07/items/dcd6be0bb9c9185475bb の記事が非常に参考になり、 getopts
のテンプレートなども紹介されているので今度便利コマンドを使う時は利用したいところです。
$!
... 最後に実行されたバックグラウンドコマンドのプロセスIDに展開
参考: https://qiita.com/laikuaut/items/1daa06900ad045d119b4
ちなみに現在動かしている(バックグラウンドでない)シェルのプロセス番号は $
で展開される。
$ echo $$ 521