2015年1月31日土曜日

PHP ORMの「RedBeanPHP」

PHP ORMの「RedBeanPHP」 使ってみたわけではないのですが、たまたま見かけて、興味をそそられたので、メモです。サンプルコードを覗いてみると、シンプルで、「dispense」「store」「trash」など、表現(言い回し)がユニーク。

No composer, no auto-loaders, no configuration, just download and run!

「composer、auto-loaders、設定ファイルは必要ない」と書かれています。気に入りました(笑)。

require 'rb.php';
R::setup();

$post = R::dispense('post');
$post->text = 'Hello World';

$id = R::store($post);       //Create or Update
$post = R::load('post',$id); //Retrieve
R::trash($post);             //Delete

2015年1月30日金曜日

Fat-Free Frameworkで、Bcryptパスワードハッシュ

Fat-Free Frameworkで、Bcryptパスワードハッシュです。ログイン認証のパスワード部分で利用してみました。Bcryptを使えれば、とりあえず十分かなと。

// $saltは、半角英数22文字以上
$hashed_password = \Bcrypt::instance()->hash($password, $salt) ; 

実際に設定してみたのが、こちら

参考サイト
Bcrypt(Fat-Free Framework for PHP)

2015年1月29日木曜日

Linuxに深刻なセキュリティホール「GHOST」

Linuxに深刻なセキュリティホール「GHOST」 Linux GNU Cライブラリ(glibc)のセキュリティホール ということで、これは対処が必要でしょう。パッチ適用後は、再起動も必要ということで、その深刻さがうかがえます。



参考サイト
How To Protect your Linux Server Against the GHOST Vulnerability(DigitalOcean)

2015年1月28日水曜日

Fat-Free Frameworkで、セッション

Fat-Free Frameworkで、セッションです。これは簡単。今回は、フラッシュメッセージを表示するために使いたかったので、ikkezさんのfabulog(flashmessage.php)を参考にしました。

// 設定
$f3->set('SESSION.test',123);

// 取得
echo $f3->get('SESSION.test');

実際に設定してみたのが、こちら
徐々にカタチになってきました。良い感じだ(笑)。

参考サイト
Session Handler(Fat-Free Framework for PHP)
fabulog/flashmessage.php

2015年1月27日火曜日

Fat-Free Frameworkで、変数のキャッシュ

Fat-Free Frameworkで、変数のキャッシュです。テンプレートをキャッシュするのではなく、変数をキャッシュしておけるので、細かくキャッシュを制御できます。軽量フレームワークとしては、かなり高機能。このキャッシュだけで、Fat-Free Frameworkを選択する価値はあると思います。

if (!($f3->exists('archives'))) {
  $archives = new DB\SQL\Mapper($db,'archives');
  $archives = $archives->find();
  $f3->set('archives', $archives, 600);
} else {
  $archives = $f3->get('archives') ;
  $f3->set('archives', $archives);
}

実際に設定してみたのが、こちら

参考サイト
Cache(Fat-Free Framework for PHP)

2015年1月26日月曜日

Fat-Free Frameworkで、集約関数のcount

Fat-Free Frameworkで、集約関数のcountです。SQL Mapperで接続していますが、PDOライクに利用することも可能です。

$tag = $f3->get('PARAMS.tag');
$blog = new DB\SQL\Mapper($db,'blogs');
$cnt = $blog->count(
                array(' public = :public AND tags like :tag ', 
                      ':public' => 1, 
                      ':tag' => '%'.$tag.'%')
                    );

実際に設定してみたのが、こちら

参考サイト
count(Fat-Free Framework for PHP)
$filter(Fat-Free Framework for PHP)

2015年1月25日日曜日

Mandrake LinuxからフォークしてスタートしたLinuxディストリビューション「Mageia」

Mandrake LinuxからフォークしてスタートしたLinuxディストリビューション「Mageia」 コニュニティーベースで開発されて、しがらみのないのが特徴(?)なのでしょうか。とにかく、初耳だったのでメモです。





参考サイト
MandrivaフォークのMageiaが3回目のリリースとなる「Mageia 4」がリリース(SourceForge)
デストリビューション、Mageiaの人気の秘密が分かりました ! !(Linuxの与太話さん)

