2017年12月13日水曜日

Apache CouchDBのconflictとrevisionについて

Apache CouchDBconflictrevisionについてです。

CouchDBはJSONオブジェクトに_id_revの2つのプロパティを自動的に追加します。

_idは、最初のリクエストで設定するドキュメントのID

_rev(revision)は、ドキュメントの内容に対するバージョン管理的なハッシュ値

CouchDBは、ユーザーがデータを誤って上書きすることがないように、常に、_rev(revision)のデータを提供して、最新のデータを確認できるようにしているわけなんですね。

_rev(revision)が、なんで存在しているのか、ちょっとわかった気がします。

参考サイト
Understanding CouchDB Conflicts(Writing By Jan Lehnardtさん)

2017年12月12日火曜日

PHP-on-Couchを利用して、Apache CouchDBにアクセス、ビュー(View)のデータ取得

PHP-on-Couchを利用して、Apache CouchDBにアクセス、ビュー(View)のデータ取得です。日付をキーに並べ替えできます。

use PHPOnCouch\CouchClient;

// 接続
$client = new CouchClient('http://admin:password@127.0.0.1:5984', 'customers');

try {
  $view = $client->limit(10)->getView('order', 'bydate');
} catch (Exception $e) {
  echo "Error: " . $e->getMessage() ;
}
$view に設定されるデータ
stdClass Object
(
  [total_rows] => 100
  [offset] => 0
  [rows] => Array
    (
      [0] => stdClass Object
        (
          [id] => 063e9f9b-cebb-4e65-af07-a4b3653bc7bc
          [key] => 2017-12-01 00:00:00
          [value] => stdClass Object
            (
              [_id] => 063e9f9b-cebb-4e65-af07-a4b3653bc7bc
              [_rev] => 1-6a0067077b94167f099ce61e0e0f1af1
              [firstname] => 太郎
              [lastname] => 佐藤
              [username] => satotaro
              [email] => satotaro@example.com
              [pass] => 
              [create_at] => 2017-12-01 00:00:00
            )
        )
      [1] => stdClass Object
        (
          [id] => d6ec8f10-36c4-4f36-a083-546627d66b6f
          [key] => 2017-12-02 11:11:11
          [value] => stdClass Object
            (
              [_id] => d6ec8f10-36c4-4f36-a083-546627d66b6f
              [_rev] => 1-c67de32f6f938769e16a172578913de7
              [firstname] => 一郎
              [lastname] => 鈴木
              [username] => suzukiichiro
              [email] => suzukiichiro@example.com
              [pass] => 
              [create_at] => 2017-12-02 11:11:11
            )
        )
     )
)

参考サイト
Apache CouchDBで、ビュー(View)の基本
PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」

2017年12月11日月曜日

Apache CouchDBで、ビュー(View)の基本

Apache CouchDBで、ビュー(View)の基本です。ビューで利用されるemit()関数は2つの引数をとります。第1引数がキーで、第2引数が値です。 第1引数のKeyを元に、データを並び替えてくれるというわけですね。例えば、日付をKeyにすれば、日付順にデータを並び替えてくれます。

function(doc) {
  if (doc.create_at){
    emit(doc.create_at, {FirstName: doc.firstname, LastName: doc.lastname, Email: doc.email});
  }
}
function(doc) {
  if (doc.create_at){
    emit(doc.create_at, doc);
  }
}

参考サイト
Introduction to Views( Apache CouchDB Documentation)
Views Collation(Apache CouchDB Documentation)

2017年12月10日日曜日

プログレッシブ ウェブアプリ(Progressive Web Apps)とは?

プログレッシブ ウェブアプリ(Progressive Web Apps)とは? ということで、メモです。

  • 段階的
  • レスポンシブ
  • ネットワーク接続に依存しない
  • アプリ感覚
  • 常に最新
  • 安全
  • 発見しやすい
  • 再エンゲージメント可能
  • インストール可能
  • リンク可能

やりたいことは分かるんですが、実際に制作するとなると、まだまだハードルが高いような気がしますね。徐々に変わらないといけないんでしょうが。。。





参考サイト
はじめてのプログレッシブ ウェブアプリ(developers.google.com)
プログレッシブ ウェブアプリについて(Google Partners ヘルプ)

2017年12月9日土曜日

Puppylinux 7.5 がリリース

Puppylinux 7.5 がリリースされました。サイズが小さく、古いコンピューターでも、ストレス無く使うことができる軽量Linuxディストリニューションです。32ビットと64ビットの両方のバージョンがあります。



2017年12月8日金曜日

PHP-on-Couchを利用して、Apache CouchDBにアクセス、添付ファイルを追加

PHP-on-Couchを利用して、Apache CouchDBにアクセス、添付ファイルを追加です。storeAsAttachment()で、実に簡単に添付できます。ちょっと感動(笑)。ライブラリの恩恵を感じます。

use PHPOnCouch\CouchClient;

// 接続
$client = new CouchClient('http://admin:password@127.0.0.1:5984', 'customers');

// IDでドキュメントデータを取得
$doc = $client->getDoc('5945d346-f70e-46bb-886f-2dc88465dfe5');

// 添付ファイルを追加
$html = file_get_contents('http://couchdb.apache.org/');
$ok = $client->storeAsAttachment($doc,$html,'couchdb.html','text/html');
print_r($ok);

参考サイト
PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」

2017年12月7日木曜日

PHP-on-Couchを利用して、Apache CouchDBにアクセス、ドキュメントを削除

PHP-on-Couchを利用して、Apache CouchDBにアクセス、ドキュメントを削除です。deleteDoc()で削除できます。

use PHPOnCouch\CouchClient;

// 接続
$client = new CouchClient('http://admin:password@127.0.0.1:5984', 'customers');

// IDでドキュメントデータを取得
$doc = $client->getDoc('5945d346-f70e-46bb-886f-2dc88465dfe5');

try {
  $client->deleteDoc($doc);
} catch (Exception $e) {
  echo "ERROR: ".$e->getMessage();
}

参考サイト
PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」

2017年12月6日水曜日

PHP-on-Couchを利用して、Apache CouchDBにアクセス、ドキュメント更新

PHP-on-Couchを利用して、Apache CouchDBにアクセス、ドキュメント更新です。ORMライクで、非常に楽。

use PHPOnCouch\CouchClient;

// 接続
$client = new CouchClient('http://admin:password@127.0.0.1:5984', 'customers');

// IDでドキュメントデータを取得
$doc = $client->getDoc('5945d346-f70e-46bb-886f-2dc88465dfe5');

$doc->firstname = "一郎";
$doc->lastname = "鈴木";
$doc->username = "suzukiichiro";
$doc->lastname = "suzukiichiro@example.com";

try {
  $client->storeDoc($doc);
} catch (Exception $e) {
  echo "Document storage failed : " . $e->getMessage() ;
}

参考サイト
PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」

2017年12月5日火曜日

PHP-on-Couchを利用して、Apache CouchDBにアクセス

PHP-on-Couchを利用して、Apache CouchDBにアクセスです。

use PHPOnCouch\CouchClient;

// 接続
$client = new CouchClient('http://admin:password@127.0.0.1:5984', 'customers');

// IDでドキュメントデータを取得
$doc = $client->getDoc('5945d346-f70e-46bb-886f-2dc88465dfe5');

print $doc->firstname ;
print $doc->lastname ;
print $doc->username ;
print $doc->email ;

参考サイト
PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」

2017年12月4日月曜日

PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」

