著者アーカイブ takahashi

takahashi 著者:takahashi

redisを触ってみる Pub/Sub編

前々回からご紹介しているredisですが、KVS型のDBとしての機能のほかに、もう一つredisが備えている機能があります。

メッセージ配信の仕組みである”Pub/Sub”をredisクライアント間でできる機能です。

Pub/Subとは、メッセージを受信したいユーザーが特定のチャネルを購読(Subscribe)し、配信側はそのチャンネルに対してメッセージを一斉配信(Publish)することで購読側はメッセージを受け取るという仕組みです。

Pub/Subをするために、必ずしもredisを使用する必要はありませんが、自分で実装するとそこそこ大変なのでredisのような既存の仕組みで利用できるのはとてもありがたいです。

今回はredisのPub/Sub機能を実際に試してみたいと思います。

まず、redis-cliクライアントを2つ立ち上げておきます。

片側のredis-cliで、下記のようなコマンドを実行します。

subscribe チャネル名

subscribeしたクライアントは、待機状態になります。

なお、subscribeしている間は他のredisコマンドは実行できなくなるので注意してください。

この状態で、今度はもう片側のredis-cliで下記のようにコマンドを実行します。

publish チャネル名 メッセージ

すると、先程subscribeした側のredis-cliにpublishされたメッセージがリアルタイムで受信されます。

前々回にご紹介した、redisをリモートから接続できるようにしておけば、ネットワーク経由でも送ることができます。

複数クライアントもばっちりです。

redis単体でここまでできるので、あとはプログラムとredisをつないでWebsocketあたりを使えば、簡単にリアルタイムチャットなども実装できそうですね。

・前の記事
redisを触ってみる 基本操作編

takahashi 著者:takahashi

redisを触ってみる 基本操作編

前回は、redisのインストール・起動方法についてご紹介しました。

今回は、redisを実際に操作して、値を保存する方法をご紹介したいと思います。

値の保存・呼び出し

redisはKVS(Key-Value Store)型のDBなので、データ構造としては、あるキーに対してある値が紐づく、といった概念になります。

redisで値の保存(RDBでいうinsertに相当)を行うには、先日説明したredis-cliを起動し、下記のようにコマンドを入力します。

set キー名 値

こうすると、キー名で指定された名前のキーが作成され、値で指定された値がキーと紐づけられ、redisに保存されます。

キーに保存した値を確認(RDBでいうsekectに相当)するときは

get キー名

とするだけで取得できます。

データ構造の概念が簡単だけあって、コマンドも超簡単で扱いやすいですね。

キー一覧を表示する

先程までの手順で、キーを作成して中に値を登録し、キー内に登録した値を表示するところまではできました。

ではキー名を忘れてしまった場合などに、現時点で作成済みのキーの一覧を見たい、という場合もあるかと思います。

そういう場合は下記のコマンドを実行すると作成したキーの一覧が表示されます。

keys *

ほかにも、変数の型を変更することで一つのkeyに複数の値を挿入したり、値の保存期間を指定したり、といった機能があるそうです。

SQLと比較すると、やはり簡素すぎて代替えにはならないなーという印象ですが、その分非常に扱いやすいうえ動作も軽く、速いので、一時的に値をストックしておく使い方であれば十二分に便利に使えそうです。

導入も簡単ですし、手軽に触れますので、まだredisを触ってないけど興味が出てきたかも…という方はぜひ触ってみてください。

・次の記事
redisを触ってみる Pub/Sub編

・前の記事
redisを触ってみる 初期設定編

takahashi 著者:takahashi

redisを触ってみる 初期設定編

以前にも記事で取り上げたredisですが、いろいろきっかけがありまして実際に触ってみることにしました。

redisはNoSQLなデータベースサーバーなので、redisのサーバープロセスを立ち上げる必要があります。

ということで、まずはOSにredisをインストールします。

RedHat系(CentOSなど) の場合は

sudo yum install redis #インストール
sudo systemctl start redis #起動
sudo systemctl enable redis #自動起動に登録

debian系(Ubuntuなど)の場合は

sudo apt update #パッケージリスト更新
sudo apt install redis #インストール
sudo systemctl start redis-server #起動
sudo systemctl enable redis-server #自動起動に登録

mac OSでbrewコマンドが利用できる場合は

