php5.4からはerror_reportingのE_ALLにE_RISTRICTが含まれる

error_reportingは、php.iniの中に書かれている設定で、どのレベルのエラーを出力するかの設定です。このE_STRICTのエラーは、php5でphp4の書式で記述されているプログラムを実行すると、大量に出ます。static定義されていないメソッドを、クラス名::メソッド名で呼んだりしたときに出るのです。

E_ALLは、全部のエラーを出力してねっていう設定です。
これまでは、”E_ALL & ~E_NOTICE”とかでNOTICEメッセージを抑止している方もいたと思います。このE_ALLのなかに、E_STRICTで表示されるメッセージは含まれていなかったのです。今まで。それが、php5.4からは、E_ALLに含まれることになりました。

php5.4に上げた途端エラーメッセージが大量に!って場面に遭遇するのです。
PAER使っている方は、必ず遭遇するのではないでしょうか。php4でも動作するように作られているので。

E_STRICTのエラーを表示しないためには、以下のように記述します。

error_reporting = E_ALL & ~E_STRICT

php.iniのコメントでも親切に例がのってました。

; Common Values:
;   E_ALL (Show all errors, warnings and notices including coding standards.)
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED  <= こことか
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT           <= こことか
; http://php.net/error-reporting
; error_reporting = E_ALL | E_STRICT
error_reporting = E_ALL & ~E_STRICT & ~E_DEPRECATED

php4から持ってきたプログラムがうまく動かないと聞かれて調べてたんですが、勉強になりました。
以下のサイトを参考にさせて頂き、大変ありがたかったです。

http://developer.cybozu.co.jp/tech/?p=982
http://vivit-jc.hatenablog.com/entry/2013/02/12/210950
http://blog.gufii.net/weblog/archives/19

egrep、zgrep、zegrepというコマンドを覚えた

Linuxで文字列を検索してくれるgrepコマンドは以前から重宝していました。
ログの中から目的の行を見つけたりとか、大量のデータから必要な部分を抽出するのに大活躍です。

上記のような使い方をしていたので、and条件(“aaa”という文字列と”bbb”という文字列を含むとか)での検索はよくやってきたんですが、or条件(“aaa”という文字列か”bbb”という文字列を含む)という検索はしてこなかったんです。今回、or条件で検索したくて、調べていたら”egrep”というコマンドがありました。

> egrep “aaa|bbb” ファイル名

上記ののように書くとor条件の検索ができました。
正規表現として記述するので、いろんな検索ができそうです♪
詳細な説明のあるサイトもメモしておきます。
http://www.pochinet.org/linux2E007.htm
http://www.webhtm.net/unix/cmd/egrep_cmd.htm

あと、追加で前職の同僚tnmtさんが、zgrep、zegrepというコマンドもあるよと教えてくれました。圧縮ファイルに対して、検索をかけることができます。
今まで、zcatした結果にgrepかけていたので、手間が減って助かります。ありがとうございました。

windows8、windows server 2012からファイルサーバに繋がらないときの対処法

windows8、windows2012から、windows共有(CIFS)に利用されるプロトコルが、SMB3.0になっています。

SMB3.0になって何が変わったかというと、認証する際のフローが変わっているんです。
サードパーティ製のストレージサーバで、この変更に対応できていない場合、認証プロンプトが出て、正しいアカウント、パスワードを入力しても、ファイルサーバが参照できません。
SMB3.0で新たに追加された“Secure Negotiate”という機能に、対応できてないことが原因です。
マイクロソフトからの情報だと、このへんです。
http://support.microsoft.com/default.aspx?scid=kb;ja;2686098

この問題を回避するには、windowsのレジストリを書き換えて、“Secure Negotiate”を無効にします。1つの方法は、レジストリエディタを使って、以下の値を追加すること。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecureNegotiate

上記パラメタを追加し、値を”0″にします。

もう一つは、PowerShellを起動して、以下のコマンドを実行すること。

Set-ItemProperty –Path
“HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters” RequireSecureNegotiate -Value 0 -Force

これで、問題を回避できます。以下のサイトに書いてあることまんまです。大変参考になりました。
http://nobuhikoi.wordpress.com/2012/11/05/win-8-server-2012-から-netapp-に接続できない問題/

parent category togglerプラグインが便利

http://wordpress.org/extend/plugins/parent-category-toggler/

wordpressのカテゴリは、親子関係があるのですが、子も親もチェックしたいのに、ついつい親へのチェックを忘れてしまうことがあります。

