2008年3月アーカイブ

コレクションに、ある値(メンバー)が既に存在するかをチェックする関数
重複チェックなどに便利です。
Function isMemberOfCollection(col As Collection, query) As Boolean
    Dim item
    
    For Each item In col
        If item = query Then
            isMemberOfCollection = True
            Exit Function
        End If
    Next
    
    isMemberOfCollection = False
    
End Function
使うときは、
If isMemberOfCollection(myCollection, myValue) Then
    MsgBox "エラー:" & vbLf & vbLf _
     & "値が重複しています。" &  myValue
    End
End If
のような形で呼び出します。
エラー処理などに使えます。

答え

      71バイト

SEOにおける、Titleタグの重要性

Googleの検索結果では、Webサイトの<tittle>タグが見出しとして表示されます。
言わば、これがWebサイトの看板になるわけです。

google1.jpg

ところが、タイトルの文字が長すぎると、残念なことに後半が省略されて「...」と表記されてしまいます。

 ↓例
google2.jpg
できれば、タイトルの全文がきれいに表示された方がいいに決まっています。

では、いったい何文字を超えると、このように後半がカットされるのか?

気になったので調べてみました。

調査対象

   このブログの検索結果 

タイトルの後半がカットされたもの

まず、タイトルがカットされてしま記事のうち、最も短いタイトルは以下のようなものです。

タイトル文字数バイト数
【メモ】Windows+ActivePerlでXML::RSSモジュールを入れる方法 - DQN起業日記 5272
BloggerをエクスポートしてMovable Typeにインポートする方法 - DQN起業日記 4871
最もためになる初心者用のプログラム言語はWSH(JScript)です。 - DQN起業日記 4572

タイトルがカットされなかったもの

次に、タイトルがカットされなかった記事のうち、最も長いものは以下のものです。

タイトル文字数バイト数
XREAのアクセスログ(LOG)をCSVに一発変換するための正規表現 - DQN起業日記 4470
Perlで、テキストファイルの行数を数える(カウントする)には - DQN起業日記 4170
Linux&Apacheで自宅Webサーバ構築 3 Vine Linuxを入手する - DQN起業日記 5169

注1:文字数とバイト数の調査は、エクセルのLen関数、LenB関数を使用。
注2:バイト数とは、日本語で1文字分、半角英数字で2文字分の長さのこと。

分析

カットされたものとされなかったものを比べてみます。

まず文字数で比較すると、45文字しかないのにカットされたものがある一方、51文字あるのにカットされなかったものがあります。
したがって、文字数は関係なさそうです。


次に、バイト数で比較してみます。
カットされたタイトルは、すべて71バイト以上です。
一方、カットされなったタイトルは、すべて70バイト以下です。

結論

Googleの検索結果では、Webページのタイトル(titleタグの中身)が71バイト以上の場合、後半部分が省略される。


