鈴木敏夫のジブリマジック

鈴木敏夫のジブリマジック

April 30, 2010


鈴木敏夫のジブリマジック

「鈴木敏夫なくして、宮崎駿なし」―宮崎監督と二人三脚で、大ヒットを生み出し続けるスタジオジブリの名プロデューサー・鈴木敏夫。「アニメージュ」編集長時代から「崖の上のポニョ」まで、知られざる仕事術やビジネス手法を、本人や周囲の証言をもとに解明する貴重な一冊。



梶山 寿子 (著)
文庫: 304ページ
出版社: 日本経済新聞出版社 (2009/6/2)
発売日: 2009/6/2

ofxNetworkを使ってiPhoneとMacでTCP通信

April 29, 2010
ofxNetworkを使って、iPhoneとMacを連動させてみました。

Mac版v0061のaddonsExampleには、networkTcpClientExample、networkTcpServerExampleというサンプルがあり、Mac同士で通信を行っています。同様に、Macをサーバー、iPhoneをクライアントとすれば、データのやり取りがでるはず。

2つのプロジェクトを開いてみると、ofxNetworkとofxThreadというアドオンを利用しています。しかし、iPhone版のv0061には、これらのアドオンは含まれていないので、Mac版からコピーしてみます。

networkTcpClientExampleのコードを見てみます。

testApp.h
ofxTCPClient tcpClient; // これが通信とかいろいろやってくれるみたいです。便利君。
string msgTx, msgRx; // サーバーとやり取りする文字列

float counter; //再接続までのカウンターなどなど
int connectTime;
int deltaTime;

bool weConnected; //接続フラグ


testApp.cpp

■setup
クライアントのアドレスとポートを指定してセットアップします。アドレスは環境に応じて適宜。
weConnected = tcpClient.setup("127.0.0.1", 11999);


■update
接続されていればmsgTxをサーバーに投げ、そうでなければ一定時間後に接続しようとします。
渡したい値を文字列にし、msgTxに入れてあげれば良いようです。

if(weConnected){
tcpClient.send(msgTx);
//if data has been sent lets update our text
string str = tcpClient.receive();
if( str.length() > 0 ){
msgRx = str;
}
}else{
//if we are not connected lets try and reconnect every 5 seconds
deltaTime = ofGetElapsedTimeMillis() - connectTime;

if( deltaTime > 5000 ){
weConnected = tcpClient.setup("127.0.0.1", 11999);
connectTime = ofGetElapsedTimeMillis();
}
}




せっかくiPhoneを使うので、加速度センサーを使ってみます。加速度は以下のように取得できます。
ofxAccelerometer.getForce().x、ofxAccelerometer.getForce().y、ofxAccelerometer.getForce().z

これを文字列に変換し、カンマで区切ってmsgTxに入れます。

if(weConnected){
msgTx =
ofToString( ofxAccelerometer.getForce().x, 2) + "," +
ofToString( ofxAccelerometer.getForce().y, 2) + "," +
ofToString( ofxAccelerometer.getForce().z, 2);
}




それでは、新規のiPhoneプロジェクトを作り上記を加えます。
testApp.h

#ifndef _TEST_APP
#define _TEST_APP
#pragma once
#include "ofMain.h"
#include "ofxiPhone.h"
#include "ofxNetwork.h"

class testApp : public ofxiPhoneApp {

public:

〜中略〜

ofxTCPClient tcpClient;
string msgTx, msgRx;

ofTrueTypeFont mono;
ofTrueTypeFont monosm;

float counter;
int connectTime;
int deltaTime;

bool weConnected;

int size;
int pos;
bool typed;
};

#endif


testApp.cpp


#include "testApp.h"

#define RECONNECT_TIME 400

