SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
車輪の国、
TouchDevelopの少女	
 
tmyt
COD沖縄
13/5/11
about me	
 
•  tmyt
•  東京らへんで組み込みシ
ステム開発してます
•  最近はXamarin 2.0とか
触ったりしてます
•  好き: C++, C#, Delphi, ZSH
•  Twitter: @tmyt
•  Github: tmyt
今日はなすこと	
 
—  TouchDevelopとはなんぞや
—  TouchDevelopで学習する
—  bit演算
—  ハッシュ関数
—  認可プロトコル
Touch develop is … 何	
 
—  Microsoft Reserchの研究成果
—  プログラミングを学習するためのツール
—  主なターゲットはタッチデバイス
—  キーボードがなくてもボタン押してるだけでOK
こんなの	
 
DEMO
TouchDevelopの特徴	
 
—  『やりたいこと』が主体
—  各種命令は高度に抽象化されている
—  ひとつの命令で画像を表示したりできる
—  あえて言うならCISCアセンブリ言語
—  成果物はStore AppsなどにExportできます
TouchDevelopで	
 
—  出来ること
—  文字や画像を表示する
—  四則演算する
—  三角関数を使う
—  出来ないこと
—  ビット演算をする
—  IntやCharなどを使い分ける
—  53bitを超える整数を扱う
今日の目標	
 
TouchDevelopでOAuth認証をしてみる
あるひ	
 
—  *「TouchDevelopでOAuth認証ってできる?」
—  僕「できるんじゃない?」
OAuth認証に必要なもの	
 
—  HMAC-SHA1ダイジェスト
—  Authorization: OAuth ヘッダ
—  文字列をUTF-8バイト列として処理
—  現在時刻をEpoch Timeで扱う
TouchDevelopでできる?	
 
—  HMAC-SHA1ダイジェスト
—  SHA1ハッシュ
—  生成できない
—  HMAC
—  生成できない
—  Authorization: OAuth ヘッダ
—  できる
—  文字列をUTF-8バイト列として処理
—  できない
—  現在時刻をEpoch Timeで扱う
—  できない
TouchDevelopでできる?	
 
—  SHA1ハッシュ
—  生成できない
—  ビット演算ができない
—  ライブラリとしての実装もない
—  HMAC
—  ハッシュアルゴリズムが無いため実装がない
—  文字列をUTF-8バイト列として処理
—  UTF-16文字列を変換する関数は実装がある
—  現在時刻をEpoch Timeで扱う
—  現在時刻をDateTime型で取得出来るので変換する
OAuthするために	
 
1.  Epoch Timeを実装する
2.  ビット演算を実装する
3.  SHA1ハッシュを実装する
4.  HMACダイジェストを実装する
5.  UTF-16 → UTF-8変換を実装する
6.  OAuthを実装する
Chapter.I	
 
Epoch Timeの取得
Epoch Timeって?	
 
—  いわゆるUNIX時間
—  1970年1月1日からの経過秒数として表現
—  タイムゾーンのオフセットは存在せず常にUTC
TouchDevelopの時刻表現	
 
—  TouchDevelopでは時刻を表現できる
—  イメージとしてはJavaScriptのDate型
—  もちろんEpoch Timeへの変換は不可
Epoch Timeへの変換	
 
1.  UTCで現在時刻を取得する
2.  1970年からの経過日数を単純に計算する
3.  日付×36400+0時からの経過秒数を計算する
—  あれ、TouchDevelopって閏年の判定ができない
—  それぐらいは軽く作りましょう
—  ここまでで約1時間
Chapter.II	
 
ビット演算
ビット演算とは	
 
—  ある値をビット列で表現しそのビットごとに論理演
算を適用する
—  例えば
—  15(10) AND 20(10) = 4(10)
—  15(10) OR 20(10) = 31(10)
—  15(10) XOR 20(10) = 27(10)
—  C言語などではビット演算演算子が存在する
ビットの配列へ変換	
 
—  ビット演算には2進数への変換が必要
—  手計算で2進数へ変換する場合と同様に実装する
List<int>	
  ToBinary(int	
  n)	
  {	
  
var	
  b	
  =	
  new	
  List<int>();	
  
while	
  (n	
  !=	
  0)	
  {	
  
b.Add(n	
  %	
  2);	
  
n	
  /=	
  2;	
  
}	
  
return	
  b.Reverse().Take(32).ToList();	
  
}	
  
ビット演算を実装する	
 
