モーグルとカバとパウダーの日記 このページをアンテナに追加 RSSフィード Twitter

モーグルやカバ(EXカービングスキー)、山スキー(BC)の山行記録などがメインの日記です。
いろんな条件のいろんなところを、その時々の条件にあった滑り方で楽しむ、フリースキーをして遊んでいます。

検索で来られた方は、上の検索窓から再度検索していただくか、右サイドバーのカテゴリーやトピックスの項目で絞り込んでみてください。
仕事柄、コンピュータ系のネタも多いので、スキー関連ネタだけ読みたい方は[ski]、コンピュータ関連ネタは[pc]、スパム関連ネタは[spam]で絞り込んでください。

2018-06-26 (Tue)

[]PHP5.3からPHP7への移行で出たエラーと対応方法 PHP5.3からPHP7への移行で出たエラーと対応方法を含むブックマーク PHP5.3からPHP7への移行で出たエラーと対応方法のブックマークコメント

最近は結構だいぶひまで、あまりネタがないので小ネタです。


新規サーバ移行に合わせPHP5.3からPHP7へ移行したいという話で、そのテストをしてたときにでたエラーとその対応についてまとめました。


まず、これはPHPの話じゃないんですが、Apacheのバージョンが新しくなったせいで、一部ページで文字化けが発生してたのの対策。

apacheデフォルト文字コード指定がUTF-8になってると、S-JISとかEUCのページがあったときに化けるのでコメント化します。


Apache 文字化け対策 AddDefaultCharset – CentOSサーバ構築術 文具堂

/etc/httpd/conf/httpd.conf

#AddDefaultCharset UTF-8

「Parse error: syntax error, unexpected 'new' (T_NEW)」というエラーが出ていた件対策。

PHP7ではオブジェクトの参照渡し代入ができなくなっている(というか普通に代入すればよい)ため。


Parse error: syntax error, unexpected ‘new’ (T_NEW) in | ホームページ制作部ブログ | 中央区日本橋 しろくまシステムズ

PHP5

$my_query =& new WP_Query

PHP7

$my_query = new WP_Query

「Uncaught Error: Call to undefined function split()」というエラーが出ていた件対策。

splitが不用意に正規表現使われちゃうので関数名が変わった。正規表現の必要ないときはexplode使えと。


PHP5.6からPHP7.1にしたら出たエラー|Never catch a cold.

PHP5

split('/,/', $text)

PHP7

explode(',', $text)

「Fatal error: Call to undefined function mysql_connect()」というエラーが出ていた件対策。

mysql_*系はなくなりmysqli_*系になったので色々と置き換えが必要。


PHP7で、mysql_connect()が無いと怒られる件 (undefined function mysql_connect)

PHP5

mysql_connect(...)

PHP7

mysqli_connect(...)
トラックバック - http://d.hatena.ne.jp/stealthinu/20180626

2018-05-26 (Sat)

[][]NSEG勉強会#100 NSEG勉強会#100を含むブックマーク NSEG勉強会#100のブックマークコメント

NSEG http://nseg.jp/勉強会が100回の節目の会で参加してきました。


NSEG 勉強会 #100 / 第 31 回フリーテーマプレゼン大会 - connpass https://nseg.connpass.com/event/86278/

Togetter https://togetter.com/li/1231435

YouTube https://t.co/xSjt6YLHJk


今回は、前半のプレゼン部分と、NSEGについての座談会部分と、で大きく2パートとなっていました。

特に後半部分は色々と議論があり、有意義な話がされたのではないかと思います。(後半の議論が盛り上がったので、前半の印象が薄れてしまった感じすらある)

今後も新しい参加者を得ながら継続していくにはどうしていったらいいか、について話をしました。


自分は最初、発表予定なかったんですが、前とその前に参加したとき、発表した内容がどちらもネガティブな話で、非公開にさせていただいたという経緯があり、せっかく100回の記念だから夢のある話をしてネガティブイメージを払拭しようと、勉強会中にささっと書いてみました。


シンギュラリティはくるの? https://www.slideshare.net/stealthinu/ss-99124068


この手のことを僕みたいな素人が無責任にしゃべると、都会の勉強会だとマサカリが飛んできそうですが、NSEGならよいかなと。

自分にとってはその「ゆるさ」がありがたい勉強会です。

トラックバック - http://d.hatena.ne.jp/stealthinu/20180526

2018-04-04 (Wed)

