コグノスケ


2018年3月2日

Kindle書籍の紹介文

目次: Kindle

Kindleで購入した書籍には短い紹介文が付いています。紹介文は下記の方法のどちらかから読むことができます。

  • Kindleストアで書籍を見る
  • ダウンロードした書籍の「この本について」を見る

しかしKindleの書籍は紹介文が付く前に発売されてしまうことがあります。紹介文が付いていない書籍の「この本について」を見ると、下記のような感じで「ただいま作成中!」のような文書が出てきます。


紹介文が付く前にダウンロードしたKindleの書籍

紹介文の書き方からすると「この本について」では、Kindleストアの紹介文と連動しているように見えますが、実は違います。この日記を書いている時点でKindleストアの紹介文が更新されていますが、本の紹介文はずっと「作成中」のままだからです。

ダウンロード時点のストアの紹介文を保持しているんだろう、と思って、書籍をダウンロードし直しましたが、紹介文は更新されませんでした。従ってストアと書籍の双方に紹介文が付属していて、書籍側の紹介文だけ出版社側が更新し忘れている可能性が高いです。

ストア側と紹介文が食い違っていても、特に害はありませんが、どうしてこんな間違いやすい仕組みにしたのかなー……とは思いますね。

編集者:すずき(2021/12/08 04:01)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2018年3月10日

名古屋旅行

奥さんと2人で名古屋に旅行に来ています。

名古屋プリンスホテルの部屋にあるテレビがSONYのAndroid TV KJ-43X8000Eでした。


テレビの型番


メニュー画面

ざっと見た感じでは、設定やGoogleストアアプリを消し、客が勝手にいじれないよう制限を掛けたAndroid TV という感じです。


リモコン

リモコンは市販品を流用しているらしくGoogle PlayやNETFLIXのボタンが存在しますが、これらのボタンを押しても「その機能は使えない」と表示されるだけで、何も起きません。


ホテルの案内ページ

プリンスホテルの案内用ページは不思議な作りでした。なぜか構内放送に載せたBML(データ放送)で実現されています。

クソ重い(※)し、解像度メチャクチャ低いし、何でこんな実装にしたのか、気になりますね……。

個人的な予想としては、ホテルの他の部屋にはAndroid TVではないor他メーカーのテレビが置かれており、全てのテレビで共通で使える表示機能がBMLしかなかったのかもしれません。

(※)SONYやSHARPのAndroid TVは、テレビを見ている間Androidの動作が非常に遅くなります。なぜなんだ……??

プラットフォームとしてのテレビ

プリンスホテルのように、ユーザーが頑張ってテレビで何かを動かそうとしたとき、各社テレビ共通で使える機能といえば、

  • 画質は最高だが、距離を引き回せず、インタラクティブ性のないHDMI
  • 既存設備で引き回せて、インタラクティブ性も一応あるが、画面がボロボロのBML

この二択しかなさそうです。

テレビをプラットフォーム(ユーザーがアプリケーションなどを動かす環境)として見ると、下の下ですね。

テレビもスマホも使っているハードウェアは大差ないですから、テレビとスマホの自由度の差は、ほぼソフトウェアの差でしょうね。テレビもスマホのようにAndroidかiOSに支配されれば幸せなんですかね……?

編集者:すずき(2018/03/22 02:24)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2018年3月11日

リアル脱出ゲーム、初クリア

名古屋旅行の一つの目的である、リアル脱出ゲーム(進撃の巨人とのコラボ作品)に参加しました。少なくとも5回は参加していると思いますが、初めてクリアできました。やった。名古屋まで来た甲斐がありました。

一緒に参加した仲間に恵まれました皆さん経験者なのはもちろんのこと、問題解決のスピードも質も最高でした。

初クリアにして、パーフェクト(※)に解けました。充実感が凄い。

(※)問題が解けないけど、当てずっぽうで答えを推測などせず、全ての答えを導いてクリアしたという意味で使っています。

クリアしたチームは23チーム中4チームでした。

クリアした感想

クリアして初めて分かったのですが、今まで参加したリアル脱出ゲームは、到底クリアできないペースだったことが良くわかりました……。脱出成功のときの、問題を解くペースは凄まじく早いです。

今回は6人チームで、チェックポイントごとに6問同時に問題が出るタイプでしたが、1人1問ずつ問題を即答しないと時間が足りません。

