ベンチャー企業 CIO: 池谷 義則ブログ&経営、ビジネス、プログラミング技術や便利なオープンソースの紹介 -2ページ目

ベンチャー企業 CIO: 池谷 義則ブログ&経営、ビジネス、プログラミング技術や便利なオープンソースの紹介

SKYAVY, INC. CIOの池谷義則のブログ & ベンチャー企業 & 経営、ビジネス、プログラミング技術や便利なオープンソースの紹介


先日、嫁のPC(Windows 7)のネットが突然つながらなくなった。
僕自身、仕事柄、Windowsに触るk機会は多いが、あまり修理とかは特別得意というわけではないのですわw

なんか、IT業界の人や、システムエンジニアの人は、パソコン全般の事に精通していると思われているようですが、んなこたぁ~、全然無いのが現状。
ま、それでも「問題」があった場合、その解決方法の「見つけ方」は詳しい。なぜなら、親友にGoogleさんがいるからw

ま、そんなこんなで、多少見てみることに・・・
で、僕のPCはつながるので、ルーターやモデルではないっと。
Wifiつながってる~、DOSでPINGも飛ぶし、返ってくるし、、、と、多少なりとも思いつくネットワークのチェック項目を潰していったんですが、さっぱり。

ふとした時に、「マイコンピューター」を開いたら、あらビックリ。HDDの空き容量が数kbという状態。
どうやら、去年生まれた娘の写真を鬼のように入れているらしい。

「もしかしてだけどぉ~?」、とここで考えましたわ。ブラウザとかでウェブサイトを閲覧する時にCookieやらテンポラリーファイルやらを保存する空き容量がないから、つながらない様に見えるだけ??

うぅ~ん、そこら辺はプロじゃないので、当てずっぽう。
どちらにしても、娘の写真は増える一方なので、1TBの外付けHDDを買ってきて、写真を移す。
ブラウザ立ち上げる。親友の運営しているウェブサイトを表示 => 成功。

ってことで、運よく直ったw
今回は、親友の力も借りずにタスク完了ぉ~

総括。
空き容量が全くない状態だと、ネットが使えないよ~っ! ってことがあるので、気を付けなはれやっ
CoffeeScript
聞いたことがある人も多いのではないでしょうか。

簡単に言うと、JavaScriptを簡単に書くもの・・・ってイメージです。
もちっと説明すると、
CoffeeScript はプログラミング言語のひとつで、利用方法としては書いたソースコードを JavaScript に変換してウェブ上で使います。

Ruby や Python、Haskell の様に JavaScript に比べ簡潔さと可読性を向上させた、配列内包 (Array comprehensions) やパターンマッチといった機能を追加しています。
CoffeeScript により、パフォーマンスを下げることなく、より短いコードでプログラムを記述することができます (JavaScript に比べ 1/3 程度の行数が削減できる)。

メリット
 ・コードが短い
 ・ => 可読性UP
 ・  => チームでの共有が容易

デメリット
 ・コンパイル(変換)が必要
 ・記述方法を覚える必要がある

って感じでしょうか。
creww.me内でもCoffeeScriptは利用していますが、正直、チーム開発をしているのであれば、是非利用するべきです。

開発チーム人数が多くなれば多くなるほど、その有用性は上がります。それほど、JavaScriptに比べ、可読性が上がります。
既にご存知の通り、可読性が高ければ、他の人が書いたコードのデバッグや修正も格段に楽になりますもんねっ。

CoffeeScript独自の記述ルールも、大した事ないですよっ!
是非覚えて、チームに導入しちゃいましょっ 社長っw

参考:
http://coffeescript.org/
http://ja.wikipedia.org/wiki/CoffeeScript
GitHub
既に多くのエンジニアの方、PMの方々は利用している事と思います。
ですが、最近社内のエンジニアチームの増強の為に、様々な方とお会いして面接しているのですが、未だにSubversion等を使っていて、Gitを知らない人もいるので、そんな方の為にご紹介。

Git(ギット)とは、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムです。
Gitでは、各ユーザのローカル環境内に、全履歴を含んだリポジトリの完全な複製が作られます。そのため、ネットワークアクセスがなく、中心リポジトリ(管理サーバー)にアクセスできない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができます。
ローカル環境内に全履歴情報を置いているので、例えば中心レポジトリ(管理サーバー)がクラッシュ等の災害にあったとしても、1人でもユーザーがデータを保持していれば、問題なく復元をすることが出来ます。
これ、スゲー安心w

Gitをもっと詳しく知りたい方は、無料で提供されている本があるので、是非読んでみてください。
原文: http://git-scm.com/book
日本語版: http://progit-ja.github.io/
電子書籍リーダー用のフォーマットもダウンロード可能なので、おすすめです。


あと、Gitを安全に、簡単に利用するなら断然外部サービスがおすすめです。

GitHubは、Gitの機能をクラウドで提供しており、それ以外にもチームやプロジェクト管理の為のIssueやWikiの機能を提供している、おそらくはGitサービス提供を行っている最大のサービスです。

もう一つ、類似サービスで有名なのはGitBucket
GitBucketは、さらっと中を見た程度なので、GitHubとの違いについては詳しくありません・・・
ただ、大きな違いは料金の設定ですね。

GitHubの料金ページ
GitBucketの料金ページ

「GitHubは、プライベートなレポジトリーの数」、「GitBucketは、共有するユーザーの数」により金額が変わります。
同時進行するプロジェクト(レポジトリー)が少ない場合、またはチームメンバーの人数が多い場合は、GitHubがお得です。

