iii threetreeslight

June 11, 2014

[objective-c][ios]表示されている画面のsubview取得

今回はsubviewにどんな子が入っているか調べたいと思います 表示されている画面の取得 表示されている画面のsubviewの取得には、大まかに2つの方法が考えられます。 UIViewControllerのviewDidLoadから取り上げる。 [[UIApplication] sharedApplication]から取得する。 そのタイミングのものを取得するとした場合は2が最適だと思ってます。 sharedApplicationから取得する方法 2way UIWindow -> subviews -> view UIWindow -> rootViewController -> view singleView こんな感じで実装 - (void)viewDidAppear:(BOOL)animated { UIWindow *window = [UIApplication sharedApplication].keyWindow; NSLog(@"keyWindow : %@", window); NSLog(@"UIWindow -> view ----------------------------------------"); NSLog(@"<UIWindow> subviews : %@", window.subviews); UIView *view = window.subviews[0]; NSLog(@"<UIWindow> top view: %@", view); NSLog(@"<UIWindow> topView->subviews: %@", view.subviews); NSLog(@"UIWindow -> rootViewController -> view ----------------------"); UIViewController *rootViewController = window.rootViewController; NSLog(@"<rootViewController> : %@", rootViewController); UIView *rootView = rootViewController. ... Read more

June 11, 2014

[Objective-c][ios]_UIModalItemHostingWindowから何時解放されるのか

swift盛んな今も、頑張ってobjective-cやります。 UIAlertView表示時のkeywindowは、一時的に_UIModalItemHostingWindowとなり既存のwindowがkeyWindowから外れてしまいます。 その_UIModalItemHostingWindowから何時解放されるのかを、前に調べた [Objective-c][iOS]UIAlertView表示時におけるUIWindowの挙動に引き続き、をもう少し調べました。 仕込み singleViewApplicationをサンプルで作ります。 AppDelegate上には、以下のように viewDidLoadでalertを表示 viewDidLoad, viewWillApper, viewDidApperそれぞれにおけるkeyWindowとwindowsをロギング 結果 viewDidLoad ------------------------------------------------ keyWindow: <_UIModalItemHostingWindow: 0x8f4a000; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x8f4a500>; layer = <UIWindowLayer: 0x8f4a180>> windows : <_UIModalItemHostingWindow: 0x8f4a000; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x8f4a500>; layer = <UIWindowLayer: 0x8f4a180>> viewWillApper ------------------------------------------------ keyWindow: <_UIModalItemHostingWindow: 0x8f4a000; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x8f4a500>; layer = <UIWindowLayer: 0x8f4a180>> windows : <_UIModalItemHostingWindow: 0x8f4a000; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x8f4a500>; layer = <UIWindowLayer: 0x8f4a180>> viewDidApper ------------------------------------------------ keyWindow: <UIWindow: 0x8f369a0; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x8f37a60>; layer = <UIWindowLayer: 0x8f36e10>> windows : <UIWindow: 0x8f369a0; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x8f37a60>; layer = <UIWindowLayer: 0x8f36e10>> 上記のように、解放されるのは描写完了時ですね。 ... Read more

June 10, 2014

[Git]最近良く使う小技メモ(戻す、どっか置く、PRる、持ってくる)

最近よく使うgitの小技(って言う程でもないですが)を共有も兼ねてメモしておきたいと思います。 直前のコミット状態に戻したい まぁこれは良くやるのですが、 $ git reset --hard その後のuntraking directoryやfileも削除したいときってあるんですよね。 rm -rfで削除なんてめっちゃ危ない。 そういうときにはgit clean。これでuntraking file, directoryを削除できます。 $ git clean -df とりあえずほかっときたい! ここら辺のほかるや戻すは良くやりますが、 # どっかいけ $ git stash # もどってこい $ git stash pop untrakingファイル含めてくれないんですよね、コレも包みたいときは--untrakingを付ければ行ける。 $ git stash -u まずPull Request作る forkします(hubコマンド) $ git fork branchコマンドでbranch作るの辛いので、checkoutしつつ作る $ git checkout -b foo 空コミット $ git commit --allow-empty -m "Add foobar" からの空PR(hubコマンドをgitにaliasしています。) $ git pull-request -m "[WIP] Add foobar" で、PRにラベルやmile stone付けたりする。(ここら辺もterminalから出来るようにせねば) ... Read more

June 9, 2014

[rails]activeRecord + mysqlにてmillisecondを含むdatetime型を扱う

mysql 5.6.4よりmillisecondを扱う事が出来るようになった。 mysql2 adopterを見ても、動作する事が分かる。 MySQL 5.6 with microsecond precision #324 millisecondを適用 datetime型については、後方互換のためデフォルトは秒までしか取得しない。 そのため、millisecondまで適用する事を明示的に宣言する必要が有る。 SQL> ALTER TABLE books MODIFY COLUMN published_at DATETIME(6); reference 11.3.1 The DATE, DATETIME, and TIMESTAMP Types migrationの宣言 こんな感じで適用されます。 $ vim db/migrate/xxxxx_hoge.rb change_column :books, :published_at, limit: 6 $ rake db:migrate $ rails db SQL> desc books; ... | published_at | datetime(6) | YES | MUL | NULL | ... ここらへんのPRで追加されています。 reference New issue MySQL 5. ... Read more

June 3, 2014

[python]pdbでデバッグする

システム連携とかしていると、print debugとかやってられない。 printしているものが足りなかったりとか面倒で、bindingしたい! と思っていたら標準で出来る模様。 スクリプトにbindingを仕込む set_traceを埋め込む事で、当該箇所からトレースできる。 import pdb; pdb.set_trace() ステキ。 $ python ./foo.py > /Users/foobar/dev/work/foo/foo.py(196)bar() -> if not hoge : return (Pdb) くわしくはこちら 26.2. pdb — Python デバッガ pudb 他にも、debug toolとしてpudbなどがある。 pudb 2014.1 Python の CUI デバッガ PudB が便利すぎた件 便利そうだけど、なんかスタンス違うかもと思って試してません。

June 2, 2014

[rails]doorkeeperに対応したOAuth clientを作成

さてOAuth clientを作ります。 OAuth Providerの設定 先ほど作ったoauth providerに新しいアプリを登録します。 callback url : http://localhost:4000/users/auth/doorkeeper/callback Provider: user情報取得用APIを作成 provider側の作業です /api/me.jsonにてuser情報を返してあげるようにします。 api用のcontrollerを切ります。 $ vim app/controller/api/api_controller.rb module Api class ApiController < ::ApplicationController private def current_resource_owner User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token end end end user情報を返してあげるようにします。 $ vim app/controller/api/credentials_controller.rb module Api class CredentialsController < ApiController doorkeeper_for :all respond_to :json def me respond_with current_resource_owner end end end routingを設定 $ vim config/routes.rb namespace :api do # another api routes get '/me' => "credentials#me" end これでよし ... Read more

June 2, 2014

[rails] doorkeeperでOAuth2

ユーザー毎にトークンでやり取りするのはちょっとアレなので、アプリからoauth2にしようと思う。 rails下ごしらえ プロジェクト作る $ rails new oauth2-sample -T --skip-bundle 適当にコントローラー作る $ rails g controller root index OAuth Provider devise install devise $ vim Gemfile gem 'devise' $ rails generate devise:install create config/initializers/devise.rb create config/locales/devise.en.yml =============================================================================== Some setup you must do manually if you haven't yet: 1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development. ... Read more

May 23, 2014

[ios][objective-c]podを作る

配布するSDKの導入が容易になる様、cocoapodsで配布しようと思います。 cocoapods require ruby 下ごしらえ まずpodsいれる $ gem install cocoapods それでもってひな形を作る $ pod lib create Foo これでディレクトリが出来る ├── Assets ├── CHANGELOG.md ├── Classes └── ios └── osx ├── Example └── Podfile ├── LICENSE ├── README.md ├── Rakefile └── NAME.podspec 更新者のpodは行ってない場合もふまえbundlerでcocoapods入れるようにします。 $ bundler init $ vim Gemfile gem 'cocoapods' $ bundle reference Making a CocoaPod podspecを作る $ pod spec create Foo $ vim . ... Read more