[のだめ開発] 指揮者 conductor の役割とは

のだめカンタービレ – Wikipedia を見ると、原作のほうは2001年から、アニメのほうは2007年から、ということで、TOMOKO NINOMIYA WEBSITE が二ノ宮女史のページ

 

image

 

音楽のオーケストラを、ソフトウェア開発のオーケストレーション(コンピュータ用語では、自動化の意味を示すのだけど、ここでは、本来の意味の Orchestration アンサンブル 管弦楽法 – Wikipedia のほうに意味にあわせる)を考えたときに、以前は「指揮者 Conductor」を「プロジェクトマネージャ project manager」と同値に考えて、「管理者」という言葉の響きからくる「管理する人」「管理される人」という区分を類推してしまい、いまいち…と思っていたのですが、ちょっと思い直して manager とは違う、本来の意味の conductor から、ソフトウェア開発プロセス/チームを考え直してみよう、という企画です。つーか、まぁ、妄想も大いに。

アニメの lession 5 で、S オケで千秋真一君が失敗したのは、コンダクターではなくて、オケを管理しようとしていたから、という解釈をして話を進めていくと、

  • オーケストラのメンバを「支配」しようとうする management をすると、失敗する例

として挙げられる。その後に、シュトレーゼマンが、S オケのメンバをとりなす手法は、ワインバーグの言う「くすぐり」の手法なんだけど、これが conductor の手法のひとつでもあるワケ。これを、そのまま複数名のソフトウェア開発に当てはめると(ウォーターフォールでも、アジャイルでも同じ)、

  • プロジェクトメンバを「支配」しようとする management をすると、失敗する

となる。ただし、これは類推にすぎなくて、実はソフトウェア開発として「支配的」に行う場合もあり得る。「支配的」≒「mission commander と soldier の関係」ということですね。いわゆる「軍隊式」という奴です。「社畜といえども楽しい職場」という言葉がある通り(これはある)、soldier 的に働いている方もいらっしゃるわけで、逆に言えば、何も全てを「アジャイル式」にしなくてもよいし、何も全てを「軍隊式」に仕上げなくても良い。それぞれの company の風土もあれば、mission も様々で、オーケストラが様々なように、オーケストレーション自体も様々、という具合。

…が、ここでは、本来の「オーケストレーション」を目指してみると、

  • プロジェクトメンバを「支配的」に扱うと、そのプロジェクトは失敗する確率が高くなる(ほぼ 100% に近くなる)
  • プロジェクトメンバを「支配的」に扱わないことが、唯一のオーケストレーションの道である。

と結論付けられる。ここで言う「支配的 dominant」を再定義すると、千秋真一君が「俺の言う通りに演奏しろ」から派生させて、

  • 「俺の設計通りに作れ」
  • 「俺のスケジュール通りに進めろ」
  • 「俺のリスク管理は完璧なんだ(俺の感知しないリスクは考えなくていい)」
  • 「俺のワークの分け方 WBS は完璧なんだ」

ってところで「俺様」風が発生してしまうと、アレなわけです。このあたり、しばらくのだめを見続けると、先にももう一つ指揮者コンクールのシーンがあります。

この「俺様」のところ、管理的/支配的(本来の management の意味とは離れるので、commander のほうを充てるのがよいかも)に頭の中の展開を「絶対」にしてしまうところにが「軍隊的」であったりします。いやいや「俺様」自体は実は悪くは無くて、

  • 「俺が考える最高の設計を作った」
  • 「俺が考えるできる限り実現可能なスケジュールを立てた」
  • 「俺の考えるリスク管理だ」
  • 「これは、俺の WBS の分け方だ」

というような、「俺様」カテゴリ内の「事実/製作物」だけ取り出せばよいわけで、それを未知なる現実やプロジェクトメンバとの突合せとしての現実にあわせたときに、そこに出てくるのは conductor の技法なわけです。メンバ自体は、実はばらばらの「理想」を持っている(あるいは「技量」を持っている)ので、それを加味した上で(それは指揮者の技量かもしれず、あるいは現実解なのかもしれず)、全体としてのオーケストラを作り上げて、音楽を作り上げる(観客に聴かせる)という目的を達成するわけです。

これを、ソフトウェア開発の管理者、指揮者、プロジェクトマネージャに引き合わせてみると、理想としての目標あるいは目的、あるいは現実としての目標を掲げると同時に、その「行程」に責任を持つ(あるいは助力する)ということになります。

「行程に対する助力」って何ぞや、というのは次回。