brew install redis #インストール
redis-server #フォアグラウンドで起動

とします。

インストールが完了すると、redisサーバー本体のredis-serverとredisを操作するクライアントであるredis-cliが利用できるようになります。

同じPC内でredisのサーバーとクライアント両方を動かす場合は、redis-serverが起動しているのを確認したうえで

redis-cil

とするだけでredis操作用のプロンプトに入ることができます。

ところで、redis-cliからリモートのredis-serverに接続しようとすると

こんな感じで、はじかれてしまいます。

redisはデフォルトでlocalhostからの接続のみ受け付けているため、外部からの接続を受け付けるようにするにはLANからの接続を受け付けるように設定する必要があります。

Ubuntuの場合は

/etc/redis/redis.conf

に設定があるので、vimなどでこのファイルを編集します。

編集するのは、上の画像にあるように “bind”と書かれている行です。

デフォルトでは 127.0.0.1 つまり、localhost(サーバー自身)からの接続のみしか受け付けない設定になっています。

外部からアクセスできるようにするには、redisが稼働するサーバーマシンのLANポート(NIC)に割り振られているIPアドレスを指定します。

例えば、 サーバーマシンに192.168.11.100というIPアドレスが降られている場合は

bind 127.0.0.1 192.168.11.100 #2019/9/19 訂正 127.0.0.1をとってしまうとlocalhostからの接続ができなくなります。

とすればこのIPアドレスが振られたNIC経由でのredisへの接続を受け付けるようになります。

もし複数のNICが搭載され、複数のIPが振られている状態で両方のネットワークから接続を受け付けたい場合は

bind 192.168.11.100 192.168.1.100

のようにスペース区切りにすると複数指定できます。

また、すべてのNIC経由での接続を受け付けたい場合は

bind 0.0.0.0

とします。

設定が終わったら、Linux系の場合は

sudo systemctl restart redis-server (あるいはredis)

とします。

mac OSなどでフォアグラウンドで起動している場合はいったんredisを停止させてから起動しなおします。

この状態で再度 redis-cli コマンドでリモートにつなげると

こんな感じでリモートからでも接続できるようになります。

・次の記事
redisを触ってみる 基本操作編

takahashi 著者:takahashi

Cygwinのバージョンを確認する方法

Unixライクな環境をWindows上で再現できるCygwinですが、使用しているとインストール済みのCygwinのバージョンが知りたくなる時があります。

Cygwinはインストーラーがパッケージマネージャを兼ねているような感じになっているので、Cygwinのインストーラーからインストール済みバージョンを確認することは可能です。

しかし、インストーラーをインストール後に破棄してしまった場合で、再度インストーラーをダウンロードできないような状況では困ることがあります。

実はCygwinではパッケージマネージャだけでなく、Cygwinターミナル上からもバージョンを確認することができます。

下記のコマンドを実行します。

cygcheck -c cygwin

すると下記のような形でバージョンが出力されます。

$ cygcheck -c cygwin
Cygwin Package Information
Package              Version        Status
cygwin               2.10.0-1       OK

cygcheckコマンドはインストールされたcygwinパッケージのバージョンなどを表示することができるコマンドなのですが、Cygwin本体もCygwinのパッケージとして扱われているので、このコマンドで情報が確認できるようになっているようです。

Cygwinのバージョンのチェックが必要な場合は参考にしてみてください。

takahashi 著者:takahashi

風の強さなどをわかりやすく視覚的に表示してくれるWebサービス “Windy.com”


Warning: in_array() expects parameter 2 to be array, null given in /home/cs13185/cpoint-lab.co.jp/htdocs/wp-content/plugins/wp-appbox/inc/getappinfo.class.php on line 997

台風などが発生した際、自分の地域やこれから向かう場所がどういう状況なのか、またこれからどうなっていくのか、知りたくなることがあると思います。

最近、風の動きを超感覚的に見ることができるWebサービスを見つけたので、ご紹介したいと思います。

Windy.com

実際にサイトにアクセスしていただければ、白い粒子が地図上を飛び交っているのがわかるかと思います。

この粒子一つ一つの動きが風の流れであり、粒子が進む方向に、粒子の進む速さが早いほど強い風が吹いています。

左下に再生ボタンがありますが、こちらをクリックすると画面下部のプログレスバーが動いていき、現在時刻以降の、風の動きの予測を見ることができます。

