筋トレ + ジョギングによるダイエットの目標

体重がなかなか減らなくなってきたので、自分にプレッシャーかけるため(?)に目標を書いて公開しておこう。
心拍数が上がってないときでもインターバル入れすぎてるときが増えてきて腹立たしい。ジムで瞑想しててどうする。

身長: 166cm
体重: 78KG (目標 70KG)
体脂肪率: 23% (目標 15%)

もうおっさんなので関節が痛いときは無理しないで回数を減らしてる。
ジョギング/トレッドミルは関節が痛くても、心拍数が上がりすぎないことを意識しながら意地でも当初の目標時間やる。

トレッドミルの場合は最大負荷(傾斜)でスピードを調整する。(傾斜 15% 4.5km/h - 8km/h)
アスファルトランニングしてたときはすぐに膝痛が出てたのだけど、登山では膝痛が発症しない経験から、走るときに足を落下させる距離が短いために負担が少ないのではないかとの推測から。

ジムで 4 時間コースの場合

心肺機能をフルに使って、かつ全身を筋肉痛にしてくたくたにするのが目標
二週間に一回ぐらい。

  • トレッドミル 1 時間
  • ウェイト
    • ベンチプレス(スミスマシーン) 40kg - 60kg 10 * 3 セット
    • スクワット(スミスマシーン) 70kg - 100kg 10 * 3 セット
    • デッドリフト 70KG - 90KG 10 * 3 セット
    • 腹筋 30 回 * 4 セット
    • 懸垂 5 回 * 約 3 セット
    • 他にも適当に空いてる器具で
  • トレッドミル 30 分
  • ストレッチ 10 分

ジムで 2 時間コースの場合

1,2 割程度の軽い筋肉痛が目標。週に一回程度。

  • トレッドミル 30 分
  • ウェイト
    • ベンチ 50kg - 60kg 10 * 3 セット
    • スクワット 70kg - 90kg 10 * 3 セット
    • デッドリフト 70kg - 90kg 10 * 1 セット
  • ストレッチ 10 分

家 + 自宅周辺で 2 時間コースの場合

天気がいいとき。黄砂も花粉も飛んでないとき。
ジョギングで有酸素運動した後は録画を消化しながらの運動。
少し筋肉痛になるぐらいが目標。

  • ジョギング 0.5H - 1.0H
  • スクワット (+20KG) 50 * 2 - 3 セット
  • 腹筋 30 回 * 3 セット
  • 懸垂 5 回 * 約 3 セット
  • 腕立て伏せ 30 回 * 3 セット
  • ダンベルカール 20 * 3 セット

家で 1 時間コースの場合

テレビやら映画の録画みながら適当にサーキット。時間がないときはもっと短い。
翌日に引きずらず、筋肉痛にはならない程度の軽い運動。

  • 腹筋 30 * 3
  • 腕立て伏せ 30 * 3
  • 懸垂 5 * 3
  • スクワット (+20KG) 100 * 2 - 3 セット
  • ストレッチ

Google サポート窓口の人は初期化しか案内できないのか?

この記事に書いたこと。

http://d.hatena.ne.jp/mhayashi1120/20141214/1418546954

Q: trusteed face (smartlock 機能?) が出てこないんですけど。
A: ビルド番号とか確認しても問題ない。なんでだろ?
   折り返しの電話では patch が当たっているとかどうとか。後述する。
Smartlock の表示が出てこないってのは Boot Loader レベルから端末を初期化することで出るようになってきた。
これはいったいどういう問題だったのか?はよくわからない。

後でわかったんだけど、SmartLock 機能を使うときは信頼できるエージェントに SmartLock を設定しておかないといけないらしい。

設定 -> セキュリティ -> 詳細設定 -> 信頼できるエージェント

たぶん端末初期化しなくても、↑これを設定しとけばきっと設定項目が出てきたのだろうな。
あんな程度のことで端末初期化とか意味不明すぎる。Google のサポート窓口はきっとアホだな。
とにかく端末初期化とセーフモードでの起動ということだけしか案内しないみたい。
何かホントのトラブルあっても聞くだけ無駄かもしれんぜ。

Trusted Face 自体は数ヶ月使ってみて使い物にならない代物であることはわかってきた。

Nexus5 交換の件

Google Nexus5 の GPS と sim 経由の通信がおかしい - まにっき Google Nexus5 を交換してもらったらまたトラブルが - まにっき の続き

