2009年7月29日水曜日

Processの問題

どうもJavaでProcessを使って別プロセス処理をする場合,InputStreamとErrorStreamをうまく処理してあげないとデッドロックになるらしい.

process = rt.exec(command);
exitValue = process.waitFor();

このとき,commandから大量の出力が出るとデッドロック状態になる.
InputStreamとErrorStreamはStreamなのである程度以上の文字列を確保出来ないためらしい.
そのため,

private void exec(String command, StringBuffer stdOutput){
process = rt.exec(command);
readOutput(stdOutput, process.getInputStream());
exitValue = process.waitFor();
}

private void readOutput(final StringBuffer buf, final InputStream is) {
Runnable runner = new Runnable(){
@Override
public void run() {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
try{
while((line = br.readLine()) != null){
buf.append(line);
buf.append("\n");
System.out.println(">"+line);
}
}catch(IOException e){

}
}
};

Thread th = new Thread(runner);
th.start();
}

とやると比較的うまくいく.

2009年7月22日水曜日

主成分分析とクラスタ分析

SNSの分析で,いくつかのパラメータを直接クラスタ分析行なっていたけど,
ちゃんと主成分分析してからクラスタリングした方が良さそうだ.
とりあえず,直近の課題としよう.

2009年7月21日火曜日

残念なお知らせ

外部資金不採録通知ゲット・・・
ああ,いいことないかなあ・・・
お金になる研究しないとなあ・・・

2009年7月17日金曜日

Buisiness Blog & SNS World二日目その2

Timelog


・MadeInJapan
・AllInOne
・CrossMedia

・リアルタイムマーケティング
・フローコンテンツ
 流れる情報
・ストックコンテンツ
 たまる情報
これらの情報をメディアとして受信,共有が出来れば.
APIを公開しているので,XMLで取得可能.

・リアルタイムを生かすビジネスモデル
・写真との連携がポイント?
・WEB以外とのオンラインイベントとの連携

・購買行動を次につなげる⇒リアルタイムのよさ
・月間ユニークユーザ数:8万50000人,3万5000人
・miniブログは一般人には敷居が高い.

Buisiness Blog & SNS 二日目

本当に社内SNSに効果があるのか?


SKIP

社内向けSNS.
友人機能無し.
友達機能はコミュニケーションを阻害する?⇒本当か?かなり疑問.

インテリジェンス

書き込みの障壁が高く盛り上がらない.

他己紹介を活用.
自分の知り合い全員に紹介文を.

東京三菱インフォメーションテクノロジ

強制的に書かせても使わなくなる
仕事上の情報をSKIPへ
ロボットが自動的に障害速報を.
3月に増加⇒4月に激減.ノルマ達成のために3月に書き込んでいた.
業務に役立つTIPSを書いてほしい⇒一部の人に本当に有効なものを書いてもらった.
ロボットがBlogを書く⇒エラー情報


永和システムマネジメント

東京と福井に事業所.異なる文化を持つ拠点間で盛り上がるのか?

小集団活動とのリンク(部活とかサークルとか)
実際にあって活動.

東京では,もともとTwitterなどでつながりはある.
福井ではリアルな活動が中心

福井からSKIPの利用を推進.

トップダウンかボトムアップか


アカウントを全員に配る⇒トップダウン
ボトムアップが面白いと思って使うことが重要⇒ボトムアップ
リアルとSNSの連携

SNSとはなにか

・社員同士のコミュニケーション
・会社を浴していく
・社員同士のコミュニケーションのベース

2009年7月16日木曜日

Buisiness Blog & SNS World 2009

企業内SNS導入効果,背景と運用ノウハウ


OKI電気

導入効果

・通常の業務システム:
業務効率化・コスト削減・・・
・企業内SNS:
失われたものを保管
必然的になんにでも使えるようなもの
分かりやすいものから手をつけて残ったもの

導入効果:
社内コミュニケーションの活性化.
・目的は?フォーマルorインフォーマル
社内情報共有
・形式知or暗黙知
ナレッジマネジメント
・知識創造・創発.コラボレーション
・知識共有,Q&A
・Know-Who
企業風土の改革
・組織間の壁
企業DNAの伝承
・求心力