こうしたいのに
category-1

こうしちゃう
category-2

そこで見つけたのが、「parent category toggler」プラグイン。
子カテゴリをクリックすると、親カテゴリにもチェックが入ります。これでチェック忘れはなくなりますね。

windows8標準の暗号化tool「BitLocker」を有効にした

windows8には、標準でHDD暗号化ツールがついています。
7までは、別途暗号化ソフトを買って、セキュリティを強化していたと思いますが、BitLockerを使うことで、費用をかけずにデータ暗号化が可能です。

windows8をインストールしたときに早速やってみようとしたのですが、システムボリューム(OSが入っているドライブ)にかけるのはおすすめしないという内容の記事を見て、後回しにしていました。

2月末に、システムボリュームでBitLockerを有効にする手順の記事を見つけ、Microsoftのサイトでもやり方が公表されていたので、もう大丈夫かなと思ってやってみました。

http://www.atmarkit.co.jp/ait/articles/1302/28/news114.html
http://windows.microsoft.com/ja-jp/windows-8/bitlocker#1TC=t1

使っているPCをがHDDをSSDに換装しているからか、3時間程度で暗号化完了。
処理速度も体感レベルでは低下していません。

PCを外に持ち出すことがある方は、やっておいて損はないと思います。

advanced custom fieldsプラグインでプレビューもやりたい

wordpressをカスタマイズするときに、よく使うプラグインが「advanced custom fields」です。
http://komodo.arrow.jp/wp/614

通常だと、タイトル・カテゴリ・タグ・本文・抜粋を入力するwordpressですが、
全部の投稿に画像を複数付けたいとか、画像と1行文をセットにするとか、
そんな要望がでてくることも多々あると思います。

そういうときに便利なのか「advanced custom fileds」です。
wordpressの記事入力画面の入力項目を好きなように作れます。

ただ、1つ不便だなと思うところがあります。
このプラグインは、wordpressのcustom filedを使って実現されているんですが、
custom filedに入力したデータは、プレビュー機能で見れないんですよね。
公開されている記事を編集する場合は、公開済の情報が表示されてしまいます。

せっかく、データを入力しやすいようにカスタマイズしても、プレビューでできないのは残念。
そこで、「advanced custom fields」で入力した情報を、プレビューできるようにしました。
テンプレートのfunctions.phpに以下を書けば、OKです。

// カスタムフィールドをプレビュー対象にする

// preview用に保存された下書き情報(post)のIDを取得する
function get_preview_id($postId)
{
    global $post;
    $previewId = 0;

    if (($post->ID == $postId) && $_GET['preview'] == true &&  ($postId == url_to_postid($_SERVER['REQUEST_URI']))) {
        // プレビュー表示の際に、自動保存されたpostの下書き情報を取得する
        $preview = wp_get_post_autosave($postId);
        if ($preview != false) { $previewId = $preview->ID; }
    }

    return $previewId;
}

function get_preview_postmeta($metaValue, $postId, $metaKey, $single)
{
    // プレビュー表示のときにmeta情報(custom fileds情報)を、
    // プレビュー用のmeta情報に置き換える
    if ($previewId = get_preview_id($postId)) {
        if ($postId != $previewId) {
            $metaValue = get_post_meta($previewId, $metaKey, $single);
        }
    }

    return $metaValue;
}
add_filter('get_post_metadata', 'get_preview_postmeta', 10, 4);


// 下書き情報を作成するときに、対応するcustom filed情報も作成する
// プレビューの際には、この時作ったcustom filed情報を読み出す
// (読み出しているのが、get_preview_postmetaの部分)
function save_preview_postmeta($postId)
{
    global $wpdb, $acf;  // $acfがadvanced custom filedsのglobal 変数

    if (wp_is_post_revision($postId)) {
        if (count($_POST['fields']) != 0) {
            foreach ($_POST['fields'] as $key => $value) {
                $field = $acf->get_acf_field($key);

                if (count(get_metadata('post', $postId, $field['name'], $value)) != 0) {
                    update_metadata('post', $postId, $field['name'], $value);
                    update_metadata('post', $postId, "_" . $field['name'], $field['key']);
                } else {
                    add_metadata('post', $postId, $field['name'], $value);
                    add_metadata('post', $postId, "_" . $field['name'], $field['key']);
                }
            }
        }
        do_action('save_preview_postmeta', $postId);
    }
}
add_action('wp_insert_post', 'save_preview_postmeta');