12/17

注文した充電器が届いた。いっぱい包装があって解くのがめんどくさい。
後から届いた交換端末はやはり反応しない。小さいが、磁石がついてるらしく端末にぺたっとくっつく。
もちろん他の Qi 対応端末はすべて充電してくれる。一応ね。
小さすぎてあまりに使いづらい。絶妙の位置に置かないと反応してくれないんだよね。
Google はこんなもんわざわざ販売して、不具合品の言いがかりに利用しているのか。

Qi 充電について Google の主張は「対応していない充電器に載せたから壊れた」ですが、私の結論は「最初から壊れていたものを交換端末として発送した」です。
どう捉えるかは読んだ方のご自由に。

12/18

返品するのに必要な RMA を発行してもらって処理終了。
あとは集荷を依頼して送り返すだけです。めんどくさかった。。

ここまでの総括

結果として不毛なだけの手続と長いやりとりでした。
きっと、もう二度と Google Play で端末は購入しないでしょう。

夜中とか確実に寝てる時間に、自動的に再起動するアプリないかと思ったけど、どうやらセキュリティ上の理由で再起動の APIandroid に用意されていないらしい。

Google Nexus5 を交換してもらったらまたトラブルが

Google Nexus5 の GPS と sim 経由の通信がおかしい - まにっき の続き

12/08

もうおそらく数日の運命であろう端末にジョギング用アプリとか普段使うやつらをいろいろ入れ直してみた。
やはりまた今日も電話繋がらなくなった。。

12/10

交換品が届いた。思ったよりも速い。
開封直後、どうも Qi 給電ができない気がする。電源いれたときのバイブ音も大きい気がする。
しかし、とりあえず初期設定から Lollipop のアップデートまでを執行する!

なんだか様子がおかしい。。
前の端末と表示の内容がちらほら異なる。 Trusted Face 登録したいのに Smart Lock が出てこない。。

12/11

で、次の日。やっぱり様子がおかしいので再び Google に架電。

Q: Qi が反応しない。
A: セーフモードで起動してみるとどうなるの?
-> 変化なし。電源入れてなくても古い端末は充電はできてたんだから当たり前じゃね?

Q: trusteed face (smartlock 機能?) が出てこないんですけど。
A: ビルド番号とか確認しても問題ない。なんでだろ?
折り返しの電話では patch が当たっているとかどうとか。後述する。

Q: アクセサリが何もつかない状態で発送するって言ってたのに、usb 充電器がついてきた。どうするの?
A: 今、使ってるものを送り返してください。(あ?)

Smartlock の表示が出てこないってのは Boot Loader レベルから端末を初期化することで出るようになってきた。
これはいったいどういう問題だったのか?はよくわからない。

このときの手順を思い出しながら記します。ところどころ違っているかもしれない。 後から自分でやり直して確認した。

  1. 電源を落とす
  2. 電源ボタン + ボリュームダウンキー長押しで Boot Loader 起動
  3. Recovery Mode を選択 電源ボタンで実行
  4. 死んでしまった android くんが「コマンドが見つかりません」とかいう表示
  5. 電源ボタンを(0.5 秒ぐらい)押してからボリュームアップキーを(1 秒ぐらい)長押し。*1
  6. "wipe cache partition" で cache を削除する
  7. "wipe data/factory reset" を選択して削除する
  8. no, no, no, no, yes, no, no, no の中から yes のある行、 "delete all user data" を実行。この選択画面はユーザごとに違う。

で、Android OS から初期化するよりも確実な初期化ができるとかなんとか。
この流れの中で、電源ボタン長押ししても電源が落ちなくなることがあったりして、さらにこの端末への不審感が募る。
旧端末で後からやり直してみたらあっさりうまくいった。
それから向こうとしては当然ながらこちらが root 化してることを疑っていて、BootLoader の画面のときに「○○にある文字を読み上げてもらえますか?」と尋かれたので、「locked!」と力強く応えておいた。

いやーこれ考えてみたら、こちらは BootLoader 画面とかやったことあるからある程度知ってたし、自宅は常時接続があるからたいして問題にならなかったとはいえ、そうじゃない人だったら回線圧迫するしめんどくさいしで相当腹立たしいのでは。
Nexus5 の初期化、今回の一連の流れで OS レベルの初期化を加えると 3,4 回はやったぞ。