商品・設備など目に見えるものは,業務システムが.
人や企業風土など目に見えないものを,社内SNSが担当.

導入・運用ノウハウ

・小さくはじめる
 ・段階的に
 ・ファーマルな用途にも向く
・大きくはじめる
 ・事前の問題分析などを会社をあげて行う

コッターの企業変革ステップ
1,危機意識を高める
2,変革推進チームを作る
3,適切なビジョンを作る
4,変革のビジョンを周知徹底する
5,従業員の自発的行動を促す
6,短期適正化を有無
7,さらに変革を進める
8,変革を根づかせる
SNSはもともとボトムアップだが,ミドルアップダウンという考え方が重要

TuckmanModel
形成⇒混乱⇒統一⇒機能

・SNSはただの箱
・目的に沿ったものを添った形で
・運営は現場の人を巻き込む
・トップマネジメントを確保
・混乱期を恐れない


導入効果が出る理由

大量生産消費社会⇒焦慮歌品質社会

大競争時代へ
生存を賭けて変化への対応力とスピードが求められている

階層型組織からネットワーク型組織へ
SNSが良くマッチする

SNSの投稿数は多い=コミュニケーション増大

情報・知識共有基盤crossba

・OpenPNEベース
・会社に必要なものを付け加えている

地域SNS最前線~国内外の事例から~



地域SNSって実際どうなのか?
・盛り上がっていない
・ビジネスモデルがしっかりしていない
・地域に可能性はある

下ぶろ
・300人くらい
・平均フレンド3.19人

みかん
・和歌山県田辺市
・2273人
・コミュニティ303
・平均フレンド5.11
・SNSのDBを利用して外部サイトを作成
・田舎のGoogle

あみっぴぃ
・平均フレンド9人強

2009年7月14日火曜日

JavaScriptでGoogleCalendar修正版

修正版を作成してみた.

<html>
<head>
<img style="position:absolute; top: -1000px;" src="./dummy.gif">
<script type="text/javascript" src="http://www.google.com/jsapi?key=<i>YOURKEY</i>"></script>
<script type="text/javascript" src="./js/jquery"></script>
<script type="text/javascript">
<!--
google.load("gdata", "1");


function PRINT(src){
$("#message").html($("#message").html()+"<br>"+src);
}


function logMeIn() {
scope = "http://www.google.com/calendar/feeds/";
var chk = google.accounts.user.checkLogin(scope);
start();
}


function setupService(){
calendarService = new google.gdata.calendar.CalendarService('<i>APPLICATION-NAME</i>');
}

var calendarService;

function start(){
/*
* Retrieve all calendars
*/
setupService();
var feedUrl = 'http://www.google.com/calendar/feeds/default/allcalendars/full';

var handleError = function(error) {
PRINT(error);
}

calendarService.getAllCalendarsFeed(feedUrl, callback, handleError);
}


// The callback method that will be called when getAllCalendarsFeed() returns feed data
function callback(result) {
var entries = result.feed.entry;

for (var i = 0; i < entries.length; i++) {
var calendarEntry = entries[i];
var calendarTitle = calendarEntry.getTitle().getText();
PRINT('Calendar title = ' + calendarTitle);
}
}


//-->
</script>
</head>
<body>
<div id="message">
</div>
</body>

<input type="submit" value="login" onclick="logMeIn()">
</html>

Loginボタンを押すと,Loginしてカレンダーをすべて取得してくれます.

Login処理

GoogleCalendarAPIを利用するには,GoogleへのLoginが必要.
そのためには,

scope = "http://www.google.com/calendar/feeds/";
var token = google.accounts.user.login(scope);

を実行する必要がある.

以前これを埋め込んだコードを作って実行しておいて,
あとでそれを忘れて消してしまったのが原因だったらしい.

2009年7月13日月曜日

JavaScriptでGoogleCalendar続き

先日はうまくいっていたと思っていたのに,

calendarService.getAllCalendarsFeed(feedUrl, callback, handleError);

を実行すると,

Error: Request via script load timed out. Possible causes: feed URL is incorrect; feed requires authentication

