ほのぼのぼのぼの

ひよっこエンジニアのほのぼの記録

Mac の JIS キーボードでバックスラッシュ \ を入力したい

はじめに

最近の Mac の JIS キーボードでバックスラッシュ \ を入力するためには option + ¥ を押す必要がありました。PHPStorm 使いの僕、ああしんどい。

これまでこれを実現するには、 Karabiner-Elements で Complex Modifications 用の設定ファイルを書かないといけないようでした。

結論

  1. Karabiner-Elements をインストール
  2. https://pqrs.org/osx/karabiner/complex_modifications/#swap_yen_and_backslash_jis で設定ファイルを import
  3. Karabiner-Elements で Complex Modifications の「Change ¥ to Alt+¥」と「Change Alt+¥ to ¥」をEnable にする

以上!幸せ!

過程

ここを読んで、ああ自分で設定ファイルつくらないとなのね。と察しました。

github.com

いろいろ見ていったら、設定ファイルのプルリクがでておりました。 20時間前・・・

github.com

大変助かりました、、、ありがとうございます。

Dialogflow で LINE BOT を作ってみました

はじめに

DialogflowGoogle が提供する Google Assistant のアプリを作れるツール。

Webhookを使った初めてのアシスタント向けアプリ - ビットコイン情報

こちらのチュートリアルを参考に作ってみたのですが,コーディングなしに簡単にできてしまって, ことばのチューニングもできてしまって・・・と,感動してしました。

このチュートリアルで作成したアプリを拡張して,
今回は,Dialogflow の連携機能のひとつである,Line Messaging API との連携をやってみました。

やったこと

Dialogflow の連携機能について

なんだか気になる項目が沢山あります・・・

f:id:u9bo:20180321131503p:plain

今回は LINE を試してみました。

Line Messaging API (Channel)の登録

https://developers.line.me/console/register/messaging-api/provider/ から登録します。
困ったら,こちらのガイド( Messaging APIを利用するには )が参考になりそうです。

特筆すべき点として,

  • プロバイダー名を変更したい場合は,別途プロバイダーを作成する
  • プランは,Developer Trial を選択

あたりでしょうか。サクサク進めていくと Channel の登録が完了します。

Channel の設定

メッセージ送受信設定

  • アクセストークン(ロングターム)を発行
  • Webhook送信:利用する
  • WebhookURL:※後で設定します

LINE@機能の利用

  • 自動応答メッセージ:利用しない

LINEアプリへのQRコード

設定が終わったら,LINEで友達になっておきましょう。

Dialogflow との連携

Dialogflow に 先ほど作成した Channel の情報を登録していきます。
入力する値は以下のとおりです。

  • Channel ID : 基本情報の Channel ID
  • Channel Secret : 基本情報の Channel Secret
  • Channel Access Token : メッセージ送受信設定のアクセストークン(ロングターム)

f:id:u9bo:20180321140633p:plain

入力が終わったら,Webhook URL をコピーして,メッセージ送受信設定→ WebhookURL に入力します。

f:id:u9bo:20180321140715p:plain

最後に Dialogflow で START ボタンをクリックして,BOTを有効にします。

動作確認

Channel の メッセージ送受信設定→ WebhookURL で接続確認をクリックしてみましょう。成功しましたと表示されたらOKです。

実際に動かしてみた

動かしてみました。いい感じ。

Ubuntu 16.04 LTS から 17.10 にアップグレードしてみた

いろいろ悩まないように LTS 版を使っていたのですが、家で使う環境だしパッケージマネージャでいろいろ入れたいし、 で通常版に乗り換えました。

再インストールしたほうが安心なのですが、怖いものみたさでアップグレードしてみました。

でもやっぱり怖かったので、次は再インストールにしておきます。。。

手順

作業した環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"

やったこと

SSH でアップグレードするのは非推奨とのこと。ダメだったら再インストールすればいいや〜な気持ちで、試してみました。

LTS から 通常版に切り変える

$ sudo vim /etc/update-manager/release-upgrades 

Prompt=lts から Prompt=normal に変更

アップグレード

$ sudo do-release-upgrade
Checking for a new Ubuntu release
:
:

キャッシュを読み込み中

パッケージマネージャーをチェック中です

SSH経由で実行していますが、続けますか? 


このセッションはSSH上で実行されているようです。アップグレードをSSH越しに行うことは推奨されません。アップグレードに失敗した時の復元が困難になるからです。 

続行する場合、追加のSSHデーモンをポート '1022' で起動します。 
本当に作業を進めてよろしいですか? 

あとは待つのみ。。。

たまに、設定ファイルを最新に置き換えるか現在の設定を保持するか質問されます。
この場合は、差異を確認して問題がなさそうだったら現在の設定を使うようにしました。

設定ファイル '/etc/nginx/nginx.conf'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** nginx.conf (Y/I/N/O/D/Z) [デフォルト=N] ? 

アップグレード完

再起動すると 17.10 で起動します。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION="Ubuntu 17.10"

おしまい。

続・Raspberry Pi で時報を作る

あらまし

過去の記事の続きです。

9bo.hateblo.jp

前回は Raspberry Pi 2 で作ったのですが,今回は使っていなかった Raspberry Pi 3 があったのでこっちでやってみました。

Raspberry Pi 3 の好きなポイント

  • Wifi に対応
  • スペックアップ
  • USB 4つもついている

やったこと

Pi 2 → Pi 3 のインストールでハマったポイント

久々のインストールでいろいろ変わっていました。

忘れそうなのでやったことをまとめました

AirPlay も使えるようにしてみた :)

コマンド一発でインストールできて幸せ

Setup AirPlay

おわりに

手順を忘れそうなのでメモっただけでした。
実際に使ってみたなどのまとめはまたどこかで。

Webサイトのスクリーンショットを自動で保存してみました

はじめに

いろいろな Web サイトのデザインや機能の変更が気になります。

ただ,いろんな Web サイトを定期的に訪れてウォッチするのは面倒くさいし,ページ構成を覚えておかないと, あれ?こんな機能あったっけ?と機能が追加されたのか,はたまたウォッチ漏れだったのかよくわからなくなってしまいます。

そこで,自動でいろいろな Web サイトのスクリーンショットを撮影できたらいいな!と思い試してみました。

やってみた

使ったもの

プログラム

Puppeteer のサンプルコードに,スクリーンショットを撮るプログラムがあります。今回はこちらをベースに,複数の Web サイトのスクリーンショットを撮れるようにしてみました。

'use strict';

const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');

const urls = [
  'http://www.yahoo.co.jp',
  'https://www.rakuten.co.jp/'
];

(async() => {

  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.emulate(devices['iPhone 6']);
  let fname = null;
  for(let url of urls){
    console.log(url);
    fname = url.replace(/\//g, '_').replace(/:/g,'');
    await page.goto(url);
    await page.screenshot({path: `${fname}.png`, fullPage: true});
  }
  await browser.close();

})();

作ったプログラムをなくしてしまうことが多いので,GitHubに上げました。

github.com

動かしてみました

$ git clone https://github.com/9bo9bo/pageCapture
$ cd pageCapture
$ npm install 
$ node index.js

f:id:u9bo:20171203211346p:plain

おわりに

複数の Web サイトのスクリーンショットを取得するプログラムをつくってみました。cron などに登録しておけば,特に意識しなくともスクリーンショットが蓄積されていって素敵です。

今後のタスクとして,取得したスクリーンショット同士の画像差分を取って,サイトの変更点を示せるようにすることが挙げられそうです。

PHP の設定が不明な時に叩いたコマンドたち

Homestead で導入された UbuntuPHP の設定がわからない時に叩いたコマンドなど。

はじめに

phpunit が失敗する。

$ phpunit --colors=always --coverage-html 
PHPUnit 5.7.23 by Sebastian Bergmann and contributors.

Error:         No code coverage driver is available

環境

Homestead v6.5.0

PHP のバージョン

$ php --version
PHP 7.0.24-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Sep 28 2017 16:20:59) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.24-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
    with blackfire v1.18.0~linux-x64-non_zts70, https://blackfire.io, by SensioLabs

PHP の場所

