Drafts

@cm3 の草稿置場 / 少々Wikiっぽく使っているので中身は適宜追記修正されます。

CIDOC に関するドキュメントの一部翻訳 その1:プロパティのプロパティ

Implementing the CIDOC Conceptual Reference Model in RDF_0.pdf

CIDOC CRM は 「プロパティのプロパティ」を許している。いわゆるロール概念に相当するようなサブプロパティの動的な生成である…という解釈も実は私の勝手なものであり、CIDOC としても RDF へのマッピングについては定まってはいない。ただ、「こうすればいいのではないか」と書いている文章があるので、それを翻訳する。

Properties of properties

As mentioned above, RDF does not support properties of properties. Therefore, users are recommended two ways to work around:

  1. The current properties of properties in the CRM have all as range “E55 Type”. Therefore they correspond to subtyping of the respective property by a local vocabulary.

  2. For the cases in which the local vocabulary is not fixed, there is a recommended form of reification via an auxiliary “property class”. This replaces the former recommendation to use E13 Attribute assignment in order to introduce user defined property types.

The two solutions have pros and cons with respect to query performance, user interface programming and flexibility to cater for a local, evolving terminology.

Solution A:

Users that have fixed vocabularies of property types for those properties foreseeing in the CRM a “type” or “Pxx.1” property, may transform these types into their own subproperties for the respective CRM properties, such a as "P3 has note":

Instead of P3 has note (P3.1 has type : parts description) declare

<rdf:Property rdf:about="P3_parts_description">
<rdfs:domain rdf:resource="E1_CRM_Entity"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
<rdfs:subPropertyOf rdf:resource="P3_has_note"/>
</rdf:Property>

This ensures that a graph using these subproperties can consistently be retrieved via their superproperties. In other terms, a system using this solution a) is query compatible with the CIDOC CRM without using properties of properties in the query and b) it ensures that typing a property instantiates the base property and therefore the complete graph is contained in the respective query answer. It is the most efficient implementation, both in terms of query performance and storage overhead. User interface programmers should query these additional subproperties and create at run-time selection lists of them, rather than hard-coding the vocabularies. If such extensions are widely built, they can reveal an emerging good practice and become subject to a standardization of its own. The drawback is that the vocabulary must be loaded to database platform before-hand, and this mechanism only applies to types of properties. It is the preferred solution.

In case users have no other choice than to deal with open vocabularies of property types, or would need extensions with properties of properties other than types, they should resort to solution B. This solution uses “property classes”, i.e., representing an n-ary property by an auxiliary RDF class, which are provided together with the CRM RDF Schema[12]. This solution is logically adequate and further extensible, but is more complex with respect to query formulation, has considerably slower query response times in current knowledge base platforms than the above and more storage overhead. It is more obvious for user interface programmers to create the respective selection lists, and users may introduce new types at runtime.

プロパティのプロパティ

上述したように,RDFはプロパティのプロパティをサポートしていません。そのため、ユーザーには対処として以下の2つの方法が推奨されます。

  1. 現在、CRM のプロパティのプロパティは、レンジとしてすべて "E55 Type "を持っています。そのため、独自語彙によるプロパティのサブタイプ化に対応しているということができます。
  2. 独自語彙が規定できない場合には、補助的な"プロパティクラス"を介して具体化(reification)することを推奨します。これは、ユーザ定義のプロパティ型を導入するためにE13 Attribute assignmentの割り当てを使用するという以前の推奨に取って代わるものです。

2つの対処は、クエリの性能、ユーザインタフェースのプログラミング、個別に進化する用語に対応できる柔軟性に関して、長所と短所があります。

解決策 A:プロパティタイプの固定語彙(以下の例では parts description)を持っているユーザは、CRM 内で「type」または「Pxx.1」プロパティを想定しているプロパティ(以下の例では has note)のタイプを、そのサブプロパティであり独自のものに変換することができます。

P3 has note(P3.1 has type : parts description)という CIDOC の記法の代わりに、以下のように宣言します。

<rdf:Property rdf:about="P3_parts_description">
<rdfs:domain rdf:resource="E1_CRM_Entity"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
<rdfs:subPropertyOf rdf:resource="P3_has_note"/>
</rdf:Property>

これにより、これらのサブプロパティを使用したグラフは、それらのスーパープロパティを介して一貫して検索することができます。言い換えれば、この対処法を使用するシステムは、a) クエリでプロパティのプロパティを使用せずにCIDOC CRMとクエリにおける互換性があり、b) プロパティをタイプ付けすると元のプロパティがインスタンス化されるため、完全なグラフがそれぞれのクエリの回答に含まれていることを保証します。これは、クエリのパフォーマンスとストレージの余分な消費の両方の観点から、最も効率的な実装です。ユーザインターフェースのプログラマーは、語彙をハードコーディングするのではなく、これらの追加のサブプロパティを検索して、実行時に選択リストを作成する必要があります。このような拡張機能が広く構築されれば、新たなグッドプラクティスを発見し、それ自体が標準化の対象となる可能性があります。欠点は、語彙を事前にデータベースプラットフォームにロ読み込まなければならないことと、このメカニズムはプロパティのタイプにのみ適用されるという点です。ともかく、基本的には、こちらが好ましい対処法です。

