著者アーカイブ takahashi

takahashi 著者:takahashi

Gitでファイルのパーミッションを変更しただけで”ファイルを変更した”扱いになってしまうときの対処法

Unix系の環境でGitの操作をした際、権限を変更しただけで”ファイルを変更した”扱いになってしまうことがあります。

例:

chmod 755 -R hoge
cd hoge
git diff

diff --git a/API/.editorconfig b/API/.editorconfig
old mode 100644
new mode 100755
diff --git a/API/.env.example b/API/.env.example
old mode 100644
new mode 100755
diff --git a/API/.gitattributes b/API/.gitattributes
old mode 100644
new mode 100755
diff --git a/API/.gitignore b/API/.gitignore
old mode 100644
new mode 100755
diff --git a/API/app/Console/Kernel.php b/API/app/Console/Kernel.php
old mode 100644
new mode 100755
diff --git a/API/app/Exceptions/ApiException.php b/API/app/Exceptions/ApiException.php
old mode 100644
new mode 100755
diff --git a/API/app/Exceptions/Handler.php b/API/app/Exceptions/Handler.php
old mode 100644
new mode 100755
diff --git a/API/app/Http/Controllers/Auth/ForgotPasswordController.php b/API/app/Http/Controllers/Auth/ForgotPasswordController.php
old mode 100644
new mode 100755
...

プログラムの動作上、権限の変更が必要になることがあるのですが、そのたびに変更の取り消しを行うのは面倒ですし、ローカルでファイルの変更を行っていたりするとさらにややこしくなる可能性があります。

実は、Gitで権限の管理を無効化する方法が標準で用意されているので、設定を行うだけで権限の変化をししてくれるようになります。

git config core.filemode false

として

git diff

を実行すると、権限の変更を行っても検知されなくなっているのがわかるかと思います。

お困りの方は是非参考にしてみてください。

takahashi 著者:takahashi

Apacheのエラーページに出力されるバージョン情報を消す方法

フリーで利用でき、実質Linux上で動作するWebサーバーのデファクトスタンダードとなっているApacheですが、セットアップしてすぐの時によくやってしまうミスの一つとして、エラーページにバージョン情報を公開してしまう、ということがあります。

これはApacheのデフォルト設定が、ApacheのバージョンとOS名を表示するようになっているからです。

何がまずいのか、と思う方もいらっしゃるかもしれませんが、ApacheのバージョンやOSがわかる状態になっていると、もしそのバージョンに脆弱性が発見された際、攻撃者にヒントを与えてしまうことになります。

バージョンが見えてしまったからと言って必ず攻撃されるわけではありませんが、セキュリティ的にはよろしくないので、公開する環境においては非表示にすることが推奨されています。

ということで今回はエラーページからバージョン表示を無効化する方法をご紹介します。

なお、debian系OSとRedHat系OSで編集する設定ファイルが異なりますので注意が必要です。

debian系の場合

設定ファイルは

/etc/apache2/conf-available/security.conf

にあります。
このファイル中の25行目あたりに

ServerTokens OS

という項目がありますので

ServerTokens Prod

と変更しておきます。
この状態で

sudo service apache2 restart

とすれば反映されます。

RedHat系の場合

RedHat系の場合はデフォルトで設定ファイルに指定がないようなので

/etc/httpd/conf/httpd.conf

の末尾に一行書き足します。

ServerTokens Prod

書き足したら、下記コマンドを実行します。

sudo service httpd restart

これで設定は完了です。

この状態でサイトのエラーページを出してみると

このように、ApacheのバージョンとOSの表記を消した状態で表示されるようになります。

ApacheでWebサーバーを運用される方は是非参考にしてみてください。

takahashi 著者:takahashi

スーパーセキュリティZERO(BitDefender)とWSLを併用するとBSODを引き起こす話

自分が持ってるmacbook AirにはBootCampでWindowsもインストールしてあるのですが、このWinodws上でWSL(Windows Subsystem on Linux)でUbuntuを動作させようとしたところ(コマンドプロンプトで”bash”コマンドを実行したところ)ブルースクリーンが発生する状況になってしまいました。

