スプラトゥーン2所感

思いがけず Switch が手に入った幸運で、スプラトゥーン2を買った。
プレイアブルになって24時間が経過する頃なので、所感。
ちなみに前回は発売半年後の WiiU + ソフトのセット割引に引かれて購入し、半年ほどプレイしていた。
最後のウデマエはS止まり。

ブログ書く時間が5分毎に1分くらいしかないので気になったことだけ書く。

スペシャル全般

全体としては弱体化している。
とはいえ前作が強すぎた印象。特にスーパーショット。
たぶん今後調整入ると思う。
今のところマルチミサイルが強い。

サーモン・ラン

サーモンラン | スプラトゥーン2 | Nintendo Switch | 任天堂

2からの追加要素。
これまではプレイヤー4人対プレイヤー4人のナワバリバトルorガチマッチだったが、このモードはプレイヤー4人対CPU(サーモン) というモード。

このモードではブキを任意で選べなくなっており、4種類用意されているブキ(シューター、二丁拳銃、チャージャー、ローラー)が4人にランダムに割り当てられる。
これは普段対戦で得意なブキばかり使いがちだった自分には普段使わないブキが割り当たることで幅が出てとてもいい。
前作では主にシューター系とホットブラスターを使ってたが、チャージャー系が楽しくなってきた。
主にガチヤグラでダンスをするチャージャー使いとして頑張っている。
こういう効果を狙ってるんだと思う。
ニガテなブキを使ってうまくいかなくても、対戦のスコア(ウデマエ)に影響しないし、ちょうどいい。

ガチホコ

これまでとホコを持ったときのブキが変わったことで大きく戦略が変わったと感じる。 これまではキルを狙うにはホコを持たないのがセオリーだったが、ホコのブキが非常に強力になったため、同人数同士の戦況だと攻撃側が有利になる。
守備側は時間をかければかけるほど不利になる。
なので人数揃ってるときに引いて守るのやめてもらいたい。

ブランク

前作やってからのブランクか、C帯で苦戦する。
よくよく考えると前回は発売半年後だったので本当のC帯と当たってたが、今は本来C帯じゃない人がたくさんいるので格差を感じやすいのかもしれない。
どっちにしろ、つらい。

最後に

知り合いの方はぜひ対戦しましょう。

Azure Database for MySQL を使いたかったので証明書の検証エラーを回避した話

昨日しばやん先生の記事を見かけてました。 まさに使おうとしていたところで、他人ごとではありませんでした。

blog.shibayan.jp


公式情報

まずは公式情報。

現在、サービスへの mysql.exe 接続で “–ssl-mode=VERIFY_IDENTITY” オプションを使用した場合に、接続が次のエラーで失敗するという既知の問題が確認されています: ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure Please downgrade to “–ssl-mode=VERIFY_CA” or lesser SSL modes (エラー 2026 (HY000): SSL 接続エラー: SSL 証明書の検証エラー “–ssl-mode=VERIFY_CA” または以前の SSL モードにダウングレードしてください)。 “–ssl-mode=VERIFY_IDENTITY” の使用が必要な場合は、サーバー名に ping を実行して、リージョン サーバー名を解決し (westeurope1-a.control.database.windows.net など)、この問題が解決するまで、接続内でそのリージョン サーバー名を使用します。 この制限は、今後削除する予定です。 Azure Database for MySQL に安全に接続するためにアプリケーションで SSL 接続を構成する | Microsoft Docs

ということなのでそのうち修正されるとは思いますが、現時点で使いたかったため、検証エラーを回避することにしました。


PHP はそれほど詳しくないため、以下の接続ドライバしか確認していません。

回避策

mysqli

mysqli_real_connect(
    $connection,
    $host,
    $user,
    $pass,
    $name,
    3306,
    '',
    MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
);

参考: http://blog.machek.co.uk/2016/06/php-with-mysql-and-ssl.html

PDO

まだ対応できません。 PullReq 中のようです。

add a attribute to specify CN in PDO(version 7) by ghfjdksl · Pull Request #1913 · php/php-src · GitHub

おわりに

アップデートされたらこの記事の価値はなくなるので、そのころに見かけた人はスルーしてください。

VisualStudioCode でインストールしたい拡張機能3つ