ユーザがまだ決まっていないプロパティタイプの語彙に対応する必要があるときや、タイプ以外のプロパティのプロパティを拡張する必要があるときには、対処法Bに頼る必要があります。この対処法では、CRM RDF スキーマと一緒に提供されている"プロパティクラス" PC0_Typed_CRM_Property 、つまり n-ary のプロパティを補助 RDF クラスで表現したものを利用しています。この対処法は論理的には適切であり、さらに拡張性もあるが、クエリの作成が複雑になり、現在の知識ベースプラットフォームでは対処法Aに比べてクエリの応答時間がかなり遅く、ストレージの余分な消費が大きい。ユーザインターフェースのプログラマーがそれぞれの選択リストを作成する必要性はより明白であり、ユーザーは実行時に新しいタイプを導入する可能性がある。


簡単に言うと、

A: サブプロパティとして新しいプロパティを定義する

  • クエリ作りやすい
  • クエリの実行速度は速い
  • 余分なデータの発生無し

B: プロパティクラスのインスタンスとして新しいプロパティを定義する

  • 事前にプロパティを詳細化する用語のリストを用意する必要が無いので作成できるプロパティの自由度が高い
  • タイプ以外のレンジをもつプロパティのプロパティにも適用可能
  • 論理的に正確な表現である

Aを使えるときはAを使え。ちなみに How to model Roles in the CIDOC‐CRM RDF encoding というスライドに対処法Cとして、主語となるエンティティの P2 has noteに説明として、そのプロパティの詳細を書いておくという手法が書かれている。その pros cons を私なりにまとめると、

C: 主語に説明としてプロパティの詳細を記述する

  • 〇 クエリも簡単、プロパティの詳細も自由に書けるので自由度も高い
  • × 説明文は自然言語なので「あるキーワードを含むようなプロパティの詳細」みたいなのを条件にクエリにしようとすると、クエリのパフォーマンスが悪い
  • × 対象の主語に繋がっているプロパティが多いと、どのプロパティを詳細化しているのかは説明をよく読んでグラフと照らし合わせないと分からない

Twitterを見てる人はまあ知ってるかもしれないけど、あるきっかけで

amzn.to

を読むことにしたので、その読書記録をつけようとしたら、いわゆるスピリチュアルな部分の大きな本で、僕は「そのスピリチュアル的語りがなぜ有効に作用する(と期待される)のか」をほぼ自動的に考えてしまうので、普通に読めないので、30日分を10日で要約・変奏してから適切に実践しようと思った。内容はかなり改変しているので、本質的に読書記録ですらないです。良い子はこんな本の読み方をしないように。10日かけて加筆していきます。忙しい日も多いので、さぼる日も見込んで、図書館の本を返すまで(=2週間)が期限です→ちゃんと14日間で約10000字書ききりました。章タイトルは[元タイトル]/[僕の考えたタイトル]です。25のようにゼロから私が作った章もあれば、14や30のように8割がた僕が考えた章もあるので、これ、著作権的にも、売っても大丈夫なレベルで原本と異なります。

<1>Your mind is beautiful thing / You have an oracle.

頭で考えすぎることは感じることを遠ざけてしまいます。問題に、「適切に感じる」ことでアプローチする練習をしてみましょう。

  • 人生に関わる問題を1つ選び、頭で考えて具体的に細かく書いてください
  • その問題に伴う感情をゆっくりと味わってください
  • それを解決する意思があなたにはあるし、あなたの直観は十分にその方法を正しく示してくれていると理解しましょう。
  • 思いつくまま取り組んでみてください。ね?うまくいっちゃうでしょう?

<2>The Importance of value / You have a right to spend your life for you.

罪悪感や無価値感は、それを埋め合わせるために相手を傷つけたり、自分の行動を否定することで問題から逃避することに繋がってしまいます。 自らの価値を自ら適切に肯定する必要があります。自分自身が良い伴侶で居られるために。

  • 忙しくしたり、無思慮な快楽を求めたり、考えたくもないことを考えるのに時間を費やしたりすることを、「精神的自傷行為」と名付けましょう。あなたはどんな精神的自傷行為をしてしまいますか?
  • 次にそういう行動をしようとした時に、一度立ち止まって、それをしない選択をしてください。きっと、大変です。「そうは言っても…」と思うかもしれません。でも、あなたにはそれを拒否する勇気があります。

<3>The purpose of life / The purpose of life

あなたが頭で考えた計画を手放して、ただただ、幸せになるために何をすべきかを「感じ」ましょう。

  • 今、計画的に求めている幸せとその計画を書き出してみましょう。昇進のための努力、恋人を見つけるための努力、そういったものです。
  • それぞれの「幸せ」はなぜ欲しいのですか?それがなぜあなたにとって幸せなのか、どのように幸せなのか、感じてください。それで幸せに向かうには十分なのです。

<4>You have what you want / Remove obstacles

あなたがパートナーを得ていないのには無意識もしくは意識的に合理的な理由もあるものです。例えば、独立性や自由を失いたくない、といった理由です。

  • パートナーを持たないことによって得ている利益、避けている不利益を書き出してみましょう
  • その利益を算定してみてください。その利益を得るのに、一年間でいくらまでなら払いますか?
  • パートナーを持つことが合理的になるようにリフレーミングしてみる、もしくは、パートナーを持つことによって得る利益などと天秤にかけることで挙げた利益を諦める決断をしてください。

<5>Saying Yes to life / Just do it

前に進むのは、慣れです。

  • パートナーを得るための行動、できるだけささやかな行動を1つ考えてください。
  • それを、やりましょう。

<6>Opening the door / An open mind attracts unlimited opportunities

