それ、うまいのか?

... 記憶の残滓

完璧なクリスマスツリーの方程式

2015年12月8日の「あさイチ」でやっていたクリスマスの方程式。
https://www.nhk.or.jp/asaichi/2015/12/08/01.html

ネタはイギリスはサウス・ヨークシャー州のシェフィールド大学から。
https://www.shef.ac.uk/news/nr/debenhams-christmas-tree-formula-1.227810

日付が 12 December 2014 となってるけど、どうやら更新日が表示されているらしく、最初は 28 November 2012 の公開。
http://web.archive.org/web/20121205010244/http://www.shef.ac.uk/news/nr/debenhams-christmas-tree-formula-1.227810

連絡先が変わった、とかでのメンテナンスか、式の内容は変わっていないものの、作った二人の学生の名前が消されてしまっているのが何とも。

Students Nicole Wrightham and Alex Craig, both aged 20, from the University of Sheffield, created the formulas.

# 敢えてか?

TeX で書いたであろう数式はドットが粗く、掛け算の記号に x (エックス) を使ってる上に、それがイタリックになっている箇所もあるものだから非常に見づらい。

h:ツリーの高さ(cm)

飾りの数 = \frac{\sqrt {17}}{20} h

星の大きさ = \frac{h}{10}

モールの長さ = \frac{13 \pi}{8} h

電飾の長さ = \pi h

数式っぽくするのにルートとか使ってるけど、ソースの方が計算式としては分かりやすい。

function calculate() {

  var height = parseInt($("#treeHeight").val(), 0);
  if (isNaN(height)) {
    return;
  }

  var baubles = 0.206155281280883 * height;     // 飾りの数
  $("#baubles").text(Math.round(baubles));

  var fairy = height / 10;                      // 星の大きさ
  $("#fairy").text(Math.round(fairy));

  var tinsel = 5.10508806208341 * height;       // モールの長さ
  $("#tinsel").text(Math.round(tinsel));

  var lights = 3.14159265358979 * height;       // 電飾の長さ
  $("#lights").text(Math.round(lights));

}

でも、これは立体のツリーの方程式だから、壁にテープを貼ったツリーだと大体半分にはならないとダメなんじゃないだろうか(天辺の星を除く)*1
ねえ、いのっち。髭とか、こだわるところはそこじゃないでしょう。

そういえば、モミの木の天辺の角度って、一定(ある範囲に収まる数値)なのかな。

Nicole said: “The formulas took us about two hours to complete. We hope the formulas will play a part in making Christmas that little bit easier for everyone."

http://web.archive.org/web/20121205010244/http://www.shef.ac.uk/news/nr/debenhams-christmas-tree-formula-1.227810

ニコル君、2時間で作っちゃったのか。

h の一次式になってるのはおかしいだろうとツッコミを入れた人は、当然 居る。


Number of baubles = \sigma \hspace{5} \pi \hspace{5} r \hspace{5} \sqrt {r^2 + h^2}

 ...

If there is a unique relation between r and h, we would only have to measure the height. To check this relation, I used Google image search to find pictures of real (Dutch) Christmas trees, and measured the r/h ratio. The pictures where filtered by hand on the tree being full frontal and not blocked by presents. I did not take into account the different species of Christmas trees. Averaged over 33 pictures, the (half) opening angle α of a Christmas tree equals 21 ± 4°, so r = h tan(21 ± 4°) = h (0.38 ± 0.08).

https://sites.google.com/site/calculatinghistory/home/christmas-tree-formulas

電飾だって巻き方によるだろうとか、計算尺(Slide Rule)で計算できるだとか、理系がこだわると、まあしつこいな :-)

*1:半分にしてた >「番組では数学者の桜井進さんに、この方程式を、平面であるウォールツリーにも当てはまるようにアレンジして、簡単にできる計算式を考えてもらったところ、ツリーの高さの10分の1が、ウォールツリーの場合の丁度よい飾りの数ということになりました。」

シート名の自動設定 @Google Spread Sheet

お題

googleスプレッドシートの質問です。

