GCalendar HolidaysのGoogle Calendar API V3対応

(追記)
Wikiの方も更新しました → GoogleカレンダーからJSONPで日本の祝日一覧を取得 – GCalendar Holidays [ゼロと無限の間に]
(追記終わり)

GCalendar Holidaysで使っていたGoogle Calendar API V2が遂に廃止になってしまいました。(かなり前からDeprecatedになっていて、廃止日も告知されていたのですが、気がついたらもう過ぎていました。)

APIのV3はGoogleのAPI KEYが必須になるため、公開されるJavaScriptからのアクセスは難しいです。(API KEY側にIPアドレス制限が設けられるようですが、それはそれで面倒…)

そこで、とりあえずGoogle AppEngine経由で、Google Calendar API V3から取ったにほんの祝日情報をJSONPで返すようにしました。一部の機能(Googleカレンダー公式版の祝日以外の取得、ブラウザ側のキャッシュ)は未実装ですが、とりあえずGoogle Codeにはあげました。自分のサイトの方も、ぼちぼち更新したいとは思います。

Google AppEngine for PHPは便利ですね。使い慣れないPythonで調べながら作るのもそれはそれで楽しいですが、必要に迫られた時は勝手知ったるPHPでできるのが便利です。
Google Cloud SDKなんてのもできたんですね。AppEngine使うだけなら、今までと変わりませんが…

GCalendar Holidaysを「繰り返し」の予定に対応させました

祝日などのGoogleカレンダーの予定をYUI2やjQuery UIのDatepicker上に表示するGCalendar Holidaysですが、Googleカレンダーで「繰り返し」の予定を登録した場合は正しくDatepicker上に表示されないとrainさんから教えてもらいましたので、修正しました。修正後のバージョンは0.5.1です。

GoogleカレンダーからJSONPで日本の祝日一覧を取得 – GCalendar Holidays [ゼロと無限の間に]

また、最近知ったのですが、GCalendar Holidaysで使っているGoogle Calendar API V2って既にDeprecatedで来年で廃止になるみたいですね。じゃあ最新のV3に移行すればよいかというと、V3は認証があるみたいなので、うーん、どうしましょうね。

GCalendar Holidaysを Datepickerの複数カレンダーに対応させました

匿名さんからのコメントで、jQuery UI Datepickerの複数カレンダー(numberOfMonths)の場合にGCalendar Holidaysで1つ目の月しか祝日が表示されないことを教えてもらったので、複数カレンダーでも祝日が表示されるようにアップデートしました。バージョン0.5.0です。

GoogleカレンダーからJSONPで日本の祝日一覧を取得 – GCalendar Holidays [ゼロと無限の間に]

GCalendar Holidaysの更新は久しぶりです。

それにしても、Googleカレンダーの祝日から今年の春分の日が消えているのはなぜだろう。この間まで表示されてた気がするけどなあ…。

Titanium MobileにSQLヘルパーを!

Titanium Mobile用のライブラリPrometheus.jsに、DB(SQLite)を簡単に扱えるSQLヘルパーを追加しました。バージョン0.2.0です。

SQLヘルパーのオブジェクトは、Pr.db(dbName) で取得できます。後はselect()したりinsert()したり、update()、remove()したりしてください。Ti.Database#execute()と同様に、execute()することもできます。
しかも、DatabaseやResutsetのclose()は勝手にやってくれます。(execute()した場合は除く。)

DBアクセサですが、O/RマッパーではなくSQLヘルパーです。

WHERE句の生成は今のところイコール条件しかできませんが、そのうち必要に迫られたら追加します。

Titanium Mobile用のライブラリ、Prometheus.jsを公開しました

iPhoneアプリもAndroidアプリもJavaScriptで手軽に作れるTitanium Mobileをさらに手軽にするライブラリ、Prometheus.jsを公開しました。

Ti.UI.createXxxx()の冗長さが嫌だった(Titaniujm Studioのコード補完を使うことを考えると、子要素のさらに子関数を呼び出すより、直接子関数を呼び出せる方が楽なのです)のと、後々のことを考えて各UIのデザイン設定を一括して変えられるようにしたかったのが主な作成の動機です。

