SlideShare una empresa de Scribd logo
1 de 37
Blocksの活用
                   iOS版 

            Hidetoshi Mori
自己紹介

森 英寿

Facebook hidetoshi.mori
Twitter: @h_mori
フリーランスプログラマ
自己紹介

主開発言語

Java/.net/Objective-C/Ruby/PHP

アプリ開発実績

SOICHA iPhone (TweetMe)
ATND暦
Blocks?                 ?



iOS4, MacOSX 10.6から導入
無名関数、クロージャ、 Lambda
Blocksの利点
メソッド定義なく関数を記述できる

関数を変数のように扱える

performedSelectorの代わりに使える

別のソースから処理の差込が行える

まとまった処理の記述が可能
Blocksの構文
^戻り値の型(引数リスト){処理} (実装)
 ^NSInteger(NSInteger i){ return i++; }
 ^{ NSLog(@”block”); }
  ※戻り値の型voidと(引数無し)は省略可

戻り値の型 (^Block変数名)(引数リスト); (宣言)
 id (^block)(NSArray *array, NSUInteger index);
 void (^block)(void);
Block内の自動変数
int val = 1;
void (^block)(void) = ^{NSLog(@”val=%d”, val)};
val = 2;
block(); //blockの実行

> val=1

 Block定義時点のローカル変数がコピーされる
__block指定子
__block int val = 1;
void (^block)(void) = ^{val=2)};
block();
NSLog(@”val=%d”, val);

> val=2

  Blockスコープを超えるには__blockを使う
Blockの格納領域
グローバル(データ)領域 (グローバル変数領域)
  _NSConcreteGlobalBlock

ヒープ領域 (オブジェクト変数領域)
  _NSConcreteMallocBlock

スタック領域 (ローカル変数領域)
  _NSConcreteStackBlock
Blockのコピー
Blockはプリミティブ変数らしきもの
 スタック領域Blockはスコープ終了後、破棄される

Blockを維持するためヒープ領域に手動コピーが必要
 Blockのpropertyは基本 copy で宣言する
Block内変数のコピー
BlockコピーでBlock内変数は浅いコピーになる

ARC時
 BlockはBlock内変数の__strong参照を保持

非ARC時
 Blockは__blockがないBlock内変数をretainする
Blockによる循環参照
BlockのBlock内変数への強参照による循環参照
@property (retain) NSMutableArray array;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(void)addBlock {
  id block = ^{
     [self method];             self         array
  };
  [array addObject block];
}
                                       block
Blockによる循環参照回避
BlockのBlock内変数への参照を弱参照にする
@property (retain) NSMutableArray array;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(void)addBlock {
  __block __weak MyClass *weakSelf = self;
  id block = ^{
                                 self          array
     [weakSelf method];
  };
  [array addObject block];
}                                        block
循環参照の予防策
deallocにサウンドBreakPointを設定
BlocksKitの紹介
BSD, MITライセンス

iOS4、MacOSX 10.6以上

A2DynamicDelegateが必要
A2DynamicDelegateの紹介
AssociatedObjectを利用した動的な読込を可能にする
 動的なインスタンス変数の差し込み
 動的なプロトコルの差し込み

カテゴリでインスタンス変数のような仕組みを作れる
BlocksKitの導入手順
BlocksKit/A2DynamicDelegate/に2クラスをコピー
  A2BlockDelegaete、A2DynamicDelegate
自分のプロジェクトにBlocksKit.xcodeprojを追加
libBlocksKit.a、MessageUI.frameworkを追加
その他リンカフラグに「-ObjC -all_load」を追加
ヘッダ検索パスに/BlocksKit**を設定
pchにBlocksKit/BlocksKit.hをimport
BlocksKitの便利メソッド
UIActionSheet#addButtonWithTitle:handler:
- (void)showSheet1 {
    UIActionSheet *sheet1 = [UIActionSheet actionSheetWithTitle:@"Sheet"];
    if (condition1) {
         [sheet1 addButtonWithTitle:@"Action1" handler:^(void) {
            //Action1の処理
       }];
    }
    [sheet1 setCancelButtonIndex:[sheet addButtonWithTitle:@"Close"]];
    [sheet1 showInView:self.view];
}
BlocksKitの便利メソッド
UIAlertView#addButtonWithTitle:handler:
UIAlertView *alert =
[UIAlertView alertViewWithTitle:@"Alert" message:@"UIAlertView Test"];
[alert addButtonWithTitle:@"Action" handler:^(void) {
    NSLog(@"Action");
}];
[alert addButtonWithTitle:@"Close"];
[alert show];
BlocksKitの便利メソッド
NSURLConnection#startConnectionWithRequest:successHandler:

NSURLRequest *req =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://d.hatena.ne.jp/h_mori/"]];

[NSURLConnection startConnectionWithRequest:req
               successHandler:^(NSURLConnection *con, NSURLResponse *res, NSData *data){
                   NSString *html =
                   [[[NSString alloc] initWithData:data encoding:NSJapaneseEUCStringEncoding] autorelease];
                   NSLog(@"html=%@", html);
               }
               failureHandler:^(NSURLConnection *con, NSError *err){
                    NSLog(@"NSURLConnection failed : %@", [err localizedDescription]);
               }];
BlocksKitの便利メソッド
UIWebView#didFinishLoadBlock
UIWebView#didFinishWithErrorBlock
UIWebView *webView = [[[UIWebView alloc] init] autorelease];
webView.didFinishLoadBlock = ^(UIWebView *v) {
   NSLog(@"didFinishLoadBlock");
};
webView.didFinishWithErrorBlock = ^(UIWebView *v, NSError *err) {
   NSLog(@"didFinishWithErrorBlock");
};
[webView.dynamicDelegate webViewDidFinishLoad:webView];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL
URLWithString:@"http://d.hatena.ne.jp/h_mori/"]]];
BlocksKitの便利メソッド
MFMailComposeViewController#completionBlock
MFMailComposeViewController *ctl =
[[[MFMailComposeViewController alloc] init] autorelease];
ctl.mailComposeDelegate = self;
ctl.completionBlock = ^(MFMailComposeViewController *controller,
MFMailComposeResult result, NSError *err){
   if (result == MFMailComposeResultSent) {
        //成功時の処理
  }
};
[self presentModalViewController:ctl animated:YES];
BlocksKitの便利メソッド
UIControl#addEventHandler:forControlEvents:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(40, 20, 240, 44);
[button setTitle:@"Caption" forState:UIControlStateNormal];
[button addEventHandler:^(id sender) {
    //Action
} forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
BlocksKitの便利メソッド
UIBarButtonItem#initWithBarButtonSystemItem:handler:
self.navigationItem.leftBarButtonItem =
[[[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
    handler:^(id sender) {
        //Cancel Action
    }] autorelease];
BlocksKitの便利メソッド
UIGestureRecognizer#initWithHandler:
UISwipeGestureRecognizer *swipe =
[[UISwipeGestureRecognizer alloc]
    initWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state,
CGPoint location){
        //Swipe Action
    }];
[self.view addGestureRecognizer:swipe];
BlocksKitの便利メソッド
NSObject#performBlock:
[NSObject performBlock:^(void) {
   NSLog(@"fire");
} afterDelay:1];
BlocksKitの便利メソッド
NSTimer#scheduledTimerWithTimeInterval:block:
[NSTimer scheduledTimerWithTimeInterval:1
 block:^(NSTimeInterval time) {
    //action every 1 sec.
 }
 repeats:YES];
UITableViewのカテゴリ拡張
UITableViewはDelegate, DataSourceを利用する

カテゴリはインスタンス変数を保持できない
 A2DynamicDelegateを使って動的に保持
UITableViewの拡張
  A2DynamicUITableViewDelegateの実装
- (void)tableView:(UITableView *)tableView
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	     id realDelegate = self.realDelegate;
	     if (realDelegate && [realDelegate
respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) {
	     	     [realDelegate tableView:tableView didSelectRowAtIndexPath:indexPath];
   }
   NSString *key = [NSString stringWithFormat:@”%@_%@_%@”,
        kHandlerDidSelectRow, indexPath.section, indexPath.row];
   BKTableViewBlock block = [self.handlers objectForKey:key];
   if (block) {
        ((BKTableViewBlock)block)(tableView, indexPath);
   }
}
UITableViewの拡張
    UITableView (BlocksKitExtends)
- (id)initWithFrame:(CGRect)frame
    style:(UITableViewStyle)style
    delegate:(id)delegate
    dataSource:(id)dataSource {
    UITableView *tableView = [self initWithFrame:frame style:style];
    tableView.delegate = self.dynamicDelegate;
    ((A2DynamicDelegate *)self.dynamicDelegate).realDelegate = delegate;

    tableView.dataSource = self.dynamicDataSource;
    ((A2DynamicDelegate *)self.dynamicDataSource).realDelegate = dataSource;

    return tableView;
}
UITableViewの拡張
  UITableView (BlocksKitExtends)
typedef void (^BKTableViewBlock)(UITableView *tableView, NSIndexPath *indexPath);

- (void)setHandler:(BKTableViewBlock)block
    forDidSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   NSString *key = [NSString stringWithFormat:@”%@_%@_%@”,
        kHandlerDidSelectRow, indexPath.section, indexPath.row];
   if (block) {
	     	    [[self.dynamicDelegate handlers] setObject:block forKey:key];
   } else {
	     	    [[self.dynamicDelegate handlers] removeObjectForKey:key];
   }
   [self setHandler:block forKey:key target:self.dynamicDelegate];
}
UITableViewの拡張
    使い方