シートが1~31まであるのですが、各シートのA1に日付(1/1月曜日)を入力すると、各シート名が自動的に先程、入力した日付になる、という事は出来るのでしょうか?

googleスプレッドシートの質問です。 シートが1~31まであるので… - 人力検索はてな

Google Spread Sheet についての質問。

迷える子羊たちよ……

スクリプトが必要ならそのコードも教えていただきたいです。
依頼ならプログラム制作会社に頼むと良いですよ。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10152947550#a375906621

という「サービス、探しています」カテゴリのマスターから素晴らしい回答がついた後、人力検索の匿名質問を経て、通常質問へ。

相手してくれないと拗ねるよ

Google Apps Script は、知ってても損にはならないんだろうなあ、とは思う。
匿名質問はスルーしたけど、通常質問なら調べてみても良いかな、と。
日付だったら文字列で設定しているわけはないよなあ、とは思いながら、回答はちょっと手抜き :-p

一応、こんな回答の用意はしていた。

function myEdit(event){
    var sheet = event.source.getActiveSheet();
    var d = new Date(sheet.getRange("A1").getValue());
    var formattedDate = Utilities.formatDate(d, "JST", "MM/dd EEE");
    sheet.setName(formattedDate);
}

値の取得は、value プロパティではなく、getValue() メソッドなのだ。
https://developers.google.com/apps-script/reference/spreadsheet/range

そのシートのスクリプト、なの?

メニューの「ツール」から「スクリプトエディタ」を選ぶと、別タブでスクリプトエディタが起動する。
ドメインのツールとして立ち上がってくる。
プロジェクトとか、ファイルの名前とか、関係がよく分からない。
スクリプトエディタを起動したシートを閉じると、スクリプトエディタのタブも閉じるし、別のシートを開いてみると、先ほど作成したスクリプトは表示されないので、紐づけはされているっぽい。

というようなことは、ここに書いてある。
https://developers.google.com/apps-script/guides/bound

Simple Triggers と Installable Triggers

VBA でいうところのイベントは、Google Apps Script では Trigger という。
二種類の実装があって、Simple Trigger というのは特定の名前で関数を作っておけば勝手に呼び出してくれるというもの。VBAイベントハンドラと同じタイプ。
まずは Simple Triggers を試してみたものの、起動がかかっていない気がする(それとも、エラーが出てるの?)。
よく分からないので、Installable Triggers という方も使ってみた。

メニューの「リソース」から「現在のプロジェクトのトリガー」を選択して、トリガーを登録。
関数 myEdit を、イベントの「スプレッドシートから」と「値の変更」を選択して「保存」。
実行の許可を求めてくるので、画面にしたがって実行を許可。

一応動いたんだけど、動かなくなったり、また動いたり。
どうやら、トリガーの一覧から修正をかけると、起動がかからなくなるみたいだ。

  • スクリプトの関数名を変更。一覧から関数を選択し直す → 駄目
  • トリガーの種類を「値の変更」から「編集時」に変更 → 駄目

トリガーをいったん削除して、もう一度登録し直すと起動がかかるようになる。

後、コードを編集すると「ファイルの保存」をしないと反映されない。
普通にエディタを使ってるのと同じと言えば同じなのだけれど、スプレッドシートは逐一保存されるし、VBAスクリプトエディタのイメージで使ってると、つい。

などという軽めの地雷があるのだけど、質問者はその辺りは自己解決できるらしい。
# 質問しなくても、解決できたんじゃね?

関連するリファレンスは、この辺り。
https://developers.google.com/apps-script/guides/triggers/
https://developers.google.com/apps-script/guides/triggers/installable

曜日の日本語表示

ライブラリの Utilities クラスの formatDate メソッド。書式の指定は java の SimpleDateFormat のものが使える。
https://developers.google.com/apps-script/reference/utilities/utilities#formatDate%28Date,String,String%29
https://docs.oracle.com/javase/jp/6/api/java/text/SimpleDateFormat.html