これからもTitanium Mobileを使って行くなら、秘伝の鰻屋のタレのように、このPrometheus.jsに便利機能や備忘録的なTipsや手癖のようなスニペット等々を加えていく、かもしれません。

 

ちなみに、Titanium Mobileに神の火を! – Prometheus.jsのアイキャッチの画像は、無料素材・フリー素材|BEIZ Graphics Webで配布されているものです。カッコイイですね!よく見ていると、そこに人の顔でも浮かんできそうな、不思議な画像です。

Google Maps APIで図形を描くサンプルを追加

少し前にGoogle Maps API (v3)にDrawingライブラリが追加されたので、いつか使うときのためのチュートリアル的メモも兼ねて、Drawingライブラリを使って地図上に色んな図形を描けるサンプルを作ってみました。

Google Mapper V3で長方形や円や自由図形や折れ線を描くサンプルです。

いつものように地図の表示にはGoogle Mapper V3を使っていますが、今回はGoogle Mapperはあんまり関係ないです。

サンプルページで描ける図形の種類は下記の通りです。

  • 長方形
  • 任意の点を頂点とする多角形 (Polygon)
  • 任意の点をつなぐ折れ線 (Polyline)

PolygonとPolylineはGoogle Maps API V2でも編集可能だったのでおなじみです。逆に言うと、やっとV2でできたことがV3でもできるようになったとも言えます。(V2でできてV3でできなかった機能はこれが最後かな?)
Drawingライブラリとしてはこの他にMarkerもサポートしているのですが、Markerは図形とはちょっと違うので今回のサンプルからは除外しました。

Drawingライブラリがやってくれるのは図形の新規追加をしやすくすることだけで、他の編集・削除は自分で書かなくてはいけませんでした。
とはいっても編集はsetEditable()を呼ぶだけ、削除はsetMap()を呼ぶだけなので簡単です。

しかし、1つだけ困ったのはPolygonやPolylineの頂点の削除です。Google Maps API V2でもそうだったのですが、頂点にイベントリスナーを登録できないので、他のものでクリックイベントを拾わなければなりません。
しかも、V2では編集中の頂点に表示される白い四角形で発生したイベントの緯度経度は頂点と同じ値になったのに、V3ではそのような気の利いたことはしてくれないので、閾値を決めてクリックされたのが頂点かどうか判断するような処理を書かなければなりません。(参考:Polygon verteces events – Google Maps JavaScript API v3 | Google グループ
さらに、IE8では大丈夫なのになぜかIE9では白い四角上のイベントをイベントリスナーが拾ってくれませんでした
このあたりはそのうちAPIが改良されるような気もしますが、V3ではPolygon・Polylineの編集機能の実装に時間がかかったこと(そしてその背景としてそもそも需要が少ないのではという推測)を考えると、放置されるような気もします。

なにはともあれ、Googleの中の人にはお疲れ様と言いたいです。お疲れ様!

Pryn 1.0、デビュー。

長い雌伏のバージョン0.2.xの時期を経て、Pryn 1.0をリリースしました。

PrynはJavaScriptとCSSのファイルを1つずつ読み込むだけでWebサイトのユーザービリティを向上させる、つまり「おもてなし」度を上げるツールです。

内容的にはJavaScriptの方はクロスブラウザに特にフォームまわりの使い心地を楽に良くすることを中心に書かれています。それに対してCSSの方は学んできたTipsの集積地という感じです。

最初にこれを作った頃は、JavaScriptのフレームワークはまだPrototype.jsが一番手で、それに対してjQueryがカウンターテーゼとして台頭してきたという頃でした。他にもDojoやMootoolsがコアなファンに後押しされて、JavaScriptライブラリ群雄割拠という感じでした。
そんな状況で、どのフレームワーク/ライブラリにも依存しない、かつどのフレームワーク/ライブラリとも併用できるようなライブラリが欲しくなり、作ったのがこのPryn.js & cssです。
当初はクロスブラウザなイベントリスナーの追加やclass属性の追加・削除、それにいくつかのフォーム部品等のおもてなし向上とYUI2 CSSのインポートとシンプルな内容でしたが、老舗の鰻屋のタレのように、じっくり時間をかけてじわじわ知り得た知識や経験を足していき、旨みを凝縮させました。(忘れないようにメモがわりにしつつ、かつ、実験場にしてきたとも言います。)

なにはともあれ、Pryn.js & css、可愛がってやってください。

JavaScriptのツールをいろいろUpdate(主に微修正)

JavaScriptのツールの細かい点をいろいろ直しました。

変更点は下記のとおりです。ほとんど内部的な修正というかソースを整えただけのものが多いです。動きや表示に影響があるものは太字にしました。

 

GAddress Finder

  • ver. 0.1.2
  • セミコロンを補完した

 

JSONDecoder.js

  • ver. 0.1.2
  • セミコロンを補完した

 

PHP-Manual.css

  • ver. 0.1.4
  • フォントを変更Pryn.cssの成果を取り込んだ)
  • 角丸のFirefoxとWebkitの独自実装形式を削除

 

