2017年11月30日木曜日

PHPでApache CouchDBにアクセスして、ドキュメントデータを更新

PHPでApache CouchDBにアクセスして、ドキュメントデータを更新です。 アクセスURLの末尾に、データベース名とドキュメントIDを指定し、「'_rev'」データを用意する必要があります。更に、PUTでアクセスするのがミソのようです。

<?php
$id = '5945d346-f70e-46bb-886f-2dc88465dfe5';

$customer = array(
 'firstname' => '二郎',
 'lastname' => '佐藤',
 'username' => 'satojiro',
 'email' => 'satojiro@example.com',
 'pass' => md5('password')
);
$customer['_rev'] = '2-12860c046ac06d030644c4ecd8f53a10';
$data = json_encode($customer);

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/customers/'.$id);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));
$response = curl_exec($ch);
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>
成功の場合
{
  "ok": true,
  "id": "5945d346-f70e-46bb-886f-2dc88465dfe5",
  "rev": "3-876acc4794d3dd97c54d400ede5ce1aa"
}
_rev が正しくない場合
{
  "error": "conflict",
  "reason": "Document update conflict."
}
POSTでアクセスした場合
{
  "error": "bad_request",
  "reason": "Referer header required."
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)

2017年11月29日水曜日

PHPでApache CouchDBにアクセスして、ドキュメントデータを取得

PHPでApache CouchDBにアクセスして、ドキュメントデータを取得です。 アクセスURLの末尾に、データベース名とドキュメントIDを指定すれば良いらしい。

<?php
$id = '5945d346-f70e-46bb-886f-2dc88465dfe5';

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/customers/'.$id);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));
$response = curl_exec($ch);
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>

{
  "_id": "5945d346-f70e-46bb-886f-2dc88465dfe5",
  "_rev": "1-1a3df21386acf40bf4364936146ab062",
  "firstname": "太郎",
  "lastname": "佐藤",
  "username": "satotaro",
  "email": "satotaro@example.com",
  "pass": "password"
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)

2017年11月28日火曜日

PHPでUUID その2

PHPでUUID、その2です。何をやってるのか、よくわかっていませんが、見事にUUIDのバージョン4が生成されます。素晴らしいです。

<?php
function v4() {
  return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',

    // time_low UUIDの最初の32ビット
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),

    // time_mid UUIDの次の16ビット
    mt_rand(0, 0xffff),

    // time_hi_version UUIDの次の16 ビット
    mt_rand(0, 0x0fff) | 0x4000,

    // clock_seq_hi_variant UUIDの次の8ビット
    // clock_seq_low UUIDの次の8ビット
    mt_rand(0, 0x3fff) | 0x8000,

    // node UUIDの最後の48ビット
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
  );
}

$uuid4 = v4() ;
echo $uuid4 ;
?>

参考サイト
uniqid(PHP Manual)
uuid — RFC 4122に準拠したUUID オブジェクト(Python ドキュメント)

2017年11月27日月曜日

PHPでUUID(ramsey/uuid)

PHPでUUIDです。ramsey/uuid を使ってみました。PHP 5.4以上が必要で、UUIDのバージョン1、3、4、5を生成してくれます。簡単に導入できます。作者に感謝。

インストール
composer require ramsey/uuid
<?php
require 'vendor/autoload.php';

use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;

$uuid4 = Uuid::uuid4();
echo $uuid4
?>

2017年11月26日日曜日

軽量デスクトップ環境「Lumina」

軽量デスクトップ環境「LuminaLinux、BSDと様々なOSで利用可能。しかしながら、簡単に試してみるには、FreeBSD系のTrueOSをインストールして使ってみるのがお勧めとのこと。





参考サイト
新デスクトップ「Lumina Desktop」の基本的な使い方(マイナビニュース)

2017年11月25日土曜日

デスクトップ向けBSD OS「GhostBSD」