別れや傷ついた経験を通して、心を閉ざしていることもあるでしょう。そういう場合は、まず心を開くのも重要です。

  • 今、自分が心を閉ざしていると見えるとしたら、どういう部分でしょうか?
  • その状態や行動を変えることをイメージしてみてください。

<7>The power of forgiveness / Remove repulsive anger

「憎むことでいつまでも あいつに縛られないで」(中島みゆき「空と君のあいだに」)

  • 憎んでる人がいたら、その憎みを書き出してください。ダラダラと愚痴っぽくならずに、簡潔に。
  • その憎しみであなたがより不幸になってはいけません。あなたは憎しみを手元から手放さねばなりません。その憎しみを思い出したら、天に「ヨロシク!」と唱えましょう。それをなんとかするのはあなたの役目ではありません。

<8>Feeling your feelings! / Name your feelings

感情を感じる練習です。

  • 何か一つの感情にたいする知覚を深めようと意識してください。ポジティブな感情でもネガティブな感情でも良いです。
  • 感情に大まかな名前、細かな形容を付していってください。自分の感情に名前を付けられるようになると、より深く感情を知覚できるようになります。

<9>The truth will set you free! / ἐποχή helps feel it appropriately

時に苦しみを事前に避けるために「不感」になっていることがあります。相手の苦痛を自分の苦痛と捉えるような「融合」も自身の感情を覆い隠してしまうという意味で「不感」の一種です。そこから適切に感じるのに、まず判断を経ない事実を認識する練習をしましょう。

  • 人間関係に関わる事柄を一つ思い浮かべてください。
  • それに関わる事実を、判断を差しはさまずにできるだけ書き下してください。自分の中に沸いたと認識した、ありとあらゆる感情も対象です。多くの細かい感情が沸き上がっては消えているはずです。
  • それらの事実記述を元に、その事柄について「私は〇〇と感じた」という形になるように、自分の感情を総括してみてください。

<10>Letting go of the past opens up the present / Reserve a seat for your partner

  • あなたのこころを占めている事柄や人を、その重要度(%)と対象で列挙していってください。重要度の合計が100%を超えても気にせずに。
  • もし挙げた中にパートナーの候補が居れば、それの%は十分でしたか?もし、居なければ、何%残りましたか?

空白が十分でなければ、今持っている事柄を手放す必要があります。手放すことをネガティブに捉えないでください。汚い部屋を掃除するように、煩雑なデザインをスッキリデザインしなおすように、創造的でポジティブな行為として、持っている事柄を整理しなおして、十分な空きを確保した、理想の割合を作ってください。いつでも確認できる場所に書いておきましょう。

<11>You can have what you want if you want what you have! / Goal that's too high is an obstacle for your true goal

〇〇すべき、××な人をパートナーにすべき、そんな考えが自身を顧みない強迫観念になっているならば、それは幸せになることを阻んでしまっています。妥協をしろと言っているのではありません。具体的な人を思い浮かべて、まあ完璧じゃないけれどこの人でいいか、と考えるのは妥協です。そうではなく、自分の幸せに不必要な目標をたくさん抱えているならば、それを手放さなければならないのです。妥協してしまわない方法は29日目にお教えしますから、安心してください。

  • 自分やパートナーに求めていることを書き出してください。
  • それらは本当に幸せになるために必要なことか、を検討するのではなく、特にそれらは必要ではないという前提で、それらの要求が満たされなくても幸せな自分を一つ一つ想像してみてください。

<12>Guilt, unworthiness and fear are merely illusions / Remove guilt, unworthiness and fear

ネガティブな感情はありのまま持ったままで無視することが可能です。既に憎しみについては7日目に手放しました。罪悪感、無価値感、恐れについても同様に手放してみましょう。

  • 自分を好きと言ってくれる素敵なパートナーを想像してください
  • パートナーになることを想像した時に感じるだろう、罪悪感、無価値感、恐れを書き出してください。
  • それらは手元にあると邪魔です。解決する必要はとりあえずありません。それらのネガティブな感情を思い出したら、ただ「ソンナコトナイヨ!」と言ってくれる守護天使を想像しましょう。

<13>Freeing yourself from your life of fantasy / Purify your requirements

素敵なパートナーに幻想を抱くのは、あなたの罪悪感、無価値感、恐れの結果だったりします。

  • 想像した素敵なパートナーの「素敵さ」を書き出してみましょう
  • もし、それを求めるのがあなたの罪悪感、無価値感、恐れの結果だったとしたら、どんな感情が原因でしょうか
  • それらの罪悪感、無価値感、恐れを手放してみましょう。

<14>If it hurts, It isn't love / You never know why it hurts

モラハラをするパートナーといった個人的なもの、男尊女卑的な体制が残る社会による抑圧、さまざまな外的な要因があなたを苦しめているかもしれません。確かに、そのつらさの原因のほとんどはあなたにはありません。問題はそのつらさを過剰に相手のせいにすることです。目の前に居る男は、男の代表ではありません。あなたにきつく当たる相手は、相手自身が何か傷ついているのかもしれません。自分の正しさや、相手の悪さを主張したいと思ったら、正義よりオープンさを求めてください。*1

  • 最近つらかったことを思い浮かべてください
  • その原因を書き出してみましょう
  • それぞれの原因について、「本当は〇〇だっただけ」という形で原因を否定してみましょう。
  • それを元に、「相手を責めそうになった時に、まず、問うてみる」ということを想像してください。

<15>Trust / Rebuild the image of trust