—  任意の数値をビット配列に変換できればあとはビッ
トごとにAND, OR, XOR, NOTを実装するだけ
—  SHA1ハッシュの計算にはビットシフトも必要
—  同様にして実装します
—  だいたいここまでで30分
Chapter.III	
 
SHA1ハッシュ
SHA1ハッシュ	
 
—  Secure Hash Algorithm 縮めてSHA
—  ハッシュ関数のひとつ
—  入力に対し一意な160bitの値を出力する
—  余談
—  SHA1はNISTが2010年よりDeprecatedとしています
—  今後はSHA256を使うのをおすすめします
SHA1の生成	
 
—  こんな雰囲気です
—  バッファを64の倍数に拡張
—  バッファを8bitごとに区切り
—  StepA, B, C, Dの4パターンで演算
—  格段の値を合計
—  32bitの値5個を連結して160bitに
TouchDevelopで実装する	
 
—  先ほど作ったビット演算が活躍します
—  AND, OR, XOR, SHR, SHL
—  右回転シフトも必要なので作ります
—  定数に16進数は使えないのですべて10進にします
—  コピペも出来ないので間違えないように入力します
—  加算結果は最大で33bitになります
—  TouchDevelopの数値型は53bit精度の浮動小数
—  4294967295(0xFFFFFFFF)とANDを取って切り捨てる
Chapter.IV	
 
HMACダイジェストを計算する
HMACダイジェスト	
 
—  メッセージとキーから固定長のデータを生成する
—  サーバから提供されたデータに対してパスワードを
使って演算し、それをサーバに送信とかして使う
—  パスワードはユーザ/サーバ両者に既知の値
—  サーバはデータ/パスワード共に既知であるためパス
ワードを直接ネットワーク上に流さずとも検証可能
—  結局内部でSHA1とか使ってます
HMAC-SHA1	
 
—  HMACの内部アルゴリズムとしてSHA1を使う
—  アルゴリズムの流れ
—  鍵と0x5cをXORで演算 … ①
—  鍵と0x36をXORで演算しメッセージと結合 … ②
—  ②へハッシュ関数を適用 … ③
—  ①と③を結合 … ④
—  ④へハッシュ関数を適用しMACとする
TouchDevelopで実装する	
 
—  SHA1はすでに実装しました
—  文字列からバイナリ生成はすでに実装しました
—  ビット演算はすでに実装しました
—  これらよりアルゴリズムを忠実に実装します
—  飽和演算なども不要なため素直に実装できます
Chapter.V	
 
UTF-8文字列を作る
UTF-8文字列	
 
—  インターネットの世界ではUTF-8が流行
—  TouchDevelopの内部はUTF-16です
—  OAuthでアクセスする先は大抵UTF-8
—  UTF-8文字列が必要になります
文字列の扱い	
 
—  TouchDevelopでは文字列はUTF-16
—  UTF-8のINT配列にするには?
—  web→url encodeを使って変換する
—  UTF-16のINT配列を作って変換する
—  最終的には後者で実装しています
—  後者の方が断然速いです
UTF-16からUTF-8への変換	
 
—  UTF-8 ⇔ UTF-16は相互に変換可能
	
  
void	
  to_u8(int	
  c)	
  {	
  
	
  	
  	
  	
  if(c	
  <	
  128)	
  chars.Add(c);	
  
	
  	
  	
  	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  if(c	
  <	
  2048)	
  chars.Add(((c	
  >>	
  6)	
  &	
  31)	
  |	
  192);	
  
	
  	
  	
  	
  	
  	
  	
  	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  chars.Add((c	
  >>	
  12)	
  |	
  224);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  chars.Add(((c	
  >>	
  6)	
  &	
  63)	
  |	
  128);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  chars.Add((c	
  &	
  63)	
  |	
  128);	
  
	
  	
  	
  	
  }	
  
}	
  
Chapter.VI	
 
OAuthを実装する
OAuthとは	
 
— 認可プロトコル
—  認証プロトコルではない
—  第三者にリソースへのアクセスを許可する
—  第三者がユーザのCredentialを知ることはできない
OAuthの仕組み	
 
—  ConsumerはProviderに仮トークンを要求
—  Consumerは仮トークンを使って認証URLを要求
—  Userは認証URLで自分のアカウント使いログイン
—  得られたVerifierをConsumerへ通知
—  ConsumerはVerifierを用いProviderへ実トークンを
要求
—  Providerはトークンを発行しConsumerのアクセス
を認可する
結構めんどくさい
大抵ライブラリがあります	
 
