abコマンドでサーバーのパフォーマンスを測る

wordpressの速度を測るため、apacheに標準でついてくる負荷テストツールを使う

例) 10人の同時接続を100回実行するコマンドで計測結果をbench.htmlで出力

#ab -n 100 -c 10 -w  http://計測するサイトのURL >bench.html


Apache Benchを使った負荷テストのやり方 | Web活メモ帳

my.cnfを触って各項目の数値を増やした

Document Length: 7499 bytes
Concurrency Level: 10
Time taken for tests: 3.337 seconds
Complete requests: 10
Failed requests: 0
Total transferred: 77430 bytes
HTML transferred: 74990 bytes
Requests per second: 2996.54
Transfer rate: 23202.20 kb/s received

増やす前

Document Length: 7499 bytes
Concurrency Level: 10
Time taken for tests: 3.938 seconds
Complete requests: 10
Failed requests: 0
Total transferred: 77430 bytes
HTML transferred: 74990 bytes
Requests per second: 2539.52
Transfer rate: 19663.53 kb/s received

Requests per secondが大きいほど改善しているとのこと。確かに早くなっている

特定のカスタムフィールドを持つ投稿の除外 (空の記事を表示させる)

特定のカスタムフィールドを持つ投稿を除外する方法(力技)

解決したので、書いておく。

いろいろ調べた結果、meta_queryやmeta_key、meta_value、meta_compareを設定し、「!=」や「NOT IN」や「NOT LIKE」を試したが、カスタムフィールドが空なのではなくの”そのkeyを持っているわけではない”ので検索にヒットしないのでは、という結論に。

調べていた中で、使えそうだった以下のフォーラムを参考に力技で除外してみた。

流れ

  1. あるカスタムフィールドを持つ記事の記事IDを取得
  2. excludeで除外

ソース

single.phpの中で、関連するアイテムを表示させる様な場所を想定
下の例ではカスタムフィールド「check」にチェックが入っている記事を除外する

<?php
//投稿のカテゴリー情報を取得
$cat = get_the_category(); $catparent = $cat[0]->category_parent; $catcurrent = $cat[0]->cat_ID;

//そのカテゴリーの記事数を取得
$cat_count = get_category($catcurrent)->category_count;

//1.カスタムフィールドcheckを持つ記事を取得。
//numberpostsは大元の設定に依存するのでここで指定する
$exclude_post = array(
	'category' => $catcurrent ,
	'numberposts' => $cat_count,
	'meta_query' => array(
		array(
			'key' => 'check',
			'value' => 'check',
		)
	)
 );

//foreachでcheckをもつ記事のIDを取得
$postslist = get_posts( $exclude_post );
foreach($postslist as $postval){
	$result[] = $postval->ID;
};

//配列をカンマ区切りに
$result_e = implode(",", $result);

//2.excludeで除外し、それ以外の記事を5件表示
$args = array(
	'numberposts' => 5,
	 'orderby' => 'rand' ,
	 'category' => $catcurrent ,
        'exclude' => $result_e,
	 );
$posts = get_posts($args);
global $post;
?>

<?phpif($posts): foreach($posts as $post): setup_postdata($post); ?>
//
//記事投稿部分
//

2015/5/7追記

  • excludeしたい記事の件数が1000件以上になると読み込みがタイムアウトするので、注意

参考

concrete5を試してみた。

f:id:ozzwar:20141223195033p:plain:w700

インストール

ここから最新版をダウンロード

ダウンロード :: concrete5 Japan 日本語公式サイト

ダウンロードしたら該当するフォルダに入れる

データベースの作成

  • 照合順序はutf8_general_ci

php.ini、.htaccessの作成

※どちらかでOK
ファイルをフォルダ内に入れる

default_charset = UTF-8
mbstring.language = neutral
mbstring.internal_encoding = UTF-8

php_value default_charset UTF-8
php_value mbstring.language neutral
php_value mbstring.internal_encoding UTF-8

フォルダをおいた場所にブラウザでアクセス

  • 言語の選択
    • 日本語
  • インストール

f:id:ozzwar:20141223192843p:plain

  • データベース、サーバーのアドレスはローカルの場合はlocalhost

f:id:ozzwar:20141223192706p:plain

インストール完了。ページが表示された。

f:id:ozzwar:20141223193049p:plain:w700

  • 編集モードを押してみる

レイアウトの変更などがそのまま出来る。
それぞれのブロックが独立している感じ。
f:id:ozzwar:20141223193223p:plain

ブログの記事を書いてみる

管理画面のメニューにある「書く」で記事を書いてみる。
wordpressでいう「投稿」かな?
f:id:ozzwar:20141223193430p:plain