PHPのApache CouchDBデータアクセスライブラリ「PHP-on-Couch」 いろいろ見比べた結果、これが良さそうなので、次から試していこうと思います。



参考サイト
Getting_started_with_PHP(Couchdb Wiki)

2017年12月3日日曜日

Django 2.0がリリース、Python 3のみをサポート

Django 2.0がリリースされました。Python 3のみをサポートするとのこと。
  •  Django 2.0はPython 3.4、3.5、3.6をサポートしています。 
  •  Django 1.11.xシリーズは、Python 2.7をサポートする最後のバージョンです。 
  •  Django 2.0はPython 3.4をサポートする最後のリリースシリーズとなります。 Django 2.0(2019年4月)の終わりを越えてPython 3.4のデプロイメントを計画している場合は、代わりにDjango 1.11 LTS(2020年4月までサポート)を使用してください。 ただし、Python 3.4の使用期限は2019年3月です。


参考サイト
Django 2.0の変更点について(Qiita)

2017年12月2日土曜日

PHP 7.2がリリース

PHP 7.2がリリースされました。主な変更点は、以下の通り。
  • オブジェクト/配列キャストの数値キー変換
  • カウント不可オブジェクトのカウント
  • オブジェクトのタイプヒント
  • オブジェクトとしてのHashContext
  • パスワードハッシュのArgon2を追加
  • TLS定数を正当な値に改善
  • Mcrypt拡張機能が削除
  • 最新の暗号ライブラリLibsodiumを追加



参考サイト
PHP7.2の新機能(Qiita)

2017年12月1日金曜日

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

PHPでApache CouchDBにアクセスして、ドキュメントデータを削除です。 アクセスURLの末尾に、データベース名とドキュメントID、「'rev'」を指定すればOK。 更に、DELETEでアクセスする必要があります。

<?php
$id = '7011b933-a96f-4cf5-9e0a-8a7c2460ddc2';
$revision = '1-4273f8307454e224d076b7bf7f299177';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://admin:password@127.0.0.1:5984/customers/'.$id.'?rev='.$revision);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
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": "7011b933-a96f-4cf5-9e0a-8a7c2460ddc2",
  "rev": "2-5baafa3c7edc76925f81c67e001d0653"
}
rev が正しくない場合
{
  "error": "conflict",
  "reason": "Document update conflict."
}
idが見つからない場合
{
  "error": "not_found",
  "reason": "deleted"
}

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

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)

2017年10月31日火曜日

Laravel5.5から追加されたビューのBlade内で使えるカスタムif文「Blade::if()」

Laravel5.5から追加されたビューのBlade内で使えるカスタムif文「Blade::if()」です。ビューのテンプレート内での複雑なチェックを単純化してくれます。 頻繁にチェックが必要な場面では、威力を発揮してくれるでしょう。非常に便利。

/app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Blade;

public function boot()
{
  Blade::if('prod', function () {
    return app()->environment('production');
  });

  Blade::if('env', function ($env) {
    return app()->environment($env);
  });
}

@prod
  製品環境
@else
  開発環境
@endprod

@env('production')
  製品環境
@endenv
@env('local')
  開発環境
@endenv

参考サイト
Blade::if() Directives(Laravel News)
What's New in Laravel 5.5: Custom Blade "If" Directives(Laracasts)

2017年10月30日月曜日

Laravel5.5で、ショッピングカートの合計金額を取得

Laravel5.5で、ショッピングカートの合計金額を取得です。 いろいろな方法があると思いますが、エレガントな取得方法を見つけました。美しい(笑)。

/app/Cart.php
class Cart extends Model
{
  // リレーション
  public function item()
  {
      return $this->belongsToMany('App\Item')->withPivot('quantity');
  }

  // 合計金額集計
  public function getTotalPrice() {
    return $this->item()->sum(DB::raw('cart_item.quantity * items.price'));
  }
}

参考サイト
Laravel Eloquent: Best Way to Calculate Total Price(Stack Overflow)

2017年10月29日日曜日

オープンソースのインタープリター言語「Hot Soup Processor」

オープンソースのインタープリター言語「Hot Soup Processor」 Linux、Raspberry Pi、ブラウザ上で動作するアプリなどが開発可能だそうです。

HSPは、お手軽に使うことのできるスクリプト言語システムです。 付属のエディタでスクリプトを書くだけで、誰にでも簡単にウインドゥズ上で動作するアプリケーションを開発することができます。 多彩な命令セットを使いこなすことで実用ツール、ゲーム、スクリーンセーバーなどを作成することができます。


参考サイト
3年ぶりのメジャーリリース「HSP 3.5」が登場、「HSP3Dish」はRaspberry Piにも対応(窓の杜)

2017年10月28日土曜日

軽量で多言語対応の動的ウェブアプリケーションサーバー「NGINX Unit」

軽量で多言語対応の動的ウェブアプリケーションサーバー「NGINX Unit」 現在サポートしているのは、Python、PHP、Go。NGINXが、何やら、面白そうなこと始めていますね。要チェックです。

NGINX Unitは、複数の言語でアプリケーションを実行できるよう設計された動的ウェブアプリケーションサーバです。 ユニットは軽量、多言語で、APIを介して動的に設定されます。





参考サイト
最新のNGINXはアプリケーションサーバー!?NGINX UnitのベンチマークをPHP,Python,Goで計測してみた!!(Qiita)
NGINXからアプリケーションサーバ「NGINX Unit」がオープンソースで登場。PHP、Go、Pythonに対応。Java、Node.jsにも対応予定(Publickey)

2017年10月27日金曜日

Laravel5.5で、モデルとそのリレーションを複製

Laravel5.5で、モデルとそのリレーションを複製です。一発で複製というわけにはいきませんが、ループで回して明示的にリレーションをコピーする事になりますので、把握しやすい(?)という意味では、良いのかもしれません。

// 元データ
$blog = Blog::findOrFail($id) ;

// 元データのリレーション
$tags = $blog->tag()->get() ;

// 複製
$blog_clone = $blog->replicate();

// 元データのリレーションを複製データにコピー
foreach($tags as $tag)
{
  $blog_clone->tag()->attach($tag);
}
$blog_clone->push();

参考サイト
How to clone model and it's relationship(Laracasts)
Laravel5.4で、モデルデータの複製(replicate)

2017年10月26日木曜日

Laravel5.5の、Validator::makeでカスタムエラーメッセージ

Laravel5.5の、Validator::makeでカスタムエラーメッセージです。 Validator::makeメソッドでは、3番目の引数として、カスタムメッセージを渡すことができて、こちらも、かなり自由な表現が可能です。

$data['mail'] = 'sample.email.com' ;

$rules = [
  'mail' => 'required|email',
] ;

$messages = [
  'mail.required' => 'メールアドレスを入力してください。',
  'mail.email' => 'メールアドレスがダメダメ。',
];

$validator = Validator::make($data, $rules, $messages);
$error = $validator->messages()->getMessages();

dd($error) ;

参考サイト
Custom validation messages with data of the rules(Laravel.io)
Validation(Laravel)
Laravel5.4で、リクエストごとにバリデーションメッセージをカスタマイズ

2017年10月25日水曜日

Laravel5.5で、Eloquentのピボットテーブル並べ替え

Laravel5.5で、Eloquentのピボットテーブル並べ替えです。 orderBy()メソッドが使えるので、悩まずに、感覚的に使っていればOKのようです。

/app/Http/Controllers/BlogController.php
$blog = Blog::findOrFail($id) ;