java の SimpleDateFormat の E(曜日のテキスト)はロケールを考慮してくれるのだけれど、Google Apps Script では英語表記オンリーっぽい。
stackoverflow には、こんな質問が。自分で文字列に置き換えるしかないのか、やっぱり。
http://stackoverflow.com/questions/20051445/how-can-i-have-the-date-in-french-locale

ちなみに、タイムゾーンは固定で書かなくても、SpreadsheetApp.getActive().getSpreadsheetTimeZone() で取れるらしい。
http://stackoverflow.com/questions/18596933/google-apps-script-formatdate-using-users-time-zone-instead-of-gmt

シート状の表示がそのまま取れる方法がないかな、と思ったのだけれど、こちらも見つからず orz

表示形式の指定って分かりにくい

質問にあった日付の表記は「カスタム表示形式」を使っているんだろう。
これが、スプレッドシートの操作がちょっと分かりにくい。

メニューの「表示形式」から「数字」→「表示形式の設定」→「カスタム数値形式」ときて、

m"/"d"("dddd")"

と設定する。
「その他の日付や時刻の形式」であれば、書式文字を知らなくてもある程度対話的に設定できる。

Excel では曜日の指定が、ddd と dddd が英語表記で、aaa と aaaa が日本語表記だったけど、スプレッドシートは表示言語での自動切り替えで ddd と dddd しか受け付けてくれない。

とりあえず、締め

デバッグの仕方だとか、アドインとか、まだ色々ありそうだけど、とりあえず お腹がいっぱいになったので、ここまで。



エラーがあると、一日 遅れてメールとか来るのね。
console が未定義とか。
javascript かと思ってたら、サーバサイドで解釈されるのか(多分)。

2015年間ランキング

今月は残れそうだピ

年間は残れるか、微妙だピ。ここまで来たら残りたいピ。

2015-09-28 - 野鳥pogpiの日記

というようなことを書いている人がいたので、ちょっと調べてみた。
# 以下、敬称略

2015-9-28 23:30 ころまでの集計。

rank id BA BA (Aug-) comment BA (maybe)
1 a-kuma3 202 54   283
2 NAPORIN 99 18   126
3 alfa-gadget 49 0 退場した 49
4 rafting 48 0 利用停止 48
5 miharaseihyou 38 11   54
6 MIYADO 38 11   54
7 gizmo5 35 2   38
8 tea_cup 29 5   36
9 NazeNani 29 0 多分、回答しない 29
10 dilutionist 26 5   33
11 jwrekitan 25 0   25
12 psne 25 8   37
13 TransFreeBSD 22 9   35
14 MEI-ZA-YU 21 3   25
15 dev2 21 5 多分、回答しない 21
16 fatena 20 0 多分、回答しない 20
17 pente40 19 1 極端に流量減 19
18 pogpi 16 4   22
19 Yacky 16 4   22
20 must-ard 16 3   20
21 jan8 15 3   19
22 libros 13 1   14
23 taknt 12 2   15
24 mugihika 11 0 利用停止 11
25 fiwa 11 3   15
26 cubick 11 2   14
27 e_p_i 11 0 利用停止 11
28 JULY 10 1   11
29 rsc96074 10 2   13
30 blue_star22 10 0 利用停止 10
31 takejin 9 1   10
32 studiocherry 8 3   12
33 Gleam 8 3   12
34 karuishi 8 3   12
35 mododemonandato 7 1   8
36 zzman 7 0   7
37 syamaoka 7 0   7
38 language_and_engineering 6 2   9
39 schwnnn 6 5 多分、回答しない 6
40 rouge_2008 6 0   6
41 ceramic-cups 6 0   6
42 yoneto164 5 1   6
43 adgt 5 0 多分、回答しない 5
44 adlib 5 2   8
45 Lhankor_Mhy 5 0   5
46 sibazyun 5 1   6
47 hi_ro-o 5 0   5
48 yokosasa 5 1   6
49 degucho 4 2   7
50 benitenngu 4 0   4