悩んで止まるとほぼクリアは無理です。

制限時間60分で、最終問題の答えを出した段階で、残り時間は10分くらいでした。

もしや一番最初にクリアできたか?と思ったのですが、一番ではありませんでした。上には上がいますねー。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2018/04/11 00:56)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2018年3月23日

Ubuntu 14.04とccacheとGCC 7

会社で超ハマったのでメモしておきます。

GCC 7からswitch-case文において、暗黙のフォールスルーを警告する機能 -Wimplicit-fallthroughが実装されました。動作の仕様についてはRedHatの解説(リンク)が詳しいです。

フォールスルーの警告オプションは -Wimplicit-fallthrough=3のように指定しますが、オプションを直接指定するより-Wextraの指定により勝手にONにされている、というパターンが多いのではないでしょうか。ちなみに -WallではONになりません。

Ubuntu 14.04のccache 3.1.9とこのフォールスルー警告オプションを組み合わせると変な挙動を示します。まずはこんなプログラムを用意します。

暗黙のフォールスルー


int a(int i)
{
	switch (i) {
	case 0:
		i = 2;
		/* Fall through */
	case 1:
		i = 3;
		break;
	default:
		return 0;
	}

	return 0;
}

このプログラムは、フォールスルーの警告オプションのレベルを4以上にすると、警告が発生します。ちなみにデフォルトの警告レベルは3ですから、レベルを指定しない場合や、-Wextraなどでは警告は発生しません。

暗黙のフォールスルーが警告される、されないの境界
$ gcc --version

gcc (Debian 7.3.0-11) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


$ gcc -Wextra a.c -c -o a.o
★警告無し★


$ gcc -Wimplicit-fallthrough a.c -c -o a.o
★警告無し★


$ gcc -Wimplicit-fallthrough=3 a.c -c -o a.o
★警告無し★


$ gcc -Wimplicit-fallthrough=4 a.c -c -o a.o

a.c: In function ‘a’:
a.c:5:5: warning: this statement may fall through [-Wimplicit-fallthrough=]
   i = 2;
   ~~^~~
a.c:7:2: note: here
  case 1:
  ^~~~

しかしUbuntu 14.04の古いccacheを経由してGCCを起動すると、おかしなことが起きます。警告されないはずのレベルを指定しても警告が出てしまうのです……。

古いccacheと暗黙のフォールスルーの警告
$ ./ccache --version

ccache version 3.1.9

Copyright (C) 2002-2007 Andrew Tridgell
Copyright (C) 2009-2011 Joel Rosdahl

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.


$ gcc -Wimplicit-fallthrough=3 a.c -c -o a.o
★警告無し★


$ ./ccache gcc -Wimplicit-fallthrough=3 a.c -c -o a.o

a.c: In function ‘a’:
a.c:5:5: warning: this statement may fall through [-Wimplicit-fallthrough=]
   i = 2;
   ~~^~~
a.c:7:2: note: here
  case 1:
  ^~~~
★なぜか警告が出る★

とても不思議ですが、新しいccacheだとこの現象は発生しません。

新しいccacheと暗黙のフォールスルーの警告
$ ccache --version

ccache version 3.4.1

Copyright (C) 2002-2007 Andrew Tridgell
Copyright (C) 2009-2018 Joel Rosdahl

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.


$ ccache gcc -Wimplicit-fallthrough=3 a.c -c -o a.o
★警告無し★

推測の域を出ませんがccacheのバグなんだろうなあとは思います。

Ubuntu 14.04のGCCは4.8だから無関係?

Ubuntu 14.04のGCCは4.8なので、無関係かと思うかもしれませんが、外部から持ってきたクロスコンパイル用のツールチェーンでも同じことが起きます。x86用だろうがARM用だろうが、GCC 7のとある警告オプションを使うとハマります。

編集者:すずき(2018/03/24 14:06)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2018年3月24日

Ubuntu 14.04のccacheの謎

昨日(2018年3月23日の日記参照)でGCC 7とUbuntu 14.04のccache 3.1.9を組み合わせると、暗黙のフォールスルー警告が誤動作する現象を紹介しました。

暗黙のフォールスルー(再掲)