最近がっつりプロダクト開発してないので、広くいろいろ試すときに便利な拡張機能について書きます。

Git Project Manager

VSCode から離れることなくリポジトリをスイッチできます。

f:id:khei-fuji:20170507164017g:plain

複数のリポジトリを行ったり来たりすることが多いので便利。
これを使う前はターミナルでディレクトリ開いて code . してました。

gitignore

環境に適した .gitignore を生成してくれます。

f:id:khei-fuji:20170507165148g:plain

これを使う前は毎回「xxx .gitignore」でググって github/gitignore からコピーしてました。

Git History

普段は SourceTree 使ってますが、VSCode から離れたくないときに使います。
これは本体が対応してくれてもいい気がします。

f:id:khei-fuji:20170507164604g:plain

そういえば Windows 版の SourceTree は UI 大きく変わりましたね。
www.publickey1.jp


おわりに

コードのシンタックス以外で使っている拡張機能はこれくらいでした。
オススメあったら教えてください。


この手のまとめ記事、10個や15個も読む気にならないし、仮にインストールしても大半は存在忘れて使わないので、本当にオススメしたいなら数を絞って期間を空けて紹介してほしいものです。


GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

RaspberryPi3 買ったので初期設定した

RaspberryPi3 買った。

電源コードやSDカードを別で買うのが面倒だったので、全部入りを購入。

f:id:khei-fuji:20170505162927j:plain

はじめに

「RaspberryPi 初期設定」で検索すると見つかる記事が多いわりに、網羅的に書かれた記事にたどり着けなかった。
なのでハマったところに対してだけ重点的に書く。

参考にした記事

RaspberryPi2との違い

  • Wi-Fi がデフォルトでついている
  • 起動時のデフォルトが GUI ブート
  • 固定IPの設定は /etc/network/interfaces より /etc/dhcpcd.conf に書く
    これは Raspbian 8.0(jessie) によるものなので、RaspberryPi2 の時点でもそうだったのかも

f:id:khei-fuji:20170505165035j:plain

開封

f:id:khei-fuji:20170505164150j:plain

ヒートシンク貼る。

f:id:khei-fuji:20170505164352j:plain

初期設定

以下は GUI でも CUI でもおそらくつまづくことはないはず
デフォルトでは GUI になっていたが、Windowsのキーボードがあれば Windows と同じ操作感でどうにかなる。

ネットワーク設定

Wi-Fi 設定

アクセスできるようにする。
組み込みの Wi-Fi では 5GHz の SSID は接続できないので、2.4GHz 帯を使う。

$sudo sh -c 'wpa_passphrase <SSID> <PASSPHRASE> >> /etc/wpa_supplicant/wpa_supplicant.conf'

Wi-Fi インターフェースを再起動して疎通確認する。

sudo ifdown wlan0
sudo ifup wlan0
ping -c 3 www.google.co.jp

IPアドレスの固定

さきに書いたとおり、最新版では固定IPの設定は /etc/network/interfaces より /etc/dhcpcd.conf に書く。

/etc/network/interfaceswlan0 のところは特に固定するように記載しなくて問題ない。

iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

/etc/dhcpcd.conf の設定。

interface wlan0
static ip_address=192.168.10.21/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

再度 Wi-Fi インターフェースを再起動して疎通確認する。

sudo ifdown wlan0
sudo ifup wlan0
ping -c 3 www.google.co.jp

クライアントから接続確認

ssh pi@192.168.10.21

この後 SSH の設定などは変更する。


Raspberry Pi3 コンプリートスターターキット (Standard)

Raspberry Pi3 コンプリートスターターキット (Standard)

CentOS に ansible で mackerel-agent を雑にインストールする

先日 Raspberry Pi 2 に mackerel-agent をインストールしたので、ついでに CentOS 環境にもインストールした。

kheiakiyama.hateblo.jp

mackerel.io


CentOS

以下、プレイブック

---
- name: install mackerel-agent repo
  shell: |
    curl -fsSL https://mackerel.io/assets/files/scripts/setup-yum.sh | sh
  args:
    creates: /etc/mackerel-agent/mackerel-agent.conf

- name: install mackerel-agent
  yum: name=mackerel-agent state=latest