質問一覧からたどれる質問の BA の数など。
つまり非公開になったのや、コレナニ?なんかは対象外。匿名も集計できん。
「BA (Aug-)」は、Amazon ギフト券への交換が廃止になった 8月以降の BA の数。
換金目当てなユーザは、きっちり離脱したよう(約一名を除く)なので、そのコメント (comment) と、この 2ヶ月のペースで BA を取り続けた場合の 2015年通しての推定 BA 数 (BA (maybe))。

2015年の推定 BA 数で並べ替えた、推定ランキングがこちら。

rank id BA (maybe)
1 a-kuma3 283
2 NAPORIN 126
3 miharaseihyou 54
4 MIYADO 54
5 alfa-gadget 49
6 rafting 48
7 gizmo5 38
8 psne 37
9 tea_cup 36
10 TransFreeBSD 35
11 dilutionist 33
12 NazeNani 29
13 jwrekitan 25
14 MEI-ZA-YU 25
15 pogpi 22
16 Yacky 22
17 dev2 21
18 fatena 20
19 must-ard 20
20 pente40 19
21 jan8 19
22 taknt 15
23 fiwa 15
24 libros 14
25 cubick 14
26 rsc96074 13
27 studiocherry 12
28 Gleam 12
29 karuishi 12
30 mugihika 11

これに匿名質問の BA が加算される。


さて、順位が気になってる pogpi ちゃんの近辺。

rank id BA (maybe) diff
15 pogpi 22  
16 Yacky 22 0
17 dev2 21 ×
18 fatena 20 ×
19 must-ard 20 2
20 pente40 19 ×
21 jan8 19 3
22 taknt 15 7
23 fiwa 15 7
24 libros 14 8
25 cubick 14 8
26 rsc96074 13 9
27 studiocherry 12 10
28 Gleam 12 10
29 karuishi 12 10
30 mugihika 11 ×



pogpi ちゃんの推定順位は、第15位。
つまり、6人に抜かれない限りはランキングに残ることができる。

No.17: dev2、No.18: fatena の両名は換金目的の比重が大きかったらしく、投稿が途絶えてるので抜かれる心配はない。
No.20: pente40 も換金目的なのは明らかだが、思い出したように投稿してる。でも、回答の精度から察するに抜かれることはあるまい。

No.16: Yacky と No.19: must-ard は、プリキュアの質問にしか答えてないが、圏外: meteo と 3名で BA を取り合っているので、毎週投稿されるプリキュア質問で BA が偏ると、どちらかに抜かれる可能性は否めない。だが、両名に抜かれることはないだろうということは間違いない。
片方に抜かれる、と想定しても、残り 5名。

ここで、重要なのは集計の対象外になっている「匿名質問」。

No.21: jan8 は、最近 投稿数が減っているけれど、投稿の姿勢からいって匿名にも回答しているはず。
3 の差は少ない。
抜かれる可能性はある。

No.22: taknt は、一時期は通算でトップの座にいた方だけど、最近は投稿数が極端に減っている。
多分、抜かれることはない。

No.23: fiwa は、コレナニ? とか、匿名とか、回答者が報われない質問にも回答が多い。
コレナニ? は、仕組上 BA が付きにくいけど、回答の精度が高いので抜かれる可能性は大。
ただ、マイペースな人なので、今のペースを超えて 2回/月 の BA を取れるかどうかは微妙。

No.24: libros は、回答の精度は高いものの、回答する質問に偏りがある。
答えたくなる質問が BA の取得ペースを超えて出てくるとはちょっと考えにくい。

No.25: cubick は、回答の精度があまり高くない。
これまでのペースを超えて BA を取れるとは思えない。

No.26: rsc96074 は、回答の精度は高いのだけれど、BA をもらえない質問に回答する割合が多い。
これまでのペースに加えて、3回/月の BA が取れる可能性は少ない。
ただ、匿名質問にも回答している可能性はある。

No.27: studiocherry は、回答の精度が低い。
これまでのペースに加えて、3回/月 の BA が取れるとは思えない。

No.28: Gleam と No.29: karuishi は、どちらも古参。
良くも悪くもマイペース。
ポイントどころか、BA も回答のモチベーションになっているようには見えない。
つまり、現状のペース以上に BA を取るとはちょっと考えにくい。

