2009年12月 1日 #wordpress

手法

もう一つのWordPressフォルダをサーバにアップロードし、

設定ファイルで作成するテーブル接頭辞を変えることで

DBの衝突を避けるという手法です。

詳細

  1. もう一つのWordPressフォルダが必要(ダウンロードでもいいし、現行のものをコピーしてもOK)
  2. フォルダをリネームしサーバにアップロード
  3. 該当フォルダのwp-config.phpの下記行の内容を編集:例えばwp_をwp_sub_にするとか、既存のWordPressと衝突しなければOK
  4. 後は普通のインストールと同じように\wp-admin\installを実行
``` $table_prefix = ‘wp_’; ```

参考サイト

レンタルサーバーに複数のWordPressを設置する方法 - HUBLOG

2009年12月 1日 #wordpress

移行手順

  • はてなダイアリーの「管理→ データの管理→ Movable Type形式」で記事をダウンロード
  • そのままWordPressの「ツール→ インポート→ Movable Type and TypePad」にアップロード

トラブル

すると一部の記事の投稿時間が1970年になってしまったんです。

検索してみたらはてなより出力されたファイルを下記のように「00:00:00」の「AM」を消せばいいとのことです。

  • 修正前: DATE: 11/19/2009 12:47:59 AM
  • 修正後: DATE: 11/19/2009 12:47:59

秀丸なのどエディタで一気に変更できるため、あんまり時間かからないはずです。
が、それでも一つの記事が1970になってしまって、そのデータをよ~く見たら「0:xx:xx PM」の形になってました。
ほかにもいろんなPMで始まる記事があるんですが、なぜかこれだけバグってます。

試しにDATE: 11/19/2009 00:47:59 PMDATE: 11/19/2009 01:47:59 PMに変更したら解決しました。
やはり0時のPMはうまく認識されないようです。

まとめ

  • 「AM」をすべて消す
  • 「2009 00:」を検索し「2009 01:」のように00時以外の時間に置換する
2009年11月30日 #seo

f:id:kinopyo:20091128134914g:image:right

自分でブログやサイトを運営する上には、よくこの問題で悩みました。このSEOって言葉にちょっと神経質になってしまった気がします。何もかもSEOに最適な方向で考えてるんです。


さて、本題に入りますとサブディレクトリが有効だそうです

このサイトを参考にしました。

サブドメインとサブディレクトリ、SEOに強いのはどっち? | 海外SEO情報ブログ・メルマガ

自分が一番印象的なものは

  • サブドメインはルートドメインの恩恵を必ず受けることとは限らない
  • 一方サブディレクトリのほうはルートドメインの恩恵を受ける

ってことです。

たとえば、自分のブログの記事がはてなやnewsingに引用されると、検索結果でオリジナルの自分のページよりも上に来ることが多々あります。これは、はてなやnewsingのドメインの評価が高いからです。


私も前FC2のブログを使ったことがありますが、正直はてなダイアリーほど検索上位にならなかったんです。

「同じ内容の記事なのになぜはてなはGoogle検索で上位になったか」の疑問をずっと抱いてました。

この記事を読んで分かったんです。FC2はサブドメインの形でブログサービスを提供、はてなはサブディレクトリだからです。

2009年11月29日 #apache mac

一番デフォルトでのインストール手順です。

インストール

1. Download - The Apache HTTP Server ProjectでUNIX Sourceをダウンロード

2. 解凍し、ターミナルを開いてそのディレクトリに移動

3. 次のコマンドを実行、--prefix="インストール先"を指定。省略された場合は/usr/local/apache2になる。他にモジュールとかの設定も可能。

``` ./configure --prefix=/users/kinopyo/develop/apache ```

4. ビルド、インストール

次のコマンドを実行、それぞれ時間がすこしかかる

``` make make install ```

これでインストールは完了です。

カスタマイズ:httpd.confを編集

ここからはプラットフォームとは関係なく単純なApacheの世界です。

前回の記事を参照してください:

PHP5とApache2.2をWindowsにインストール - kinopyoの日記

補足

Windowsはインストールウィザードでインストール時

ServerAdminとServerNameの編集ダイアログがあります。

一方MacはGUIのインストールではないため、

手動でhttpd.confに上記二つのプロパティを設定する必要があります。

テスト

サーバの起動:

``` $ インストール先のディレクトリ/bin/apachectl -k start ```

サーバの停止:

``` $ インストール先のディレクトリ/bin/apachectl -k stop ```

これでブラウザでhttp://localhost:80にアクセスすればページが表示されるはずです。

トラブルにあった!

上記コマンドを打つディレクトリはApacheサーバがインストールされたディレクトリです。