デスクトップ向けBSD OS「GhostBSD」 BSD系のデスクトップOSとしては、貴重な存在ではないでしょうか。





参考サイト
デスクトップ向けBSD OS「GhostBSD 11.1」リリース(Think IT)

2017年11月24日金曜日

PHPでApache CouchDBにアクセスして、ドキュメントデータを作成

PHPでApache CouchDBにアクセスして、ドキュメントデータを作成です。今回は、cUrlからPOSTでアクセス。アクセスURLの末尾にデータベース名とユニークなIDを指定すれば良いらしい。IDにはUUIDを利用することが推奨されているが、今回の例のように、重複しなければ、ユーザーIDなどでも構わない。

<?php
$ch = curl_init();

$customer = array(
 'firstname' => '太郎',
 'lastname' => '佐藤',
 'username' => 'satotaro',
 'email' => 'satotaro@example.com',
 'pass' => md5('password')
);

$data = json_encode($customer);

curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/customers/'.$customer['username']);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));

$response = curl_exec($ch);
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>
成功の場合
{
 "ok": true,
 "id": "satotaro",
 "rev": "1-1a3df21386acf40bf4364936146ab062"
}
「id」が重複して失敗の場合
{
 "error": "conflict",
 "reason": "Document update conflict."
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)

2017年11月23日木曜日

PHPでApache CouchDBにアクセスして、UUIDを取得

PHPでApache CouchDBにアクセスして、UUIDを取得です。 アクセスURLの末尾に「_uuids」を指定すればOK。「/_uuids?count=10」という具合にすると、一度に10個取得できます。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/_uuids');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));

$response = curl_exec($ch);
$_response = json_decode($response, true);

$UUID = $_response['uuids'];
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>
{
 "uuids": [
  "58c65c9e0b312f7c034933d0ec007bd2"
 ]
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)
UUID がぶつかる可能性を考えなくていい理由(Qiita)

2017年11月22日水曜日

PHPでApache CouchDBにアクセスして、データベースを作成

PHPでApache CouchDBにアクセスして、データベースを作成です。 アクセスURLの末尾にデータベース名を追加すればOK。

<?php
$database = 'customers';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/'.$database);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));
$response = curl_exec($ch);
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>
成功の場合
{
  "ok": true
}
失敗の場合
{
  "error": "file_exists",
  "reason": "The database could not be created, the file already exists."
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)

2017年11月21日火曜日

PHPでApache CouchDBにアクセスして、データベースの一覧を取得

PHPでApache CouchDBにアクセスして、データベースの一覧を取得です。アクセスURLを単に「/_all_dbs」に変更するだけです。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/_all_dbs');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));
$response = curl_exec($ch);
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>
{
  "_replicator",
  "_users",
  "database1",
  "database2",
  "database3"
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)

2017年11月20日月曜日

PHPでApache CouchDBにアクセス

PHPでApache CouchDBにアクセスです。まずは、Welcomeメッセージを取得。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
 'Content-type: application/json',
 'Accept: */*'
));
$response = curl_exec($ch);
curl_close($ch);

header('content-type: application/json; charset=utf-8');
echo $response ;
?>
{
"couchdb": "Welcome",
"uuid": "12345678910",
"version": "1.6.0",
"vendor": {
  "version": "15.10",
  "name": "Ubuntu"
  }
}

参考サイト
CouchDB for PHP developers - CRUD(Inchooさん)

2017年11月19日日曜日

IBMが量子コンピュータを商用化

IBMが量子コンピュータを商用化するとのこと。もうそんな時代が到来しましたか?!

これまでのコンピューターは 0 か 1 のどちらかの値をもつビットを使って計算しますが、量子コンピューターは同時に 0 と 1 の状態をもつビットで計算をします。つまり、n 量子ビットがあると、2n の状態を同時に計算できるので、超並列計算を行うことになります。
この量子コンピューターは、すべての計算問題において、画期的なものというのではなく、この並列計算が活用できる問題の場合に計算スピードがとても早くなり、活用価値があります。例えば、データベース検索や素因数分解では、これまでのコンピューターよりずっと高速に計算出来ることが証明されています。