というメッセージが帰ってくるようになった.

なぜだ・・・

追記:
どうやら,Login情報が必要らしいぞ.

Pukiwikiで一部のページにのみパスワード認証をかける方法

任意のページごとの閲覧・編集制限

やってみようか.
1,ユーザ定義
pukiwiki.ini.phpにユーザを追加してみる.

/////////////////////////////////////////////////
// User definition
$auth_users = array(
// Username => password
'username' => 'password'
);

ここで,passwordは,
pukiwikiアドレス/index.php?md5=pass
にアクセスしてパスワードを打ち込めば自動的に作成される.
2,認証対象ページを決定

/////////////////////////////////////////////////
// Authentication method

$auth_method_type = 'pagename'; // By Page name
//$auth_method_type = 'contents'; // By Page contents

/////////////////////////////////////////////////
// Read auth (0:Disable, 1:Enable)
$read_auth = 1;

$read_auth_pages = array(
// Regex Username
'#ページ名#' => 'ユーザ名',
);

赤字の部分を変更する.
ちなみに,ページ名は正規表現となる.
なので,ページ名を書いただけだとページ名を含む全てのページが対象となってしまうので注意.
特定のページのみにしたい場合は,

'#^ページ名$#' => 'ユーザ名',

とすればいいのかな?

なんとこれだけ.
楽勝.

2009年7月10日金曜日

GoogleCalendarをJavaScriptで取得

参考ページはこちら.
http://code.google.com/intl/ja/apis/calendar/docs/1.0/developers_guide_js.html


<html>
<head>
<img style="position:absolute; top: -1000px;" src="./dummy.gif">
<script type="text/javascript" src="http://www.google.com/jsapi?key=YOURKEY"></script>
<script type="text/javascript" src="./js/jquery"></script>
<script type="text/javascript">
<!--
google.load("gdata", "1");


function PRINT(src){
$("#message").html($("#message").html()+"<br>"+src);
}


$(document).ready(function(){
/* Loads the Google data JavaScript client library */

/*
* Retrieve all calendars
*/

// Create the calendar service object
var calendarService = new google.gdata.calendar.CalendarService('GoogleInc-jsguide-1.0');

// The default "allcalendars" feed is used to retrieve a list of all
// calendars (primary, secondary and subscribed) of the logged-in user
var feedUrl = 'http://www.google.com/calendar/feeds/default/allcalendars/full';

// Error handler to be invoked when getAllCalendarsFeed() produces an error
var handleError = function(error) {
PRINT(error);
}

// Submit the request using the calendar service object
calendarService.getAllCalendarsFeed(feedUrl, callback, handleError);
});


// The callback method that will be called when getAllCalendarsFeed() returns feed data
function callback(result) {
// Obtain the array of CalendarEntry
var entries = result.feed.entry;

for (var i = 0; i < entries.length; i++) {
var calendarEntry = entries[i];
var calendarTitle = calendarEntry.getTitle().getText();
PRINT('Calendar title = ' + calendarTitle);
}
}


//-->
</script>
</head>
<body>
<div id="message">
</div>
</body>

</html>

見落としやすいポイントが,

<img style="position:absolute; top: -1000px;" src="./dummy.gif">

ここで,dummy.gifというファイルを作って自分のサーバ上においておかないと認証されないらしい.

2009年7月9日木曜日

Google GDATA API Keyを取得する

GoogleCalendarをJavascriptから使いたいので,
GDataのauthorize keyをゲットしてみる.
http://code.google.com/intl/ja/apis/gdata/signup.html
でも,これローカルホストからは使えないのかな.

2009年7月8日水曜日

カブロボで資産運用

ついにカブロボでの資産運用が始まったようです.
カブロボに関しては,本を書いたり,大会に参加したりと色々お世話になっていますが,
最近はトレードサイエンス者が実運用に力を注いでいたため,研究を進めることはなかなかできませんでした.
それでも,人工知能学会誌に解説を書いたりと研究は継続しているんですけどね.

今後どう研究と絡めていけるのか,期待したいです.
単に儲けるカブロボを作るというだけでは面白味に欠けますし,面白いアイデアが出てくると良いのですが.