ブログが”500 Internal Server Error”を吐いて困った

前のPDCAスピナーの記事は数日前に書いていたのだけれども、そもそも(久々に開いた)ブログが「500 Internal Server Error」を出してまともに表示できなくなっていて困りました。このブログはWordpressで構成しているのですが、現象からググってもなかなか原因がわからず難儀しました。

結論から言うとテーマファイルに含まれた記述が原因でした。

現象は、
– ブログトップにアクセスすると「500 Internal Server Error」が表示される
– スマホからは問題なく見られる (PCとAndroidタブレットからはダメ)
– ダッシュボード(管理画面)は見られる (更新はできない)
といったもの。

運悪くサーバー障害とぶつかっており、そっちが原因かと思って数日放置しましたが直らず。

データベースだけ残してWordpress自体の再インストールなどを試しましたが直らず。

もういやだ。

プラグインなどは問題なさそうで、テーマを変えたところ表示されました。というわけで絞り込み。

1. テーマに必要な最低限のファイルだけで試す

  index.php、style.cssだけをアップロード
  → 動く

2. 1ファイルずつアップロードしてく

  header.php以外をアップロード
  → 動く

  header.phpをアップロード
  → 再現

というわけでheader.phpに原因がありそう。更にheader.phpの記述を一旦全部コメントアウトし、少しずつ解除していきます。そこでようやく原因が判明。

どうも原因はheader.phpの先頭に記載された以下の記述のようです。

< ?php if (!(ereg("Windows",$_SERVER['HTTP_USER_AGENT']) && ereg("MSIE",$_SERVER['HTTP_USER_AGENT'])) || ereg("MSIE 7",$_SERVER['HTTP_USER_AGENT'])) {
echo '<?xml version="1.0" encoding="' . get_settings('blog_charset') .'"?>' . "\n";
} ?>

調べてみると、Wordpressではよく使われているxml宣言追加文のようでした。消しても動いたのですが、よくよく調べるとphpのバージョンアップとwordpressのバージョンアップと、それぞれ非推奨の記載方法になってようです。そういや最近サーバーが刷新されたとの知らせがあったな…。

今回は以下のeregが原因で500エラーになったっぽいです。矢印のように直すのが推奨のようです。
– PHPのバージョンアップによるもの: ereg → preg_match (今回はこれが原因)
– WordPressのバージョンアップによるもの: get_settings → get_option (今回の原因ではないが前者の関数は今は非推奨)

というわけで、以下のように書き換えて元通り動くようになりました。めでたしめでたし。

< ?php if (!(preg_match("Windows",$_SERVER['HTTP_USER_AGENT']) && preg_match("MSIE",$_SERVER['HTTP_USER_AGENT'])) || preg_match("MSIE 7",$_SERVER['HTTP_USER_AGENT'])) {
echo '<?xml version="1.0" encoding="' . get_option('blog_charset') .'"?>' . "\n";
} ?>

今回のコード記述でうまいことコード装飾ができていないことが分かったのでそのうちちゃんとCSSもいじりたい。

Filed under: 作業メモ — kirin 23:23  Comments (0)

Arduino Nanoの代わりにNucleo F303K8で開発してみた話

この記事はmbed Advent Calendar 2016の16日目の記事です。

mbed初心者です。よろしくお願いします。
初めて使ってみる話です。

先日の記事にも書きましたが、現在アイロンビーズを自動で配置する「アイロンビーズビーズプロッター」を作っています。

アクチュエータを含まないハード部分はだいたいできましたが、駆動部分と制御ソフト、PCの画像処理ソフトを何とかしているところです。

PCから送られる情報でモーターをうまいこと制御するには、間にマイコンなどを入れての制御が必要です。最初はArduino Nano互換ボードを使用する予定でしたが、amazonで買ったステッピングモーターに付いていたドライバ基板4とセンサを扱うにはピン数が足りませんでした。そこで、mbedの勉強もかねて今回は同じピン数・ほぼ同じサイズのボードでありながら使用可能ピンがが少し多いNUCLEO F303K8を使うことにしました。

ちなみに制御ボード周りはこんな感じ。配線をちゃんと考えなかったので汚い…。

■ 外面仕様などの比較

F303K8はArduino Nanoとピン数こそ同じものの、USB接続がチップの周辺機能を使用していたり電源系の違いによりIOとして使えるピンが多いです。また、チップ自体がずっと後発・高機能なので機能ピンの自由度も高いです。今回はGPIOばかりなのであまり生かせていませんが。

電源電圧の違いこそあるものの、今回の使い方ではあまり問題になりません。動作周波数もずっと速いです。

これでもお値段は秋月電子で1600円とお安め。とはいえArduino互換品は安すぎるのでちょっと比較になりませんな…。ここは歴史が長くオープンソースハードウェアなArduinoの利点ではあります。(この互換品がきっちりArduinoのルールに従っているか?というとちょっと怪しいですが…)