[]htaccessでBASIC認証掛けてあるが特定ファイルのみアクセス許可する htaccessでBASIC認証掛けてあるが特定ファイルのみアクセス許可するを含むブックマーク htaccessでBASIC認証掛けてあるが特定ファイルのみアクセス許可するのブックマークコメント

apache上のWordpressで管理画面ディレクトリBASIC認証が掛けているのですが、テーマから wp-admin/admin-ajax.php を呼ばれているため除外する必要がありました。


これを普通に.htaccess

<Files admin-ajax.php>
    Order allow,deny
    Allow from all
</Files>

と追記しても、結局BASIC認証のほうで引っかかってしまうためうまくいきません。


BASIC認証で特定のファイルを除外する方法を調べました。

.htaccessで特定のファイルやディレクトリのみBASIC認証を解除する | ザ サイベース

この場合「Satisfy any」指定を追加して、この条件のみでもallowするようにすればうまくいくようです。

<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

ちなみにこの設定は、そのままWordPressの公式にも案内がありました。

ブルートフォース攻撃 - WordPress Codex 日本語版


あと余談ですが「allow,deny」の間にスペース入れるとエラーになるんですよね。

ちょっとハマりました。

Order指示子のdenyとallowをカンマで並べる時、間に空白を入れてはいけない。 - ぐらめぬ・ぜぷつぇんのはてダ


このへんのSatisfyとかallow,denyの順番のこととかは、下記ページにまとまっていて大変参考になります。

Apacheのアクセス制御をちゃんと理解する。 - こせきの技術日記

トラックバック - http://d.hatena.ne.jp/stealthinu/20180404

2018-03-27 (Tue)

[]ダウンローダダウンロードのリクエストが二重に出ていた理由 ダウンローダでダウンロードのリクエストが二重に出ていた理由を含むブックマーク ダウンローダでダウンロードのリクエストが二重に出ていた理由のブックマークコメント

CMS用に独自のダウンローダが作ってあり、なぜかダウンロードのリクエストが毎回二重に行われる(そして大きなファイルだとそのせいで負荷が増えてしまう)という問題がありました。


非常に謎な動作だったのですが、理由は

  • Rangeには対応していないのにAccept-Range付けていた
  • Edgeのバグ

という2つの理由でした。理由も二重と。


Rangeには対応していないのにAccept-Range付けていた

HTTPではリクエストで「Range」ヘッダを指定すると、ファイルを部分的にGETすることができます。

例えば

Range: bytes=1000-2000

のように指定すると、該当ファイルの1000byteから2000byteを取得できます。

つまり分割ダウンロードが可能になっています。


ただこれは下記のように、レスポンスの「Accept-Ranges」ヘッダに「bytes」が指定されていて、ファイルが部分的GET可能であることが示されている必要があります。

Accept-Ranges: bytes


このダウンローダでは分割ダウンロード(部分的GET)に対応していないのに、この「Accept-Ranges」が設定されてしまっており、それを見てブラウザが分割ダウンロードをしようとしてきていました。

複数のGETにはそれぞれ「Range」が指定されていたのですが、ダウンローダ側は対応していないため、毎回大きなファイルを全部返してしまっていた、というわけです。


たぶん、ダウンローダを書いた人が参考にしたコードはRange対応になっていたのでしょうが、「Accept-Ranges」の意味を確認せずにそのままコピーしてしまってしまったのではないか、と思います。


Edgeのバグ

EdgeだとPDFダウンロードリクエストが二重に出てしまう件について、バグらしいということが報告されていました。

https://stackoverflow.com/questions/31850624/microsoft-edge-pdf-inline-issue-same-issue-again

  • Probelm with Edge and ContentType="application/pdf" And content-disposition "inline;filename=report.pdf" | Microsoft Connect

https://connect.microsoft.com/IE/feedback/details/1621308/probelm-with-edge-and-contenttype-application-pdf-and-content-disposition-inline-filename-report-pdf

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7045462/

https://stackoverflow.com/questions/30918543/microsoft-edge-pdf-inline-issue


簡単にまとめると

  • EdgeでPDFのファイルをダウンロードしようとすると二重にリクエストがくる
  • 二回目のダウンロードではヘッダにGetContentFeatures.DLNA.ORGが付いてる
  • 一度直った(build 10158 2015/7頃)が再発(build 10240 2016/3頃)した

ということだそうです。

トラックバック - http://d.hatena.ne.jp/stealthinu/20180327

2018-02-28 (Wed)