2015年1月24日土曜日

Ubuntuベースで、UIがスタイリッシュなLinuxディストリビューション「Deepin」

Ubuntuベースで、UIがスタイリッシュなLinuxディストリビューション「Deepin」 インストールして試してみたわけではありませんが、そのスタイリッシュなUIに魅了されました。LinuxのデスクトップをMacライクに利用したいという方には良いかもしれません。というわけで、とりあえずメモ。



2015年1月23日金曜日

Fat-Free Frameworkのテンプレートで、loopとswitch

Fat-Free Frameworkのテンプレートで、loopswitchです。繰り返しは、repeat しかないのかと思い、数字を配列にして、ループさせていました(笑)。そりゃ、ありますよね。

<loop from="{{ @i=0 }}" to="{{ @i < 10 }}" step="{{ @i++ }}">
  <p>{{ @i }}</p>
</loop>

<switch expr="{{ @time }}">
  <case value="{{ @time > 3 && @time < 12 }}">
    <p>{{ @time }}時は、午前です。</p>
  </case>
  <case value="{{ @time >= 12 }}">
    <p>{{ @time }}時は、午後です。</p>
  </case>
  <default>
    <p>{{ @time }}時は、深夜です。</p>
  </default>
</switch>

実際に設定してみたのが、こちら

参考サイト
loop(Fat-Free Framework for PHP)
switch(Fat-Free Framework for PHP)

2015年1月22日木曜日

Fat-Free FrameworkのORMでload()を利用する場合

Fat-Free FrameworkのORMでload()を利用する場合です。ようやく謎が解けました。dry() を利用して、明示的にカーソルを $user->next(); という具合に、移動させる必要がありました。見事にハマりました。

ORMを使わない場合
$users = $db->exec('SELECT * FROM users');
foreach($users as $user)
  echo $user['name'];
With mapper->load:
ORMで、load()を利用してデータ取得する場合
$user=new \DB\SQL\Mapper($db,'users');
$user->load('');
while(!$user->dry()) {
  echo $user->name;
  $user->next();
}
ORMで、find()を利用してデータ取得する場合
$mapper=new \DB\SQL\Mapper($db,'users');
$users=$mapper->find('');
foreach($users as $user)
  echo $user->name;

参考サイト
dry(Fat-Free Framework for PHP)
How do I loop through the mysql resultset in fatfree framework?(Stack Overflow)

2015年1月21日水曜日

Fat-Free Frameworkのテンプレートで、場合分けと繰り返し

Fat-Free Frameworkのテンプレートで、場合分け繰り返しです。

<check> が、いわゆる、if文。
<repeat> が、for loop です。

慣れるまで、時間がかかりそう。Fat-Free Frameworkは、軽量でありながら、高機能で、ここまでは評価しているのですが、このテンプレートはクセがありすぎです(笑)。

/ui/blog.htm(ページネーション部分の例)
<check if="{{ @pos != 0 }}">
  <true>
    <a href="/blog/page/{{ @pos }}">前へ</a>
  </true>
  <false>
    <a href="#">前へ</a>
  </false>
</check>

<repeat group="{{ @pages }}" value="{{ @page }}" counter="{{ @ctr }}">
  <a href="/blog/page/{{ @ctr }}">{{ @ctr }}</a>
</repeat>

実際に設定してみたのが、こちら

参考サイト
Conditional Segments(Fat-Free Framework for PHP)
Repeating Segments(Fat-Free Framework for PHP)

2015年1月20日火曜日

Fat-Free Frameworkで、ページネーション(ページ送り)

Fat-Free Frameworkで、ページネーション(ページ送り)です。

$result = $mapper->paginate(0, 3);

としてデータ取得すると、メインとなるオブジェクトデータは、「subset」という配列で返ってきます。その他、「total(全件)」「limit(1ページの表示件数)」「count(ページ数)」「pos(現在のページ番号)」といったデータがまとめて返ってきます。

// page 1
$result = $mapper->paginate(0, 3);
/*
array(4) {
  ["subset"] => array(3) {
    [0] => mapper object, #ID: 1, title: F3 for the win
    [1] => mapper object, #ID: 2, title: Once upon a time
    [2] => mapper object, #ID: 3, title: Barbar the Foo
  }
  ["total"] => int(4)
  ["limit"] => int(3)
  ["count"] => float(2)
  ["pos"] => int(0)
}
*/