例えば/users/kinopyo/develop/apacheにインストールされたとして、

  1. まずはcd /users/kinopyo/develop/apacheに移動
  2. 次に/bin/apachectl -k startで実行

もし第一歩でbinディレクトリまで移動し、直接apachectl -k startを実行したら、

下記のようなエラーメッセージが出て、起動失敗になります。

``` (13)Permission denied: make_sock: could not bind to address [::]:80 (13)Permission denied: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs ```

ちなみにこのメッセージが出るもう一つのパターンはポート番号が既に使われている場合です。

その時は下記コマンドで検出するし、使っているアプリを停止するか

``` netstat -na | grep 8082 ```

httpd.confのListenとServerNameのポート番号を新たに設定する必要があります。


参考サイト:

Compiling and Installing - Apache HTTP Server

apache install problem

2009年11月29日 #encoding

文字コードが何なのか、エンコードは何なのか、何で文字化けするかはっきり分かっていませんでした。月刊DBマガジンの2010/JANの徹底研究に文字コードの内容が載せていて、とても分かりやすく説明してくれたので、勉強メモを書きます。

文字コードとは

文字コードは「文字集合」と「エンコード方式」の二つの概念があります。

文字集合(Character Set):表現したい文字の集まり

つまりどんな文字が使いたいかの集合体です。

英数字の他に、各国の文字や、機種固有文字が含まれています。

エンコード方式

コンピュータは数で処理を行っています。人間が分かりやすいように見た目だけが文字や記号に表示しているだけで、で実は裏で対応している数値があります。US-ASCII文字コード表によれば、英語の'A'の数値は0x41です。

どの文字がどのビット列に割り当てるのかを決めるのがエンコード方式です。エンコードとも読んでます。

ASCII - Wikipediaに詳細な文字コード表があります。0x41は16進の表示方法です。

代表的な文字集合とエンコード方式

文字集合 含まれる文字
US-ASCII 英数字、半角記号
ISO/IEC 646 英数字、半角記号
JIS X 0201 英数字、半角記号、半角カナ
JIS X 0208 英数字、半角記号、半角カナ、平仮名、片仮名、第一水準漢字、第二水準漢字、全角記号
JIS X 0212 JIS X 0208に加えて、補助感じ
Unicode 各言語文字
エンコード 対象とする文字集合
ISO-2022-JP ASCII、JIS X 0201、JIS X 0208
Shift_JIS ASCII、JIS X 0201、JIS X 0208
EUC-JP ASCII、JIS X 0208、JIS X 0212
UTF-8 Unicode

ISO-2022-JPはE-Mail標準で、EUC-JPはUNIXプラットフォームで、Shift_JISはWindowsプラットフォームで、というようにそれぞれの特徴に対応した形で利用されています。

MS932は何?

厳密にいうとWindowsが扱う文字コードは、Shift_JISではなく、MS932です。または、Microsoftコードページ CP932ともいいます。MS932は、マイクロソフトがShift_JISを拡張して定義したコード体系です。Shift_JIS + 拡張した分 = MS932なので、範囲から言うとMS932 > Shift_JISです。

文字化け

Unicodeが現れる前の各エンコードは統一されていなかったため、同じ文字でも異なった数値(コード)になったり、同じ数値(コード)異なった文字になったりしました。これで他の文字コードに変更したときの数値の違いで文字化けになってしまったのです。Unicodeはその背景で誕生し、文字に対応する数値(コード)重複しないように、エンコードを決めました。

英数字がほぼ文字化けにならないのはASCIIがほぼすべてのエンコードに入っているから、そこは自然に統一された感じです。

2009年11月29日 #apache

サイトの引越しなどであるURLから別のURLへ転送する場合の話です。例えば JavaScript を利用して転送したり、HTMLの機能で転送させたりするかもしれません。


しかしトップページでリダイレクトしてみても、別のページに直リンクしていた場合は旧ページが表示されることになります。そのような時に、Apache では httpd.conf に下記の1行を追加することで、別のURLへ転送させる事が可能です。

``` Redirect / http://www.yahoo.co.jp/ ```

この例では Yahoo Japan へリダイレクトされますが、例えば http://www.example.com/base/ にアクセスした場合でも http://www.yahoo.co.jp/base/ へのリダイレクトが行われます。

2009年11月28日 #jquery

htmlにoptionが一つしかないselectboxがあるとします。
このようなselectを非表示にし、そのテキストラベルで表示させたいのもありですね。

<select>
    <option>1</option>
</select>

jQuery文はこれ

//:only-childフィルタで子要素が一つしかない要素を選択
var $target = $("select :only-child");

$.each($target, function(index, item) {

  // spanのhtmlを構築
  var span = '<span>' + $(this).text() + '</span>';

  // thisはoptionを指しているため、そのparentのselect要素を非表示
  // 構築したspanを挿入
  $(this).parent().hide().after(span);

});