$tags = $blog->tag()->orderBy('tag_id', 'asc')->get() ;
$tags = $blog->tag()->orderBy('size', 'desc')->get() ;
$tags = $blog->tag()->orderBy('color', 'asc')->get() ;

参考サイト
Order by pivot table attribute in Eloquent(Laravel.io)
Laravel5.5で、ピボットテーブルの他の列の値を取得
Laravel5.5で、ピボットテーブルの他の列に値を追加、更新

2017年10月24日火曜日

Laravel5.5で、ピボットテーブルの他の列の値を取得

Laravel5.5で、ピボットテーブルの他の列の値を取得です。モデルに「withPivot」でリレーションを定義すると、「pivot」属性でアクセスできるようになります。

/app/Blog.php(モデル)
public function tag()
{
  return $this->belongsToMany('App\Tag')->withPivot('size', 'color');
}
/app/Http/Controllers/BlogController.php(コントローラー)
$blog = Blog::findOrFail($id) ;
$tags = $blog->tag()->get() ;
/resources/views/blog/show.blade.php(ビュー)
@foreach($tags as $tag)
   <li>{{ $tag->pivot->size }} : {{ $tag->pivot->color }}</li>
@endforeach 
上記の $tag を配列で表示すると、こんな感じに。
[0] => Array
  (
    [id] => 1
    [title] => タグ名
    [created_at] => 2017-10-24 00:00:00
    [updated_at] => 2017-10-24 00:00:00
    [pivot] => Array
      (
        [blog_id] => 1
        [tag_id] => 1
        [size] => 3
        [color] => #FF0000
      )
  )

参考サイト
Eloquent: Relationships(Laravel)
How to access data of a pivot table(Laracasts)
Laravel5.5で、ピボットテーブルの他の列に値を追加、更新

2017年10月23日月曜日

Laravel5.5で、ピボットテーブルの他の列に値を追加、更新

Laravel5.5で、ピボットテーブルの他の列に値を追加、更新です。IDと共に、追加の値を配列で指定すると、それぞれ、保存、更新(削除)してくれます。非常に便利。見事な動作に、感動を覚えます(笑)。

ブログのタグクラウドを想定した例。タグのサイズと色を指定しています。
$blog = Blog::find(1);
$blog->tag()->sync([
  1 => ['size' => 3, 'color' => '#FF0000'], 
  2 => ['size' => 1, 'color' => '#00FF00'], 
  3 => ['size' => 5, 'color' => '#0000FF']
]);

参考サイト
Laravel attach pivot to table with multiple values(Stack Overflow)
Eloquent: Relationships(Laravel)

2017年10月22日日曜日

DragonFly BSD 5.0がリリース

DragonFly BSD 5.0がリリースされました。

新しいファイルシステム「HAMMER 2」を試験的にサポートしたほか、ファイアウォールツール「ipfw」が強化される


参考サイト
「DragonFly BSD 5.0.0」リリース(Think IT)

2017年10月21日土曜日

Wi-FiのWPA2認証に脆弱性「KRACK」

Wi-FiのWPA2認証に脆弱性「KRACK」が発見されたとのこと。これだけWi-Fi機器が溢れる中で、全てにパッチを適用するのは非常に困難でしょう。影響が大きすぎますよねぇ。

ユーザーのデバイスがWi-Fiネットワークとの接続を確立する際に用いる4ウェイ・ハンドシェイクという手順に存在する脆弱性を突くことで、ネットワーク上を流れる暗号化されたデータを復号できるようにするというものだ。


参考サイト
Wi-FiのWPA2脆弱性「KRACK」、今ユーザーにできる対処法(ZDNet Japan)
Wi-Fiを脅かす脆弱性「KRACK」、各社の対応状況は--MS、アップル、グーグルなど(CNET Japan)

2017年10月20日金曜日

PHPでオブジェクトのメンバ変数に名前を指定した変数でアクセス

PHPでオブジェクトのメンバ変数に名前を指定した変数でのアクセスです。言葉で説明するよりも、例を見てもらったほうがわかりやすいでしょう。こんなこともできるというお話です。使えることはわかりましたが、ちょっと躊躇してしまいますね(笑)。

$var = 'name' ;
$object_name = $object->$var ;

define('VAR', 'name'); 
$object_name = $object->{VAR} ;

参考サイト
PHP Object Variable variables name?(Stack Overflow)
クラスとオブジェクト(PHP Manual)

2017年10月19日木曜日

Laravel5.5で、SQLクエリログを記録するミドルウェア

Laravel5.5で、SQLクエリログを記録するミドルウェアです。 enableQueryLog()getQueryLog()メソッドの応用ですね。atuwebさんのブログを参考にさせてもらいました。ミドルウェアの動きもよく理解できます。素晴らしい。

/app/Http/Middleware/QueryLog.php(非常に簡易的なもの)
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\DB;

