2010年8月22日日曜日

光ポータブルは無意味!?

NTTがやっている「光ポータブル」に予約し、今日届いたのですが。

届いて色々使ってみて、感想は



これ。意味あんのか?



って感じです。



フレッツスポット、3G通信への誘導



基本的に、光ポータブルというのは

「光Link」という「アクセスポイント兼ルーター」を

315円で貸し出すNTTのサービスです。




それ以上のサービスでも、それ以下のサービスでもありません。

間違ってもemobileやWiMAXのような

公衆無線LANサービスを315円で楽しめるサービス」ではありません。






様々なNTTサービスへの呼び水



結局のところ、お気づきの通り

同社が行っている「フレッツスポット」への

呼び水としての意味しかないような気がします。




スレッツスポットは

iPadやiPhoneに対応していなく

機種ごとにMACアドレスの登録が一々必要です。



その欠点を光ポータブルでは

埋める事が出来ます

それを埋める事ができる利点はあります。



(AOSSの機能がついています)


3G通信への誘導




光ポータブルでは

フレッツスポットと3G通信、ホームネットワークの

3つの通信をストレスの無いように

行き来する事が出来ます。



つまりはその3つを契約していて初めて

効果をなすわけです。



フレッツスポットも3Gももっていない人は

ハッキリいって無意味です。



(有線ネットワークから無線アクセスポイントにできます)

2010年5月8日土曜日

被リンク評価の限界


今の時代

外的要素=「被リンク集め」

そう思われている方が多いのではないでしょうか。



実際に多くの検索エンジンでは、数多くの被リンクを獲得したり
オーソリティのあるサイトから被リンクを受ければ
かなり高い確率で順位の上昇が起きます。



リンクデフレーション



僕が、この言葉を始めて聞いたときは
とても衝撃を受けました。



被リンクは皆さんご存知のとおり
「お金」で買うことが出来ます。



今、どんなECサイトもSEOに注目し
ターゲットワードで検索順位の一位を取ることの価値が高まっていて
SEOにかける事の出来るお金は日々増えているでしょう。



「被リンク集めは1000~2000買って当たり前。
オーガニックな被リンクなんて即効性がない」
なんて人も多いと思います。



さて、そんな人がどんどん増えていったらどうなるでしょうか?
検索エンジンが被リンクへの評価価値を下げ
評価対象から消えるのは時間の問題であると
僕は思います。



「ユニークな情報」という価値



僕の経験では、YSTは重複するテキストやコンテンツに対して
フィルタを掛け、検索結果に「より多様な情報」を掲載しようとする
アルゴリズムの動向を感じます。



WEBサイトが「今までにないユニークな情報を多く持っている」という
一つの評価対象を作ろうとしているのです。



これにより、例えばページ全体に共通する部分が多く見られるサイトは
不利な状況になる可能性があるのです。



ここで注意しなければならないのは
重複コンテンツはスパム要素ではなく
あくまでも「フィルタ」だと言うことです。



順位を下げる要素ではなく、
順位を上げるためにはユニークなコンテンツが
多く必要と言うことだと僕は思います。



ユニークなコンテンツを増やし、SMOを行う



いずれ、買ったリンクの価値は失墜し
外部リンクの数や質ではサイトは評価されなくなる時代が来ると思います。



というか、被リンク以外で
そのサイトの外部からの評価を定める要素が必要だと僕は思います。



そして、もし外部リンクが評価されなくなったら
外的SEOは大きく変貌を遂げるでしょう。



無駄なスパムブログまがいのブログを多く運営し
リンクを売るしか脳のないSEO会社は潰れる事を余儀なくされます。



単純な作業を大量に行う事で
検索順位が上がることは難しくなるでしょう。



そうなった場合、SEOに何が求められるのでしょうか?



僕は「コンテンツのユニークさを強調する事」と
「SMOを用いたコンテンツの宣伝とブランディング」
この二つが重要であると思います。





今回被リンクに変わる外的評価の要素について
記事にしましたが、皆さんはどう思うのかを知りたいです。



この記事を読んでくださった方は
あなたの意見をリツイートかコメント投稿して頂ければ幸いです。

支離滅裂な記事に成りまして申し訳ないです。

2010年3月15日月曜日

Twitterの問題サービス!?「さらしったー」について

はじめに


この記事は私の個人的な意見ですので


文句 皆様のご意見があればコメントやRTなどで