- (UITableViewCell *)tableView:(UITableView *)tableView
   cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@”Cell”];
	    if (cell == nil) {
	    	     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
              reuseIdentifier:@”Cell”] autorelease];
	    }
	    if (indexPath.section == 0) {
   	       cell.textLabel.text = [_rows objectAtIndex:indexPath.row];
   	       [tableView setHandler:^(UITableView *tv, NSIndexPath *ip){
   
       
     //Cell選択時の処理
    	        } forDidSelectRowAtIndexPath:indexPath];
	       }
	       return cell;
}
UIViewControllerの基底拡張
UIViewControllerのView LifesycleでBlock差込を行う
  loadView:
  viewDidLoad:
  viewWillAppear:
  viewDidAppear:
  viewWillDisappear:
  viewDidDisappear:
UIViewControllerの基底拡張
BaseViewController

 void (^_viewWillAppearBlock)(BOOL);

 - (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (_viewWillAppearBlock) {
        _viewWillAppearBlock(animated);
    }
 }
UIViewControllerの基底拡張
画面の遷移管理に使える
     callback block for B


       viewWillAppear:
                            B
     execute block from B


           A
     callback block for C


       viewWillAppear:
                            C
     execute block from C




利点:B,CはAを意識する必要がない(疎結合になる)
まとめ
Blockの活用により疎結合な構成が組みやすくなる

Delegateパターンを使わなくてよくなる

performedSelectorを使わなくてよくなる

循環参照に注意
ご清聴ありがとうございました
     m(_ _)m

Más contenido relacionado

La actualidad más candente

FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
Akio Katayama
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
Hideki Hashizume
 
CoreData 非同期データ処理
CoreData 非同期データ処理CoreData 非同期データ処理
CoreData 非同期データ処理
次朗 永島
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
 

La actualidad más candente (20)

iOSビヘイビア駆動開発
iOSビヘイビア駆動開発iOSビヘイビア駆動開発
iOSビヘイビア駆動開発
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
ゲンバのSwift
ゲンバのSwiftゲンバのSwift
ゲンバのSwift
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
 
CoreData 非同期データ処理
CoreData 非同期データ処理CoreData 非同期データ処理
CoreData 非同期データ処理
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
 
Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
Type Safe Assets Handling in Swift
Type Safe Assets Handling in SwiftType Safe Assets Handling in Swift
Type Safe Assets Handling in Swift
 
ADRという考えを取り入れてみて
ADRという考えを取り入れてみてADRという考えを取り入れてみて
ADRという考えを取り入れてみて
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 

