Flutter触り始め

この度、新しい仕事で必要になりそうになったので、Flutterを触り始めた。 iOSとAndroidの2つのアプリを1つのソースで開発できるというのは、ReactNativeやらUnityやらいろいろな方法はあるけれど、あんまりいい印象は無い。 いい印象は無いと言うけれど、そ…

iOSアプリ開発の証明書周りがよくわかっていないので自分なりに整理してみた

iOS

iOSアプリの証明書周り、非常にわかりにくい。 開発時に毎回どうだったっけ?って忘れてしまうので、自分なりに整理してみました。 証明書周りの構成 証明書周りの構成は4つに分類されています。 App ID 証明書 端末 プロビジョニングファイル developmentと…

【vim】正規表現のマッチする範囲を指定して文字列置換をもっと簡単にする

vim

\zsと\zeを使えば、正規表現のマッチする範囲を指定できて、置換がとても楽になる。 例えば、 <div>ABCDEF</div> <p>123456</p> <div class="sample">abcdef</div> という文字列があって、divタグの中身だけ変えたい時。 普通にやると、ちょっとめんどくさい正規表現を書かないと置換できません。 %s/\(<div.*>\)</div.*>…

【swift】Viewの一部を角丸にする

swiftで角丸のViewを作るには、layerのcornerRadiusを設定すれば簡単にできますが、これだと4隅すべてが角丸になってしまいます。 上だけを角丸にしたい時などには、一部だけ角丸のパスをUIBezierPathで作成し、CAShapeLayerに設定します。 developer.apple.…

【swift】グラデーションを描画する