調べるのに時間かかったので、忘備録として。
このプログラムは、こちらの記事を参考に、advanced custom filedsに対応させて頂きました。
http://www.warna.info/archives/2502/

※追記(2013/7/16)
最新版のプラグインはプレビューに対応しています。
現在は、上記の対応は入れる必要はありません。

sendmailとpostfixの利用smtpサーバ指定方法

centos6から標準MTA(Mail Transport Agent)がsendmailからpostfixになっていることを知りました。
今使っているサーバは、メールを送信する際に特定のSMTPサーバを利用しないと、外部メールアドレス(携帯のメールアドレスとか)にメールが送信できない環境です。centos5を利用していた時のsendmail向けの設定変更手順は分かっていたのですが、postfix向けの設定がわからなかったので、ぐぐって解決。

sendmail用の設定( /etc/email/sendmail.mc を編集 )

dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
dnl define(`SMART_HOST', `smtp.your.provider')dnl
dnl #
dnl #
define(`SMART_HOST', `smtpサーバ名')dnl
MASQUERADE_AS(`メール送信元ドメイン名')dnl
FEATURE(`masquerade_envelope')dnl
dnl #

postfixの設定 ( /etc/postfix/mail.cf )

# INTERNET OR INTRANET

# The relayhost parameter specifies the default host to send mail to
# when no entry is matched in the optional transport(5) table. When
# no relayhost is given, mail is routed directly to the destination.
#
# On an intranet, specify the organizational domain name. If your
# internal DNS uses no MX records, specify the name of the intranet
# gateway host instead.
#
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
# [address] or [address]:port; the form [host] turns off MX lookups.
#
# If you're connected via UUCP, see also the default_transport parameter.
#
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost = smtpサーバ名

(中略)

# ADDRESS REWRITING
#
# The ADDRESS_REWRITING_README document gives information about
# address masquerading or other forms of address rewriting including
# username->Firstname.Lastname mapping.
masquerade_domains = メール送信元ドメイン名

この記事かくときに見つけた、MTA各種の説明がされているページ。よさそうなので、ご紹介。
http://www.criterion.sc/sub_notes/postfix.html

iPadを手に入れた

iPadが手元にやってきた、新しいiPad。iPadは、友人が持っているのを少し触らせてもらったことがあったけど、じっくり触るのはこれが初めて。あれ?結構重量感じるのねというのが最初の印象だった。でも、気になるような重さじゃない。普段、スマフォとノートPCばっかり触っているから、新鮮なレンジの重量だったんだと思う。

文字も綺麗に表示されるので、PDFの電子書籍を読むのには、ストレスはない。webサイトを見るのにも、リンクを指でクリックできることが、気持ちいい操作だった。スマフォでやっているはずなのに、画面が大きくて、意図しないところをクリックすることが少ないからか、本のサイズに近いからか、気持ちよさが高かった。

逆に、文字入力はストレスだった。キーボードはいつもとサイズが違うので、ブラインドタッチできるわけでもないし、フリック入力にしても、いつも使っているXperia arcのgoogle日本語入力よりも、反応が悪いと感じた。キーボードのどこに何があるかの感覚に慣れれば、気にならないのかもしれないけれど、別で、小さいキーボード用意してもいいのかも。いや、それも面倒か。

電子書籍のリーダーと、ソファでのwebサイト閲覧に役だってくれそうです。これで、アプリを動かす端末も手に入ったし、なんか遊んでみようかな。

powerpointで背景を編集する方法

テンプレートとして用意された背景で、消したい文字情報がある場合に、どうやって消すのかすぐわからなかったので、書いておきます。

上部メニューの「表示」⇒「マスタ」⇒「スライドマスタ」を選択すると、背景を修正できる画面に切り替わります。
これに気づくまでに、15分くらいかかりました。もったいない。

chromeのtumblr拡張Taberareloo

普段良く使うブラウザが、firefoxからchrome多めになってきたタイミングで、tumblrをやらなくなってきてました。代わりに、deliciousとevernoteの中身が増えていきました。でも、ふとtumblrも使いたいなと思ったので、機能拡張を探したところ、以下のページを見つけました。

http://d.hatena.ne.jp/gamella/20100306/1267850698
それでいれたのが、このtaberarelooというアドオン。ぼちぼちtumblrもやっていこうとおもいます。
https://chrome.google.com/webstore/detail/ldcnohnnlpgglecmkldelbmiokgmikno?utm_source=chrome-ntp-icon