2012年7月27日金曜日

Developers [Social Enterprise] Summit 2012に参加してきました。

Developers [Social Enterprise] Summit 2012に参加してきました。
忘れない内に感想とかをメモしときます。

全体的なテーマはエンタープライズ向けのサービスを提供する身としてソーシャルとどう向き合うか的な感じ。
協賛にSalesforce、GREEなど多くの有名企業が名を連ねていました。
またJenkinsの開発者の方とかもいました。
普段のweb系のカンファレンスよりもエンタープライズ向けだからか年齢層は高めに感じました。
名刺見ると名だたる日系大企業の方々が多く来場されていました。

タイムテーブルはこちら

僕が参加したセッションは
【S-1】クラウドが破壊するもの、創造するもの
新野 淳一 氏 / 西脇 資哲 氏 / 藤井 彰人 氏 / 村上 明子 氏 / 関 孝則 氏

【B-1】Salesforce R&DとソーシャルとEngineer Happiness
 大沢 良樹 氏 

【B-2】エンタープライズ開発におけるコラボレーション - JIRAによる顧客と開発チームのつなぎ方
鈴木 雄介 氏

【B-3】社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~
原島 法子 氏 / 岩永 義弘 氏 
【A-4】[パネルディスカッション] エンタープライズ✕ソーシャルエンジニアのスキルセット
鈴木 雄介 氏 / 山本 裕介 氏 / 藤本 真樹 氏 / 大沢 良樹 氏 

以上です。 順番に軽く内容と感想。
【S-1】 新野さんの講演から。
クラウドが普及することでSIerの仕事が減り、単価も下がってるという破壊の側面。
実際、あるSIerの単価は二桁下がったそうです。なかなか衝撃的な下げ幅。
ハードウェアがいらなくなったこと、Paasなどでは運用もいらないことが要因だそうです。

一方クラウドが想像するものとして

  1. サービスモデル・・・誰でもどこでもサービスを開始できるようになったね
  2. マルチデバイス対応・・・モバイルでもどこでも使えるようになったね
  3. ビッグデータの活用・・・かなりのコストがかかってた大規模分散処理はクラウドで低コストできちゃうね
てなことが語られました。
すべての共通することとして「コミュニケーションの重要性」という話から、エンタープライズ向けソーシャルの話へ。

ソーシャルエンタープライズという言葉は二年ほど前にSalesforceが言い出してからかなりかなり熱い。
chatterとかそんときからがんばってる。

どんどんいろんなツール(エンタープライズ向け、コンシュマー向け含む)が出てきたけど、それを整備する共通基盤みたいなものが必要なのでは。
それらに向かう新技術としてOauth2.0とか出てきてるけど、まだまだだよね。
これからだよね!
てな感じでした。

続いてgoogle藤井さん
ユーザ側の変化。
コンシュマーとして受け入れたものをエンタープライズでも受け入れるようになってきた。
テクノロジーの変化。
クラウド、モバイル、ソーシャル。
こんなキーワードが出た上で、googleサービスの紹介。
Hangoutを使って六本木にいる社員の方と話してみたり、Google Big Quey、Google Map Engineなどの説明をされていました。
どれもgoogleは情報を与えているに過ぎない。
この上でなんかおもろいことできそうでしょ!?ってスタンスが印象的でした。
その通りだと思いますw
いろいろ妄想の膨らむお話できた。

続いてマイクロソフト西脇さん
マイクロソフトはソーシャルに向けたたくさんのラインナップ持ってますよってお話。
skype、yammer、office365、azure、windows8。
病院での事例などをもとにどう使われているか、いかにソーシャルであるべきか、が語られていました。
人だけでなく、ドキュメント、ファイルなどすべてをソーシャルに扱おうという姿勢が印象的でした。

IBM村上さん
ソーシャル活用したたくさんの分析のお話。
かなり詳細にソーシャルメディアでの行動、会話を分析してらっしゃいました。
分析ツールは作るから、どんな情報が欲しいのかもっと現場から情報ちょうだい。
て感じが印象的でした。

Salesforce関さん
chatterいいよ!!ってお話。
たしかによさそうでしたw
今までいろんなツールでいろんなとこで管理してた情報も一つにして、その中で探せるようにすることで、かなり効率があがったそうな。
chatterはほんまによさげでした。

■感想
ソーシャルエンタープライズのサービスが数多く紹介されていてその多さにびびりました。
まだまだ伸びる市場ではあると思いますが、すでに数多くのプレイヤーが世界中にいるtことも確かでした。
コンシュマーでの体験がエンタープライズにもどんどん入ってきてることを考えると、そこをとれるプレイヤーは数多くないはずなので、どこが取るか注目ですね。
また、コンシュマー向け、エンタープライズ向けを統一するような共通基盤が現れるのではないかという妄想もだいぶ楽しいですね。

