Kinopyo Blog

プログラマとしてRuby, Rails, iPhone, iPad,Macなどなどと向き合う日々のログポース

Archive for 23:07

SEO対策:サブドメイン vs サブディレクトリ

2009年11月30日

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

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


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

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

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

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

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

ってことです。

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


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

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

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

文字コードとは?エンコードとは?なぜ文字化けするのか?

2009年11月29日

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

文字コードとは

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

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

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

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

エンコード方式

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


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

ASCII – Wikipediaに詳細な文字コード表があります。0×41は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がほぼすべてのエンコードに入っているから、そこは自然に統一された感じです。

ApacheサーバRedirectメモ、別のサイトに転送

サイトの引越しなどである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/ へのリダイレクトが行われます。

Mac(UNIX)でApache2.2サーバをインストール

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

インストール

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

jQueryでoptionが一つのSelectボックスをラベル表示

2009年11月28日

htmlにoptionが一つしかないselectboxがあるとします。

このようなselectを非表示にし、そのテキストラベルで表示させたいのもありですね。



jQuery文はこれ:

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

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

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

	// 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)

iPhoneでページ最下部へ移動するブックマークレット

2009年11月27日

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

簡単に言うとJavaScriptをブックマークしたものです。

普通はURLをブックマークするに対し、JavaScriptをブックマークします。

そしてこのブックマークを選ぶときは保存されたJavaScriptが実行されます。

iPhoneのブラウザ関連のアプリでは結構使われています。

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

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

f:id:kinopyo:20091128002653p:image

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

f:id:kinopyo:20091128002655p:image


参考サイト:

http://css-eblog.com/javascript/scrolltoend-for-iphone.html

ブックマークレットとは – はてなキーワード

jQueryのtoggle(switch)が大変便利、条件文5行のコードが1行に短縮!

toggle()の普通の使い方は多分皆さんご存知だと思います。

該当要素をクリックするたびに表示/非表示を切り替えます。

f:id:kinopyo:20091128134759g:image:right

今日紹介するのはこの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

最近のIT業界動向

2009年11月26日

専門家ではないので記事のテーマがちょっとでかすぎるかもしれませんが、

最近気になったニュースをベースにざっと述べようと思います。

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になるとやっと文字列できましたね!

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,,,やってみたいっす!

CTO:技術者にとっての社長

2009年11月25日

@ITよりこんな意味深い記事を読みました。

自分にぴったりだと思うので、一部抜粋して引用させていただきます。

技術者は技術に専念。ただ、ビジネスにも興味は持て - @IT自分戦略研究所

所感

私もビジネスにあまり興味がなく、プログラミングが好きです。そして、決してプログラミングの天才じゃないこともわかってます。そう、天才ではないけど、努力はできる、そのほうが自分に向いてると思います。


CTOは格好いい、そして常に論理的に物事を考えそれを行動とコードに移す、一人前の魅力的な人類だと考えています。私は技術に特化していきます。

技術者にとっての社長

わたしは、CTOは「技術者にとっての社長」になるべきではないかと思っています。技術者とは、根本のところではビジネスに興味が持てない生き物だと思っています。わたし自身がそうですから。究極的には、ビジネスがどう、経営的にどうという部分よりも、問題があって、技術的にどう解決するか、という方が好きなんです。でも、社長はそうではいけない。社長はビジネスのことを24時間、考えている。そうなると、技術者は社長に、根本のところで付いていけなくなってしまう。上層部がみんなビジネスのことしか考えていなかったら、技術者は付いてきません。そういう意味で、CTOが「技術者にとっての社長」としての役割を果たすべきなのです。

特化

技術者は自分にとって最適な仕事を見つけるべきです。よく、プログラマからシステムエンジニアになって、そのあとプロジェクトマネージャになって……というキャリアパスが示されますが、わたしはそういう考え方は嫌いです。だって、プログラマとプロジェクトマネージャって、全然違う仕事ですよ。プログラマは機械相手、プロジェクトマネージャは人間相手で、そもそも向く方向すら違う。適性だって異なります。向いている方に専念した方がいい。これは私見ですが、プログラマとしての才能がある人がプロジェクトマネージャをやると、「プログラマの才能がマイナスに働く」ことすらあると思います。プロジェクトマネージャは大局からものを見なければいけないのだけれど、プログラマとしての才能にあふれている人は、細かい部分を見てしまいがちです。やはり、どちらかに特化した方がいい。

 「餅は餅屋」です。プログラマなりプロジェクトマネージャなり、自分に向いている部分に特化した方がいい。ましてや、技術者にビジネスセンスを求めるなんて馬鹿げています。

IE8でbackground-colorが白とその値がnullとの表示が微妙に違う

2009年11月24日

現象

f:id:kinopyo:20091124235949j:image

まず画像を見てみましょう。

最初の二つ白い背景のエリアに注目してください。

一番目は背景色を白い色(#FFFFFF)に設定したもので、

二番目が背景色をnullに設定したものです。

白い色に明確に設定したほうのborderの左と上の表示が少し違ってます。


またIE8の開発ツール(F12で呼ばれる、Firebugと似たデバッグツール)で見ても

background-colorが#ffffffになってる以外に、何の余計なスタイルもありませんでした。

なのでやはりbackground-colorが指定してないものと#ffffffに指定したものには差異が存在してます。


サンプルコード

<div>
<input id="foo" type="text" />
<input id="bar" type="text" />
</div>
<div>
<input id="hoge" class="gray" type="text" />
<input class="gray" type="text" />
</div>
$(document).ready(function(){
  // 元の背景色を保持
var original = $("#foo").css("background-color");
alert(original);	// output is "ffffff"
  // 元の背景色を再設定、値は同じはず
$("#foo").css("background-color",original);
// 他の背景色はこんな現象がないみたい
// あるとしても発見しづらい	
  var hogeColor = $("#hoge").css("background-color");
alert(hogeColor);	// output is "gray"
$("#hoge").css("background-color",hogeColor);
});