Enviar pesquisa
Carregar
Objective-C が好きになる Tips & Hack
•
56 gostaram
•
38,704 visualizações
Taketo Sano
Seguir
ヤフー vs クラスメソッド「iOS 炎の7番勝負」にて発表 http://dev.classmethod.jp/news/yxcm/
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 55
Baixar agora
Baixar para ler offline
Recomendados
CG2013 12
CG2013 12
shiozawa_h
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
Akihiro Harai
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用
Sho Okada
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
Ryuma Tsukano
第12回計算機構成
第12回計算機構成
眞樹 冨澤
Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
takesako
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
Recomendados
CG2013 12
CG2013 12
shiozawa_h
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
Akihiro Harai
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用
Sho Okada
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
Ryuma Tsukano
第12回計算機構成
第12回計算機構成
眞樹 冨澤
Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
takesako
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
第10回 計算機構成
第10回 計算機構成
眞樹 冨澤
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
WebGL and Three.js
WebGL and Three.js
yomotsu
今さら始めるCoffeeScript
今さら始めるCoffeeScript
Ashitaba YOSHIOKA
Arctic.js
Arctic.js
chikathreesix
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵まで
Masayuki Nakano
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
とあるイルカのバーボンハウス
とあるイルカのバーボンハウス
yoku0825
wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料
Mizuki Yamanaka
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
Three.jsで3D気分
Three.jsで3D気分
Toshio Ehara
テーマ「最適化」
テーマ「最適化」
technocat
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceup
Yohei Munesada
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
JustSystems Corporation
Creators'night#12今井
Creators'night#12今井
Daisuke Imai
機械学習
機械学習
ssusere8ae711
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)
Yuki Shimada
あのパターンと仲良く付き合う 西磨翁 #yxcm
あのパターンと仲良く付き合う 西磨翁 #yxcm
Mao Nishi
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
Taketo Sano
Mais conteúdo relacionado
Mais procurados
第10回 計算機構成
第10回 計算機構成
眞樹 冨澤
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
WebGL and Three.js
WebGL and Three.js
yomotsu
今さら始めるCoffeeScript
今さら始めるCoffeeScript
Ashitaba YOSHIOKA
Arctic.js
Arctic.js
chikathreesix
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵まで
Masayuki Nakano
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
とあるイルカのバーボンハウス
とあるイルカのバーボンハウス
yoku0825
wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料
Mizuki Yamanaka
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
Three.jsで3D気分
Three.jsで3D気分
Toshio Ehara
テーマ「最適化」
テーマ「最適化」
technocat
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceup
Yohei Munesada
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
JustSystems Corporation
Creators'night#12今井
Creators'night#12今井
Daisuke Imai
機械学習
機械学習
ssusere8ae711
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)
Yuki Shimada
Mais procurados
(20)
第10回 計算機構成
第10回 計算機構成
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Aaなゲームをjsで
Aaなゲームをjsで
WebGL and Three.js
WebGL and Three.js
今さら始めるCoffeeScript
今さら始めるCoffeeScript
Arctic.js
Arctic.js
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵まで
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
とあるイルカのバーボンハウス
とあるイルカのバーボンハウス
wakuwaku Scala ~Scala入門勉強会~ 資料
wakuwaku Scala ~Scala入門勉強会~ 資料
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Three.jsで3D気分
Three.jsで3D気分
テーマ「最適化」
テーマ「最適化」
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceup
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
Creators'night#12今井
Creators'night#12今井
機械学習
機械学習
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)
Destaque
あのパターンと仲良く付き合う 西磨翁 #yxcm
あのパターンと仲良く付き合う 西磨翁 #yxcm
Mao Nishi
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
Taketo Sano
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
Hiramatsu Ryosuke
iBeacon yahoo 羽田資料 - ヤフー株式会社 vs クラスメソッド「iOS 炎の7番勝負」
iBeacon yahoo 羽田資料 - ヤフー株式会社 vs クラスメソッド「iOS 炎の7番勝負」
Ken Haneda
アプリエンジニアのデザインに対するこころがまえの話
アプリエンジニアのデザインに対するこころがまえの話
Shingo Sato
Appleの先を行くポストタッチインターフェース
Appleの先を行くポストタッチインターフェース
issaymk2
ソノアプリ リジェクト サレルッテヨ
ソノアプリ リジェクト サレルッテヨ
Keisuke Tsukagoshi
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
Konashi で始める iOS 電子工作
Konashi で始める iOS 電子工作
Taketo Sano
代数方程式とガロア理論
代数方程式とガロア理論
Junpei Tsuji
実践Realm
実践Realm
Yu Sugawara
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
yohei sugigami
「五次方程式が代数的に解けないわけ」第3回プログラマのための数学勉強会 #maths4pg
「五次方程式が代数的に解けないわけ」第3回プログラマのための数学勉強会 #maths4pg
Junpei Tsuji
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
Taketo Sano
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
Taketo Sano
何もないところから数を作る
何もないところから数を作る
Taketo Sano
プログラマのための線形代数再入門
プログラマのための線形代数再入門
Taketo Sano
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
Taketo Sano
何もないところから数を作る
何もないところから数を作る
Taketo Sano
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
Yota Ishida
Destaque
(20)
あのパターンと仲良く付き合う 西磨翁 #yxcm
あのパターンと仲良く付き合う 西磨翁 #yxcm
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
iBeacon yahoo 羽田資料 - ヤフー株式会社 vs クラスメソッド「iOS 炎の7番勝負」
iBeacon yahoo 羽田資料 - ヤフー株式会社 vs クラスメソッド「iOS 炎の7番勝負」
アプリエンジニアのデザインに対するこころがまえの話
アプリエンジニアのデザインに対するこころがまえの話
Appleの先を行くポストタッチインターフェース
Appleの先を行くポストタッチインターフェース
ソノアプリ リジェクト サレルッテヨ
ソノアプリ リジェクト サレルッテヨ
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Konashi で始める iOS 電子工作
Konashi で始める iOS 電子工作
代数方程式とガロア理論
代数方程式とガロア理論
実践Realm
実践Realm
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
「五次方程式が代数的に解けないわけ」第3回プログラマのための数学勉強会 #maths4pg
「五次方程式が代数的に解けないわけ」第3回プログラマのための数学勉強会 #maths4pg
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
何もないところから数を作る
何もないところから数を作る
プログラマのための線形代数再入門
プログラマのための線形代数再入門
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
何もないところから数を作る
何もないところから数を作る
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
Semelhante a Objective-C が好きになる Tips & Hack
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
Yukihiro Kitazawa
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Hiroaki Wakamatsu
Blocksの活用法
Blocksの活用法
Hidetoshi Mori
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
Toshiro Shimizu
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
Koji Ishimoto
UITableViewについて
UITableViewについて
teencoders
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
Yuichi Sakuraba
iOS WebView App
iOS WebView App
hagino 3000
ハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイド
LocalyticsJP
Vue.js で XSS
Vue.js で XSS
tobaru_yuta
これからのJavaScriptの話
これからのJavaScriptの話
Shogo Sensui
Velocity.js is next generation animation engine.
Velocity.js is next generation animation engine.
陽平 南
ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Lt 111217
Lt 111217
Tomoyuki Obi
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Atsushi Tadokoro
Leap Motion - 1st Review
Leap Motion - 1st Review
Tsukasa Sugiura
Angular js はまりどころ
Angular js はまりどころ
Ayumi Goto
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
Yuichi Sakuraba
flasherがはじめてiOS開発をしてみて
flasherがはじめてiOS開発をしてみて
佐藤 俊太郎
Semelhante a Objective-C が好きになる Tips & Hack
(20)
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Blocksの活用法
Blocksの活用法
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
UITableViewについて
UITableViewについて
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
iOS WebView App
iOS WebView App
ハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイド
Vue.js で XSS
Vue.js で XSS
これからのJavaScriptの話
これからのJavaScriptの話
Velocity.js is next generation animation engine.
Velocity.js is next generation animation engine.
ぱっと見でわかるC++11
ぱっと見でわかるC++11
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Lt 111217
Lt 111217
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Leap Motion - 1st Review
Leap Motion - 1st Review
Angular js はまりどころ
Angular js はまりどころ
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
flasherがはじめてiOS開発をしてみて
flasherがはじめてiOS開発をしてみて
Mais de Taketo Sano
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Taketo Sano
トポロジーと圏論の夜明け
トポロジーと圏論の夜明け
Taketo Sano
Swift で数学研究のススメ
Swift で数学研究のススメ
Taketo Sano
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
Taketo Sano
特性類の気持ち
特性類の気持ち
Taketo Sano
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
Taketo Sano
山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門
Taketo Sano
情報幾何学 #2.4
情報幾何学 #2.4
Taketo Sano
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16
Taketo Sano
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
Taketo Sano
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
Taketo Sano
2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible
Taketo Sano
let UIWebView as WKWebView
let UIWebView as WKWebView
Taketo Sano
コードを書けば複素数がわかる
コードを書けば複素数がわかる
Taketo Sano
ひろ子 in Objective-C
ひろ子 in Objective-C
Taketo Sano
下位互換コード隠蔽のストイシズム
下位互換コード隠蔽のストイシズム
Taketo Sano
Mais de Taketo Sano
(17)
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
トポロジーと圏論の夜明け
トポロジーと圏論の夜明け
Swift で数学研究のススメ
Swift で数学研究のススメ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
特性類の気持ち
特性類の気持ち
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門
情報幾何学 #2.4
情報幾何学 #2.4
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible
let UIWebView as WKWebView
let UIWebView as WKWebView
コードを書けば複素数がわかる
コードを書けば複素数がわかる
ひろ子 in Objective-C
ひろ子 in Objective-C
下位互換コード隠蔽のストイシズム
下位互換コード隠蔽のストイシズム
Último
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Último
(10)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Objective-C が好きになる Tips & Hack
1.
@taketo1024
2.
話すこと 1. (中級) UIView
を使いやすく 2. (上級) NSNull を黙らせる
3.
1. UIView を使いやすく
4.
初心者あるある // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ myView.frame.origin.x += 10; }];
5.
初心者あるある // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ myView.frame.origin.x += 10; }]; え?
6.
正しくは、 // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ CGRect frame = myView.frame; frame.origin.x += 10; myView.frame = frame; }];
7.
または、 // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ myView.frame = CGRectMake(myView.frame.origin.x + 10, myView.frame.origin.y, myView.frame.size.width, myView.frame.size.height); }];
8.
あるいは、 // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ myView.frame = CGRectOffset(myView.frame, 10, 0); }];
9.
うーん…
10.
そもそもなぜできない? // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ myView.frame.origin.x += 10; }];
11.
<UIKit/UIView.h> @interface UIView(UIViewGeometry) @property(nonatomic) CGRect
frame; @property(nonatomic) CGRect bounds; @property(nonatomic) CGPoint center; ... @property(nonatomic,readonly) UIView *superview; @property(nonatomic,readonly,copy) NSArray *subviews; @property(nonatomic,readonly) UIWindow *window; @end
12.
<UIKit/UIView.h> @interface UIView(UIViewGeometry) @property(nonatomic) CGRect
frame; @property(nonatomic) CGRect bounds; @property(nonatomic) CGPoint center; ... CGRect, CGPoint は構造体 → アクセスのたび値が生成されて返される @property(nonatomic,readonly) UIView *superview; @property(nonatomic,readonly,copy) NSArray *subviews; @property(nonatomic,readonly) UIWindow *window; @end
13.
<UIKit/UIView.h> @interface UIView(UIViewGeometry) @property(nonatomic) CGRect
frame; @property(nonatomic) CGRect bounds; @property(nonatomic) CGPoint center; ... @property(nonatomic,readonly) UIView *superview; @property(nonatomic,readonly,copy) NSArray *subviews; @property(nonatomic,readonly) UIWindow *window; @end UIView, NSArray はオブジェクト → 特定のメモリ領域を指すポインタ
14.
とにかく、
15.
こういう風に書きたい // myView を右に
10pt 移動 [UIView animateWithDuration:0.25 animations:^{ myView.x += 10; }];
16.
できます!
17.
予備知識 1) プロパティはアクセサメソッドの略記法 2) カテゴリで勝手にクラスを拡張できる
18.
1) プロパティはアクセサメソッドの 略記法 // このコードは… CGRect
frame = myView.frame; // こう実行される CGRect frame = [myView frame];
19.
1) プロパティはアクセサメソッドの 略記法 // このコードは… myView.frame
= CGRectMake(0, 0, 100, 200); // こう実行される [myView setFrame:CGRectMake(0, 0, 100, 200)];
20.
2) カテゴリで勝手にクラスを拡張できる // UIView
クラスを勝手に拡張 @interface UIView(TSExtension) - (CGFloat)x; - (void)setX:(CGFloat)x; @end UIView+TSExtension.h
21.
2) カテゴリで勝手にクラスを拡張できる // frame
を使って getter / setter を定義 @implementation UIView(TSExtension) - (CGFloat)x { return self.frame.origin.x; } - (void)setX:(CGFloat)x { CGRect frame = self.frame; frame.origin.x = x; self.frame = frame; } @end UIView+TSExtension.m
22.
2) カテゴリで勝手にクラスを拡張できる #import "UIView+TSExtention.h" ... [UIView
animateWithDuration:0.25 animations:^{ [myView setX:([myView x] + 10)]; }]; ↑こう書ける
23.
2つ合わせて、
24.
こんなカテゴリを作れば、 @interface UIView(TSExtention) @property (nonatomic)
CGFloat x; @end @implementation UIView (TSExtention) - (CGFloat)x { return self.frame.origin.x; } - (void)setX:(CGFloat)x { CGRect frame = self.frame; frame.origin.x = x; self.frame = frame; } @end
25.
こう書ける! #import "UIView+TSExtention.h" ... [UIView animateWithDuration:0.25
animations:^{ myView.x += 10; }];
26.
こう書ける! #import "UIView+TSExtention.h" ... [UIView animateWithDuration:0.25
animations:^{ myView.x += 10; }]; // こう実行される [myView setX:([myView x] + 10)];
27.
こういう感じに作っとくと便利 @interface UIView(TSExtention) @property @property @property @property @property @property @property @property @property @property @end (nonatomic) (nonatomic) (nonatomic) (nonatomic) (nonatomic) (nonatomic) (nonatomic) (nonatomic) (nonatomic) (nonatomic) CGFloat x; CGFloat
y; CGPoint origin; CGFloat left; CGFloat right; CGFloat top; CGFloat bottom; CGSize size; CGFloat width; CGFloat height;
28.
Oh, 直観的! #import "UIView+TSExtention.h" ... //
myView1, myView2 が横に並んで 10pt 平行移動 [UIView animateWithDuration:0.25 animations:^{ myView1.left += 10; myView2.left = myView1.right + 5; }];
29.
どうぞご利用下さい https://github.com/taketo1024/ UIView-TSExtension
30.
2. NSNull を黙らせる
31.
ありきたりなサーバ通信 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data,
NSError *connectionError) { NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; _label.text = result[@"text"]; }];
32.
ありきたりなサーバ通信 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data,
NSError *connectionError) { NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; _label.text = result[@"text"]; }]; レスポンスの text の値を _label に表示
33.
oh...
34.
oh...
35.
原因 •レスポンスのJSON: { } "text": null, ... •[NSJSONSerialization @{ }; JSONObject...] の結果: @"text":
[NSNull null], ... こうなってた
36.
レスポンスを片っ端から NSNull チェックをする のが正しいんだけども…
37.
nil はメッセージ投げても ヌルポとか出さないのに、 NSNull は自己主張が強い。
38.
黙らせる!
39.
NSNull サイレンサーを実装 #import <objc/runtime.h> @implementation
NSNull (TSSilencer) - (void *)silentGetter { NSLog(@"called: [NSNull %@]", NSStringFromSelector(_cmd)); return nil; } - (void)silentSetter:(void *)value { NSLog(@"called: [NSNull %@]", NSStringFromSelector(_cmd)); } ...(続く)
40.
NSNull サイレンサーを実装 #import <objc/runtime.h> @implementation
NSNull (TSSilencer) - (void *)silentGetter { NSLog(@"called: [NSNull %@]", NSStringFromSelector(_cmd)); return nil; } nil を返すだけの getter - (void)silentSetter:(void *)value { NSLog(@"called: [NSNull %@]", NSStringFromSelector(_cmd)); } ...(続く)
41.
NSNull サイレンサーを実装 #import <objc/runtime.h> @implementation
NSNull (TSSilencer) - (void *)silentGetter { NSLog(@"called: [NSNull %@]", NSStringFromSelector(_cmd)); return nil; } - (void)silentSetter:(void *)value { NSLog(@"called: [NSNull %@]", NSStringFromSelector(_cmd)); } 何もしない setter ...(続く)
42.
NSNull サイレンサーを実装 + (BOOL)resolveInstanceMethod:(SEL)sel { NSString
*selName = NSStringFromSelector(sel); if([selName hasPrefix:@"set"]) { Method setter = class_getInstanceMethod(self, @selector(silentSetter:)); class_addMethod(self, sel, method_getImplementation(setter), method_getTypeEncoding(setter)); } } else { Method getter = class_getInstanceMethod(self, @selector(silentGetter)); class_addMethod(self, sel, method_getImplementation(getter), method_getTypeEncoding(getter)); } return YES;
43.
NSNull サイレンサーを実装 未定義のメッセージ受信時に必ず呼ばれる + (BOOL)resolveInstanceMethod:(SEL)sel { NSString
*selName = NSStringFromSelector(sel); if([selName hasPrefix:@"set"]) { Method setter = class_getInstanceMethod(self, @selector(silentSetter:)); class_addMethod(self, sel, method_getImplementation(setter), method_getTypeEncoding(setter)); } } else { Method getter = class_getInstanceMethod(self, @selector(silentGetter)); class_addMethod(self, sel, method_getImplementation(getter), method_getTypeEncoding(getter)); } return YES;
44.
NSNull サイレンサーを実装 + (BOOL)resolveInstanceMethod:(SEL)sel { NSString
*selName = NSStringFromSelector(sel); if([selName hasPrefix:@"set"]) { Method setter = class_getInstanceMethod(self, @selector(silentSetter:)); class_addMethod(self, sel, method_getImplementation(setter), method_getTypeEncoding(setter)); } } else { set*** なら silentSetter: Method getter = class_getInstanceMethod(self, @selector(silentGetter)); class_addMethod(self, sel, method_getImplementation(getter), method_getTypeEncoding(getter)); } return YES; を呼ばせ、
45.
NSNull サイレンサーを実装 + (BOOL)resolveInstanceMethod:(SEL)sel { NSString
*selName = NSStringFromSelector(sel); if([selName hasPrefix:@"set"]) { Method setter = class_getInstanceMethod(self, @selector(silentSetter:)); class_addMethod(self, sel, method_getImplementation(setter), method_getTypeEncoding(setter)); } } else { Method getter = class_getInstanceMethod(self, @selector(silentGetter)); class_addMethod(self, sel, method_getImplementation(getter), method_getTypeEncoding(getter)); } return YES; それ以外は silentGetter を呼ばせる。
46.
試しにやってみる // 露骨にヤバい奴 _label.text =
(id)[NSNull null];
47.
おぉ、クラッシュしない! 2014-02-25 13:39:02.348 called:
[NSNull length] 2014-02-25 13:39:02.349 called: [NSNull length] 2014-02-25 13:39:02.349 called: [NSNull _fastCharacterContents] ↑ UILabel の中でなんかやってるのが分かる
48.
こんなのも行ける NSString *str =
(id)[NSNull null]; NSLog(@"string: %@", [str stringByAppendingString:@"hoge"]); NSArray *arr = (id)[NSNull null]; NSLog(@"array: %@", arr[1]); NSDictionary *dic = (id)[NSNull null]; NSLog(@"dic: %@", dic[@"key"]);
49.
余裕! called: [NSNull stringByAppendingString:] string:
(null) called: [NSNull objectAtIndexedSubscript:] array: (null) called: [NSNull objectForKeyedSubscript:] dic: (null)
50.
こんなことしていいんだろうか…
51.
いいんです!!!
52.
大事なのは保守性と安全性。 どこまでやるかはあなた次第。
53.
ご利用は計画的に https://github.com/taketo1024/ NSNull-TSSilencer
54.
こちらもよろしく http://www.slideshare.net/taketo1024/ss-30036615
55.
Thank you! @taketo1024
Baixar agora