参考サイト
IBM、量子コンピュータを本格的に商用化へ(EE Times Japan)
IBM Quantum Computing で計算してみよう(IBM)

2017年11月18日土曜日

Fedora 27がリリース

Fedora 27がリリースされました。
Fedora 27ではモジュラー化を進めた。アプリケーションとディストリビューションのライフサイクルを分離するための取り組みで、パッケージからコンポーネントへ細分化を進めている。Linuxディストリビューションをモジュール単位にすることで、アプリケーションスタックを最新にしながら後方互換性を維持できるようにする。


参考サイト
モジュラー化を進めた「Fedora 27」リリース(OSDN Magazine)

2017年11月17日金曜日

Apache CouchDBからCloudantにデータをReplicate(複製)

Apache CouchDBからCloudantにデータをReplicate(複製)してみました。簡単です! そして感動です。FauxtonメニューのReplicattionから、コピー元をLocal、コピー先をRemoteとして選択し、Remote側にCloudantのログイン情報を指定すればOK。データが瞬時にコピーされます。Erlangの威力を体感できます。

https://(ログインID):(パスワード)@(ホスト名)/(データベース名)
https://abcdefg:password@abc-bluemix.cloudant.com/mydatabase



2017年11月16日木曜日

Apache CouchDBで、ビュー(VIEW)の作成

Apache CouchDBで、ビュー(VIEW)の作成です。保存したドキュメントをフィルタリングする機能(?)ということでしょうか。実際に作ってみると、どういうことかよくわかります。

// IDと名前を表示する
function(doc) {
  emit(doc._id, doc.name);
}

// IDとメールアドレスを表示する
function(doc) {
  emit(doc._id, doc.email);
}
ビューのAPI URLにアクセスすると、目的のJSONデータが返ってきます。
http://127.0.0.1:5984/mycompany/_design/view1/_view/view1?limit=20&reduce=false

http://127.0.0.1:5984/mycompany/_design/view1/_view/view2?limit=20&reduce=false


参考サイト
ビューでデータを検索する(CouchDB: The Definitive Guide)
モバイルからクラウドまで、幅広く活躍するCouchDB(@IT)

2017年11月15日水曜日

Apache CouchDBで、もう一つのGUI管理画面「Fauxton」

Apache CouchDBで、もう一つのGUI管理画面「Fauxton」です。Futonと同様に、データベースの操作が行なえます。更に、ログや統計データなども把握できます。至れり尽くせり。

http://127.0.0.1:5984/_utils/fauxton/


2017年11月14日火曜日

Apache CouchDBで、管理者パスワード設定

Apache CouchDBで、管理者パスワード設定です。

$ HOST="http://127.0.0.1:5984"
$ curl -X PUT $HOST/_config/admins/admin -d '"hogehoge"'
""

# パスワードを設定すると、今までのコマンドでは権限がないと弾かれる。
$ curl -X PUT $HOST/database
{"error":"unauthorized","reason":"You are not a server admin."}

# ユーザー名とパスワードを指定したURLで接続
$ HOST="http://admin:hogehoge@127.0.0.1:5984"
$ curl -X PUT $HOST/database
{"ok":true}
Furonを利用する場合は、画面右下のリンクから、設定できます。
Welcome to Admin Party! 
Everyone is admin. Fix this



参考サイト
Security(Apache CouchDB 2.0 Documentation)

2017年11月13日月曜日

Apache CouchDBのウェブGUI管理画面「Futon」

Apache CouchDBのウェブGUI管理画面「Futon」を立ち上げてみました。何もできていませんが、ちょっと感動(笑)。



http://127.0.0.1:5984/_utils/