class QueryLog
{
  /**
   * Handle an incoming request.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Closure  $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    $this->readyOutputSqlLog();

    $response = $next($request);

    $this->outputSqlLog();

    return $response;
  }

  private function readyOutputSqlLog()
  {
    DB::enableQueryLog();
  }

  private function outputSqlLog()
  {
    $query = DB::getQueryLog();

    print "<pre>" ;
    print_r($query) ;
    print "</pre>" ;
  }
}


参考サイト
[Laravel]SQLをログ出力するミドルウェアつくったった(atuwebさん)
LaravelでSQL実行ログを出力するミドルウェア(GitHub)
Laravel5.5で、EloquentのSQLを確認するtoSql()とgetBindings()のメソッド
Laravel5.5で、EloquentのSQLを確認する(その2)

2017年10月18日水曜日

Laravel5.5で、EloquentのSQLを確認する(その2)

Laravel5.5で、EloquentのSQLを確認する(その2)です。DB::enableQueryLog()で、ログ取得の準備。DB::getQueryLog()で、ログを取得すれば良いらしい。こちらの方が、時間も表示されるので良いかもしれません。

// ログ取得の準備
DB::enableQueryLog();

// Eloquent
$blog = Blog::published()->get();

// ログ取得&出力
$query = DB::getQueryLog();
dd($query);

実際に出力されるSQLとバインド変数の数値
array:1 [
  0 => array:3 [
    "query" => "select * from `blogs` where `blogs`.`published` = ?"
    "bindings" => array:1 [
      0 => 1
    ]
    "time" => 12.34
  ]
]

参考サイト
How to get last executed query in Larave 5?(itsolutionstuff)
php Laravelで実行されたSQLを取得する方法(プログラマーの雑記さん)
Laravel5.5で、EloquentのSQLを確認するtoSql()とgetBindings()のメソッド

2017年10月17日火曜日

Laravel5.5で、EloquentのSQLを確認するtoSql()とgetBindings()のメソッド

Laravel5.5で、EloquentのSQLを確認するtoSql()getBindings()のメソッドです。toSql()で、SQLが確認できて、getBindings()で、バインド変数の実際の数値が確認できます。

// Eloquent
$blog = Blog::where('category', '=', 5)
            ->where('published_at', '>=', '2017-10-01');

// 出力
dd($blog->toSql(), $blog->getBindings());
実際に出力されるSQLとバインド変数の数値
"select * from `blogs` where `category` = ? and `published_at` >= ?"

array:2 [▼
  0 => 5
  1 => "2017-10-01"
]

参考サイト
Does Laravel's toSql() method mask ids? (column value being replaced by question mark)(Stack Overflow)
Laravel5でSQLを確認する(お手軽版)(Qiita)

2017年10月16日月曜日

Laravel 5.4から、Laravel 5.5 にアップグレード

Laravel 5.4から、Laravel 5.5 にアップグレードしてみました。特に躓くことなく、無事アップグレードできました。静かすぎて怖い(笑)。早速、デバック用のエラー画面が変わりましたね。Whoopsというエラー処理のフレームワークだそうです。エラーの発生場所がわかりやすくなっていますので、これは歓迎です。

composer.json
"scripts": {
  ...
  "post-autoload-dump": [
    "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
    "@php artisan package:discover"
  ],
}

参考サイト
Upgrade Guide(Laravel)
アップグレードガイド 5.5 (Laravel)

2017年9月3日日曜日

Nginxがアクセス数の多いサイトでシェア1位獲得

Nginxがアクセス数の多いサイトでシェア1位獲得したとのこと。特に驚くニュースではないかもしれませんが、気になったのは「Google Web Server」のシェア。トップサイトでのシェアがものすごい。

トップ100万サイトにおけるWebサーバ・ソフトのシェアはNginxは41.5%、Apacheは41.4%となっている。


参考サイト
Nginx、トップ100万サイトでシェア1位へ(マイナビニュース)

2017年9月2日土曜日

Laravel 5.5がリリース

Laravel 5.5がリリースされました。Laravel 5.5は長期サポート(LTS)版です(前回は5.1)。 長期サポート(LTS)版には2年間のバグ修正と3年間のセキュリティ修正が含まれています。一方、一般的なマイナーリリース版には、6ヶ月のバグ修正と1年間のセキュリティ修正が含まれています。



参考サイト
Laravel 5.5 LTS is Now Released(Laravel News)
Upgrade Guide(Laravel)

2017年8月30日水曜日

Laravel5.4で、blade内でURLセグメントを取得

Laravel5.4で、blade内でURLセグメントを取得です。「Request::segment」で、URLのセグメントを順に取得できます。

http://example.com/aaa/bbb/ccc

aaa を表示させるには、{{ Request::segment(1) }}
bbb を表示させるには、{{ Request::segment(2) }}
ccc を表示させるには、{{ Request::segment(3) }}

参考サイト
How to access URL segment(s) in blade in Laravel 5?(Stack Overflow)

2017年8月29日火曜日

Laravel5.4で、複数条件のユニークバリデーション

Laravel5.4で、複数条件のユニークバリデーションです。 商品(items)テーブルのサイズ(size)と色(color)、商品コード(code)をユニークにする入力チェックの例です。使いこなすまでに時間がかかりましたが、便利で強力なこと、この上なし。実装のコツは、デバックバーのSQLをチェックしながら、ああでもない、こうでもないと、試行錯誤を延々と繰り返すことです(笑)。

$validator[] = Validator::make($input, [
  'code' => 'required|alpha_num|unique:items,code,NULL,items,size,'.$input['size'].',color,'.$input['color'],
]);

参考サイト
Laravel5のバリデーションで複合カラムのユニークを実現(中小企業に勤めるITエンジニアの徒然日記さん)
composite-unique-key-validation - laravel(Stack Overflow)
Laravel5.3で更新の「unique」バリデーション
Laravel5.3でデバック用ツールバー「Laravel Debugbar」

2017年8月28日月曜日

MySQLで「Specified key was too long; max key length is 767 bytes」のエラー

MySQLで「Specified key was too long; max key length is 767 bytes」のエラーです。文字コードの「utf8mb4」がいけないのかと思い、「utf8」に変更してデータベースを作り直しても改善せず。次に「varchar(255)」のフィールドがキーになっていることが原因だろうと思い、「varchar(20)」「varchar(50)」「varchar(100)」など、可能な限り切り詰めたら、うまくデータベースを作成、復元できました。

Laravel5 でマイグレーションする場合は、サイズを指定すると良いと思います。
$table->string('name', 50);
$table->string('email', 100)->unique();

参考サイト
MySQLのUNIQUEなINDEXには長さ767byteまでしか使えない件と対策((tanamonの日記さん)
Mysqlでユニーク制約をつけたvarcharは767byteまでしか入らない話(Qiita)
Laravel 5.4: Specified key was too long error(Laravel News)

2017年8月27日日曜日

フロントエンドアプリ用JavaScriptライブラリ「Hyperapp」

フロントエンドアプリ用JavaScriptライブラリ「Hyperapp」 なんとか追いついていかないとというわけで、メモです。

HyperAppはインタラクティブなWebアプリケーションを構築するツールで、一方向のデータフローやJSX、バーチャルDOMなど、Reactで有名になった多くの概念を踏襲しています。Elmアーキテクチャーに基づいており、アプリケーション設計はElmやReact、Reduxと似ています。


参考サイト
超軽量で学習コストが低い最新JSライブラリー「HyperApp」とは何か(WPJ)
hyperapp – 1kbのビューライブラリ(Qiita)
hyperapp/hyperapp(GitHub)

2017年8月26日土曜日

スマートフォンでも10年使えるOSを目指す「postmarketOS」

スマートフォンでも10年使えるOSを目指す「postmarketOS」 なかなか面白い切り口だなと思いました。実際、インストールして利用するとなると、敷居が高そうな気がしないでもないですが、ニーズはあると思いますので、要チェックでしょう。



参考サイト
スマートフォン端末などを10年使えるようにすることを目指すOS開発プロジェクト「postmarketOS」(エキサイトニュース)

2017年8月25日金曜日

Laravel5.4で、コントローラーの共通関数

Laravel5.4で、コントローラーの共通関数です。CommonControllerを作成して、コントローラー内から、スタティックに呼び出せば良いらしい。スタティックに呼び出すのが気が進まないという場合は、CommonController自体を継承すれば良いのかな? 善し悪しは別として、とにかく、便利に使えます。

/app/Http/Controller/CommonController.php(共通関数)
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class CommonController extends Controller
{
  public static function total($x, $y)
  {
    return $x + $y ;
  }
}


/app/Http/Controller/CartController.php(コントローラーで共通関数を呼び出す)
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\CommonController as Common;

class CartController extends Controller
{
  public function index(Request $request)
  {
    $itemA = 100 ;
    $itemB = 200 ;
    $totalPrice = Common::total($itemA, $itemB);
  }
}

参考サイト
Laravel 5 - Where to define functions and call them in views & controllers(Stack Overflow)
How to add custom class in Laravel 5(Arjunさん)

2017年8月24日木曜日

Laravel5.4で、Artisanコマンド一行で、モデル、マイグレーション、コントローラーを一気に作成

Laravel5.4で、Artisanコマンド一行で、モデル、マイグレーション、コントローラーを一気に作成です。php artisan make:modelで「-crm」オプションを付ければ良いらしい。カッコイイ! 高速開発に寄与してくれること間違い無し(笑)。

$ php artisan make:model Blog -crm
Model created successfully.
Created Migration: 2017_08_25_000000_create_blogs_table
Controller created successfully.

参考サイト
Laravel Create Controller, Model and migration in one Artisan Command(Arjunさん)

2017年8月23日水曜日

PHPで、文章の最初の一行を抜き出す「strtok」

PHPで、文章の最初の一行を抜き出すコードです。strtokなんて文字列関数があるんですね。力技で挑めば、いろいろな方法があると思いますが、これ以上シンプルなコードは見つからないでしょう。気品さえ漂います(笑)。

$first_line = strtok($test, "\n");

参考サイト
Obtain first line of a string in PHP(Stack Overflow)

2017年8月22日火曜日

PHPで、16進数で指定された表示色を暗くしたり、明るくしたりする

PHPで、16進数で指定された表示色を暗くしたり、明るくしたりする関数です。見事に動いてくれるので、感動です。

function color_luminance( $hex, $percent ) {

  // 16進数色のチェック
  $hex = preg_replace( '/[^0-9a-f]/i', '', $hex );
  $new_hex = '#';
  if ( strlen( $hex ) < 6 ) {
    $hex = $hex[0] + $hex[0] + $hex[1] + $hex[1] + $hex[2] + $hex[2];
  }

  // 小数に変換して明るさを変更する
  for ($i = 0; $i < 3; $i++) {
    $dec = hexdec( substr( $hex, $i*2, 2 ) );
    $dec = min( max( 0, $dec + $dec * $percent ), 255 ); 
    $new_hex .= str_pad( dechex( $dec ) , 2, 0, STR_PAD_LEFT );
  }    

  return $new_hex;
}
// 元の色
$hex = "#fff68f" ;

// 10%明るく
$light_color = color_luminance( $hex, 0.1 ) ;

// 10%暗く
$dark_color = color_luminance( $hex, -0.1 ) ;

参考サイト
Lighten or darken a given colour(GitHub)
hexdec(PHP)
dechex(PHP)

2017年8月21日月曜日

Laravel5.4で、ユーザーの登録(/register)を無効にする

Laravel5.4で、ユーザーの登録(/register)を無効にする設定です。RegisterController.phpで、showRegistrationForm()をオーバーライドすれば良いらしい。

/app/Http/Controller/Auth/RegisterController.php(その1)
  public function showRegistrationForm()
  {
    abort(404);
  }

ミドルウェアを「auth」に変更すると、ログイン画面にリダイレクトされます。
これでも良いと思います。

/app/Http/Controller/Auth/RegisterController.php(その2)
  public function __construct()
  {
    $this->middleware('auth');
  }

参考サイト
How to disable registration new user in Laravel 5(Stack Overflow)
isable registration in built-in registration Laravel 5.3(Laracasts)

2017年8月20日日曜日

QRコードで決済「Origami Pay」

QRコードで決済「Origami Pay」 スマートフォンに専用アプリをインストールして、QRコードを読み取るだけで、決済できるというもの。面白いアイディアですね。今後注目のサービスだと思います。



参考サイト
QRコード買い物サービス拡大 スマホで読み取るだけで支払い(NHKニュース)
ドコモが「QR決済」導入 買い物代、毎月の携帯料金に合算 今年度、ローソンなどで(ITmedia エグゼクティブ)

2017年8月19日土曜日

オープンソースの情報共有化ツール「Pleasanter」

オープンソースの情報共有化ツール「Pleasanter」 C#で書かれています。ちょっと試させてもらいましたが、かなり高機能です。かなりの業務をウェブ上で共有できるようになるのではないでしょうか。素晴らしい。





参考サイト
プリザンター(GitHub)

2017年8月18日金曜日

PHPのSplFileObjectでCSVファイルを読み込み

PHPのSplFileObjectでCSVファイルを読み込みです。ファイルオープンして、fgetcsvでもいいですが、こちらの方がスマートかな? とにかく、気に入りました。

$filepath = 'sample.csv' ;
$file = new \SplFileObject($filepath) ; 
$file->setFlags(\SplFileObject::READ_CSV) ; 
foreach ($file as $line) {
  if (!empty($line[0])) {
    $data = [
      'id' => $line[0],
      'name' => $line[1],
      'price' => $line[2],
      'created_at' => $line[3],
    ] ;
  }
}

参考サイト
【PHP】CSVファイルの読み込み(Qiita)
SplFileObjectでオブジェクト指向らしいファイル操作をしてみる(Qiita)

2017年8月17日木曜日

Laravel5.4で、コントロラー内のミドルウェア

Laravel5.4で、コントロラー(Controller)内のミドルウェア(Middleware)です。 middleware('auth') は、よく使うとして、特定のメソッドにのみミドルウェアを適用することもできるんですね。ようやく、ミドルウェア(Middleware)の使い方がわかったかもしれません(笑)。

class UserController extends Controller
{
  public function __construct()
  {
    $this->middleware('auth');

    $this->middleware('aaa', ['only' => [
      'index',
      'show',
    ]]);

    $this->middleware('bbb', ['except' => [
      'edit',
      'update',
      'destroy',
    ]]);
  }
}

参考サイト
Controllers(Laravel)
Laravel 5.* multiple middleware whole controller(Stack Overflow)

2017年8月16日水曜日

Laravel5.4で、フォームをタイムアウトさせない「laravel-caffeine」

Laravel5.4で、フォームをタイムアウトさせない「laravel-caffeine」 タイムアウトを防ぐため、定期的にリクエスト(カフェインドリップ?)を送っているとのこと。 「_token」フィールドを持つページでのみで実装されていて、他のページは通常どおりタイムアウトするそうです。試していませんが、こだわりたい場合は便利かなと思いますのでメモ。



参考サイト
Laravel5.4で、CSRFのエラー処理「TokenMismatchException」

2017年8月15日火曜日

Laravel5.4で、CSRFのエラー処理「TokenMismatchException」

Laravel5.4で、CSRFのエラー処理「TokenMismatchException」です。ディフォルトだと、Symfonyのエラー画面が表示される(?)ようなので、例外処理でエラーを拾って処理すると、エレガントな振る舞いになるように思います。

/app/Exceptions/Handler.php
use Illuminate\Session\TokenMismatchException;

  /**
   * Render an exception into an HTTP response.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Exception  $exception
   * @return \Illuminate\Http\Response
   */
  public function render($request, Exception $exception)
  {
    if ($exception instanceof TokenMismatchException){
      return redirect('/csrf_error') ;
    }

    return parent::render($request, $exception);
  }

参考サイト
Laravel catch TokenMismatchException(Stack Overflow)

2017年8月14日月曜日

2017年8月13日日曜日

即座に数値データをインタラクティブに可視化してくれる「Tableau」

即座に数値データをインタラクティブに可視化してくれる「Tableau」 データベースに直結で、数値データを高度に分析してくれます。日々思うことですが、プログラマーは全くもって必要なくなりますね(笑)。





2017年8月12日土曜日

JavaScriptの日付ユーティリティライブラリ「date-fns」

JavaScriptの日付ユーティリティライブラリ「date-fns」 便利そうだったのでメモ。CDNも用意されています。

<script src="http://cdn.date-fns.org/v1.9.0/date_fns.min.js"></script>
<script>
  dateFns.isToday(new Date())
  //=> true
</script>



参考サイト
面倒なJavaScriptの日付の処理は「date-fns」でラクに片付けよう(ASCII.jp)
date-fns(GitHub)

2017年8月11日金曜日

一度にPOSTできる変数の数の上限「max_input_vars」

一度にPOSTできる変数の数の上限「max_input_vars」 こんな設定があったんですね。なんでデータを取得できないのか、しばらく悩んでしまいました。

php.ini
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000
max_input_vars = 3000

参考サイト
PHP5.3以降で一度にPOSTできる上限数(max_input_vars)を変更する(PHP工房さん)
PHP 5.3 max_input_vars and big forms(The eternal fight between admins and computersさん)

2017年8月10日木曜日

Laravel5.4で、セッションのタイムアウト時間設定

Laravel5.4で、セッションのタイムアウト時間設定です。設定ファイルのsession.phpで、変更が可能。lifetimeで、セッションの時間(分)を変更できます。expire_on_closeをtrueにすると、ブラウザを閉じると、セッションが切れます。ディフォルトでは、ブラウザを閉じてもセッションは保たれる設定らしい。

/app/config/session.php
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/

// 'lifetime' => 120,
'lifetime' => 60,

// 'expire_on_close' => false,
'expire_on_close' => true,

参考サイト
Laravel Inactivity time setting(Stack Overflow)

2017年6月5日月曜日

Laravel5.4で、Eloquent Modelデータをランダムに取得

Laravel5.4で、Eloquent Modelデータをランダムに取得です。inRandomOrder()メソッドで、良い具合に処理してくれます。5.4から追加されたらしい(?)。

$blogs = Blog::published()
      ->inRandomOrder()
      ->take(10)
      ->get();

参考サイト
eloquent - how get random row laravel-5(Stack Overflow)
inRandomOrder(Laravel API)

2017年5月20日土曜日

IoT市場を狙うLinuxベースOSの「Tizen」

IoT市場を狙うLinuxベースOSの「Tizen」 Tizenオペレーティングシステムは、異なる業界要件を満たすために複数のプロファイルで提供され、現在のTizenのプロファイルは、車載用、モバイル、テレビ、ウェアラブルなどがあるとのこと。





参考サイト
LinuxベースOS「Tizen 4.0」登場(マイナビニュース)

2017年5月14日日曜日

Microsoftのクラウド型分散NoSQLデータベース「Azure Cosmos DB」

Microsoftのクラウド型分散NoSQLデータベース「Azure Cosmos DB」  ユーザーがどこにいてもデータを透過的に拡大縮小し複製することで、任意のAzure地域にわたるグローバルな配信を提供します。 世界中のスループットとストレージを弾力的に拡張し、必要なスループットとストレージ分だけを支払う価格体系になります。 Azure Cosmos DBは、世界中どこでも99パーセントで1桁ミリ秒未満の処理を保証しますとのこと。



参考サイト
米MS、「惑星規模」でスケールする「Azure Cosmos DB」を発表(ITpro)

2017年5月13日土曜日

クラウド型のオープンソース分散SQLデータベース「CockroachDB」

クラウド型のオープンソース分散SQLデータベース「CockroachDB」SQLの豊富な機能とNoSQL製品に共通する水平スケーラビリティを組み合わせ、エンタープライズレベルの災害復旧を実現しますとのこと。

分散SQLによって完全に分散されたACIDトランザクションを提供できるという。また、スキーマ変更のダウンタイムはゼロで、セカンダリインデックスと外部キーもサポートする。


参考サイト
オープンソースの拡張性のあるSQLデータベース「CockroachDB 1.0」が公開(OSDN Magazine)

2017年5月12日金曜日

Laravel5.4で、本番環境とテスト環境の判定

Laravel5.4で、本番環境とテスト環境の判定です。

use Config;

$environment = env('APP_ENV');

if ($environment == 'production') {

}
if ($environment == 'staging') {

}
if ($environment == 'testing') {

}
if ($environment == 'local') {

}

参考サイト
[Laravel5]本番環境とテスト環境( or ローカル環境)で条件分岐させる方法(Qiita)
Configuration(Laravel)
Laravel5の「PHP dotenv」

2017年5月11日木曜日

Laravel5.4の、バリデーションリクエストで、データの新規登録時と更新時でチェックする内容を変える

Laravel5.4の、バリデーションリクエストで、データの新規登録時と更新時でチェックする内容を変える設定です。$this->method() で、リクエストタイプが取得できるので、それで場合分けすれば良いらしい。