カテゴリー: のだめ開発プロセス | [のだめ開発] 指揮者 conductor の役割とは はコメントを受け付けていません

非同期スクリプトをWordPressに埋め込む

最近海外で流行りのTwitter,Facebook,Google+1,Analyticsをまとめる非同期スクリプトにはてなを加えてみた | ゆっくりと…
http://tokkono.cute.coocan.jp/blog/slow/index.php/xhtmlcss/asynchronous-loading-of-major-social-buttons/

はてな数がアレなので、いまいち躊躇していたのですが、上記のスクリプトを本ブログに埋めてみました。

本当は、適当なプラグインを作って埋め込むとバージョンアップが楽なんですが…まぁ、直接埋め込みということで。埋め込まれているのが、「ツイッター」「はてな」「facebook」で、google+ が外れているのは、google+ を配置すると、何故か改行してしまうからなんですね。後で、並べられるようになったら追記します。

■footer.phpにスクリプトを埋め込む

<script type="text/javascript">
    (function (w, d) {
        //        w._gaq = [["_setAccount", "UA-XXXXXXXX-X"], ["_trackPageview"]];
        //        w.___gcfg = { lang: "ja" };
        var c, e = d.createDocumentFragment(), f = d.getElementsByTagName("script")[0],
    a = function (a, b) {
        if (!d.getElementById(b)) {
            c = d.createElement("script");
            c.src = a; c.id = b || null; c.async = true; e.appendChild(c);
        }
    };
        // a(("https:" == location.protocol ? "//ssl" : "//www") + ".google-analytics.com/ga.js");
        a("https://apis.google.com/js/plusone.js");
        a("//b.st-hatena.com/js/bookmark_button_wo_al.js");
        a("//platform.twitter.com/widgets.js");
        a("//connect.facebook.net/ja_JP/all.js#xfbml=1", "facebook-jssdk");
        f.parentNode.insertBefore(e, f);
    })(this, document);
</script>

</body>
</html>

google analytics は使わないのでコメントアウトして(使う場合は、「UA-XXXXXXXX-X」のところを修正)、body の終了タグの直前に入れます。はてな等のタグを読み込んだ後にスクリプトを動作させるため、読み込み時の一番最後に埋め込む、という具合

■loop-single.php と loop-page.php に埋め込む

何処に埋め込んでもいいのですが、entry-content の直前に入れてあります。

					<div class="entry-meta">
						<?php twentyten_posted_on(); ?>
					</div><!-- .entry-meta -->

<a href="https://twitter.com/share" class="twitter-share-button" data-via="moonmile" data-lang="en">tweet</a>
<a href="http://b.hatena.ne.jp/entry/" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard" title="このエントリーをはてなブックマークに追加"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a>
<div class="fb-like" data-send="false" data-layout="button_count" data-width="450" data-show-faces="false" data-font="arial" style="display:inline;top:-6px" ></div>

					<div class="entry-content">

facebook のいいねボタンは、そのまま使うと div タグで改行してしまうので、「style=”display:inline;top:-6px”」を指定してあります。top で位置をずらしてあるのは、はてなボタンとツイートボタンと同じ位置に合わせるためです。はてなとツイートボタンは iframe なんですが、facebook ボタンは div タグなのが違いかと。多分、テンプレートによって異なると思うので、この値は随時調節。

■loop.php に埋め込み

トップページを開いたときは、loop.php が呼び出されるので、これにも埋め込みます。

			<div class="entry-meta">
				<?php twentyten_posted_on(); ?>
			</div><!-- .entry-meta -->
</p>
<p>
<a href="https://twitter.com/share" class="twitter-share-button" data-via="moonmile" data-lang="en" data-url="<?php the_permalink(); ?>" data-text="<?php the_title(); ?>" >tweet</a>
<a href="http://b.hatena.ne.jp/entry/<?php the_permalink(); ?>" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard" title="このエントリーをはてなブックマークに追加"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a>
<div class="fb-like" data-href="<?php the_permalink(); ?>" data-send="false" data-layout="button_count" data-width="450" data-show-faces="false" data-font="arial" style="display:inline;top:-6px" ></div>
</p>
<p>
	<?php if ( is_archive() || is_search() ) : // Only display excerpts for archives and search. ?>
			<div class="entry-summary">
				<?php the_excerpt(); ?>
			</div><!-- .entry-summary -->
	<?php else : ?>
			<div class="entry-content">
</p>
<p>