$ which php
/usr/bin/php

複数のバージョンが入っていそうだったので本当にそれか確認

$ ls -al /usr/bin | grep php
lrwxrwxrwx  1 root   root          21 Oct 16 12:39 php -> /etc/alternatives/php
-rwxr-xr-x  1 root   root     4488224 Sep 28 19:33 php5.6
-rwxr-xr-x  1 root   root     4434992 Sep 28 17:01 php7.0
-rwxr-xr-x  1 root   root     4571168 Sep 29 17:48 php7.1
-rwxr-xr-x  1 root   root     4859104 Sep 28 17:19 php7.2

/etc/alternatives の先にいるらしい。

$ ls -al /etc/alternatives | grep php
lrwxrwxrwx   1 root root    15 Nov 26 13:36 php -> /usr/bin/php7.0

やっと/usr/bin/php7.0が参照されていることがわかった。

alternatives で参照される PHP を切り替える

ググってみると、alternativesという仕組みを使うと、複数のバージョン(PHPとかRuby)を切り替えて使えるそうな。

で、phpコマンドで呼ばれるPHPを切り替えるには、次のコマンドを実行する。

$ sudo update-alternatives --config php
There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php7.2   72        auto mode
  1            /usr/bin/php5.6   56        manual mode
* 2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode

Press <enter> to keep the current choice[*], or type selection number:

よしなに選択。執筆時点(2017/11/26)では Homestead で指定される PHP は 7.1 だった。 たまたま 7.0 で動かしたかったので、ここで切り替えた(上記結果は切り替えた後)。

php.ini の場所

$ php --ini
Configuration File (php.ini) Path: /etc/php/7.0/cli
Loaded Configuration File:         /etc/php/7.0/cli/php.ini
Scan for additional .ini files in: /etc/php/7.0/cli/conf.d
Additional .ini files parsed:      /etc/php/7.0/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.0/cli/conf.d/10-opcache.ini,
/etc/php/7.0/cli/conf.d/10-pdo.ini,
/etc/php/7.0/cli/conf.d/15-xml.ini,
/etc/php/7.0/cli/conf.d/20-bcmath.ini,
/etc/php/7.0/cli/conf.d/20-calendar.ini,
/etc/php/7.0/cli/conf.d/20-ctype.ini,
/etc/php/7.0/cli/conf.d/20-curl.ini,
/etc/php/7.0/cli/conf.d/20-dom.ini,
/etc/php/7.0/cli/conf.d/20-exif.ini,
/etc/php/7.0/cli/conf.d/20-fileinfo.ini,
/etc/php/7.0/cli/conf.d/20-ftp.ini,
/etc/php/7.0/cli/conf.d/20-gd.ini,
/etc/php/7.0/cli/conf.d/20-gettext.ini,
/etc/php/7.0/cli/conf.d/20-iconv.ini,
/etc/php/7.0/cli/conf.d/20-igbinary.ini,
/etc/php/7.0/cli/conf.d/20-imap.ini,
/etc/php/7.0/cli/conf.d/20-intl.ini,
/etc/php/7.0/cli/conf.d/20-json.ini,
/etc/php/7.0/cli/conf.d/20-mbstring.ini,
/etc/php/7.0/cli/conf.d/20-msgpack.ini,
/etc/php/7.0/cli/conf.d/20-mysqli.ini,
/etc/php/7.0/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.0/cli/conf.d/20-pdo_pgsql.ini,
/etc/php/7.0/cli/conf.d/20-pdo_sqlite.ini,
/etc/php/7.0/cli/conf.d/20-pgsql.ini,
/etc/php/7.0/cli/conf.d/20-phar.ini,
/etc/php/7.0/cli/conf.d/20-posix.ini,
/etc/php/7.0/cli/conf.d/20-readline.ini,
/etc/php/7.0/cli/conf.d/20-shmop.ini,
/etc/php/7.0/cli/conf.d/20-simplexml.ini,
/etc/php/7.0/cli/conf.d/20-soap.ini,
/etc/php/7.0/cli/conf.d/20-sockets.ini,
/etc/php/7.0/cli/conf.d/20-sqlite3.ini,
/etc/php/7.0/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.0/cli/conf.d/20-sysvsem.ini,
/etc/php/7.0/cli/conf.d/20-sysvshm.ini,
/etc/php/7.0/cli/conf.d/20-tokenizer.ini,
/etc/php/7.0/cli/conf.d/20-wddx.ini,
/etc/php/7.0/cli/conf.d/20-xdebug.ini,
/etc/php/7.0/cli/conf.d/20-xmlreader.ini,
/etc/php/7.0/cli/conf.d/20-xmlwriter.ini,
/etc/php/7.0/cli/conf.d/20-xsl.ini,
/etc/php/7.0/cli/conf.d/20-zip.ini,
/etc/php/7.0/cli/conf.d/25-memcached.ini,
/etc/php/7.0/cli/conf.d/90-blackfire.ini

