CGColorのenumを作ってみようと思いました。
色の定数を作っているところが気持ち悪いというか…!
もうちょっと何とかならないかなと考え中ですが、一旦出力しておきます。
CGColorのenumを作ってみようと思いました。
色の定数を作っているところが気持ち悪いというか…!
もうちょっと何とかならないかなと考え中ですが、一旦出力しておきます。
fastlaneを使ってAdHocの.ipa
を作るだけのlaneを書いた時のメモです。
fastlane init
が無事に済んだ後の状態を想定しています。
fastlane_version "2.13.0" default_platform :ios platform :ios do before_all do # どのlaneでも実行する前に必ずやること end # ipaを作るだけのlane lane :make_ipa do gym( workspace: "プロジェクト名.xcworkspace", configuration: "Debug", scheme: "プロジェクト名", clean: true, include_bitcode: false, output_directory: "./build", output_name: "プロジェクト名.ipa", export_method: "ad-hoc" ) end after_all do |lane| # どのlaneでも実行が終わった後に必ずやること end error do |lane, exception| # エラーが起きた時にやること end end
ここではmake_ipa
という名前のlaneにしましたが、好きな名前を付けましょう。
export_method: "ad-hoc"
configuration: "Debug"
という設定にしました。
プロジェクトでENABLE_BITCODE
をNO
にしている都合で一応明記してみました。(でも不要かもしれない)
今回はプロジェクト名.ipa
ということにしました。どんな名前でもOK。
.ipa
を出力するディレクトリを指定できます。
好きな場所を指定しても良いし、記述しなくてもOK。(指定なしの場合はプロジェクト直下に出来上がります)
$ fastlane make_ipa
実行したいlaneの名前を指定します。
ビルド時に以下のようなエラーメッセージが出てしまいました。
Exit status: 1 Your shell environment is not correctly configured Instead of UTF-8 your shell uses US-ASCII Please add the following to your '~/.bashrc': export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 export LC_ALL=en_US.UTF-8 You'll have to restart your shell session after updating the file. If you are using zshell or another shell, make sure to edit the correct bash file. For more information visit this stackoverflow answer: https://stackoverflow.com/a/17031697/445598
.bashrc
に、
export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 export LC_ALL=en_US.UTF-8
これらを追記する必要があるということでした。
なので、.bashrc
に追記して、
$ source .bashrc $ exec -l $SHELL
.bashrc
を読み込み直して(これだけではまた同じエラーに見舞われたので)、シェルを再起動させてから、再びfastlane make_ipa
を実行しました。
すると先ほどのエラーは消え、無事に.ipa
が作成できました!
$ fastlane init Ignoring xcodeproj-0.17.0 because its extensions are not built. Try: gem pristine xcodeproj-0.17.0 /Library/Ruby/Gems/2.0.0/gems/bundler-1.13.1/lib/bundler/rubygems_ext.rb:45:in `full_gem_path': uninitialized constant Bundler::Plugin::API::Source (NameError)
一旦、自分のRuby環境がどうなっているのか見直すことにしました。
Homebrewを使っています。
しばらくHomebrewをupdateしていなかったので、まずはupdateから。
$ brew update
無事にupdateが済んだので、rbenvを入れます。
$ brew install rbenv Error: rbenv-0.4.0 already installed To install this version, first `brew unlink rbenv`
以前にrbenvを入れていたようでalready installed
と言われてしまいました。(すっかり忘れている…)
次はruby-build
をupgradeします。
$ brew upgrade ruby-build
こちらはもりもりと更新された。
$ rbenv versions system * 2.2.3 (set by /Users/なまえ/.rbenv/version)
ちゃんと設定されていそうでしたが、ruby -v
で確認してみると、
$ ruby -v ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
思ってるのと違う…。システムの方が選択されている様子。
$ rbenv init # Load rbenv automatically by adding # the following to ~/.zshrc: eval "$(rbenv init -)"
.zshrc
に追記が必要との優しい案内が表示されています。(私はzshを使っているため)
.zshrc
を開いて中身を確認すると、確かにeval〜
の記述がなかったので追加します。
eval "$(rbenv init -)"
保存したら読み込み直します。
source ~/.zshrc
そして再度Rubyのバージョンを確認すると、
$ ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]
やった!!
これでrbenvの環境が整いました!
一応、どこを見ているのか確認してみると
$ which ruby /Users/なまえ/.rbenv/shims/ruby
ちゃんとrbenvを見ている様子!
これまではgem install
すると、Permissionが云々と怒られてはsudo gem
などして、それでも失敗する様な事が多かったのですが、問題なくinstallできるようになりました。
$ gem install fastlane
無事にfastlaneをインストールすることができました。
その後、$ fastlane init
も問題なく動作しました。よかった!
業務では特に使うことがないPythonですが、お気に入りの言語なので少しずつ学んでいます。 その時のメモが出てきたのでまとめました。
# 何もしないメソッド def main(): pass
同じプログラムを実行しているとキャッシュができる。
キャッシュが存在している場合は実行速度が変わるので都度削除する。
$ time python calculator.py < calculator.txt
time
はプログラムの実行時間を表示してくれる。
memory_profiler
を使う。
psutil
も併せてインストールしておくとよい。
$ pip install psutil memory_profiler
hoge()のメモリの使用量を確認する。
対象のメソッドに@profile
を書く。
@profile def hoge():
そして以下のように実行すると、メモリ使用量が出力される。
$ python -m memory_profiler hoge.py < hoge.txt
_ = int(input())
_
で変数を省略できる。
この記事は【その2】妻・夫を愛してるITエンジニア Advent Calendar 2016の21日目の記事です。
みなさんのエピソードはどれもキラキラとまぶしくて、読んでいて幸せな気持ちになります。 ご夫婦揃ってエンジニアなご家庭も意外と多いように感じました。
我が家もエンジニア夫婦です。夫はWeb、私はスマホアプリです。
お互いに得意分野は違っていて、好きな言語も違います。
プライベートで使っているOSは、夫はWindowsとAndroid、私はMacとiOS。
PCはThinkPadとMacBookAir。(あぁProがほしい)
…共通項がなかなか見つかりません!
そんな二人が力を合わせたらなんでも作れるんじゃないかしらと思ったりしますが、そこまではなかなか至らずにいます。
技術的な面のみならず、人間性や精神的な面などでも、私にはない物を持っていて尊敬します。
言いたい事を上手く伝えきれないことがよくありますが、うまく変換して受け取ってもらっています。
そして、3歳になった子どもがいます。
最近は娘の言語能力の高さに驚きながら、細かいところにびっくりするほどよく気が付くので、ずぼら母はしょっちゅう注意されてタジタジです。私よりもしっかりしている。
キーボードに書いてある自分の名前のひらがなを探している姿には、胸がキュンとします。
こんなにもかわいいかわいい娘がこの世に誕生したことも
今の私がエンジニアを続けることができているのも
愛する夫のおかげです。
ありがとうございます!
そしてもっともっとハッピーな家族になりたいので、来年は家庭内PDCAサイクルを回してみたいなと思っている所存です。ふふふ…
これからもよろしくお願いします♪
この記事はGeekWomenJapan Advent Calendar 2016の8日目の記事です。
以前から気になっていたiOSのグラフィックスAPI、Metalに入門してみました。
そしてクリスマスらしく、クリスマスツリーをMetalで書いてみることにしました。
(入門ということで生温かい目で見てください…!)
このように三角形を6個組み合わせてツリーのような形にしました。
三角形の各頂点に、それぞれ色を付けています。
葉っぱの部分は、黄緑から濃緑にグラデーションしています。
各処理の詳細については省略しますが、Metalで描画する際のおおまかな流れです。
このうち、5〜8を毎フレーム繰り返しており、常に画面全体を書き直しています。
Metalはシミュレータで動かないので、実機で実行する必要があります。
シミュレータを選択した状態で実行してみると、
Use of undeclared type 'CAMetalLayer'
と、Metalに関連するコードが解決できず、ビルドエラーになってしまいます。
(しばらくハマってしまいました)
四角形を描画するには、三角形を2つ並べます。
こちらにソースコードがあります。
MetalView.swiftに、ほとんどすべてが詰まっています。
OpenGLの知識がまだうっすら残っている状態だったので、何をすればよいかおおよそ把握できていたことは、Metal入門においてかなりプラスに働きました。
Swiftで書けるところが好印象です。
ビルドにすごく時間かかりました。 ちょっと直して、もう一度実行する時の待ち時間が辛かったです。。(この辺りは何かTipsがあるのかもしれませんが)
やり残したことは、「テクスチャを貼る」。せめて背景画像を出せたら、もう少しマシな画面になったかも・・
GeekWomenのアドベントカレンダーということで、元気はじける3歳児を育てるヨボヨボお母さんエンジニアの小話など書こうかなと思っていましたが、ふとMetalの神様が降りてきました。今の業務で使うことはないのですが、久しぶりにグラフィックス周りに触れてみたらやっぱり楽しかったです。今年のうちにMetalとたわむれることができて良い年越しができそうです。
StringをMD5に変換するのはこのようなコードになりました。
これを書いている中で学んだことのメモです。
NSData
ではなくData
を使い、NS
が付くものをあまり使わないようにと思っていたのです。
でも、MD5文字列に連結する箇所で、はじめはNSMutableString
を使っていました。
for i in 0 ..< digestLength { result.appendFormat("%02x", md5Buffer[i]) }
NSMutableString
を使っていました何だかしっくりこない…と調べるうちにreduce
が使えることを知りました。
md5String = (0..<digestLength).reduce("") { $0 + String(format:"%02x", md5Buffer[$1]) }
reduce
を使いましたNSMutableString
がなくなりましたスッキリしました。
(0..<digestLength)
この部分はCountableRange
になっているのですね。
CountableRange
では、map
やfilter
などを使うことができます。
きちんと理解できていなかったのでおさらい。
変化の軌跡を残してみます。
md5String = (0..<digestLength).reduce("", { (result, index) -> String in return result + String(format: "%02x", md5Buffer[index]) })
md5String = (0..<digestLength).reduce("") { result, index in result + String(format:"%02x", md5Buffer[index]) }
md5String = (0..<digestLength).reduce("") { $0 + String(format:"%02x", md5Buffer[$1]) }
mapなどを使う時はこの省略形を最もよく目にするので、これを使うのが良いですね。