記事が複数表示されるので、<?php the_permalink(); ?> を入れて記事のURL(パーマリンク)を指定させます。これをしてしないと、表示されているURLが指定されてしまうのでURLを指定します。

非同期読み込みなので、先に記事が表示されて後からツイートボタン等が表示されます。表示が早くなるのはいいかなと。

でも、ツイートボタンのツイート数って、なんか合わないんですよね…まあ、これはツイッター本家の問題なので、仕方がないかと。

カテゴリー: Javascript, Wordpress | 2件のコメント

moonlight mile 第4巻におけるハーモニーの話を少し

「のだめ開発プロセス」を考えるにあたって、風呂で読んでいたのが、これ。いや、正確には目指して読んでいたわけではないのだけど、目指すものに出会えるという幸運(正確には、「気になっていることだから、目の前にあるものに気づくという現象なんだが)に巡り合うという話を少し。

IT業界に入ると、最新技術への好奇心(僻地探索というかエリート意識とかそういうものも含む)と、ビジネス的にお金周辺のところに悶絶することになるのだが…う~ん、「社畜でありつつも楽しいIT土方」というブログの文言を見て、「人より頭がいいけど、ほどよく働いて程よく給料を貰う公務員の人生」(この人は一般的な公務員だったよ)を思い出してみたりします。IT業界にいると、google とか microsoft とか apple とか facebook のように一発当ててやろう気分の場合もあれば、経済的にはどうでもいいけど兎に角楽しいプログラミング(あるいは巨大プロジェクトを扱うというのも含めて)をしたいという場合もある。その感覚は、交互に襲ってくるのか、それとも片方をあきらめるのか、ということなのですが…数年前から、いくつかのIT系の勉強会から離れてしまっている(今は.NETラボぐらいしか出てない)ので、現状のソフトウェア界隈のモチベーションがどんなのか分かりかねるのですが、ひとまず、twitter で追っている限りは、「世代が違うなぁ」というほどには個々に盛んなようです。

さて、前置きはそれくらいにして、ちょっとハーモニーの話。

ソフトウェア開発プロセスに、建築の比喩を持ち込むのと同じく、音楽の比喩も結構用いられます。オーケストラという比喩や、ハーモニーという比喩もそうです。現実の泥臭い部分(現実が現実であるという部分)を抜きにして、仲間意識なりグループ意識を持ち込むことがあります。ただ先に書いた通り、「現実が現実である部分」があって、それは、上司との関係であったり、納期であったり、顧客との交渉であったり、会社内の組織としてのITプロジェクトと、社外に接することが多いITプロジェクトとは様相が全く違っているわけです。そのあたりを、一緒に扱ってしまうのはどうかなぁ、と常々思っていて、結局のところ「アジャイル」自体も括弧付きに見えてしまったりするのです。

…が、最近思い直したのですが、今の現実に引きずられなければいけないことは全くなく(全くでもないんだが)、自分なりのまだ見ぬ現実を作るのもありかなぁと思ったりしております。それは「幻想」よりも「妄想」に近いことは承知しているのですが、「妄想」すら許されれない現実というのもちょっと嫌かなぁと。つまりは、社会的にスライドするということですよ。

ソフトウェア開発というのは、実は、ひとりで開発もできるという点で比較的漫画家や小説家に近いところがあります、とマスダは結論付けます。と同時に、チーム開発なり分業をするという点で、漫画家やアニメーションと似たところがあります、とマスダは続けます。他の現実とは違うところで、新しい現実(というか社会現象)を構築することは、実は漫画やアニメーションやオーケストラと似たようなところもあり、かつ、「個人のモチベーションに依る」という手法も取れる(当然、個人のモチベーションに依らないという方法もある)、ことも似ています、とマスダはマスダは更に議論を拡げてみたり。

このことを踏まえると、実は、ウォーターフォールなりアジャイルなりという開発プロセスを、別の軸(別の平面という意味で)で見ることもアリで、その中に「ハーモニー」という軸や、「オーケストレーション」(コンダクターや、プレイヤー、ソリスト、協奏曲などなど)のメタファを含めて思考実験するもありなのでしょう。それは、直接的な「ハーモニー」を求めるわけではないけれど、一種シミュレーション的な思考実験という範囲で、ということです。社会の縁の人間としては、あまり現実的なように思えない時もあるのですが、いやいや、軸自体(次元自体)が異なるので、そのあたりは未来に託すとことなのかもしれまんせん。