信頼とは、なんでも信じることではありません。相手に対する疑義も認識しつつ、そうではないということに基づいて行動することです。

  • 素敵なパートナーの不誠実な行動を想像してみてください
  • また、相手を信じる心を想像して、先ほどの想像を左手に、信じる想像を右手に握ったと想像しましょう。
  • それらは同じ信頼の両面です。握りこぶしを合わせて双方が溶けあって一つの信頼という感情になることを想像しましょう。

<16>Manifesting your life / PDCA

PDCAは Plan→ Do→ Check→ Act の略です。よく計画的にプロジェクトを進める際に使われるフレームワークです。

毎日計画して選択をし、その選択をより良いものにしていきましょう。寝る前に次の日に実現したいことを、なんでも、想像してください。そして、また次の日の寝る前に、実現できたか、できてなかったらどういう選択をすべきだったかを考え、次の行動に反映させてください。

どれだけ失敗してもかまいません。この改善ができるだけで、自信がわいてきます。

<17>Your attitude is your direction / To build happy together

恋においてロマンスは第一段階ですが、付き合い始めると「権力争い」と「無感覚」の困難な谷が待っており、それを乗り越えて共に幸せを創っていけるかが2人が理想のパートナーになれるかにとって重要です。困難に遭ったら、このレッスンで身に着けてきたいろいろな方法で、その困難を打ち破ってください。

  • 素敵なカップルを描いているフィクションをみつけて読んでみましょう、どのように幸せを共に創っているか感想文として描写してみてください

<18>Free your family, free yourself / All the poison will be dissolved

いわゆる「毒親」など、家族に問題を抱えた人たちは、それが自分が作る家族にまで及んでしまうのを恐れているかもしれません。完璧な家族なんて目指さなくて良いのです。あなたのおかげで、受け継いだ毒は少しは中和されているはずなのです。あなたの子供はあなたに毒を見出すかもしれない、でも、もっときっと綺麗になって、次の世代を創っていってくれるでしょう。

  • あなたの家族はどんな問題を抱えていたでしょう
  • あなたが抱える問題は少しはマシになったと思う点を書いてみてください

<19>Roles, rules and duties / Redesign your roles and rules

役割やルールは、時に、経路依存的に作られてしまい、あなたを縛ってしまいます。特に歳をとると、新しい役割を果たすことや、ルールを捨てて毎回試行錯誤することは、大変かもしれません。だからこそ、今、捨てられるものは捨ててしまいましょう。

  • あなたが与える一方で、受け取ることが少ない分野を挙げてください。それがあなたの社会の中での「役割」です。
  • あなたが持っているルール、それが守られないと傷ついたり、動揺したり、侮辱されたように感じたり、そういうルールを探し出して書いてみてください。
  • 変えるべきものがあれば、変える計画を立ててください。

<20>Family Roles / Recognize your bias through your role in your family

毒親とかとは関係なく、兄弟構成や親との関係などによって、家族の中で果たしていた役割があると思います。

  • 自分がどのような役割を果たしてきたかを挙げてください
  • それはあなたの無意識な偏りを形成しているので、その役割を果たさなくて済むように何ができるかを考えてみましょう

<21>Nothing is hard if you really want it / Not society but you matter

恋人のいない人が見下されたり、お金を持った人と付き合うことが羨ましがられたり、そういった社会の中の評価があなたがパートナーを得ることを妨げていることもあります。あなたが本当に得たいパートナーをちゃんとイメージできるようになりましょう。*2

  • あなたがパートナーを求めているのは、なぜですか?
  • あなたがパートナーに求めているものは、本当にあなたが求めているものですか?それぞれの要件を理由付けしてみましょう。

<22>Healing power struggles / Don't be obstinate

「こっちのやり方に従うか、さもなくばとっととでていけ」そういう考え方をしてしまうことがあるのならば、それは権力争いによって幸せを遠ざけている側面が少なからずあるということを意味しています。なぜ「こっちのやり方」にそんなに固執しなければならないのでしょうか。パートナーを屈服させても、それはあなたの勝ちにはなりません。パートナーの良さを毀損してしまうからです。もちろん、パートナーも変わりたいと望んでいるのならば、あなたが望む方向に一緒に変化するのは望ましいことです。ここで問題になっているのは、価値観の押し付け合いです。

  • まず、相手と衝突しがちな、自分の譲れないものを考えてみましょう。
  • それはそのままにして、相手と衝突しないようにするにはどのように工夫すればよいでしょうか。
  • そもそも、なぜそれがあなたにとって譲れないものになってしまっているのでしょうか。

<23>Transforming boredom / Make the relationship inexhaustible

倦怠は恋の進展を妨げますが、倦怠は何から生まれるか考えたことありますか?あなたが面白い人ではないから?相手が面白い人ではないから?そうではないのです、あなたが犠牲を大事だと思い込んでいるからです。自分の素晴らしい部分を相手に与え続けて、枯渇してきたときに、倦怠が生まれるのです。そもそも、倦怠の前にロマンスが無ければ倦怠は生まれないのですから、枯渇こそが問題なのです。自分を犠牲にして与えなければならないという愛は必然的に枯渇します。あなたがあなたを犠牲にできる程度には限度があるからです。与えつつ受け取るのが愛であり、時には相手から受け取ろうとしてください。そして、与えることと受け取ることが表裏一体になるようにしていくと、倦怠はやってこなくなります。

  • あなたが口にしない不満は何でしょうか、それを口にすることで関係を壊してしまうことを恐れていますが、そうやって消極的に問題を避けることで、倦怠は生まれます。建設的にその不満を解消するために、相手にそれを伝えてるやり方を身に着ける必要があります。
  • 自覚する:これまでよく犠牲にしてきたものを書き出してみましょう。
  • 伝える:犠牲はあなたの側の問題だったことを忘れずに、相手を責めず、その犠牲を伝える言葉を考えましょう。
  • 許す:関係者すべてを許してください。犠牲が解決できれば良いですが、もしできなかったとしても、一歩前進したと感じられるはずです。
  • 選択する:犠牲のために与えるのではなく、純粋に与える行為に変化すれば、枯渇することは無くなります。