チームメンバーの人数が少ない場合、または同時進行するプロジェクト(レポジトリー)が多い場合は、GitBucketがお得です。

なので、フリーランサーで一人とか少人数で作業をする場合は、GitBucketなら無料で利用できますね。


参考: Wiki
使いやすいテキストエディターとして有名な Sublime Text
最近のモニターの解像度の向上のおかげなのか、サイドバーの文字が小さい・・・

なので大きくしたい。って場合は、 メニューの Preferences / Browse Packages…  に行って、 Theme - Default ディレクトリーに行き、Default.sublime-theme のファイルを開く。
で、以下の箇所を修正。


{
    "class": "sidebar_label",
    "color": [0, 0, 0],
    "font.bold": false
}
{
    "class": "sidebar_label",
    "color": [0, 0, 0],
    "font.bold": false,
    "font.size": 14.0
}

これで完了です。



修正後は

facebook の Graph APIを利用して、友達リストの取得をする方法を紹介します。
昨今では、SNSとの連携と利用がウェブサイトを運営する上で非常に重要なファクターな訳で・・・
ログインはもちろんですが、今回はこの機能!

前提条件として、ユーザーのInfiniteAccessTokenはすでに取得済みという感じで進めます。


$this->fbToken = $this->user->getFbInfiniteAccessToken();
$this->friends = array();
if (!empty($this->fbToken)) {
  $fbApiConfigs = sfConfig::get('app_facebook_api');  // get facebook APP keys in array
  $fbConnect = new myFacebookConnect($fbApiConfigs['key'], $fbApiConfigs['secret']);


  // get Japanese name
  $fbDataJP = $fbConnect->graph('me/friends', $this->fbToken, array('id', 'name'), 'ja_JP');


  if (isset($fbDataJP['data'])) {
    // put data into array
    foreach ($fbDataJP['data'] as $v) {
      $data = array(
        'id' => $v['id'],
        'name' => $v['name'],
        'name_ja' => $v['name'],
      );
      $this->friends[$v['id']] = $data;
    }
  }


  // get English name
  $fbDataEn = $fbConnect->graph('me/friends', $this->fbToken, array('id', 'name'), 'en_US');
  if (isset($fbDataEn['data'])) {
    foreach ($fbDataEn['data'] as $v) {
      $this->friends[$v['id']]['name_en'] = $v['name'];
    }
  }


}
名前の取得ですが、日本語名、英語名、その他言語の名前は、その都度リクエストを飛ばさないと取得できないようです・・・ 一回のリクエストで取得できないので、2回飛ばしています。

ここで呼ばれている myFacebookConnect クラスは、こんな感じです。かなり他のfunctionを割愛していますw

class myFacebookConnect {
  protected $api_key    = '';
  protected $api_secret   = '';
  protected $redirect_uri = '';
  
  function __construct($api_key, $api_secret, $callback_url = '') {
    $this->api_key      = $api_key;
    $this->api_secret   = $api_secret;  
    $this->redirect_uri = $callback_url;  
  }


  /**
   * Get info using Facebook Graph
   * 
   * @param $method
   * @param $access_token
   */
  function graph ($method = 'me', $access_token = null, $fields = array( 'id', 'name', 'first_name', 'middle_name', 'last_name', 'gender', 'locale', 'languages', 'link', 'username', 'age_range', 'third_party_id', 'installed', 'timezone', 'updated_time', 'verified', 'bio', 'birthday', 'cover', 'currency', 'id', 'devices', 'education', 'email', 'hometown', 'location', 'favorite_athletes', 'favorite_teams', 'picture', 'quotes', 'website', 'work' ), $locale = 'ja_JP') {
    $graph_url = 'https://graph.facebook.com/'.urlencode($method).'?fields='.urlencode(implode(',',$fields)).'&locale='.$locale.'&width=250&height=250&access_token=' . urlencode($access_token);
    $ch = curl_init($graph_url);
    curl_setopt($ch,CURLOPT_HEADER, false);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_CAINFO,dirname(__FILE__) . '/fb_ca_chain_bundle.crt');


    $c    = json_decode(curl_exec($ch), true);
    $info   = curl_getinfo($ch);
    
    if ($info['http_code'] !== 200) {
      if (isset($c['error']['message'])) {
        //throw new myFacebookException($c['error']['message']);
        Email::create(null, 'test', 'error', array("text" => $c['error']['message']))->to("error@creww.me")->send();
      }
      else {
        //throw new myFacebookException('Couldn\'t connect to the facebook server. Http code: '.$info['http_code']);
        Email::create(null, 'test', 'error', array("text" => 'Couldn\'t connect to the facebook server. Http code: '.$info['http_code']))->to("error@creww.me")->send();


      }
    }


    return $c;
  }


}

で、結果として今回は、自分の友達リストを取得して、画像・名前表示をして、JavaScriptで名前検索。ボタンクリックで、個別にfacebookメッセージを送れるようにする機能を実装しました。

図1 : 表示画面


図2 : ボタンをクリックすると・・・


今回は、独自のmyFacebookConnectクラスを使っていますが、facebookが提供しているPHPのSDKもあるので、そっちの方がいいかもですw
https://developers.facebook.com/docs/php/gettingstarted/4.0.0

あと、友達リスト取得のfacebookドキュメントはこちらです
https://developers.facebook.com/docs/graph-api/reference/v2.1/user/friends

参考: 
https://developers.facebook.com/docs/php/gettingstarted/4.0.0
https://developers.facebook.com/docs/graph-api/reference/v2.1/user/friends