—  有名な言語には大抵OAuthの実装はあります
—  C++, Java, C#, Objective-C, PHP, Perl, Ruby, …
—  OAuthの手実装は面倒なのでライブラリ使うのがお
すすめです
—  TouchDevelopにはそんなものありません
TouchDevelopでの実装	
 
—  OAuthで必要なものはこれまでに用意しました
—  HMAC-SHA1
—  Epoch Time
—  UTF-8
—  仕様書通りに実装するだけです
—  できあがったものはTouchDevelopライブラリとして
公開済みです
DEMO	
 
できたものがこちら
まとめ	
 
—  TouchDevelopでプログラミングを学習しました
—  TouchDevelopらしい使い方ではありません
—  あえて実装することで理解が深まります
—  C言語の本でビット演算実装しないでしょ?
—  制限された環境だと楽しくなってくる
—  学習するための車輪は惜しまない

Contenu connexe

En vedette

せっけーのおはなし
せっけーのおはなしせっけーのおはなし
せっけーのおはなしYutaka Tsumori
 
EclipseもXcodeも窓から投げ捨てろ!
EclipseもXcodeも窓から投げ捨てろ!EclipseもXcodeも窓から投げ捨てろ!
EclipseもXcodeも窓から投げ捨てろ!Yutaka Tsumori
 
Aristeaのコード補完
Aristeaのコード補完Aristeaのコード補完
Aristeaのコード補完Yutaka Tsumori
 
Twitter Client for ZSH (2)
Twitter Client for ZSH (2)Twitter Client for ZSH (2)
Twitter Client for ZSH (2)Yutaka Tsumori
 
未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないためにYutaka Tsumori
 
Samba4でADしよう!
Samba4でADしよう!Samba4でADしよう!
Samba4でADしよう!Yutaka Tsumori
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠Sho Okada
 

En vedette (11)

すまべん関西#18
すまべん関西#18すまべん関西#18
すまべん関西#18
 
せっけーのおはなし
せっけーのおはなしせっけーのおはなし
せっけーのおはなし
 
EclipseもXcodeも窓から投げ捨てろ!
EclipseもXcodeも窓から投げ捨てろ!EclipseもXcodeも窓から投げ捨てろ!
EclipseもXcodeも窓から投げ捨てろ!
 
Aristeaのこと
AristeaのことAristeaのこと
Aristeaのこと
 
Aristeaのコード補完
Aristeaのコード補完Aristeaのコード補完
Aristeaのコード補完
 
Wpdd lt
Wpdd ltWpdd lt
Wpdd lt
 
PhoneからPCへ。
PhoneからPCへ。PhoneからPCへ。
PhoneからPCへ。
 
Twitter Client for ZSH (2)
Twitter Client for ZSH (2)Twitter Client for ZSH (2)
Twitter Client for ZSH (2)
 
未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために
 
Samba4でADしよう!
Samba4でADしよう!Samba4でADしよう!
Samba4でADしよう!
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 

Similaire à Community Open Day 沖縄

C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門sandai
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
アメーバピグのサーバとクライアントはどうやって通信しているのか
アメーバピグのサーバとクライアントはどうやって通信しているのかアメーバピグのサーバとクライアントはどうやって通信しているのか
アメーバピグのサーバとクライアントはどうやって通信しているのかTanaka Hiromi
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料Naoki Shibata
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよNaruto TAKAHASHI
 
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)Masayuki KaToH
 
そろそろSSH/Telnetを離れて自動化したい
そろそろSSH/Telnetを離れて自動化したいそろそろSSH/Telnetを離れて自動化したい
そろそろSSH/Telnetを離れて自動化したいnetopscoding
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowTadaichiro Nakano
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまでMasataka Suzuki
 
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD翔新 史
 
Swiftのスピードについて
SwiftのスピードについてSwiftのスピードについて
SwiftのスピードについてRyo Kasama
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会モノビット エンジン
 
tfug-kagoshima
tfug-kagoshimatfug-kagoshima
tfug-kagoshimatak9029
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介ao27
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 

Similaire à Community Open Day 沖縄 (20)

C language Sem 01
C language Sem 01C language Sem 01
C language Sem 01
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
Mithril
MithrilMithril
Mithril
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
アメーバピグのサーバとクライアントはどうやって通信しているのか
アメーバピグのサーバとクライアントはどうやって通信しているのかアメーバピグのサーバとクライアントはどうやって通信しているのか
アメーバピグのサーバとクライアントはどうやって通信しているのか
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよ
 
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)
 
そろそろSSH/Telnetを離れて自動化したい
そろそろSSH/Telnetを離れて自動化したいそろそろSSH/Telnetを離れて自動化したい
そろそろSSH/Telnetを離れて自動化したい
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
 