投稿して頂けると面白いと思います。








さらしったー
http://twitter.com/sarasitter







「ツイッターを愛する者として侍らしからぬ不届者を晒す」

Twitterのサービス(ユーザ)です。具体的な内容としては


「一方的なフォロワー増やし目的のユーザ」を


明確な基準も無く。本人の主観のみで

アカウントを晒していくサービスなのですが。


今、Twitter上でかなりの物議を起こしています。





そもそも、個人的な「つぶやき」を通して「今」を

共有するTwitterを

(2chなど)某巨大掲示板の低俗なスレッドのような

サービスとして利用する事が


一種「拒絶反応」を起こしている

ユーザを生んでいる原因であると私は思います。




そもそも「晒す」というサービスを追求するのであれば、

情報を双方向(お互いに投稿しあって一つの情報を確立させていくようなシステム)かつ

恒久的(時間が過ぎても情報に価値を与えられるようなシステム)な

掲示板のようなサービスを使う事が適切であると僕は思う。




そうでなければ、「本当の正義」としての「晒す」ということにはならないと思う。

皆にとって全ユーザにとって、本当に正義の晒しをするには

みんなが意見を出し合って、その意見のやり取りをすべて見れるような形での

サービス提供が必要であると僕は思います。





現状の「さらしったー」のサービスでは


人の見えないところで、誰にも聞かれないように自分の仲間内々で

陰険な陰口を言う「モラルなき外道」サービスと言われ


それに同調する人間が多いのも仕方の無い事だと思う。



本来、晒すという言葉には「多くの人目に触れるようにする」という意味がある通り。


「晒す」という行為にはそれなりの権限と責任が必要だと思う。
(責任とは誤報時にバンキシャのように謝罪する以上のこと)



そうでなければ

「晒す」という人の人生を左右させたり、人に傷心させてしまう可能性を

十分にもった行為を行う資格は無いのだ。
(さらしったーのように今フォロワー1000わずかほどの弱小サービスでは問題ないが)



それに、一個人がやるべきサービスでもない。

本来Twitterの運営側がこのような仕組みを徹底すべき

事であると思う。
(もうブラックリスト化やアカウントの強制削除等で対策しているので
これ以上は必要ないのだが
)



とにかく、これ以上サービスを続行するのであれば

サービスのあり方や仕組みを変えるべきであると私は思います。

2010年3月1日月曜日

C#で形態素解析をやってみよう!MeCabのススメ

今日はC#で


MeCab


という形態素解析をするライブラリを使って


簡単に形態素解析をする方法を書きます。







まず、MeCab本体をダウンロードしましょう。



SourceForge Mecab 0.98 for MS-Windows Download




そして、インストールします。


文字コードはデフォルトのままで良いでしょう。



次に、MeCab.NETというdllをゲットします。




MeCabDotNet_sample_0_0_0_3.zip Download





これをダウンロード解凍すると

C#のプロジェクトファイルができると思います。


これはサンプルも入ってるのでソースを読めば

もっと詳しい使い方が分かると思います。


その中の

src\MeCabDotNet\bin\Release\MecabDotNet.dll

コピーして、自分のプロジェクトファイルのbinに移動しましょう。



それを






ソリューションエクスプローラーの参照設定右クリック



参照の追加



「参照」タブ



先ほどMeCabDotNet.dllをコピーしたのを選択OKクリック







で参照設定がされたと思います。







あとはコードで書くだけですが、

今回は文章を単語ごとに分解する

いわゆる「わかち解析」という解析に

チャレンジしてみます。







MecabDotNet.Mecab mecab = new MecabDotNet.Mecab("-O wakati");

string mecabed = mecab.mecab_sparse_tostr(/* 分解する文字列 */);

string breakWords[] = mecabed.Split(' ');






はい、終了w

breakWordsに分解された単語が入っています。


引数などを渡した処理を行いたいときは

コンストラクタで渡しましょう。



質問等あればコメントください。

2010年2月25日木曜日

C#でHTML解析をしよう!Serpsを解析して被リンク数を得る関数を作る

C#でHTML解析を


標準の関数で行う方法として有名な方法は



「WebBrowser」コントロールを使う方法が有名ですが

この方法を私はお勧めしません。



理由としては

  • 裏でIEが立ち上がるため、メモリコストが高い

  • 実際に解析を行う部分が、DocumentCompletedイベント内になるので

    同期がとりにくく、コードが汚くなる