No.30: mugihika は利用停止。


とまあ、こんな感じで、pogpi の2015年末の順位は、現状のペースでは 15〜16位、悪くても 18位というところじゃないかと思うのだけれど。


どうなるだろうね :-)

燻製って

思い付きで、スモークなんぞをやってみたのだけれど。

いろいろと難しいなあ。
次は、もうちょっとうまくやるつもり。

はてなハイク サービス終了のお知らせ

人生初の燻製。

こんな時代だから、物好きがネット上に色々と情報は落としてくれている。
ざーっと流して見て、何となく分かったつもりになって、桜のチップを買ってみたのは良いものの微妙な感じの仕上がりになってしまった。

分かってる人には簡単というか、当たり前のことなんだろうけど、知らない人にとっては失敗してみないと分からないことがある、というのは燻製に限ったことではないか。
というわけで、次回のための備忘を兼ねて振り返りを。

「チップは勝手に燃えない」

煙を出す材料は大きく分けて二種類。
「チップ」と呼ばれる木端と、「スモークウッド」と呼ばれるおが屑を固めたような棒材。「チップ」の発展形として茶葉を使うというケースも。

色々と探して回ったときに、ここのイメージが頭に残ってて、秋刀魚を焼いたついでに燻製もできちゃうんじゃないかと。
で、同じようなイメージでやってみたのだけれど、これがまあ煙が全然出ない。
チップの上に火の点いた炭のかけらを乗せたのだけれど、30秒も経たないうちに消えてしまう。

これ、肉を乗せた途端にジュウジュウいうくらいのガンガンの火力じゃないとダメなんだ。

見直してみれば、段ボール製の手作りスモーカーなんてのは全てスモークウッドを使ってて、チップを使うのは中華鍋でキッチンのコンロで直火にかけたり、カセットコンロにかけたりしている。

「味をつけてから燻さなきゃ」

「チップは勝手に燃えない」ということに気が付いたので、路線変更。
網の上に敷いたアルミホイルを取っ払い、炭の上に直に桜のチップを振りかけることにした(ご焼香方式)。
暖かい空気は上に溜まるはずだから、密閉度が低いとか、チップがあっと言う間に燃えきってしまうとかいうところは、チップをガンガン追加することで補おうと考えた。

チップは大量にあるので、問題は無い。
# 多少煙たかったけど。

燻したのは三種類。
何も考えずに旨そうなものを、ということで、次の三つ。

  • ウズラの卵
  • 鶏の手羽
  • チーズ

手羽中は色のつき方にムラはあるものの、炭火で焼いているのと同じ塩梅になったのでほんのりと良い感じに火が通ってる。
だが、食べてみて気が付いたことがある。

そう、味がない

そりゃそうだ。
グリルで焼いたりするときには、塩・胡椒とかするもんね。

ああ、だからソミュールとかいう話になるんだな...
# 気づくの遅い (´・ω・`)

「同時に燻す材料をそろえる」

では、良い感じに色がついているウズラの卵はどうだろう。
卵だったら、味をつけなくても美味しいもんね。

固い……

良い色に染まった表面は、まるでゴムのよう。
鶏卵ではなくウズラの卵を使ったことで、白身は薄くゴム感を更に増している。

魚とか肉とかスモーカーにぶち込んで燻しているイメージがあったが、燻す時間や温度は大切。
同じ加減で燻せるものだけを同居させなきゃいけないんだ。
それが分からないうちは、一度に燻すのは一種類だけにしておいた方が無難。



とまあ、次に活かせるかは分からないけれど、いい勉強をさせてもらった。
でも、失敗ばっかりじゃなくて、チーズは予想外の成功で。

ほぼ直火の状態だったのに、溶け過ぎず、良い感じに煙の香りがついてて、とても美味しかった。
最初から、味がついてるものだしね。



最後にもうひとつ。