[]ESXiのブラウザコンソールで「:」とかが入力出来ない問題 ESXiのブラウザコンソールで「:」とかが入力出来ない問題を含むブックマーク ESXiのブラウザコンソールで「:」とかが入力出来ない問題のブックマークコメント

ネットワーク含めたテスト環境を構築するため、ESXiでネットワークVMの環境を構築していました。

そこでVM上で動かしてるCentOSの設定ファイルを、ブラウザコンソールからviで編集している時、「:」がどうしても入力できなくてはまりました。

入力される文字からして英語キーボードとして認識されてるのはわかったのですが、どうやって抜けたものか…


実はブラウザコンソールウィンドウの右上に、国旗アイコンがあるのですね。

英語キーボードだとアメリカ国旗になっています。これをクリックするといくつか国旗が出てくるのでそれを日本の国旗を選べばOKです。


ただ、これだとデフォルトキーボード設定は変わらないので、VM毎に設定しないといけないと思います。

ESXiのウインドウ上部に「root@192.168.0.1」みたいに今ログインしているアカウント情報を表示しているところがあり、ここをクリックするとESXiの設定を変更出来るところがあります。

設定→コンソール→キーボードレイアウト→英語

となっているところを「日本語」を選択すると、デフォルトで日本語キーボードになります。

トラックバック - http://d.hatena.ne.jp/stealthinu/20180228

2018-01-31 (Wed)

[][]「SQLアンチパターン」読書会スペシャルに参加しました 「SQLアンチパターン」読書会スペシャルに参加しましたを含むブックマーク 「SQLアンチパターン」読書会スペシャルに参加しましたのブックマークコメント

1/27にGeeklab長野で行われた「SQLアンチパターン」読書会スペシャルに参加してきました。

「SQLアンチパターン」読書会スペシャル - connpass


内容や感想については @thinkAmi さんの

「SQLアンチパターン」読書会スペシャルに参加しました #nseg #glnagano #sqlap - メモ的な思考的な

が超まとまっていておすすめです。


ので、とりあえず自分はtogettertweetまとめました。

「SQLアンチパターン」読書会スペシャルまとめ - Togetter

勉強会の雰囲気をつかめるかと思います。


詳細については@thinkAmiさんのまとめ参照してもらうとして、twadaさんのお話で自分が一番感銘受けたのは、こういった機会に書かれている内容を現在の状況に合わせて見直されているというところでした。

例えば2.4章で、RDB木構造を表現する時ナイーブツリーはアンチパターンとなっていますが、CTEが使えれば使ってもよく(これは本書のアンチパターンを用いても良い場合にも元々書かれている)以前は利用できなかったMySQLSQLiteでも新しいバージョンではCTEが利用できるため、今後はアンチパターンから外すべきだろうとのことでした。


これは本の内容についての話ですが、システム開発でも、本来修正した方が良いところの構造を変えず、古い旅館よろしく継ぎ足し継ぎ足しでなんとか拡張延命させていくと、気がついたときには時代遅れのもう誰も根本的改善のできない恐竜システムとなってしまうことがあります。

そんなシステムは、使わされるユーザも、作らされる開発者にとっても、誰も幸福にならないと思います。

日々改善、リファクタリングをしていけるシステムを作りたいものです。

トラックバック - http://d.hatena.ne.jp/stealthinu/20180131

2018-01-22 (Mon)

[]EC2でのMeltdown/Spectreパッチでの性能低下 EC2でのMeltdown/Spectreパッチでの性能低下を含むブックマーク EC2でのMeltdown/Spectreパッチでの性能低下のブックマークコメント

AWS EC2で動いるシステムが、1月4日のMeltdown/Spectreパッチ適用以降すごくパフォーマンスが落ち、その影響でシステム障害が発生しました。

そのとき、twitterFaceBookで情報いただいた件を簡単にまとめます。


EC2m1.medium)上で動いている非常にDBヘビーな商用CMSがあり、年明け後そのCMSMySQLへのセッション数が溢れてしまうことが原因でシステム障害が発生していました。

調査すると1月4日以降、MySQLで域値を0.1sに設定してあるslow-queryの発生数が何倍にも増えていることがわかり、少なくともMySQLのパフォーマンス低下があることがわかりました。

1月4日にはEC2計画再起動が行われており、これはMeltdown/Spectreパッチ適用によるものでした。


そのため、パッチ適用前と後のDB処理速度を数値的に比較できるものがないか探してみました。

