サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
都知事選
tanihiro.hatenablog.com
最近は、storyboardもxibも使わない方針で実装しているため、Viewを構築するのも全てコードで定義しています。 特に考えなければ、initializeの時に組み立ててしまうのですが、そうするとViewControllerとは関係のないコードが増えていき、可読性が悪くなります。 class ViewController: UIViewController { init() { super.init(nibName: nil, bundle: nil) // ここで組み立ててしまうとあっという間に行数が増えていく... addSubview(UIView()) addSubview(UIView()) } } その変わりに、View自体を独自クラスにしてあげて、それをViewControllerで読み込むようにすれば、Viewの組み立てを分離できます。 ViewControllerに
tableViewCellの高さ計算の時など、コード上で対象のViewのAutoLayoutを計算した後のサイズを取得したい時があります。 そんな時は、systemLayoutSizeFittingSizeを使います。 引数で渡す値に応じて、コンテンツを表示するための最小サイズか、最大サイズのCGSizeを返します。 サイズ計算時にはサブビューを含めたすべての制約が考慮されます。 // コンテンツを表示するための最小サイズを指定する let minSize = view.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) // コンテンツを表示するための最大サイズを指定する let maxSize = view.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize)
swiftで独自のViewを定義した時に、見た目をxibで整える方法をまとめます。 1. 独自のViewクラスの定義 class CustomView: UIView { } 2. 空のxibファイルを作成 3. xibで見た目を作成 4. File's Ownerで先ほどの独自Viewクラスを指定 これで、とりあえずxibファイルとViewクラスが紐付いたので、各要素のOutletやActionを定義できるようになります。 5. Viewクラス側でxibファイルを読み込み、xibファイルで定義した一番親のViewを追加する File's Ownerでクラスを指定しただけでは、xibファイルを読み込むことはしません。(してくれればいいのに) Viewクラス側で明示的に読み込んであげる必要があります。 xibファイルを読み込むにはloadNibNamedを呼び出します。 // xibファイル
標準のミュージックアプリの様な、UITabBarとUINavigationを同時に使う方法をまとめます。 どうやるのか UINavigationControllerの配列を作り、UITabBarControllerに渡してあげるだけです。 // 各タブのrootとなるViewControllerを指定して // UINavigationControllerを生成 UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:[[TAViewController alloc] init]]; UINavigationController *navigationController2 = [[UINavigationController all
NginxだけでWebサーバを構築したけど、Basic認証はかけたいからhtpasswd使いたい!でもApacheはインストールしたくない!って時の方法です。 $ yum install httpd-tools htpasswdはhttpd-toolsというパッケージに分けられているみたいなので、これをインストールすれば、apacheをインストールせずともhtpasswdが使えるようになります。
Rubyから複数の音声ファイルを繋げる方法をまとめます。 soxを使用する CUI上で音声ファイルを扱う時に便利なツールとして、soxがあります。 http://www.hcn.zaq.ne.jp/___/unix/sox-ja.html http://sox.sourceforge.net/sox.html このsoxを使用します。 インストール soxをMacにインストールします。 brew install flac sox chromaprint Rubyからsoxを操作する Rubyからsoxを操作するために、下記のライブラリを使用しました。 https://github.com/TMXCredit/ruby-sox インストール gemでインストールしました。 gem 'ruby-sox', github: 'TMXCredit/ruby-sox' 実装してみる # 音声ファイル
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: inline-block; } 中央寄せにしたい横幅が可変な要素を更にdivタグなどで囲い、外側の要素にtext-align: center;を指定します。 中央寄せにしたい要素は、display: inline-block;を指定します。 これで、親要素のte
自分が管理権限を持っているFacebookページであれば、APIで操作が可能です。 自動で投稿したりといったことが、簡単に作ることができます。 そのためには、FacebookページをAPIで操作するためのAccessTokenが必要なので、そのAccessTokenの取得方法をまとめます。 とにもかくにもOAuth認証 まずは自分のAccessTokenが必要なので、OAuth認証をします。 この時、Permissionに「manage_pages」を指定します。 Facebookページの管理を求められます。 Facebookページ用のアクセストークンを取得 Facebookページ用のアクセストークンを取得するためのAPIがあります。 https://graph.facebook.com/me/accountsこのAPIは、自分が管理権限を持っているFacebookページの情報を取得できま
先日書いたブログに、先輩がこんな風にコメントしてくれたにもかかわらず、がっつりハマったので戒めのためにもメモしておきます。 なにが起きたか 要件としては、高さの違う2つのボックスを横並びにして、上下中央寄せにする、というものでした。 <div class="wrapper"> <div class="left">左は<br>二行</div> <div class="right">右は一行</div> </div> .wrapper div { float: left; } とりあえず、横並びだからfloatを指定して、上下中央寄せはvertical-alignを使えばいっかと思っていたら、全然そんなことなかった。(ちゃんと仕様を理解しないでなんとなく使っているからこうなる) .right { display: table-cell; vertical-align: middle; } とか
Rakefileに記述する Rakefileに記述して指定します。 task default: :about この様に書くと、タスクを指定せずrakeコマンドのみを実行した時にrake aboutと同じ挙動になります。 taskは複数設定することも可能です。 task default: [:about, :routes] aboutが実行された後、routesが実行されます。 デフォルトに設定されているタスクを解除する installしたgemの中で、taskをデフォルトに設定している場合もあります。 そのタスクをデフォルトで実行したくない場合は、一度デフォルトタスクを解除する必要があります。 task(:default).clear task default: :about 一度clearしてあげることで、defaultタスクの中身が空になり、実行されるのはaboutだけとなります。
ActiveRecordのhas_manyとかbelongs_toとかのAssociationはブロックを渡してメソッドを追加することができます。 class User has_many :blogs do # ステータスがopenのものを取得する def open where(status: 'open') end end end こんな感じで、ブロックの内部で関数を定義するとその関数をメソッドチェーンで実行できるようになります。 User.first.blogs.open 複数のモデルで使い回したい処理がある場合は、moduleにまとめてextendオプションでメソッドを追加することも可能です。 module Common def open where(status: 'open') end end class User has_many :blogs, extend: Common
UINavigationControllerの使い方を簡単にまとめます。 UINavigationControllerを定義する まずは、UINavigationControllerを定義します。 その時、一番最初に表示したいViewのViewControllerを渡します。 TAViewController *viewController = [[TAViewController alloc] init]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; initWithRootViewControllerで一番最初のViewを指定しています。 このnavigationControllerをw
最近、初めてAngularJSを使ったんですが、すごく便利でなぜ今までちゃんと触ってこなかったのかを後悔しています。 ただ、便利な面学習コストも高くて、なかなか使いこなすまでに時間がかかりそうです。 僕もまだ一部機能しか使えていませんが、これからAngularJSを勉強する人にオススメの記事などをメモ程度にまとめます。 公式サイト http://angularjs.org/ 英語が得意な人はここだけ見てればいいと思います。 どんなものなのかをとりあえず知りたい アシアルさんの記事が概要を掴むのにわかりやすいと思います。 AngularJSに触れてみる その1 : アシアルブログ あと、@naoya_itoさんのスライドで説明している「双方向バインディング」を見て、AngularJSすげー!ってなりました。 英語が苦手な人にオススメのチュートリアル AngularJSのチュートリアルを、日本
RailsでFormを扱う時は、Modelと紐付けることで、validationなどの設定はModelに書くことができ、非常に便利です。 ですが、DBと関係ない場合は紐付ける対象のModelが生成されていません。 そこで使用するのがActiveModelです。 https://github.com/rails/rails/tree/master/activemodel 使い方 使い方は簡単で、既存のModelと同じように扱うことができます。 Modelクラスの作成 まずは、Formのプロパティを持ったModelクラスを作成します。 このクラスはActiveModel::Modelをincludeさせます。 class Hoge include ActiveModel::Model # Formで使用するプロパティを定義する attr_accessor :foo, :bar, :piyo #
最近、UITableViewはなんとなく触れる用になってきたので、基礎的な使い方をまとめます。 とりあえず表示してみる とりあえず画面にtableViewを表示します。 UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain]; [self.view addSubview:tableView]; 立ち上げてみるとこんな感じです。中身が何も入っていないので非常に見づらいです。 データを表示してみる UITableViewにデータを表示するためには、UITableViewDelegateとUITableViewDataSourceをdelegateしなくてはなりません。 まずは、delegateする対象のクラスを指定します。 tableView
http://fb-checker.tanihiro.com/ どんなサイトか URLを入力して、そのURLのいいね数の内訳(share, like, comment)の数を表示します。 なおかつ、facebook上で公開範囲が全体になっている投稿からURLをキーワードにして検索をし、投稿を表示します。 作ろうと思ったきっかけ FQLでなにか面白い値取れないかと調べていたら、URLのいいね数の内訳が取ってこれたので、それを調べられるツールを作ろうと思い立ったのがきっかけです。 それだけでは面白くないので、SearchAPIも使って投稿を取得し、評判をチェックできるようにしちゃおうと。 学生時代以降全く触っていなかったFireWorksを使って、自分でデザインもしました。(久々すぎて全然使い方わからなくなっていた) まとめ これを使えば、自分のサイトがFacebook上でどれだけ話題になって
InterfaceBuilderを使って、TableViewのセルをカスタマイズする方法をまとめます。 セル用のclassを新規作成 これでカスタムセル用のクラスが作成されますが、IntefaceBuilderがありません。 なので、作ります。 これで空の状態のxibファイルが作成されます。 要素を並べる xibファイルができたら、後はカスタムセル用に要素を並べます。 とりあえず、こんな感じで背景をカラフルにしてみました。 非常にオシャレです。 xibファイルをclassに紐付ける これだけだと、ただInterfaceBuilderで見た目を作っただけなので、これを実際に使えるようにします。 まずは、このxibファイルをclassに紐付けます。 これで、xibファイルがclassに紐付きました。 classに紐付けたので、各要素にソースから値を設定できるようにプロパティにします。 titl
Railsでmigrationを作成する時、changeメソッドだけが定義されていたり、upとdownメソッドの2つが定義されている時があります。 class AddColumnHoge < ActiveRecord::Migration def change end end class ChangeColumnHoge < ActiveRecord::Migration def up end def down end end こんな風に、migrationファイルを作成した時の名前で、生成されるclassのひな形が違います。 up/downについて upとdownメソッドは、migrateを実行した時の処理と、rollbackした時の処理を定義します。 upで変更したものは、downで元に戻るようにしておかないと、正しくrollbackできません。 class ChangeColumnH
Rack::Test::UploadedFileを使用します。 http://rdoc.info/github/brynary/rack-test/master/Rack/Test/UploadedFile インスタンスを生成する際に、第一引数にファイルのパス、第二引数にcontent-typeを指定します。 Rack::Test::UploadedFile.new("/path/to/sample.jpg", "image/jpeg") ファイルをmultipart/form-dataなどでリクエストするAPIなどのテストは、このUploadedFileのインスタンスを渡してあげれば、ファイルアップロードのテストができます。 例えばこんな感じ。 post :photos, file: Rack::Test::UploadedFile.new("/path/to/sample.jpg",
ブロックを渡すようなメソッドは、Procオブジェクトを引数として渡すことも出来ます。 普通にブロックを渡すとこんな感じ。 hoge = %w(foo bar piyo) hoge.each do |val| puts val end これをProcオブジェクトを引数として渡すとこんな感じになります。 hoge = %w(foo bar piyo) block = Proc.new {|val| puts val } hoge.each &block Procオブジェクトを格納した変数を引数として渡す時に、先頭に「&」をつけると、渡すことができます。 これだけだと、あんまり利用価値が無さそうに思いますが、応用するとかなり便利です。 シンボルの先頭に「&」をつける 引数の先頭に「&」をつけると、Procオブジェクト以外の場合は渡ってきた値に対して「to_proc」メソッドを呼び出した結果が実行
最近、自分でobjective-cをちょこちょこ書いていて、API作る側もちょっと気をつけた方がいいなーと思ったことがありました。 それは、プロパティ名です。 1. "id"を使わない objective-cにはid型があるので、プロパティ名でそのままidを使うとまぁややこしくなるから、APIで渡してあげる時もxxxIdにしてあげると、スッキリします。 2. "newXXX"を使わない なんか、newXXXという変数を定義するとビルドすらできなくなってしまいます。 property's synthesized getter follows Cocoa naming convention for returning 'owned' objects こんなエラーが出ます。 ここらへんに書いてありました。 http://stackoverflow.com/questions/6327448/se
Alfredはめちゃくちゃ便利です。 ランチャーとしてとても優秀なので、いつも愛用しています。 https://itunes.apple.com/jp/app/alfred/id405843582 そんなAlfredの変な機能を見つけました。 1. まず、いつもどおりAlfredを立ち上げます 2. 文字を入力します 3. command+lを押します !!!!!!!???????? なんだこの機能!?誰が使うの!? と、発見した時は大分困惑しましたが、落ち着いて考えてみると便利かもしれません。 例えば... こんな感じで、メッセージの書き置きに使えるかもしれません。 なんかカッコイイ文字を表示しておくと、なんかカッコよくなったりするかもしれません。 能年玲奈を感じることだってできます。 使い方は何通りもありそうですね。 皆さんもよいAlfredライフを!!
jsを書くとき、今まであまりprototype継承を使用せず、どちらかというとモジュールパターンで記述することが多かったので、それぞれ何が違うのか、あまり理解していませんでした。 それを今日教えてもらえたので、まとめます。 モジュールパターンとは function Hoge() { var n = 1; return { fuga: function() { alert(n); } }; } var hoge = new Hoge; hoge.fuga(); // 「1」がalertで表示される hoge.n; // Error このように、関数の返り値をobjectで返し、さらにそのobjectの中にfunctionを用意します。 fugaの中で参照しているnはクロージャの中で生き続けるので、外からでもアクセスできますが、直接は参照できません。 この、クロージャを利用してprivateや
通知周りはim.kayac.comに任せました。 https://github.com/tanihiro/nonen-rena-notification 設置方法(簡単3ステップ) git clone im.kayac.comのアカウント情報を記入 cronを設定 現在、チェックする対象は公式ブログと事務所サイトのニュース。 (Yahooニュースにも対応しました。) 僕は一時間ごとにチェックするようにしました。 うむ。しあわせである。 ※実装中に公式ファンクラブに入会しました。(無料です)
土曜日に職場の@handlenameと@nobu_ohtaと組んで参戦してきました。 結果は惨敗。でもすごく楽しかった。 始まる前 他の2人は仕事でPerlを使っているので、自然とPerlを選択することに。 僕はPerl全然わからないので、始まる前はどうやって空気にならないようにしようか、ってことばかり考えてました。 いざ開始 いざ始まってみると、本当に乱暴にソースコードだけ投げられるんですね。 特に説明も無しで始まる異様な空気を感じて、「これがisuconかぁ」とバリバリ初心者の心境でした。 各々が動き出す まずは、みんなでReadmeをチラ見しつつ、アプリケーションを立ち上げざっとページを確認。 その後、handlename先輩はEC2のサーバに入ってgitリポジトリ作ってくれたり、nginx入れてくれたりとか色々してくれていた。 nobu_ohta先輩はアプリ担当ということで、ソース
https://github.com/tanihiro/zip-code-jp 最近業務で、よくある住所入力のFormで郵便番号から住所を取得するためのAPIを作ることがあったので、なんだったらその部分勉強がてらgemにしちゃおう、ってことで作った。 DBを使うまでも無いと思ったので、住所データは全部JSONファイルにしてコミットしてある。 業務で実装した時は、日本郵便から全部の郵便番号CSVを取得してきて、郵便番号毎にJSONファイルを作ったのだけど、それだとJSONファイルが10万件ぐらいになってしまったので、今回は前半3桁毎にグルーピングした。 インストール $ gem install zip_code_jp 使い方 require 'zip_code_jp' address = ZipCodeJp.find '102-0072' address.prefecture # 東京都 a
facebookの投稿によるタグ付にはいくつか種類があります。 投稿写真にタグ付 フィード投稿時にタグ付(○○と一緒にいます) 投稿時@hogehogeと書き込んでタグ付 その中でもこの3番の方法を、facebookではMentionTagging(メンションタギング)と呼んでいます。 今回は、このメンションタギングをAPIから行う方法をまとめます。 OpenGraphを使う このメンションタギングをGraphAPIから行う方法は、現時点で提供されていません。 唯一OpenGraphを使用することにより、実現が可能です。 ※OpenGraphについては今回は割愛します。 OpenGraphのAPI実行時、「message」というパラメータをでテキストを渡します。 その時、あるフォーマットに沿っていれば、文中にユーザー名を表示しそのユーザーに通知が飛ぶようになります。 フォーマット例1 ユー
とっても今更ですが、よく聞かれるのでfacebookのShare方法をまとめます。 facebookのShare方法には大きく分けると2種類あります。 1. sharer.phpを使う http://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fgoogle.com sharer.phpに「u」というパラメータでURLを渡せば、渡したURLのOGPを読み取ってShareを促すことができます。 この方法は、昔あったShareボタンのPluginのURLを抜き出したものなので、現在はShareボタンと同様に公式によるサポートはありません。 そのため、いきなりこの方法が使用できなくなる可能性もありますし、Share画面のレイアウトもきれいなものではありません。 いつの間にか、公式ドキュメントにsharer.phpが復活していました。https
主にsafariに限ったことと言っても過言ではないのですが、facebookに埋め込むアプリを作成した場合、cookieが書き込めない場合があります。 それは、主流のブラウザの中でsafariだけ、デフォルトでcookieのセキュリティが他ブラウザよりも厳しい設定がされているからです。 そもそもなんでcookieが書き込めないのか safariブラウザのcookieの設定は、third party cookieを書き込めないような設定になっています。 では、third party cookieの書き込みとはどういうことか、簡単に図にまとめてみました。 例1の方法は通常の場合です。 ブラウザからアクセスしているドメインと同じドメインのcookieを書き込んでいるのでなんの問題もありません。 例2の方法はfacebookのcanvasアプリの場合です。 ブラウザからアクセスしているドメインはf
次のページ
このページを最初にブックマークしてみませんか?
『tanihiro.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く