// page 2
$result = $mapper->paginate(1, 3);
/*
array(4) {
  ["subset"] => array(1) {
    [0] => mapper object, #ID: 4, title: untitled
  }
  ["total"] => int(4)
  ["limit"] => int(3)
  ["count"] => float(2)
  ["pos"] => int(1)
}
*/
当初、意味がわからずに、理解するまでに、かなり時間がかかってしまいました。理解できてみれば、非常に便利に使えることがわかります。

index.php
$f3->route('GET /blog/page/@page',
  function($f3) use ($db) {
    // ページ番号
    $page = $f3->get('PARAMS.page');
    $page = filter_var($page, FILTER_VALIDATE_INT);
    $page = $page - 1;

    // 1ページの表示件数
    $onepage = 10 ;

    // ブログテーブルからデータ取得
    $blog = new DB\SQL\Mapper($db,'blogs');
    $pages = $blog->paginate($page, $onepage, 
                array('public = ? ', 1), 
                array('order'=>'created_at')
             );

    // Viewへ出力
    $f3->set('blogs', $pages["subset"]);
    $f3->set('total', $pages["total"]);
    $f3->set('limit', $pages["limit"]);
    $f3->set('count', $pages["count"]);
    $f3->set('pos', $pages["pos"]);
    $f3->set('content','blog.htm');
    echo Template::instance()->render('layout.htm');
  }
);

実際に設定してみたのが、こちら

参考サイト
paginate(Fat-Free Framework for PHP)

2015年1月19日月曜日

SEO対策として、.htaccessで、URLの「index.php」表示を削除

SEO対策として、.htaccessで、URLの「index.php」表示を削除です。最初、上の例で試してみたのですが、どうもうまくいかないので、下の例で対処しました。とりあえず、問題なさそうなので、しばらくこれで様子を見てみることにします。

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

参考サイト
htaccess remove index.php from url(Stack Overflow)

2015年1月18日日曜日

ペン型の3Dプリンター「Polyes Q1」

ペン型の3Dプリンター「Polyes Q1」 見事な発想の転換だと思います。ペン先から、ジェル状の樹脂が出ると、すぐに固まり、3次元で絵を描くように、3D作品を簡単に作成できます。精緻な作品には不向きかもしれませんが、3Dプリンターを親しみやすいものに変えたという意味で、素晴らしい商品だと思います。





参考サイト
青色LEDで樹脂を硬化させる3Dプリントペン「Polyes Q1」(マイナビニュース)

2015年1月17日土曜日

YouTubeのJavaScript Player APIで、再生途中でイベントを発生させる

YouTubeのJavaScript Player APIを組み込んでみました。動画再生後、60秒経過したら、ログインページにジャンプする例です。会員登録して欲しいけど、動画もちょっと見て欲しい(?)という場合などに使えると思います。

<script src="https://www.youtube.com/player_api"></script>
<script type="text/javascript">
var player;
var current_time;

