かんたん編集ウェブサイト(ホームページ)WIKIPLUS

0

潮干狩り

Posted by Matthew on 2012/04/08 in 枝幸 |

世界は暖冬化傾向にあったと言われていたけど、今年は寒かったようで、歌登では氷点下30度以下を連発し、日本一寒い町の称号を数度も得たのは記憶に新しい。また、瞬間的な寒さだけではなく、春の訪れもまだまだ遠く、雪が沢山残っており、冬物の上着が手放せず、雪がまだ降るぐらい寒い。ここ最近、去年までなら、3月下旬から、暖気に誘われるように、潮干狩りに出かけ、たくさんアサリを採ったのだが、寒くて行く気がしない。最近の浜をみていると、潮干狩りに来ている人も前年の同時期より遥かに少ない。今年は流氷が浜に長期間残っていたので、アサリの生存率は低いのではないだろうか?調べにいってみよう。あれ、明日は大潮かな?潮見表はどこだ・・・

潮干狩りは干潮時に行くので、潮汐カレンダーと時刻表(潮見表)があると計画を立てやすく、大潮が始まる時間にあわせて始めれば、長い時間楽しめる。潮汐情報を提供するサイトは幾つもあるが、私が最も見やすいと思っている日本の潮汐のをこのブログのガジェットとして加えてみた。また、月ごとのカレンダーはtide736.netのが分かりやすいと思う。枝幸の潮見表もきちんと表示されるスマートフォン向けアプリとして潮汐なびタイドグラフなどがある。タイドグラフは有料で、しかも毎年度ごとに350円課金に最近変更されたようで、レビューをみるとユーザーから不評を買っている。

日本の沿岸ではアサリに対しても漁業権が設定されていることが殆どだが、枝幸の海岸の場合、どうなっているんだろう?藪蛇かもしれないが、調べてみよう。昔は禁止の看板があったし、禁止だが黙認されていると耳にするし。遊魚に関して北海道は関係する地元の漁協に訪ねろといっているから、そうするほかない。

タグ: , ,

0

RustもいいけどJuliaもね

Posted by Matthew on 2012/04/05 in IT |
portablejim_Programming_addictive_sign

Rustについての情報が殆ど無いのに、検索ワード”Rust”の検索結果の上位に表示されるためか、Rustの情報があると期待してこのサイトを訪れる方々がいらっしゃいますが、ごめんなさい。

突然ですが、おそらくRustとは主な適用分野が異なるJuliaなるプログラミング言語も覘いてみて欲しいです。

参考:

  1. なぜ僕らはJuliaを作ったか, 丸井綜研
    • 詳しいです。

タグ: ,

0

数式を表現できるようにしてみた

Posted by Matthew on 2012/04/04 in IT, 備忘録, 数学 |
pi

WP Latexというプラグインをインストールするだけで使えます。画像をつかっているのですが、画像の生成はWordpress.comのサーバを利用します。お手軽になったなぁ。利用できなくなったら、自サーバにも切り替えられるので安心して使っていけます。CSSでイメージの調整もできます。Knuth氏は偉大ですね。

\zeta(s)=1+\frac{1}{2^s}+\frac{1}{3^s}+\frac{1}{4^s}+\dots = \sum_{n=1}^\infty \frac{1}{n^s}

 

タグ: ,

0

ウニ養殖#1

Posted by Matthew on 2012/04/03 in 備忘録, 養殖 |
sea_urchin

水産物、特に棘皮動物の養殖に興味があったので、調べたことを備忘録代わりに書いておくことにした。なんの脈略も無しに、情報を書き連ねていくだけであるが、たまにはまとめることにする。

最初は、ウニの歩留まりについて調べてみた。歩留まり、歩留まり率ぐらいは、何かを製造していれば、分かると思うが、原材料からどれだけの割合で製造物ができるかを示す値である。半導体などに代表される工業製品では不良品を除いた完成品の割合をそう呼んでいるが、食品加工においては食用にできる割合をいう。ウニの場合の歩留まりとは、ウニ全体の重量に対する我々が食べているウニの生殖巣の割合をいう。例えば100gのウニから20gの生殖巣がとれたら歩留まりは20%である。実際には沢山のウニから取り出して歩留まりを計算するのだろうけど。実際の歩留まりはどのくらいだろうか?