内容としては日本で公開されている予測サービスとぱっと見差はないのですが、細かい風の流れを見ることができるため、例えば台風が来た際の自分の住んでいる地域への深刻度がどれぐらいなのかが、他サービスとくらべて実感しやすく、いろいろな判断材料にしやすいのではないかなと思いました。

ちなみにアプリもリリースされているので、スマートフォンからはこちらを利用すると便利そうです。

The app was not found in the store. 🙁

もうこれ以上台風はまったくもって御免ですが、まだもう少し台風シーズンが続きますので、こういったアプリを利用して、防災について考えてみるのもいいかもしれませんね。

takahashi 著者:takahashi

MySQL 8.0に更新したらownCloudがMySQLに接続できなくなった場合の対処法

先日Ubuntu(18.04)をアップデートしたところ、インストールしてあったMySQLが5系から自動で8.0に更新されました。

この状態で普段から使用しているストレージサービスをサーバー上で動作させることのできる”ownCloud”を動かしたところ…

SQLSTATE[HY000] [2054] Server sent charset unknown to the client. Please, report to the developers

上のようなエラーが発生。

調べたところ、どうやらMySQL8.0ではデフォルトの文字コードが設定ファイルで未定義になっているとエラーになるようです。

ということで、/etc/mysql/my.cnfに下記のように指定を追記します。(文字コードは必要に応じて変更した方がよさそうな気がします。)

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4

ただし、これだけだと

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

といったエラーが出てしまいますので、もう一行

default_authentication_plugin=mysql_native_password

の追記が必要です。

つまり合わせると、下記の4行を追記すればOKです。

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
default_authentication_plugin=mysql_native_password

これでエラーが消えて正常に動作するようになりました。

参考: MySQL 5.7 → MySQL 8.0 に更新した&メモ – 犬ターネット

takahashi 著者:takahashi

iPhone11 発表!

先日のApple Spetial Eventで、ついにiPhone11が発表されました!

Google がPixel 3を発表した際に、前世代のiPhoneのカメラ性能をGoogleに比較されたためか、Apple公式のサイトではPixel 3に搭載されている夜景撮影モード”Night Sight”と同等の機能にあたる”ナイトモード”や、ポートレート機能の強化など、カメラ機能の進化をアピールしています。

また特徴的なのがリーク情報でもあったリアカメラの個数。

iPhone 11 の場合は2個、iPhone 11 Pro/Pro Max は3つ搭載されています。

ただ個人的には、カメラの個数が多すぎるような気がしたので、レンズが目立たないような配置にしてほしかったと感じました。

とりあえず、iPhoneユーザーでカメラにこだわる人にとってはいい端末になるかもしれません。

iPhone 11 – Apple

iPhone 11 Pro -Apple

takahashi 著者:takahashi

Appleの発表会イベントがいよいよ深夜2時からスタート

いよいよ今夜(9/11)夜中2時からAppleの発表会イベントであるAppleSpectialEventsが開催されます。

Apple Special Events – Apple

今回は、なんとApple公式でYouTubeチャンネルから配信を行うようです。

また今回も、毎回Appleイベントの同時通訳を”macwebcaster.com”さんが行うそうです。

英語しかわからない、という方も安心ですね。

今回の発表では、非常に多くの記事で新型iPhoneが発表されるのではと言われています。

個人的にはサプライズ的に最近噂としてでているiPhone SEの後継機種が出てほしいなーと思っているので、そのあたりもどうなるのか、楽しみですね。

takahashi 著者:takahashi

SoftBankが2年縛りの廃止を発表

Softbankが2年縛りの廃止を発表したようです。

ソフトバンク、「2年縛り」を契約満了月から無料で解除可能に – マイナビニュース

以前、総務省によって新たに”解約違約金は1,000円が上限”という規定に基づいた変更のようです。

これでどのタイミングで解約やMNPを行うか…といったように悩む必要がなくなるのはとてもありがたいですが、一方で端末料金の値上げや料金プランの複雑化などのデメリットも懸念されているようです。

とくに、端末料金については、契約時の端末料金の割引額を20,000円を上限とする規定も出たため、今後キャリアによる端末料金の割引は期待できなくなりそうです。

自分はY!Mobileを契約しているのですが、機種が少ないこと以外は非常に満足していて、例え解約料金がなくなったとしてもキャリアを変える予定はとくにありません。