Webページが表示されるまで
Webページが表示されるまでWebページが表示されるまで
Webページが表示されるまで
 
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
 
Swiftのスピードについて
SwiftのスピードについてSwiftのスピードについて
Swiftのスピードについて
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
 
tfug-kagoshima
tfug-kagoshimatfug-kagoshima
tfug-kagoshima
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 

Plus de Yutaka Tsumori

Windows phoneの新しい通知api
Windows phoneの新しい通知apiWindows phoneの新しい通知api
Windows phoneの新しい通知apiYutaka Tsumori
 
Twitter Client for ZSH
Twitter Client for ZSHTwitter Client for ZSH
Twitter Client for ZSHYutaka Tsumori
 
AndroidではじめるJava
AndroidではじめるJavaAndroidではじめるJava
AndroidではじめるJavaYutaka Tsumori
 
20120922 wdc with_ms_like
20120922 wdc with_ms_like20120922 wdc with_ms_like
20120922 wdc with_ms_likeYutaka Tsumori
 
某Music unなんとか
某Music unなんとか某Music unなんとか
某Music unなんとかYutaka Tsumori
 
Androidのおはなし++
Androidのおはなし++Androidのおはなし++
Androidのおはなし++Yutaka Tsumori
 
スマートフォン勉強会@九州
スマートフォン勉強会@九州スマートフォン勉強会@九州
スマートフォン勉強会@九州Yutaka Tsumori
 
Titanium mobileで遊んでみた
Titanium mobileで遊んでみたTitanium mobileで遊んでみた
Titanium mobileで遊んでみたYutaka Tsumori
 
Windows Phone 7 “Mango” SDK最速情報!
Windows Phone 7 “Mango” SDK最速情報!Windows Phone 7 “Mango” SDK最速情報!
Windows Phone 7 “Mango” SDK最速情報!Yutaka Tsumori
 
ぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとYutaka Tsumori
 
Smartphone workshop kansai #9
Smartphone workshop kansai #9Smartphone workshop kansai #9
Smartphone workshop kansai #9Yutaka Tsumori
 
スマートフォン勉強会@関西 #6 LT
スマートフォン勉強会@関西 #6 LTスマートフォン勉強会@関西 #6 LT
スマートフォン勉強会@関西 #6 LTYutaka Tsumori
 

Plus de Yutaka Tsumori (18)

Buri2019
Buri2019Buri2019
Buri2019
 
Setsな話
Setsな話Setsな話
Setsな話
 
XAMLで条件分岐
XAMLで条件分岐XAMLで条件分岐
XAMLで条件分岐
 
BuriKaigi2018
BuriKaigi2018BuriKaigi2018
BuriKaigi2018
 
Windows phoneの新しい通知api
Windows phoneの新しい通知apiWindows phoneの新しい通知api
Windows phoneの新しい通知api
 
Twitter Client for ZSH
Twitter Client for ZSHTwitter Client for ZSH
Twitter Client for ZSH
 
AndroidではじめるJava
AndroidではじめるJavaAndroidではじめるJava
AndroidではじめるJava
 
20120922 wdc with_ms_like
20120922 wdc with_ms_like20120922 wdc with_ms_like
20120922 wdc with_ms_like
 
某Music unなんとか
某Music unなんとか某Music unなんとか
某Music unなんとか
 
たのアプLt
たのアプLtたのアプLt
たのアプLt
 
Androidのおはなし++
Androidのおはなし++Androidのおはなし++
Androidのおはなし++
 
スマートフォン勉強会@九州
スマートフォン勉強会@九州スマートフォン勉強会@九州
スマートフォン勉強会@九州
 
Titanium mobileで遊んでみた
Titanium mobileで遊んでみたTitanium mobileで遊んでみた
Titanium mobileで遊んでみた
 
Windows Phone 7 “Mango” SDK最速情報!
Windows Phone 7 “Mango” SDK最速情報!Windows Phone 7 “Mango” SDK最速情報!
Windows Phone 7 “Mango” SDK最速情報!
 
ぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんと
 
Smartphone workshop kansai #9
Smartphone workshop kansai #9Smartphone workshop kansai #9
Smartphone workshop kansai #9
 
Sumaben#11
Sumaben#11Sumaben#11
Sumaben#11
 
スマートフォン勉強会@関西 #6 LT
スマートフォン勉強会@関西 #6 LTスマートフォン勉強会@関西 #6 LT
スマートフォン勉強会@関西 #6 LT
 

Community Open Day 沖縄