【B-1】
Salesforceがどのように社内向けソーシャルを実現しているかのお話。
主に、chatterをどう使っているかのお話でした。
Salesforceの文化として「Dog fooding」使ってみなきゃわからんでしょ。
って話が印象的でした。
実際、Salesforceではかなり盛んにchatterが使われている様子。

chatterはすべての情報のハブとなり、いろんな情報をタイムラインで流してる様子。
リリース情報、コミット情報、tips、疑問、雑談などいろんな情報が流れることで、社内の部署を超えたコミュニケーションが活発に行われてる様子でした。

■感想
chatterはかなりよさそうでした。
効果がありそうなのが、目に見えた感じでした。

【B-2】
アジャイルとWFの話。
まぁ、何が最適かとか状況次第だし、最適解はないね!
ただ、エンタープライズ向けは「複雑かつ不定期で短納期でスコープに妥協がゆるされない」つまりアジャイルもWFも向いてないね!って結論が印象的でしたw
その通りだと思いましたw

その流れを組んでJIRAの説明。
プロジェクト管理としてかなりよさそうでした。
いろんなプラグインが出てて、好きにカスタマイズできそうな感覚。

■感想
JIRA使ってみますw


【B-3】
アジャイルやってみたこと報告するよってセッションでした。
会社の合併とかいろいろ合って、いろんな人と仕事するのが大変でしたよ〜
そこで、先が不透明なときはアジャイル!!
って感じで始めたけど、二人で開発するのはおすすめできません。。
って結論でした。
そのあとUXについて。
主にユーザビリティテスト大事だよね!
ってお話でした。
作ったもののつかわれなかったら意味ないよね。
ちゃんとユーザビリティテストして使われるものを作りましょう。
ってことでした。

■感想
恥ずかしながらユーザビリティテストまだやったことないので、今度やってみようと思います。。

【A-4】
パネルディスカッション形式。
テーマ1「ソーシャルとは何か」
・twitter 山本さん
今まではエンタープライズと対極。
これからはエンタープライズで応用するもの。

・GREE 藤本さん
対義語はスタンドアローン??
そんなことはありえないからそんな厳密に考えなくてもいいんじゃない?
そんなことより、エンタープライズでもコンシュマー向けでもどこまでオープンになるか。
その閾値を見極めることに興味がある。

・Salesforce 大沢さん
デベロッパーを成長させてくれるツール。
デベロッパーとして必須なスキル、ツール。

テーマ2「仕事の中でソーシャルプラットフォームをどう使っているか」
・GREE 藤本さん
人数が急増しているため、情報の管理、伝播がソーシャルな要素を取り入れないとできない。
例 github enterprizeでのソース共有
最新の情報を得るためにはtwitterが一番早い。わかった気になった問題は残るがセキュリティなど更新の早い分野ではスピードも大事。

・Salesforce 大沢さん
chatterの導入によって開発とオペレーションの差を埋めた。
最適な情報をどんどん取り入れることでエンジニアのポテンシャルも高まる。

テーマ3「オープンすぎてこまったこと」
・GREE 藤本さん
今のところない。
コードの共有も含めて議論し続けている。
ちょっとづつ公開してどこまでできるか探り探り。

・twitter 山本さん
オープンにすることは最終的に会社に返ってくる。
社内で使って誰でも使えそうであれば、どんどんオープンにする。
bootstrapはその例。
オープンにするかどうかは専門の部署がありそこが判断してる。
ソーシャルの一番の特徴はタイムライン。
古い情報はもう見なくていいよね!っていう暗黙の了解がある。
タイムラインを中心として情報を拾っていく。

ざっとこんな感じでした。

■感想
何がどこまでオープンになっていくかはかなり興味がある。
個人的にはほぼすべてくらいオープンにしてるが、たぶんそうはならない。
人によってソーシャルとの付き合い方は変わると思うが、オープンにすることのメリットがもっと普及すればいいのにと、個人的には思う。


2012年7月23日月曜日

【C言語】システムコール関数でファイル入出力(2)

前回に引き続き、システムコール関数でのファイル入出力のメモ。

【C言語】システムコール関数でファイル入出力(1)


write()関数とread()関数

writeの例.


#include<stdio.h>
#include<hogehoge.h>