外部からアクセスしたい場合は、bind_address の設定を変更すれば良いらしい。
/etc/couchdb/local.ini
[httpd]
;port = 5984
;bind_address = 127.0.0.1
bind_address = 0.0.0.0

参考サイト
[CouchDB] Futon から CouchDB を操作してみよう(Resellschaftさん)
CouchDB Curl and Futon(tutorialspoint.com)
CouchDB on Local Network(Stack Overflow)

2017年11月12日日曜日

確率論的プログラミング言語「Pyro」

確率論的プログラミング言語「Pyro」 Pyroは、Pythonで書かれ、PyTorchによってバックエンドでサポートされる確率的プログラミング言語です。 Pyroは、柔軟で表現力豊かな深い確率モデルを可能にし、最新のディープラーニングとベイジアンモデリングを統一します。



参考サイト
Uber、プログラミング言語「Pyro」を公開(マイナビニュース)
PyTorch

2017年11月11日土曜日

グループビデオチャットサービス「Zoom」 ビジネス用途をターゲットにしているらしく、高品質であることを謳っています。Skypeを越えるか?!



2017年11月10日金曜日

Apache CouchDBで、データベースの作成と削除

Apache CouchDBで、データベースの作成と削除です。まずは、コマンド操作の基本から。

# Hello
curl http://127.0.0.1:5984/
{"couchdb":"Welcome","uuid":"abc","version":"1.6.0","vendor":{"version":"15.10","name":"Ubuntu"}}

# 全てのデータベースを表示
curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users"]

# 新規でデータベースを作成
curl -X PUT http://127.0.0.1:5984/sampledb
{"ok":true}

# 全てのデータベースを表示
curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users","sampledb"]

# データベース情報を表示
curl -X GET http://127.0.0.1:5984/sampledb
{"db_name":"sampledb","doc_count":0,"doc_del_count":0,"update_seq":0,"purge_seq":0,"compact_running":false,"disk_size":12,"data_size":0,"instance_start_time":"123","disk_format_version":6,"committed_update_seq":0}

# データベースを削除
curl -X DELETE http://127.0.0.1:5984/sampledb
{"ok":true}

参考サイト
CouchDB Curl and Futon(tutorialspoint.com)
CouchDB Deleting a Database(tutorialspoint.com)

2017年11月9日木曜日

Ubuntu 16.04に、Apache CouchDBをインストール

Ubuntu 16.04に、Apache CouchDBをインストールしてみました。起動して、「Welcome」メッセージが返ってくる。うっ、嬉しい(笑)。

$ curl -L https://couchdb.apache.org/repo/bintray-pubkey.asc | sudo apt-key add -

$ sudo apt-get update && sudo apt-get install couchdb

$ sudo systemctl start couchdb

$ curl localhost:5984
{"couchdb":"Welcome","uuid":"aaa","version":"1.6.0","vendor":{"version":"15.10","name":"Ubuntu"}}

参考サイト
Installation on Unix-like systems(Apache CouchDB Documentation)
How To Install CouchDB and Futon on Ubuntu 16.04(LinOxide)

2017年11月8日水曜日

Erlangで書かれているNoSQLデータベースの「Apache CouchDB」

Erlangで書かれているNoSQLデータベースの「Apache CouchDB」 Erlangと聞いただけで、興味が倍増しました。Cloudantは、このApache CouchDBをベースに開発されているらしい。これは勉強するしかないでしょう。単純です(笑)。



参考サイト
エンタープライズ分野で使えるNoSQLのDatabase as a Service「IBM Cloudant」(CodeZine)
Cloudant(Wikipedia)
Apache CouchDB(Wikipedia)

2017年11月7日火曜日

IBM CloudにCloudant NoSQL DBを追加

IBM CloudにCloudant NoSQL DBを追加してみました。Cloudantは、JSONデータを格納できるNoSQLデータベースとのこと。Cloudantのダッシュボードが用意されていて、ウェブベースでデータの管理が可能になっています。