swiftでグラデーションを描画するには、CAGradientLayerを使います。 developer.apple.com let startColor = UIColor(white: 0, alpha: 0).CGColor let endColor = UIColor(white: 0, alpha: 1).CGColor let layer = CAGradientLayer() layer.colors = [star…

【swift】Viewに自分自身の大きさを定義して、動的なViewを正しくレイアウトする

動的に要素を並べるようなViewを作成した時に、AutoLayoutの設定の仕方で悩みました。 class CustomView: UIView { init() { super.init(frame: .zero) backgroundColor = .whiteColor() // 正方形のViewを左右に並べる let view1 = UIView(frame: CGRect(x:…

【swift】ViewControllerとViewを分離させてViewControllerの記述を減らす

最近は、storyboardもxibも使わない方針で実装しているため、Viewを構築するのも全てコードで定義しています。 特に考えなければ、initializeの時に組み立ててしまうのですが、そうするとViewControllerとは関係のないコードが増えていき、可読性が悪くなり…

【swift】UITableViewCellの選択した時の表示を変更する

selectionStyleを変更するだけです。 import UIKit class CustomCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code selectionStyle = .None } }

【android】エミュレータのhostsを書き換える

Android Debug Bridge (adb) を使用して ローカルにあるhostsファイルをエミュレータ上に配信させて書き換えます。 まず、エミュレータをroot権限で操作できるように設定します。 $ adb root remountします。 $ adb remount 127.0.0.1のまま差し替えちゃうと…

【swift】コードでAutoLayout その1 - Visual Format Language

コードでAutoLayoutを記述します。 iOSにはVisual Format LanguageというAutoLayoutを直感的に定義できるフォーマットが用意されており、使い方さえ覚えてしまえばちょっとした制約であればサクッとコードで書けてしまいます。 developer.apple.com 使ってみ…

【swift】対象のビューのAutoLayoutを計算した後のCGSizeを取得する

tableViewCellの高さ計算の時など、コード上で対象のViewのAutoLayoutを計算した後のサイズを取得したい時があります。 そんな時は、systemLayoutSizeFittingSizeを使います。 引数で渡す値に応じて、コンテンツを表示するための最小サイズか、最大サイズのC…

【swift】【iOS】UIViewからUIImageを生成する

facebookに写真をシェアしたい時などに、アプリ側で組みて立てたUIViewからUIImageを生成したい時があります。 例えばアプリ側でこんなViewを組み立ててみます。 これはソースコードは雑につくるとこんな感じです。 5つのUIViewで組み立てられています。 let…

【iOS】【swift】カスタムViewとxibを紐付ける

swiftで独自のViewを定義した時に、見た目をxibで整える方法をまとめます。 1. 独自のViewクラスの定義 class CustomView: UIView { } 2. 空のxibファイルを作成 3. xibで見た目を作成 4. File's Ownerで先ほどの独自Viewクラスを指定 これで、とりあえずxib…

【iOS】【Swift】convertRectを使ってframe位置を計算する親要素を変更する

要素の座標位置を取得するためには、その要素のframeを見ます。 view.frame.minX view.frame.minY この時の座標位置は親要素から見た時の相対的な位置になります。 例えばviewが3階層の構造になっている場合、それぞれの座標位置は下記のようになります。 黄…

【swift】Optional Bindingについて

前回swiftでのnilの取り扱いについてまとめました。 【swift】nilとoptionalな型の取り扱い - tanihiro.log 今回はnilを取り扱う時に便利な記法のOptional Bindingについてまとめます。 Optional Binding 必要になるケース 例えば、関数の中には返り値がOpti…

【swift】nilとoptionalな型の取り扱い

nilの扱い swiftでは通常、変数や定数にnilは代入できません。 var hoge: String = nil let fuga: String = nil これはコンパイルエラーになります。 nilを代入するためには、optionalであることを宣言するために型に?をつけます。 var hoge: String? = nil …

【swift】InterfaceBuilderを使用してViewControllerを組み立てる

objective-cと変わらないと思ってたらちょこっとだけ違いました。 新規ファイル作成から「Cocoa Touch Class」を選択して 「Also create XIB file」にチェックを入れれば、ViewControllerのファイルと一緒にxibファイルを作成されます。 objective-cであれば…

【swift】変数・定数・関数を定義する

最近swiftをちょっと勉強しだしたので、ちょっとずつメモを取っていこうと思います。 変数 var hoge: String = "hoge" // 型を宣言する var hoge = "hoge" // 宣言しなくても自動的に判定もする var hoge = "hoge", fuga = "fuga" // カンマで連続で定義する…

GoogleAnalyticsのトラッキングのコールバックを設定する

〇〇ページに遷移するためのボタンのクリック率とかを図るためによく、ボタンのクリックイベントを計測したりします。 でも、このページ遷移とトラッキングのAPIを同時に叩くと、やっぱりうまくトラッキング出来ないこともチラホラあるみたいです。 Analytic…

【Ruby】ActiveRecordのAssociationにメソッドを追加する

ActiveRecordのhas_manyとかbelongs_toとかのAssociationはブロックを渡してメソッドを追加することができます。 class User has_many :blogs do # ステータスがopenのものを取得する def open where(status: 'open') end end end こんな感じで、ブロックの…

【Rails】belongs_toで紐付けたモデルの存在チェック

belongs_toで紐付けたモデルが本当にデータとして存在するかどうかをチェックする。 class Blog has_many :comments end class Comment belongs_to :blog end 例えば、このようなモデルがあった時、Blogモデル経由でCommentを作成した場合は、すでにBlogは存…

【css】floatとvertical-alignを併用しようとしてがっつりハマった話

css

先日書いたブログに、先輩がこんな風にコメントしてくれたにもかかわらず、がっつりハマったので戒めのためにもメモしておきます。 なにが起きたか 要件としては、高さの違う2つのボックスを横並びにして、上下中央寄せにする、というものでした。 <div class="wrapper"> <div class="left">左は<br>二行</div> <div class="right"></div></div>…

【CSS】横幅が可変な要素を中央寄せにする

css

margin: 0 auto;で中央寄せするためには要素の幅を指定しないといけないので、横幅が可変な場合はこの方法では中央寄せにできません。 inline-blockを使えばできるみたいです。 <div class="pager_wrapper"> <ul class="pager"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> </div> .pager_wrapper { text-align: center; } .pager { display: inl…

【GoogleAnalyitcs】複数のトラッキングコードを一つのページに埋め込む

最新版のanalytics.jsであれば、複数のトラッキングコードを一つのページに埋め込むことができます。(ga.jsではできません) トラッキングコードの定義 ga('create', 'UA-xxxxxxxx-1', 'auto'); ga('create', 'UA-xxxxxxxx-2', 'auto', {'name': 'sub'}); …

AngularJSを初めて勉強する時にたどった道

最近、初めてAngularJSを使ったんですが、すごく便利でなぜ今までちゃんと触ってこなかったのかを後悔しています。 ただ、便利な面学習コストも高くて、なかなか使いこなすまでに時間がかかりそうです。 僕もまだ一部機能しか使えていませんが、これからAngu…

EC2でping監視をする時はセキュリティグループで許可しましょうという話

EC2のインスタンスをzabbixで監視していると、なぜかping監視のところでアラートが挙がる。 なぜだなぜだーと悩んでいたら、セキュリティグループで許可しない限りpingも到達しないからでした。 セキュリティグループの設定 Custom ICMP ruleを選択 TypeはEc…

サーバにhtpasswdだけインストールしたい

NginxだけでWebサーバを構築したけど、Basic認証はかけたいからhtpasswd使いたい!でもApacheはインストールしたくない!って時の方法です。 $ yum install httpd-tools htpasswdはhttpd-toolsというパッケージに分けられているみたいなので、これをインスト…

apache2.4からアクセス制限の書き方が変わってた

apacheがこんなエラーを吐いてくるので、なんだろうなーと思っていたらアクセス制限の書き方が2.4から変わってました。 client denied by server configuration・・・ 今までのこれが <Directory "/hoge"> Order allow,deny Allow from all </Directory> <Directory "/fuga"> Order deny,allow Deny from all </Directory> …

fluent-agent-liteのrpmを作成する

全部READMEに書いてあることなんですが、自分用にまとめます。 https://github.com/tagomoris/fluent-agent-lite rpm-buildのインストール rpmを作成するためにはrpm-buildが必要なので、インストールします。 $ yum install rpm-build インストールすると、…

serverspecをグループ分けして実行する方法

serverspecは、デフォルトの設定だとhost毎にspecファイルを書かなければいけません。 spec ├── spec_helper.rb └── example.com └── httpd_spec.rb そのため、同じミドルウェアがインストールされている場合、同じソースを書かなければいけないのが少し面倒…