2015年2月28日土曜日

MySQLで「Warning: #1264 Out of range value for column」のエラー

MySQLで「Warning: #1264 Out of range value for column」のエラーが出て、しばらくハマったのでメモです。DATETIM型のカラム(updated_at)に、日付データを設定しているのにエラーで更新できないという症状が続きました。原因不明で、今だに意味がわかりません。とりあえず、下記のようなSQLで更新できるようになりました。謎です。

update TABLE_NAME set updated_at=CAST("2015-02-28 12:34:56" AS DATETIME) where id=1234;

参考サイト
Strange MySQL warning 1264 for valid DateTime value(Stack Overflow)

2015年2月27日金曜日

MeteorのLive updatesアーキテクチャ

MeteorのLive updatesアーキテクチャについてです。 技術評論社の「第7回 クライアントとサーバのコード共有を促進するデータベースアーキテクチャ」を読んで、今頃、そういうことなかと、わかったような気がします。メモリ上にキャッシュしているよいうことは、巨大なメモリが必要ということなのでしょうか?

すべてのMeteorクライアントはサーバ上のデータをメモリ上にキャッシュするためです。上記のコードがクライアント上で実行された場合、それはキャッシュに対するデータ取得処理となります。
クライアント上でデータを変更した場合は、まずクライアント上のキャッシュが変更され、即座にサーバに対して変更処理がリクエストされます。サーバ上のデータが正常に変更されると、その変更はすべてのMeteorクライアントに伝えられ、全クライアントのキャッシュが変更されることになります。

2015年2月26日木曜日

Herokuで、Meteor

Herokuで、Meteorを利用するサンプルサイト(How to deploy Meteor on Heroku with external MongoDB)を見つけたのでメモです。「Meteorite」というビルドパックを利用すると簡単に実現できそう(?)です。

heroku create --stack cedar --buildpack https://github.com/oortcloud/heroku-buildpack-meteorite.git

2015年2月25日水曜日

Meteorで、Iron.Routerを利用してルーティング

Meteorで、Iron.Routerを利用してルーティングです。うまくすれば、レイアウトも制御できるらしいです。

basic.js
Router.route('/', function () {
  this.render('Home', {data: {title: '世界'}});
});

Router.route('/one');

Router.route('/two');
basic.html
<head>
</head>

<body>
</body>

<template name="Home">
 <h1>ホーム</h1>
</template>

<template name="One">
 <h1>このサイトについて</h1>
</template>

<template name="Two">
 <h1>お問合せ</h1>
</template>

実際に設定してみたサイトがこちら

2015年2月24日火曜日

Meteorで、メール送信

Meteorで、メール送信です。SendGridを利用したメール送信例です。アカウントを取得して試したわけではないのですが、多分、これで送信できるような気がします(?)。Meteorのドキュメントでは、Mailgunが例として挙げられています。GmailをSMTPとして設定するのが一番確実かもしれません。

email パッケージを追加
$ meteor add email

email: Send email messages

$ mkdir server
$ touch server/smtp.js
server/smtp.js SendGridの場合
Meteor.startup(function () {
  process.env.MAIL_URL = 'smtp://your_username:your_password@smtp.sendgrid.net:587';
});
server/smtp.js Gmailの場合
Meteor.startup(function () {
  process.env.MAIL_URL = 'smtp://user%40gmail.com:password@smtp.gmail.com:465/'; 
});
simple-todos.js
// サーバー
if (Meteor.isServer) {
  Email.send({
    from: "from@example.com",
    to: "to@example.com",
    subject: "件名",
    text: "マイクのテストです。"
  });
}

参考サイト
Email(Meteor Documentation)
Send Email with Meteor and SendGrid(SendGrid)
I am trying to send a email in meteor with process.env and smtp gmail(Stack Overflow)

2015年2月23日月曜日

Meteorで、SEO

Meteorで、SEOです。常にクライアント側とサーバー側が、Ajax通信のようなカタチで、データを同期しているので、SEOには向いていないと思うのですが、それを解消する猛者のページ「Meteor and SEO」を見つけました。私には、何をやっているのかよくわかりません(笑)。ものは試しで、インストールだけしてみました。

$ meteor add iron:router
Changes to your project's package version selections:

iron:controller        added, version 1.0.7
iron:core              added, version 1.0.7
iron:dynamic-template  added, version 1.0.7
iron:layout            added, version 1.0.7
iron:location          added, version 1.0.7
iron:middleware-stack  added, version 1.0.7
iron:router            added, version 1.0.7
iron:url               added, version 1.0.7


iron:router: Routing specifically designed for Meteor