  public function rules()
  {
    switch ($this->method()) {
      case 'POST':
        $rules = [
          'publiched_at' => 'required|date|after:now',
        ];
        break;
      case 'PATCH':
        $rules = [
          'publiched_at' => 'required|date',
        ];
        break;
      default:
        $rules = [
          'publiched_at' => 'required|date',
        ];
    }

    return $rules;
  }

参考サイト
Laravel 5 Validation Request, how to handle validation on update?(Laracasts)
Form Request Validation(Laravel)

2017年5月10日水曜日

Laravel5.4のcomposer updateでエラー「Could not scan for classes inside "app/tests/TestCase.php" which does not appear to be a file nor a folder」

Laravel5.4のcomposer updateでエラー「Could not scan for classes inside "app/tests/TestCase.php" which does not appear to be a file nor a folder」です。確かに、よく見ると、composer.json に指定があります。使ってないだろうと思って安易に削除すると、往往にして、こういうオチが待っています。

composer.json
"autoload-dev": {
  "classmap": [
    "tests/TestCase.php"
  ]
},

参考サイト
RuntimeException - Could not scan for classes inside app/tests/TestCase.php(Stack Overflow)

2017年5月9日火曜日

Laravel5.4では、ルートのRoute::resource()にmiddleware()は設定できない

Laravel5.4では、ルートのRoute::resource()にmiddleware()は設定できないらしいです。「Call to a member function middleware() on null」というエラーが出て、うまく機能しませんでした。というわけで、ミドルウェアを設定する場合は、面倒でも、一つ一つのルートを設定する必要があるようです。

// ☓ 使えない
// Route::resource('blog', 'BlogController')->middleware('middleware_name');

// ○ 面倒でも、一つ一つ設定する必要がある
Route::get('blog', 'BlogController@index')->name('blog.index')->middleware('middleware_name');

参考サイト
Middleware(Laravel)
Call to a member function middleware() on null(Stack Overflow)

2017年5月8日月曜日

Laravel5.4のbladeで、old()のデータにデフォルト値を設定

Laravel5.4のbladeで、old()のデータにデフォルト値を設定です。データを更新する際など、簡潔に書けると思います。今まで、ものすごい回り道をしていたように思います(笑)。

{{ old('name', 'デフォルト値') }}"

参考サイト
Old Input(Laravel)
Laravel blade "old input or default variable"?(Stack Overflow)

2017年5月7日日曜日

XMLHttpRequestの置き換え?「Fetch API」

XMLHttpRequestの置き換え?「Fetch API」 高度な処理がなされているらしいですが、インターフェースは単純で、リクエストとレスポンスがあり、ネットワーク上のリソースを取得するものと理解しました。

XMLHttpRequest と似たものではありますが、より強力で柔軟な操作が可能です。Fetch では Request と Response が一般的な形で定義されています。またネットワークリクエストに関連する様々なものも定義されています。これらは service worker や Cache API といったリクエストとレスポンスを扱う API や、独自のレスポンスを発生させる場面でも利用できるようになるでしょう。


参考サイト
Fetch API(MDN)
jQuery.ajax()の代替としてFetch APIをざっくり使ってみる(tacamy.blogさん)
Fetch API 解説、または Web において "Fetch する" とは何か?(Block Rockin’ Codesさん)
Fetch APIを使ってjQuery.ajaxみたいにデータをpostする(Qiita)
github/fetch(GitHub)

2017年5月6日土曜日

sshでリモートサーバーのファイルシステムをマウント「sshfs」

sshでリモートサーバーのファイルシステムをマウント「sshfs」 リモートシステム上にあるディレクトリやファイルをローカルマシン上にあるかのごとく操作できるという優れものです。発想が現代的ですねぇ。



参考サイト
sshでリモートサーバーをマウント、便利にsshfs(UNIX的なアレさん)

2017年5月5日金曜日

セキュアなDNSサービス「OpenDNS」

セキュアなDNSサービス「OpenDNS」を設定してみました。とりあえず、自分のサイトに問題なくアクセスできましたので、合格なのかな(笑)? しばらく使ってみることにしましょう。





参考サイト
高度なフィルタリングが無料で使えるDNSサービス「OpenDNS」(ウェブコンテンツさん)

2017年5月4日木曜日

Ubuntu16にPowerShellをインストール

Ubuntu16.04にPowerShellをインストールしてみました。結構簡単に導入できます。

$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
$ sudo apt-get update
$ sudo apt-get install -y powershell
$ powershell

PS /> dir
PS /> Get-Help *

参考サイト
PowerShell(GitHub)
Microsoftが「PowerShell」をオープンソース化

2017年5月3日水曜日

リクルートがAI「A3RT」を無料公開

リクルートがAI「A3RT」を無料公開したとのこと。複数のAPIが用意されています。日常会話レベルでの応答が可能な「Talk API」なんてのもありますね。試してはいませんが、面白そうなのでメモです。



参考サイト
リクルートがAIをまさかの無料公開。さっそくすべてのAPIを試しまくってみた(BITA デジマラボさん)

2017年5月1日月曜日

Laravel5.4で、ユーザーIDのみでログイン

Laravel5.4で、ユーザーIDのみでログインです。ユーザーIDだけでログインできるので、前段の認証部分を色々カスタマイズできると思います。

Auth::loginUsingId(1);

// ログインしたままに
Auth::loginUsingId(1, true);

参考サイト
Authentication(Laravel)
ユーザーのIDを利用してログインする(Laravel Recipesさん)

2017年4月30日日曜日

LinuxでAndroidアプリを実行するためのコンテナ「Anbox」

LinuxでAndroidアプリを実行するためのコンテナ「Anbox」 コンテナ技術を利用しているところが、新しい切り口ですね。

AnboxはAndroidオペレーティングシステムをコンテナに置き、ハードウェアアクセスを抽象化し、コアシステムサービスをLinuxに統合します。 すべてのAndroidアプリケーションは、他のネイティブアプリケーションと同様に、オペレーティングシステムと統合されます。





参考サイト
LinuxでAndroidアプリを実行するためのアプリ「Anbox」(マイナビニュース)

2017年4月29日土曜日

高速、超軽量コンテナOS「RancherOS」

高速、超軽量コンテナOSで、Dockerコンテナに特化した「RancherOS」がリリースされたとのこと。

システムサービスはDocker Composeによって定義され、cloud-initを使用して自動的に設定され、管理上の負担を軽減します。 不必要なライブラリとサービスが排除され、コンテナホストオペレーティングシステムの更新、パッチ適用、および保守の手間が最小限に抑えられます。





参考サイト
Dockerコンテナに特化した「RancherOS」リリース(Think IT)

2017年4月22日土曜日

Ubuntuで「fish」シェル

Ubuntuで「fish」シェルです。お遊びで、ちょっと試そうと思い、インストールしてみたのですが、気に入りました(笑)。コマンドの補完が、最高に素晴らしいです。しばらく使ってみることにします。

インストール
$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt-get update
$ sudo apt-get install fish



参考サイト
にわか管理者のためのLinux運用入門 [70] 便利シェル「fish」を使う(IT Search)

2017年4月21日金曜日

Laravel5.4で、CSVダウンロード

Laravel5.4で、CSVダウンロードです。ストリームのレスポンスを返すようにすると良いらしい。書き方が洗練されている感じがします(笑)。

return response()->stream($callback, 200, $headers);