MySQLのslow-queryのログに、毎日定期で重いバッチクエリのものが出ていたため、この処理時間の変動である程度比較できるのではと考えました。

そこで以下のように、4つの重いバッチクエリに対して、パッチ適用前後5日のクエリ処理時間平均を算出しました。

   適用前   適用後   倍率
A  226.26s  375.06s  1.66倍
B  110.09s  210.94s  1.92倍
C   30.68s   56.83s  1.85倍
D   23.18s   74.56s  3.21倍

1.6から3.2倍となっており、少なくともこれらのクエリについては2倍弱は遅くなっている感じがわかりました。


この結果から、twitterFaceBookで同様の状況になっている方がいないか聞いたところ、何人もの方から同じような状況だったり、そのためにインスタンスタイプを変更されているとのお話をうかがいました。

どうもEC2の旧世代PV方式インスタンスのものだと、特に今回のMeltdownパッチの影響を大きく受けるようで、少なくとも20%程度、RDBだとそれ以上の速度低下があるようです。

Auroraでは6割から7割程度までにパフォーマンスが下がっているというレポートもあり、それはこの障害で出ている状況とも感覚的に一致していました。

ただt2インスタンスなど、新しいHVM方式のものだと性能も上がっているうえ、パッチの影響によるパフォーマンス低下も少ないため、問題が起きないようです。


(参考)

MeltdownとかSpectreとか騒ぎがあったので、Amazon Aurora(MySQL互換)R4インスタンス再テスト(mysqlslap) - Qiita

Auroraでのパフォーマンスが63%〜73%程度に落ちていることがレポートされています。

投機実行の脆弱性修正、Haswell世代以前では性能への影響大 〜I/O集中型アプリケーションを利用するサーバーは慎重な選択を。AMDはほぼ影響受けず - PC Watch

Haswell世代以前の古いCPUのほうが影響を受けることが指摘されています。


ただし、AWSの公式見解としてはMeltdown/Spectreでの性能低下はほとんどなかった、という立場のようです。

AWSもSpectreとMeltdownの対策完了を報告。対策後、Amazon EC2で性能の低下は見られないと − Publickey


そのため、インスタンスタイプを

m1.medium → t2.medium

に載せなおすのが最善策ではないかという結論になりました。


PV方式のインスタンスからHVM方式のインスタンスへの載せ替えについて、下記エントリ

AWS EC2のインスタンスが新年早々各地で起動しなくなる可能性がある件 - 株式会社アクシア

に、EBSをほぼそのまま付けなおして移行する手法が、ある程度詳しく書かれていました。

HVM方式が始まったあたりにPV→HVMへの移行について書いてあるものは、変換が必要だったりともっと手数が掛かって大変なものが多いので、この手法が良さそうに思います。

ただ、bootのコピーなどの詳細までは書かれていないので、多少実験して経験を積んでから行ったほうが安全そうです。


先日twitterFaceBookで情報やアドバイスいただいた皆様、ありがとうございました。

トラックバック - http://d.hatena.ne.jp/stealthinu/20180122

2017-12-15 (Fri)

[]MySQL-5.1からMariaDB-5.5へのアカウント情報の移行 MySQL-5.1からMariaDB-5.5へのアカウント情報の移行を含むブックマーク MySQL-5.1からMariaDB-5.5へのアカウント情報の移行のブックマークコメント

CentOS6系からCentOS7系への移行案件があり、そこでMySQL-5.1からMariaDB-5.5への移行を行う必要がありました。

他にも色々と変わる部分があるため、一旦動作テスト用のサーバを作って確認することになり、データの移行を行いました。

そのとき、アカウント情報の移行ではまったのでメモしときます。


まずアカウント情報は普通にフルダンプしても取れないため、下記のようにmysqlテーブルを指定して取ります

正式移行の際には -x オプション付けてロックしたほうがよいでしょう。

# mysqldump -u root -p --allow-keywords mysql > user_dump.sql

その後、テスト用サーバにコピーしてリストアします。

# mysql -u root -p mysql < user_dump.sql

自分はもうこれだけでいいのかな、と思っていたのですが、これだけだと認証が通りませんでした。

まずバージョンが上がっているため、mysql_upgradeを掛ける必要があるそうです。

# mysql_upgrade -u root -p

また、移行元の環境はフロントのwwwサーバとバックエンドのdbサーバが分かれているのですが、テストサーバでは同一上で動かしているため、アカウントの接続元サーバ名の指定がそのままだと通らないので、クエリlocalhostに書き換えました。

