SEEDS Creator's Blog

MW WP Formを使って動かない時に確認したいこと


「Word Press」のコンタクトフォームと言えば「Contact Form 7」。 いつも迷うことなく利用し続けていました。 「Contact Form 7」といえば、海外で開発されているため、基本確認画面がありません
日本では確認画面が必要な案件が多く、「Contact Form 7」を使用するともれなく カスタマイズしなければなりません。
そうなると手間がかかってしまったり、精度が落ちてしまうという問題点が....

そこで、新しく話題に上がった「MW WP Form」を試しに使ってみました!

管理画面からの設定が簡単で、とても使いやすい!
ですが、実装してみたところ動かない!?という問題にぶつかってしまいました・・・

いろいろ調べてみましたが、比較的新しいプラグインということもあり情報が少ないのが難点。
有力な情報がなく困ってしまいました。
試行錯誤した結果、なんとか解決することができたので、その際の注意点をまとめたいと思います。

1.ループの記述がない。


<p>タグが入るのが面倒で、独自テンプレートに $post->post_content; だけを記述していることが 私はよくあります。

これではショートコードは展開できないので、

[code] if (have_posts()) :
while (have_posts()) :
the_post();
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
the_content();
endwhile;
else:
<p>記事がありません</p>
endif;
[/code]

こんな感じで書くとショートコードも展開出来て、無駄な<p>タグも除去できます。

2.wp_head();とwp_footer();が足りていない。


これは、プラグインが動作しない大半の原因ですね。
独自テンプレートを作る際どうしても忘れてしまいがちなので要注意です。

3.<form></form>タグが作成したページに入っている


私は、これに一番躓いてしまいました。
フォームのページをコーディングし、WordPressに組み込む際に、管理画面にそのまま貼り付けていました。
その時に3.<form></form>が残ってしまっていたようです。
「MW WP Form」は自動でコードを挿入してくれるので、それよりも中に
<form></form>タグがあると動きません。
きちんとチェックしなくてから組み込まないといけませんね。反省。

まとめ



実装してみた感想として、基礎的なところを見落としていたことが悔やまれます。
動作さえすれば、使い勝手もよく優れたプラグインなので、今後カスタマイズなどの記事も かけたらと思っています。



wifiやbluetoothってなに?

今やIT業界だけでなく、日常生活でも普通に使われているwifibluetooth。 一体これらが何なのか、物理学の博士号を取り損ねた僕が、知っている範囲で説明したいと思います。

wifibluetoothとは電磁波です

これらの正体は、電磁波と呼ばれるものです。 人体に悪影響があるとかないとかよく言われている、あの電磁波です。 ちなみに、太陽や蛍光灯の光も電磁波なのですが、中でも、蛍光灯は白かったり赤かったり青かったり、 様々な色がありますよね。 これは何が違うのか?というと、波長や周波数が違うため、違った色合いで見えるのです。

可視光

一般的に「光」と呼ばれているのは、私たちが見ることのできる 波長が約380nm〜780nm(1nm=0.000000001m)の電磁波のことを指します。 これを「可視光」と言います。 この範囲以外の電磁波は、私たち人間には見ることができません。

赤い光はだいたい780nm、青い光はだいたい400nmです。 この波長は、とても短いです。

マイクロ波

一方、wifibluetoothは「マイクロ波」と呼ばれていて、 波長が約100μm〜1m(1μm=0.000001m)の電磁波のことを言います。 あと、電子レンジで使っている電磁波もマイクロ波です。 こちらの波長は、可視光に比べると断然長いです。

電磁波の特徴

電磁波は、波長が長ければ長い程、壁などの障害物に邪魔されずに透過します。
みなさん、壁の向こうって見えないですよね?僕にはそんな能力はないです。 これは、光の波長が短すぎて、壁をすり抜けられずに反射したり吸収されたりするからです。 私たちが見ることができる「可視光」の電磁波も、同じ理由で障害物をすり抜けられません。

では、マイクロ波はどうでしょうか? 先ほど説明した通り、wifibluetoothは波長が長いため、違う部屋にwifiルーターを置いていても、 壁をすり抜けてパソコンやスマホwifibluetoothの電磁波を受信することができます。 つまり、パソコンやスマホで、壁の向こうのwifiを透視しているのです。 私たちも、もしwifiなどの電磁波を見ることができたら、壁の向こうを透視できるかもしれません!

最後に

いかがでしたか?普段何気なく使っているwifibluetoothですが、仕組みが分かると面白いですね。 書きたいことはもっとあるのですが、次回のお楽しみということで、今回はこれで終わります。

外部サイトからのDB接続について(MYSQL)

こんにちは、yagiyagiです。 早速ですが、本題に入ろうと思います。

 

外部サイトからDBサーバ(MYSQL)に接続する場合、セキュリティの観点から 通常、接続できません。権限を付与する必要があります。