Google さんから指示された操作も長押しが 0.5 秒ぐらいとか 1 秒ぐらいとか、「押すのが長すぎたんじゃないですか?」とかで Google というか Linux の遺伝子を感じてしまいました。昔 GRUB やら LILO の Boot Loader でいろいろやってた頃のことを思い出してました。

それから Qi 充電器については他社製のもの。なので、Qi が反応しない点に対しての交換は賜りかねる。とのこと。


これは予想してた。しかし、他の Qi 対応端末が充電できるのに新しく届いた端末だけ充電できないのなら、あきらかにおかしいだろ。
ただ、この時点では上席に交換が可能か否か確認してみるとのこと。明日以降にまた連絡されるらしい。

もし交換に応じないんなら Google PlayNexus 専用の充電器を購入して試してやる。

今日の電話時間は合計 1.5H ぐらいだったかな。

バイブ音が大きいことはイライラして言うの忘れてた。。
それから旧端末と比べると明らかに色が黄色い。

12/14

Google の担当からメール。要約すると

  • 交換には応じられない。
  • 充電できないのは他社製の Qi 充電器であるため。
  • もし、その後、届いた純正充電器で充電できなくてもそれは他社製の充電器で充電したために本体が壊れたためなので当社に責任はない。

そこで、とりあえず充電器を注文した。目的は新しく届いた Nexus5 の充電が不可能なことを確認するため。
なので検証が終わりしだい返品する。

Qi 充電ができないのは問題外なので今は新しく届いた端末を返品することを考えているところ。
挙動とかいろいろみてると製造ロットがあやしそう。

あーそういえば今さらどうでもいいけど Nexus5 は LG の作品だったっけ。
このメールの中には LG の修理相談窓口への連絡先が書いてあった。

こんだけめんどくさかったら大抵は途中で諦めるわなぁ。
アプリを一つずつ消して試しているときも思った。


Nexus5 交換の件 - まにっき に続く

*1:これがうまくいかなくてかなり時間かかった。

Emacs で named-let してみる

某所でみかけた named-let ってこんな感じ?
macro をうまく抑え込む方法はあるのだろうか。

下書きだと embed された外部リソースの確認ができんがな。hatena

追記:

あ、そうか。末尾再帰になってないときにだめなのか。
思いついたことそのまま書いてみたら穴だらけになるなぁ。

;; 末尾再帰版
(nlet factorial1 ((a 5)
                  (tmp 1))
  (cond
   ((= a 0)
    tmp)
   (t
    (factorial1 (1- a) (* tmp a)))))

;; だめだめ
(nlet factorial2 ((a 5))
  (cond
   ((= a 0)
    1)
   (t
    (* a (factorial2 (1- a))))))


むーこうなると前に公開されてたというのはこういうのも対処してあったのか気になる。
普通の再帰にするにも body を走査しないといけないからかなり面倒そう。
どうやるのだろう。

Google Nexus5 の GPS と sim 経由の通信がおかしい

IIJ mio の SIM を挿して使ってる。
自宅の wifi から外に出たときにときどき GPSLTE/3G の電波を掴まなくなる。
再起動したら元に戻る。

外に出て運転してるときに唐突にスマホ使えなくなるの辛い。
今じゃナビも Google Map なので。日本メーカー製のカーナビはもはやゴミですよ。

時系列

2014/05 購入
2014/07 sim 挿入 それまではモバイルルータ

たぶん sim を挿した直後からときどき電波つかまないとか、GPS がおかしいとかあったみたいな気はする。
買ったばかりでよくわからないし、めんどうだからすぐに再起動してたのだけど。
再起動から一日も経たずに電波掴まなくなったことがあってそのときに限界に達した。

Google のサポートに電話してみた。(10/16)

電源ボタン長押しで出る「電源を切る」をロングタップするとセーフモードで起動するらしい。
サポートからは「キャッシュデータを削除してからセーフモードで起動してほしい」と指示をもらった。
いや、再起動したら電波は掴んでくれるんだって。さっき言っただろ?と思いながら。
とにかく、それで再起動したところ、電波を掴んでくれる。

別ベンダのアプリを疑って、一つずつ削除しながら試していってほしいとか。
予想してたもののこれは辛いよね。仕方ないので一ヶ月ぐらいかかって順番にどんどん消していってみる。