これまで、ウニを食べ、生殖巣を取り出した経験からすると、ウニの歩留まりと一口には言えない問題があるように思っていた。水分を多量に含んだ食品によくあることだと思うが、水分量の問題、そして熟成しすぎてまたは放卵・放精しながら溶けていく問題、さらに小さい・切れてる・崩れた生殖巣はそのままでは製品として受け入れられい問題。水産業界・水産加工業界では、こうした問題を考慮して、生殖巣を取り出して直ぐの歩留まりを歩留と呼び、製品としての最終的な歩留まり製品歩留として、どうやら区別しているらしい(参考1)。当然だが、歩留>製品歩留。送り仮名の有り無しはどうでもよいだろう。

さて、実際の歩留・製品歩留はどのくらいなのか?ウニの種類、時期、産地などによるだろうが、私の大好きなエゾバフンウニは、旬の時期には20%の歩留で良好とされ、15%以上の製品歩留となるようだ。敢えて出典を記さない。炭酸カルシウムと石灰からなる内外骨格が重いのだからその程度であろう。

理想的な状態のウニの歩留はどうなるか?あのウニの殻の中にどれだけ生殖巣を詰め込めるのか?その答えを得るには、ウニの年齢と寿命、そして殻の大きさ、生殖巣以外の内臓についても知っておく必要があると思う。エゾバフンウニの場合、餌や環境にもよるが、3-5年でよく目にする大きさの直径4-5cmに成長し、10年ぐらいで寿命を全うするそうである。個人的な経験であるが、直径が5cm以上で6年以上生きていそうなのは、餌が少ないのが原因なのか、たいていは生殖巣が萎んでいて歩留まりを下げる。中には蜜柑の房のような大きな生殖巣を殻の大きさにあわせて発達させた固体もいるが、多くはない。環境がよいところであれば、多いのだろうか。寿命に関しては、環境さえ良ければ、200年ぐらい生きるといっている研究者もいるらしいので(どの種類なのか?これも敢えて出典ださないけど(笑))、甲殻類のように成長し続け、且つ生殖活動も続くのであれば、物理的・経済的な限界を定めてから理想の最大歩留まりを考えたほうがよさそうである(外骨格の生物は巨大化しにくいと思うので限界があるはず)。これについては、公開される研究の成果を待とう。

参考・参照:

  1. エゾバフンウニの歩留及び成熟度調査指導, 北海道利尻地区水産技術普及指導所

 

タグ: ,

0

Google Mapを「ぼうけん」して枝幸までいってみた

Posted by Matthew on 2012/04/01 in IT, 枝幸 |

地名があるだけで、ドラゴンどころかスライムすら居なかった。キラークラブとはいわないけど、せめて軍隊ガニぐらい居て欲しかった。北海道付近では択捉島に何かいますね。

Googleがこれをチョチョイノチョイで作ったのなら、Google Mapに地図の簡略化機能として公開して欲しい。このようなブロック化だけでなく、滑らかな曲線や少ない頂点のポリラインで表現もできるでしょう。

タグ:

0

枝幸の二つ目の島 乙忠部ノ瀬南小島

Posted by Matthew on 2012/03/04 in 枝幸 |
icatch_isle

最近、遠隔にいる知人からIRC某チャンネル上で、枝幸にある「岩」に島としての名称が今年度中に付けられる予定であると知らされた。官邸が発表した『排他的経済水域(EEZ)外縁を根拠付ける離島の地図・海図に記載する名称の決定について』および『名称不明離島の名称決定・地図等への記載について』で確認してみると、「水かぶり岩」と表記されていた岩に「乙忠部ノ瀬南小島」と島の名称がつけられることが確認できる。謂わば課長島耕作のように出世したようなものである(今市おもしろくないな(^^;))。

政府が名称をつけたのは、要するに、我が国に経済的恩恵を与える排他的経済水域などの根拠となる岩や小島を確実に日本の領土とし、管轄下にあることを国内外に知らしめるためである。古地図を捏造し島民を皆殺しにして島を奪い取ろうとする国、終戦のドサクサで奪い取った国、大量の資源に目が眩んで主権を主張する国に囲まれている中では非常に弱々しく映るが、文句が来たら突っぱねればよい。実際、台湾政府外交部からは魚釣島付近の島への命名について抗議がきているようだが、するりと受け流して、何時でも国際司法裁判所で決着つけられるように用意しておいてもらいたい。