ハーモニーというのは「協調性」という言葉で表されるので、時において既存の社会/集団に対する協調性を問われることも多いのですが、実は、強烈な個性と強烈な個性があわさるところに生まれるものも「協調性」というものであり、それこそが実はハーモニーの目指すところではないか、と結論づけるわけなんだにゃぁ。わかるかにゃぁ。絶対的な個性というものは、相対的な個性とは違うところにもあるんです、ぎゃぽー。とか。そんな訳で「ハーモニー」なんですよッ!!!

カテゴリー: のだめ開発プロセス | moonlight mile 第4巻におけるハーモニーの話を少し はコメントを受け付けていません

[C#] インターネットから画像をダウンロードしてメモリ上で操作する

ちょっと、技術ネタを放出。

ツイッターのクロールツールを作る中で、プロフィール画像をどうしようかと思っていたのですが、一度ファイルに落とさなくてもプロフィール画像(profile_image_url)をダウンロードしてメモリ上で操作できますよ、という話です。
このテクニック、asp.net mvc の記事を書いていたときに、ASP.NET MVC アプリケーション開発入門: 第 9 回 出力キャッシュの利用 – MSDN サンプル ギャラリー で microsoft の方に教えて頂きました thanx.

// アイコン表示
WebClient cl = new WebClient();
byte[] pic = cl.DownloadData(profile_image_url);
MemoryStream st = new MemoryStream(pic);
pictureBox1.Image = new Bitmap(st);
st.Close();

方法は単純で、WebClient で指定のURLをダウンロードして、byte 配列に入れます。こうすると on memory になるので、MemoryStream を通して、Bitmap に直します。これを PictureBox に代入すれば ok です。
って、簡単に書いていますが、試行錯誤すると結構面倒なもので「ストリームを使ってなんとかできる」ってのを覚えておけば ok です。
C# も java と同じように stream があちこちで使えるようになっているので。

実行するとこんな感じにできます。

ああ、自分のツイートも3,000を超えてしまったので、twitter api だけでは全てを取得できないんですよね。早く google 経由で取ることも考えないと。いくつか見ていくと、2万ツイートを超える方もかなりいるようなので。

カテゴリー: C# | [C#] インターネットから画像をダウンロードしてメモリ上で操作する はコメントを受け付けていません

ソフトウェア開発プロセスとオーケストラの関係(メモ書き)

ちょっとルールを決めてみる。

考察の対象は、ウォーターフォールだったりアジャイルになるんだろうけど、「比較対象」にしないようにしよう。比較対象にしてしまうとと、批判的なことになっていしまうので水掛け論にしかならない(ウォーターフォールだけにw)。なので、実現可能性を求めることにして、実現不可能性のところは、多少オミットする。実現不可能性というのは、悲観的な意見(現実がアレだから、どうにもならないことだから)という悲観的…と言いますか、「実現不可能であることの原因を外部に求めてしまうところ」のことで、所詮、ひとつひとつのプロジェクトは「プロジェクト」であるがゆえに、完全な相似は求められないのだから(だけど、若干の相似性はある。という前提がある)、外部要因も様々、ひるがえって、現実にである内部要因も様々である、ということを認識する。

なので、「なんとなくできたらいいなぁ、夢の開発プロセス」でも ok かと思う。そういう意味では、SF 的に思考実験みたいなもので、それがアジャイル界隈になるのか、逆にウォーターフォール界隈になるのか、スクラムになるのか、統一プロセスになるのかということをカテゴリに含めるのではなく、横軸として考えることにしよう。ワインバーグの本は直接ひも解くと引きずられてしまうので参照程度に。

そうそう、オーケストラとの対比の中で、ベースはのだめカンタービレを用いる第一の理由として「人物に投影すると分かり易いから」というのがある。理論的なところや手順を示しても、なんとなく可能できそうな、可能でなさそうな、スーパーマンを予想してみたりと、人物像が結べなかったりする。ふと、気づいたのが、それってプロセス開発を構築するにあたり「ペルソナ」自体がうまくいっていないでは?と思ったり。いや、発案者自身はわかっているのだが、説明するにあたり、説明を受ける側が像を結べないのではなか、と勘繰ってみたり。なので、その補完をする意味で、多少の揺れ/ぶれは目をつぶるとして焦点が合しやすい「像」を立てておくことは重要だ。それが、「のだめカンタービレ」の登場人物であったりする。

そうそう、他人と何かの認識を合わせることきには、「共通認識(バックグラウンド)」が必要だ。だから、ある程度のバックグラウンドを共有していない相手は、どうやっても認識を合わせることはできない、と最近結論付けている。そうそう、人に「期待」するところはできるだけ小さくしておくのがよく、同時に、インプットとアウトプットの組み合わせを確認することによって、その人が何を考えているのか(あるいは考えていないのか)が分かる、という具合だ。

という訳で、バックグランドで動いていたプロセスも終了したようなので、ひと区切りします。売り文句として「歌うようにプログラミングする」あるいは「歌うように開発をプロセスする」というのを思いついた。当然、「流れるようにコーディングする」へのオマージュである。

カテゴリー: 雑談, のだめ開発プロセス | ソフトウェア開発プロセスとオーケストラの関係(メモ書き) はコメントを受け付けていません

のだめカンタービレに学ぶソフトウェア開発プロセス(音合わせ中)

「のだめカンタービレ」というのは、一斉を風靡した(したのか?)クラッシック・ギャク漫画ですが、ギャグというか正統な音楽漫画なんですけどね。ホントは。

image

実写のほうはさておき…、原作漫画とアニメのほうをベースにして、ソフトウェア開発プロセスを解説/考察していきたいと考えています。実は、ソフトウェア開発組織はオーケストラ:柴田 芳樹 (Yoshiki Shibata):So-netブログ な話で、オーケストラとソフトウェア開発の類似点は考察に値するなぁ、と漠然と考えていた(第10巻ぐらいを読んだあたりで)のですが、アジャイル開発とのバッティングがって思考停止しておりました。

が、最近、ブログテーマ[とある現実な掌握術]|システム開発の見積もりブログ をぽちぽちと書いていて、なるほど真面目にアニメとの組み合わせでソフトウェア開発プロセス自体を考察するのも良いかなと思い始めました。まあ、この「とある現実的な~」の話は、「魔法少女まどか☆マギカ」における建築的考察⑥最終|建築エコノミスト 森山のブログ へのオマージュなんですけどね。森山さんのブログは結構前から見ています。

以前、ソフトウェア開発とオーケストラとの比較しようと考えたときに懸念していたのが、指揮者(コンダクター)がどのくらい「管理的」なことをやるのか、という懸念がありました。管理的、マネジメントという類推から、「アジャイル」よりも「ウォーターフォール開発」に近いのではないか、と思ったりしたものの、昨今「アジャイル」界隈から自分が離れてきて、純粋にソフトウェアを開発するということに集中し始めて、さきほど気が付いたのが、

  • 指揮者(コンダクター)が、イメージを先行させる人であること。
  • デザイナー、設計者、がイメージを固定化させて、目に見えるようにすること(目に見えないような場合もありますが)
  • プレイヤー、クリエイター、デベロッパー、開発者、実装者、が「動く、鳴らす、聴く」に直結するところを担当すること。

という分類(役割分担)もアリなのではないか、という結論に至りました。

いや、結論には至ったのですが「仮定」でしかないので、これを「妄想」も交えて希望的に解いてみようというのが、「のだめカンタービレに学ぶ~」の発送の発端です。

ええ、プロセス名は Nodame Developement Driven 略して、「NoDD」 … じゃんだめだからw、「NodameDD」かなぁ。これは後程考えます。読み物としてぼちぼちアップするということで。

カテゴリー: プロジェクト管理, のだめ開発プロセス | のだめカンタービレに学ぶソフトウェア開発プロセス(音合わせ中) はコメントを受け付けていません

リリースビルド時にNSLogをきれいさっぱり消す方法

でらうま倶楽部 : iPhone リリースビルド時に余計なコードをまとめて省く、Objective-Cなりの書き方。
http://blog.livedoor.jp/tek_nishi/archives/3449727.html

でらうま倶楽部 : Objective-C プロトコルを最短で理解するプログラム例 の記事を参考にさせて頂いたの、御礼がてら。

C言語の定番として、マクロを使うという手がありますね。以前、業務で良く使っていました。

#ifdef _DEBUG
#define NSLOG(_x) NSLog _x
#else
#define NSLOG(_x)
#endif

と定義しておいて、

void Main()
{
	// 通常の実行
	Calc *calc = [Calc alloc];
	int ans = [calc add:10 at:20];
	NSLOG(([NSString stringWithFormat:@"ans: %d", ans ]));

	// nilの場合の実行
	calc = nil;
	ans = [calc add:10 at:20];
	NSLOG(([NSString stringWithFormat:@"ans: %d", ans ]));
}

のようにログを書きます。「NLOG(( … ));」のように、括弧を2重に重ねるのが気持ち悪いですが、こうすると綺麗さっぱり消えます。まあ、ログなので括弧が2重になってもokかなと。
これの派生バージョンで、C++ では、__FILE__, __LINE__ を使って簡易的にログ出力できるようなマクロを組んだりします。

~ 追記

… が、最近の vc++ では、__VA_ARGS__ が使えるんですね。知らんかった。gcc は使えるのですが、昔の vc++ は使えなかったもので。

#ifdef _DEBUG
#define NSLOG(...) NSLog(__VA_ARGS__)
#else
#define NSLOG(...)
#endif

としておいて、

	NSLOG(@”debug message");

とかで十分。

カテゴリー: Objective-C | リリースビルド時にNSLogをきれいさっぱり消す方法 はコメントを受け付けていません

対google 用 SEO ロボットの製作メモ

ちと問題があれば、消すのですが、妄想&メモ書きということで、参考まで。

■前提

google のランキング対策として、キーワードや文章校正、タイトルタグなどの調節があるが、基本「人力」で行われている(と思われる)。それぞれ SEO 会社(あるいは Web サイトの製作会社)のノウハウがあるだろうから、そのあたりは企業秘密ということ、にしておく。

で、まともに人力でSEO対策をしても面白くないし、労力がかかるので(イコール人件費がかかる)SEO 対策自体を「自動化」する。

この「自動化」に際して、いくつかの前提条件(仮定も含む)があって、

  • google のランキングは、ロボットで行われている。
  • ランキング アルゴリズムは、多変数解析に解ける、という仮定をする。

とする。複雑な(実は単純かもしれない)と言われる、google のランキングアルゴリズムを直接解くワケではなく、「多変数解析」として未知ものを解析するように動く、という方法である。

■変数と評価関数

変数は、一般的に言われているものを含めてみる。もちろん、適当な隠れ変数を入れても ok なのだが、HTML タグなどで表しにくいので、表現しやすいものがよい。ただし、「自動化」を目指すので、人力で HTML のタグ打ちや、文章校正をするのではなく、ノウハウ自体を自動化させて、文章自体を自動生成する。

文章の自動生成は、対 google ranking アルゴリズムになる、イコール ロボットとなるので、文章の「文法が正しいかどうか」は問題ならない(と思われる)。人が見たら明らかに「文章ではない」ものであっても、google アルゴリズムに対しては、「ランキングアップに値する文章のようなもの」であれば ok というこだ。

変数の候補としては、

  • キーワードの挿入
  • キーワード同士の近さ
  • キーワードの頻度
  • 被リンクの数
  • 外部リンクへの数
  • 更新頻度
  • HTML 的な正しさ
  • H1 等の利用

となる。被リンクに関しては、後述する、複数のドメインを確保して実験をする。

評価関数は、純粋に google のランキングとなる。ログインをしない様にしてランキングを調べる。商用化する際には、yahoo のランキングも含めるとよいかもしれない。

■検索キーワード

最終目的としては、ビックキーワードと呼ばれる検索キーワード(「化粧品」や「ダイエット」など)での、ランクアップを目指す(自動化でねw)のであるが、最初の試行錯誤としては、2語ぐらいのキーワードの組み合わせがよかろう。

全く、独自のキーワードで実験をすることも可能であるが、実用性が低くなる可能性が高いので、実際のキーワードを使う。

■実験環境

多変数解析と、遺伝子アルゴリズム(単に変数を少し変えて実験を繰り返すという方式)を組み合わせるので、検索対象となる独自ドメインは最低10以上は欲しい。最終的には、100ぐらいのドメインで実験するのがよいのだが、金額的に 1,000円 x 100 = 10万円程度になるので、ちょっと遊びで出すには痛いかなぁと。投資的にはこれぐらいやってもいいんですけどね。

当面は、20 ドメインを取得して評価関数で、上位2,3までを抽出(上位10%を抽出)するのがよかろう。

実験ドメイン自体は、使い捨て(1年で廃棄)なので、gmo で、.com を 480円で取得するか、.info を 180円で大量に買うという方法もある。ただし、.com のほうが、google に有利ではないか(という仮定)があるので…と思ったけど、いいかなぁ、.info でも。

サブドメインを使う方法もあるのだが、google の場合、サブドメインはまとめられてしまう傾向にあるので、独自ドメインで実験をしたい。

お名前.comとロリポップとGoogle Appsで格安サーバ構築 | ひろぶろぐ(Hiro Blog)お名前.comの独自ドメインをロリポップサーバーで使う: アフィリエイトで月10万円計画 僕と『こびっと』とIRCモバイル無料塾の365の物語 にあるように、お名前.com で安いドメインを取得して、ロリポップで運営というのがよさそうだ。そうすると、100 ドメイン使っても、.info の 180円ならば、18,000円で、ずっと経済的である。実際は、ロリポップのチカッパ 月額515円が加わるので、 年間 3万円というところ。ホスティングを別途借りるのは、googleからのアクセス数も含めて、自前のホストには影響を与えたくないから。

さて、これで机上の空論ではないことは確認できたので(金額的に)、ちとアルゴリズムを考えますか。

カテゴリー: 仕事 | 対google 用 SEO ロボットの製作メモ はコメントを受け付けていません

Umbacro 5 をローカル環境で試してみる

一応、ExpressWeb にサイト Verifiable Plan Language を持っているのですが、面倒臭くて wordpress を入れています。慣れているというのもあるのですが、いまいち asp.net 系にするメリットが感じられなかったのです。

が、Umbraco – The open source ASP.NET CMS というのがあって、この ver.5 のほうは、asp.net mvc ベースで書き変えられているということなので、これはいいかなぁと思って、ひとまずローカルの IIS にインストールしてみましょう…ってのインストール記録ですね。

Umbraco 5 の特徴は、

  • ヨーロッパで人気のある CMS である。
  • ver.5 から asp.net mvc ベースになっている(それ以前は、web form)

ブログというよりも、コンテンツを整理してアップ、というの主力みたいですね。エクスプローラーのようにコンテンツを操作できるってのが売りのようです。

 

# ちなみに、現時点では Web Platform Installer を使って入れると、ver.4.7 が入るので、web form ベースのものがインストールされるので注意が必要です。ひとまず簡単にインストールしたい場合は、Umbraco の5分間インストール を参照すると良いです。

■デプロイ版をダウンロード

まずは、ソースをダウンロードします。

image

上の「download」ボタンをクリックして、

image

http://umbraco.codeplex.com/SourceControl/list/changesets へジャンプします。

Download のタブをクリックして、

image

のいずれかをダウロードします。違いがいまいち分からないのですが、以下は、「Umbraco 5.0 WebDeploy Package」のほうで説明します。

ダウンロード後、zip を展開すると、Umbraco というフォルダーができます。

image

この Umbraco フォルダを適当なところにコピーします。

ここでは、「d:\site\Umbraco」にコピーしました。

■IIS で仮想フォルダを設定する

inetpub\wwwroot 以下にコピーしても良いのですが、wwwroot 以下はユーザー権限が違ったりして制限が厳しいので、仮想フォルダを設定します。

IIS マネージャを立ち上げて、仮想ディレクトリの追加

image

名前は「umbraco5」にしておきます。

image

出来上がったフォルダを右クリックして、「アプリケーションへの変換」をしておきます。

image

これで、asp.net が動くようになります(web.configが作られます)。

image

■セットアップの開始

ブラウザで、「http://localhost/umbraco5」にアクセスするか、IIS マネージャで「*:80(http)参照」をクリックします。

image

「Install Umbraco 5.0.0 RTM」をクリックします。(click here も同じ)

image

Lets get started! をクリック

image

データベースを、「SQL Server 2008 R2」にするか、「SQL CE」にするか選択します。

「SQL CE」は、SQL Server Compact Edition の略で、SQLite のようにファイルベースでデータを扱えます。いつもの、asp.net のログインデータが、app_data 内に作られるのと同じデータベースです。

最初は手軽なので、「SQL CE」のほうを使ってみてください。

image

データベースができあがると、100% になります。

そして、「Continue」をクリック

image

管理者ID を入れます。ユーザー名は「admin」のままでもいいですし、適当に変えても OK。

wordpress とかと同じで、後で管理者のユーザーは追加できます。

image

いまのところ、テンプレートはひとつしかないので、このまま Install します。

image

image

Starter kit がインストールされたので、「Continue」をクリック。

image

「preview your new site」をクリックすると、作成したサイトが見れます。

「set up your new website」をクリックすると、管理画面を開きます。

image

サイトの外観

image

管理ページは、admin ユーザーを入れて、ログイン

image

こんな風に、エクスプローラ風にページを増やすことができます。

image

image

 

■Visual Studio で、コードを覗いてみる。

Visual Studio 2010 でサイト(d:\site\Umbraco5 など)を覗いてみます。

「ファイル」→「開く」→「Web サイト」を選択して、

image

「Web サイトを開く」から、該当するフォルダを選択します。

image

すると、なかなか asp.net mvc な感じのフォルダ構成になっていることが分かります。

image

Views/Umbraco/BookPages.cshtml を開くと、Razor で書かれていることが分かります。

image

試しにタイトルとかを変えてみてデバッグ実行してみると、

image

ビルドエラーがでるので…(多分、ASP.NET MVC 4 が入っているためと思われ)

image

直接、ブラウザで url を入力します。

こんな風に、テンプレートを書き換えることが簡単にできます。まぁ、それなりに試行錯誤が必要ですが。

image

■WebMatrix 2 で実行してみる

WebMatirx を使って編集することもできます。

image

この場合は、Run でデバッグ実行するとうまくいくんですけどね。何故か、Visual Studio 2010 ではビルドエラーになる。

image

 

という訳で、ローカル環境のインストールは出来そうという訳で、中身を弄るのは後日。

カテゴリー: 開発, ASP.NET | Umbacro 5 をローカル環境で試してみる はコメントを受け付けていません

アリスはvoid*がお嫌い

久々の「アリプラ」シリーズです(自分も忘れていたよ)。

void*にdeleteしてもデストラクタが呼ばれない!? – かずきのBlog@Hatena
http://d.hatena.ne.jp/okazuki/20120204/1328323854

というのを見つけて、一瞬「?」と思ったのですが、確かにそうですね。delete するときに void* を渡すと型情報が失われる…というか、delete が型情報を判別できないので、メモリとしか解放されなくてデストラクタが呼び出されません、という現象です。

配列を new したときに、「delete [] ポインタ」 で解放しないといけません。ってのと同じ話だと思います。

#include <iostream>
using namespace std;

// アリスクラス
class Alice
{
public:
	Alice() {
		cout << "in constractor" << endl;
	}
	~Alice() {
		cout << "in destractor" << endl;
	}
};

class Person
{
public:
	Person() {
		cout << "in Parson::Parson" << endl;
	}
	virtual ~Person() {
		cout << "in Parson::~Parson" << endl;
	}
};
// ロリータクラスは、Person クラスを継承する
class Lolita : public Person
{
public:
	Lolita() {
		cout << "in Lolita::Lolita" << endl;
	}
	virtual ~Lolita() {
		cout << "in Lolita::~Lolita" << endl;
	}
};

// アリスはvoid*がお嫌い
int main(int argc, char *argv[] )
{
	{
		cout << "自動で解放" << endl;
		Alice alice;
	}

	{
		cout << "自前で解放" << endl;
		Alice *alice = new Alice();
		delete alice;
	}

	{
		cout << "void*で解放" << endl;
		void *alice = new Alice();
		delete alice;
	}

	{
		cout << "継承あり" << endl;
		Lolita *lolita = new Lolita();
		delete lolita;
	}
	{
		cout << "継承あり Person" << endl;
		Person *lolita = new Lolita();
		delete lolita;
	}
	{
		cout << "継承あり void*" << endl;
		void *lolita = new Lolita();
		delete lolita;
	}
	{
		cout << "継承あり void* から Lolita へキャスト" << endl;
		void *lolita = new Lolita();
		delete (Lolita*)lolita;
	}
	{
		cout << "継承あり void* から Person へキャスト" << endl;
		void *lolita = new Lolita();
		delete (Lolita*)lolita;
	}
	return 0;
}

/* 実行結果
D:\work\blog\src\alice>alice015
自動で解放
in constractor
in destractor
自前で解放
in constractor
in destractor
void*で解放
in constractor
継承あり
in Parson::Parson
in Lolita::Lolita
in Lolita::~Lolita
in Parson::~Parson
継承あり Person
in Parson::Parson
in Lolita::Lolita
in Lolita::~Lolita
in Parson::~Parson
継承あり void*
in Parson::Parson
in Lolita::Lolita
継承あり void* から Lolita へキャスト
in Parson::Parson
in Lolita::Lolita
in Lolita::~Lolita
in Parson::~Parson
継承あり void* から Person へキャスト
in Parson::Parson
in Lolita::Lolita
in Lolita::~Lolita
in Parson::~Parson
*/

普通に void* のまま delete してしまうと、デストラクタが呼び出されませんが、delete 時に元の型(Lolita)に戻してやると、正常にデストラクタが呼び出されます。継承元の Person* に戻してもきちんと Lolita のデストラクタが呼び出されるのは、デストラクタが virtual になっているためです。

カテゴリー: C++ | アリスはvoid*がお嫌い はコメントを受け付けていません