Universal Colors

  • ver. 0.1.1
  • セミコロンを補完した

 

Yahho Calendar

  • ver. 0.4.6
  • カレンダー表示中にESCキーを押されたら、カレンダーを消すようにした
  • ちょっとリファクタリング

 

Yahho Sticky Footer

  • ver. 0.1.3a
  • bodyの左右のmarginを指定しない(YUIでの指定を上書きしない)ようにした

 

Yahho Suggest

  • ver. 0.1.1a
  • YUIのバージョンは2.x系の最新を使うようにした

 

すっきり。

余談ですが、先日たまたま一休.comを見たら、Yahho Calendarをカスタマイズされたものが使われててびっくりしました。嬉しいやら恥ずかしいやら。オモハユイというやつでしょうか。

Google Mapper V3に現在位置取得機能を追加しました

Google Mapper V3をバージョンアップしました。バージョン0.7.0です。

変更点は、Geolocation APIを使って現在位置を取得できるようにしたことです。
要するにnavigator.geolocation.getCurrentPosition()を呼び出すというのが主な処理なのですが、その前後の面倒そうなことも合わせてやるので、呼び出す側は楽になります。
まあ、どちらかと言えば、Geolocation APIの使い方の覚え書きという側面が強いかも…

主にスマートフォンで使われる機能ですが、PCでも無線LANのあるノートPC等ならまあまあ使えます。(古いIEは使えません。新しいIEは…使えるのですが…残念です。)

でもiPhoneだとgetCurrentPosition()だけでなく、watchPosition()とか使ったりしないとうまく取得できなくてタイムアウトしているようですが、とりあえず今回はそこまで追ってません。

Google Mapper V3をちょっとバージョンアップ(0.6.1)

Google Mapper V3を微修正したました。IEで動かないバグの修正と、load()でGoolge Maps APIのJavaScriptを読み込む場合に位置情報使用有無のパラメータであるsensorを指定できるようにしました。

で、このsensorとtrueにすると、ブラウザが対応していればユーザーの位置情報が取得できます。(Firefoxはデフォルトでは許可を求めてきます。Androidでは設定で位置情報を使えるようにしておく必要があります。)
スマートフォン向けの地図表示などでは需要があるのではないでしょうか。

で、試しに、Google Mapper V3で現在地を取得する動作サンプルを作ってみました。
スマートフォンでGPSを使えばもちろんかなり正確な場所が分かりますが、GPSを使わなくてもGeolocation APIは無線LAN等からある程度場所を特定できます。ノートPCとFirefoxの組み合わせでも、意外に正確な場所が取得できました。興味のある方は上記のサンプルで試してみてください。
(無線LANの使えないPCなどではかなり残念な結果になります…。)

追記:IE(9)では無線LANが使える環境でも残念な結果になってしまいました…