ブルースクリーンの時の内容は下記の通り

     停止コード : SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

     失敗した内容 : FLTMGR.SYS

Windowsの同じバージョンを搭載している別のPCでは同じ現象は起きなかったため、疑問に思っていろいろ調べたところ、ある事実が発覚しました。

WSLを起動すると、停止コードなど表示されてOSが再起動する – Microsoft Office フォーラム

実は自分のmacbookAirにのみ、スーパーセキュリティZEROというセキュリティソフトをインストールしていました。
このスーパーセキュリティZEROはBitdefenderという非常に人気の高いセキュリティソフトがベースとなっているセキュリティソフトで、性能面としてはかなり高性能なものとなっています。

しかし、上記のような情報によると、どうもBitdefender系のセキュリティソフトにWSLの機能と競合してしまう不具合があったようです。

OS build 17134.5 Stop Code: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED FLTMGR.SYS #3148 – GitHub

尚上記のサイトによると本家のBitdefenderでは改善されているようですが、OEM版である”スーパーセキュリティZERO”は記事作成時点での最新版(Ver.22.0.21.297)でも修正されていないようで、自分の環境で試したところブルースクリーンが発生し、 スーパーセキュリティZERO をアンインストールすればWSLを実行しても問題なく動作することを確認しました。

当分はWSLかスーパーセキュリティZERO、どちらか片方をアンインストールするしかないようです。

僕の場合はLinuxで使用するような、基本的なネットワークツールを利用できれば問題ないので、WSLの代わりに以前ご紹介したWindows向けパッケージマネージャーのChocoとGitに付属する”GitBash”を組み合わせて使用していきたいと思います。

takahashi 著者:takahashi

Let’s Encrypt+MyDNSでサブドメインのワイルドカードを取得する方法

以前、無料のSSL発行サービスであるLet’s Encryptと無料のDDNSサービスであるMyDNSを組み合わせて自動でワイルドカード証明書を取得・更新する方法をご紹介しましたが、前回の方法だけではサブドメインのワイルドカード証明書(例:*.hoge.example.com)を取得することはできませんでした。

今回はそのサブドメイン証明書をLet’s Encrypt+MyDNSの環境で自動取得・更新する方法をご紹介します。

本題に入る前に、そもそもなぜサブドメインにワイルドカード証明書が必要なのか、について説明します。

折角ワイルドカード証明書がとれるようになったのだから

*.example.com

の証明書だけとっておけば全部使えるじゃん!

そう思う方もいらっしゃるかもしれません。

ここがややこしいところなのですが、実は*.example.comのSSL証明書は例えばhoge.example.com に対しては有効ですが、 *.hoge.example.com(正式な呼び名ではないですが、ここでは便宜上”サブサブドメイン”と呼びます。)に対しては有効ではありません。

ということで サブサブドメインにも適用可能なワイルドカード証明書を作るためには、サブドメインのワイルドカード証明書が必要である、という説明でした。

それではその”サブドメインのワイルドカード証明書”を、Let’s Encrypt+MyDNSで取得してみましょう。

まず、MyDNSにログインします。

メニューから

USER INFO

を選択すると、登録情報編集画面が開くので、その中の

子ID関連の”追加する子IDの数”を追加するサブドメイン分選択します。

これで登録すると、申請した分の子IDのログイン情報がメールで送られてくるので、その情報をメモします。

次に、親IDにログインしたまま、DOMAIN INFOへ移動して、レコード情報に次のように入力します。

サブドメイン名を入力し、DELEGETEを指定すると、そのサブドメインの設定を行末で指定するmydnsのIDに一任させるように指定することができます。

指定するmydnsのIDは、先ほど登録情報欄で増やしたmydnsIDを選択します。

詳細は公式のドキュメントを参照してください。

https://www.mydns.jp/?MENU=030

ここまで出来たら、後は以前ご紹介した手順をサブドメイン分繰り返します。

ただし、
DirectEdit-master
はサブドメイン分用意する必要がありますので注意が必要です。(txtedit.confに登録できるアカウント情報が1つのみのため、アカウント分用意してそれぞれtxtedit.confを設定する必要があるため。)

