XcodeでSwiftからC++コードを呼び出すまで
- Xcode を立ち上げる
- Create new a Xcode project を選択
- iOS→Application→Single View Application
- Language=Swift
- Devices=iPhone
- Use Core Dataはチェックしない
- Source Controlはチェックする
- 適当な保存場所を選択
- 左側のファイルツリーでproject名のgroupのコンテキストメニュー(以下コンメニュー)→New Groupを選択→cppを追加
- 同じくobjcppを追加
- cpp Groupのコンテキストメニュー→New File…→C++ File を選択 Also create a header file はチェック
- 適当な保存場所を選択
- Would you like to configure an Objective-C bridging header? は Yes
- 出来たsourceとheaderにclassの記述を追加する
/*cpp.h*/ #ifndef __Test150108__cpp__ #define __Test150108__cpp__ #include <stdio.h> class CCpp { public: void test(void); }; #endif /* defined(__Test150108__cpp__) */
/*cpp.cpp*/ #include "cpp.h" void CCpp::test(void) { printf( "cpp excute\n"); }
- objcpp Groupのコンテキストメニュー→New File…→C++ File を選択 Empty Fileを選択
- 適当な保存場所を選択
- 出来た.mファイルを.mmに変更
- objcpp Groupのコンテキストメニュー→New File…→Header File を選択
- 適当な保存場所を選択
- 出来たファイルにcpp呼び出し処理を記述
/*objcpp.h*/ #ifndef Test150108_Header_h #define Test150108_Header_h #import <Foundation/Foundation.h> @interface ObjCpp : NSObject -(void)test; @end #endif
/*objcpp.mm*/ #import <Foundation/Foundation.h> #import "objcpp.h" #import "cpp.h" @implementation ObjCpp { CCpp * cpp; } -(id)init { self = [super init]; cpp = new CCpp(); return self; } -(void)test { cpp->test(); } @end
- product名-Bridging-Header.hファイルにObjective-CのHeaderのimportを記述
// // Use this file to import your target's public headers that you would like to expose to Swift. // #import "objcpp.h"
- ファイルツリーからViewController.swiftを選択 Load処理にC++呼び出しを追加
/*ViewController.swift*/ override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. }
↓
/*ViewController.swift*/ override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var objcpp = ObjCpp() objcpp.test() }
- コマンドキー+rで実行
- Xcodeの右下のアイコンの右側が塗り潰されているアイコンを選択 コンソール出力を出す
- test()のprint文の内容が出力されていたら、成功
コミケでプロジェクターを考えてみる
音楽業界のエムスリーは音楽アイテムの同人卸売会M3 | 黄金の鐘を鳴らせ
を見て、真似したくなったので、ちょっと調べてみた。
■プロジェクター
こちらの方が使ってらっしゃるプロジェクターがこのQUMIの白っぽい(Q5の方かもしれんけど)
VIVITEK〈QUMI〉キュミ 超軽量600g 300ルーメン LEDモバイルミニプロジェクター WXGA(1280x800)対応 HD720P DLP ミニHDMI端子 RCA端子 「Made for iPod/iPhone/iPad」ブラック Q2-B
・ちょっとお高い
・AC電源なので電源が必要
ので、バッテリー内蔵だったりバスパワー駆動のモバイルプロジェクターで代替できないかと調べてみる
Microvision SHOWWX+ HDMI Laser Pico Projector (AA0123600-020) [J] [並行輸入品]
とか
サンワダイレクト 小型USBモバイルプロジェクター 400-PRJ010
とか
ただ、モバイルプロジェクターは明るさが〜30ルーメンくらいで、会場の明るさじゃ見えなそう。
先のQUMIが300ルーメンである事を考えても、ちょっと厳しそう。
明るい環境ほど、明るくないとダメ。
- -
安く済んでも、見えないと話にならないので、QUMI使う方向で考えてみる。
・お高い
→我慢する(ぉ
→米Amazonで買うとちょっと安い
・AC電源なので電源か必要
→外部バッテリーが使えるらしい
専用の外部バッテリー
VIVITEK QUMI 専用モバイル バッテリー18000mAh 大容量 QB-180K-B
や
ノートPC向け外部バッテリー
日本トラストテクノロジー 外付バッテリー Energizer XP18000A XP18000A
とか使用可という事。
どちらも容量は同じなので、
駆動時間は、たぶんどちらも1時間45分。
んーちょっと短すぎる。
50ルーメンのエコモードであれば4時間らしい。
50ルーメンでどれくらい視認性があるか次第かなという所か
それか、外部バッテリー2個使い(そこまでするか?)
50ルーメンくらいだと
住友スリーエム 3Mモバイルプロジェクター 1Gメモリ内蔵 2時間バッテリー搭載 MP220 65ルーメン 2時間駆動 高い
Panasonic 小型ビューアー PJ-SJ25U 50ルーメン バスパワー USB入力のみ
とかもある模様。
■スクリーン
普通の布?
専用のスクリーンだと裏に映らないよね?
黒い布にすると見え方変わってくるかいな。
とか考えてたら、
リア投影型スクリーン
なんてものもあるんだね。
チームをより良く回す仕組みを提案してみた
自分は会社では受託のソフトウェア開発の仕事してるわけですが、今度の案件が新しいお客さんでこれまでのお客さんとは大分違うので、これまでの仕事の進め方では、そのうち火を吹きそうなので、何か手を打たねば、仕事が回る仕組みを作らねばと末端ながら思っていたりいなかったりしてた。
丁度、こちら-最低ラインの導入コストでエンジニアチームを回すための方法 - あいうぃず@活動中のエントリの想定している環境がウチに近かったので、そのまま先輩に投げてみて、相談させてくださいと持ち掛けてみた。
リンク先は目標として、
- 1)用語の統一
- 2)理解の最低ラインをそろえる
- 3)報告できる状況を作る
そのための仕組みとして、
- 週1回、1時間の勉強会 1)、2)の達成が目的
- 1日15分の朝会(+その後の調整時間)
となっており、それらをウチに上手く取り入れるにはどうすれば良いかをまず、先輩と話し合ってみた。
メンバーはそれなりにキャリアがあり、これまでのやり方でちゃんと回してきた自負のある集団だと思われるので、導入は目標や仕組みありきではなく、現状からリアルに想像できる問題への対策である事が分かりやすい事を重視した。
もちろん、見送った仕組みや隠れた目標も徐々に隙あらば展開していく事を確認。周りのモチベーション等も見て。
・週1回、1時間の勉強会
リンク先では、1回目、全体概要とスケジュール、2回目以降、分かっている人が作るソフトの仕組み解説とあるが、この辺のイントロダクション的部分は、仕組み化や「1)用語の統一」、「2)理解の最低ライン」をそろえるを意識してはないが既にやっていて、要所要所で出てる話なので、もうさすがに分かってるはずという事でカット。
イントロダクションをわざわざやって、もう分かってる感が出てしまうとその後続けるのも難しくなりそうで、そうなると困るため。
なので、勉強会は「全員が担当部分(今やっている事)を説明する」からにしたらどうかという話になった。
目的はスケジュールが「遅れた時などスムーズにヘルプに入れるように、あらかじめ各担当部分を周知させておくため」と分かりやすくなる。
その中でプラットフォームの理解で不足部分をフォローアップしていく。運用者他がその意識をしておく。
用語の統一も表に出すと、重く・不毛な議論になる可能性があるので、裏の目標として、運用者他が意識をしておく。
議事録は、理解度の確認するために一定以上のクオリティや周りがチェックする仕組みでを定着しそうにないので、話を聞いてもらう・記録を残す意味で、ノートPCを持ち込んでその時間内に作成できる議事メモを全員持ち回りで作成し展開する。
まとめると、
目的
- 1)スケジュールが遅れた時などスムーズにヘルプに入れるよう
- 2)裏(プラットフォームの理解)
- 3)裏(用語の統一)
運用者
- もう1つの1日15分の朝会とは別の人
進め方
- 1)運用者が開催のアナウンス等をする
- 2)時間:昼休みの1時間前から開始して昼休みで開始できっちり終わる
- 3)今やっている作業を1人5分程度全員に説明する
- 4)質疑応答はその都度、1時間で終わるように注意(足りない場合、メール等)
- 5)持ち回りで議事メモを取って、後でメールで送る(勉強会時間内で作成できるもの)
→説明されてる内容から気持ちが離れないよう
・1日15分の朝会(+その後の調整時間)
こっちは、少し前に既に毎日の進捗会を導入していたので、それを1段進める形にした。
まとめると、
目的
- 1)スケジュールを守って作業を進めるために、フォローアップしやすくする
- 2)ディレクターだけでスケジュール管理すると負荷が大きい
運用者
- 1週1回、1時間の勉強会とは別の人
進め方
- 1)運用者が開催のアナウンス・スケジュール管理等をする
- 2)朝9:10〜に変更
- 3)進行
・各自、昨日やったこと・今日の最終目標(なるべく具体的に)を説明
→スケジュールを達成するため、今日ここまで行くというのを各自明確にする必要がある
→1日1日を大事にして作業していかないといけない
・問題点、心配事があればアラートを上げる
- 4)帰る前に進捗率をスケジュールに記入
- 5)記入されている進捗率がスケジュールに比べて遅れてる場合運用者がアラート
→担当者がそれ所じゃない場合等、第3者がアラートを上げれるようにする
- 6)アラートが上がった場合、進捗会直後に担当者、ディレクター、運用者で対応・調整を話し合う
- 7)リスケが発生した場合等、運用者が管理
- 8)スケジュール管理方法は基本的に運用者にお任せ
よし次はリンク先と「まとめ」を元に上司に相談する。
つづく
本の電子化検討中
この頃ネットを色々見てて、ドキュメントスキャナを使用しての本の電子化(書籍のPC取り込み)ががぜん真実味をおびてきた。理由は
・ドキュメントスキャナ(プリンタのように紙を送って読み取るスキャナ)が身近になってきた
・ネット上の運用レポートが充実してきた
- 本の電子化を始めたのでまとめる。 - 旧機械
- 2008-12-24
- Scansnap、S1500MとS1300の棲み分けと裁断機導入と楽しさのこと:[mi]みたいもん!
- 橋本商会 » scansnapと裁断機を買って本を電子化しまくる
この辺は、かなり参考にさせていただきました。
ずいぶん実績とノウハウが公開されてきているので良い感じ。
・日本に快適な書籍ダウンロード販売の環境が登場するのはまだ先になりそう
仮に素晴らしい書籍ダウンロード販売の環境が登場しても、今持ってる本をそれで読むには買い直しになるだろうから、どちらにせよではある。
本をバッサリ行く事への抵抗以外はかなり敷居は低くなった。
んで、わりと本の電子化を検討中だけど、機材を用意する前にその辺で選択肢があって、考え中。
ちょっと以下にまとめる。