int a(int i)
{
	switch (i) {
	case 0:
		i = 2;
		/* Fall through */
	case 1:
		i = 3;
		break;
	default:
		return 0;
	}

	return 0;
}

なぜそうなるのか、ざっと見てみました。使うのは下記のスクリプトです。引数をファイル /tmp/aaa.txtに「追記」でダンプした後、本物のGCCを起動するスクリプトです。

引数のダンプを標準出力に出さない理由は、標準出力がccacheに取られて見えないから、「追記」モードで出力する理由はccacheがgccを2回起動するからです。sleep 10を入れた理由は、引数に一時ファイルを指定されたとき消える前に見たいからです。

gccと置き換えるスクリプト

#!/bin/sh

echo $* >> /tmp/aaa.txt
sleep 10

gcc_ $*

使い方は /usr/bin/gccを /usr/bin/gcc_ にリネームし、このスクリプトを /usr/bin/gccとして配置するだけです。ではやってみましょうか。

ccache 3.4.1を実行したときのファイルの内容(OK)
-Wimplicit-fallthrough=3 -E a.c
-Wimplicit-fallthrough=3 -c -o a.o a.c

最初にGCCをプリプロセッサのみ(-E)で起動し、次にGCCを元の引数(-c -o a.o a.c)で起動しています。

ccache 3.1.9を実行したときのファイルの内容(NG)
-Wimplicit-fallthrough=3 -c -E a.c
-Wimplicit-fallthrough=3 -c -o /home/katsuhiro/.ccache/d/a/8431625291455df2df790a4c34be0d-395.o.tmp.blackbird.18397 /home/katsuhiro/.ccache/tmp/a.tmp.blackbird.18397.i

プリプロセッサのみで起動するところは同じですが、その後が違っていて、一時ファイルをコンパイルするように指定しています。このファイルが怪しいですね。

ccache 3.1.9がGCCに渡す一時ファイルの内容

# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "a.c"
int a(int i)
{
 switch (i) {
 case 0:
  i = 2;

 case 1:
  i = 3;
  break;
 default:
  return 0;
 }

 return 0;
}

見たところプリプロセッサ出力をそのまま保存しているようです。case 1: の前にあったコメント /* Fall through */ が消えていますので、-Wimplicit-fallthrough=3でも警告が出てしまいます。

GCC 6までは、元のコードと、プリプロセッサ出力(コメントが全て消える)の間で、警告内容に差は無かったのだろうと思われますが、-Wimplicit-fallthroughは「コメントの内容」によって動作が変わるオプションのため、誤動作を引き起こしたようです。

対策

Ubuntu 14.04にGCC 7は採用されていませんが、クロスコンパイラなどでGCC 7とご対面する可能性があります(自分がそうでした)。

対策としては、

  • Ubuntu 14からUbuntu 17系に移行(3/28 Ubuntu 16 → 17に訂正、Ubuntu 16でもccacheが古いのでダメ)
  • Ubuntu 14じゃなきゃダメな人はccacheだけ新しいバージョンに強制上書き
  • コンパイル速度の低下を許せるならGCC 7のときだけccacheを無効化
  • 考えるのが面倒ならccacheをアンインストール

辺りが考えられます。

編集者:すずき(2018/03/28 18:38)

コメント一覧

  • すずきさん(2018/03/26 14:39)
    記事は後で訂正しますが、Ubuntu のアップデートで対応しようとするなら、Ubuntu 17.10 に移行する必要があります。

    Ubuntu 14.04 LTS の ccache 3.1.9: NG
    Ubuntu 16.04 LTS の ccache 3.2.4: NG
    Ubuntu 17.10 の ccache 3.3.4: OK
open/close この記事にコメントする



2018年3月25日

アイス

アイスの写真を10個くらい追加して、77種類になりました。これでもまだ載せていないアイスがたくさんあるんだ…。

集計してみると、こんな感じ。

  • 赤城乳業: 25
  • ファミマ: 6
  • グリコ : 4
  • 明治 : 5
  • 森永乳業: 12
  • ロッテ : 9
  • その他 : 16

赤城乳業のファンであることは否定しませんが、新商品を見かけたらとりあえず買うので、特に選り好みはしていません。

それでも赤城乳業がやたら多いのは、ガリガリ君の新商品の出る感覚がかなり短いからでしょうね……。

編集者:すずき(2018/04/11 01:11)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報