ディレクトリ名を変えてインストールなどして対策してください。

これでサブドメインでもワイルドカード証明書の自動取得・更新をすることができました。

サブドメインの証明書が必要な方は是非試してみてください。

takahashi 著者:takahashi

LinuxにsmartdをインストールしてHDDが壊れたときにメール通知してもらう方法

社内には一台テストサーバーが置かれてます。こちらのテストサーバーのストレージはRAID構成になっていないため、代わりに故障の兆しを見逃さないためにHDDのSMART情報に何か異変があったらメールが飛ぶようにしてみました。

なお、メールを送信するにはあらかじめメールサーバーのセットアップが必要です。

今回はUbuntuをベースに紹介します。

まず、smartdをインストールします。

sudo apt install smartmontools
sudo systemctl enable smartd

smartdの設定をしていきます。

/etc/smartd.conf

をテキストエディタで開き、下記のように変更します。

#-の行を削除し、+の行を追加
- DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
+ #DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner

+ DEVICESCAN -a -M test -m 通知送付先メールアドレス -s スケジュール

“-M test” と入れておくとsmartd起動時にテストメールを送信してくれます。

スケジュールの指定については参考サイトを参照してください。

S.M.A.R.T. – Arch Linux

完了したらsmartdを起動(再起動)します。

sudo systemctl restart smartd

この時点でメールが送信されてこれば、セットアップは完了です。

参考サイト:
S.M.A.R.Tの値をsmartd で監視してメールを送る – それマグで!

takahashi 著者:takahashi

LaravelにTwitterログインを実装しようとしたら非常に面倒くさかった件(主にTwitter側が)

最近、業務でLaravel製のWebアプリを作ったことがきっかけで、LaravelベースのWebアプリケーションを個人でも作りたいと思い、いろいろ調べています。

取り敢えずまずはTwitterアカウントで自分のWebアプリにログインできるようにしたいと思い、やり方を調べていたのですが、出だしで躓きました。

従来のように apps.twitter.com でアプリのトークンを取得しようとしたところ、何やら見慣れないメッセージが…

Google翻訳に通すとこう。

既存のアプリの管理を続けることはできますが、新しいアプリを作成したりTwitterプレミアムAPIを使用したい場合は、開発者アカウントを申請してください。 開発者プラットフォームとして、私たちの最初の責任は私たちのユーザーにあります:Twitterで会話の健康をサポートする場所を提供すること。私たちのプラットフォームの誤用を防ぐために、私たちは開発者のためにいくつかの新しい要件を導入しました。

はぁ…と思いつつも開発者アカウントとやらを申請してみることに。

ところが…

何これめちゃくちゃ面倒くさくなってる…

特に最後のAPIの使用用途(アプリの内容)についての記述は、最低300文字以上、しかも英語で説明しないといけないようです。

これ英語ができない人にとってはハードルめちゃくちゃ高くなってるじゃん…

おまけに、提出すれば即時にAPIの利用ができるわけではなく、審査期間を得てTwitterから承認を得られれば、晴れてトークンが発行される仕組みになったようです。

【第1回】Twitter APIを使うためにdeveloper accountの申請をしよう!(外部サイト)

上記のサイトによると、こちらの方は20日ほど待たされたそうです。
なんという面倒くささ…

でも自分が使用したいのはまっとうな理由からですし、申請してみたら案外すんなり通る可能性もあるかもしれないので、頑張って申請してみたいと思います。