(参考:SEO連載(5) 「タイトルとメタタグの最適化」 - かんたん!SEO実践講座 より

年月日 → 曜日 に変換する関数です。

Googleで検索しまくると、実にいろんなやり方が出てきます。

  • ファイルの中身を全部一気に変数に入れて、改行コードを数える
  • ファイルの中身を一括で配列に入れて、要素数を数える
  • ファイルの中身を一行ずつ読み込んで、行数をカウント
  • ファイルを最後まで読み込んで、$.を参照する
例えば、
log20080308.txt
   ↓
log-2008-03-08.txt
のように、 フォルダ内のファイル名を全部いっぺんに変更したいとき。
rename "変更前のファイル名", "変更後のファイル名";

例: foo.txt → bar.txt に変更

rename "foo.txt", "bar.txt";

ワンライナーで

perl -e "rename 'foo.txt', 'bar.txt'"

関連記事:Perlで、フォルダ内のファイル名を一括変更するには

2種類のアクセスログ

XREAでは、Webサーバへのアクセスログが毎日早朝に2種類のフォーマットで出力されます。
HTML形式とApache生ログ(テキスト)形式です。

HTML形式

標準で入っているアクセスログ解析ツール(analog 6.0)が、毎日午前5時ごろにレポートとしてhtmlファイルを出力します。
(出力先は/public_html/log/ )
いろいろな統計情報が見れて面白いのですが、ここからはさらに詳しく追いかけるはできません。
アクセス1件1件、訪問ユーザ一人一人の訪問履歴を詳しく見たい場合、もしくはHTML版と違う切り口で統計分析したい場合は、Apacheの生ログを見る必要があります。

Apache生ログ(テキスト)形式

各ユーザのホームディレクトリ下のlogディレクトリに、
 ドメイン名.log
 ドメイン名.1.log
 ・・・
 ドメイン名.4.log
というテキストファイルがあるかと思います。
生ログが見れない場合は、こちらのページを参考にしてください。
このテキストファイルの中身は、下記のようなフォーマットになっています。
(Apache標準のcombine形式というそうです。)
hoge.example.com - - [14/Mar/2008:00:51:46 +0900] "GET /2008/03/15.html HTTP/1.1" 200 5539 "http://www.google.co.jp/search?q=家庭教師&hl=ja&c2coff=1&rls=GGLD,GGLD:2005-11,GGLD:ja&start=330&sa=N" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
このままだと見にくいし分析のしようがないので、タブ区切りCSVに変換したいと思います。
タブ区切りCSVにすれば、エクセルに貼り付けて自由に分析することができます。

タブ区切りCSVに変換する方法

秀丸で正規表現を使って置換します。
  • 秀丸の メニュー>検索>置換 を実行して、置換ダイアログを出す。
  • 「正規表現」にチェックを入れる
  • 検索ボックスに下記を入力(注1)
  • ^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"$
  • 置換ボックスに下記を入力
  • \1\t\2\t\3\t\4\t\5\t\6\t\7\t\8\t\9\n
    ↓実行画面 hidemaru-replace.JPG
  • 全置換を実行
これで、アクセスログがきれいなタブ区切りCSV(=TSV)に整形されます。
エクセルに貼り付けると、下図のようにきれいに分割されます。 excel-log.JPG
注1:秀丸の場合、正規表現エンジンがHmJre.dllである必要があります。
注2:この正規表現自体はPerlやその他スクリプトでも使えます。

■ 追記
一部正規表現に間違いがあったので修正しました。

調べたところ、XREAのログ形式は、Apacheのデフォルトのログ形式"Combined"と同じみたいです。
なので、Xrea特有のことは何もなく、Apacheログの一般的な解析手法をそのまま使えます。

記事中の正規表現は、下記のサイトのものを使わせていただきました。
参考:Apache Combined Log を効率的にパースする正規表現メモ
秀丸で文字数をカウントするには、「文字数カウントマクロ」というものを使います。
以下、このマクロの登録方法を説明します。

「文字数カウントマクロ」をダウンロード

中小企業では、Windows2000やWindowsXPProなどの普通のPCのフォルダを共有フォルダにしてファイルサーバとして使うことがよくあると思います。

症状

社員が10~20人くらいになってくると、同時接続するクライアントPCが増えて最大値をオーバーしてしまい、接続不可になることがあります。
具体的には、下記のようなエラーがでます。
コンピュータへの接続数が最大値に達しているため、これ以上このリモートコンピュータに接続出来ません。

対策

自動切断されるまでの時間を短くしてしましょう。
初期設定では、PCからサーバへ何もやりとりがなければ15分で自動切断されるようになっています。
これを1分にしてみましょう。
サーバとして使っているPCのコマンドプロンプトを立ち上げて、C:~¥>の後に下記を入力します。
C:~¥>net config server /autodisconnect:1
こうすると、1分たつと自動切断されるようになります。
結果的に、よりたくさんのPCからサーバへ接続できるようになります。
一度、試してみてください。

参考:http://okwave.jp/qa869934.html
1 → 001 のように、数字の左側をゼロで埋めたい場合がよくあります。
下記のように書くと便利です。
iGoogleで使われているアレです。
前回の記事より、さらにわかりやすく書いてみます。
初心者にとっては今回の方がわかりやすいかと思います。

実行サンプルはこちら (別ウィンドウで開きます) 

ソースコード

<html>

<head>
    <title>超シンプルなタブメニュー</title>
<script>

function show1(){
	content1.style.display="block";
	content2.style.display="none";
	content3.style.display="none";
}

function show2(){
	content1.style.display="none";
	content2.style.display="block";
	content3.style.display="none";
}

function show3(){
	content1.style.display="none";
	content2.style.display="none";
	content3.style.display="block";
}
</script>

<style>
#content1 { display:block; }
#content2 { display:none; }
#content3 { display:none; }
</style>

</head>
<body>

<span onclick="show1();">|タブ1|</span>
<span onclick="show2();">|タブ2|</span>
<span onclick="show3();">|タブ3|</span>
<br>

<div id="content1">コンテンツ1</div>   ← タブ1の中身
<div id="content2">コンテンツ2</div>   ← タブ2の中身
<div id="content3">コンテンツ3</div>   ← タブ3の中身

</body>
</html>

解説

ポイントは、
タブの中身をHTMLでこのように書いておき、
<div id="content1">コンテンツ1</div>
<div id="content2">コンテンツ2</div>
Javascriptで中身の表示/非表示を切り替えます。
  content1.style.display="none";   ← タブ1の内容を隠す
  content2.style.display="block";  ← タブ2の内容を表示

どこかで見つけたスクリプトです。

下記のコードをメモ帳に貼り付けて、eject.jsというファイル名で保存して実行します。
すると、あら不思議~パソコンのCDトレイが開いて閉じます。

他人が作ったExcelファイルで、IFやVLOOKUPなどの関数が入れ子(ネスト)になっていて、複雑すぎて解読不能になるときがあります。

実際に私が見た例で、以下のような数式がありました。


=IF(R2="","",IF(J2="ABC",IF(VLOOKUP(D2,sheet1!$A:$G,6,0)="",VLOOKUP(VLOOKUP(D2,sheet1!$A:$I,7,0)-2,sheet1!$G:$I,3,0),VLOOKUP(VLOOKUP(D2,sheet1!$A:$G,6,0)-2,sheet1!$G:$I,3,0)),IF(R2="","",VLOOKUP(VLOOKUP(U2,sheet1!$A:$G,6,0)-2,sheet1!$G:$I,3,0))))


そんなときはあわてずに。

関数をメモ帳に貼り付けて、縦に展開してみましょう。

改行やスペースをつけると、不思議と解読できるようになります。


セルS2に入っていた関数の数式を展開


=IF(
  R2="",
  "",
  IF(
      J2="ABC",
      IF(
          VLOOKUP(D2,sheet1!$A:$G,6,0)="",
          VLOOKUP(
              VLOOKUP(D2,sheet1!$A:$I,7,0)-2,
              sheet1!$G:$I,
              3,
              0
          ),
          VLOOKUP(
              VLOOKUP(D2,sheet1!$A:$G,6,0)-2,
              sheet1!$G:$I,
              3,
              0
          )
      ),
      IF(
          R2="",
          "",
          VLOOKUP(
              VLOOKUP(U2,sheet1!$A:$G,6,0)-2,
              sheet1!$G:$I,
              3,
              0
          )
      )
  )
)

IFやVLOOKUPが入れ子になっているときに効果的抜群です。

あとは、時間さえかければ解読できますね。

以上、ワンポイントテクニックでした。

プログラムを書いていて、下記のように配列を初期化することがよくあります。

配列 = [
要素1,
要素2,
];

このときいつもモヤモヤするのが、

最後の要素の後にカンマ(,)付けても大丈夫なんだっけ?

ということ。
つまり、この配列は要素が2個としてちゃんと解釈されるのかな?という不安です。


よい機会なので、JavaScript、PHP、Perlで挙動の違いをまとめてみました。

Perlの場合

@ary = ("foo", "bar",);
$count = @ary;
print $count;
→ 結果  2

PHPの場合
$ary = array( "foo", "bar", );
echo count($ary);
→ 結果  2

JavaScript (Firefox) の場合
var ary = ["foo","bar",];
alert(ary.length);
→ 結果 : 2

JavaScript (IE6) の場合
var ary = ["foo","bar",];
alert(ary.length);
→ 結果 : 3

結論。

IEのJavaScriptI(=JScript)は、最後のカンマのあとにもう一つ空の要素を生成する。


というわけで本日のまとめ。


 [FOO,BAR,] を

 3個と数える

 JScript


字あまり ><

VBAでMsgBoxを表示すると、OKボタンを押すまで処理が中断してしまうので不便だなーと思っていました。
調べてみたら、教えてGoo!に良いやり方が載っていました。

無職3ヶ月目に突入しますたw

 

友人が独立して受託Web開発をやっているので、そこに弟子入りしました。

PHPを教えてもらいながら初めてWEBサイト開発をやりました。

弟子入りなので、無償ですw  (来月の家賃払えるのか>オレ)

 

延べ1ヶ月かけて、友人に助けてもらいながら小規模なWebサイトを作りました。

内容は、資格試験の自己採点サービスです。

 

最初の方は、PHPを勉強しながらさくさくスクリプトを書く感じで、スピードは遅いものの順調でした。

初期でつまづいたのはこれです。

 

セッション変数? $_SESSION ? 何それ?

 

「セッション変数」という、PerlにはないPHP独自のセッション管理機構を理解するのが難しかったです。


私のようなPerl初級プログラマは、クッキーしかしらないので、

「 は?セッション変数?何それ?

 HTTPにはステータス情報がないからクッキーでセッションIDをやりとりするのは知ってる。
 けど、セッション変数って何?クッキーのことじゃないの?」

というありさま(><)

 

結局、

「セッションIDに紐づくユーザの情報を、Apacheがメモリ上に保持してくれるので、ページ間で変数を共有できる」

ということだったようです。
いわゆるショッピングカートとかのあれですね。

これを理解するのに3日かかりました。

 

だってPerl/CGIには、Apacheのメモリ上にデータを保存するなんて発想はできないんですもの。

しかし覚えると便利ですね、$_SESSION。

根気よく教えてくれた友人に感謝。^^

ITmediaの記事にもありますが、InternetExplorer 7をインストールしたら不安定になったという方が多いようです。
原因のほとんどは、「アドオン」によるものです。

一度、アドオンを無効にしてしまいましょう。

釣りぽいタイトルですいません。

このへんの記事を読んで、自分にも貴重な体験があったのを思い出しました。



ある女子中学生と家庭教師の話


数年前の話。

私は二十歳でした。

大学生で家庭教師のバイトをしていました。

たまたま紹介会社から、中学3年生の女の子を担当してほしいと言われ、会ってみることにしました。

どこにでもいそうな、明るくて勉強嫌いな中学生でした。


 「女の先生だと甘えてしまうので、自分から男の先生を希望した」

とのこと。

兄がいるので、男の先生の方が親しみやすい、とも言っていました。


私の家と近かったし条件も良かったので、OKして勉強を教えることになりました。

 

勉強はやはり好きじゃないようで、試験前だけがんばるという感じでした。

でも英語だけは結構がんばって勉強していました。

「英語が話せるようになりたい」

と言っていました。

その子には3年間、勉強を教えました。

 

インターネット上の衝撃の出会い

 

彼女が高2になった時、私は家庭教師をやりながら就職活動をしていました。

その頃インターネットを家でやり始めて、チャットというものを知りました。

「これって海外に人ともチャットできるのかな」との好奇心から、、英語のチャットルームを探して入ってみました。

 

そこで衝撃的な光景を見ました。

 

日本人と外国人が、チャットルームというWebページの中で、楽しそうに会話しているのです。

英語で。

文字だけで。


私が普段触れる英語といえば、教科書と、教材のCDと、NHK英会話ぐらいしかないというのに。

海外旅行だってしたことないのに。

「生の英語」だ!

「ネイティブの英語」だ!

それが、家で、自分のパソコンの画面で繰り広げらている。

 

すごい!

 

私はいてもたってもいられなくなり、勇気を出して参加してみました。

> Hello

 

すると、

> Hello, DQN

返事が返ってきました。

 

返事の主は、オランダ人でした。

高校生の男子で、よくこのチャットルームで日本人とチャットしているという。

就活がうまくいかなくて悩んでいると言ったら、「そうだな、日本は不景気だからな」と慰めてくれました。


すると、今度はフランス人が参加してきました。

大学生でした。日本のアニメが大好きだと言います。

私は夢中になって、日本の不景気のこと、就活のこと、海外の事情、インターネットの面白さなどについて語りあいました。

 

チャットが終わって我に返ったら、夜が明けていました。

初めてできた外国人の友達でした。

海外旅行したことないのに、海外の人と友達になれました。

 

インターネットって、すごい!

 

私はその後もチャットにはまり、ドイツ人、中国人、アイルランド人とも仲良くなりました。

数ヶ月後、そのドイツ人が友人を連れて日本に旅行に来ました。

私は電話番号を教えて、大阪駅の前で待ち合わせました。

駅に行ったら、デカい外人が2人、改札の前に突っ立っていました。

 

「ハロー、君がDQNかい?」

 

すぐに意気投合。

大阪の街を案内しました。

 

次の日は、例の家庭教師のバイトの日でした。

2人のドイツ人に、一緒に行くか?と冗談で聞いたら、「行く」と言いました。

それも面白いと思って、ドイツ人を二人、例の教え子の家に連れて行きました。

一家の驚きようといったら!

その日はたこやきパーティをしてもてなしてくれました。

 

インターネットは人生を変えた

 

その後、上記で出会ったオランダ人も、日本に来て僕の家に泊まり、彼女の家にも行きました。

こういう出会いがきっかけで、彼女は英語がますます好きになりました。

大学に入った後、一人でスウェーデンに留学することを決め、スウェーデンで経営学を勉強しました。

向こうで彼氏もでき、私よりはるかに英語が堪能になって帰ってきました。


「私が国際社会に目を向けるようになったのは、先生のおかげだ」

と言ってくれました。

教師みょうりに尽きる一言でした。


インターネットは本当にすごいと思います。

インターネットがなかったら、僕の家に外国人がやってくることも、彼女が留学することも、たぶんなかったでしょう。

 

foreachを使ってますか?

初級プログラマに意外と知られていないforeach。

何が便利かというと、
カウンタや添え字(index)を意識せずに、配列の要素に対してアクセスし、何らかの処理をすることができます。

foreachを使わない場合、

for(i=0;i<=n;i++){ print 配列名[i]; }
のように、配列の要素数とカウンタを使ったダサイ記述をするハメになります。
一方、foreachを使えば楽ができます。

人気記事

このアーカイブについて

このページには、2008年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年2月です。

次のアーカイブは2008年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事