Destacado (12)

Facebook api for iOS
Facebook api for iOSFacebook api for iOS
Facebook api for iOS
 
20130216 小ネタ集
20130216 小ネタ集20130216 小ネタ集
20130216 小ネタ集
 
コンシューマアプリを作るということ
コンシューマアプリを作るということコンシューマアプリを作るということ
コンシューマアプリを作るということ
 
20130216 magical record
20130216 magical record20130216 magical record
20130216 magical record
 
Storyboard
StoryboardStoryboard
Storyboard
 
Evernote連携
Evernote連携Evernote連携
Evernote連携
 
Photo mosaic 検証
Photo mosaic 検証Photo mosaic 検証
Photo mosaic 検証
 
Framerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングFramerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディング
 
プロジェクト管理しないという提案
プロジェクト管理しないという提案プロジェクト管理しないという提案
プロジェクト管理しないという提案
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Similar a Blocksの活用法

ハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイドハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイド
LocalyticsJP
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
Ryo Asai
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
Yuichi Sakuraba
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
Takuya Tsuchida
 
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
Yoichiro Sakurai
 

Similar a Blocksの活用法 (20)

Ll xcode
Ll xcodeLl xcode
Ll xcode
 
Swiftyを試す
Swiftyを試すSwiftyを試す
Swiftyを試す
 
ハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイドハイブリッドアプリへのLocalytics導入ガイド
ハイブリッドアプリへのLocalytics導入ガイド
 
Mvc conf session_4_ono
Mvc conf session_4_onoMvc conf session_4_ono
Mvc conf session_4_ono
 
20110607
2011060720110607
20110607
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
iOS WebView App
iOS WebView AppiOS WebView App
iOS WebView App
 
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
Wicket勉強会2
Wicket勉強会2Wicket勉強会2
Wicket勉強会2
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
 
OpenGLプログラミング
OpenGLプログラミングOpenGLプログラミング
OpenGLプログラミング
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
Cakephp2.1 ViewBlock view-inheritance
Cakephp2.1 ViewBlock view-inheritanceCakephp2.1 ViewBlock view-inheritance
Cakephp2.1 ViewBlock view-inheritance
 
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 

Más de Hidetoshi Mori (15)

Git超入門
Git超入門Git超入門
Git超入門
 
20130515 diary euglena_en
20130515 diary euglena_en20130515 diary euglena_en
20130515 diary euglena_en
 
Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例
 
mongodbの簡易ストレージ化
mongodbの簡易ストレージ化mongodbの簡易ストレージ化
mongodbの簡易ストレージ化
 
汎用apiサーバの構築
汎用apiサーバの構築汎用apiサーバの構築
汎用apiサーバの構築
 
UITableViewで無限CoverFlowを作る
UITableViewで無限CoverFlowを作るUITableViewで無限CoverFlowを作る
UITableViewで無限CoverFlowを作る
 
モバイルビジネスの動向
モバイルビジネスの動向モバイルビジネスの動向
モバイルビジネスの動向
 
インタラクションデザインの考察
インタラクションデザインの考察インタラクションデザインの考察
インタラクションデザインの考察
 
モバイルビジネスの動向
モバイルビジネスの動向モバイルビジネスの動向
モバイルビジネスの動向
 
サービス開発における工程
サービス開発における工程サービス開発における工程
サービス開発における工程
 
ゲリラ的サービスの育て方
ゲリラ的サービスの育て方ゲリラ的サービスの育て方
ゲリラ的サービスの育て方
 
インタラクションデザインの考察
インタラクションデザインの考察インタラクションデザインの考察
インタラクションデザインの考察
 
Presentation of TapkuLibrary
Presentation of TapkuLibraryPresentation of TapkuLibrary
Presentation of TapkuLibrary
 
Facebook API for iOS
Facebook API for iOSFacebook API for iOS
Facebook API for iOS
 
FacebookAPI for iOS
FacebookAPI for iOSFacebookAPI for iOS
FacebookAPI for iOS
 

Último

研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 

Último (14)

20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 

Blocksの活用法

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n