子カテゴリのときだけ逆順で表示する
旅カテゴリのところは、過去の旅をクリックしたときに、
帰ってきた後の部分から読み始めて、クリックして遡らないといけなくて、読みにくかった。
そこで、旅カテゴリ自体をクリックしたときは最新を先頭に表示し、
それぞれの旅をクリックしたときは、その旅の最初である過去を先頭に表示するようにしたかった。
親カテゴリのテンプレートを使う に書いたように、
旅カテゴリはどれを選んでも、専用のカテゴリファイル(category-42.php)を使うようにしたので、
編集したファイルはその1つだけである。
で、逆順に表示するのは query_posts($query_string.’&order=ASC’) を while の前に入れればいいらしいので、
以下のように、親カテゴリ(旅カテゴリ)をクリックしたときは DESC (最新が先頭) にして、
子カテゴリ(2013.08: ケニア・タンザニア等)をクリックしたときは ASC (過去が先頭) になるようにした。
<?php
if(is_category(’42’)): query_posts($query_string.’&order=DESC’);
else: query_posts($query_string.’&order=ASC’);
endif
?>
<?php while (have_posts()) : the_post();?>
ページ移動のときも Newer | Older という順で表示していたのだが、そこも逆にしないといけない。
<?php if(is_category(’42’)) : ?>
<?php previous_posts_link(‘« Newer’) ?> <?php next_posts_link(‘Older »’) ?>
<?php else : ?>
<?php previous_posts_link(‘« Older’) ?> <?php next_posts_link(‘Newer »’) ?>
<?php endif; ?>
これで少し読みやすくなったかな。
親カテゴリのテンプレートを使う
前に映画カテゴリのテンプレートを置き換えたのだが、子カテゴリそれぞれに対してテンプレートを作っていた。
今度は旅行カテゴリをいじろうと思っているのに、数が多くてめんどくさい。
そこで探してみたら、まさにその内容が載っていたので試したら、そのままできた。
子カテゴリのアーカイブページを親カテゴリ用のテンプレートファイルで表示しよう
functions.php に category_template というフィルタを追加して、そこで、
自分用のカテゴリファイルがなくて親がいる場合には、親のカテゴリファイルを使うように書く。
こっち方面もうちょっと勉強しようかな。
WordPress にそこまで時間をかけたことないが、仕事は2ヶ月くらいで何とかなることを考えると、
こういったものに労力を割いたほうが今後のためになるな。
WordPress 2.9.1 から WordPress 3.6.1 へのアップグレード
MySQL5 を使える環境であることが前提。
不安なので、以前のバージョンは FTP で全ファイルをバックアップしておく。
MySQL4 から新しくMySQL5 に変えるので、まずは接続テスト。
wp-config.php ファイルのデータベース接続情報を編集し、MySQL5 につないでみる。
ファイルを保存するときに、UTF-8 で BOM のチェックを外して保存しないといけないので要注意。
接続先を変えただけなので、古い WordPress + MySQL5 という組み合わせ。
問題なく接続でき、管理画面にログインできることを確認しておく。
(管理画面にログインした後で真っ白になったが BOM チェックがついてたせいだった)
次に、WordPress自体のアップグレードを行う。
自動アップグレードがなぜか動かなかったので、手動で行った。
(ダウンロードしていますというメッセージのまま動かなかった)
wordpress-3.6.1-ja.zip をダウンロードして展開。
wp-content ディレクトリと wp-config.php は上書きせず、他のディレクトリとファイルを更新する。
wp-content/languages ディレクトリも更新していい。
ブログのURL の wp-admin/update-core.php にアクセスする。
アップグレードのためのデータベース更新をしてくれる。
無事に管理画面にログインできたら、プラグインの更新をする。
ブログ自体の見た目は以前とほとんど変わらないが、けっこういじってるので、ちょっと崩れてる。
(前の記事、後ろの記事へのリンクが全エントリについてる…)
その程度なら後で直せばいいか・・・。← まだ直してない。
phpMyAdmin による MySQL4 から MySQL5 への移行
ここのブログ環境は WordPress を使っているのだが、ずっと古いバージョンのままだった。
なぜなら LaCoocanサーバの MySQL のバージョンが古くて、WordPress を更新できなかったのだ。
久しぶりにサーバ管理のWeb画面にログインしてみたら、MySQL5 にアップデートできるとのこと。
やらなきゃなーと思いつつ放置していたが、やっと今日アップデートした。
phpMyAdmin を使って、MySQL4 からデータをエクスポートし、MySQL5 にインポートする。
いくつか詰まった点があったのでメモ。
1. MySQL4 のアカウントでログインする時、エンコードをUTF-8にする。
エンコードなし(non)にしてるのに EUC-JP でエクスポートされてておかしいと思ったら、
ログイン時のエンコードのままというのが non らしい。
2. ログインしたらデータベース名をクリックしてトップページを抜け、エクスポート画面を開く。
全テーブルを、SQL形式、圧縮なし、エンコードなし(non)でファイルに保存する。
3. エクスポートしたファイルを開き、TYPE=MyISAM を ENGINE=MyISAM に置換する。
MySQL4 と MySQL5 のバージョン間の違いのようである。
4. 編集し終わったファイルのサイズが 8MB 以下になるように分割する。
(インポート画面で ZIPファイルを認識すると書かれていたが、ダメだった。)
5. MySQL5にログインし、インポートする。
ここでエラーが出なければOK.
Androidセキュリティ
Android セキュリティ勉強会 に行ってきた。
勉強会自体、久しぶりかも。
Android アプリのセキュア設計・セキュアコーディングガイド
http://www.jssec.org/dl/android_securecoding.pdf
を作っている方のお話。
知ってる話が多かったけど、Android アプリから遠ざかっていたので、
なんというか、懐かしい感じがした。
再開しよう。
そしてもうちょっと詳しくなったら、ボランティアとか参加しよう。
PCケース
今メインマシンとして使っている Acer Aspire を、外に持っていくためのケースが欲しかった。
Acer Aspire S3-951-F74U
昨日ふらっと見に行ったが、サイズがわからなくて諦めた。
そこで今日はケースなしだけどPCを持って、買い物に出かけた。
PCが横長だから、普通のクッションケースだと A4, B5 とかいう単位なため、短辺が余る。
結局、東急ハンズで見つけた MacBook 用のケースがちょうどよかった。
Tucano Second Skin MB Air 13.3インチ レッド
ホントは黒がよかったけど無かったので、置いてあった水色・紫・赤の中から、赤にしてみた。
水色はちょっと色が明るすぎたので。
店で何度も重ねてサイズを確認したから、サイズはぴったり。
チャックでPCを傷つけないように、内側にもカバーがついている。
入れてみたら、ピッタリサイズ。
ケースにMacBookって書いてあるのは、気にしちゃいけない。
厚さはもちろん増えるけど、想定の範囲内。
さて、これでこの子が外に出られるようになったら、SONY VAIO P は出番がなくなるな・・・
重さが全然違うから、会社に持ってくのはVAIOがいいか。
やっぱりUltrabookは起動速度が圧倒的に速いのがいいね。
あと、CPUやメモリが100%にならないのが安心。
OpenIG
Open Identity Gateway について調査している。
OpenAM と連携させるのが目的だ。
それは Chapter 8 に書いてあるのだが、いきなりやってもダメだったので、
最初っから順に動かしてみている。
今日は Chapter 3 と Chapter 4 を動かした。
1. http://www.forgerock.org/openig.html から gateway-2.1.0.war をダウンロード
2. http://openig.forgerock.org/forgerock-sample-configs.zip がコンフィグファイル
3. Jetty をダウンロードして展開
4. gateway-2.1.0.war を root.war に名前を変えて、jetty-hightide-7.1.6/webapps/root.war に置く
5. コンフィグファイルの中の WordPressLogin.json を $HOME/.ForgeRock/OpenIG/config.json に置く
6. jetty-hightide-7.1.6/contexts/root.xml に 3.2. Installation Steps の 6 の内容をコピペする (7 の内容はいらない)
7. Jetty を起動する ./jetty-hightide-7.1.6/bin/jetty.sh start
8. /etc/hosts に 127.0.0.1 demo.forgerock.com を書く
demo.forgerock.com にアクセスすると、ローカルホストで起動している Jetty の OpenIG にアクセスされ、
そこからリダイレクトされて、本物の demo.forgerock.com にアクセスするのだ。
config.json の中に /wordpress/wp-login.php にアクセスがあったら、
george, costanza を使ってログインすることが書いてあるので、ログインが済んでいる。
別のコンフィグファイルを使って、何か別のアプリへのプロキシとして動いていることを確認するのが目的。
アプリって言われても持ってないので、とりあえず自分のWordPressを使った。
先ほどと同じく、/etc/hosts にWordPressのドメイン名を、127.0.0.1 に設定する。
そして、コンフィグファイルの中の TARGETIP を本物のWordPressのものに書き換える。
Jetty を起動して、WordPress にアクセスすると、127.0.0.1 にアクセスしている。
なんかちゃんと動いてなかったのか、エラー画面になっちゃてたけど、リダイレクト先のものかもしれない。
ということで、指示通り /tmp/gateway.log を確認したら、ログはちゃんと出てた。
試しに Jetty を止めてから再度アクセスしてみたら、今度はつながらなくて、エラー画面すら出なかった。
どうやらちゃんと OpenIG を経由していたらしい。
Chapter 4 の目的はここまで、かな。
ネットプリント
家のプリンタが古いせいか、普段全然使わないせいか、
いつも使うときに印刷がキレイにできないか、インクが切れている。
そういった意味で使いものにならないので、もう手放そうかと思っている。
まだ粗大ゴミの手続きをしてないから、家にあるけど。
そこで、手段がないかググッてみたところ、ちょうどいいものがあった。
ネット上にPDFを登録して、そこで発行されたID (とオプションで設定できるパスワード) を、
セブンイレブンのコピー機のところで入力すると、コピー機からプリントアウトされる。
白黒で1枚20円。
IDを他人と共有すれば、その人が好きなところで出力できるっていう使い方もあるが、
とりあえずその必要はないので、個人的に使うだけだけど。
たまにしか使わない自分にとっては、メンテナンスしなくていいのはかなり良い。
レンタカーみたいなもんだね。
OpenAM を使った認証
Add Authentication to a Website using OpenAM
この本家サイトを見て、だいたいできた。
これまで OpenAM に、Google Apps や Facebook のアカウントでログインできるようにしていた。
OpenAM にログインできることは、それだけじゃ全く意味がない。
その認証を使って、Webアプリにログインして、やっとシングルサインオンになる。
OpenAM の存在を気にしなければ、Facebook アカウントで Webアプリにログインしているように見えるわけだ。
重要なのは、3. OpenAM Server Configuration, 4. Web Server Configuration の章。
OpenAM Downloadのページから、Web Policy Agents をダウンロードする。
3.0.4 と 3.0.5 の両方試してみたけど、両方エラーになった。
サイトのとおりに、エージェントとポリシーを作成してから、
Apache2 を一度止めて、Web Policy Agents をインストールする。
そして Apache2 を起動すれば終わりなのだが、起動しなかったのだ。
3.0.4 のほうは、libamapc2.so: undefined symbol: ap_run_http_method
3.0.5 のほうは、libamapc2.so: undefined symbol: timer_create
ググって解決法を探してみたところ、3.0.4のほうのエラーは、
Apache2.2だと出るらしく、Apache2.0だと大丈夫らしいことがわかった。
3.0.5 のほうは全く情報がなかったので、3.0.4 のほうでトライすることにした。
Ubuntu で普通にインストールすると apache2_2.2 がインストールされてしまうので、
Apache のサイトからソースを落としてきて、コンパイルした。
./configure, make, make install ですんなりインストールできた。
$ sudo /usr/local/apache2/bin/apachectl stop
$ cd web_agents/apache_agent/bin
$ sudo ./agentadmin –install
サイトに書いてあるとおり、
・ /usr/local/apache2/conf
・ OpenAM のURL (http://openam.no.url:8080/openam_10.0.0)
・ Apacheで動かすWebサイト (http://apache.no.url)
・ /var/tmp/passwd
らへんを入力して、最後に 1 でインストールされる。
$ sudo /usr/local/apache2/bin/apachectl start
で、ApacheのWebサイトにアクセスしたら、OpenAM にリダイレクトされた!!
そして amadmin でログインしたら、Apache のデフォルト画面にリダイレクトされた!!
ここでホントは amadmin じゃなくて、Google Apps や Facebook のアカウントでログインすればいいはず。
なるほどねー。
OpenAM + Facebook
OpenAM10.0 OAuth2.0を使ってみる を参考に。
まず、Facebook Developerサイトに、OpenAM のURLを登録し、APPキーとAPPシークレットを生成する。
https://developers.facebook.com/apps
その後、OpenAM の[アクセス制御]タブで[/(最上位のレルム)]リンクをクリック。
[認証]タブで[モジュールインスタンス]を新規作成する。
このとき、名前をつけて、OAuth2.0を選択する。
このモジュール名を後で使う。(ここでは「Facebook」とする)
作成したモジュールリンクをクリックし、設定する。
Facebook Developerサイトで作ったAPIキーとシークレットを、Client Id, Client Secret として入力する。
あと、Proxy URL を自分のサイトに書き換えろと書いてあるので、~/openam/ の箇所を自分のOpenAMにする。
Create account if it does not exist:
Prompt for password setting and activation code:
の2項目が有効になっているので、やりたいことにあわせて変更すべし。
Create account if it does not exist:
のほうは、FacebookアカウントがOpenAMに登録されてないとき、勝手に登録する。(私は有効にした)
これを無効にしていると、OpenAMに存在しないユーザがログインするとき、
ユーザーにはこの組織におけるプロファイルがありません。システム管理者に連絡してください。
というエラーになる。
Prompt for password setting and activation code:
のほうは、OpenAMにリダイレクトされたときに、パスワード設定画面が出てくる。
何が起こるかわからなかったので、無効にしてしまった。
そして Facebook にログイン。
OpenAM のログイン画面のURLに、module=モジュール名をパラメータとしてくっつける。
例: http://OpenAMドメイン/openam_10.0.0/UI/Login?module=Facebook
このURLにアクセスしたとき、
An error occurred with Test. Please try again later.
API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration.
というエラーが出たときは、OpenAM側に設定した Proxy URL が間違ってる可能性があるので要確認。
(私の場合は openam_10.0.0 というパスなのだがopenamのまま修正してなかった)
うまくいけば、Facebook のログインページにリダイレクトされる。
○○でFacebookアカウントを利用するにはログインしてください。
というメッセージが出てる。
ログインして、Facebook 画面で Go to App ボタンをクリックする。
○○ would also like permission to:
というメッセージが出るので、Allow ボタンをクリック。
そしたら何故か、
セッションがタイムアウトしました。
というOpenAM画面のエラーが出たが、Facebook にはログインできてた。
さて、これで何ができるかな?