著者アーカイブ takahashi

takahashi 著者:takahashi

Windows10 ビルド1809でクリップボードの機能が強化!履歴の確認や他の端末と同期などが可能に。

やっと自分のパソコンにもWindows10 1809(October 2018 Update)の更新が降ってきました…!

macOSにあるようなダークモードがWindowsでも使えるようになっていて、なかなか面白いです。

そんなバージョン1809ですが、クリップボードが大幅に改良されていることをご存知でしょうか。

履歴を再利用できるようになったクリップボード ~複数端末での同期も可能 – 窓の杜

1809以降のバージョンで設定を開き、システムを選択

中に”クリップボード”という項目があるので選択すると

こんな画面が出てくるので、

“クリップボードの履歴”をオンにします。

この状態で

Windows + V

キーを押すと、

こんなウインドウが。
この状態で何か文字をコピーすると…

こんな風に文字列が保存されます。

過去にコピーしたものは再起動まで残るので、二つ前にコピーした内容も表示できます。

さらに、画像のオプションを有効にすれば

クリップボードを同じMSアカウントにログインしている別の端末間で共有することもできます。

クリップボードの失敗談として、たまに焦って大事な情報をコピーしたまま元のウインドウを閉じた後で、別のアイテムをコピーしてデータ消失…なんていうやらかしを昔したことがあるので、この履歴機能はとてもありがたいです。

また、コピーした内容を今までSlackに貼り付けて別のPCに送ったりもしていたので、直接送ることができるのはとてもありがたいですね。

takahashi 著者:takahashi

FuelPHP + pdo_sqlsrv + SQL Server で「’NAMES’ は SET オプション として認識されません。」となったときの対処法

FuelPHPにSQL Serverを連携させたPHPのWebアプリを作ったときに出た問題。

SQL文自体には問題がなかったのですが、このようなエラーが発生しました。

原因はFuelPHP側の設定ファイルに文字コード設定を入れてしまっていたこと。

// fuel/app/config/db.php

return array(
    'default' => array(
        'type' => 'pdo', 
        'connection' => array(
            'dsn' => 'sqlsrv:Server=localhost;Database=hoge_db;',
            'username' => 'user',
            'password' => 'password123',
            'persistent' => false,
        ),
        'identifier' => '', 
        'table_prefix' => NULL,
        'charset' => 'utf8', //←これが原因
    )
);

charsetを入れると、DB呼び出し時にfuelが自動的に

SET NAMES 文字コード;

のようなSQL文を実行しようとします。

ところが、SQL Serverではこの”SET NAMES”オプションが廃止されており、これが原因でSQL実行時に毎回エラーになってしまいます。

対策としては

'charset' => 'utf8', 

'charset' => '', 

と書き換えれば、SET NAMESが行われなくなり、エラーが解決します。

いろいろ調べまくってやっと判明したぐらい細かい項目で、原因がわかるまで苦労しました…

お困りの方の参考になれば幸いです。

takahashi 著者:takahashi

eclipseにDBViewerPluginを追加する方法

無料のIDEであるeclipseですが、実はデフォルトではDBに接続・操作する機構を持っていません。
eclipse上からDBへ接続できるようにするには、プラグインを追加する必要があります。

ただ…

“新規ソフトウェアのインストール”ではリポジトリにパッケージがないため、インストールすることができません。

じゃあどうすればいいんやと困って探していたところ、こちらのサイトを発見。

DBViewerをEclipse2018-12で使用したい!! – Qiita

どうやら、DBViewerPluginを単体で入手して、eclipseのプラグインフォルダに突っ込めばいいとのこと。

まず、下記サイトからDBViewerPluginをダウンロードします。

DBViewer Plugin for Eclipse 開発プロジェクト – OSDN

バージョンはなるべく新しめの方がいいと思います。

上記サイトからプラグインのjarファイルを入手したら、これを

eclipseインストールディレクトリ/eclipse/plugin

に入れます。