int main(void){

int fd;
char filename = "test.txt";
char message = "ここにファイル出力したい文字列を書く";

//  ファイルオープン
fd = open(filename, O_WRONLY);

//  ファイル書き込み
write(fd, message, strlen(message)+1);

//  ファイルクローズ
close(fd);

return 0;

}


write関数

fd - 対象ファイルのファイルディスクリプタ
message - 書き込む文字列
strlen(message)+1 - 書き込み文字列の長さ




readの例.


#include<stdio.h>
#include<hogehoge.h>

#define BUF_LEN 1024

int main(void){

int fd;
char filename = "test.txt";
char buf[BUF_LEN];

//  ファイルオープン
fd = open(filename, O_RDONLY);

//  ファイル書き込み
while ( ( n =read(fd, buf, BUF_LEN) ) > 0 ){
     printf("%s", buf);

}

//  ファイルクローズ
close(fd);

return 0;

}




read関数
fd - ファイルディスクリプタ
buf - 読み込んだ文字列を格納する箱
BUF_LEN - 一回で読み込む文字列の長さ(バイト数)



readの返り値として、「読み込んだバイト数」が返ってきます。
つまりこのwhile文は、まだ読み込む文字がある場合はずっとループする、ということ。
BUF_LENで指定したサイズ(今回は1024)ずつ読み込み、表示します。





【C言語】プロセスIDを表示する

C言語と対話する日々のイトウです。
今回はプロセスIDの表示方法について。


UNIXコマンドだと
$ echo $$
$ ps u
で表示できるプロセスID。C言語では少し記述が必要です。



#include <stdio.h>

// (1) 必要なライブラリをインクルード
#include <sys/type.h> 
#include <unistd.h>

int main(void) {
    int pid;
// (2) プロセス番号を取得
    printf("my PID is %d¥n", getpid() );  
    return 0;
}



こんな感じで表示できます。
getpid()が自身のプロセス番号を表示する関数で、
それを使うために必要なライブラリをインクルードしてる感じです。

簡単ですね。


mac上でvirtualboxが起動きでなくなった時の対処

普段Macでvirtualboxを動かしfedoraを触ってるのですが、突然起動できなくなったので、対処法をメモ。
  今回でたエラーはこれ。

そこでいろいろ調べてみるとここにたどり着きました。 つまりvirtualboxを再インストールしてPCを再起動すれば治るとのこと。 ※アンイストールは必要ないです。 とりあえずやってみると、無事起動できました。 データも全部残っていました。 原因はよくわからないですが、ちょいちょいあるみたいです。。 そろそろ新しいVM試そうかな。。

2012年7月18日水曜日

ファイルアップロードのエラー

phpでのファイルアップロードで少しハマったのでメモ。

<input type=file>でファイルをアップするときのエラーの見方です。

http://d.hatena.ne.jp/pekeq/20100924/p1

ここに全部あります。

2012年7月10日火曜日

【C言語】システムコール関数でファイル入出力(1)

イトウです。

 今回も最近勉強中のC言語に関するエントリです。
※まだ勉強中のため記述に誤りがある可能性があります。 

・システムコールとは
OSのカーネルの機能を呼び出す機構のこと。
open()やclose()などがそれにあたる。

 ・高水準関数と低水準関数

【高水準関数】
・一般によく使われるファイル入出力関数など
・関数内にバッファ機能を保持している
・フォーマットを指定したり、高度な出力ができる
・printf, fopenなど

【低水準関数】
・低水準関数 ・バイト数単位で制御される
・入出力が即時に反映される
・ファイルディスクリプタという重要な概念がある
・open, read, write, closeなど

【参考URL】


低水準入出力関数
高水準関数と低水準関数の違いに詳しい


紫月庵-C言語-9.ファイル入出力
全体像、ファイルディスクリプタについてはこちら



高水準関数、低水準関数という呼び方も今回はじめて知りました。
実際のシステムコールの使い方については次回のエントリで書きたいと思います。



位置情報を使ったAndroidアプリを作る際の参考メモ

イトウです。

Google Mapを用いたAndroidアプリを作る際、参考にしたサイト&エラーについてメモしておきます。


色々サイトを見ましたが、簡単なものを作る場合は以下の2サイトでOK。

位置情報を取得するには/GPSを使用するには - 逆引きAndroid入門



位置情報サービスチュートリアル




マップの調整(ズームの縮尺など)は以下のサイトで。

MapViewクラス - Android入門




不明な点は公式リファレンスで。英語ですが。

Pgoogle.maps 公式リファレンス
マップの公式リファレンス


Package Index | Android Developers
Androidの公式リファレンス




おまけ

Android SDK をAptana Studioに導入する方法。