<24> Commitment: The gateway to freedom / Power of devotion

献身はパートナーシップにおいて重要な行為です。犠牲と献身は違います。献身は無目的に利益とは関係なく行われ、犠牲は目的のために利益を害することです。犠牲を払う際はしばしば見返りを期待していますが、献身では見返りを期待しません。100%の献身を体感してみることはパートナーシップにおいて重要なことです。

  • 誰かに100%の献身を行ってください。自分がしたいと思える、相手も喜びそうなこと、そして見返りを期待しないことです。
  • その時に取った行動、感じた感情を味わってください。

<25> As you believe, so shall it be / Power of leeway

余裕が大事だということはよく言われます。余裕がある人が素敵に見えるとか、余裕があるから人にやさしくなれるとか、献身も余裕がないとなかなかできません。最終的には心の余裕が必要なのですが、衣食住のような生命と直結する部分と、時間的な余裕が、心の余裕に繋がります*3

  • 生活を見直してみましょう、衣食住に関して余裕を持ててないと思う部分はありますか?収入は今のままで、余裕を感じるための工夫を考えてみましょう。
  • 時間的余裕を持ちましょう。何もしない1時間の予定というのを入れてください。結局なにかしてしまっても良いのですが、いつもやっていること、はやらないようにしてください。

<26> Do you want your relationships or your story? / Is your partner written in your autobiography?

自分の人生のストーリーを表現するのは、自己認識を振り返るのにとても良い手段です。被害で語られる内容が、実は自分の「選択」を覆い隠すため、といったことはよくあることです。そのストーリーの先に自然に素敵なパートナーが現れるようでなければ、現れないのです。

  • 10分間かけて、自分の人間関係のストーリーを1ページ分書き出してください
  • そのストーリーに見られるパターンやクセを見つけてください
  • なぜそんなパターンがあるのでしょう?
  • より良いストーリーにするためにそのパターンとは違うパターンを想像してみましょう

<27>Grace of intimacy / Grace of intimacy

親密さが自分に何を与えてくれるかを感じることは、素敵なパートナーを得るのにとって重要なことです。ただ、多くの人々は、親密さを長らく味わっていなかったりします。自分が行動することで親密さを味わう、そういう練習をしてみましょう。

  • 誰かと親密なかかわりを持ってください。そんなに大層な親密さじゃなくてもかまいません。いつもの1日で感じる以上のものがあればよいのです。
  • その時に取った行動、感じた感情を味わってください。

<28>Feel the joy / Power of joy

素敵なパートナーを得られたらよろこびを感じるでしょうか?実は、よろこびがパートナーを引き寄せるという側面もまた強いのです。やる気をおこすには、まずやってみること、という脳科学の知見もあります。

  • 何かよろこびを感じるような行動をしてみてください。
  • その時に取った行動、感じた感情を味わってください。

<29> Temptations - Accept no substance / Accept no substance

相性が85%の相手が来たときに「それでも良いか」と妥協してはいけません。ここまでのレッスンで、社会的な価値観に縛られたり、自分の負の側面を補ったりするような、幻想は既に消されているはずです。今、あなたが感じる自分にふさわしい相手は、本当にあなたのパートナーとなるべき相手の像です。もし、85%の相手が来たら、それは100%の相手が近づいている証拠です。

  • あとは、多くの人に出会うことが必要です、あなたが部屋に引きこもっていては出会うことはかなわないからです。新しい人に話しかけてみましょう。

<30> The path of relationships / Now, you have what you need

ここまでの振り返りであなたは必要なものを身に着けているはずです。とはいっても、生活の中で、忘れたり、元の状態に戻ってしまったりといったことはよくあることです。なんたって、たった30日間で劇的にあなたは変わろうとしたのですから、それを維持するためには、たまに思い出すことも必要なのです。

  • 気が向いたらランダムにサイコロでも振って、レッスンを復習してみてください。ちなみに、6回の出た目の合計…とかすると、5までのレッスンが復習できませんし、振るのも大変です。5*(一回目に出た目の数-1)+二回目に出た目の数とすると良いです。30以上の数字が出た時とかは適当に。
  • 必要な時に必要なレッスンを見つける必要があるかもしれません。自分なりにこの29個のレッスンをカテゴリ化するなどして、チートシートを作ってみてください。
  • これは多くの人に当てはまる問題で作られています。日常であなたが突き当たった問題が生じれば、新しい一章をここに加えてみてください。大丈夫です、あなたはその問題の答えを知っています。気づくだけで良いのです。

*4

*1:この章は特に意訳が激しいです。元々の文には、素敵な伴侶を手にするためなら辛いことを受け入れよ、とも読めなくもないことが書いてありました。そこまで脆弱になること、パートナーを見つけることを人生の最上位に置くことは、むしろ理性的に相手を求める姿勢を阻害してしまいます。そこで、辛さを自ら作り出してしまうことを解決する話なのだと考え、ほぼ0から書きました。キレる私をやめたい ~夫をグーで殴る妻をやめるまで~ (バンブーコミックス エッセイセレクション) | 田房永子 | 女性マンガ | Kindleストア | Amazonなんかもこの話に関連してそうなので読んでみます。