今回名前が付けられた枝幸の岩は領海やEEZに大きな変更を加えることにならないだろうが、想定外の軒下を貸して母屋を取られるようなことが起きることを未然に防ぐ第一歩ではあるので、星一つぐらいは評価すべきことである。さて、実際どこにあるのか?乙忠部集落の人々やホタテ漁業に従事している町民なら分かるのだが、島周辺の道路を通ったことがあるだけの町民には認識されていなかったであろう。Google MapsやGoo地図の航空写真では確認できなかったので、国土地理院の地図閲覧サービスで確認してみた:

国土地理院 乙忠部ノ瀬南小島 北緯44度46分40.6秒  東経142度44分17.7秒

まだ「水かぶり岩」と表記されているが、いずれ新しい名称に書き換えられるだろう。国道からおよそ1kmぐらい沖合いにあるようだ。因みに、これまで枝幸町唯一の島であったゴメ島はここにある:

国土地理院 ゴメ島 北緯44度42分2.7秒  東経142度49分53.3秒

因みに、今年度中に名称決定予定の島はこんなにある

平成23年度中に名称決定予定の離島(39島)

参考・参照:

  1. 排他的経済水域等の基礎となる低潮線を有する離島に関する調査 調査報告書, 2012年3月3日閲覧.

 

タグ: ,

0

JSON出力を処理するGoogle Gadgetの作り方#4

Posted by Matthew on 2012/03/03 in IT, 備忘録 |

前回、環境を整えた。今回からやっと本題に入れる。まずは「gadgets.* API デベロッパー ガイド」の「リモートコンテンツの処理」、より本題に近い内容の「フィードの処理」をよく読んで、利用させてもらえばよい。実は、テーマにJSONとあるが、実際はFEEDを読み取るガジェットを作る。FEEDを読み取った後のデータの扱いがJSONなだけなのである。

早速、プログラムを示す。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="Chou Feed Gadget"
  title_url =http://code.google.com/p/chou-feed-gadget/ description = "Mainly, this gadget exstracts titles of an announcement page from a posts.xml feed in a Google site."