Android開発ツールの準備 - jsWaffle

Aptana Studio3にAndroid ADTプラグインをインストールするまでの手順

View more PowerPoint from kujirahand kujira



以上、最近Android開発を初めて右も左も分からないイトウの参考サイトまとめでした。

2012年7月9日月曜日

【C言語】strcat関数を自作してみた。【第二弾】

蝉がミンミンとうるさく鳴く、そんな夏がやってきました。イトウです。

【C言語】strlen関数を自作してみた。

前回の記事と同じく、ライブラリ関数自作してみようシリーズです。
今回は文字列連結のstrcatを自作してみました。


 自作のmy_strcat関数(my_strcat)
#include<stdio.h>

// str1の後ろにstr2を連結する
char * my_strcat(char* str1, const char* str2){
    char *top;

    // (1) 返り値用に先頭アドレスを保持しておく
    top=str1;

    // (2) str1のポインタを最後まで進める
    while(*str1++ != '¥0');    
    *str1--;

    // (3)str1の背後から、str2の文字をコピーしていく
    while( (*str1++ = *str2++) != '¥0');

    return top;
}


main関数
#include<stdio.h>

int main(void){
     // (4)ポインタで定義して渡すとエラー
     // char *str1 = "Tokyo";
     // char *str2 = "Japan";

     // 配列で定義して渡せばOK
     char str1[] = "Tokyo";
     char str2[] = "Japan";    

     my_strcat(str1, str2);
     printf("%s¥n", str1);

     return 1;
}



では、コードについて少しだけ説明を補足します。



(1)返り値用に先頭アドレスを保持しておく

strcat関数の中でポインタ情報を変更するので、別の変数を作って先頭アドレスを保持しておく必要がある。もし普通通りに return str1; としてしまうと、ポインタを進めた先頭アドレス(=つまりstr1の先頭アドレスとは違う値)が帰ってしまう。


(2) str1のポインタを最後まで進める

文字列の最後には'¥0'が入っています。str != '¥0' が成立するまでwhile文を回すことで、str1の最後の終端文字(¥0)までポインタを進めることができます。そしてその後の*str1-- により、終端文字の位置にポインタを戻している。次の段階では、この位置からstr2の文字をコピーしていくことになる。


(3)str1の背後から、str2の文字をコピーしていく

一文字ずつ、str2の文字をstr1にコピーしていく。終端文字までコピーが完了したら、ループを終了する。


(4)ポインタで定義して渡すとエラー

my_strcat関数に文字列を渡す際、ポインタを渡すとエラーが発生する。この原因は不明だが、メモリ領域に関係するものではないかと考えられる。
つまり、*str1, *str2と続け様に定義すると、メモリ領域の連続した部分が使用される。my_strcat関数内で、str2はconst(定数、つまり代入しちゃダメ)で定義されているので、str1のメモリ領域にズカズカ文字をつっこんでいくとstr2の領域に被さり、そこはconstだからSegmentation Fault!みたいなノリじゃないかなと。推測ですが。

本家のstrcat関数でも同様のエラーが発生することから、配列で文字列を定義して渡すのが賢いと思われます。






ポインタの扱いは難しいですね。。CはJavaなんかと違ってエラーメッセージがあまり詳細じゃないので苦労しますね。しかし、ライブラリ関数を自作するのは勉強になって良いですね。



【C言語】strlen関数を自作してみた。【第一弾】

梅雨も明け、蒸し暑い夏がやってきました。イトウです。

C言語の文字列、ポインタについて学ぶために、文字列の長さを返すstrlen関数を自作してみました。 実際にライブラリにあるstrlen関数と同じふるまいをします。


 自作のmy_strlen関数(my_strlen)
#include<stdio.h>

unsigned int my_strlen(const char* str){
    unsigned int length = 0; // (1)文字列の長さを入れる箱

   // (2)文字列の長さを数える
    while(*str++ != '¥0'){
        length++;
    }
    return length;
}


main関数
#include<stdio.h>

int main(void){
    char str[] = "Tokyo";

    printf("%d¥n", my_strlen(str) );
   return 0;
}



これだけなんですが、少しだけ勉強したことを補足します。



(1)文字列の長さを入れる箱

なぜintでなくてunsigned intなのか?
それは、取れる値の幅が関係してきます。値の取れる範囲は、
int -32768~32767
unsigned int 0~65535

です。
つまり、今計算したいのは「文字数」なので、マイナスになることはない。
なのでここで適切なのはunsigned intだということです。


(2)文字列の長さを数える