*2:ほぼ4日目と重複していたので、それとは違う話をするために、元々の話ではメインではないことを引き出しています。ここらへんで繰り返しが多くなってくるのは著者がネタ出しに疲れたのか、繰り返して考えることが効果を生むのか分からないのですが、なるべくいろんな観点を与えたほうが良いと思いこうしています。

*3:14日目と似たような内容で、今度は毒親的な対象について書かれていました。何が言いたいのかあまりよく分からなかったので、代わりに勝手に1つ作りました。

*4:原文はまとめのような文章だったので、30日の一週間後に行うこととかそこらへんのappendix的な章から構成しています

Atom Image Helper の宣伝

AtomMarkdown に画像を張り付けるときに同じ階層の assets フォルダに画像を入れて相対パスをペーストしてくれるパッケージがあるんだけど bigyuki/markdown-image-helper 作者がもうメンテしないって言ってるし、僕は他の類似の拡張が Markdown 依存すぎて嫌なので( HTML 直書きでも使うじゃん)、メンテを非公式に勝手に引き継ぐことにした。前にもバグと修正方法の報告を issue にしてて、コード内容は把握してたので。

Atom本体もDecaffeinateしてるしと思って、coffeescript から生のjsに直したら、そのせいかしらんけど、読み込みも53msから18msに大幅に速くなったよ。名前からもMarkdown取って、書く対象が js とかの場合は ./assets じゃなくて ../assets に保存したいとかもあるだろうからディレクトリのパスを設定で変更可能にしました。よかったら使ってみてね。

データバックアップの体制をどうデザインしたらよいのか

以下は、「だれか、もうちょっとこういうことを体系化して考えている人はいないのか」という悲鳴のような駄文です。


大規模なバックアップだと、テープが信頼性高くて速いとか、そういう話もあるけど、個人でテープでデータをバックアップするというのは初期投資が大きすぎてあまり選択肢にならなかったりする。そういう話はデータのバックアップは複数必要en)こういうところに書かれていたりするけど、あまり論文では見ない(当然と言えば当然?)。iPRESだと、実務者もいるので、テープからのデータの救出の実務的な論文 とかはある(あんまりちゃんと読んでないけど)。

3-2-1ルールとかはググるとたくさんヒットするくらい有名だけど、特に由来とか知らないし、学術的な背景があるとは思えない。そもそも長期保存ネタ全般そうだけど、直接「長期保存できること」を指標にすると実験が長期にわたるし、技術面以外の要素が大きすぎて、論文化しにくい。3-2-1ルールはEcological Informatics - Data Management and Knowledge Discovery | Friedrich Recknagel | Springer の 6.2.10 Protect Your Data とかで言及されてたりするし、他にもData Management とか見てると、研究データ共有の文脈で出てくる Data Management Plan とかと絡んでバックアップのことが書かれてたりするので、教条的dogmaticになりがちではあるが、"Data Management" というのはデータバックアップを考えるための現代(←ウェブ的には20年前は古代なので…)的な一つのキーワードだと思う。ビジネスの文脈でも「多くの人がバックアップは成熟市場だと考えているが、バックアップにとどまらず、データマネジメントにシフトすることで大きな成長が見込める」 という口上が見られたりもする。そして、その観点から、

バックアップ要件として考えるべき点には、大きく8つのポイントがあるという。具体的には、「場所」「対象」「データ量」「管理性」「災害対策」「データ保護」「セキュリティ対策」「データの再利用性」。

くらいの要素分解は可能だろう(「本当のDX」を実現するために必要なデータマネジメント、データバックアップの在り方とは:“2025年の崖”に向けたデータ管理環境の整備を - @IT)。ぜーんぜんMECEじゃないので要素分解と呼ぶのも躊躇はあるけど。3-2-1を守っていても、チェックする頻度が低ければ危ないのだけれど(いつの間にか壊れているということが起こる)そういう話は「管理性」の詳細化になるだろうか。

内省的に考えて、そういう体系を立てることは前述のように教条的になりがちで弊害も多い。そこで、失敗学的なアプローチで過去の様々な事件(例:「33自治体のデータがIaaSから消失」、日本電子計算がシステム障害の詳細明かす | 日経クロステック(xTECH)レンタルサーバーで「大規模障害」 重要データが消失、企業に衝撃走る: J-CAST ニュース【全文表示】GitLab.comが操作ミスで本番データベース喪失。5つあったはずのバックアップ手段は役立たず、頼みの綱は6時間前に偶然取ったスナップショット - Publickey)、ファーストサーバ障害、深刻化する大規模「データ消失」  :日本経済新聞)を体系的に蓄積・整理して、知見を得る、くらいは必要かもしれない。もしくはもう一歩踏み込んで、インタビューや調査をやって、失敗を丁寧に記述するところから始める。


あと、ディレクトリの構成も難しい。アーカイブとバックアップの切り分け として、利用頻度が低いものをアーカイブ、使っているものはバックアップと分けることで、バックアップの頻度やアーカイブのメンテナンスの頻度を最適化できるのだけど、利用頻度と意味的構造はもちろん異なる。プロジェクトAとプロジェクトBそれぞれに、アーカイブ部分とバックアップ部分が生じる。じゃあ、分ければいいじゃないかと思うだろうが、プロジェクトAのbinとdocsにもアーカイブとバックアップが生じる。では、すべてのディレクトリに.archiveディレクトリを作ってそれをアーカイブとする?ディレクトリごとアーカイブするときは、バックアップフォルダに空のディレクトリが生じる。まあ、そのくらいは許容するとして、ディレクトリツリーの構造を変更したときに整合性をどうやって取る?…そう単純ではない。