とくに違和感はなし。
f:id:ozzwar:20141223193516p:plain

サムネイルなども設定できて、記事のメインビジュアルみたいな画像も設定できる。
wordpressみたいな、難しい設定はないので、触ってもらいやすいかも知れない。


固定ページを追加する

wordpressでいうところの「固定ページ」を作成する。
分かりづらかったが、管理画面>サイトマップ>新規ページで作成
f:id:ozzwar:20141223193923p:plain


アンケートなども簡単に追加できた。
f:id:ozzwar:20141223194023p:plain


印象

  • ブログよりも静的なページを量産するような運用であれば、こちらの方が使いやすいかもしれない。
  • wordpressよりもMODxに近い印象。
  • 若干もっさりするので、webとは関係ない部署の人が運用に参加するときは、使っているPCなどに気をつけなきゃいけないかも。


本当に軽く触っただけなので、今後は管理者の権限や中身なども見てみる予定

Raspberry Piで日本語入力。sudo apt-get install ibus-anthyでエラー。

日本語入力をインストールしようとして、ibusをインストールしようとしたら、404エラーになった。

$ sudo apt-get install ibus-anthy


色々調べていて以下で、解決した。

$ sudo apt-get update
$ sudo apt-get upgrade

パッケージリストを最新へアップグレードしていなかったから、見つからなかったという事

wordpress ktai-styleでのPC表示切り替えとカスタマイズ

ktai-styleでPC表示の切り替えを行なう際、自作でテーマをつくっていると、ついつい

<?php ks_switch_pc_view(); ?>

というコードを入れ忘れてしまう。
これだとPCに切り替えるリンクが表示されないので注意。

テキストを変更してみる

通常は「PC 表示にする」と表示されるがこのテキストを変更したい場合は、
ktai-style/lang/ktai_style-ja.poのファイルにある、
「PC 表示にする」部分を変更するとテキストが変わる。

が、ただテキストエディタで変更してもpoファイル(翻訳リソースファイル)という特殊なファイルの為、適応されない。


poファイルを編集し、「.mo」というバイナリファイルにコンパイル(コンピュータが実行可能な形式に変更する)しなければならない。

poeditというツールを使う

poファイルを編集し、moファイルを生成するために「poedit」というツールを使用する。
ダウンロードはこちら


ダウンロードしたら、poファイルを編集し、保存すると自動的にmoファイルが生成される。
これだけ。

phpMyAdminで特定の文字が入っているカスタムフィールドを抽出し、該当する複数の記事を一括で削除する

久々にWordpressの記事を。


カスタムフィールドはCustom Field Templateなどで拡張して、様々な入力を実現することができる。
今回はカスタムフィールド内に、ある特定の文言や数値等が入っている記事を一括で消したい。
という場合の方法を考えてみた。

前提として

SQLでカスタムフィールド内に特定の文字が含まれる列を検索して、見つかった記事のIDを抽出し、記事消す作業を行う。
なので、ジャンルというカスタムフィールドを作成し「metal」という入力がある記事を探す場合「death metal」も検索対象となるので注意。

方法

phpMyAdminにログインして該当するデータベースに移動する
カスタムフィールドの値が入ってる「wp_postmeta」テーブルを表示する

一覧が表示されるので、上部メニューの「検索」をクリックし、検索する。
今回は「う○こ」が含まれる列を検索。
(%%はワイルドカードと呼ばれるもの。詳しくはこちらを参照。)


う○こが含まれている列の一覧が表示されるので、エクスポート。
う○こをエクスポート。


フォーマットをMS Excel用のCSVにする


詳細にチェック


1行目にカラムを追加する。こうするとエクスポートしたCSVの1行目に「meta_id」「post_id」というカラムが付加される。


こうしてエクスポートしたCSVのpost_idが記事のIDとなる。
これを以下のSQLに反映させ、SQLを流すと、見事該当の記事を消す事が出来る。

DELETE FROM wp_postmeta WHERE  `post_id` IN(う○こが含まれる記事のpost_id) 

DELETE FROM wp_postmeta WHERE  `post_id` IN(1,2,3,4,5) 


ただこれだとpost_metaは削除できたが、記事の大元「wp_posts」は消せていない。
そこで以下。

DELETE FROM wp_posts WHERE  `ID` IN(う○こが含まれる記事のpost_id) 

追記

タクソノミーと記事を結びつけるテーブルも削除する必要がある。

DELETE FROM wp_term_relationships WHERE  `object_id` IN(1,2,3,4,5) 

これで該当する記事を削除する事ができる。

注意

  • データベースを触るので、必ず作業の前にバックアップを取る事。
  • 失敗したときに復旧できるように復旧方法を確立しておく事


Thom Yorke - The Eraser - YouTube