どのアプリを消してもやっぱり数日おき、あるいはその日のうちに電波を掴まなくなる。
これ、試すのなかなか辛いぜ?その間、使えるアプリがどんどん減っていくのだから。

一ヶ月半ぐらいして、Google 製以外、全部のアプリを削除し終わったけどまだ症状が出る。

Google に架電。(12/02)

今度はデータ全削除して、初期化してまだ症状が出たら交換に応じるとか。最初っからそう言えよ!

「一ヶ月半ぐらいずーっと不便な状態で使ってたんですけど。」
「一ヶ月半ぐらいずーっと不便な状態で使ってたんですけど!」
「一ヶ月半ぐらいずーっと不便な状態で使ってたんですけど!!」
「一ヶ月半ぐらいずーっと不便な状態で使ってたんですけど!!!」

と同じことを何回も言っておいた。まだしばらくアプリが充分に使えないですね。。
このときの電話時間は 5,6 分かな?

数日、使ってみたけど、やっぱり電話がつながらなくなる。Google に架電 (12/06)

今回は電話時間が 16 分。かなり長い間、保留で待たされましたね。何を確認してたのだろう。
自分の ID を伝えて、保留から復帰した後の声の強張りようからは、ユーザのお怒り情報については共有していますねw
IMEI の確認とか、何しゃべってるのかわからなかったけど、何かいろいろ確認してたみたい。
それから、水濡れとか落下とかしてないかの最終確認。
一旦、こちらのクレジットカードに請求がはいって、それから今使っている Nexus5 の返品を確認次第、その請求が取り消される(?)らしい。

その他の注意点。
再生端末を送らせていただく。(Refurbished 版) 充電器などはそのまま使って。メールを送るのでそのリンクに書いてある通りにして。

12/07 時点で総括

腹立ちながら書いててもまだ全般的に Google 系の製品が好きです。Sharp 製は GPS 機能すらまともに動きませんでしたから。呆れてクレーム入れる気にもならない。
うちのプロバイダとか N** なんかは電話してもずいぶん長い間待たされるのに比べたら、サポートに繋がりやすいのもまだいい方ですね。
ただ、通話の遅延があったからなのかよくわからなかったけど、全般的にこちらが話しているのを遮ってでもしゃべり出す印象が残っている。

sqlite3 の datetime 関数について

これまでは日付間の計算をするときに便利な epoch で保存してたのだけど、database の中身を覗くときに不便に感じることが増えてきたので、これからは "%Y-%m-%d %H:%M:%S" 形式で保存するようにしたい。
sqlite3 にはそれなりの datetime 関数もあることに気づいたので調べてみた。

実験

実行環境は shell 版 sqlite3 にて。

sqlite3 hoge.db "select strftime('%s', '1970-01-01 00:00:00')"

=> 0

sqlite3 hoge.db "select strftime('%s', '1970-01-01 00:00:00', 'localtime')"

=> 32400

sqlite3 hoge.db "select strftime('%s', '1970-01-01 00:00:00', 'utc')"

=> -32400

timestring を表記するための TimeZone を modifier で指定できるのかと思っていたがどうやら違うらしい。
よくみると modifier は複数回、何回でも指定できる。

sqlite3 hoge.db "select strftime('%s', '1970-01-01 00:00:00', 'localtime', 'localtime')"

=> 64800

sqlite3 hoge.db "select strftime('%s', '1970-01-01 00:00:00', 'localtime', 'localtime', 'localtime')"

=> 97200

http://www.sqlite.org/lang_datefunc.html

The time string can be followed by zero or more modifiers that alter date and/or time. Each modifier is a transformation that is applied to the time value to its left. Modifiers are applied from left to right; order is important.

拙訳:

time string は後続する 0 個以上の modifier(修飾子) により修飾され、日付/時刻を置き換える。
それぞれの修飾子はそれより左側の時刻の値に対して適用される。
修飾子は左から右に適用される。この順番は重要である。

どうやら単純に modifier(s) で指定した時差を読み込んだ timestring にどんどん足していく(あるいは引いていく)感じに思っておくとよいらしい。

現在の TZ での時刻表記を epoch にする

sqlite3 hoge.db "select strftime('%s', '1970-01-01 09:00:00', 'utc')"

=> 0

TZ を変更してみる。

TZ=UTC sqlite3 hoge.db "select strftime('%s', '1970-01-01 09:00:00', 'utc')"

=> 32400


日時などを加算できる。