さらにブランクの要素をフィルタ

selectボックスの先頭がblankのケースが結構あると思います。
その場合はラベル表示させたくないです。
なのでそれをフィルタするには、以下のようにfilter()を使います。

var $target = $("select :only-child").filter(function(index) {
    return $.trim($(this).text()).length != 0;
});

$.trim()の1000倍速い方法でブランクを検出

jQueryにはblankを検出するメソッドがないため、上記のソースコードでは
$.trim()を利用して判断しています。
しかしこの$.trim()は遅いとの報告がありました。
そこでblankのテキストを検出するためのメソッドも提供されました。
$.trim()が2000msかかったものがこれだと0.5msになったようです。

blank: function( text ) {
    return !text || !/\S/.test(text);
}

興味のある方はこの記事を参照してください。英語のサイトです。
Zipalong Blog » Blog Archive » jQuery: x1000 faster test for blank strings (on large strings)

2009年11月27日 #jquery

toggle()の普通の使い方は多分皆さんご存知だと思います。
該当要素をクリックするたびに表示/非表示を切り替えます。

今日紹介するのはこのswitchパラメータ付のtoggleです。
swtich文を評価しtrueであれば要素を表示、falseであれば非表示です。
これで下記のコードがこのswtich付きのtoggle文なら一行ですみます。

if (name == "kinopyo") {
    $("p").show();
} else {
    $("p").hide();
}

これがこうなります。

$("p").toggle(name == "kinopyo");

どうですか?すごくないですか?
まさにjQueryの「The Write Less, Do More」ですよね。
ただし判断の条件文が行の最後になるので、
読みやすさは多少落ちると思います。


ちなみに、Googleの単語とよく似ているので、ついついtoogleと書いちゃいますorz

2009年11月27日 #iphone

ブックマークレット(Bookmarklet)とは

簡単に言うとJavaScriptをブックマークしたものです。
普通はURLをブックマークするに対し、JavaScriptをブックマークします。
そしてこのブックマークを選ぶときは保存されたJavaScriptが実行されます。
iPhoneのブラウザ関連のアプリでは結構使われています。

最下部へ移動するJavaScriptをiPhoneに登録する方法

javascript:<span class="synStatement">window</span>.scrollTo(0,<span class="synStatement">document</span>.documentElement.scrollHeight);
  • まずSafariで任意のサイトをブックマークする
  • そのブックマークを編集する
  • 一行名に好きな名前(ここではPage Bottom)を記入し、二行目を上記のJavaScriptを貼付けで保存する

  • ページの最下部へ移動したい時はブックマークからさっき登録したブックマークレットをタップすればOK。

参考サイト:

2009年11月26日 #diary
専門家ではないので記事のテーマがちょっとでかすぎるかもしれませんが、 最近気になったニュースをベースにざっと述べようと思います。

2010年注目の資格、一位が仮想化技術

これは@ITの記事による結果です。 仮想化といえばVMWareくらいは知ってますけど、 Mac上でWindowsのアプリをたまたま実行する時に使ってました。 「運用コスト削減のためのサーバ統合やクラウドの活用」などのことにどう繋いでいるのか全然イメージできません。。。 少し興味はあるんで、後で勉強しとこう。 関連の資格は以下のようです。
  • ヴイエムウェアの「VCP」(VMware Certified Professional)
  • マイクロソフトの「Hyper-V仮想化検定」「MCP」(Microsoft Certification Program)
  • シトリックスの「CCEA」(Citrix XenServerのCitrix Certified Enterprise Administrator)

クラウド

このキーワードもITユースから頻繁に出てきますが、 どのようにプログラマのキャリアに影響するか、 知りたいですね。

JDK 7 Milestone 5 build

Java7のニュースはずっと聞いてたんですが、 なかなか使ってみる時間がないですね。 今日雑誌でちらっと読んだのですが、 モジュール化、多言語の対応などの機能が追加されたそうです。 特にモジュールのサポートは「JAR HELL」(Jarの地獄)から救う有力な機能だそうです。これからクラスパスなど特に気にしなくてモジュール単位になりますと。 またコレクション周りの使い方も強化されましたね。 実は一番気に入ったのがswitch文がやっとString文字列をサポートしたことです。 今までJavaのswtich文があんまり使えないなと何となく感じましたが、 Java7になるとやっと文字列できましたね! ```java String s = "..."; switch (s) { case "quux": processQuux(s); // fall-through case "foo": case "bar": processFooOrBar(s); break; case "baz": processBaz(s); // fall-through default: processDefault(s); break; } ```

In the end..

ということでIT業界どんどん進化していきます。 Java7,,,やってみたいっす!