$ meteor add manuelschoebel:ms-seo
Changes to your project's package version selections:

coffeescript           added, version 1.0.5
manuelschoebel:ms-seo  added, version 0.4.1


manuelschoebel:ms-seo: Easily config SEO for your routes


参考サイト
Meteor and SEO(Manuel Schoebelさん)

2015年2月22日日曜日

CPUパワーを売れるクラウド「Slicify」

CPUパワーを売れるクラウド「Slicify」 実際に登録して試したわけではありません。面白そうなサービスだなと思ったのでメモです。自分のPCのCPUパワーを、利用していない空き時間に売れるというサービス(?)だと思います。どれだけ利益が上がるかは疑問に思いますが、余ったリソースを有効活用できるという点で、アイディアは面白いと思います。

2015年2月21日土曜日

Firefoxのタブをまとめられるアドオン「Tab Grenade」

Firefoxのタブをまとめられるアドオン「Tab Grenade」 Chromeの「OneTab」のようなもの。タブを整理しつつ、ブラウザを軽く動作させたいという方にお勧めです。ブックマークとしても利用できますが、特に、後で読み返したい記事など、一時的にURLを記憶させておきたい場合に便利だと思います。

2015年2月20日金曜日

Meteorで、権限によるデータのフィルタリング

Meteorで、権限によるデータのフィルタリングです。自分が作成したデータのみ、変更、削除を可能にし、かつ、ログインして初めて確認できるプライベートなデータを扱えるようにする機能(?)のチュートリアルです。とりあえず、ソースコピーしただけなので、動きは実現できたと思います(笑)。

$ meteor remove autopublish
simple-todos.js
// プライベートなデータとして設定(自分のみ閲覧可能)
setPrivate: function (taskId, setToPrivate) {
  var task = Tasks.findOne(taskId);

  // 自分のデータでない場合は、エラー
  if (task.owner !== Meteor.userId()) {
    throw new Meteor.Error("not-authorized");
  }

  // 自分おデータなら編集可能
  Tasks.update(taskId, { $set: { private: setToPrivate } });
}
throw new Meteor.Error("not-authorized");」は、何処へ?

実際に設定してみたサイトがこちら

2015年2月19日木曜日

Meteorで、「methods」を利用することでセキュアに

Meteorでは、「methods」を利用することで、セキュアにする必要があるようです? クライアントサイドのJavaScriptを書き換えられても問題ないように、メソッド化して、処理を隠蔽化、あるいは、オーバーラップ化して、クライアントサイドの処理をサーバー側で行っている(?)と理解しました。

$ meteor remove insecure
simple-todos.js
Meteor.methods({
  addTask: function (text) {
    // ユーザー認証済みか否かをチェック
    if (! Meteor.userId()) {
      throw new Meteor.Error("not-authorized");
    }

    Tasks.insert({
      text: text,
      createdAt: new Date(),
      owner: Meteor.userId(),
      username: Meteor.user().username
    });
  },
  deleteTask: function (taskId) {
    Tasks.remove(taskId);
  },
  setChecked: function (taskId, setChecked) {
    Tasks.update(taskId, { $set: { checked: setChecked} });
  }
});

Meteor.callを使用してクライアント上のメソッドを呼び出すと、二つのことが並行して行われます。

  1. クライアントは、AJAXリクエストが動作するのと同じように、セキュアな環境でメソッドを実行するため、サーバーに要求を送信します。
  2. サーバーの呼び出しの結果を予測し、クライアント上で直接実行されます。

サーバから結果が戻って来る前に、新しく作成したタスクは、画面に表示されているというメリットがあります。

実際に設定してみたサイトがこちら

2015年2月18日水曜日

Meteorで、ユーザー登録、ログイン

Meteorで、ユーザー登録、ログインです。ユーザー登録とログイン機能があらかじめ準備されているので、それを有効化するだけ。プログラムソース上も、数行追加するだけ。あっけないほど簡単です。ログインユーザー名は、{{currentUser.username}}で取得できます。

細かくユーザー管理機能を制御したいという方には、向いていないかもしれませんが、スピード重視で、とにかく急いでカタチにしたいという方には、実際のサービス機能部分の開発に集中できますので、非常に良いと思います。