sqlite3 hoge.db "SELECT strftime('%Y-%m-%d %H:%M:%S', '2000-01-01 00:00:00', '10 days')"

=> 2000-01-11 00:00:00

月初なども取得できる。

sqlite3 hoge.db "SELECT strftime('%Y-%m-%d %H:%M:%S', '2000-01-31 00:00:00', 'start of month')"

=> 2000-01-01 00:00:00

月末を取得する方法がない。。けど date 型などと言ってみても実体は文字列型なので

sqlite3 hoge.db "SELECT strftime('%Y-%m-99 %H:%M:%S', '2000-01-31 00:00:00')"

みたいにしとけば期間を取得するときには充分かな?
それを言えば月初の取得(ry

unixepoch 修飾子のこと

The "unixepoch" modifier (11) only works if it immediately follows a timestring in the DDDDDDDDDD format. This modifier causes the DDDDDDDDDD to be interpreted not as a Julian day number as it normally would be, but as Unix Time - the number of seconds since 1970. If the "unixepoch" modifier does not follow a timestring of the form DDDDDDDDDD which expresses the number of seconds since 1970 or if other modifiers separate the "unixepoch" modifier from prior DDDDDDDDDD then the behavior is undefined.

拙訳:

"unixepoch" 修飾子は DDDDDDDDDD format 直後の後続として指定されたときのみ機能する。
この修飾子は通常のように Julian 日付としてはその値を解釈せずに、Unix Time (1970 年からの秒数) として解釈する。
もし "unixepoch" 修飾子が 1970 年からの秒数を表す DDDDDDDDDD 形式に後続しない場合、あるいは "unixepoch" 以外の修飾子を間に挟む場合、その挙動は未定義となる。
sqlite3 hoge.db "SELECT julianday('1970-01-01 00:00:00')"

=> 2440587.5

sqlite3 hoge.db "SELECT strftime('%J', 0, 'unixepoch')"

=> 2440587.500000001

つまり 2440587.5 は 1970-01-01 00:00:00 を表すユリウス日
# ユリウス日って日本語圏だとまず使わないけど、どういう場面だと使うのだろう。

sqlite3 hoge.db "SELECT strftime('%Y-%m-%d %H:%M:%S', 1, 'unixepoch')"

=> 1970-01-01 00:00:01

まとめ

unix epoch から yyyy-MM-dd (UTC) などへ
sqlite3 hoge.db "SELECT datetime(311871600, 'unixepoch')"

=> 1979-11-19 15:00:00

TZ=UTC sqlite3 hoge.db "SELECT datetime(311871600, 'unixepoch')"

=> 1979-11-19 15:00:00

TZ=UTC sqlite3 hoge.db "SELECT datetime(311871600, 'unixepoch', 'localtime')"

=> 1979-11-19 15:00:00

unix epoch から yyyy-MM-dd (現地時刻) などへ
sqlite3 hoge.db "SELECT datetime(311871600, 'unixepoch', 'localtime')"

=> 1979-11-20 00:00:00

yyyy-MM-dd (現地時刻) など -> unix epoch
sqlite3 hoge.db "SELECT strftime('%s', '1979-11-20 00:00:00', 'utc')"

=> 311871600

yyyy-MM-dd (utc) など -> unix epoch
sqlite3 hoge.db "SELECT strftime('%s', '1979-11-19 15:00:00')"

=> 311871600

yyyy-MM-dd (現地時刻) など -> yyyy-MM-dd (utc)
sqlite3 hoge.db "SELECT strftime('%Y-%m-%d %H:%M:%S', '1979-11-20 00:00:00', 'utc')"

=> 1979-11-19 15:00:00

yyyy-MM-dd (utc) など -> yyyy-MM-dd (現地時刻)
sqlite3 hoge.db "SELECT strftime('%Y-%m-%d %H:%M:%S', '1979-11-19 15:00:00', 'localtime')"

=> 1979-11-20 00:00:00

yyyy-MM-dd (utc) など -> yyyy-MM-dd (指定TZ)
TZ=JST-8 sqlite3 hoge.db "SELECT strftime('%Y-%m-%d %H:%M:%S', '1979-11-19 15:00:00', 'localtime')"

=> 1979-11-19 23:00:00

参考

本稿とは関係ないけど、日付に関して参考にした。

http://pokutuna.hatenablog.com/entry/20111113/1321126659