が、それだけでは動かないで悩んでいたところ、flush privileges掛ける必要があると教えてもらいました。

update mysql.user set Host="localhost" where Host="www";
update mysql.db set Host="localhost" where Host="www";
flush privileges;

これで無事に動くようになりました。

とみたさんありがとうございます!!

トラックバック - http://d.hatena.ne.jp/stealthinu/20171215

2017-12-08 (Fri)

[]pearでXML_RPCのインストールに失敗する pearでXML_RPCのインストールに失敗するを含むブックマーク pearでXML_RPCのインストールに失敗するのブックマークコメント

とあるWebサーバのリプレース案件PHP環境の移行準備をしていたのですが、pearでXML_RPCを入れようとするとこんな感じにエラーが出てインストールできない問題が起きました。

# pear install XML_RPC

…略…

Could not download from "https://de.pear.php.net/get/XML_RPC-1.5.5.tgz", cannot download "pear/XML_RPC" (Connection to `de.pear.php.net:443' failed: )

Error: cannot download "pear/XML_RPC"

Download failed


手で試してみるとこの「https://de.pear.php.net/get/XML_RPC-1.5.5.tgz」をダウンロードすることは可能なのですが、SSL証明書が2013/8/21で切れており、セキュリティ例外に追加しないと取得できませんでした。

たぶんそのせいでダウンロードに失敗するのだと思います。


そこで下記のように、curlで一度tgzファイルをダウンロードし、ダウンロードしたファイルを使ってpearインストールすることで、無事インストールすることができました。

curl -k -O https://de.pear.php.net/get/XML_RPC-1.5.5.tgz

pear install XML_RPC-1.5.5.tgz


まあ今となってはpearでXML_RPCを入れたいという需要は少ないとは思いますが。

トラックバック - http://d.hatena.ne.jp/stealthinu/20171208

2017-11-18 (Sat)

[][]nseg94で「障害対応の失敗事例から学ぶこと」というLTをしました nseg94で「障害対応の失敗事例から学ぶこと」というLTをしましたを含むブックマーク nseg94で「障害対応の失敗事例から学ぶこと」というLTをしましたのブックマークコメント

久しぶりにnseg(長野のIT勉強会)に参加させていただき、LT大会だったので、LTもさせていただきました。


NSEG94

https://nseg.connpass.com/event/69877/


ETロボコンGoogle Homeプログラミングなど、自分はまだ触ったことないような新しいことの発表が多く、刺激を受けました。

やっぱり技術者は常に新しいものを触っておかないとダメですね…


あと、以前やったディープラーニングハンズオンに参加していただいた方と久しぶりに会って、ディープラーニング系の話が出来たりして楽しかったです。

最近は記事や本を読むくらいで、実際に動かして試すとかしてなかったので、また再開せねばと思いました。

もくもく会みたいなのやろうかな。


自分のLTは「障害対応の失敗事例から学ぶこと」という題で、障害対応で起きた問題のその本当の原因は何か、そして自戒も含めて撤退戦にはどう対処するべきか、というような話をしました。

…というと、なんかちょっと生産的な話っぽく聞こえますが、すごく後ろ向きで救いのない話でした。

なので、資料も配信もありません。


ちなみに質問で@kotyさんから、そのJKは真の問題点について上長に指摘したのか?という話がでましたが、ちょっと僕の解答外してたなと思うところがありました。ので蛇足ながら追記します。

JKは手順書ではなくスクリプト自動化すべき、という提案をして、その際に今の技術者がいない状況では自動化しないと障害時に回らないから、という説明をしたらしいです。

(その時「この件は手順書の更新がされていなかったのが原因だ」という認識だったのでやる気が失せたそうです)

「対応できる技術者がいない」のが大元の問題である、というのは当然向こうもわかっているがそれはどうにもできない、ということで自動化提案をしたそうです。

なので技術者を増やすべきだ、という提案はしていないそうです。


(追記)

ちなみに一つ前のエントリー

findで特定ディレクトリ以下のみを検索 - モーグルとカバとパウダーの日記

http://d.hatena.ne.jp/stealthinu/20171020/p1

がこの話関連だったりします。


@matchy3 さんが動画上げてくれてました。

長野のテック勉強会 #NSEG 94 フリーテーマプレゼン大会 - YouTube

トラックバック - http://d.hatena.ne.jp/stealthinu/20171118