互換品のほうも値段以外にも個人的に良いと思っているところがあります。ピンヘッダがはんだ付けされていないことです。実験などで使うには面倒ですが、薄い状態で組み込めるので、小さいものを作ることが多い自分には助かってます。

↓Arduino Nano互換品とF303K8。

■ プログラム開発してみる

ArduinoはArduino IDEで開発します。ライブラリはダウンロードしてきて解凍、フォルダに格納する必要があります。

mbedを使ってArduinoより便利だと思ったのは、公開されているライブラリがボタン一つで取り込めること。色々な言語・環境に公開ライブラリを取り込み管理するシステムが用意されていますが、今まで使った中では一番楽だと思いました。

さらに、Arduinoに負けないくらいのライブラリが公開されています。最初、買ったステッピングモーターを制御するためmbedの標準APIを読みまくってプログラムまで考えていたんですが、いざモーターの型番で検索すると…

使い方も接続もライブラリも書いてくれてる人いるじゃん…。

いざ繋げてみると…

動くじゃん…

んで、余ったI2CピンでキャラクタLCDに状態表示を仕様とI2Cライブラリを読…む前に検索すると…

あるよねー

動くよねー

と、まだ進捗これくらいですが、あっさりといろいろ動いてしまっています。
初めてマイコンをさわり始め、設定間違えまくりながらバリバリレジスタを
叩きまくるようなプログラムを書いていた頃と比べると隔世の感がありますね。
高々10年くらいなんですけどね。

これから制御部分を書いていかないといけませんが、mbedの便利な部分や
先人の知恵にまだまだ助けられそうです。

ということで〆。

Filed under: 作業メモ — kirin 00:00  Comments (0)

「アイロンビーズプロッター」でプロ生ちゃんアイロンビーズを作ってみたい

この記事は「Qiita プロ生ちゃん Advent Calendar 2016」14日目の記事です。

qiita.com


ブログを書くこと自体めっちゃ久々ですが…。
今更ながら、11月のプロ生熊本で発表した話です。

発表スライド↓

いろいろありまして、現在「アイロンビーズ」を自動で並べる装置を作っています。アイロンビーズとは樹脂製の筒を並べて絵を描き、アイロンで溶かして固定する手芸作品です。詳細は上のスライドを見るか、ググってくださいまし。

アイロンビーズでプロ生ちゃんなどのビーズ作品を作ってマスコットアプリ文化祭に応募することを目指しています。(マスコットアプリ文化祭はプロ生ちゃんを始め様々なマスコットキャラを対象としたアプリのコンテストです。アプリだけでなくイラストや立体作品も募集しています)

ちなみに↓は手で作ったやつ。30分くらい。

■ ハードウェア・制御ボード

任意色のビーズを選択し1個を取り出す機構やビーズを配置するプレートをスライドさせる機構はFusion 360で設計し、3Dプリンタで出力しています。レンダリングするとなんかそれっぽくていい感じ。

悩んだビーズ供給機構は2つの回転する円盤を組み合わせることにしました。考えた中ではこれが一番モーターなどの駆動部品が減るかなと。

試作ではいい感じに動いていたんですが、実際にモーターをつけて回すとつっかえたりします。サイズを変えて作り直したり、制御プログラム側で調整を続けています。

モーター・センサの制御ボードにはArduino Nano(の互換ボード)を使う予定でしたが、買ったモーターに付いていたドライバ基板4とセンサを扱うにはピン数が足りませんでした。そこで、mbedの勉強もかねて今回は同じサイズで有効ピンが少し多いNUCLEO F303K8を使うことにしました。これについては明後日mbed Advent Calendar 2016で書く予定。

■ ソフトウェア

画像を読み込み、トリミング・リサイズし、ビーズ色に減色・最適化し、制御ボードに情報を投げつけるソフトをC#で作ってます。

まだあんまりできてない…。できたらそのうち解説書きます。

果たしてマスコットアプリ文化祭に間に合うのだろうか??

【作業メモ】 PCやPS3まわりの構成を変更した

■ PCとnasneのHDDがいっぱいになってきた

nasneのHDDが録画でいっぱいになってきたので外付けHDDの購入を検討。
「500GBあれば十分やろ」と思ってたがやっぱり甘かった。

アニメ2クールで埋まりました。 (それでも持ったほうだと思う)

それから作業用PCもコンテンツデータでほぼ残り容量がなかったり、OSの調子が悪いので
クリーンインストールを考えたりで、HDDの差し替え含めまとめて構成を変更することにしました。

せっかくなので(今更)SSDやUSB3.0も使ってみたくなり、けっこう大がかりな移行になってしまった…。
 
 

■ 構成の変更

これから↓
pc-system-bef

こう↓
pc-system-aft

・作業用PCのメインドライブを1TB HDD→250GB SSDに変更
・作業用PCにUSB3.0 I/Fを接続してバックアップ用にUSB3.0 外付けHDD(3TB)を接続
・torneに接続していた外付けHDD(2TB)をnanseに付け替え
・PCのバックアップ用につけていた外付けHDD(1TB)をtorneに付け替え
 
 