個人的に、いまのところ手元では、プロジェクトごとに

  • project.cloud 利用頻度高。プロジェクト管理のメイン(Dropbox, PCメイン=PCサブ, NASで保存)
  • project.local 利用頻度高。Dropboxに入れるにはサイズが大きい、ファイル数が多い、ローカルに依存が大きいもの。(それぞれのPCごとに内容が異なるので、ポータブルHDDとNASにPCの名前のサブディレクトリを切って保存。ファイルがデカかろうと基本的にはコピーするが、場合によっては common というディレクトリ以下に共通のものを入れたりはしている)
  • project.archive 利用頻度低。なるべく構造をフラットにしている。(ポータブルHDDとNASとPCサブに保存)

の3つに分けて、

  • PCメイン
  • PCサブ
  • NAS
  • ポータブルHDD
  • Dropbox

のうち最低3つにバックアップされるようにしている*1。そして、この3種類の構造を project.cloud にドキュメンテーションとしてちゃんと書くという形。ドキュメンテーションの際は OAIS も少しは意識しているが、どのレイヤーでどのようにOAISを取り入れるかも難しいと思ってる。

その他参考:

*1:2014-02-08からそういう運用にしていた。これ本格的に考え始めたのは、2013年に会議論文だした研究のデータの一部が吹き飛んで、復活できず、かなり人力でゴリゴリ頑張る系の仕事だったので、ジャーナル化を断念したからだったと思う…

動画の画像形式のvobsub字幕ファイルをテキストsrt化する

あるドラマのDVDを購入して、それを使ってちょっとしたアプリケーションを作ろうと思った。 アイデアの中心は、字幕ファイルを引き出して、アノテーションを行って、そのアノテーション(=動画の解説)を中心に元の動画を見れるようにする/動画を中心にその解説を見れるようにする、ということだった。土日に趣味でやっているが、営利を目的としない上演等(第38条) 相当でドラマ自体も学会で放映はできるだろうから、機会があれば披露するかもしれない。

DVDから字幕を含め、動画ファイルを引き出すには HandBrake: Open Source Video Transcoder を使った。特に暗号化とかはされていなかったのか勝手に裏で解除してるのかは知らないが、さっくりできたので、「私的使用目的であっても,暗号方式による技術的保護手段の回避により可能となった複製を,その事実を知りながら行う場合には,民事上違法」 というのには引っかからないはずである。

そこで字幕付きの mkv ファイルに変換するが、中に含まれている字幕ファイルは実は画像だった。確かに再生時に VideoLAN のフォント設定を変えても全然反映されないなと思っていたのだ。中に含まれているファイルを取り出すのには、HugFlash を使った。説明を読んでも全く関係なさそうに思えるソフトウェアだが、flashに限らず動画のコンテナフォーマットはだいたい適当に分解してくれるので便利なのだ。分解されて出てきたものは

  • delay_info.txt(音声と動画のズレについての情報が記述されている)
  • m4a(音声)
  • mp4(動画)
  • idx(VobSub index file。テキスト形式で動画の設定や字幕を付ける時間位置のリストが示されている)
  • sub(実際の字幕が固められている)

の5つのファイル。字幕に関係するのは idx と sub のファイルで、変換ツールを試しまくった。ちなみにsubが画像だったと言ったが、それは ここ に記述されている形式に則っていると思われる。後述の成功した subp2png が spudec.h を使ってて、それがこの形式を扱っているので。Matroska (mkv) 自体は字幕の取り扱いがかなり柔軟であり、画像でもテキストでも組み込めるが、そこの仕組みはあまり詳しくないです。

まず、おススメから紹介すると

SubtitleEdit

https://github.com/SubtitleEdit/subtitleedit

エディタなのだが、 Tesseract が同梱されているので OCR ができる。また、あやふやなOCRについては画像をみながら訂正できるなどの利便性もある。

f:id:cm3ak:20200526223520p:plain
Subtitle Edit で最新の Tesseract を使う

デフォルトでは2020/5現在Tesseract 3系を使うようになっており、とても精度が悪く、およそ使えたものではなかった。プルダウンメニューで 5系を使うように変えなければいけない。


他に成功したものとしてはプログラミング知識皆無でオンラインでできる次のもの。

Subtitle Tools

https://subtitletools.com/convert-to-srt-online

オンラインのツール。プレミアム会員じゃないと結構待たされた。はじめ7人待ちで、途中で1人プレミアム会員の割り込みがあって、1時間くらい待ったかな。でも、ほぼ知識なしで十分満足できるものが出てくるという意味では超便利。「♪♪」が「rr」と認識されていたり、英語に混じる多国語のアクセント記号が無視されたりといった程度の誤認識で、十分に使い物になる。

f:id:cm3ak:20200523183859p:plain
subtitletools の修正画面

プレミアム会員なら画像ファイルを見ながら修正を施すこともできるようだ。ただし、目的がアップロードそのものになく公開されない前提でアップロードしているとはいえ、字幕が含まれるデータをアップロードすることになるので、法的にはグレーだろうけれど、ちょっと不安である。そもそも警察は細かいことが理解できないし…。ちなみに字幕だけでも違法アップロードで逮捕例はある→ 映画の日本語字幕を勝手に作成してアップロード、国内初の逮捕者 -INTERNET Watch