普段使いの大きなステンレスのボウルを被せて燻したのだけれど、当然のことながら煙のヤニが付く。
それなりにゴシゴシやらないと落ちなかったので、捨てられるものか、燻製専用に使うものを用意した方が良さそう。




次は、もう少し上手くやる (`・ω・´)キリッ

 

Ruby で SQLite

秋晴れの良い天気のある日のこと

この質問で、SQLite を使ってみようと思ったのだ。

調べた感じでは、こんな手順。

  1. http://sqlite.org/download.html から、sqlite シェルと DLL をダウンロード
  2. sqlite-shell-win32-x86-???????.zip と sqlite-dll-win32-x86-???????.zip を解凍して、sqlite3.exe と sqlite3.dll を ruby の bin の場所に置く
  3. gem で sqlite3 をインストールする

楽勝のはずだった

d> gem install sqlite3
ERROR:  Could not find a valid gem 'sqlite3' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1
          errno=0 state=SSLv3 read server certificate B: certificate verify failed
          (https://rubygems.org/latest_specs.4.8.gz)

やってみる

d> gem --version
2.0.14

d> gem install --local rubygems-update-2.0.15.gem
Successfully installed rubygems-update-2.0.15
Parsing documentation for rubygems-update-2.0.15
Installing ri documentation for rubygems-update-2.0.15
1 gem installed

d> update_rubygems --no-ri --no-rdoc
RubyGems 2.0.15 installed

=== 2.0.14 / 2013-11-12

Bug fixes:

* Restore concurrent requires following the fix for ruby bug #8374.  Pull
  request #637 and issue #640 by Charles Nutter.
* Gem::Specification::remove_spec no longer checks for existence of the spec
  to be removed.  Issue #698 by Tiago Macedo.
* Restored wildcard handling when installing gems.  Issue #697 by Chuck Remes.
* Added DigiCert High Assurance EV Root CA certificate for the cloudfront.net
  certificate change.
* The Gem::RemoteFetcher tests now choose the test server port more reliably.
  Pull Request #706 by akr.


------------------------------------------------------------------------------

RubyGems installed the following executables:
        c:/usr/ruby-2.0.0/bin/gem


d> gem --version
2.0.15

d> gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.0.15

d> gem --version
2.0.15

やっぱり天気が良いと、気分も良い

気を取り直して、sqlite3 をインストールだ。

d> gem install sqlite3
Fetching: sqlite3-1.3.10-x86-mingw32.gem (100%)
Successfully installed sqlite3-1.3.10-x86-mingw32
Parsing documentation for sqlite3-1.3.10-x86-mingw32
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/sqlite3/1.8/sqlite3_native.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/sqlite3/1.9/sqlite3_native.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/sqlite3/2.0/sqlite3_native.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/sqlite3/2.1/sqlite3_native.so, skipping
Installing ri documentation for sqlite3-1.3.10-x86-mingw32
1 gem installed

めでたし、めでたし。



しつこさは美徳

後で、こんなのも見つけた。
http://qiita.com/giiko_/items/493f6ffc3547fbc35667
http://ria10.hatenablog.com/entry/20130527/1369647304

証明書が古いから gem でインストールができない。
gem を 2.0.3 に上げれば良いのだけれど、gem が使えないからアップデートもできない、という鶏が先か卵が先かみたいな問題になってる、ということらしい。

Even if we have official releases of any of the versions that correct the issue, it will not be possible install those via RubyGems (chicken-egg problem described before).

https://gist.github.com/luislavena/f064211759ee0f806c88:tltle

SSL が使えなければ、素の http を使えば良いじゃない。

d> gem source -a http://rubygems.org
d> gem install rubygems-update
d> gem install ***
d> gem source -r http://rubygems.org

-a--add-r--remove とも。

Amazon ギフト券への交換終了

Amazon ギフト券への交換が 2015-08-01 をもって終了、ということで、前後の質問、回答数の推移。

集計対象は、2015-06-01 から 2015-08-11 のアンケートを除く、一般質問(ポイントあり・なし)と匿名質問。
ある程度は非公開になった質問もカウントしてます。

続きを読む