GRANT ALL PRIVILEGES ON *.* TO スキーマ名@"%" IDENTIFIED BY 'passward' WITH GRANT OPTION;

ですね。ググるとよく見かけます。(詳細な説明は他サイトを参照してください) これで、少しハマってしまった経験があるので、ご紹介したいと思います。

どういう経緯かはよく覚えていないのですが、

GRANT ALL PRIVILEGES ON *.* TO hoge@"%" IDENTIFIED BY 'passward1' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO hoge@"192.168.1.199" IDENTIFIED BY 'passward2' WITH GRANT OPTION;

という2つのSQL文を発行しました。エラーなく正常終了します。 そして接続しようと試みたところ、コネクションエラーが発生。。。

うーーん、なぜ接続できないのだろうかと悩み、ユーザ情報を確認してみると

select user, host,password from mysql.user;

+------+---------------+----------+
| user | host          |password  |
+------+---------------+----------+
| hoge | %             |passward1 |
| hoge | 192.168.1.199 |passward2 |
+------+---------------+----------+

あれ!?パスワードが微妙に違う。。。(汗)

もうおわかりですね。 hoge/passward2で接続を試みた結果がコネクションエラーでした。。 hoge/passward1で接続するかキチンと意図した権限を付与しなおすと正常接続できました。

ググってコピペで実行。。。よくやってしまう行為ですが 開発環境とはいえ、意味を理解して実行しないといけないなと反省しました。というお話です。

ディスプレイが・・2

こんにちは、ishinoです。

ディスプレイが・・未だにまぶしいです(+_+)

 

以前にもこんな記事を書きました  → ディスプレイが・・

 

現在、前記事で紹介したプラグインを全く使っておらず、なんでかなーと思いながら またいろいろ調べていたところ、いいものを見つけました!

 

それはこちらです → f.lux

 

以前からあったアプリのようです。

このアプリは、画面のブルーライト成分を日の出からの時間をはかって自動的に調節してくれます。

 

個人的な感想ですが、これを使い始めてから目が全然疲れないです!! 1日中PCとにらめっこをしていても疲れません。 画面を見ることがストレスにならないので、思いっ切り作業に集中できます。

もうアプリオフの状態で画面を見るのが怖い(笑)

 

この威力は、僕が説明するよりインストールしてもらう方が早いと思います。

日頃、そんなに目の疲れを感じていない人でも、普段から目を労わってあげることは 大切だと思いますので、皆さんぜひサクッとインストールしてみてください。

 

最後におまけですが、iPhoneアプリも出ていました! まあ、僕はスマホ持ってないので関係ないケド(笑)

 

ISUCON5に参加しました。

チーム名「京都スイーツnext」でISUCON5に参加しました!

 

昨年に続き2回目の参加です。

昨年はサーバーもシステムも先輩方に頼りっきりで、

僕は邪魔にならないように応援することしかできませんでした( ̄▽ ̄;)

挙句の果てに唯一任せていただいたSELECT文 の「*」をカラム名指定で書くという修正でヘマをして

失格になるという。。

 

今回はスーパープログラマーの先輩がいなかったので、システムの修正は僕が担当しました!

サーバーエンジニアのはらぐちさんと相談しながら、うまく役割分担して修正を進めました。

今回はそこそこ貢献できたと思います。

まだまだできることがたくさんある中終了してしまい、結果は惜しくも本戦出場なりませんでした。

簡単なこともググりながらの作業で、基礎力のなさを痛感しました。

