GPS携帯でMoblogした場所をGoogle Maps上に表示

auケータイのGPS機能を使うと、写真に位置情報を埋め込むことができます。この情報を利用して、Moblogした場所をGoogle Maps上に表示したら面白いんじゃないかな、と思って作ってみました。

Moblog地図 by Google Maps


調子に乗って、たくさん写真を投稿してしまいましたが、携帯電話からメールを送るだけで、オレオレ地図ができちゃうのは便利。

Ploneの中で動的に位置情報を取り出してプロットするところは、苦労しました。まだ、Ploneの流儀がよく分かっていないので…
それより、もっと苦労したのがIE対応。Firefoxだと普通に動くのに、いざIEで表示してみると「http://yamashita.dyndns.org/gmaps/を開けません。 操作は中断されました」というエラーが表示されてしまいます。 どうも、<head>タグ以外に記述したJavaScriptが実行されるタイミングが、IEはちょっと違うようです。<head>タグの中に初期化スクリプトを書いて、onloadイベントで呼び出せば良いらしいのですが、Plone Portletの中から、<head>タグ内と<body>タグの属性を書き換える方法が分かりませんでした。metal:fill-slotをうまく使えばいいような気はするんですが…

結局、下のように書けばonload時にJavaScriptのhoge関数を実行できることが分かったので、これで逃げました(^^;
window.onload = function hoge() {...}

さよなら、Plone

このサイトをPloneに移行したのは、2004年3月のことでしたから、1年半に渡ってPloneを使ってきたことになります。今までありがとう…

と、言ってもPloneを使うのをやめた訳ではなくて、素のPloneスタイルにおさらばしてイメージチェンジを図ってみました。自己満足だけど、いい感じ。
ちょっとトップのロゴが大きすぎるような気はしますが、しばらく使ってみて邪魔なようだったら、もう少しheightを小さくしようと思います。

GPSケータイでMoblog して地図リンクを表示


アクアラインの海ほたるです。右下に地図サイトへのリンクが表示されます。
auのGPS携帯電話では、写真に位置情報を埋め込むことができます。このデータを利用して地図サイトへのリンクを自動的に表示しています。もう会社に行く時間なので、詳細はまた後で書きます。
最終目標は、Google Mapsと連携すること。

# 「木更津市海ほたる」っていう住所なんだなぁ

Ploneサイトのお手入れな週末

週末は家でPloneとCOREBlogのカスタマイズをしていました。この週末は、「Zope Developers Camp 2005 夏」というZopeのイベントがあったのですが、もともと予定が入っていたので参加できませんでした。でも、その予定がキャンセルになってしまい、免停中なので外出する気力もなく、引き篭もっていたという…
こういう濃いーイベントに一度参加してみたいです。合宿のプレゼンの様子がPodcastで配信されているので、その時のために雰囲気だけでも掴んでおこうと思います。

で、カスタマイズなのですが、大したことはしてなくて細かい所の修正だけです。

・archivesの半年以上前のリンクはセレクトボックスに変更
・LinuxとZaurus関連記事の整理
・はてなブックマーク、del.icio.usへのリンクを追加
・RSS auto-discovery用のタグを追加
・RSSはFeedBurner経由に変更
・カテゴリの整理
・24dのプロフィールを追加

あとは、近いうちにこの素のPloneデザインを何とかしようと思います。

archivesの変更は、具体的には、COREBlogフォルダ内の portlets -> archives 内を次のように変更しました。ループが2回も回るし、日本語直接書き込んでるし、スタイルシートも組み込みで書いちゃってあったりと、突っ込みどころ満載なのですが、とりあえず動いているのでよしとします。Page Templateをもっとキレイに書くにはどうしたら良いのでしょうか…

<h5>Archives</h5>
<div class="portletBody">

<tal:block tal:repeat="obj python:here.month_archive_items(count=200)">

    <span tal:define="global date python:DateTime(obj['year'], obj['month'], 1);" tal:omit-tag="" />
    <div tal:define="oddrow repeat/obj/odd;global idx repeat/obj/index"
         tal:condition="python: idx < 6"
         tal:attributes="class python:test(oddrow, 'portletContent even', 'portletContent odd')">

        <a href=""
           tal:attributes="href string:monthlist_html?year:int=${obj/year}&month:int=${obj/month};">
            <span i18n:translate="" tal:omit-tag="">
                <span i18n:name="monthname">
                <span i18n:translate=""
                      tal:define="monthstring python:date.strftime('%B').capitalize();"
                      tal:content="string:$monthstring"> </span>
                </span>
                <span i18n:name="year"
                      tal:define="year python:date.year()"
                      tal:content="string:$year"
                      tal:attributes="id string:calendar-year-$year;"> </span>
            </span>
        </a>

    </div>

</tal:block>

<form name="archive_jump" style="margin:15px 3px">
    半年以上前の記事
    <select name="url" onChange="location.href=this.url.value">
    <tal:block tal:repeat="obj python:here.month_archive_items(count=200)">
        <span tal:define="global date python:DateTime(obj['year'], obj['month'], 1);global idx repeat/obj/index"
              tal:condition="python: idx >= 6"
              tal:omit-tag="">

        <option value=""
                tal:attributes="value string:monthlist_html?year:int=${obj/year}&month:int=${obj/month};">
            <span i18n:translate="" tal:omit-tag="">
                <span i18n:name="monthname">
                <span i18n:translate=""
                      tal:define="monthstring python:date.strftime('%B').capitalize();"
                      tal:content="string:$monthstring"> </span>
                </span>
                <span i18n:name="year"
                      tal:define="year python:date.year()"
                      tal:content="string:$year"> </span>
            </span>
        </option>
        </span>
    </tal:block>
    </select>
    <input type="button" onClick="location.href=this.form.url.value" value="GO" />
</form>

</div>

9月のアクセスは、82,000PV(ページビュー)

9月のアクセスは、81,691PV(ページビュー)でした。Apacheのログファイル行数ベースだと、328,235です。先月と比べて、10,000PV の増加だから順調な推移です。

分かったことは、1日に何度もエントリすれば、その分だけPVも増えるということ。これは、RSSリーダで閲覧している人が多いからだと思います。PVを簡単に増やすには、本文はほとんど書かなくてもいいから、気になったニュースをどんどん投稿するのが良さそうです。例えば、del.icio.usのブックマークと1行コメントを自動的にエントリするようにすれば、かなり効果がありそうです。del.icio.usサイドバーはやめて、"daily blog posting"を試してみようかな…

関連リンク:
トップブロガーのPageViewを、更に深入りして推定してみる (デジモノに埋もれる日々)

10/5 AppleStore銀座でZopeイベント開催

10/5 AppleStore銀座でZopeイベント開催
日本Zopeユーザ会(JZUG)では、10月5日(水)夜にApple Store銀座にて「Mac OS X + Zopeで構築するイントラBlog/イントラポータル」と題してセミナー形式のイベントを行います。今回は、Mac OS Xにスポットをあて、スモールビジネスや部門内でZopeを利用する方法を紹介します。

イントラブログ、社内ポータルに焦点を合わせていて、一般の人にわかり易い内容で面白そうです。Zopeだったら、複数のブログを立ち上げるのはお手の物ですし。
問題は、アクセスが集中した場合にZopeで耐えられるかどうかなんですが、その辺の話はないんだろうなぁ…

MYCOM PC WEBのPlone記事

「第66回 Zope + CMFのCMS"Plone"を使ってみよう - 導入」
本コラムでは以前、LAMPの代表的なCMSとして「XOOPS」を紹介したが、XOOPSはデータベースの選択肢が基本的にMySQLに限定されていることや、コミュニティサイト向けの作りになっていることから、中規模以上の企業サイトでは適用しづらい面もあるかもしれない。そこで、今回からしばらく、 XOOPSとは一味違ったCMSとして、「Plone」を取り上げてみたい。
だそうです。Mac OSX版のPloneには、"Plone Controller"という管理ツールが付いているんですね。初めて知りました。

関係ないですけど、ZMIと同様の操作ができるEclipseのプラグインが欲しいです。左側にフォルダツリーが表示されて、右側でテンプレートやスキンがいじれるような。

Zope Essentials 1に参加してきました

Zope Essentials 1に参加してきました。
こういうオープンソースなイベントに参加するのって初めてなので、とても刺激的でした。実は、自分以外の人がZMIを使ってるのを見るのは初めてだったりします。基本的にZope初心者向けで、私でもほとんどの内容を理解することができました。

会場は、赤坂のJETRO会議室(←このサイトもZope使ってます)。参加者は30人くらいで、Zope Weekendは100人ぐらい集まるそうなので、それに比べたらリラックスした雰囲気だったのではないでしょうか。
私は調子に乗って懇親会にも参加したのですが、やっぱり会社では得られない情報や周りにはいないような人々に会うことができて、とても有意義でした。帰りもmojixさんと電車が一緒だったのでいろいろな話を聞くことができました。本当に皆さんお疲れ様でした。できれば、次回も参加したいと思います。
1.メインプレゼンテーション

「Zope Starter Guide ~とりあえず、Zopeで普通のサイトを作ってみよう~」 - 清水川さん

 ・マインドマップ(Mind Map)を使ったプレゼンテーション
 ・インストール後の簡単なコンテンツの作り方
 ・Zopeでindex.htmlではなくindex_htmlとするのは、オブジェクト参照のドットと区別するため
 ・ExternalEditorの紹介(JPEGなどの画像も専用のエディタを設定可能)

2.ライトニングトーク

(1)Zopeのプロダクトを使おう - 寺田さん
 ・プロダクトのインストール方法
 ・インスタンスごとにプロダクトを設定可能
 ・全体のProductsよりもインスタンスのProductsが優先

(2)地味ですがロールとセキュリティの概念って大事かも - jackさん
 ・Security = Role + Permission
 ・ProxyRoleの紹介
 ・6/1-3 Linux Conferenceをお手伝いください!

(3)5分でできる!Zopeで掲示板 - mojixさん
 ・たまちゃんBBSという掲示板を5分で作る(実際にはもうちょっとかかってました)
 ・Pythonスクリプトでオブジェクトを動的に生成する
 ・QuickLinks(よく使うオブジェクトタイプを追加しやすくするプロダクト)

(4)川口事務所のサイトをPloneベースでリニューアルしました -川口さん
 ・Plone臭さをなくした
 ・コンテンツパネルというプロダクトを利用
 ・Plone導入コンサルタントを名乗らせて頂きます

(5)Ploneスキンカスタマイズ事例 - zenさん
 ・CSSを使ったカスタマイズ
 ・Plone Skinsのひとつを参考にした

(6)ドキュメンテーションプロジェクト試走中 - 宮本さん
 ・OSC2005の小冊子の紹介
 ・PDFで配布、印刷時にインクをたくさん使わないように配慮

3.ASTERIAの紹介 - 江島さん

 ・CNET Blogの江島さんが飛び入りで参加(サイトの写真より若くて格好よかったです)
 ・「"i love x" programming」で検索すると、Ruby,Pythonは上位に来るという話
 ・処理フローを図で書くだけでWebシステムが構築可能
 ・さっそくZE1に関するエントリを書かれた模様(5/11 6:30追記)

PlonifiedスキンでTrackback URLを表示

「Plonified スキンで Trackback URL が表示されない - Feel Fine!」を見て気が付きました。デフォルトでは、Trackbackがあった時しかTrackback用のURLが表示されないのですね…
これでは困るので、私もTrackback用のURLを表示するようにしてみました。blogトップの一覧画面には表示せずに個々のエントリ画面にだけ表示するようにします。また、通常のCOREBlogサイトと同じように"comments"と"trackbacks"の見出しも追加しました。

1.entry_htmlを修正(赤字の部分を追加)
<!-- Comments -->
<div class="comments-head"><a name="comments"></a>Comments</div>
<div metal:use-macro="here/comment_macros/macros/commentbody"> Comment body </div> <br /> <!-- Trackbacks -->
<div class="comments-head"><a name="trackbacks"></a>Trackbacks</div> <div align="right"> この記事に対するTrackBackのURL: <a href="#" tal:attributes="href entry/tbpingurl" tal:content="entry/tbpingurl"> Trackback URL </a> </div>
<div metal:use-macro="here/trackback_macros/macros/trackbackbody"> Trackback body </div>
<br />
2.style.cssに以下の記述を追加
.comments-head	{
	font-size: small;
	font-weight: bold;
	line-height: 100%;
	margin: 2em 0.5em 1em 0;
	padding-left: 0.2em;
	border-left: 1em solid #000;
	border-bottom: 1px solid #000;
}
以上です。日本語そのまま書いてるし、大した情報じゃないんですが、自分用のメモということで…

COREBlog 1.2に完全移行しました

COREBlog 1.2リリースを受けて、SimpleBlogからCOREBlogに完全に移行しました。

あわせてVirtualHostMonsterを使って、PloneコンテンツをトップURLに持って来ました。今まで、Apacheで提供しているコンテンツが他にいろいろとあったので"/plone/"でアクセスするようにしてたのですが、それらはバーチャルドメインに変更済みなのでそろそろいいかな、と。また、Googleなどから古い日記(SimpleBlog)へアクセスされることも考えて、それらはCOREBlogの方へリダイレクトするようにしました。

COREBlog作者である柴田さんへの感謝の意味も込めて、「日本のZope情報」ポートレットを右側に追加しました(^^)