さらに、規制適用後に今のプランをやめてしまうと元に戻せなくなる、となるとなおさらほかのキャリアに変更するメリットが見いだせないのも事実ですし、今のキャリアをずっと使い続けようと考えているひとにっては、当分のあいだは今回の変更によるメリットを感じることはなさそうです。

au2年縛りの違約金が1000円へ|総務省令で値下げの新料金プランを解説 – bitWave

takahashi 著者:takahashi

Android 10 がついにリリース! Android 9からの変更点をチェック

昨日9/4、GoogleはAndroid 10の正式版をリリースし、配信を開始しました。

Android 10

Android 10 でできる 10 のこと – Google Japan Blog

「Android 10」正式版リリース まずはPixelシリーズにローリングアウト – ITMedia Moblie

自分が所持するPixel 3aにもAndroid 10のアップデートが降ってきてました!

が、現時点でAndroid 10 で動作しないアプリもまだ多数あるとのことでしたので、一旦実機でのアップデートを見送り、 今回は Android Studio付属のエミュレーターでAndroid 10を動かしてみました。

せっかくなので上位モデルのPixel 3で。
なんと起動画面も実機と同じになってました。

起動完了後の画面はこんな感じ。

ホーム画面の見た目にはさほど変化はなさそうです。

それでは今回変更となった部分を見ていきたいと思います。

・ダークテーマ(ダークモード)

すでにWindowsやmacOSといったデスクトップ用OSでは、システム全体のUIを黒を基調にしたデザインに設定する”ダークモード”が実装されていますが、この機能がついにAndroidにも実装されました。

Android 10でダークテーマに切り替えるには、まず設定から…

“ディスプレイ”を選択、

ダークテーマのトグルをONにすると…

黒基調のUIに変わりました!!!

通知画面もこんな風に黒基調に変化します。

アプリのUIも対応していれば連動して黒基調になるようです。

ダークテーマはデザインや見やすさだけでなく、有機ELディスプレイにおいて電池持ちをよくする効果もあるようです。

・ナビゲーションボタン切り替え

前回のAndroid 9アップデート時に物議を醸した

この新しいナビゲーションボタンですが、Android 10では3種類から使いやすいものを選べるようになりました。

1つ目は、先程ご紹介した、Android 9に初搭載された 2ボタンナビゲーションです。

タスク切り替えの時だけは新しいジェスチャ操作となりますが、戻るボタンは従来通り左側に常に表示されます。

2つ目は従来の最もなじみのある3ボタンナビゲーションです。

Pixel 3 などの新しいデバイスでAndroid 9を搭載されているものについては、2ボタンナビゲーションに固定されていたので、10にアップグレードすることで元の3ボタンナビゲーションに戻すことができるようになります。

2ボタンが使いづらい…と思っていたユーザーにとっては朗報かもしれません。

最後の3つめは、Android 10で初搭載されたジェスチャナビゲーションです。

こちらは戻るボタンすらなくなり、完全にジェスチャのみで操作する形です。

操作方法は恐らく、iPhone X以降のiPhoneの操作とほぼ同じかと思われます。

ちなみに、ジェスチャナビゲーションについては、右側の歯車アイコンからジェスチャ感度を調整できるようになっています。

これらの設定は

設定→システム→操作→システムナビゲーション

から選択可能です。

・電源ボタン長押しから緊急通報が可能に

緊急通報用のダイヤルパットが、ロック画面からだけではなく電源ボタン長押しでも呼び出せるようになりました。

電源ボタン長押しで表示されるメニューに”緊急通報”が追加されており、タップするとロック画面から呼び出せるものと同様の金通報用のダイヤルパットが表示されます。

いわれてみれば、従来はロック解除後は電話アプリからしかアクセスできなかったですもんね…

なるほど、と感じた改良でした。

ほかにも端末内で再生中の動画やポッドキャストなどの音声を認識してリアルタイムで文字に表示する”Live Caption”などといった機能も追加されているようです。

冒頭でも少し書きましたが、まだリリースされたばかりのOSとのことで、Android 10ではまだ動かすことのできないアプリもそこそこあるようです。

Android 10事態に問題がある、というわけではないのですが、少し時間をおいてからアップデートを行った方が安心かもしれません。