投稿者: koji

  • (プレゼン準備用)ことばの理解度チェックリスト

    まえがき

    『プレゼン資料に書いたことばについて、自分では「わかっている」つもりでも、その実「わかっていない」ことが少なからずあるので、(略)「わかっている」ことについて、次の6段階でチェックします。』

    リスト

    あとがき

    まえがきを含めて、船川 淳志 『知力をつくる技術』(あさ出版、2017年)より。

    理解度という場合、文脈によって測定の内容や深度が変わってくるので「プレゼン準備用」としました。けっこう細かいですが、これくらい細かいほうが自問のためのリストとして機能しやすいかもしれません。

    プレゼンテーションの質疑応答の準備として、まず自分が使った「言葉」の理解度をチェックする。よいステップですね。私家版を作りたくなりました。

    • タイトル知力をつくる技術
    • 著者: 船川 淳志(著)
    • 出版社: あさ出版 (ASAPB)
    • 出版日: 2017-03-08
    • 哲学対話のルール

      まえがき

      『一口に哲学対話と言っても、何に重点を置くか、何のために対話をするのかで、ルールも進行の仕方も違ってくるので、一般論としてどのようなスタイルがいいのかは言えない。ここでは私がいつも掲げているルールをあげておこう。』

      リスト

      あとがき

      まえがきを含めて、梶谷 真司 『考えるとはどういうことか 0歳から100歳までの哲学入門』(2018年、幻冬舎)より。

      対話を通じて考える方法を平易に解説しています。一見すると現場で使うには項目数が多い印象を受けましたが、本書で一つ一つていねいに説明されている背景を読むと、どれも外したりまとめたりしがたくなります。

      個人的には「知識ではなく、自分の経験にそくして話す。」が、解説を読んで納得した項目。知識比べは、対話を通じて「共に考える」行為からは遠ざかってしまいます。

      (略)経験(・・)に基づいて話をすれば、年齢や性別、学歴などにかかわらず、対等に話ができる。知識を背後にもっているのはかまわないが、ちゃんと理解しているなら(・・・・・・・・・・・・)、それをいちいち言わなくても、自分の言葉で(・・・・・・)自分の経験や思い(・・・・・・・・)と結びつけたり、身近な例を出したりして話せばいい。

      (略)そして経験にそくして話をするかぎり──にわかには信じられないだろうが──小学生の子どもと40代の社会人と、70歳のおじいさん・おばあさんが対等に話せるのだ。

      • 本屋で働く新しい人たちへの10ヶ条

        まえがき

        『みんな承知しているし既にやっていることという前提を外して、ずっと腰に提げていた袋を開陳したつもりです。』

        リスト

        あとがき

        まえがきを含めて、矢部 潤子 『本を売る技術』(本の雑誌社、2020年)より。まえがきは、本書あとがきより。リストは、本書のまえがきと第一講のあいだに掲げられています。

        著者は36年間の経験を持つベテラン書店員。本書は出版元である「本の雑誌社」営業部の杉江 由次さんによる矢部さんへのインタビュー集で、矢部さん自身の肉筆はあとがきのみです。

        このあとがきが名文。本エントリのまえがきで引用した「腰に提げていた袋」とは、現役時代に言語化しそこねたノウハウの隠喩です。職人は自分の経験から得たものをこのような心持ちで言語化し、後進に託していけばよいのではと感じ入りました。

        当初、リストの10ヶ条が36年間腰に提げていた袋のエッセンスであると思い吟味していたのですが、どうも違和感があります。

        最終項目に「そして」とあるので、項目の順序に意味を持たせていらっしゃることが察せられます。しかしそうすると、「新聞を読むこと」が1番で、「売場とお客様に教わること」は7番めという順序が、ご本人の語られている内容と合致しないように思えます。また『本を売る技術』を語りつつ「本を売ること」を9番め、最終項目の前に置かれたことにはどんな含意があるのか。

        検索してみると、インタビュアーである杉江さんのブログの2019年1月7日のエントリに、2019年の個人的な目標としてよく似たリストが掲げられています。ブログゆえいつか逸失してしまうかもしれないので引用しておくと:

         2019年10ヶ条
          本を読む
          人に会う
          話を聞く
          口を噤む
          心を鎮める
          集中する
          手を動かす
          足を運ぶ
          本を売る
          感謝を伝える

        1月7日(月) – 帰ってきた炎の営業日誌|WEB本の雑誌

        全体によく似ていますし、どちらにも本を売るが9項めにあります。

        杉江さんが本書を編集している間に矢部さんから10ヶ条を教えてもらい、自分向けにしつらえ直した可能性もあります。杉江さんがこのエントリをふくらませるかたちで「本屋で働く新しい人たちへの10ヶ条」をこしらえたのかもしれません。

        経緯はともかく、本書で語られる「本屋に並べる本」への圧倒的なこだわりに比べると、「リストに並べる心得」へのこだわりはそれほどないのかなと、ちょっと残念に思いました。本好きのリストフリークとして。

        • タイトル本を売る技術
        • 著者: 矢部 潤子(著)
        • 出版社: 本の雑誌社
        • 出版日: 2020-01-23
        • 定量分析の3つの型

          まえがき

          『どれほど新しい分析表現といえども、実際にはこの3つの表現のバラエティ、および組み合わせに過ぎない。』

          リスト

          あとがき

          まえがきを含めて、安宅 和人 『イシューからはじめよ――知的生産の「シンプルな本質」』(英治出版、2010年)より。リストは本文をすこし編集のうえ引用しています。

          基本的には分析イコール比較であり、その「何らかの共通軸」として空間(構成)と時間(変化)があるといった関係。なので「比較」の例にも「構成」として解釈できそうなものがあったりしましたが、なんにせよ覚えやすく思い出しやすいリストです。

          ほかにも、本書には本サイトにおけるリストの定義たる「箇条書きにまとめられた知恵」がたくさん載っています。

          • ライフデザインに活かせるデザイン思考のマインドセット

            まえがき

            『デザイナーは前進する道を考える (・・・)のではなく築く (・・)のだ。実際にプロトタイプ(試作品)をつくり、自分自身で試し、そのプロセスを大いに楽しむということだ。』

            リスト

            あとがき

            まえがきを含めて、ビル・バーネット、デイヴ・エヴァンス『スタンフォード式 人生デザイン講座』(早川書房、2019年)より。まえがきは本文を一部省略して引用しています。リストは本文の見出しを引用して作成しました。

            デザイン思考のアプローチをライフデザインに転用する試み。

            この本からの他のリスト

          • AEIOU – 行動観察のフレームワーク

            まえがき

            『AEIOU は、行動記録を振り返るときに使える五つの質問の頭文字を表している。』

            リスト

            あとがき

            まえがきは、ビル・バーネット、デイヴ・エヴァンス『スタンフォード式 人生デザイン講座』(早川書房、2019年)より。リストは主に “AEIOU Framework” (EthnoHub Help) を参考にまとめました。

            数年前に、デザイン思考の本のなかで、フィールドワークの分野で使われている行動観察のキーワードである AEIOU を援用しているのを目にしました。そのときにリストを収集し本サイトに登録したたと思ったのですが見つからず……。

            キャリアデザインの解説書である本書では、「自分の新しい面を知るための AEIOU メソッド」という項で、自分の日記を読み返しながら自分の興味の対象を探るためにこのキーワードを援用しています。

            この本からの他のリスト

          • NVCによる紛争解決のステップ

            まえがき

            『NVCを活用して紛争解決する際に重要なのは、どのように表現されていても、必要としていることをそこから聞き取る技術を身につけることだ。』

            リスト

            あとがき

            まえがきを含めて、マーシャル・B・ローゼンバーグ 『NVC 人と人との関係にいのちを吹き込む法 新版』(日本経済新聞出版、2018年)より。

            原著にあたれていませんが、「何を必要としているのか」「必要としていること」「ニーズ」「欲求」はおそらく同じ概念を指します。

            5ステップのうち4ステップまでが、実にお互いのニーズを理解する作業に費やされているところが印象的でした。

            この本からの他のリスト

          • フロントページのタイトルにリスト件数などを載せる

            概要

            フロントページのタイトルを書き換えてリスト件数タグ個数、引用している書籍数を載せる。

            詳細

            フロントページのタイトルを書き換える

            タイトルを取得する get_the_title() に仕込まれている ‘the_title’ フィルターを使う。get_the_title() はメニューやウィジェット中の記事タイトルなどでも呼ばれまくっていて ‘the_title’ フィルターを使うコストは高そう。フロントページの記事タイトルだけを(テーマファイルなどに手を加えずに)動的に変える方法があればよいのだが思いつかず。

            フロントページを処理中であるかどうかは通常 is_front_page() を使うが、フロントページを描画する過程でも get_the_title() が複数呼ばれる。そこで ‘the_title’ フィルターに渡される投稿 ID が get_option( ‘page_on_front’ ) で取得できるフロントページ用の固定ページ ID と同一かどうかで識別する。

            リスト件数を載せる

            投稿 (post) の中で投稿ステータスが publish かつカテゴリが list であるものの数を数えればよいのだが、妥当な方法を思いつくまでに意外に時間がかかった。

            WP_Query() を使うと莫大な数の投稿オブジェクトが作られてしまう。特定の投稿ステータスを持った投稿の数カテゴリの数を個別に得る関数はあるが、それらを組み合わせて投稿数だけを得る負荷の低そうな関数が見当たらず。WP_Query() 中にあるフックを活用して SELECT 文に COUNT を追加する新しいクラスを作る事例もあったが、あまりにも大がかり。

            ただ調べてみると、WP_Query() は 1 回のクエリで取得する投稿オブジェクトの数にかかわらず総件数を取得している(ページネーションする場合総ページ数が必要なため)。なので、取得件数を 1 として WP_Query() を呼べばよいだけであった。

            タグ個数、引用している書籍数を載せる

            wp_count_terms() でOK。正確にはプライベート投稿にのみ属するタグや書籍を除く必要があるが、ほぼゼロであることはわかっているので省略。

            add_filter( 'the_title', 'kh_frontpage_title', 10, 2 );
            function kh_frontpage_title( $title, $id ) {
            	// フロントページ用の固定ページのタイトルであれば書き換える
            	if( $id == get_option( 'page_on_front' ) ) {
            		// posts_per_page => 1 とすれば戻り値に巨大な配列を得ることなく合計件数だけを得られる
            		$args = array(
            			'post_type'      => 'post',
            			'post_status'    => 'publish',
            			'category_name'  => 'list',
            			'posts_per_page' => 1,
            		);
            
            		$q = new WP_Query( $args );
            
            		$title = sprintf(
            			'%s のリスト<br><span style="font-size:smaller; font-weight:normal;">%s 冊の本と %s 個のタグを添えて</span>',
            			$q->found_posts, wp_count_terms( 'asin' ), wp_count_terms( 'post_tag' )
            		);
            	}
            	return $title;
            }
          • 「最近読まれているリスト」機能の実装

            最近アクセスの多いリストを一覧表示するウィジェットとアーカイブページを作る。

            人気のあるリストを紹介する場合、総アクセス数で測ると表示されるリストが固定的になるうえ、露出が高まることでアクセス数が増えるのでアクセス数の差が助長される。逆に直近の24時間など短い時間のアクセス数では変動が大きく、人気のあるリストとは言い難くなる場合もある。そこで直近7日間のアクセス数の多いリストを表示させることにした。


            直近7日間のアクセス数を記録する

            WordPress は投稿ごとのアクセス数を記録しないので、count_history というカスタムフィールドを作り、直近1週間のアクセス数を保存する。たとえば今日が 2021/6/2 とすると次のような配列として保存される。

            Array
            (
                [20210602] => 10
                [20210601] => 20
                [20210531] => 30
                [20210530] => 40
                [20210529] => 30
                [20210528] => 20
                [20210527] => 10
            )

            そのうえで lf_counter という別のカスタムフィールドに合計値(上の例でいえば 160)を保存する。具体的な処理は次の通り。

            $count_history = get_post_meta( get_the_ID(), 'count_history', true );
            
            // アクセス履歴あり
            if( is_array($count_history) ) {
            	// 7日前の日付を取得
            	$expdate = (int)wp_date( 'Ymd', strtotime( '-7 days' ) );
            	foreach( $count_history as $date => $count ){
            		// 7日前以前の記録を削除
            		if( $date <= $expdate ) {
            			unset( $count_history[$date] );
            		}
            	}
            // アクセス履歴なし
            } else {
            	$count_history = array();
            }
            
            // カウンタをインクリメント
            $today = (int)wp_date( 'Ymd' );
            ( isset($count_history[$today]) ) ? $count_history[$today]++ : $count_history[$today] = 1;
            
            // カウント履歴をカスタムフィールドに保存
            update_post_meta( get_the_ID(), 'count_history', $count_history );
            
            // 合計カウント数をカスタムフィールドに保存
            update_post_meta( get_the_ID(), 'lf_counter', array_sum( $count_history ) );
            

            カウント処理は、ページ表示処理の終盤に低い優先度で実行させる。

            add_action( 'wp_footer', 'kh_access_count', 30 );
            function kh_access_count() {
            
                /*
                 * 除外するアクセスを識別する
                 * and は最初の式がfalseなら次を評価しないのでorより高速
                 */
                if ( is_single() // 投稿
                  && has_category( 'list' ) // list カテゴリに属している
                  && and ! current_user_can( 'administrator' ) // 管理者のアクセスでない
                ) {
                    // 通過
                } else {
                    return;
                }
            
                // 簡易 Crawler 除外
                // bot, bots, spider で終わる単語が入っていれば Crawler と判断
                $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
                if ( preg_match( '/.*(bots?|spider)\b/i', $ua ) ) {
                    return;
                }
            
                /*
                 * カウントする
                 */
                (上述の処理)
            
            }

            直近7日間のアクセス数が多いリスト10個をキャッシュし、1時間ごとに更新する

            上述のように、リスト投稿ごとのアクセス数はカスタムフィールドに持たせている。全リスト投稿をカスタムフィールドの値でソートする処理は重そうなのでキャッシュし、1時間ごとに更新することにした。

            キャッシュの更新(スケジュール処理)と取得(ウィジェット表示)で同じ関数を使えるようにするため、下記のような関数を作成。

            function lf_get_popular_lists( $use_cache = true ) {
            	
            	if ( $use_cache ) {
            		$out = get_transient( 'LF_POPULAR_LISTS' );
            		if( false !== $out ) {
            			return $out;
            		}
            	}
            
            	// アクセスカウントを多い順に10取得
            	$q = new WP_Query( array(
            		'post_type'      => 'post',
            		'category_name'  => 'list',
            		'post_status'    => 'publish',
            		'posts_per_page' => 10,
            		'meta_key'       => 'lf_counter',
            		'orderby'        => 'meta_value_num',
            		'order'          => 'DESC',
            		'fields'         => 'ids',
            	) );
            
            	$lists = '<ul>';
            	foreach( $q->posts as $id ){
            		$lists .= '<li><a href="'.get_post_permalink( $id ).'">'.get_the_title( $id ).'</a></li>'.PHP_EOL;			
            	}
            	$lists .= '<li><a href="'.home_url( '/category/list?orderby=popthisweek' ).'">(もっと見る)</a></li>'.PHP_EOL;			
            	$lists .= '</ul>';
            
            	// Transientにキャッシュ
            	set_transient( 'LF_POPULAR_LISTS', $lists );
            }

            この関数を1時間ごとに $use_cache = false で呼び出すようスケジュール登録した。

            if ( ! wp_next_scheduled( 'lf_event_popular_lists', array( false ) ) ) {
                if ( ! $ret = wp_schedule_event( time(), 'hourly', 'lf_event_popular_lists', array( false ), true ) ) {
                    // エラー処理
                }
            }
            
            add_action( 'lf_event_popular_lists', 'lf_get_popular_lists', 10, 1 );

            キャッシュした10リストを表示するウィジェットを作成する

            カスタムウィジェットは WP_Widget クラスを継承して作成する必要があったが、最近ではブロックエディタから登録できるようになったので、ショートコードを作った。

            add_shortcode( 'lf_popular_lists' , 'lf_popular_lists' );
            function lf_popular_lists( $args ){
            
                $use_cache = true;
                $out = lf_get_popular_lists( $use_cache );
            
                return $out;
            }

            アーカイブページをアクセスカウント順に表示する

            ウィジェットは10個だけだが、すべてのリストをアクセス数の多い順に並べて見られる機能もつけた。これはカテゴリアーカイブページを流用した。具体的には、

            • <ROOT>/category/list → 通常の新着順
            • <ROOT>/category/list?orderby=popthisweek → 直近7日間のアクセス数順

            とする。以下は Code Snippet に登録したスニペット。

            // /category/list で始まる場合のみ読み込む
            if ( 0 !== strpos( $_SERVER['REQUEST_URI'], '/category/list' ) ) {
                return;
            }
            
            add_action( 'pre_get_posts', 'lf_pre_get_posts_list', 10, 1 );
            function lf_pre_get_posts_list( $query ) {
            
                if ( $query->is_main_query() ) {
            
                    if ( 'popthisweek' == get_query_var( 'orderby', '' ) ) {
            
                        $query->set( 'meta_key', 'lf_counter' );
                        $query->set( 'orderby',  'meta_value_num date' );
                        $query->set( 'order',    'DESC');
                    }
                }
            }

            Code Snippet は Snippet 全体を eval() するので、最初の if 文のように return するとそれ以降のコードは実行されない。アクションフック ‘pre_get_posts’ はほぼ全ページで実行され得るので、当該ページの表示時のみコールバックを登録するようにした。

          • アルゴリズムの特徴

            まえがき

            『アルゴリズムには三つの鍵となる特徴があり、いずれも私たちにとって重要であり、またいずれも定義するのが幾分困難である。』

            リスト

            あとがき

            まえがきを含めて、ダニエル・C・デネット 『思考の技法 直観ポンプと77の思考術』(2015年、青土社)より。26番めのツール「アルゴリズム」からの引用ですが、リスト作成にあたって文章を改変しています(原文は例示などが添えられていてわかりやすい反面、やや冗長なので)。

            基質中立性とは、本書の例を引用すると、長除法の手続きが書くもの(鉛筆やペン)にも書かれるもの(紙や羊皮紙)にも依存しないということ。

            純粋に論理的で、類推の余地がないほど単純なステップからなる、その実行によって常に同じ結果が保証される手続き

            この本からの他のリスト