eclipseに適用させるために、一旦eclipseを終了し、eclipseの本体が入っているディレクトリにある

eclipse.exe -clean.cmd

を実行します。

すると、キャッシュを一度削除したうえでeclipseが立ち上がります。

この状態で画面右上の”パースペクティブを開く”をクリックします。

すると、下の画像のようなウインドウが開きます。

一覧の中に”DBViewer”が追加されていれば成功です。

なお、実際にデータベースと接続するには、別途ドライバーが必要になります。

この辺りの設定方法についてはまた後日ご紹介します。

takahashi 著者:takahashi

MySQL 5.7で厳格になったパスワードポリシーを解除する方法

MySQLは5.7からrootパスワードがデフォルトで設定されていたりと、なにかと面倒な仕様変更が多いのですが、その流れで今回困ったことがあったのでご紹介したいと思います。

とりあえず、開発用のテスト環境としてセットアップをしたサーバーにMySQL5.7をセットアップし、エディタからSQLサーバーへアクセスできるようにするために、いつも通り外部からのアクセスが可能なユーザーを作成しようとしたのですが…

-- 実際にはもっと予想されにくい認証情報を指定しています。
GRANT ALL PRIVILEGES ON DBNAME.* TO user@'%' IDENTIFIED BY 'PASSWD123' WITH GRANT OPTION;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