では、どうすべきか


私のお勧めは

Html Agility Pack


というライブラリを使用する事です。


ライブラリのインストール部分などは

リンクを参照していただければ、問題ないと思いますので

割愛します。





実際の使用例です

public static int LinkCounter(string url)
{
string q = "link:" + url;
string qurl = getYSTGetQuery(q, 10);

HtmlWeb hw = new HtmlWeb();
HtmlNode n = doc.GetElementbyId("inf");
string inf = n.InnerText;


int infstart = inf.IndexOf("約");
int infEnd = inf.LastIndexOf("件");

int length = infEnd - infstart;
if (length <= 0)
{
//MessageBox.Show(inf);
return 0;
}
string LinkCnt = inf.Substring(infstart+1, length-1);
return int.Parse(LinkCnt.Replace(",", ""));
}



public static string getYSTGetQuery(string keyword, int num)
{
return "http://search.yahoo.co.jp/search?p=" + HttpBeans.UrlEncode(keyword) +
"&n=" + num.ToString() + "&yuragi=on&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8";
}







LinkCounter("http://kgbnblog.blogspot.com")

こんな感じで使えます。



(Serpsは変更されるので、月日が経つとそのままでは使えないかもしれないです。)

2010年2月22日月曜日

Bloggerでtopsyの「この記事についてつぶやくボタン」を強引に設置する方法

もっと良いやり方があるのか知りませんが


私の方法はかなり強引です。




テンプレートを必ずバックアップしておきましょう。



まず、topsyのボタンについてですが


私のブログの右上にあるやつです。

(え…君の右上にはないだって?wそれはトップページには設置してないからさw)




さて、まずボタンのスクリプトの出所ですが。






Topsy Retweet Button for Web Sites


この辺からGETしてください。




次にそこの中から適当な

スクリプトを選ぼう!


私の場合はこれを選びました。


<div style="float: right; margin-left: 1em"><script type="text/javascript">
var topsy_nick = "あなたのTwitterユーザID";
var topsy_style = "big";
</script>
<script type="text/javascript" src="http://cdn.topsy.com/button.js"></script></div>





次に一般的なやり方で


ガジェットの追加から


HTML+JavaScriptを選択
して




何の迷いも無く先ほどのスクリプトを




コピペしてください。



ウィジェットの名前は

「Twitterでこの記事についてつぶやく」

にしておきましょう。



位置を

ブログの投稿の上ぐらいに

配置してください。





ここからが
かなりな力技です。



まず、レイアウト->HTMLの編集から




先ほどの「Twitterでこの記事についてつぶやく」を探してください。


すると

<b:section class='main' id='main' showaddelement='no'>
<b:widget id='HTML2' locked='false' title='Twitterでこの記事についてつぶやく' type='HTML'/>

<b:widget id='Blog1' locked='true' title='ブログの投稿' type='Blog'/>
</b:section>



こんなコードが見つかって欲しい!!!


無ければ空気を読んでやってください。。。





そのコードを下記のように変更してください。



<b:if cond='data:blog.pageType == "item"'>

<b:section class='main' id='twitBlog' showaddelement='no'>
<b:widget id='HTML2' locked='false' title='Twitterでこの記事についてつぶやく' type='HTML'/>
</b:section>

</b:if>

<b:section class='main' id='main' showaddelement='no'>
<b:widget id='Blog1' locked='true' title='ブログの投稿' type='Blog'/>
</b:section>





これで、ほとんどミッションコンプリートです。



後は気に入らない方は

CSS等で調整してください。



今日は大作でした。

2010年2月20日土曜日

C# イベントハンドラに引数を渡す方法「クロージャのやり方」

今日はC#で「クロージャ」という、

「関数を戻り値とする関数」特殊な関数の作り方を書きます。



private void frmMain_Load(object sender, EventArgs e)
{
Button btnTEST = new Button();

btnTEST.Click += eventSet("btnTEST");
this.Controls.Add(btnTEST);
}


private EventHandler eventSet(String str)
{
return delegate(object sender2,EventArgs e2)
{
Button btnSend = sender2 as Button;
btnSend.Text = str + ":クリックされたよ";
};
}



delegateは匿名関数を宣言するときの

予約語です。


データソースを読み込んで、自動で

コントロールを大量に生成しなければならないときなどに