xdebug を使いたい

上の php --inixdebug.ini が呼ばれていなくてどうやら使えなかったのだけど、fpmにはいたので、 コピーしてきた(正しいかどうかはよくわからないけど・・・)

sudo cp /etc/php/7.0/fpm/conf.d/20-xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini

おわりに

無事に phpunit が実行できた。

Windows に SSH 接続してみました

はじめに

手元の mac から CUIWindows に接続したいな〜と思ったので試してみました。

実現方法は,次の二つがあるようです。

前者の方法は,Windows 版の OpenSSH はあまりメンテナンスされていないような気がして,これまで乗り気ではありませんでした。 最近では,microsoft 製の OpenSSHが提供されているようです。

後者について,PowerShellオープンソースとして提供されています。 mac でも Linux でも使えるようになりました:)

今回は,クライアントの mac に手を加えたくなかったので,前者の方法を試してみました。

作業内容

実施環境

  • Windows 10.0.14393 [64 bit]
  • chocolatey 0.10.8

手順

Win32 OpenSSH のインストール

chocolatey をインストールしていない場合は,先に導入しておきます。

マニュアルを参考に,作業を進めていきましょう。

Win32 OpenSSH Automated Install and Upgrade using Chocolatey · PowerShell/Win32-OpenSSH Wiki · GitHub

今回は,SSH クライアントと sshd サーバをインストールするので,以下のコマンドを実行します。

choco install win32-openssh -params '"/SSHServerFeature /KeyBasedAuthenticationFeature"' -confirm

インストール中に22番ポートの開放も行われます。インストールが完了したらおしまい!

mac から SSH 接続

インストールが完了したら接続してみましょう。接続先は環境に合わせて読み替えてください。

$ ssh administrator@192.168.40.10
administrator@192.168.40.10's password: 

Microsoft Windows [Version 10.0.14393]                                                                                          
(c) 2016 Microsoft Corporation. All rights reserved.                                                                            

administrator@WINPC C:\Users\Administrator>                                                                           

WindowsSSH 接続できました!

接続先はコマンドプロンプトの世界なので,PowerShell が使いたくなったら切り替えましょう。

administrator@WINPC C:\Users\Administrator>powershell                                                                 
Windows PowerShell                                                                                                              
Copyright (C) 2016 Microsoft Corporation. All rights reserved.                                                                  

PS C:\Users\Administrator>     

PowerShell が起動しました!

あとは,いつも通りに作業を進めましょう。

実際の接続例

f:id:u9bo:20170909221435p:plain

なかなかに強烈です。

その他

Win32 OpenSSH のアップグレード

choco upgrade win32-openssh -params '"/SSHServerFeature"' -confirm

Win32 OpenSSH のアンインストール

choco uninstall win32-openssh -params '"/SSHServerFeature"' -confirm

おわりに

terminal から WindowsSSH 接続することを目的に,Widdows に sshd サーバをインストールし,接続しました。 使い慣れた macPowerShell スクリプトの開発ができるようになりルンルンです。

普段は,リモートデスクトップ接続(RDP)で良いけれど,回線が遅い場合でコマンドだけ叩きたい!なんてときにも役立ちそうです。

今回はパスワード認証での接続でしたが,今後は公開鍵で接続できるように設定してみようと思います。