- name: mackerel-agent conf
  lineinfile: 
    dest=/etc/mackerel-agent/mackerel-agent.conf
    line='{{ item.line }}'
    regexp='{{ item.regexp }}'
  with_items:
    - { line: 'apikey="{{ mackerel_apikey }}"', regexp: '^apikey="{{ mackerel_apikey }}"' }
  notify: restart mackerel-agent

mackerel-agent の yum リポジトリの登録を /etc/mackerel-agent/mackerel-agent.conf でチェックするというのはいささか雑だが、雑にインストールする と断りを入れているのでよしとした。

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Ansible徹底入門 クラウド時代の新しい構成管理の実現

RaspberryPi2 のセンサーで取得したメトリクスを Mackerel に出力する ansible プレイブック

はじめに

1月から東京に移住したが、実家においてきた RaspberryPi2 のメトリクスを見る手段がなかった。
メトリクスは RaspberryPi 内にしか蓄積しておらず、アラートだけ Slack & LINE で送っていた。

過去にやったことは以下の記事。


今回は東京からメトリクスを見れるようにするための取り組み。

最近 Mackerel Meetup #10 に参加した縁もあるので、Mackerel 使ってみましたよ、というだけの話。


実装

RaspberryPi2 いじるのは年に数回なので、構成を後から追えるようにするために、最初からではないのだが ansible でデプロイできるようにしている。
なので、以下プレイブックベースで書く。

ベースの処理

ここでは温度・湿度の記録部分しか書かないが、実際は見守りカメラの反応の有無も録っているため、 yml を分けてある。
role でディレクトリ管理してなくて雑な運用。

main.yml

- hosts: pi
  sudo: yes
  vars:
    colon: ':'
  tasks:
    - include: tasks/base.yml
    - include: tasks/temperature.yml
  handlers:
    - name: restart mackerel-agent
      service: name=mackerel-agent state=restarted

hosts

[pi]
xxx.xxx.xxx.xxx

[pi:vars]
ansible_connection=paramiko
ansible_ssh_user=pi
ansible_ssh_pass=xxxxxxx
ansible_sudo_pass=xxxxxxx
mackerel_apikey=xxxxxxxx

mackerel-agent のインストール

RaspberryPi2 では ARM 版のバイナリが必要なため、インストールした後にバイナリを上書きしている。
API Key も流し込む

tasks/base.yml

- name: install mackerel-agent
  shell: |
    curl -O https://mackerel.io/file/agent/deb/mackerel-agent_latest.all.deb
    dpkg -i mackerel-agent_latest.all.deb
    curl -LOk https://github.com/mackerelio/mackerel-agent/releases/download/v0.42.3/mackerel-agent_linux_arm.tar.gz
    tar zxf mackerel-agent_linux_arm.tar.gz
    cp mackerel-agent_linux_arm/mackerel-agent /usr/bin
  args:
    creates: /etc/mackerel-agent/mackerel-agent.conf

- name: mackerel-agent conf
  lineinfile: 
    dest=/etc/mackerel-agent/mackerel-agent.conf
    line='{{ item.line }}'
    regexp='{{ item.regexp }}'
  with_items:
    - { line: 'apikey="{{ mackerel_apikey }}"', regexp: '^apikey="{{ mackerel_apikey }}"' }
  notify: restart mackerel-agent

温度・湿度のメトリクス取得

公式ドキュメントを読めばわかるとおり、mackerel-agent.conf にコマンドを書いて、コマンド内でメトリクスを標準出力に出せば完了。

ホストのカスタムメトリックを投稿する - Mackerel ヘルプ

tasks/temperature.yml

- name: mackerel temperature plugin
  copy: 
    src=mackerel-temperature.sh
    dest=/home/pi/mackerel-temperature.sh
    mode=755

- name: mackerel humidity plugin
  copy: 
    src=mackerel-humidity.sh
    dest=/home/pi/mackerel-humidity.sh
    mode=755