便利だと思います。


(また今日も小ネタですw)

2010年2月18日木曜日

C# スクロールバーの最下部を判定する。

今日も細々したティップスですw



スクロールバーの現在位置が最下部に達したかどうかを

判定するコードです。




private void Form1_Load(object sender, EventArgs e)
{
this.Scroll += new ScrollEventHandler(Form1_Scroll);
this.MouseWheel +=
new MouseEventHandler(Form1_MouseWheel);
}

void Form1_MouseWheel(object sender, MouseEventArgs e)
{
This_Scrolling();
}

void Form1_Scroll(object sender, ScrollEventArgs e)
{
This_Scrolling();
}

private void This_Scrolling()
{
if((this.VerticalScroll.Maximum -
this.VerticalScroll.LargeChange) -
this.VerticalScroll.Value < 0)
{
// 最下部だよ
}
}




this.VerticalScroll.Valueは現在のスクロール位置です。

C# XmlNodeから指定のタグ名の中身を取得する関数


private string
getElementByTagName(XmlNode node, string name)
{
foreach (XmlNode n in node.ChildNodes)
{
if (name.CompareTo(n.Name) == 0)
{
return n.InnerText;
}
}
return null;
}


こんな感じです。
簡単ですが便利です。

2010年2月15日月曜日

ITエンジニアは働かないことが明日の為になる!?

IT技術者は常に




効率的なシステムによる省力化」を

目指して開発を行っていると思う。




でも、ふと思った



エンジニアがフレームワークを開発する







エンジニアがフレームワークによって
効率的な作業環境を手にする。







フレームワークによって
エンジニアの作業が短時間かつ簡単になる
(効率化が実現)







今までの作業が少ない人数で可能になる
(省力化が実現)









エンジニアの仕事が無くなる。







すごく極端な例だけど

可能性としてはありえる事だと思う。


だからこそ、

自分自身で新しい機会を見つけること


がエンジニアにとって重要になると思う。



IT技術者は

仕事をなくすための仕事をすると

僕は思ってます。


だからこそ、

新しいものに貪欲でなければ

自分の首を絞めるのだ


と自警するkgbnでした。

なんだこのブログ

PHPでHTMLの名前をコンテンツ内容から抽出する

面白いコードが出来たので投稿します。


Bloggerの機能でありますが

HTMLの内容から
適切なファイル名を抽出するコードです。


//タイトル
$title = $_POST["art_title"];
//bodyの中身
$html = $_POST["art_content"];

/// html保存名の決定
$striped_content = strip_tags($title." ".$html);
$striped_content = strtolower($striped_content);
$striped_content = str_replace(" ","",$striped_content);


$match = array();
$hit_cnt = preg_match_all('/[a-zA-Z]{3,10}/',$striped_content,$match);


$match[0] = array_merge(array_unique($match[0]));

$first_word = (isset($match[0][0])) ? $match[0][0] : "blog";
$second_word = (isset($match[0][1])) ? $match[0][1] : "article";
$art_id = date("ymdHis").mtime().rand(1,100);

$saveName = "$first_word-$second_word-$art_id.html";



こんな感じです。



形態素解析でやってるわけじゃないので

日本語には対応してません。



あくまで英語単語のみです。



テストを重ねたコードではないので

バグ等あればコメントください!


Bloggerは単語の関連性とかも見て

_(アンダーバー)と-(ハイフン)の使い分けもやってるみたいです。

(僕にはこれが限界ですw)

2010年2月13日土曜日

JSONでPHPからJavaScriptへデータを送る

PHP->JSへ

流行の「JSON」を使って

連想配列のデータを送るコードを紹介します。




なお、今回はjQueryを使っています。




[test.php]
$arr_data = array(
"apple"=>"りんご",
"grape"=>"ぶどう",
"book"=>"本",
"movie"=>"映画");

print json_encode($arr_data);
?>