//--------------------------------------------------------------
void testApp::setup(){
// register touch events
ofRegisterTouchEvents(this);

// initialize the accelerometer
ofxAccelerometer.setup();

//iPhoneAlerts will be sent to this.
ofxiPhoneAlerts.addListener(this);

// we don't want to be running to fast
ofSetVerticalSync(true);

//load our type
mono.loadFont("type/mono.ttf",9);
monosm.loadFont("type/mono.ttf",8);

//some variables

//have we typed
typed = false;

//our typing position
pos = 0;

//our send and recieve strings
msgTx = "";
msgRx = "";

//are we connected to the server - if this fails we
//will check every few seconds to see if the server exists
weConnected = tcpClient.setup("192.168.1.27", 11999);

connectTime = 0;
deltaTime = 0;

tcpClient.setVerbose(true);
}

//--------------------------------------------------------------
void testApp::update() {
ofBackground(230, 230, 230);

//we are connected - lets send our text and check what we get back
if(weConnected){
tcpClient.send(msgTx);

//if data has been sent lets update our text
string str = tcpClient.receive();
if( str.length() > 0 ){
msgRx = str;
}
}else{
//if we are not connected lets try and reconnect every 5 seconds
deltaTime = ofGetElapsedTimeMillis() - connectTime;

if( deltaTime > 5000 ){
weConnected = tcpClient.setup("192.168.1.27", 11999);
connectTime = ofGetElapsedTimeMillis();
}
}

if(weConnected){
msgTx =
ofToString( ofxAccelerometer.getForce().x, 2) + "," +
ofToString( ofxAccelerometer.getForce().y, 2) + "," +
ofToString( ofxAccelerometer.getForce().z, 2);

typed = true;
}
}

//--------------------------------------------------------------
void testApp::draw() {
ofSetColor(20, 20, 20);
mono.drawString("openFrameworks TCP Send Example", 15, 30);

if(typed){
monosm.drawString("sending:", 15, 55);
monosm.drawString(msgTx, 85, 55);
}
else{
//if(weConnected)monosm.drawString("status: type something to send data to port 11999", 15, 55);
//else monosm.drawString("status: server not found. launch server app and check ports!\n\nreconnecting in "+ofToString( (5000 - deltaTime) / 1000 )+" seconds", 15, 55);
}
monosm.drawString("from server: \n"+msgRx, 15, 270);
}
〜後略〜




Mac側でnetworkTcpServerExampleを起動しておき、上記のアプリをiPhoneで実行すると、接続がうまくいけば加速度センサーの値が表示されます。今は垂直に立てている状態です。


さて次回は、受け取った値を使って、3Dオブジェクトを動かしてみます。
自省録

自省録

April 25, 2010

自省録

著者はローマ皇帝で哲人.蕃族の侵入や叛乱の平定のために東奔西走したが,僅かにえた孤独の時間に自らを省み,日々の行動を点検し,ストアの教えによって新なる力をえた.本書は静かな瞑想のもとに記されたものではあるが,著者の激しい人間性への追求がみられる.古来,もっとも多く読まれ,数知れぬ人々を鞭うち励ました書.



他人に読ませる事が目的ではなく、自分を戒める為に書かれた物なので、考えを押し付けるようなものではなく、著者自身への厳しさとして読む事ができました。著者がここに書かれている事を実践していたは分かりませんが、こうありたい、という思いを突き詰めた事で、多くの人に理想を示しているのだと思います。実は、アウレーリウス自身は、すぐに怒ったり怠けたりする人で、毎日、猛烈に後悔しながらこれを書いたのだったら面白いなと思いました。

繰り返し登場する考えをいくつか。
・全ての物事は変化する。名声を得たとしても、自分も、それを伝える人々もすぐに死んでしまうのだから、そんなことに拘るな。
・世界は完全無欠の神々が作ったので、自然に適った事しか起きない。だから、自分の身に起きる事は、なんであれ自然に適っている。
・最もよい復讐の方法は、相手に同じ事をしない事だ。



マルクスアウレーリウス (著), 神谷 美恵子 (翻訳)
文庫: 327ページ
出版社: 岩波書店; 改版版 (2007/02)
発売日: 2007/02