- name: mackerel-agent conf
  lineinfile: 
    dest=/etc/mackerel-agent/mackerel-agent.conf
    line='{{ item.line }}'
    regexp='{{ item.regexp }}'
  with_items:
    - { line: '[plugin.metrics.temperature]', regexp: '^\[plugin.metrics.temperature\]' }
    - { line: 'command = "/home/pi/mackerel-temperature.sh"', regexp: '^command = "/home/pi/mackerel-temperature.sh"' }
    - { line: '[plugin.metrics.humidity]', regexp: '^\[plugin.metrics.humidity\]' }
    - { line: 'command = "/home/pi/mackerel-humidity.sh"', regexp: '^command = "/home/pi/mackerel-humidity.sh"' }
  notify: restart mackerel-agent

自分の場合は以下のサンプルコードをそのまま利用しているので、センサーからの取得処理は実装方法や RaspberryPi のピン番号によって異なる。

https://github.com/adafruit/Adafruit_Python_DHT

files/mackerel-humidity.sh

#!/bin/bash

name="humidity.raspberrypi"
humidity=`/home/pi/Adafruit_Python_DHT/examples/Adahumit.py 22 4`
date=`env TZ=JST date +%s`

echo -e "${name}\t${humidity}\t${date}"

files/mackerel-temperature.sh

#!/bin/bash

name="temperature.raspberrypi"
temperature=`/home/pi/Adafruit_Python_DHT/examples/Adatemp.py 22 4`
date=`env TZ=JST date +%s`

echo -e "${name}\t${temperature}\t${date}"

mackerel 画面

左から湿度、見守りカメラの反応、温度となっている。

f:id:khei-fuji:20170430145710p:plain

センサーの負荷の問題か、mackerel-agent のタイムアウトが短いためか、取得に失敗することがときどきあり、グラフがぶつ切りになってしまっている。
このあたりはもうちょっと時間があるときに調べたい。

感想

認証を考慮して情報を見える化する場として、Mackerel のような SaaS はありがたい。
(フリー版で事足りてしまうので、Mackerel のビジネス的には貢献できないが・・)

1年くらい運用していて Raspberry Pi の問題は無線LANの再接続くらいしか起きていなかったが、Mackerel によって RaspberryPi ホストも監視できるようになったので、より運用しやすい状況が作れたのでよかった。


Amazon のマーケットプレイスに不審なくらい価格を下げた出品者が続出している

今さらだけど PS4 の Horizon の評判がいいので、Amazon で価格を調べていたところ、タイトルの通りのことが起きていた。
他のサイトで見た感じ、新品では ¥5,000〜¥6,500 の価格設定がされていた。


[2017 4/22 20:48]
¥1,800 で出品する新規出品者


[2017 4/23 8:10]
直近のフィードバックでは送られてこないといったコメントがついていた出品者


[2017 4/23 12:27]
新品の出品
f:id:khei-fuji:20170423122955p:plain


[2017 4/23 12:27]
中古の出品
f:id:khei-fuji:20170423123000p:plain


だんだんリアルな出品者になってきてるが、直近のフィードバックが何年も前だったりで、安値をつけているアカウントは全て怪しく見える。
こういったことがここ数日の間に起きている模様。
PS4 の他のソフトでも起きている。
Amazonマーケットプレイス利用が若干怖くなった。


昨日(4/22) の時点で業者名で検索すると、以下のブログに行き着いた。
堂山后子 Kimiko Doyamaとは何者なのか? | ギリギリバサラ GIRIGIRI BASARA | ギリギリバサラ GIRIGIRI BASARA

最近始まった現象なのかもしれない。


ざっと以下のURLに目を通した限りでは、配送されない場合はまずは出品者に連絡してダメならAmazonに泣きつけば保証してくれるっぽい。(条件にもよる。あと手間がかかる)

Amazon.co.jp ヘルプ: Amazonマーケットプレイス保証


上に書いたように、まずは出品者に連絡したうえで Amazon に問い合わせることで、たぶん Amazon が問題を把握して対処してくれるはずなので、届かなかったというトラブルがあれば適切に問い合わせを行うのがよさそう。


あとは何年も前にマーケットプレイス出品者側で使っていた立場で書くと、自動で最安値に合わせる機能とかがあったので、おかしな安値の価格に合わせてしまう業者を誰かが狙っているという可能性もあるかもしれない。


もしこれがマーケットプレイスのアカウント乗っ取りによるものだとすると、しばらく使われていないマーケットプレイスアカウントのパスワードリセットや停止処置などが今後入ることになるかもしれない。


何にせよよくわからないことになっている。