著者アーカイブ takahashi

takahashi 著者:takahashi

丸亀製麵のアプリがリニューアル。クーポンがバーコードを読み込ませる仕組みに変更。

手作りのもちもちのうどんや出来立ての天ぷらが楽しめて、しかも安い。丸亀製麵は機会があるときは良く足を運ぶお気に入りのチェーン店です。

そんな丸亀製麵ですが少し前からスマホアプリを使ったクーポン配信などが始まり、よりお得に利用できるようになりました。
そんな丸亀アプリですが、最近リニューアルされたようで、

クーポンについているバーコードをレジで読み込ませる形式に変更されたようです。
いつも店員さんが忙しそうにしている中、恐らく画面を見てレジに割引を打ち込んでいたような感じだったので、これで少し負担が軽減されるといいですね。

他にもスタンプシステムが導入など、使いたくなるような工夫が追加されました。

ちなみに2月7~9の期間限定で夜6時から、鴨ねぎうどんが半額で頼めるようです。

半額カモン! 夜なきうどん – 丸亀製麵

めっちゃ食べに行きたい…

丸亀製麵公式アプリ – 丸亀製麵

takahashi 著者:takahashi

謎のHTTPステータスコード”418 I’m a teapot”が出た時の対処方法

は一つしかありません。
笑いましょう!

HTTPステータスコードとは、主にブラウザからサーバーへの要求に対して、その結果を3桁数字で表したものです。
例えばよく見かけるものとして、404なら”Not Found(見つかりませんでした)”、403なら”Forbidden(アクセスが拒否されました)”、500なら”Interlal Server Error(サーバー内で問題が発生しています)”などです。ほかにもたくさんの種類があります。

そんなステータスコードの中の一つとして存在しているのが”418 I’m a teapot” です。
意味は “私はティーポット。” で、”ティーポットにコーヒーを淹れさせようとして、拒否された場合に返されるステータスコード”です。わけがわかりません。

なんでこんなステータスコードが存在しているのかというと、”1998年4月1 のエイプリルフールに作成されたものが、そのまま実装されたコード”らしいです。
出典:HTTP ステータスコード 418 I’m a tea pot のページを実装してみた- thought is free

ちなみに、Googleの公式のサイトで、418ステータスコードが実装されているページがあります。
https://www.google.com/teapot


開発者ツールで開くとちゃんとエラーとして表示されます。さすがGoogle。

ちなみのちなみに、ステータスコード418を利用するプロトコル”HTCPCP/1.0″(ハイパーテキスト・コーヒーポット制御プロトコル)なるものがあり、ちゃんとRFC 2324として登録されています。ワケガワカラナイヨ!!!

インターネットのこういうちょっとしたおふざけを公式非公式関わらずに行う文化、個人的に結構好きです。
今年もあと数か月でエイプリルフールがやってきますが、ここ数年インターネット上ではは企業もこぞってジョークを投げあう、混沌とした日となっています。
今年は各方面からどんなジョークが飛んでくるのか…楽しみですね。

takahashi 著者:takahashi

気になる端末:GPD Pocket

持ち運びに特化したノートPC:ネットブックが一時期大流行しましたが、最近はその数をかなり減らし、タブレット型PCやキーボードと画面が分離するコンバーチブルPCが目立ってきています。

持ち運びに重点を置くのなら確かにタブレット型で、キーボードは必要な時に着ける形の方が理にかなっている気はします。ただ、個人的にはキーボードとタブレットを別々で持ち運ぶというのにもちょっとわずらわしいのでは…と思うときがあります。

やっぱり、ノートPCにはハードウェアキーボードがついていてほしい…でもかさばってほしくない….

そんなわがままを叶えてくれるのがネットブックだったので、少なくなってしまったのはちょっと残念に思っていました。

そんな中、彗星のごとく現れたのが、

中国・深センのデバイス製造メーカーGPDが発売した「GPD Pocket」という機種です。
大きさはなんと7インチという極小サイズ。電子書籍と見間違うほどの小ささなのですが、スペックはIntel Atom x7-Z8750、ストレージ128GB、RAMも8GBあります。
CPUを除けばMacBookAirとさほど変わらないスペックです。

ポートもUSB3.0、イヤホンジャック、USB Type-Cなど、主要なものは一通りそろえています。
OSもWindows 10 Home入りですが、Ubuntuも公式にサポートしている点はガジェット通な人の心をつかみそうです。

使用感はこちらのかたのブログでよくまとめられています。

7インチの極小ノートパソコン「GPD Pocket」と過ごした1ヵ月まとめ – goodegg.jp

昔は2番煎じ、3番煎じ間の強かった中華製ガジェットですが、最近は国内や主要メーカーよりもより痒いところに手が届く”一番手”なハードが増えてきた気がします。
是非今後も注目していきたいですね。

参考:
UMPCを忘れられないあなたへ 超小型パソコン『GPD Pocket』を日本でも – Makuake