Laravel+Twitter周りは、成功したらまた載せようと思います(汗

takahashi 著者:takahashi

Gitで特定のディレクトリのみチェックアウトする方法

Gitリポジトリは扱いやすさの面で、基本的に一つのプロジェクトに対して一つのリポジトリにすべきだと思っています。(一つのリポジトリに複数のプロジェクトを入れてしまうと管理がちょっと面倒くさくなる。)

ただ、やむをえない事情で複数のプロジェクトを一つのリポジトリに入れておかないといけない場合が出てくることがあります。(使用できるリポジトリ数に制限がある場合など)

そういう時にGitリポジトリの一部をチェックアウトできると便利ですよね。

今回は、Gitで一部のディレクトリだけをチェックアウトする方法をご紹介します。

今回は、操作はCUI上ですべて行います。

まず、目的のGitローカルリポジトリ内の”.git”が存在するディレクトリがカレントディレクトリになるように移動します。

例:

cd path/to/gitdir #.gitがあるディレクトリに移動
ls -a #ディレクトリの中身を表示
. .. hoge huga .git piyo 

次に、下記のコマンドで”.git/info/sparse-checkout”ファイルを作ります。

vi .git/info/sparse-checkout

エディタで下記のように編集します。

/hoge

/hogeのみをチェックアウト

あるいは

!/huga
!/piyo

/huga
/piyo
を除外

というように指定します。

この後、

git read-tree -m -u HEAD

とすると、指定されたディレクトリのみが残ります。

ls -a
. .. hoge .git

こうしておけば、リポジトリが同じでも、自分が触っていないところを誤って変更したり削除してしまったり、ということも防ぐことができて便利です。

お試しあれ。

参考サイト:
Gitで特定のディレクトリだけcloneする方法 – Qiita

takahashi 著者:takahashi

一つの画像から色ごとにレイヤーを分けてくれるサービス”Unbrending”

フォトエディタなどで、複数の色を混是ることは簡単ですが、その逆で、一つの画像から色ごとにレイヤーを分離する、というのは特殊な処理なようですが、それを行ってくれるWebサービスがあります。

Unblending Web App

実際に使ってみました。

自分の持っている画像をアップロードすることもできますが、今回はテストということで下の”サンプル画像を使ってUnbrendingを試す”でテストしてみます。

“サンプル画像を使ってUnbrendingを試す”
をクリックすると、上記のようにいくつかの設定が追加されます。

この状態で、”プレビュー”ボタンをクリック。

すると指定された色ごとにレイヤーを分離してくれます。

この状態で”ダウンロード”をクリックすると

しばらく処理を行った後、各色ごとに分離された画像をzip形式で入手することができます。

これができるとどのようなことに使えるのか、というのが公式サイトの動画で紹介されています。

より表現の幅が広がりそうですね…!

気になった方は是非試してみてはいかがでしょうか!

takahashi 著者:takahashi

セレクトボックスを少しリッチにするselect2jsでプルダウンにない値を入力可能にする方法

HTMLのセレクトボックスに機能を追加してリッチにしてくれる”select2“というライブラリがあります。

使い勝手がそこそこいいので、自分も一部のWebアプリで使っていたりします。

具体的にselect2を使うとどうなるかというと

こんな風に、セレクトボックスの選択肢に書式を適用したりできます。

さらに上に見ているテキストボックスですが、

文字を入力するとリアルタイムに選択肢をフィルタしてくれます!

勿論、multipleなセレクトボックスにも対応しています。


これだけでも素晴らしいのですが、折角入力欄があるのでセレクトボックスにない新しい項目も追加できたらいいなぁとふと思ってしまったのですが、調べたところ…

Dynamic option creation – SELECT2

その機能もSelect2に入ってました\(^q^)/

どうやるかというと、
Select2は

$("セレクトボックスのセレクタ").select2();

のように指定することで有効化するのですが、

$("セレクトボックスのセレクタ").select2({
    tags: true
});

という風に引数にオプションを追加すると

入力欄に入力した項目が一覧になかった場合でも、検索ボックスに追加することができます!

この場合、どうなるかというと、select2()をかけた要素のセレクトボックスのvalueの値に、入力した文字がそのまま反映されるので、通常の値の処理と同様に扱うことができます。

ただし、表示上の値とvalueの値を別のものにしているプログラムの場合は、新しく追加された値だけ表示上もvalueの値も入力されたものになりますので注意が必要です。

多機能なセレクトボックスを実装したい方は是非参考にしてみてください。

takahashi 著者:takahashi

ポッキーでプログラミング!?グリコが開発したプログラミングの考え方が学習ができるアプリ”GLICODE”

ふと買ってきたポッキーのパッケージを開けようとしたところ、パッケージの側面に名に書かれているのを見つけました。

ポッキーで…プログラミング…???

どういうこっちゃと思いつつ調べたところ、公式のティザーサイトを発見。

GLICODE – グリコ

このサイトにあった動画を見たことで、”ポッキーでプログラミング”の意味が分かりました。

ポッキーを並べることでキャラクターの動きを”制御”してみよう!
ということのようです。なるほどなるほど…

どんなアプリなのか実際に確かめてみたくなったので、実際にインストールしてみました。

GLICODE®(グリコード)
GLICODE®(グリコード)
開発元:EZAKI GLICO CO.,LTD.
無料
posted withアプリーチ

ちなみに、”GLICODE”と検索してしまうと英語版がヒットしてしまうので、日本語で”グリコード”と検索するのがおすすめです。

タイトル画面。

Level 1

このアプリではプログラム言語を覚えておく必要は一切ありません。

すべてポッキーの並びだけでコーディング(?)します。

このキャラクターの名前は”ハグハグ”というのか…

ポッキーの向きで、”ハグハグ”に動きを指示するようです。

左下のカメラアイコンをタップするとアプリ内でカメラが起動。

おてほんどおりにポッキーを並べてみます。

なんとポッキーが画像認識されているではありませんかwww

ポッキーの向きを元に”右にうごく”という命令が入力されました。

この命令でOKな場合は右下の”めいれいをけっていしよう”と出ているボタンをタップすることで、入力した命令が確定される、という流れのようです。

確定したらステージに戻ります。

再生ボタン(?)をタップすると、確定した命令が実際に実行されます。

動き出すハグハグ…

女の子のもとへ到着。

ギュッ…

それとなくホラー感を感じる流れな気がしなくもないですが、なるほど確かにポッキーでキャラクターを制御できました。

Level 2

今度は横移動に加えて縦移動が必要になるようです。

Level 1ではポッキーを使ってハグハグを横に動かすことができました。

では縦に動かすにはどうすればいいのでしょう…?

そうです。ポッキーを使います…!

グリコードでは、おなじ平面上に複数本のポッキーを並べることで、ハグハグに続けて複数の動作をさせることができます。

今度は右に1マス動かした後、下に2マス動かす必要があるので、ポッキーを3本用意して

→ ↓ ↓

とすると目的の動作になるはずです。

早速入力して…

実行!

ハグハグが指示された通りに動き…

ギュッ…

ステージクリアです。

ポッキーで与えた命令は、必ず順番通りに実行されます。

これは与えた命令は必ず順番に実行されるというシーケンス(=じゅんばんにじっこう)というものですと説明。

そう、ポッキーでプログラムの基本的な要素の一つである”逐次(順次)実行”をわかりやすく説明してしまいました。

グリコード…恐るべし…

とまぁこんな感じで、プログラミングをする前に学んでおくべき考え方を、ポッキーを使って学習することができるという、かなり画期的な内容になっています。

このアプリでは、プログラムの

・処理の逐次実行

・処理の繰り返し

・処理の場合分け

の三つの考え方をポッキーを使って学習することができるようです。

子供向けの教材といえば、LEGO社が出しているMindStormという製品があります。

こちらも(普通のものと形状が違うが)おもちゃのブロックという子供が親しみやすいものと、プログラムの要素をブロックパーツにしたものをくっつけていく、という視覚的にコーディングができる開発環境になっているので、初めてプログラムを触る子供にとっても入門しやすい内容になっています。

しかしながら、ロボットを扱うという部分がある以上、ちょっと難易度は高め(ある程度の難易度があるので、MindStormを使ったロボットコンテストが開催されています)で、思い通りに触れるようになるまでに少し時間がかかるかもしれません。

一方、今回のグリコードは内容としてもMindStormよりもシンプルかつ基本的な部分ですが、ブロックよりもより慣れ親しみやすい”お菓子”を使ってプログラムの基礎を学ぶことができる、というのはとても画期的なアイデアではないかな、と思いました。

…ちなみに、今回の記事を書くにあたって、実際に会社のオフィスで
一人ポッキーを並べてスマホをかざす…ということをしていたのですが…

周りの人の目にはどのように映っていたのか。
考えかけてやめました。ええ。