次のものは簡単に使えてシンプルなツールで、srt ファイルは生成されるが、idx ファイルを利用していないために字幕の時刻が正しく生成されない。

pyvobsub2srt

https://github.com/andrewjw/pyvobsub2srt

実質100行のスクリプト。せっかくだから解説しよう。main は引数や環境を読み込みつつ process_file という関数を読み込んでいて、そこから3つの関数を呼ぶという構成になっている。

  • process_file: mainからまず呼ばれている関数。subp2png という sub ファイルから画像を取り出すスクリプトを呼んでいる。これはOGMRip に含まれていて apt install ogmrip で使えるようになる。副産物としての時間と画像のリストが含まれているxmlを get_xml_text で解析して画像のリストを取り出し、必要に応じてImageMagickのconvert関数 や自前の should_invert 関数で画像の前処理の判別をし、get_subtitle_text でテキストを取り出して SRTのフォーマットにして吐き出している。
  • get_subtitle_text: pyocr で画像から文字にしている。
  • should_invert: 字幕は背景と区別するように輪郭を別の色で囲っていることが多い。場合によっては背景色と文字色が同じで輪郭だけが別の色ということもある。それが認識を妨げかねないので、(0,0) の色を背景色とみなし、順に走査していって初めて出会った別の色を枠の色、次にであった別の色を文字色とみなし、それを元に (背景色, 画像を色反転させるべきか) のペアを返している。
  • get_xml_text: xmlを解析してimageタグの中にある画像ファイルのパスをリストとして返す。

途中、eng の traindata が無いという tesseract のエラーがあったけれど、tessdata/eng.traineddata at master · tesseract-ocr/tessdata からダウンロードしてエラーに言われた通りの場所に置けば大丈夫だった。あと、Pythonは3系で使いたいから、2to3 - Python 2 から 3 への自動コード変換 — Python 3.8.3 ドキュメント をしたり、3系では不要な.encode("utf8") を消したりした。一応python3対応したということでフォークしておいた。

cm3/pyvobsub2srt: A Python script to convert vobsub subtitles into srt format using tesseract for ocr

subp2png の利用している spudec.c が idx を使っていないので xml 生成の時点で時間情報が不正確だ。この点をスクリプトの方で直せば使い物になるが SubtitleEdit の方が上手くいってしまったので、放置している。


他に試したツールを列挙しておく。

  • MKVToolNix これはsubからではなく、MKVから直接字幕を読み込める。確かにGUIでは読み込みに成功しているのがわかるのだが、そこから画像を取り出すには別途 MKVExtractGUI-2 download | SourceForge.net というものを使う必要があり、ここのレビューに書かれているように、最新のMKVToolNixに対しては使えなくなってしまっているようだ。
  • CCExtractor/ccextractor: CCExtractor - Official version maintained by the core team 基本はコマンドラインで使うもので、GUIで複雑なオプションを設定できるものがついてくる。色々設定をいじってみたが、プレビューでは文字化けしているし、そもそも結果が出力されないわで、諦めた。あとで Google Summer of Code – Work Product Submission – Abhinav Shukla こんなのがあるのに気づいたので、こういうのを使えばなんとかなるかも?
  • Aegisub Advanced Subtitle Editor これはコンバータではなく字幕のエディタなのだが、mkvやsubといった拡張子からの読み込みをサポートしているので、一応試してみた。ただ、字幕がテキストとして保存されている場合に限るようで、subファイルを読み込もうとしても "Cannot convert from utf-8 to binary" という的外れなエラーが出て読み込むことはできなかった。今回と同じく sub 拡張子を持つもので、テキスト形式なものとしてMicroDVD の形式があるのでそれを想定しているのかも。
  • ruediger/VobSub2SRT: Converts VobSub subtitles (.idx/.srt format) into .srt subtitles. Ubuntu 20系でインストールしようとしたのだが、"Unable to build: requires compiler support for the ISO C++ 2011 standard" 系のエラーが出て、"set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")" を CMakeLists.txt に追加しろみたいなアドバイスが大量にヒットするものの、うまくインストールにこぎつけなかった。

冷蔵庫の上で軽食をする

f:id:cm3ak:20200427004449j:plain

今住んでるのは寮のような建物で、Stay home ならぬ Stay room が推奨されているのもあって、お菓子や軽食程度ならできるだけ室内で摂ることにした。部屋は狭く、家具は持ち込みたくなかったので、軽食を取る場所として冷蔵庫の上を使っていたのだけれど、頻度が増えると少々改善したくなる。

改善要件:

  • 見た目が貧相ではない
  • 掃除が楽で衛生的
  • 耐熱(冷蔵庫の上は100度。それくらいは欲しい)

ダイソーの工作コーナーにあったポリプロピレンシートがぴったりだった。

f:id:cm3ak:20200427004456j:plain

耐熱120℃、耐冷-20℃。僕は怪我しやすいので、かどまるというカッターで角を取った。

あと、少しだけ冷蔵庫の上より幅が広かったので、ちょっと広がった感じになったのも嬉しい。

Node.js の "compiled against a different Node.js version using" エラー

Error: The module なんちゃら was compiled against a different Node.js version using というエラーが出たら、その当該のモジュールを削除して再インストールすればいい。

rm -rf node_modules/モジュール名
npm install モジュール名

出典