[javascript]
$(document).ready(function(){
$.ajax({
type: "GET",
url: "./test.php",
success: function(msg)
{
var get_json = eval( "("+msg+")" );
alert(get_json["apple"]);
}
});
}



こんな感じです

SEO YSTとサブドメイン

今日、面白い検証が出来たので投稿します。



20件ほど

YSTの検索結果を1位~100位まで検証してみたところ



サブドメインを使用しているとも思われるサイト

が100位以内に入っている件数は平均

16.4件だった。



そのうち

20位以内に入っているものは

平均3件


この数字を皆さんはどう思うでしょうか?



「サブドメインを切っているサイトの方が少ないからでは?」

いやそんなことはないだろう。



たとえばBloggerやはてなブログなどのブログツール

を使ったブログサイトは

ほとんどサブドメインになる。



そう考えると

サブドメインのサイトが平均して

少ないとは一概にはいえないのではないだろうか…







とにかく確率として




YSTでサイトが100位以内の記事に入れる確率は
16%だということだ





ちなみに、この検証は

スペース区切りの複数ワードなどで検証していないので



特化した記事であれば

上位に入る可能性は高いと思う。

2010年2月12日金曜日

SEO ブログの更新情報をPingで送信してインデックスを増加させよう!

ブログのSEOを考える際に

「Pingを送る」という技があります。



その際にご紹介するのがこちらの



「BlogPingPing」です。





BlogPeople
から会員登録をし、ダウンロードしましょう



会員登録は無料です





次に
Pingの送信先を設定するのですが
沢山あって大変です。


そこで下記をコピーして




[Ping送信先]


[MySite]
URL=TargetURL
TITLE=TargetTitle
TopMost=0
[Ping1]
WBLOGUPDATES=http://www.blogpeople.net/servlet/weblogUpdates
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906517
[Ping2]
WBLOGUPDATES=http://api.my.yahoo.co.jp/RPC2
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906518
[Ping3]
WBLOGUPDATES=http://rpc.reader.livedoor.com/ping
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906518
[Ping4]
WBLOGUPDATES=http://ping.rss.drecom.jp/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1263283782
[Ping5]
WBLOGUPDATES=http://ping.fc2.com
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906519
[Ping6]
WBLOGUPDATES=http://ping.namaan.net/rpc/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906520
[Ping7]
WBLOGUPDATES=http://blog.goo.ne.jp/XMLRPC
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906521
[Ping8]
WBLOGUPDATES=http://www.blogoole.com/ping/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906521
[Ping9]
WBLOGUPDATES=http://www.blogoon.net/ping/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906527
[Ping10]
WBLOGUPDATES=http://blog-search.net/up.php
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906528
[Ping11]
WBLOGUPDATES=http://ping.bloggers.jp/rpc/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906528
[Ping12]
WBLOGUPDATES=http://rpc.weblogs.com/RPC2
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906529
[Ping13]
WBLOGUPDATES=http://rpc.blogrolling.com/pinger/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906531
[Ping14]
WBLOGUPDATES=http://xmlrpc.blogg.de/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906536
[Ping15]
WBLOGUPDATES=http://rpc.pingomatic.com/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906539
[Ping16]
WBLOGUPDATES=http://ping.blo.gs/
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906540
[Ping17]
WBLOGUPDATES=http://blogsearch.google.co.jp/ping/RPC2
URL=TargetURL
TITLE=TargetTitle
ENABLE=1
PINGDATED=1265906540




「Ping.ini」の中身に
貼り付けて




TargetURLをブログのURLに
TargetTitleをブログのタイトルに置換
して
使いましょう。

PHP HTMLをファイル出力する方法

今回はHTMLを「ファイル」として出力する方法を投稿します

define("RENDER_HTML_PATH","./test.html");

$xhtml_render = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" lang="ja">
<head>
<meta name="Content-Language" content="japanese">
<meta equiv="Content-Type" content="text/html; charset=UTF-8">
<meta equiv="Content-Style-Type" content="text/css">
<meta equiv="Content-Script-Type" content="text/javascript">

<title>テストです</title>
</head>
<body>
<h1>テストだよ</h1>
</body>
</html>
XML;

$xhtml_render .= $xhtml_index_bottom;
if( !touch(RENDER_HTML_PATH) )
{
die("ファイル生成エラー");
}


if (!($filePointer = fopen (RENDER_HTML_PATH, "w"))) {
die ("ファイルが開けません。");
}

flock ($filePointer, LOCK_EX);
fputs ($filePointer, $xhtml_render);
flock ($filePointer, LOCK_UN);



SimpleXMLをつかったりDomDocumentを使ったり
いろいろ策はありますが
私はこれが一番お気に入りです。

ブログ始めました。

こんにちはkgbnです。


日頃研究しているWEBの技術を
備忘録的に投稿していく予定です。


これから宜しく御願い致します。