…はいでました、ポリシー違反(汗
MySQL5.6あたりまでは平気で設定できていたパスワードも、ものによっては5.7以降になると単純すぎるとはじかれます。

本番環境であれば十分に複雑で、かつ大文字や記号が入っているパスワードがベストなのはわかっていますが、開発中は手動で何度も接続しないといけない場合があるため、複雑なパスワードにしてしまうとちょっと困ります。(もちろんオフィス以外から接続できないようにするなどの別の対策はとってます。)

なんとか緩いパスワードを設定したいと探したところ、SQL上でパスワードポリシーを変更する方法を見つけました。

mysql5.7でパスワードを変更する – Qiita

MySQLのシェルに入った状態で、次のSQL文を入力します。

-- パスワードの最低文字数を4文字に変更
SET GLOBAL validate_password_length=4;
-- 要求するポリシーレベルを"LOW"に変更
SET GLOBAL validate_password_policy=LOW;

これで再度

GRANT ALL PRIVILEGES ON DBNAME.* TO user@'%' IDENTIFIED BY 'PASSWD123' WITH GRANT OPTION;

を実行してみると…

Query OK, 0 rows affected (0.00 sec)

無事成功しました。

MySQL 5.7から結構あちこち変更されているので、今までのノリで触っていると戸惑ってしまうような変更が結構ありますが、その仕様変更に当たっても、焦らずに一つ一つ解決していきたいですね。

takahashi 著者:takahashi

Linux上でSambaをGUIで設定する方法

2019/4/17追記:
肝心のsamba設定ツールのコマンドの名前が間違っていたため訂正いたしました。大変失礼いたしました。

Linux上でWindowsのファイル共有の仕組み(smb)を使ったファイル共有サーバーを構築することができるSambaですが、本家Windowsのファイル共有と比較した際の難点として、設定のしづらさがあります。

Linuxでは基本的に設定は特定のテキストファイルに記述することが多く、Sambaもこの方式になっています。
また、変更した設定ファイルの内容を適用させるには、sambaを一度再起動させる必要があります。

一方、本家のWindowsファイル共有は簡単に許可するユーザーを変えたり、フォルダ名を簡単に書き換えたりすることができる利点があり、設定が簡単で、初心者でも比較的扱いやすいのがメリットだったりします。(細かく権限を指定していくと面倒だったりしますが…)

…そう考えると、ちょっとSambaってめんどくさい…って感覚になってきますよね。

一応、デスクトップ環境としてGNOME系のものを搭載している環境であれば、Nautilusという(Windowsのエクスプローラーにあたる)アプリケーションからGUIでSambaを設定することができますが…

共有のON/OFFや書き込みの可能・不可能、ユーザーアカウント無しでのログインの設定のみしかできず、例えば”特定のユーザーにのみ許可をして、それ以外のユーザーのアクセスは拒否する”といったような設定ができません。

ということで、なんとか設定を簡単にできないかなぁと調べたところ、意外にも”詳細設定が可能な”GUIツールがありました。

system-config-samba

というツールです。

Ubuntuでは

sudo apt install  system-config-samba 

でインストールできます。

起動にはgksuが使えるユーザーアカウントでログイン中である必要があります。

起動するとこのような画面に。
現在Samba上で管理されている共有フォルダの一覧が表示されます。

メニューバー部分から

ワークグループの設定や

認証方法の設定

共有フォルダのパスや共有名の設定、
そして…

自分が一番欲しかったディレクトリごとのユーザー別の許可設定もちゃんとありました!!!
これはありがたい…

今後OSやSambaのアップデートによっては使えなくなる可能性もありますが、現状一通り設定が網羅されているようで使い勝手もバッチリです。
また、設定を変更するたびにsambaデーモンを再起動する必要もなさそうでした。

これでLinuxで構築するSambaもかなり使い勝手がよくなりそうです。

sambaの設定でお困りの方は試してみてください。

takahashi 著者:takahashi

今年もはっちゃけまくってます! 企業のエイプリルフール合戦 in 2019

どうも、ついに彼女ができました!たかしーです!!!(いつもの…

はい、今年もやってきました4/1!
そう、皆さんご存知エイプリルフールです!!!

インターネット上ではここ最近、毎年4/1になるといろんな企業が知恵を絞ってユーモアを投げつけ合う”エイプリルフール合戦”が発生するのが恒例となっています。

今年も面白すぎるネタがネット上で飛び交っていますので個人的に気になったものをご紹介したいと思います。

1.JALのオリジナルドリンク”スカイタイム” キウイがパワーアップ!なんと搾りたての本物のキウイが楽しめる!?

JALが航空機内などで提供しているオリジナルのドリンク”スカイタイム”のキウイ味がパワーアップし、なんと本物のキウイ果肉を生絞りにしたジュースを贅沢に楽しむことができるとのこと。

飛行機で優雅に過ごしながら、果肉たっぷりのキウイジュースをゆっくり楽しむ…贅沢(?)ですねw

2.デニーズとジョナサンがコラボ(?)で共同開発!?お客さんの”脳に直接”料理の味を届ける新店舗”ジョニーズ”をオープン!?

なんとあのファミレスのデニーズとジョナサンが手を組み、最新技術を駆使して”お店の味”を直接お客さんの脳に届けてくれる”ジョニーズ”という店舗をオープンしたようです。

写真だと脳にチップが入っていることを思わせる女性が映ってますし、実際に食べずして味だけを楽しむなんてヤバすぎる(汗
エイプリルフールでよかった…

ダイエットの時は便利かもですけどねw

3.PS4は職人の手作りで作られていた!?

人気のゲーム機のPS4ですが、その製造工程の写真が公開。
なんと職人さんが一つ一つ丁寧に手作りで仕上げていたようです。

しっかしソニーさん、写真の合成の仕方が雑すぎです…(それがまた面白いのですがw)

4.バーミアン「餃子は実質カロリーゼロ」

なんとあのバーミアンが餃子のカロリーを飛ばしながら調理する方法を発見したようです…!
これは食いしん坊な人にとっては朗報ですね!!!

今後はラーメンにも応用していきたいということで、ラーメン好きの人からも期待が寄せられそうですね。

5.タカラトミーがご当地プラレールを 「ふるさとレール」 を発表!

なんと47都道府県分すべてのご当地レール、その名も「 ふるさとレール 」をつくると発表。


そして我らが静岡のご当地レールはこれ

タカラトミーさん張り切りすぎっす…

そして毎年欠かさずエイプリルフールに参加しているベテラン、GoogleのGboardチームですが、今年は…

なんと文字入力をスプーン曲げでできてしまうというGboard スプーン曲げバージョンを発表。

なるほど、柔軟(物理)な入力方法ということですね。
でもその柔軟さゆえに思うような文字入力が可能なのか気になりますw

ちなみに、ただエイプリルフールで終わらせないのが面白いところで、今回もちゃんとハードウェアの設計図がGitHubに上がっています。

と今年もかなりカオスな様相を呈している2019年のエイプリルフールですが、そんなエイプリルフールにもルールが存在していることをご存知でしょうか。

所説ありますが、大体まとめると下記の2点になります。

・人が不幸になる(いやな思いをする)嘘をつかない

・午後はネタばらしタイムとする

なお、エイプリルフールにネタとして使った嘘は、一年間現実にならないというジンクスがあるそうです。

嘘をつく際はくれぐれもお気を付けください…w

それでは、良いエイプリルフールを!

takahashi 著者:takahashi

Google+が4/2に終了。サービス終了に備えてできることまとめ。

GoogleのSNSサービス”Google+”が4/2にサービス終了予定となっています。

終了する理由としては、利用者の増加が見込めなくなった点、そして、 “Google+ People API” の不具合が原因で非公開設定にしている個人データ(名前、メールアドレス、職業、性別、年齢など)に開発者がアクセスできてしまう事件が発生し、トドメになってしまったようです。

“世界中の情報を整理する”ことを野望とし、実際に世界中の情報を整理するというかもはや牛耳る勢いで様々なサービスを出してきたGoogleですが、そんなGoogleであっても他の巨大なSNSサービスに勝つことができなかったという事実に無常観を感じます。

なお、G Suite (有料の企業向け) 版Google+は継続される予定のようです。

利用者が伸びなかったとはいえ、Google+を愛用していたユーザーは一定数いるはずです。
そんなユーザーの皆さんには、せめてデータをバックアップしておきたい、という方もいらっしゃるかと思います。

ありがたいことに、GoogleはGoogle+に限らずGoogleアカウントを利用したあらゆるサービスのデータのバックアップを取得することができる仕組みを用意しています。

バックアップを取得するには、まずGoogleアカウントの”自分のデータをダウンロード“ページへ移動します。

すると、バックアップ可能なGoogleのサービスの一覧が表示され、バックアップを取得したいサービスにチェックボックスを入れる画面が出てきます。

Google+のみをフルバックアップしたい場合はこの4項目にチェックを入れておけばよさそうです。

バックアップを取得する際には形式や取得方法などのオプションを選ぶことができます。

オプションを指定したら”アーカイブを作成”をクリックします。

アーカイブ作成中の画面へ移行します。
僕の場合はデータ量が少なかったのですぐにダウンロード可能な状態になりましたが、Google+に多くの投稿をしていたユーザーの場合はアーカイブが準備されるまで、かなりの時間がかかるかもしれません。

“ダウンロードリンクをメールで送信”を選択した場合、準備が完了するとメールが送信され、その中にある”アーカイブをダウンロード”をクリックするとこのような画面になります。

ダウンロードしたzipファイルを解凍すると、このような形でデータが格納されていました。

Twitterのエクスポートと違い、画像ファイルなどもすべて出力してくれるのはありがたいですね。
投稿もスタイルこそなかったものの完全な状態で保存できていました。

エクスポートがちゃんとできることは分かりましたが、そうはいってもサービスの終了というのはなかなか大きな影響を与えるものです。

利用者の得られなかったGoogle+ですが、同じGoogleから独立したNiantic社で開発・配信されている位置情報ゲーム”Ingress“では、Google+がエージェント(Ingressでは参加ユーザーのことを”エージェント”と呼ぶ)同士のコミュニケーションや公式からのアナウンス情報を受け取るのに欠かせないツールとなっていたようで、少なからず影響を受けるようです。

そんな状況を鑑みてIngress公式では、新たな”専用のSNS”へ移行する、という計画を立てているようです。

『Ingress』Google+終了後どうなるの!? グローバルコミュニティマネージャー アンドリュー・クルーグ氏に対策を訊く – ファミ通

新しいSNSでもGoogle+同様の役割を担わせることができるのか、注目ですね。

Google+の順次閉鎖開始まで残りわずかです。

Googleは公式アナウンスで”2019 年 3 月 31 日より前にダウンロードを開始してくださいますようお願いいたします。”としています。

Google+を使用中のユーザーの皆さんは早めにデータのエクスポートや他サービスへの移行をしておいた方がよさそうです。

takahashi 著者:takahashi

LaravelをNginxで動作させる際の設定

LaravelではどのURLを指定されても、(自分の担当するパス配下へのリクエストであれば)Laravel自身を起動させるために必ずpublic/index.phpを経由させる必要があります。

この設定はPHPだけでは限界があるため、Webサーバー側の設定で対応する必要があります。

Laravelのパッケージにはこの”index.phpを必ず経由させる”という設定が書かれた設定ファイルがデフォルトで含まれています。
具体的には

public/.htaccess

上記のファイルがこの設定ファイルにあたります。
ところが、この.htaccessファイルは基本的にApacheなどのごく一部のWebサーバーでしか認識しないので、たとえは先日の記事のようにnginxにPHPをインストールした環境で動作させようとしても、そのままではうまく動いてくれません。

この場合、.htaccessに書かれている設定と同様の働きになる設定をWebサーバーの設定ファイルに指定する必要が出てきます。
ただし、その記述の仕方もApacheとは異なってきますので、各Webサーバー用の書き方に書き換えないといけません。

nginxの場合、.htaccessの中身をnginx用の設定に書き換えてくれるWebサービスがあり、まず最初にこのサービスを使って変換した設定ファイルを使って設定を行ってみました。

元の.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

上記サイトで変換後のnginxコンフィグ

# nginx configuration

location / {
  if (!-e $request_filename){
    rewrite ^(.*)$ /%1 redirect;
  }
  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php break;
  }
}

実際に入れ込むと以下のようになります。

server {

  listen        80;
  listen        443 ssl;

  server_name  example.com;

  ssl_certificate       /path/to/ssl/fullchain.pem;
  ssl_certificate_key   /path/to/ssl/privkey.pem;

  root /path/to/docroot;
  client_max_body_size 1g;
  location / {
        if (!-e $request_filename){
                rewrite ^(.*)$ /%1 redirect;
        }
        if (!-e $request_filename){
                rewrite ^(.*)$ /index.php break;
        }      
        index index.php index.htm index.html;
  }
  location ~ \.php$ {
    if (!-e $request_filename){
        rewrite ^(.*)$ /%1 redirect;
    }
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php break;
    }
    fastcgi_pass   unix:/var/run/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
    allow all;
  }
}

ところが、上記のような設定を行ったところ、リダイレクトループに陥ってしまいます。

いろいろ調べたところ、Nginx向けのLaravel用の設定が公開されていました。

nginxをLaravel5.4用に設定する – Qiita

上記の記事を基に今回の場合の設定ファイルを書き換えてみます。

server{
   listen        80;
   listen        443 ssl;

   server_name  example.com;

   ssl_certificate       /path/to/ssl/fullchain.pem;
   ssl_certificate_key   /path/to/ssl/privkey.pem;

   root /path/to/docroot;

   location / {     
        index  index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

全然違うじゃん…

やはり、ただ設定を変換しただけではうまく行かないみたいですね。

参考元の記事ではLaravel5.4となっていましたが、5.6の環境でも同様の設定で問題なく動作しました。

Laravel + Nginxの構築でお困りの方の参考になれば幸いです。

takahashi 著者:takahashi

AmazonLinux 2 + Nginx でPHPを使えるようにする方法

Nginxはリバースプロキシとしてかなり優秀なサーバーアプリケーションで、自分も愛用しているのですが、あくまでリバースプロキシとしてしか使っていませんでした。

しかし、Nginxの本来の役割はWebサーバーですので当然Nginx自身がアプリの動作環境になることも可能です。

今回機会があってAWS EC2上のNginxで直接アプリケーションを動かす必要が出てきたので、実際にセットアップしてみました。

NginxにはApacheのようにモジュールを組み込んでPHPを動作させるような仕組みがない為、CGIを利用して動作できるようにします。
ただ、通常のCGI版PHPだと重いので、Fast CGI版のPHPが利用できるphp-fpmを利用します。

今回はPHP7.1の環境をインストールします。

まずは必要なパッケージをインストールします。

#epelリポジトリをインストール
sudo yum -y install epel-release

#remi リポジトリをインストール
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

#nginxをインストール
sudo yum -y install nginx

#php-fpm(php7.1)をインストール
sudo yum -y install --enablerepo=remi,remi-php71 --disablerepo=amzn2-core  php-fpm
#※--disablerepo=amzn2-coreしておかないと古いphp-fpmがインストールされます。

インストールが完了したら設定していきます。

sudo vi /etc/php-fpm.d/www.conf

次の項目を編集します。

;localから参照するのでUNIX SOCKETを設定。
- ;listen = 127.0.0.1:9000;
+ listen = /var/run/php-fpm.sock

;UNIX SOCKETファイルのユーザーとグループの指定(指定しないとrootとなるが、nginxからアクセスできなくなる。)
- ;listen.owner = nobody
- ;listen.group = nobody
+ listen.owner = nginx
+ listen.group = nginx

Nginx側も設定を変更します。
Nginxでは各バーチャルホストごとの設定を定義するserverセクションに記述します。

server {

  listen        80;
  listen        443 ssl;

  server_name  example.com;

  ssl_certificate       /path/to/ssl/fullchain.pem;
  ssl_certificate_key   /path/to/ssl/privkey.pem;

  client_max_body_size 1g;
  location / {
        root /path/to/docroot;
        index index.php index.html index.htm;
        allow all;
  }
  location ~ \.php$ {
    root           /path/to/docroot;
    fastcgi_pass   unix:/var/run/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
    allow all;
  }
}

基本的には上記のような設定でOKです。

設定が完了したらphp-fpmとnginxを再起動します。

sudo systemctl start php-fpm nginx
sudo systemctl enable php-fpm nginx

あとはおなじみのphpinfo();をドキュメントルートに置いて、phpが実行されているか確認します。

vi /path/to/docroot/phpinfo.php
<?php
    phpinfo();
?>

あとは

http://example.com/phpinfo.php

のようにして、phpの環境情報が表示されれば成功です。

takahashi 著者:takahashi

ある意味Google検索よりもすごいかもしれない。NICT “WISDOM X”

NICTが公開しているサイトに WISDOM X と呼ばれるサイトがあります。
WISDOM Xは入力されたワードをもとにインターネット上から関連しそうな情報を探し出す、いわゆる”検索エンジン”なのですが、他の検索エンジンとは異なる特徴があります。

それは自然な文で質問をするような形式で検索ができること。

例えば、”地球温暖化が進むとどうなる?”とか”なぜスペースシャトルは退役したのか”などの質問文で検索をかけることができ、WISDOM XのAIがネット上全体から質問に関連しそうな情報を集めて一覧で表示してくれます。

NICTはWISDOM Xを開発した理由として 一つの検索ワードからあらゆる情報が手に入れられるような仕組みを作ることで、 “イノベーションを促すこと”としています。

大規模Web情報分析システム「WISDOM X(ウィズダム エックス)」をWeb上に試験公開 – NICT

従来とは違う、別の切り口から検索を行うという試みもとても面白いですね。

最近調べ物で困っている…という方は是非試してみてはいかがでしょうか。