author =Matthew / Ken ichi AKIMOTO author_email = screenshot = ""
thumbnail = scrolling =false height = "200">
    <Require feature="dynamic-height"/>
  </ModulePrefs>
  <UserPref name="title" display_name="Title" default_value=""/>
  <UserPref name="show_date" display_name="Show Dates?" datatype="bool" default_value="true"/>
  <UserPref name="num_entries" display_name="Number of Entries:" default_value="5"/>
  <UserPref name="show_summ" display_name="Show Summaries?" datatype="bool" default_value="false"/>
  <UserPref name="feed_url" display_name="Feed URL" default_value="" />
  <UserPref name="japanese" display_name="Japanese Format?" datatype="bool" default_value="true"/>
  <UserPref name="zero_suppress" display_name="Zero Suppress?" datatype="bool" default_value="false" />
  <UserPref name="link_url" display_name="Link URL" default_value="" />
  <Content type="html">
  <![CDATA[
  <style> 
  #content_div { font-size: 80%;  margin: 5px; background-color: transparent;}
  body {background-color: transparent;}
  </style>
  <div id="content_div"></div>
  <script type="text/javascript">

  // Get userprefs
  var prefs = new gadgets.Prefs();
  var title = prefs.getString("title");
  var showdate = prefs.getBool("show_date");
  var entries = prefs.getInt("num_entries");
  var summaries = prefs.getBool("show_summ");
  var feed_url = prefs.getString("feed_url");
  var japanese = prefs.getBool("japanese");
  var link_url = prefs.getString("link_url");
  var zero_suppress = prefs.getBool("zero_suppress");

  function getFeed() {
    var params = {};
    params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.FEED;  
    params[gadgets.io.RequestParameters.NUM_ENTRIES] = new Number(entries);  
    params[gadgets.io.RequestParameters.GET_SUMMARIES] = summaries; 
    gadgets.io.makeRequest(feed_url, response, params);
  };
  
  function getJapaneseFormatDate(date) {
    var html = "";
    html += date.getFullYear() + "年";
    m = date.getMonth() + 1;
    if (!zero_suppress && m < 10) html += "0";
    html += m + "月";
    d = date.getDate();
    if (!zero_suppress && d < 10) html += "0";
    html += d + "日";
    html += " ";
    h = date.getHours();
    if (!zero_suppress && h < 10) html += "0";
    html += h + "時";
    m = date.getMinutes();
    if (!zero_suppress && m < 10) html += "0";
    html += m + "分";
    s = date.getSeconds();
    if (!zero_suppress && s < 10) html += "0";
    html += s + "秒";
    return html;
  };

  function response(obj) { 
    // obj.data contains the feed data
    var feed = obj.data;
    var html = "";

    // Display the feed title and description
    html += "<b>" + title + "</b><br>";
    html += feed.Description + "<br>";
    // Access the data for a given entry
    if (feed.Entry) {
      for (var i = 0; i < feed.Entry.length; i++) {
        //html += "<div>"
        if (showdate==true) 
        { 
          var date = new Date(feed.Entry[i].Date); 
          if (japanese)
          {
            html += getJapaneseFormatDate(date);
          }
          else {
            html += date.toLocaleDateString();
            html += " ";
            html += date.toLocaleTimeString(); 
          }
        }
        html += " ";
        var page_url = feed.Entry[i].Link;
        if (link_url.length > 0) // brush up point
        {
          page_url = link_url + "/" + page_url.split("/").pop();
        }
        html += "<a target='_blank' href='" + page_url + "'>"
             +  feed.Entry[i].Title
             +  "</a> ";
        if (summaries==true) 
        { 
          html += "<br><i>" + feed.Entry[i].Summary + "</i>";
        }
        html += "<br>";
        //html += "</div>";
      }
    }
    document.getElementById('content_div').innerHTML = html;
    gadgets.window.adjustHeight(); // for iGoogle
  };
  gadgets.util.registerOnLoadHandler(getFeed);
  gadgets.window.adjustHeight(); // for Google Site
  </script>
  ]]>
  </Content>
</Module>

3行めから13行目までの<ModulePrefs>セクションは、ガジェットのすべてのメタデータ、機能、処理規則のコンテナ要素として機能し、より詳細には、がジェットのタイトルや作者などの情報を記述しておくところである。詳しくは、「ガジェット XML リファレンス」の「ModulePrefs 要素と属性」を理解して実践するとよい。とりあえず、

  • title
  • title_url
  • description
  • author
ぐらいは記述しておいたほうがよいでしょう。
14行目から21行目まではガジェットを使うユーザーが定義できるパラメータ/変数を定義していて、型とデフォルト値を指定できる。「ユーザー設定」をよく読めば記述できるだろう。
25と26行目でガジェットの背景を透明色に指定している。<div>要素と<body>要素どちらでも指定するとよい。
32-40行で、14-21行でページに貼り付けたときにユーザーが設定した値を読み取っている。設定してない値はデフォルト値を読み取る。
42-48行は、このガジェット独自の関数で、RSSフィードを取得するためにパラメータを設定し、gadgets.io.makeRequest()を使ってリモートにアクセスを実行している。gadgets.io.makeRequest()にはリクエスト後にサーバから返されるレスポンスを処理する関数が指定でき、コールバックしてくれる。
50-70行は日本語年月日時分秒表示のための関数で、Google Apps Script版と同じ関数である。
72-116行はサーバーから返されるレスポンスを処理する関数である。細かくみていこう。
引数objのobj.dataはこのプログラムの場合はJSON形式で渡される。このobj.dataを順にパースしながら情報を取り出していくのだ。JSON形式のデータを取り出すには構造と各フィールドを知っていないといけいない。「フィードの処理」にキチント書いてある。フィードデータ例、JSON形式変換後例があるからわかると思う。今回取り出すのは、
  • Description(本当はガジェットで設定しようと思っているが)
  • Entry
    • Title
    • Link
    • Summary
    • Date