ユーザー管理機能の追加
$ meteor add accounts-ui accounts-password
simple-todos.html
{{#if currentUser}}
  {{currentUser.username}}
{{/if}}

{{> loginButtons}}
simple-todos.js
Accounts.ui.config({
  passwordSignupFields: "USERNAME_ONLY"
});

実際に設定してみたサイトがこちら

2015年2月17日火曜日

Meteorでセッション

Meteorセッション(Session)を使ってみました。データの設定と読み出し、それ自体は簡単ですが、実際にこれを組み込んで利用する段になると、たちどころにわからなくなります。慣れれば、なんとかなるのでしょうか?!

// 設定
function (event) {
  Session.set("key", event.target.checked);
}

// 取得
function () {
    return Session.get("key");
}

実際に設定してみたサイトがこちら

参考サイト
Session(Meteor Documentation)

2015年2月16日月曜日

MeteorでAndroid SDKをインストール

MeteorAndroid SDKをインストールしてみました。しかしながら、利用方法がわからず。ディスクスペースは肥大化するし、うまく動かないし、Android SDKは激重だし、踏んだり蹴ったりです。ここは潔く挫折を認めて飛ばすことにして、次に進みます。AndroidやiOS用のアプリとしても利用できるということだけわかっていればOKでしょう。

$ meteor install-sdk android

$ meteor add-platform android

$ meteor run android

参考サイト
Mobile Dev Install: Android on Linux(meteor Wiki)

2015年2月15日日曜日

Googleの「ナレッジグラフ」

Googleの「ナレッジグラフ」 TechCrunchの記事「Google、健康医療関連情報もナレッジグラフで提供開始」を目にしても、そもそものナレッジグラフがわかっていなかったので、メモです。
関連する情報を探す
検索結果の右のパネルをクリックすることで、関連する情報のコレクションを閲覧することができます。また、「ゴッホ 作品」、「夏目漱石 作品」などで検索すると検索結果上部に関連作品のコレクションが表示されます。ナレッジグラフのコレクションを参照することで、トピックをこれまで以上に迅速に掘り下げて調べることができます。
何気なく利用していましたが、関連情報の精度を上げることは、確かに厄介で、非常に高度な取り組みだと思います。


2015年2月14日土曜日

Linuxで、ディスク容量を圧迫している巨大ファイルの削除

Linuxで、ディスク容量を圧迫している巨大ファイルの削除です。何だかんだと、毎回コマンドを調べ直すことになるので、メモです。

ハードディスクの使用量を表示
# df -h

ディレクトリ内のファイル容量を表示
# du -h --max-depth=1 ./

ディレクトリ内を検索(100M以上のファイルのみ表示)
# find ./ -size +100M -exec ls -lh {} \;

参考サイト
Linuxサーバがディスク容量不足になった!何か消さねば!ってなった時にどう対処するか(元RX-7乗りの適当な日々さん)
dfコマンド(IT Pro)
duコマンド(IT Pro)
findコマンド(IT Pro)
execコマンド(IT Pro)
find の -exec optionの末尾につく \; と + の違い。(Qiita)

2015年2月13日金曜日

Meteorで作ったアプリをデプロイ

Meteorで作ったアプリをデプロイしてみました。ものすごく簡単です。ユーザー登録することなく、meteor.comのサーバーに、自分のアプリをデプロイして公開することが可能です。

meteor deploy my_app_name.meteor.com
たったこれだけ。

$ meteor deploy talkativepg.meteor.com
To instantly deploy your app on a free testing server, just enter your email address!

Email: 
Deploying to talkativepg.meteor.com.
Now serving at http://talkativepg.meteor.com

You can set a password on your account or change your email address at:https://www.meteor.com/setPassword?abcdefg

実際にアップしてみたサイトがこちら。感激です(笑)!

talkativepg.meteor.com


2015年2月12日木曜日

Meteorで、コレクションデータの更新、削除

Meteorで、コレクションデータの更新、削除です。

イベントハンドラ内のデータを取得するには、this._idで、タスク·オブジェクトにアクセスできるとのこと。
タスク·オブジェクトのIDが取得できれば、更新や削除が可能です。

更新

コレクション上のアップデートは2つの引数を取ります。 最初がセレクタ、2つ目が、オブジェクトをどう処理するかの更新パラメータ。

削除

削除は、引数1つで、セレクタのみ。

なんとなくわかるようで、実は、よく分からない。慣れるしかありません。

simple-todos.js
Template.task.events({
  // 更新
  "click .toggle-checked": function () {
    Tasks.update(this._id, {$set: {checked: ! this.checked}});
  },
  // 削除
  "click .delete": function () {
    Tasks.remove(this._id);
  }
});

2015年2月11日水曜日

Postfix 3.0 がリリース!

Postfix 3.0 がリリースされたとのこと。メールサーバーといえど、現代的な仕様に対応しなければ、運用しづらくなってきているんでしょうね。それにしても、13年ぶりのメジャーアップデートだそうです。質実剛健ぶりには、頭が下がります。



参考サイト
「Postfix 3.0.0」リリース、13年ぶりのメジャーアップデート版(SourceForge.JP Magazine)

2015年2月10日火曜日

Meteorで、formからデータ登録

Meteorで、formからデータ登録です。Templateにイベントリスナーを追加して、formのsubmitイベントを取得して、処理動作を定義します。取得したインプットボックスの値「event.target.text.value」をMongoDBに登録しました。深く考えると頭が痛くなってくるので、これはこういうものだと思って、素直に次に進むことにします。

simple-todos.js
Template.body.events({
  // 「new-task」クラスのformがsubmitされた場合に処理される
  "submit .new-task": function (event) {

    // 「name="text"」のインプットボックスの値
    var text = event.target.text.value;

    // MongoDB のtasksコレクションに追加
    Tasks.insert({
      text: text,
      createdAt: new Date() 
    });

    // form「name="text"」の入力をクリア
    event.target.text.value = "";

    // デフォルトのformがアクションを起こさないようfalseを設定
    return false;
  }
});

2015年2月9日月曜日

Meteorで、MongoDBのコレクション

Meteorで、MongoDBのコレクション「Storing tasks in a collection」です。meteor mongo で、MongoDBが立ち上がりますが、meteorを起動した状態で利用する必要がありました。何がすばらしいって、コレクションにデータを追加したとたんに、変更がウェブ画面に反映されます。もちろん、リフレッシュ操作はしていません。

meteorを起動していないとエラーになる
$ meteor mongo
mongo: Meteor isn't running a local MongoDB server.

This command only works while Meteor is running your application locally. Start your application first. (This error
will also occur if you asked Meteor to use a different MongoDB server with $MONGO_URL when you ran your application.)

If you're trying to connect to the database of an app you deployed with 'meteor deploy', specify your site's name with
this command.
meteorを起動した状態で操作
$ meteor mongo
MongoDB shell version: 2.4.12
connecting to: 127.0.0.1:3001/meteor
Server has startup warnings:
[initandlisten]
[initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
[initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).
[initandlisten] **       Note that journaling defaults to off for 32 bit and is currently off.
[initandlisten] **       See http://dochub.mongodb.org/core/32bit
[initandlisten]
meteor:PRIMARY> db.tasks.insert({ text: "Hello world!", createdAt: new Date() });
meteor:PRIMARY> db.tasks.insert({ text: "こんにちは、世界", createdAt: new Date() });
meteor:PRIMARY>

2015年2月8日日曜日

PHPのフレームワーク「Laravel 5」がリリース!

PHPのフレームワーク「Laravel 5」がリリースされています(Laravel 5 is Released!)! Laravel 4を勉強しないといけないなと、ずっと思っていたわけですが、完全に置いて行かれました(笑)。光陰矢のごとし。少年老い易く学成り難し。

2015年2月7日土曜日

Meteorのテンプレート(template)で、ビューの定義

Meteorテンプレート(template)で、ビューの定義です。

Meteorでは、HTMLファイル内の3つのトップレベルのタグ

<head>
<body>
<template>

がそれぞれ、解釈され、通常のHTMLファイルに置き換えられるらしい。

<template>タグ内の記述は、Meteorによりコンパイルされ、{{> templateName}}、または、Template.templateNameで定義されたJavaScriptから参照が可能。

ロジックとデータをテンプレート(template)に追加するようになるということです。早速、わからなくなってきました(笑)。なんとなくわかるような気もしますが、実際にコードを書けるかというと、難しそう。


2015年2月6日金曜日

Meteorで、アプリケーションを作成。リフレッシュすること無く、変更が反映!

Meteorで、アプリケーションを作成してみました。プロジェクト名は「simple-todos」。サーバー上のsimple-todos.htmlを編集すると、クライアント側では、ブラウザをリフレッシュすること無く、変更が反映されます。感動です!

$ meteor
run: You're not in a Meteor project directory.

To create a new Meteor project:
  meteor create 
For example:
  meteor create myapp

For more help, see 'meteor --help'.


$ meteor create simple-todos
simple-todos: created.

To run your new app:
  cd simple-todos
  meteor

$ cd simple-todos/

$ meteor
[[[[[ ~/simple-todos ]]]]]

=> Started proxy.
=> Started MongoDB.
=> Started your app.

=> App running at: http://localhost:3000/
=> Client modified -- refreshing (x2)

参考サイト
Creating your first app(Meteor)

2015年2月5日木曜日

Meteorをインストール

Meteor(1.0.3.1)をインストールしてみました。といってもコマンド1行打っただけです(笑)。環境は、ubuntu上。これぞ、亀の歩み(笑)。

$ curl https://install.meteor.com/ | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6121    0  6121    0     0   3708      0 --:--:--  0:00:01 --:--:--  4686
Downloading Meteor distribution
######################################################################## 100.0%

Meteor 1.0.3.1 has been installed in your home directory (~/.meteor).
Writing a launcher script to /usr/local/bin/meteor for your convenience.
This may prompt for your password.
[sudo] password for user:

To get started fast:

  $ meteor create ~/my_cool_app
  $ cd ~/my_cool_app
  $ meteor

Or see the docs at:

  docs.meteor.com


参考サイト
Installing Meteor(Meteor)

2015年2月4日水曜日

Meteor(メテオ)の原則

Meteor(メテオ)の原則。

次なる、おバカ実験プロジェクトは何にしようかと物色していたところ、Meteorのその先進性に圧倒されてしまいました。手を出せば、確実に消化不良を起こすことは目に見えていますが、抗しがたい魅力を備えています。悩ましい(笑)。

ワイヤー上のデータ

Meteorは、ネットワークを介してHTMLを送信しません。
サーバーは、データを送信し、クライアントはそれをレンダリングすることができます。

一つの言語

Meteorは、クライアントとサーバーの両方を、JavaScriptで、アプリケーション作成できます。

データベースは、どこでも

クライアントまたはサーバからデータベースにアクセスするため、同じ方法を使用することができます。

レイテンシー補正

Meteorは、クライアントでは、データをプリフェッチし、サーバーメソッドから即座に応答しているようにモデルをシミュレートします。

フルスタック反応性

Meteorは、リアルタイムがデフォルトです。
必要なときに、すべての層は、データベースからテンプレートまで、自動的にデータを更新します。

生態系を包含

Meteorはオープンソースであり、既存のオープンソースのツールとフレームワークに統合されています。

シンプルさは、生産性

簡単なように見える最善の方法は、実際に簡単であることです。
Meteorの主な機能は、きれいで古典的な美しいAPIです。



Meteorをはじめよう:体感!JavaScriptで超速アプリケーション開発 -Meteor完全解説(技術評論社)

2015年2月3日火曜日

Fat-Free Framework 実験サイト、一区切り

Fat-Free Framework 実験サイト、一区切りです。

Fat-Free Frameworkは、PHPのフレームワークとしては、マイクロフレームワークというカテゴリに分類されると思うのですが、そんな中でも、結構充実した内容になっていると思います。テンプレートエンジンも最初から独自のものが用意されていますし、ORMもしかり、キャッシュもよく出来ています。必要と思われるものは、全て揃っていますので、後からモジュールやライブラリを付け足す必要は、ほぼないでしょう。

また、ORMは、データベースや、JSON形式データの「Jig」、MongoDBなど、全て同じように扱えますので、これらを共存させたり、あるいは切り替えて使いたいという場合は、有力な選択肢となるのではないでしょうか。

ちょっとクセはあると思いますが(笑)、使い慣れれば、強力な見方になってくれること、間違いなしです。

$user=new DB\SQL\Mapper($db,'users');
$user->load(array('userID=? AND password=?','cheetah','ch1mp'));
$user->erase();

$user=new DB\Jig\Mapper($db,'users');
$user->load(array('@userID=? AND @password=?','cheetah','chimp'));
$user->erase();

$user=new DB\Mongo\Mapper($db,'users');
$user->load(array('userID'=>'cheetah','password'=>'chimp'));
$user->erase();

2015年2月2日月曜日

Fat-Free Frameworkで、Twigテンプレートエンジンを使う

Fat-Free Frameworkで、Twigテンプレートエンジンを設定してみました。快適です(笑)。慣れもあると思うのですが、テンプレートエンジンは、デフォルトのものではなく、TwigSmartyなど、他のものを利用した方が良いような気がします。

// composerのautoload
require "./vendor/autoload.php";

// Twigの初期設定
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('ui');
$twig = new Twig_Environment($loader, array(
  'cache' => $f3->get('tmp'),
  'debug' => true,
));
$f3->set('twig',$twig);

// ルーティング
$f3->route('GET /hello',
  function($f3) use ($twig) {
    $data = array() ;
    echo $twig->render('hello.twig', array('data' => $data));
  }
);

参考サイト
Twig on F3 v3(Googleグループ)

2015年2月1日日曜日

Gmailで送金が可能に(英国)

英国でも、Gmailで送金が可能になったそうです。日本ではまだ利用できないと思うのですが、是非、近い将来、導入してほしいものです。PayPalのやる気の無さには、終始、ガッカリですから(笑)。