■ 購入したもの

SSD/外付けHDD/USB3.0IF/SATAケーブル/USBハブなどなど。
選んだ基準はamazonで売れてるのを適当に。深い理由はないです。

・SSD: Samsung SSD840EVO ベーシックキット250GB MZ-7TE250B/IT
・外付けHDD: BUFFALO USB3.0 外付けハードディスク 3TB HD-LBV3.0TU3/N
・USB3.0 I/F: エアリア Over Fender R USB3.0 ボード SD-PEU3R-2E2IL
・その他SATAケーブルや電源ケーブルやUSB3.0ハブなど
 
 

■ 移行作業

もともと接続に使っていたのがほとんどUSB2.0だったのでコピーに結構時間がかかりました。
OSはちょっと前にクリーンインストールしたばかりだったのでSamsungのクローンツールで
サクっと終わらせようとしたのにコピーが途中で止まったりと散々でした。

  1. 作業用PCにSSDを接続してクローンソフトでコピー・・・しようと思ったが何度も失敗する。
    結局元ドライブのデータは消してSSDにOSを直接クリーンインストール。
    SSDめっちゃ速い。気がする。
  2. 作業用PCに接続していたバックアップ用外付けHDD(1TB)の中身を購入したUSB3.0外付けHDDにコピー。
    700GBくらいあり、しかもまだUSB3.0 I/Fが届いておらず、中身を吟味しながらだったので数日かかった。

  3. torneに接続していた外付けHDD(2TB)の中身を吟味し、1.7TB→700GBくらいに減らす。
    バックアップ用外付けHDD(1TB)をフォーマットしてからPS3に接続し、設定からHDDを登録。
    その後コンテンツをコピー。一晩で終わるかと思ったがまさかの2日かかった。

  4. 空になった外付けHDD(2TB)をフォーマットしてからnasneに接続。
    (nasneは録画先を選べず、内蔵HDDと外付けHDDに自動で録画を振り分けることをここで知る)

  5. PCにUSB3.0ポートを増設し、外付けHDD(3TB)を接続。めっちゃ速い。USB3.0すごい。
     

  6. SSD(840 EVO)の「RAPID mode」を有効にすると爆速になるらしいので有効にする。
    参考→ ASCII.jp:コスパが優秀なSamsungの最新SSD「840 EVO」を試す (4/4)|最新パーツ性能チェック
     
     

■ ディスクのベンチマーク

いちおうPCのベンチを取っておいた。

↓元HDD
crystal_disk_mark_SAMSUNG_HD103UJ

↓換装後SSD
crystal_disk_mark_SAMSUNG_840_EVO

↓換装後SSD(RAPID mode有効)
crystal_disk_mark_SAMSUNG_840_EVO_OPT

上の記事ほど速くならないなあ…。

よくよく調べるとマザーボードのSATAが2.0みたいなので、SATA3.0である840 EVOの恩恵を
受けられていないのかもしれない。

SATA3.0ボードも付けてはみたが、BIOS画面が一つ増えて起動がかなり遅くなるのと、すんなり
OSを起動してくれないので諦めた。ちゃんと設定したらうまく動くのかも。
 
 

■ おわり

ここらへんで飽きたのでおしまい。
結果的には全体的に速く、容量にも余裕ができたので大変満足です。
 
 

Filed under: 作業メモ — kirin 23:43  Comments (0)

【作業メモ】 落ちていたので復旧した

■ 謎のサイト落ち

ここ一ヶ月くらいsonanoka.comが落ちていたので復旧しました。

サーバーのログを見ると4月末、ちょうどニコニコ超会議の前日くらいから
落ちてたみたいでした。何故?PVは特に多いとかなかったんだけど。
 
 

■ 復旧手順

Internal Server Errorが出ていて、いろいろ試しましたがなかなか原因がわからず、
結局再Wordpressをインストールしました。
 

● ひとまずWP_DEBUGの有効化

● WordPressの再インストール

  1. DBとコンテンツ以外を削除
  2. WordPress最新版をダウンロードしてきてインストール後、コンテンツをコピー
    • ここで管理画面とトップページが復活
      • 管理画面からプラグインの自動アップデートと削除が出来ない…
      • 何故かテーマが反映されてない
      • 固定ページと次のページがNot foundになる
  3. CGIモードへの変更
  4. パーマリンク設定
  5. Markdownプラグインの変更(Markdown for WordPress and bbPress→Jetpack)
    • 前者が全く更新ないのでJetpackのに変えることにした
    • 使っていたMarkdownプラグインの停止・削除→JetpackのMarkdownプラグインを有効化→Markdownを使っていた投稿を再更新
       
       

■ これから

3月中旬からGWにかけて色々イベントがあって展示やら発表やらしまくっていて、
これからもまだまだイベントや勉強会がたくさんあるので、備忘録という意味でも
過去含めて記事書いていきたいと思います。
 
 

Filed under: 作業メモ — kirin 00:47  Comments (0)