7インチの極小ノートパソコン「GPD Pocket」と過ごした1ヵ月まとめ – goodegg.jp

takahashi 著者:takahashi

Linux(Unix)のscreenの外からコマンドを実行する方法

LinuxやUnixでSSHにつなぎながら作業する際、時間のかかる処理を行わせたりでしばらく放置しておく機会と言うのはしばしばあります。

そんなときに、途中でインターネット接続が切れてしまうと最悪です。また、トラブル以外でもは会社の業務終了時間になって退社する時するなどでマシンの電源を落とさないといけない場面があったりします。

そんなときにscreenコマンドは便利です。
サーバー側に仮装のターミナルを作成し、そこで様々な処理を実行することが出来ます。
途中でSSHが切断されてしまっても、screenはサーバーの中で動作しているので、処理も続行されます。途中で処理させながらscreenターミナルから抜けることも、再度入ることも可能です。

また、スクリプトを簡易的にデーモンっぽく動作させる使い方もできます。

このscreenコマンドですが、実は外部からコマンドや文字列を与えることができるのはご存知でしょうか。

例えば、s1という名前でスクリーンを作成し、

$ screen -S s1

s1スクリーン内でpythonのプロンプトを起動しておきます。

$ python

Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

このs1スクリーンに、外からs1の標準入力に対して文字列を入力したい場合、
まず、ctrl+a d でスクリーンをデタッチした後で、

$ screen -S s1 -X stuff 'print "Hello world!"
'`echo -ne '\015'`

とした後、再度screen -r s1 でアタッチすると

>>> print "Hello world!"
Hello world!
>>> 

と表示されているはずです!

これは例えば、screenで実行中のプログラムに文字列を渡したい時や、特定のscreenでのみ定期的にプログラムを実行したいときに有効です。

予めシェルスクリプトにしておけば、cronで回すことも出来ます。
便利なので、ぜひ一度試してみてはいかがでしょうか?

参考サイト:
Minecraftサーバをscreenとcronでプラグインを使わずに自動再起動する – 純規の暇人趣味ブログ

別ターミナルで動いているscreenに外部からコマンド実行 – 戯術者の日記

takahashi 著者:takahashi

FuelPHPが”‘Monolog\Logger’ not found”で動作不能に。原因はComposerっぽい。

最近、fuelPHPを使ってWebアプリを開発中なのですが、コーディング外でエラーが発生してfuelが動作しなくなったので対処法をメモします。

ことは突然発生しました。
プログラムを書き換え、ブラウザで実行したら下記のようなエラーが…

さて見慣れないエラーです。
エラー内容にもスタックトレースにも自分のプログラムでエラーが発生している表示はなし。

なんとなくfuelPHP側っぽいなーとは思ったのですがわけがわからないのでGoogle先生に助けを求めたところ、下記のサイトを発見。

fuelphp1.7.2をzipで入れた場合にcomposer使うとfuelが動かなくなる – Qiita

僕の場合、上記記事の最後の”Composerでパッケージインストール実行“を実行。

今回の開発ではComposerを使って操作するようなことは何もしていなかったので、アレ?とは思ったのですが、試したところ正常に動作するようになりました。

どうもfuelPHPはいろいろなところでComposerに依存しているようなので、この辺はもう少しちゃんと調べないといけなさそうだな…と思った次第です。

takahashi 著者:takahashi

UbuntuでTensorFlowを動かしてみる

以前からディープランニング型AIを実現するためのライブラリとして、TensorFlowというものがよく使われています。
ご存知の方も多いかと思います。

自分は今まであまり触れてこなかったのですが、知人がTensorFlowを使って簡易的な画像認識アプリを構築しているのをみて、自分も触れてみようと思い立ちました。

手元に自由に触れるUbuntuサーバーがあったので、こちらにTensorFlowが動作する環境を構築してみます。

まずはpipをインストールします。

sudo apt update
sudo apt install python-pip python-dev

インストール完了したらつぎにpipでTensorFlow(CPU版)を入手、インストールします。

#CPU版TensorFlowインストール
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

TensorFlowはCPU版とGPU版があり、GPU版を利用するとGPUを使って計算を行ってくれます。
ただし、GPU版はnVidia製GPUのみが対応している”CUDA”が必要になります。
GPU版を入手する場合は下記のコマンドを使用します。

#GPU版TensorFlowインストール
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

nVidia製以外のGPUを搭載していたり、ドライバが適切に設定されていない環境でGPU版を利用すると、エラーが発生して実行できません。

python
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 23, in <module>
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow import contrib
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/__init__.py", line 23, in <module>
    from tensorflow.contrib import layers
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/__init__.py", line 68, in <module>
    from tensorflow.contrib.layers.python.layers import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/__init__.py", line 22, in <module>
    from tensorflow.contrib.layers.python.layers.initializers import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/initializers.py", line 24, in <module>
    from tensorflow.python.ops import random_ops
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/random_ops.py", line 23, in <module>
    from tensorflow.python.framework import ops
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 39, in <module>
    from tensorflow.python.framework import versions
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/versions.py", line 22, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
    _pywrap_tensorflow = swig_import_helper()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