// 再生エリアの準備
function onYouTubePlayerAPIReady() {
  player = new YT.Player('player', {
    height: '360',
    width: '460',
    videoId: 'abcdeeg1234',
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}

// 再生
function onPlayerReady(event) {
  // event.target.playVideo();
}

// 再生された場合、1秒毎に状態をチェック
function onPlayerStateChange(event) {
  if(event.data === 1) {
    setInterval('pastTime()',1000);
  }
}

// 60秒経過したら、ログインページにジャンプ
function pastTime()
{
  current_time = Math.round(player.getCurrentTime()*10)/10;
  if ( current_time >= 60 ) {
    location.href = "http://yourdomain.com/loginplease";
  }
}
</script>

<div id="player"></div>


参考サイト
player.getCurrentTime() stopped working(Stack Overflow)

2015年1月16日金曜日

Fat-Free Framework 3でできたブログサンプル「fabulog」

Fat-Free Framework 3でできたブログサンプル「fabulog」を発見しました。ドキュメントだけを頼りに進めていくのは限界を感じていたので、ありがたいサプルです。

ちなみに、公式のデモアプリケーションとして、Fat-Free Framework 3でできた、「CMS Demo」も用意されています。こちらも参考になると思います。私には、ちょっと難しく感じましたが(笑)。


2015年1月15日木曜日

Fat-Free FrameworkのORMで取得したデータの一覧表示

Fat-Free FrameworkのORMで取得したデータの一覧表示です。load()やfind()メソッドで取得したデータをそのまま利用するのではなく、一度、オブジェクトから配列にキャスト($obj->cast();)してあげる必要があるようです。あまりエレガントな方法ではありませんが、何とか表示は出来ました。

index.php
$f3->route('GET /blog',
  function($f3) use ($db) {
    $blog = new DB\SQL\Mapper($db,'blogs');
    $list = $blog->load();
    // echo $db->log();

    $arr = array() ;
    foreach ($list as $obj) {
      // echo $obj->title.', '.$obj->contents;
      $arr[] = $obj->cast();
    }

    $f3->set('blogs', $arr);
    $f3->set('content','blog.htm');
    echo Template::instance()->render('layout.htm');
  }
);
/ui/blog.htm
<repeat group="{{ @blogs }}" value="{{ @blog }}">
  <h3><a href="/blog/{{ trim(@blog.slug) }}">{{ trim(@blog.title) }}</a></h3>
</repeat>

実際に設定してみたのが、こちら

参考サイト
Seek and You Shall Find(Fat-Free Framework for PHP)
How do I list results in my template with fatfree framework and cortex model?(Stack Overflow)

2015年1月14日水曜日

Fat-Free Frameworkで、リダイレクト

Fat-Free Frameworkで、リダイレクトです。reroute で実現可能です。メソッド名を redirect にしてくれていれば、すぐにわかったのですが、探しまわってしまいました(笑)。

index.php
$f3->route('POST /blog/create',
  function($f3) use ($db) {
    $title = $f3->get('POST.title');
    $slug = $f3->get('POST.slug');
    $contents = $f3->get('POST.contents');

    $blog = new DB\SQL\Mapper($db,'blogs');
    $blog->title = $title ;
    $blog->slug = $slug ;
    $blog->contents = $contents ;
    $blog->save();
    $f3->reroute('/');
  }
);

実際に設定してみたのが、こちら

参考サイト
Named Routes(Fat-Free Framework for PHP)

2015年1月13日火曜日

Fat-Free Frameworkで、ORM

Fat-Free Frameworkで、ORMです。MongoDBJig Mapper(配列データをASCII形式のフラットファイルへ格納するためのクラス、JSON形式のデータなど)でも、同じようにデータを扱うことができるようです。

ちなみに、URLのパラメーター部分は、「$f3->get('PARAMS.〇〇');」で取得可能。

index.php
$f3->route('GET /blog/@slug',
  function($f3) use ($db) {
    // 普通のSQL DB
    $slug = $f3->get('PARAMS.slug');
    $blog = new DB\SQL\Mapper($db,'blogs');
    $blog->load(array('slug=?',$slug));

    // MongoDBの例
    $db = new DB\Mongo('mongodb://localhost:27017','testdb');
    $user = new DB\Mongo\Mapper($db,'users');
    $user->load(array('userID'=>'tarzan'));

    // Jig Mapperの例
    $db = new DB\Jig('db/data/',DB\Jig::FORMAT_JSON);
    $user = new DB\Jig\Mapper($db,'users');
    $user->load(array('@userID=?','tarzan'));

    $f3->set('blog',$blog);
    $f3->set('content','blog_read.htm');
    echo Template::instance()->render('layout.htm');
  }
);

実際に設定してみたのが、こちら

参考サイト
CRUD (But With a Lot of Style)(Fat-Free Framework for PHP)
The Smart SQL ORM(Fat-Free Framework for PHP)

2015年1月12日月曜日

Googleによる老化解明に挑むバイオテクノロジー研究会社「キャリコ(Calico)」

Googleによる老化解明に挑むバイオテクノロジー研究会社「キャリコ(Calico)」 「寿命を制御して、生物学の我々の理解を高め、より長く、より健康な生活に、人々を導くために可能な介入を考案します。」と説明されています。不老不死の薬でも考えているのでしょうか?! 自動運転の自動車なんかで驚いていてはダメですね(笑)。計画が壮大過ぎて、末恐ろしい気もします。



参考サイト
Calico(Wikipedia)

2015年1月11日日曜日

2015年のウェブデザイントレンド

2015年のウェブデザイントレンド(Web Design Trends To Look Out For In 2015)が、気になったのでメモです。情報をごちゃごちゃ詰め込むのではなく、シンプルで、デザイン性が高いものになっているように思います。
  1. レスポンシブデザイン
  2. ゴーストボタン
  3. 活字を大きく強調
  4. 大きく、美しい背景画像、または動画
  5. クリックして、スクロールオーバー
  6. カード型のデザインの継続
  7. 一歩進んだフラットデザイン
  8. マイクロインタラクション
  9. インタラクティブな物語性
  10. パーソナライズ化

2015年1月10日土曜日

ワイヤレスシグナルを通さない「デジタルスリ?」を防ぐジーンズ

ワイヤレスシグナルを通さない「デジタルスリ?」を防ぐジーンズ(Jeans made that will prevent 'digital pickpocketing')が登場! 時代ですねぇ。ウイルス対策のノートンと共同で開発されたと説明があります。電磁界や電波などを用いた近距無線通信のRFID(radio frequency identification)によるデータ盗難が防げるとのこと。

2015年1月9日金曜日

Fat-Free Frameworkで、入力データのチェック「Audit」クラス

Fat-Free Frameworkで、入力データのチェック「Audit」クラスです。よくあるバリデーションとはちょっとニュアンスが違うかもしれませんが、なかなか面白いものが用意されているかなと思います。偏りがある(笑)?

$audit = \Audit::instance();

でインスタンスを立ち上げて準備完了。
以下のようなメソッドが用意されています。

  • url
  • email
  • ipv4
  • ipv6
  • isprivate
  • isreserved
  • ispublic
  • isdesktop
  • ismobile
  • isbot
  • mod10
  • card
  • entropy

index.php
$f3->route('GET /audit ',
  function($f3) {
    $url = $f3->get('GET.url');
    // インスタンス立ち上げ
    $audit = \Audit::instance();
    // URLか否か
    $isurl = $audit->url($url); 
    // デスクトップ端末か否か
    $isdesktop = $audit->isdesktop(); 
    // モバイル端末か否か
    $ismobile = $audit->ismobile();

    $f3->set('url',$url);
    $f3->set('isurl',$isurl);
    $f3->set('isdesktop',$isdesktop);
    $f3->set('ismobile',$ismobile);
    $f3->set('content','audit.htm');
    echo Template::instance()->render('layout.htm');
  }
);

実際に設定してみたのが、こちら

参考サイト
Audit(Fat-Free Framework for PHP)

2015年1月8日木曜日

Fat-Free Frameworkで、プラグインの「Markdown」

Fat-Free Frameworkで、プラグインの「Markdown」です。フレームワークのプラグインとして既に用意されているので、わざわざ他のモジュールを組み込む必要はありません。

\Markdown::instance()->convert($fileContent);

で、マークダウン表記に変換できます。

index.php
$f3->route('GET /web',
  function($f3) use ($db) {
    $results = $db->exec('SELECT * FROM pages') ;
    $f3->set('results', $results);
    $f3->set('content','db.htm');
    echo Template::instance()->render('layout.htm');
  }
);
/ui/db.htm
<h3>{{ trim(@result['title']) }}</h3>
<p>{{ \Markdown::instance()->convert(@result['contents']) }}</p>

実際に設定してみたのが、こちら

参考サイト
Markdown(Fat-Free Framework for PHP)

2015年1月7日水曜日

PHPで書かれたWebベースのSQLite管理ツール「phpliteadmin」

PHPで書かれたWebベースのSQLite管理ツール「phpliteadmin」を使ってみました。今回試したのは、phpliteadmin 1.9.5。PHP 5.1以上の環境で、SQLite3、SQLite2向けに利用できます。phpMyAdminライクで、すぐに慣れると思います。

Step 1

ダウンロードして解答したファイルの
phpliteadmin.config.sample.php のファイル名を、
phpliteadmin.config.php に変更。

Step 2

phpliteadmin.config.php ファイル中の「$password」と「$directory」を環境に合わせて書き換える
//password to gain access
$password = 'admin';

//directory relative to this file to search for databases (if false, manually list databases in the $databases variable)
$directory = './db/';
これで、すぐに利用できるようになります。非常に簡単です。残念ながら、日本語版は用意されていない模様。

2015年1月6日火曜日

Fat-Free Frameworkで、404ページのカスタマイズ

Fat-Free Frameworkで、404ページのカスタマイズです。前回、使い方がわからずに挫折しましたが、ようやく理解できました。ONERRORは、システム変数で、カスタムエラーを扱うためのコールバック関数になっているようです。

index.php
$f3->set('ONERROR',function($f3){
  $error = $f3->get('ERROR') ;
  /*
  `ERROR.code` - the HTTP status error code (`404`, `500`, etc.)
  `ERROR.status` - a brief description of the HTTP status code. e.g. `'Not Found'`
  `ERROR.text` - error context
  `ERROR.trace` - stack trace stored in an `array()`
  */
  $f3->set('error',$error);
  $f3->set('content','error.htm');
  echo Template::instance()->render('layout.htm');
});
/ui/error.htm
<h1>{{@ERROR.text}}</h1>
<p>Error code: {{@ERROR.code}}</p>

実際に設定してみたのが、こちら

参考サイト
About the F3 Error Handler(Fat-Free Framework for PHP)
Fat Free Framework (F3): custom 404 page (and others errors)(Stack Overflow)

2015年1月5日月曜日

Fat-Free Frameworkで、キャッシュ

Fat-Free Frameworkで、キャッシュです。軽量フレームワークとしては、なかなか充実しているのではないでしょうか。気に入りました。実戦投入する価値有りと判断しました。

まずは、キャッシュ用フォルダを777の書き込み可能に設定
/tmp/cache

index.php
// キャッシュを有効に(ディフォルトでは無効)
$f3->set('CACHE',TRUE);

// 24時間に1回のみDBにアクセスし、それ以外はキャッシュからデータを取得
$results = $db->exec('SELECT * FROM categories',NULL,86400) ;

// ルーティングでもキャッシュが可能
$f3->route('GET /my_page','App->method',60);

実際に設定してみたのが、こちら

参考サイト
Optimization(Fat-Free Framework for PHP)

2015年1月4日日曜日

Gmailと連携できるスケジュール管理カレンダー「Coolendar」

Gmailと連携できるスケジュール管理カレンダー「Coolendar」 Gmailのみでなく、メッセンジャーやモバイルデバイス、Twitterアカウントなどにも連携できるようです。Gmailのログイン認証ですぐに利用できるようになります。画面上の「?」マークをクリックすると予定を登録できます。

robot@coolendar.com宛に、件名「help」で送信すると、以下のような説明が届きます。
- help: this one, display all available commands.
- help syntax: some examples on how to create plans.
- list: lists all your future plans.
- list all: same as above.
- list today: lists all future plans scheduled for today.
- list tomorrow: lists all plans for tomorrow.
- list month: lists all future plans for the current month.
- list important: lists all future plans flagged as important.
- list past: lists all past plans.
- remove n: after listing your plans use "remove" followed by the plan number to remove it.

2015年1月3日土曜日

2015年の世界各国カレンダー

2015年の世界各国カレンダー(www.timeanddate.com)です。日本以外にも、世界各国の祝日が表示できて非常に便利。デザインや表示フォーマットもカスタマイズできて、よく出来ています。

2015年1月2日金曜日

2015年に学ぶべきプログラム言語とフレームワーク

2015年に学ぶべきプログラム言語とフレームワーク(The Languages And Frameworks That You Should Learn In 2015)という記事を見つけました。確かに、時代はJavaScriptだなと思います。

1. JavaScript

2. AngularJS

3. React

4. Node.js

5. NoSQL databases



2015年1月1日木曜日

2015年注目のウェブテクノロジー

2015年注目のウェブテクノロジー(Best web technologies and tools for 2015)です。お恥ずかしながら、初耳のもの多数(笑)。これは、今年も前途多難ですね。

ECMAScript 6

AngularJS 2.0

React

Meteor

Ionic Framework

Dart & AngularDart

Firebase

Parse

Socket.io

Polymer

Gulp