来年も参加して次こそは本戦出場したいです(`・ω・´)

 

ほぼ感想だけになってしまいましたが、修正内容とかはサーバーエンジニアのはらぐちさんもブログにまとめていただいてます。

ISUCON5に「京都スイーツnext」で参加してきました

 

 

ISUCON5に「京都スイーツnext」で参加してきました

同僚のishinoと2名でisucon5に参加してきました。

僕はISUCON1の時から参加してるので、今のところ皆勤賞です。 毎年楽しみにしているイベントで今年もすごく楽しかったです。 運営の皆さま、本当にありがとうございました。

結果はスコア、13094。使用言語はPHPです。

しかし本戦出場ならず、、、

「ISUCON5 本選出場者決定のお知らせ」 http://isucon.net/archives/45532743.html

残念。おしかったな~

事前準備

今回、いつも一緒に参加しているスーパープログラマがいなかったので いつも丸投げしていたアプリ周りの修正に不安を感じていました。 ですので普段業務で一番使っている「PHPを使う」という事にしました。

使った事のなかったGCPの練習もかねて、 Isucon4の問題のイメージが提供されていましたので、起動して PHP実装を眺めてたりしました。

GCP、すごく使いやすいのですが、インスタンスへのSSHログインにGCP専用のツールみたいなのが必要なのが嫌で 練習中も本番中も ParmitRootLoginはYesだったりパスワード認証許可したりして ターミナルから直接SSHできるようにしてました。

当日

前日に会社で「キャンプ」が行われて、深夜まで雑談したりで疲れ切ったのちの参加。 ほんと直前までキャンプ場にいましてバタバタしてました。 ですが、アウトドアでIT関連の事から離れた状態でしたので、逆にすっきりした気持ちで参加できたかも。

本戦開始

イメージデータの共有がきたので、ひとまずインスタンスを起動し、 何も触ってない状態でベンチマークをリクエストしました。 が!ベンチが通らない!!(Fail)

え。初期で通らない実装なの? みたいな感じでプチパニックになりました。

このとき、ベンチからのリクエストが届いてるか、などを確認すればよかったのですが、 GCPの設定がおかしいのか?と無駄に時間を使ってしまいました。

初期で通ってた人もいたようですが、僕らは一度も通らなかったのでいまだに原因ふめい。なんでだろう。 ですが、ログインがめちゃくちゃ重かったり、スコアが80とかから300くらいの人もいたので、 「きっと初期の実装の時点で重すぎてベンチ通らないに違いない」、と結論付けて PHPへの切り替え作業をしました

systemd

もちろん使った事なかったので、PHPへの切り替えでも時間がかかりました。 PHPのnginx.confは静的ファイルの配信があらかじめnginxからになっててらっくちーん。 もちろんPHPに変えてもいまだベンチは通らない。 でも画面は表示されているのでとりあえず、チューニング開始

チューニング開始

ひとまず、ベンチが通らないと心が不安でいっぱいだったので 簡単に修正できる部分をとりあえずやってみましょう、となりました。

ささっと見てログインの部分でハッシュにしたりしてるのが簡単そうだったので、 パスワード部分に平文を入れちゃってベンチ。 これでようやくスコアが出るようになってた気がします。

ひたすらSQLを書く

・N+1問題 ・commentsテーブルにAlterでカラム追加。(30分以上かかった) ・relationsのデータが必ず2つ1組みで入ってたのでselectをoneだけにする ・ORDER BYのcreated_atをidにしてCreated_atのindex消す ・footprintsのgroup byの部分を修正

ほっとんどの時間を/のSQL改修に充てててました。 ミドルウェアの設定はAlterの実行中に設定などを確認、修正をしたくらいです。 (若干my.cnfにははまりました)

結局、ボトルネックmysqlで改修できる部分もまだまだ残したままフィニッシュ となりました。

全体的に

今回のお題がほんとに楽しく感じました。

・DBのデータが非常に多く複雑なので全メモリ化は実質不可能。 ・ログイン処理があり、ログインによって表示される情報が異なるので、フロント側でのキャッシュは難しい(あまりキャッシュヒットしなさそう) ・実際にありがちな「小規模なときはよかったけど、サービスが成長してから問題が出始めた」みたいなリアルな感じ

というところが特に楽しかったです。

あとは例年どうり、新しい事をいろいろ知れてよかったです。 systemdは見ないふりしてたんですが、やっぱり少し触ると、「いいなこれ」ってなりますね。

今年も楽しかったです。 ありがとうございました!

Windows 10にしたら Macからリモートデスクトップが繋がらなくなった

こんにちは、はらぐちです。
最近までWindouwsのパソコンを起動すると、デスクトップ画面右下のインジケーターに 「Windows10を入手する」というボタンが表示されるようになっていましたが、皆さんご存知でしょうか? これは、今年7月にリリースされた、Windows10への無料アップグレードを予約できるというもので、 Windows利用者の間で話題になっています。

私もこの機会にアップグレードしてみたのですが、その際Remote Desktop Client for Macを使った リモートデスクトップが使用できなくなってしまったので、その時のお話しをします。
具体的には、Windows10にしてから「接続先のコンピューターのIDを確認できません。」 というエラーが出て繋がらなくなりました。 Windows8Windows Server 2012でも同様の現象となる、との事。

AppStoreにある Microsoft リモート デスクトップというアプリだと問題ないのですが、 こちらはキーボードのキーバインドが個人的に気に入らないので、 Remote Desktop Client for Macを使い続けたいと思っているので、調べてみることにしました。


結果、以下のようにすると接続できるようになりました。

検索で "gpedit.msc" を入力し、以下のように設定を変更します:
ローカルコンピュータポリシー
コンピュータの構成
管理用テンプレート
Windows コンポーネント
リモートデスクトップサービス
リモートデスクトップセッションホスト
セキュリティ
リモート(RDP)接続に特定のセキュリティレイヤーの使用を必要とする: 有効
オプションパネルで、セキュリティレイヤーを "RDP" に変更する
リモート接続にネットワークレベル認証を使用したユーザー認証を必要とする: 無効
再起動

(参考) http://zakkied.hatenablog.com/entry/2013/09/30/132342

具体的にどのような作業なのかよくわかっていないのですが、ローカル内で使いたいだけなのでOKとしました。

なにかの参考になれば幸いです。