環境変数取得
$ cf env APP_NAME

こんな感じで、接続情報が取得できます。
 "VCAP_SERVICES": {
  "cloudantNoSQLDB": [
   {
    "credentials": {
     "host": "host",
     "password": "password",
     "port": 443,
     "url": "url",
     "username": "username"
    }
   }
  ]
 }

参考サイト
PHP入門チュートリアル(IBM Bluemix Docs)
VCAP サービス(IBM Bluemix Docs)
Cloudant Learning Center(IBM)

2017年11月6日月曜日

無料のIBM Cloudを試す

IBM Cloudが無料になったということで、早速試してみました。今回試したのはPHPです。他にも、Node.jsPython FlaskRuby Sinatraなどの雛形が用意されています。素晴らしい! PHPでは、Slim 2がスターター・アプリケーションとして用意されています。PHPのバージョンは、composer.json ファイルで変更できます。

$ git clone https://github.com/IBM-Bluemix/get-started-php
$ cd get-started-php/
$ php composer.phar install
$ php -S localhost:8000

# Cloud Foundryのcfコマンドをインストール
$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install cf-cli

$ cf login
$ cf api https://api.ng.bluemix.net
$ cf push
$ cf apps

composer.json
{
  "require": {
    "php": "7.1.*",
    "slim/slim": "2.*",
    "vlucas/phpdotenv": "^2.4"
  }
}

参考サイト
PHP入門チュートリアル(IBM Bluemix Docs)
The official command line client for Cloud Foundry(GitHub)
WatsonやIoTなどが利用できるIBM Cloudが無料に

2017年11月3日金曜日

CentOSをベースとしたLinuxディストリビューション「NethServer」

CentOSをベースとしたLinuxディストリビューション「NethServer」 小規模オフィスや中規模企業向けに設計されたLinuxです。ブラウザからGUIでサーバー管理できるのが特徴らしい。





参考サイト
CentOSをベースとした小・中規模サーバ向けLinuxディストリビューション「NethServer 7.4」リリース(Think IT)

2017年11月2日木曜日

Laravel5.5で、カスタムバリデーションルール(Custom Validation Rules)

Laravel5.5で、カスタムバリデーションルール(Custom Validation Rules)です。Laravel5.5から追加されたらしい。php artisan make:ruleコマンドで、作成できます。複雑なバリデーションは、カスタムバリデーションルールにしておくと、ソースが見やすくなるでしょう。

php artisan make:rule PriceRule

/app/Rules/PriceRule.php
  /**
   * Determine if the validation rule passes.
   *
   * @param  string  $attribute
   * @param  mixed  $value
   * @return bool
   */
  public function passes($attribute, $value)
  {
    // 100で割り切れない数字はエラーにする
    if( $value % 100 == 0 ) {
      return true;
    }
  }

  /**
   * Get the validation error message.
   *
   * @return string
   */
  public function message()
  {
    return ':attribute は、100円単位で入力してください。';
  }

/app/Http/Requests/ItemRegistrationRequest.php
use App\Rules\PriceRule;

  public function rules()
  {
    return [
      'price' => ['required', 'integer', new PriceRule() ],
    ];
  }

参考サイト
Custom Validation Rules(Laravel)
Laravel 5.5 custom validation rules example(itsolutionstuff.com)

2017年11月1日水曜日

Laravel5.5から追加されたコレクションのdump()とdd()

Laravel5.5から追加されたコレクションのdump()dd()です。コレクションの中身を簡単に確認することができます。ちょっとしたデバッグ作業に便利に使えると思います。

$items = Item::all();

$filtered = $items->sortByDesc('price')
  ->pluck('price')
  ->dump()
  ->reject(function ($price, $key) {
    return $price < 1000;
  });

$filtered->take(100)->dd() ;

参考サイト
DD and Dump Are coming to Collections in Laravel 5.5(Laravel News)