ImportError: libcudart.so.7.5: cannot open shared object file: No such file or directory

インストールが完了したら、Pythonインタープリタに入ります。

python

すると、pythonの実行環境が起動し、
“>>>”
プロンプトが表示されるので、つづけて下記のように順に入力します。

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)

実行結果はこんな感じです。


>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)
42

ここまで動作すれば、TensorFlowは正常に動作しています。

Linux環境だと、大抵は初めからPythonが入っているので、セットアップ手順が少なくて済むのでありがたいのですが、Python自体を使用しているディストリビューションやアプリもあるようで、不用意にPythonのバージョンをアップグレードしてしまうと、OSやアプリが動作しなくなる危険もあるようです。

その場合はPyenvを利用してアプリごとにPythonのバージョンを切り替えることで対応できるようです。
pyenv + anaconda + python3 – Qiita

この辺りもまた試してみたいと思います。

参考サイト:
UbuntuにTensorFlowをインストール – Qiita
Ubuntu 16.04+CUDA 8.0+Tensorflow 環境で起きるlibcudartが見つからない問題を解決する – Qiita

takahashi 著者:takahashi

Windowsで手軽にマシンの死活管理をするなら”ExPing”がわかりやすい。

最近、電源が切れると困るが、外部サービスを利用するほどじゃない・インターネットに公開していない、というマシンを監視したい。というときにうってつけのツールを見つけました。

ExPingというアプリです。

対象のホストはテキストで一括指定できます。
指定したうえで実行すると、一括して各ホストにPingを送ってくれます。

もしPingに失敗した場合、または成功した場合に音を出したり、ポップアップを出したりも設定できます。

ちょっとニッチなアプリではありますが、ネットワーク管理をしている方には助けになりそうですね!

takahashi 著者:takahashi

Windows用高性能SSHクライアント”RLogin”

サーバ管理などでリモートからSSH接続を利用している皆さん。SSHクライアントは何を使っていますか?
WindowsOSを利用されている方は分かるかと思いますが、MachintoshやLinuxではターミナル画面から手軽にSSHを利用できるものが多いのに対し、Windowsには標準ではSSHクライアントが入っておらず、そのままではWindowsOSからSSH接続することはできません。

そこで代わりに、”SSHクライアント”と呼ばれる専用のソフトが使われることが多いです。

Windowsユーザーでおそらく最も一般的に使われているターミナルは、”Tera Term“というクライアントソフトだと思います。
Tera Termはオープンソースで開発されているため無料で利用できる上、機能もわかりやすくシンプルなので、最近初めてSSHを触り始めた!という方にはおすすめです。また、標準でCygwinに接続する機能も持っています。

一方で、仕事などで複数台のサーバーを管理していたり、踏み台サーバー経由で目的のサーバーにSSH接続したい場合などは、Tera Termでは少し不便に感じる機会が出てきます。
そんな方にお勧めしたいのが”RLogin“というフリーのSSHクライアントです。


http://nanno.dip.jp より引用

RLoginは複数台のサーバーを同時に接続することを前提とした設計になっていて、TeraTerm以上に多くの機能を備えています。

個人的には、
Terminalを色付きにできたり、踏み台サーバー経由の接続も設定することができるのがとてもありがたいですね。

ちょっと高機能なクライアントが欲しいな、と感じている方はぜひ使ってみてはいかがでしょうか?

takahashi 著者:takahashi

セットアップ中のPCが…

ブルースクリーンになってしまいました…

しばらく使っていないWindows7のPCを、社内のテストサーバーのホストマシンにするためにいろいろセットアップしていたのですが、一晩おいておいたらブルースクリーンになっていました…

エラーコードは

DRIVER_IRQL_NOT_LESS_OR_EQUAL

と出ていて、調べたところ、ドライバの不具合が原因で起こるらしいとのこと。
ただ、いろいろ確認した限りではすべて最新版になっているようで、更新できるものは殆どありませんでした。

とりあえず、しばらく様子見です…(汗

takahashi 著者:takahashi

ドメイン参加済みのWindowsPC/サーバーで自動ログインを有効にする方法

通常、Windowsでは設定画面から起動時の”自動ログイン”の設定が可能ですが、ドメインに参加してしまうと、この設定ができなくなります。
セキュリティ的にも自動ログインしない方がいいのですが、使い方によっては自動ログインしてくれないと困る、という時もあるかと思います。

その場合は、Windowsの設定からは変更ができないので、無料配布されている設定ツールを利用することで自動ログインを有効化できます。

Autologon for Windows – Windows Sysinternals
上記サイトからzipファイルを入手し解凍。
Autologon.exe
があるので起動します。

ダイアログが出てくるので

ユーザーアカウント情報を入力、Enableをクリックします。
次回の起動から、ユーザーアカウント選択画面が表示されなくなります。

Windows7から利用することができるので、お困りの方は試してみてください。