文字列の最後には'¥0'が入っています。なので、str != '¥0' が成り立つまでループを繰り返すことで、文字列の最後まで確認することができます。
また、引数はcharのポインタ型なので、*str++ とすることで、次の文字を見にいくことができます。




C言語で最初に直面する壁は文字列とポインタかと思います。大変ですが重要な基礎の部分なので、色々試してしっかり理解していきたいと思います。



2012年7月3日火曜日

offline access tokenがなくなるのでいろいろまとめ

開発者がFacebookのデータを使いたいときやっかいなのが
認証で使うアクセストークン。

2012年の5月まではoffline access tokenという最強(最恐)のトークンがあったのですが、いろいろあってなくなっちゃいました。

offline access tokenなくすからちゃんとしたの使ってよーってことが
ここに書かれてます。

このページの冒頭に

 Instead please check the Deprecation of Offline Access Permission document which explains how to start using access tokens that are valid for up to 60 days.

なくす代わりに60日くらい有効なやつあるからそっち使ってね!
って書いてます。

今回アクセストークンと呼んでるものは三種類あるアクセストークンのうちuser access token に該当する記載だと思われます。
ここに載ってないアクセストークンでもう一個app access token というやつがありますが、これは基本的に無限の寿命を持ってるっぽいので。。
ただできることは限られてます。
参考:http://wktcoder.blogspot.jp/2012/06/facebook.html


基本的にこのページをある程度日本語でまとめてます。
間違ってたら教えてくださいw


offline access token はやめますよー
アクセストークンはいろんなもんソーシャルにできたりするので使ってね。
offline access tokenやめる代わりに有効期限長いアクセストークン使えるようにしたよ!
基本的にはアプリに来た時に新しくアクセストークン発行するよ!(下に例外もあり)

・寿命短いアクセストークンの寿命伸ばせますよー
通常のアクセストークンの有効期限は1~2時間です。
寿命伸ばすオプションあるのでそれ使えば60日になるよ!
このオプションは一日に何回やったも最初の一回だけが有効だよ!

例外が3つ
例外1 デスクトップアプリ
デスクトップアプリの場合はFacebookにログインした状態で一回認証すれば寿命長いアクセストークンあげるよ

例外2 古いSDK使ったネイティブモバイルアプリ(iOS、android)
寿命長いアクセストークン取れる新しいSDK出したからそっち見てね。
古いの使ってると定期的に認証いるよ。

例外3 新しいSDK使ったネイティブモバイルアプリ(iOS、android)
新しいSDKだとユーザがログインする度に新しい寿命長いアクセストークン取ってるから基本的に気にしないでいいよ。



ここから新しい設定への移行のためのシナリオ5つ
このページにある設定にしとけば、過去にoffline access token取得してる場合はユーザにダイアログ出さずにいけるよ。

シナリオ1 過去にoffline access token 要求してないアプリの場合
基本的には何も変わりません。
もし、クライアント側でアクセストークン取得してた場合は

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

ってやつ使えば簡単に寿命延長できるのでやった方がいいかもよ!

シナリオ2 過去にoffline access token 要求してたアプリの場合
過去に要求して取得してる場合は基本的にはそのまま使えます
ただ、新しいユーザーに関しては要求しても帰ってくるのは寿命短いやつなので気をつけてね!

offline access token を完全に廃止する頃になると自動的に60日の寿命にしちゃうので気をつけてね!詳しくはロードマップで。

シナリオ3 サーバーサイドの開発者の方へ
サーバーサイドのAouthで認証したアクセストークンはデフォルトで寿命長いアクセストークンです。

cronなどで自動的に寿命を延長することはできません。
Aouth認証には有効な"authorization code"が必要でその寿命は1~2時間であり、それを得るにはログインしてるユーザが必要だよ!

シナリオ4 クライアントサイドで寿命伸ばしたい方へ

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

クライアントサイドでやる場合は基本的にこれやれば大丈夫です。
寿命長いアクセストークンかえってきます。

シナリオ5 ページアクセストークン
ページアクセストークンはgraph api[User ID]/accountsみたいなクエリでとれます。
このときのユーザーアクセストークンが寿命短いアクセストークンであれば取れるページアクセストークンも寿命短いバージョン。
寿命長いユーザーアクセストークンでリクエストして取ればページアクセストークンも寿命長いバージョンが取れます。


以上がページのまとめです。

いろいろやってみた感じシナリオ3のサーバーサイドでデフォルト寿命長いってのはたまに違ったことがあったので、

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

やる必要があることがありました。
まだ移行期間だからかな。。

間違ってるとことかあったらご指摘おねがいしまーす!