  public function csvDownload()
  {
    $headers = array(
      "Content-type" => "text/csv",
      "Content-Disposition" => "attachment; filename=file.csv",
      "Pragma" => "no-cache",
      "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
      "Expires" => "0"
    );

    $callback = function() {
      $handle = fopen('php://output', 'w');

      $columns = [
        'id',
        'name',
        'email',
      ] ;
      mb_convert_variables('SJIS-win', 'UTF-8', $columns);

      fputcsv($handle, $columns);

      $users = User::all();
      foreach ($users as $user) {
        $csv = [
          $user->id,
          $user->name,
          $user->email,
        ] ;
        mb_convert_variables('SJIS-win', 'UTF-8', $csv);
        fputcsv($handle, $csv);
      }

      fclose($handle);
    };

    return response()->stream($callback, 200, $headers);
  }

参考サイト
laravel5.3 CSVダウンロードを実装する(あしたからがんばるさん)
CSV export in laravel 5 controller(Stack Overflow)
Laravel 5.2 Response::stream alternative(LARACASTS)
HTTP Responses(Laravel)

2017年4月17日月曜日

MySQLで「IN()」句でデータを取り出した際、指定した通りにORDER BYで並べ替える

MySQLで「IN()」句でデータを取り出した際、指定した通りにORDER BYで並べ替える方法です。FIELD関数を利用すると、うまく取得できます。FIELD関数は、文字列に利用するものと思われがちですが、数値に対しても有効らしい。今まで、苦労して並べ替えてましたよ(笑)。

SELECT * FROM blogs 
WHERE id IN (10, 9, 8, 7, 6, 5) 
ORDER BY FIELD (blogs.id, 10, 9, 8, 7, 6, 5)

参考サイト
MySQL ORDER BY IN()(Stack Overflow)

2017年4月16日日曜日

Twitterの次は「Mastodon」?

Twitterの次は「Mastodon」かもしれない? 分散型のネットワークで、500字まで書き込み可能とのこと。とりあえず登録してみましたが、使い方がよくわからない(笑)。



参考サイト
Twitterのライバル? 実は、新しい「マストドン」(Mastodon)とは!(プログラミング+)

2017年4月15日土曜日

Ubuntu 17.04がリリース

Ubuntu 17.04がリリースされました。独自GUIの「Unity」が採用される最後のバージョンだそうです。

カーネル4.10では仮想マシンがネットワークインタフェースを直接制御する機能を取り込んだ。
これまでパーティションとして自動構成されていたスワップ領域を、17.04からはファイルとして用意する。ユーザーは必要に応じてスワップ機能をオン/オフできる。


参考サイト
Ubuntu最新版「17.04」登場、スワップや印刷などを改善(ITpro)

2017年4月14日金曜日

Laravel5.4で、ログインイベントを取得して、ユーザーのログイン時刻を記録

Laravel5.4で、ログインイベントを取得して、ユーザーのログイン時刻を記録してみました。Laravelは、認証処理で様々なイベントを発生させてくれるので、 EventServiceProviderで、これらのイベントを取得することができるとのこと。

/app/Providers/EventServiceProvider.php
class EventServiceProvider extends ServiceProvider
{
  protected $listen = [
    'Illuminate\Auth\Events\Login' => [
      'App\Listeners\LogSuccessfulLogin',
    ],
  ];
}
その他の取得可能なイベント
protected $listen = [
  'Illuminate\Auth\Events\Registered' => [
    'App\Listeners\LogRegisteredUser',
  ],

  'Illuminate\Auth\Events\Attempting' => [
    'App\Listeners\LogAuthenticationAttempt',
  ],

  'Illuminate\Auth\Events\Authenticated' => [
    'App\Listeners\LogAuthenticated',
  ],

  'Illuminate\Auth\Events\Login' => [
    'App\Listeners\LogSuccessfulLogin',
  ],

  'Illuminate\Auth\Events\Failed' => [
    'App\Listeners\LogFailedLogin',
  ],

  'Illuminate\Auth\Events\Logout' => [
    'App\Listeners\LogSuccessfulLogout',
  ],

  'Illuminate\Auth\Events\Lockout' => [
    'App\Listeners\LogLockout',
  ],
];
$ php artisan event:generate
/app/Listeners/LogSuccessfulLogin.php
use Carbon\Carbon;
use Auth;

class LogSuccessfulLogin
{
  public function handle(Login $event)
  {
    $user = Auth::user();
    $user->last_login_at = Carbon::now();
    $user->save();
  }
}

参考サイト
Recording last login information using Laravel events(Steven Westmorelandさん)
Authentication(Laravel)

2017年4月13日木曜日

Laravel5.4で、「updated_at」の日時を変更せずにデータを更新

Laravel5.4で、「updated_at」の日時を変更せずにデータを更新する方法です。更新日時を記録したくない時もありますよね。

/app/Http/Controllers/BlogController.php
$blog = Blog::find(1);
$blog->timestamps = false;
$blog->title = 'ブログのタイトルをこっそりと更新';
$blog->save();

参考サイト
Update without touching timestamps (Laravel) - (Stack Overflow)
Eloquent: Relationships(Laravel)

2017年4月9日日曜日

Ubuntu 18.04のデスクトップがGNOMEに変更、スマホ開発も中止

Ubuntu 18.04のデスクトップがGNOMEに変更、スマホ開発も中止するそうです。英断と言えるのではないでしょうか。これでまた、デスクトップ市場でも、Ubuntuが席巻するようになるのかもしれません。



参考サイト
Ubuntu、UnityからGNOMEへ戻る - スマホ向け開発は中止(マイナビニュース)

2017年4月8日土曜日

Djangoフレームワーク 1.11がリリース

Djangoフレームワーク 1.11がリリースされました。長期サポート版(LTS)で、セキュリティ、およびデータ損失の修正が、少なくとも今後3年間適用されるとのこと。



参考サイト
Django 1.11がリリースされましたね(偏った言語信者の垂れ流しさん)

2017年4月7日金曜日

Laravel5.4で、ログインURLを変更

Laravel5.4で、ログインURLを変更してみました。認証されていないユーザーを処理するメソッド「unauthenticated()」が、/app/Exceptions/Handler.php にあるので、ここを変更すれば良いらしい。

/app/Exceptions/Handler.php
  protected function unauthenticated($request, AuthenticationException $exception)
  {
    if ($request->expectsJson()) {
      return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    // return redirect()->guest('login');
    return redirect()->guest('signin');
  }

参考サイト
How to change default redirect URL of Laravel 5 Auth filter?(Stack Overflow)

2017年4月5日水曜日

Laravel5.4で、MySQLのVARCHAR型、TEXT型カラムへのバリデーションには、面倒でも「max:(数値)」を設定すべき?

Laravel5.4で、MySQLのVARCHAR型、TEXT型カラムへのバリデーションには、面倒でも「max:(数値)」を設定すべきかもしれません。バリデーションをすり抜けてエラーになりました。MySQL自体は、入力が長すぎる場合は、適当にちょん切ってくれるような気がしましたが、違いましたかね?

/app/Http/Requests/StoreBlogPost.php
public function rules()
{
  return [
    'title' => 'required|max:100',
    'body' => 'required|max:1000',
  ];
}

参考サイト
Validation(Laravel)

2017年4月1日土曜日

ブロックチェーン版のLinux「Hyperledger」

ブロックチェーン版のLinux「Hyperledger」 Hyperledgerは、クロスインダストリーのブロックチェーン技術を推進するために作成されたオープンソース。 Linux Foundationが主催するグローバルなコラボレーション組織です。



参考サイト
「ブロックチェーン版Linux v1.0」は世界を変えられるか(ITpro)
オープンソースのブロックチェーン Hyperledger Fabric を試してみる(Qiita)
hyperledger/fabric(GitHub)

2017年3月31日金曜日

Laravel5.4で、ファイルの削除

Laravel5.4で、ファイルの削除です。無事、削除できました。

/app/Http/Controllers/UserController.php
use Illuminate\Support\Facades\Storage;

If (Storage::disk('profile')->exists($user->id.'/'.$user->pic)) {
  Storage::disk('profile')->delete($user->id.'/'.$user->pic);
}

参考サイト
Filesystem / Cloud Storage(Laravel)

2017年3月30日木曜日

Laravel5.4で、複数ファイルのアップロード

Laravel5.4で、複数ファイルのアップロードです。下の例で言うと、「$files = $request->file('pic');」という具合に、最初にまとめてアップロードファイルを取得して、それから、いろいろと操作するのがミソらしい。

/resources/views/user/upload.blade.php
{!! Form::open(['url' => ['upload', $user->id], 'files' => true]) !!}
  {!! Form::file('pic[]', ['multiple'=>true]) !!}
  {!! Form::submit('アップロード') !!}
{!! Form::close() !!}
/app/Http/Controllers/UserController.php
use Illuminate\Support\Facades\Storage;

if ($request->hasFile('pic')) 
{
  $files = $request->file('pic');
  foreach ($files as $file) {
    $savePath = $file->store($user->id, 'profile');
  }
}

参考サイト
Filesystem / Cloud Storage(Laravel)
Upload multiple files in laravel 5(Tutsnareさん)
Laravel 5.3 multiple file uploads(Stack Overflow)

2017年3月29日水曜日

Laravel5.4で、ajaxリクエストの送信

Laravel5.4で、ajaxリクエストの送信です。 CSRFトークン「csrf_token()」も送信するところがミソなのでしょう。

  $.ajax({
    type: "POST",
    url: url,
    data: { name:"名前", title:"タイトル", _token:"{{ csrf_token() }}" },
    cache: false,
    success: function(data, textStatus){

    },
    error: function(xhr, textStatus, errorThrown){

    }
  });

参考サイト
Sending ajax request in laravel 5(Stack Overflow)
Post data using ajax in laravel 5(Tutsnareさん)

2017年3月28日火曜日

Laravel5.4で、ストレージパス(Storage Path)の変更

Laravel5.4で、ストレージパス(Storage Path)の変更です。useStoragePath() で変更できますが、ログファイルの保存場所なども、全部変わってしまうので、注意が必要だと思います。

/app/Providers/AppServiceProvider.php
  public function register() {
    $this->app->useStoragePath('/path/to/storage');
  }

参考サイト
Filesystem / Cloud Storage(Laravel)
Change the storage path in Laravel 5(Stack Overflow)
laravel5.2のスタートアッププラクティス(Qiita)

2017年3月27日月曜日

Laravel5.4で、リクエストごとにバリデーションメッセージをカスタマイズ

Laravel5.4で、リクエストごとにバリデーションメッセージをカスタマイズです。 messages()関数でエラーメッセージを上書きできるので、かなり自由になる感じ。

/app/Http/Requests/StoreBlogPost.php
  public function messages()
  {
    return [
      'title.required' => 'ブログのタイトルを入力してください。',
      'title.min' => 'ブログのタイトルは10文字以上で入力してください。',
      'title.max' => 'ブログのタイトルは100文字以下で入力してください。',
    ];
  }

参考サイト
Laravel 5, custom error messages.(Laracasts)

2017年3月25日土曜日

オープンソースのネットワークバックアップソフト「Bacula」

オープンソースのネットワークバックアップソフト「Bacula」 ネットワーク上のデータのバックアップ、リカバリ、および検証を管理できるオープンソースプログラムです。 紛失したファイルや破損したファイルを簡単に見つけて復元する高度なストレージ管理機能も提供。試してないですが、要チェックです。



参考サイト
オープンソースソフトウェア「Bacula」で安心・安全なバックアップシステムを構築しよう(gihyo.jp)