である。構造としてはとても簡単で、1個のDescriptionの他にEntryが何個(デフォルトで最大5個取得)もあり、Entryの数だけTitleなどの取得を繰り返せばよいだけである。
82行目は
for ( var i in feed.Entry ) {
と記述できるはずであるが、サンプルのままにしてみた。

114行目は、最初にGASで作ろうとした特別な差込のための<div>要素をみつけて差込むトリックだ。1行でかけるから簡単だ。

 

115行目と118行目は、表示件数に応じてガジェットの高さ(縦方向の長さ)をジャストフィットさせるためのおまじないみたいなもので、iGoogleとGoogle Sitesでは何かが違うために異なるタイミングで実行させることにした。

 

117行目はこのファイルが読み込まれたときに実行する関数を設定している。

 

あとは、プログラムを読んだらおおよそわかるだろうから説明しない。

気をつけるべきところ

実は、ガジェットのソースを変更してブラウザでリロードしてもその変更は即座に反映されない。ブラウザかiGoogle/Google Sitesのキャッシュ更新タイミングが合わないのか、数分経ってからじゃないと更新されない。テストをして修正しなくてはならなくなり、即座に変更されないからといって慌てないように。iGoogleにはキャッシュをさせない機能がデベロッパーモードにあるので開発中はその機能を利用するとよい。

 

テスト・デバッグ・公開

iGoogleの場合は「ガジェットの追加」ボタンをクリックして、さらに画面左下にある「フィードやガジェットを追加」をクリックし、現れる横に細長いポップアップウィンドウのURL入力欄にガジェットを置いているURLを入力する。今回の場合はGoogle codeのホスティングを利用しているので、raw fileのURLを入力する。raw fileのURLは”Source”->”Browse”画面で”details”の一番したにある”View raw faile”のリンク先である。

Google Sitesの場合は、テストのためのページや、いきなり貼りたいページに、「その他ガジェット」メニューを選択し、URLを指定し、追加ボタンをクリックすればよい。あとは各種設定を行えばよい。

iGoogleもGoogle Sitesも設定した値が個別に保存されている。

 

参照・参考:

  1. ガジェット XML リファレンス, 2012年2月29日閲覧
  2. gadgets.* API デベロッパー ガイド, 2012年2月29日閲覧

 

タグ: , , , , ,

1

JSON出力を処理するGoogle Gadgetの作り方#3

Posted by Matthew on 2012/03/02 in IT, 備忘録 |

前回サーバーサイドで処理させる二つのGAS(実際にはクライアントサイドでも処理しているが)は簡単には使えなかったという結論を経て、やっと本題のGoogle Gadgetを利用するスクリプトを書いてみることにした。

Google Gadgetには色々あるらしいが(要確認)、ウェブページに貼り付けられるもの、例えばiGoogleやGoogle Sitesのページ、自分のウェブサイトのページに貼り付けられるものを作る。作り方はエディタや配布方法などによって幾つかに分かれるので、最も実践的で大掛かりな方法を敢えて選ぶことにした。Google Gadgets Editor(GGE)でプレビューを見ながらコーディングし、そのままGoogleシステム内に置いたり、自分のウェブサーバにアクセスできるファイルとして置いておくだけでもよいが、後でこのシリーズとは別に備忘録を作るが、バージョン管理やグループ(メーリングリスト)の使い方も知りたかったので、Google codeを利用することにした。また、既にGoogle code上に日本語化された有益なサンプルスクリプト付きのオンラインドキュメントが用意されているので、大いに参考にした(参照1)。

1. プロジェクトを管理するシステムを準備する。

誰でも利用できるガジェットは最終的には公開し、公開したものをiGoogleなどのディレクトリに登録する必要があるので、どこかの公開ウェブサーバなどに置いておかなくてはならない。今回はGGEからのガジェットの公開ではなく、Google codeでのホスティングを利用するので、Google codeが使えるようにしておく。GMailやGoogle+などを利用してれば、若干の登録作業が必要になるかもしれないが、すぐに利用できるはずなので省略する(どこかに詳しいドキュメントがあるはず)。GMailがない場合は、GMailから登録すべし。

Google Codeのホスティングが利用できる状態になったら、Google Codeのホスティングのページに行って、プロジェクトを登録する。登録の仕方はすでに紹介したドキュメント(参照1)に日本語で詳しく書かれているのでその通りにやればよい。私の今回のプロジェクトの場合は次のようにしてみた。説明などは日本語で書いても良さそうなものだが、一応拙い英語で書いておいた。英語に間違いがあっても問題はないのでテケトーに何か書いておいたらよい。登録後に何回でも修正できる。

  • プロジェクト名:”chou-feed-gadget”としておいた。抽出の抽を北京語読みすると”chou”らしい。変更できないので、注意。プロジェクト自体を削除しても29日間は同じ名前のプロジェクトは作成されない。これは29日間は削除したプロジェクトをさせる機能があるため。リポジトリのリセットにはこのような制限はない。
  • 概要:てけとー、一応 “An Google Gadget extracting RSS feed infomation from Google Sites announcements” としておいた。
  • 説明:てけとー、一応 “This gadget extracts title, date or/and data from Google Sites announcement RSS feed(aka posts.xls), then show them.” としておいた。(英語おかしいと思うけど(汗))。
  • バージョンコントロールシステム:”subversion”とした。後から変更可能だが、リポジトリはどうなるのだろう?(要調査)実は手軽にちょっとしたソースをおいておくにはGoogle codeの場合はsubversionが一番適切だと思うから(理由は後ほど)。
  • ライセンス:”MIT License”としておいた。変更可能だ。
  • ラベル:”Gadget” と “JavaScript” を指定。

2. プログラムソースをプロジェクトを管理するシステム上で作成する。

登録できたら、Google codeにホスティングしてもらえるわけだが、通常ファイルを置くにはバージョン管理ソフトウェアを使ってコミット/プッシュしないといけない。でもそれではちょっとしたプログラムソース置くだけなら手間がかかりすぎることもある。実は、Google codeではブラウザ上でファイルを作成したりアップロードしたりすることが可能となっている。しかし、バージョン管理システム(VCS)にgitを選択した場合、初期状態ではそれができないようになっている。このことがプロジェクトを作成するときに”subversiono”を選択した理由である。実際、gitを選らび、できたばかりのプロジェクトサイトで、メニューにある”Source”クリックし、さらに”Browse”をクリックしてソースツリーをみるとファイル作成・アップロードの作業のためのリンクは表示されない。他の二つのVCSのうち、mercurialは表示こそされないものの初めからファイルの作成・アップロードは可能であり、subversionは最初からファイルの作成とアップロードのリンクが表示される。
ブラウザ上でファイルを作成するには、mercurialの場合、直接URLを指定してソースファイルを作成する。例えば、”Browse”で表示させたgitのソースツリーのURLが次のようになっていたら、
次のように

“browse”のところを”create”に書き換えてアクセスするとファイル編集ページが現れる(図1)。

一方、subversionの場合は”browse”メニューを実行すると”Create or upload a new file”とリンクついた文字列が表示されて、”Create”のリンクをクリックすればよい。

図1:Google code ホスティングサイト上でソースを作成

図1:Google code ホスティングサイト上でソースを作成

上の図を参考にして欲しいが、数字が並んでいることろがソース編集テキストエリアである。ここに文章やソースコードを記述する。とりあえずリポジトリのルートディレクトリにソース/プログラムファイルを置くので、”Path”はそのままでよい。”Branch”はないのでそのまま。”Commit Log”には適切な文言を入れておく。最初なので”initial commit”でよいだろう。あとは”Commit”ボタンを押下するだけだ。

続く

参照:

  1. gadgets.* API デベロッパー ガイド, 2012年2月10日閲覧.

タグ: , , , , , , , ,

0

咲来峠の山スキー

Posted by Matthew on 2012/02/28 in 枝幸 |

枝幸町と音威子府村の境界付近に咲来峠がありますが、冬期間にとおりますと、誰も乗っていない自動車と山の斜面にシュプールを見かけることがあります。事情通の某ダイニングバーの店主さんによると、山スキーを楽しんでいる人達がいるようです。次のような動画もありました。

YouTube Preview Image

このあたりでしょうか?

44.702826,142.328653

 

 

 

タグ:

1

JSON出力を処理するGoogle Gadgetの作り方#2

Posted by Matthew on 2012/02/27 in IT, 備忘録 |

前回に引き続きガジェットについて備忘録を記しておく。今度はウィジットを利用するGASについて記しておく。前回の差し込み版と違うのはdoGet()だけである。

var MAIL = "matthew@hoge.tld";
var DEBUG_MAIL_SUBJECT = "【DEBUG】最新のお知らせ";
var FEED_URL = "http://www.hoge.tld/info/posts.xml";
var LINK_URL = "http://www.hoge.tld/info";
var SITE_NAMESPACE_URL = "http://schemas.google.com/sites/2008";
var TITLE = "お知らせ";
var zero_suppress = false;
var japanese_date_format = true;

function getJapaneseFormatDate( date ) {
  var html = "";
  html += date.getFullYear() + "年";
  var m = date.getMonth() + 1;
  if ( !zero_suppress && m < 10 ) html += "0";
  html += m + "月";
  var d = date.getDate();
  if ( !zero_suppress && d < 10 ) html += "0";
  html += d + "日";
  html += " ";
  var h = date.getHours();
  if ( !zero_suppress && h < 10 ) html += "0";
  html += h + "時";
  m = date.getMinutes();
  if ( !zero_suppress && m < 10 ) html += "0";
  html += m + "分";
  var s = date.getSeconds();
  if ( !zero_suppress && s < 10 ) html += "0";
  html += s + "秒";
  return html;
};

function makeSummary( url ) {
  var summaries = [];
  var doc = Xml.parse( UrlFetchApp.fetch( url ).getContentText() );
  // title of the feed
  var entries = doc.getElement().getElements( "entry" );
  for ( var entry in entries ) {
    // date of a entry
    var date = new Date( entries[entry].getElement( "published" ).getText() );
    if ( japanese_date_format ) {
      date = getJapaneseFormatDate( date );
    }
    // link and title of a entry
    var link = LINK_URL + "/" + entries[ entry ].getElement( SITE_NAMESPACE_URL, "pageName" ).getText();
    var title = entries[ entry ].getElement( "title" ).getText();
    summaries.push([date, title, link]);
  }
  return summaries;
}

function debug() {
  var content = makeSummary( FEED_URL );
  Logger.log( content );
  MailApp.sendEmail( MAIL, DEBUG_MAIL_SUBJECT, Logger.getLog() );
}

function doGet(e) {
  var app = UiApp.createApplication();
  app.setStyleAttribute("backgroundColor", "transparent");
  var summaries = makeSummary( FEED_URL );
  for ( var entry in summaries ) {
    var h_panel = app.createHorizontalPanel();
    h_panel.setStyleAttribute("backgroundColor", "transparent");
    var date = app.createLabel( summaries[entry][0] );
    var title = app.createAnchor( summaries[entry][1], summaries[entry][2] );
    h_panel.add(date);
    h_panel.add(title);
    h_panel.setSpacing(1);
    app.add(h_panel);
  }
  return app;
}

doGet()内で、UiAppのcreateApplication()を使ってUiIinstace型のインスタンスの属性値を変更したり、インスタンスにウィジットのパネルやラベルを追加して、最後にインスタンスのポインタを返すとウェブサーバとブラウザでよろしくやってくれるようになっている。今回はウィジットのインスタンスを横に並べるパネルに、日付を表示するラベルとリンクを張るアンカーを追加した。背景色を変更したかったのだが、どうしてもできなかった。スタイルシートをとことんイジルと変更できそうなのだが、各インスタンスに対して属性を変更するsetStyleAttribute()で背景色に透明を指定しても白色のままであった。これ以外の方法で設定するのであればおそらく面倒くさいのではないかと想像する。

ウィジットを利用したとき、ページで利用されているスタイルシートを利用させたいのだが、どうやら利用していないようである。この課題についても調べたかったのであるが、背景色を簡単に変更できなかったのでこれ以上の調査を中止して、別の方法を考えた。それがクライアントサイドで処理させるGoogle Gadgetを利用する方法である(つづく)。

 

タグ: , ,

かんたん編集ウェブサイト(ホームページ)WIKIPLUS

Copyright © 2011-2012 Matthew's Blog All rights reserved.
This site is using the Desk Mess Mirrored Custom Child-Theme, v1.0, on top of
the Parent-Theme Desk Mess Mirrored, v2.0.2, from BuyNowShop.com.