- 2020/08/01
起床。
所用ありRe:vale警察ラビチャを読み返していた。何度読み返しても本当に多角的に読み応えのあるいいテキストだ……。かつて好きだったものを今も好きだと言えること、素晴らしいことだ……。それだけが人間の連続性を担保してくれる……。などとぶつぶつ言いながら職をする。なんと工事は昼やっている工事と夜やっている工事で二箇所あるという新事実が発覚した。引っ越して以来近辺をずっと工事している気がするな。引き続きダンガンロンパ。白い髪の人が人気ってこういうことか……。これは私のオタク生の上でただある一点を理解するために必要な情報だったのでやってよかったかもしれん……。ダンガンロンパ、キャラクターとアクション部分は置いておくとしても推理パートに気に食わない部分が多い。議論の途中で異論を挟む形式なのだが指摘できる場所が複数ある、そこを指摘させてくれたら絶対気持ち良い場所を他キャラが言ってしまう、など。あと今さっき明らかな不適な証拠があったので怒ってゲームを中断してこれを書いている。ダンガンロンパをプレイする直前まで逆転裁判をプレイしていたので、どうしても比較してしまうな。ただ、この評価が普遍的なものなのかはどうかは全然自信がない。ここ数ヶ月積極的にゲームをやっていて思うのは、レビューサイトでいくら票が集まろうともゲームを通して感じる難易度、もっと言うと不快感も快感も他人と共有できるものではないということだ。つまりあらゆるゲームは大なり小なりナラティブであると言える。本(ゲームにおいてはシナリオでもよい)においては前提として共有されている、「あなたと私の手元にあるものは同じである」という前提が崩れることに因ると思う。それを共有しうる方法はSNSよりも実況動画が台頭して初めて、ゲームは共有の場をもったように思う。あ~ただでさえまとめきれてない内容だったのに夜中に書き始めたらいい時間になってしまった。明日起きたら手直しする……。 - 2020/07/31
起床。
工事が続いており一日中部屋が揺れている。さっきびっくりしたが夜中も工事を続けているようだ。交通量が多い道の工事は夜間も工事するようなスケジュールで進めるものらしい……。昨日の夜に地震が来たと思ったのはそれだったのか……。今日は緊急地震速報まであり賑やかな一日だった。前に日記でも言及したレシピを見ないために読む料理本(https://www.amazon.co.jp/gp/product/B0788G7L4K/ref=dbs_a_def_rwt_hsch_vapi_tkin_p1_i0)の順番が回って手元に来たのでぱらぱら眺めた。大体イメージしていたような本ではあった。買うか……?前から順番に料理を作っていくと腕が上がる問題集をくれとどこかで言った気がするが、それって単純にレシピ本のことだなと最近ようやく気がついた。だが問題は世に無数にある料理本の中からどの料理本を買うかということだ。上記本にしたって、私はこの作者のことを何も知らないのにそんな日々の暮らしに関わる全面の信頼を置いていいんだろうか……。これが小説だったら到底考えられないようなことだ……。多分レシピ本を信頼できるか決めるためにレシピを試作してみるというプロセスが必要なのだ。なんという長い道のり……。長い道のりと言えば、この本を借りるのも割と長い道のりだった。全然知らなかったのだがどうやら人気の本らしい。レシピを一時的に所有してもしょうがないので私はちょっと中身が見たかっただけなのだが。多少のサーバー代は負担してもいいから30分くらいオンラインで「立ち読み」ができるサービスができないものか。電子書籍では出版社のセールで近いことをやっている例はよくあるのだから技術としては全然問題なさそう。全書籍でそれができればいよいよ本の分野はオンラインストアの完全勝利と言えると思う。是非とも私が生きている間に勝利してくれ。ダンガンロンパ2を始めた。1は最終章の犯人というでかい事前情報があった(「プレイの予定がある人はこの先を絶対に読んではいけません!」とかいう注意書きなんて無力な代物なんだ)のだが、2は白い髪のキャラが人気であることしか知らない。ファーストインプレッションだがあまり愛着が持てそうなキャラがいないぞ……。大丈夫か……。 - 2020/07/30
起床。二度寝してしまった。そういう日もある。在宅の何がいいって9時まで寝ていても余裕で始業時刻に間に合うことだ。
ここ数ヶ月の私の生活を開示しておくと、出社回数1回、平均外出頻度は3日に1度と言ったところだ。そもそも外出が得意ではなく、前に一ヶ月日記を書いた時もつぶさに行動を記すことで自分の外出頻度の低さが露呈することを恥じていた嫌いがある。しかし瞬く間に世界がこんなことになってしまい、外食や旅行ができなくなってしまい苦しむ人を目の当たりにして、自分は本当に外に出ないことが苦にならない人間なのだということが明らかになってしまった。こう書くとすごく厨二っぽいんですけども……。言いたいのはそういうことではなく、相対的な位置を確認したことによってこれも一つの個性であると認める気概が湧いたということだ。でも全く変化がないかというとそうでもなく、一人言が増えた気がする。漫画やゲームをしながら結構な大声で「マジか~」とか「そうね~」などと言っている。一人で。窓が開いている。これは大丈夫な状態なのか?どうなんだ?それからこれは前からだが、一層ラジオを聞くようになった。特にコードを書いている時は都合がいい。同じラジオを延々と聞くので友達に気色悪がられた。作業用BGMだって同じものを繰り返し聞くのだからそれと変わらないと思うのだが、如何。ちなみにこれも聞きながら一人で笑っている。ずっと同じラジオを聞いていると笑いどころが事前にわかるので笑う準備をすることができる。粛々と職。なんだかずっと目眩がしていて怖いんだがどういうことだと思っていたら、午後になる頃にようやっと揺れているのは自分ではなく家だと気がついた。すぐ先でしている工事のせいで揺れているらしい。そんなに簡単に家って揺れるものなのか。違う意味でちょっと怖くなったが、地盤が弱いと建物に問題がなくてもそういうことがあるらしい。読者はどこにいるのか–書物の中の私たち (河出ブックス) 石原 千秋頑張って(頭脳を動員して、の意)読んでいる。読み終わったら全体の感想を書く。本題とは逸れるが(純文学では)文章中の表現をありきたりなものからずらすことで(文章量と理解の観点から?)読者が文章を読むスピードをコントロールできるという話があって面白かった。バエル – メギド72攻略wikiこの前のアップデートで適性のある霊宝が来たのが嬉しすぎて意味もなく眺めている。「奥義の後列チャージ付与は多くのメギドとシナジーを形成する~」から始まる文章、かなり良い。この手の攻略wikiのページが好きらしく、今やプレイしていない艦これもたまに嫁のページを覗きに行く。 - 2020/07/28また一ヶ月くらい日記書こっかな。起床。昨日夜更しをしたが、8時までに掃除機のフィルタを掃除してそのままゴミ捨てをしなければいけないのが不安だったらしく早く目が覚めた。そういうところがある。数日前に床に盛大にこぼしたコーヒーの粉をを掃除して以来、掃除機の排気臭が酷いことになっていたのでゴミ捨てついでにフィルタの掃除をしたかったのだ。こぼしたコーヒーの粉を吸う時、ひょっとしたら茶葉を掃除に使うようにコーヒー粉によって元々していた排気のホコリ臭が取れるのではないかと期待したが全くそんなことはなく、存在の耐えられない臭さになっただけだった。結局フィルタを掃除してもホコリ臭は取れなかった。10年くらい使っているからなぁ。掃除機と同時期に買った家電は他に冷蔵庫、電子レンジが挙げられるがどいつもぴんぴんしており、タフさにしみじみする。冷蔵庫はそろそろ買い替えてもう少し大きくしたいのだが、こういう物はいつ買い換える許可が降りるんだろう。掃除機のフィルタが臭うのは買い換える理由として妥当なのか?まだ動くのにな。でもそう言いながら一生動いていたらどうしよう。掃除機のメンテナンスをして気が大きくなったので4月に買ったドラム式洗濯機も塩素系洗剤で洗った。説明書通りにボタンを押したらこれから8時間かけて洗浄すると主張してきて目を疑った。洗剤には2、3ヶ月起きにこのような掃除をするべきとあったのでなんとなく1時間くらいで終わる作業と思っていた。8時間て。まぁ洗剤を入れてしまえば私がすることはなにもないので構わないのだが。長生きしろよと思いながらスタートボタンを押した。職。担当していた作業は順調に終わったが、今後の自学自習のことを考えていたら何者にもなれない人間について思いを馳せてしまいやや落ち込んだ。落ち込むとリストを作りがちなのだが、まさしくそのようにしてやや落ち着いた。現職についてどういうスタンスで語るかまだ考え中である。自作キーボードが特集されていると聞いたので「マツコの知らない世界」のアーカイブを見た。バラエティというものを久々に見たのだが大柄の女性がオタクに次々と酷いことを言うので怖かった。番組自体はそう大したことはなかったのだが、見ていたらまたふつふつと二台目が欲しくなってしまいしばらく自作キーボードカタログ(https://booth.pm/ja/items/2022662)を眺めていた。一代目を買うときは秋葉原に行く前にこのカタログを舐め回して候補を定めていたのだが、実機に触ってみたらロープロスイッチに撃ち抜かれてしまったのでキャップをいじるための2台目が欲しいのだ。うーむ、でもできればLily58(一台目)からは離れたデザインがいいなぁ。でも結局めちゃめちゃ欲しいキャップがある訳じゃないからなぁ。
- ソシャゲのシナリオをテキストデータに変換する(OCR編) 2020/07/05本日若干突破口が見えたので書きますかね。さて、前回は動画を切り抜いてテキストボックスだけの画像を保存することができました。これをテキストデータにしたいと思います。画像から文字を認識してテキストに変換する技術はOCR (Optical character recognition) と呼ばれるやつですね。pythonの場合はTesseractというソフトをpyocrモジュールから使うのが普通みたいですね。このTesseract(てっせらくと)が厄介でバージョンによってやれることが全然違います。v3.0x系はjTessBoxEditorというソフトを組み合わせてフォントを使った学習ができます。フォントがインストールされていれば(全ユーザーに対するインストールが必要)画像作るところから学習データを作るところまでやってくれます。認識する画像にゴミを加えることもできる。ちなみにメギドのフォントはスキップEらしいのでLETSを契約していれば使うことができます(https://lets-site.jp/)。学生のうちに入っておけということです。アイドリッシュセブンのフォントはアプリ内にクレジットされているようにニタラゴルイカなのでなんとBOOTHで買うことができます(https://typelabo.booth.pm/)。ウェイトはわからんが等幅04辺りではないか。ニタラゴルイカ、全然意識してなかったけどゲーム頻出フォントなんですねぇ(https://note.com/tsugumiarai/n/ndc0a9cf10a86)。で、スキップEはほとんど上手く認識できたのですが何故かニタラゴルイカの認識が全然上手くいかず……。文字の種類が少なければ学習の回数を増やして精度を上げられるみたいだが、日本語だとそういう訳にもいかないし……。そう思うとアルファベットに対して漢字を含む日本語はOCRにおいて圧倒的なハンデ不利があるな……まぁ中国語に比べたらマシか……。Tシャツに英語を書いてばっかの国みたいな話がありますが、日本語フォントがスタイリッシュになれないのはひらがなカタカナ漢字という全然形状の違う文字を含んでいる時点でもう全然まったくどうしようもないんだよな。勝てっこないのよ、アルファベットとか、アラビア語とか、あぁいう文字にさ。日本語のことは好きだが表記体系は好きじゃねぇ……。ちなみにTesseractの学習済みデータも日本語データには標準でアルファベットが入ってくる。入れないとまともに文章を識別できないもんな。すいませんね、お手数おかけしてね……。話が逸れた。それでニタラゴルイカが識別できなくてふてくされていたのですが一つ上のバージョンがあることを思い出しました。これが昨日。v4.x系は安定バージョンの中では最新で、LSTMを使ったエンジンを搭載しています。響きがかっこいいですね。LSTM (Long short-term memory) は自然言語処理モデルの一種で……私の理解するところで喋るとRNNの発展版で今まで入力された単語を適宜覚え適宜忘れながらも次にくる単語を予想するモデルです……。三ヶ月の付け焼き刃だからあまり突っ込まないでくれ。要するにv3では文字を認識して一文字一文字テキストを認識していたのに対して、v4では読み取ったそれらをある程度固まった文章として認識して、自然な文章になるかどうかで文字認識の結果を調整……ということをしているんでしょう……おそらく……。ただ問題はv4系ではフォントを使った学習ができないという点です。いや、正確にはあれ、Linux?あれを使えばできるっぽいんですけど、私はあれ系が全然できないのでできません。ターミナル、怖いよね。コントロールCが効かない時点でだいぶ怖い。フォントのデータがあるんだから学習した方が精度いいに決まってると思っていたが盲点でしたね。フォントがせっかく手元にあったしね。使いたかったんだよね。わかるよ。そういう訳でv4.1で試したら簡単でした。ニタラゴルイカの方はもう少し整形が必要そうなので(動画中でフェードアウトされたりするとフレーム抽出が厳しい)引き続きスキップEでいきましょう。#モジュール呼び出しfrom PIL import Imagefrom IPython.display import display_pngimport pyocrimport pyocr.buildersimport pprint#OCRdef ocr(img, languages):tools = pyocr.get_available_tools()tool = tools[0]builder = pyocr.builders.TextBuilder(tesseract_layout=6)txt = tool.image_to_string(img, lang=languages, builder = builder)return txt#フレーム抽出からOCRまでdef frame_ocr(frame_sel_list, c_max, language):text_list = []languages = languagefor i in frame_sel_list:temp = level_cor(i, c_max)temp = pil_con(temp)txt = ocr(temp, languages)text_list.append(txt)return text_listOCR前にグレースケールをさらに白黒画像に変換してます。日本語学習データは2種類あるけど重いデータの方がいい訳ではないっぽい……。結果。壊れたラジオになってる部分はキャラ名が出てるところなのでしょうがないですね。白抜きの上に影付きになっているからなんか別の画像処理が必要そう。肝心の台詞部分は……うーん7割くらいはあってる……?スキップEはv3の方がいいかもな……。v3ではこんな感じ。v4ではベレトの一人称が「僕」になってるのに対してv3は「濃」なのがそれぞれの特徴が出ていて面白いですね(本来は「儂」)。これから調整はしますが大枠はできたということでよしとしましょう。録画ファイル作るの面倒だな~。参考文献
- 4コマ漫画を描くぞ 2020/06/14
創作の話しよっかな。
さっき上げた4コマ漫画。https://twitter.com/osmnkih/status/1271793355396009985/photo/1元ネタツイ。すっぱいコーヒー @osmnkih 6月10日冗談のつもりで「役作りで髪切ることになったよ」って言ったらショックを受けて「切った髪貰ってもいい……?大事にするから……」などと口走るモモこの時点では漫画にできると思ってなかったけど、(「切った髪の毛を貰う」っていうテンプレート的ヤンデレ仕草にもいろんな感情があるけどモモの場合は「グッズ」みたいなもんだよな……。なんなら出会った頃から伸ばしてるから「思い出のグッズ」だな……。年輪みたいに髪に思い出が詰まっているのかもしれん……。その場合ユキはあんまり引かないだろうからヤンデレ台詞と状況の落差が面白いな……。)まで考えたら4コマ漫画にできる気がしてきた。【1コマ目】「切ることになったよ」より、切り終わった後の会話にした方がショックがでかくていいな。髪の長さも「思い出のグッズ」を連想させる会ったばかりの頃の長さの方がいい。でもユキが髪短いと一瞬いつの時代の話かわかりにくくなっちゃうな……。この前同居時代の4コマ描いたし……。あっ背景におかりん置いて事務所の会話にすればいいか。最後モモもユキもボケっぱなしになって終わりそうだったけど、おかりん出せばツッコミが入るしな。いいぞ。これはRe:vale4コマ頻出テクニックなので覚えておいた方がいい。他、大神万理、九条天などでも同等の効果が見込める。髪切った直後じゃないと「貰っていい?」が現実的じゃなくなっちゃうな。「さっき」って言わせとくか。テンポ崩れそうだし描き文字で。【2コマ目】「大事にするから……」の「そういう問題じゃねぇよ!」感が気に入ってるけどそこまでツッコミを入れるのは野暮か……。スタンダードでいいや。なんか毎回こういう表情のモモ描いてる気がする。上手に描けるようになってきたかも。描き文字は台詞メモの中に一緒に突っ込んでおくと描く時忘れなくて便利だよ。【3コマ目】髪を中心に持ってきて顔も隠したくないから構図はこれ一択。あ~これ年輪ちょっと浮いてない!?ここにもおかりんのツッコミ欲しいんだけど……そうするとモモとおかりんの会話が漫画の中心になっちゃうな……。2コマ目、4コマ目のツッコミは削れないからおかりんはここには出せない……。例えがなくても通じるかなぁ……でも木もう描いちゃったしな……。うーん、さらっとモモの台詞として書いてツッコミは読者に任せるか……。補助として(?)入れとこっかな……。モモの台詞だとすると年輪って単語は出てこないな。えーと、切り株?開くか?きりかぶ?【4コマ目】「いじらしいじゃないか^^」系でもよかったが素直に喜んでた方が落差があっていいな。おかりんのポーズ1コマ目と被っちゃった。まぁいいか。Re:valeの戯れを前に微動だにしてないという表現になるし。ウィッグであることには突っ込まないのがおかりんスタイル。今書きながら気がついたけど、年輪だとしても思い出が詰まっているのは頭頂部の髪であるべきだよな。まぁツッコミにしては難解すぎるからどうせ不採用だしいいか……。【5コマ目】この4コマの脇のやつという概念が好きなんだけど大抵全部描き終わった後に付け足すから結構面倒でサボりたくなる。サボると意図のわからない空白地帯が生まれてしまうよ……。こんな感じでネームを描いてあとは線を引いてバケツで色を塗る。ここに関して今述べることは特にない。最近3Dモデルを導入して複雑な構図を描くのがちょっと楽しくなりました。できた!https://twitter.com/osmnkih/status/1271793355396009985/photo/14コマ漫画は4コマという縛りの中で一つネタを成立させるというルールがあるので、そういうゲームとしてはなかなか面白いと思っている。このツイートも読んでほしい。すっぱいコーヒー @osmnkih 6月10日脱皮殻で抜いてるとこ見られて本体に尻尾の裏の鱗が柔らかいから使っていいですよって言われたホプ!? - ソシャゲのシナリオをテキストデータに変換する(フレーム抽出編) 2020/06/07
ある日元気にソシャゲのオタクがはまったばっかりの時に作るメモを書いていました。
段々苛立ってきた。令和にもなってテキストを探すためになんでこんなことをやっているんだ?ロード時間、必死に記憶をたどってあちこちの章をうろうろする時間、話の冒頭だけチェックして→やっぱ違ったかも→いややっぱこの話の最後の方だわってやる時間。あ~全部無駄。紙の本ってすごいな。テキストを大雑把に検索する方法って未だに紙の本が一番早い。シナリオ本が欲しい。次点でシナリオ検索ボックス。両方あるともっといい。ソーシャルゲームとしてのシナリオへの誠意……(「誠意」という言葉を私は世間で言う「愛情」のように容易に使いがちで宜しくないと思いますがここでいうシナリオへの誠意とはゲーム内でシナリオという要素が結局顧客の愛着、課金につながっていることを自覚した開発コストをかけろという要求を示しています)。しかし私は極めて理性的な人間なのでわかります。シナリオはゲームを起動させるためのインセンティブを担っているわけですよね。それからゲームのブランドとしてシナリオ本を出すためのコストも考慮しなければいけない。俺達は直打ちのtxtファイルでいいと言っても公式がそんなもの出すわけにはいかないんだ(でも突然WAVファイルを配布するゲームならワンチャンあるかもな)。世は大自己責任時代。ソシャゲのユーザーも楽しみ方は自らで見いださなければならないとされる。うーん、じゃあ自分でやるか。オートモードで録画するとシナリオが動画として保存できるから、ここからテキストが抽出できればそれでいいだろう。本当は録画さえ面倒くさいがそこはもうどうしようもないので妥協しましょう。しかしシナリオのオート機能って到底人が読めない速さで流れていくけど、なんのための機能なんだろうね。もしかして公式としてテキスト抽出を推奨しているのかな?(自己の正当化)#動画の切り出しimport cv2import matplotlib.pyplot as pltimport numpy as npimport timeimport winsounddef mov_info(cap):print(“フレームレート(枚数/second)”, cap.get(cv2.CAP_PROP_FPS))print(“フレーム枚数(枚数/second)”, cap.get(cv2.CAP_PROP_FRAME_COUNT))print(“秒数”, cap.get(cv2.CAP_PROP_FRAME_COUNT)/cap.get(cv2.CAP_PROP_FPS))(出力)フレームレート(枚数/second) 29.74832623603263フレーム枚数(枚数/second) 12819.0秒数 430.915まずはopencvで動画の情報を調べてみます。動画というのはパラパラ漫画です。このデータは430秒の動画が12819枚の画像で構成されているという訳だ。これを全部保存、閲覧するのは無駄なので、この中から必要な画像を抜き出していきます。# movieのキャプチャを配列に変換def mov_cap(capture, triming, grayscale, frame_sp):frame_list = []frame_del_list = []frame_prev = []framenum_prev = 0counter = 0frame_ls = list(np.arange(0, cap.get(cv2.CAP_PROP_FRAME_COUNT), frame_sp)) + [cap.get(cv2.CAP_PROP_FRAME_COUNT)]while True:ret, frame = capture.read()if not ret:breakframe = cv2.flip(frame, -1)#グレースケールif grayscale == True:frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#トリミングif triming == True:frame = frame[y1:y2, x1:x2]frame_list.append(frame)#1個目でないなら差を計算してframe_del_listに追加if frame_prev!=[]:frameDelta = cv2.absdiff(frame_prev, frame)frameDeltaSum = frameDeltaframe_del_list.append(frameDeltaSum)frame_prev = frameframenum_prev = cap.get(cv2.CAP_PROP_POS_FRAMES)counter += 1if counter >= len(frame_ls):breakcap.set(cv2.CAP_PROP_POS_FRAMES, frame_ls[counter])return frame_list, frame_del_listできた。動画から切り出された画像は 縦ピクセル数×横ピクセル数×3(RとGとB)の数字の行列で表現されます(正確には配列という)。どんな神絵師の絵も配列だと思うと楽しいね。「人間は突き詰めればタンパク質の塊(もっと分解すればアミノ酸)」みたいなもん。配列の操作は簡単です。まずはテキストボックスの座標を調べてトリミング。その後、RとGとBの値の平均を取ってグレースケールに変換。こうすると配列の長さと次元が減って軽くなる。そのあと、前フレームの画像の配列と今フレームの画像の配列を引き算して結果を保存。これで値が大きく動いた時に、テキストが切り替わったと判断できるというわけ。テキストボックスをトリミングしたのが効いてきて、動画の途中でソロモンが跳ねたりしてもテキストの動きだけ判断できるんですね。差分をヒストグラムと時系列の折れ線グラフで図示してみます。いいね。ヒストグラムが0に寄っていることは動画がほとんど動いていないことを示しています。頻度ががくっと落ちているところを「動いた」の検出閾値とすればいい、と。折れ線グラフは定期的に動画が動いていることを示しています。これを見ると約xxフレームでテキストが切り替わるようなので、全てのフレーム読み込む必要はなく、yyくらいの雑さでも問題ないことがわかります(パラメーターを書くとなんとなくよくなさそうなのでやってみたい人は自分で調べてみてね)。#フレーム抽出用start = time.time()frame_list, frame_del_list = mov_cap(cap, triming, grayscale, frame_sp)end = time.time()t = time.time() – startwinsound.Beep(523, 1500)print(t)上で書いた関数をこんな感じで動かしてみる。2分くらいかかった。Rを使っていた頃は時間がかかる処理が終わったあと電子レンジの音を鳴らしていたけどpythonになってエラーみたいな音しか鳴らせなくなっちゃった。通知音なんてなんでもいいと思ってたけどないと寂しいな。#配列2種から大きく変化している画像のみを抽出def frame_select(frame_list, frame_del_list, threshold):frame_sel = [i for (i, j) in enumerate(frame_del_list) if np.sum(j) > threshold]frame_sel_list = [j for i, j in enumerate(frame_list) if i in frame_sel]return frame_sel_list画像をダウンロードして見てみますか。うんうん。いいですね。一章で大体60MB、784枚か。画面がフェードアウトするところなんかでやや無駄な画像を保存している様子。これは閾値を上げても解決しなさそうなので許容としましょう。これで終わりでもいいような気もするけど、検索の利便性のためにテキストファイルへの変換をやってみましょうかね。次回に続く。参考文献 - 性根の曲がった男のこと 2020/05/06人類……キングレオ4話……。もうキングレオのこと何もわからねぇよ……。「このミステリは名探偵と助手の関係をお楽しみ頂くため邪魔にならない程度の差し障りのない推理をお楽しみいただく作品です」じゃなくなったのか……?思えば冒険を単行本で読んで衝撃を受けてから5年……。覇権になって欲しいぜ!とかやんや言い続けてきたけど……。そして私が応援していたのとは一切関係なく続編が決まってそれは今だって嬉しいと思っているが……。世界にキングレオを勧めた責任を感じており……。勿論何を読み何を感じているかは読んだ君達が決めることで作者が、ましてや推薦者が非難される謂れは一切ないのだが……。しかしそれはそれとして推薦という行為もまた私自身の信頼を賭けた価値観の表明であるわけだから……。要するに何が言いたいかというと私が責任を感じることに君達は一切関係がなく私はただ責任を感じていく……そういうことだよ……。でも冒険を読んだ時点でこんなことになるなんていくら私でも予想できないよ……許して欲しい……。うゆう、こたつの似合う男。獅子丸は人生について考え始めないで……。なんか死にそうに見えて不安だから……。>「余計な馬鹿を晒すな。黙ってろ」本日の罵倒かわいい獅子丸。軽犯罪を思い浮かべるうゆうの憎めねえ小物感もかわいい。うゆうはいいヤツなんだよ。獅子丸、身内(広義の)年上には割と礼儀正しいところがあり、かわいい。ウワーーーーッ存在はずっと唆されていた城坂家兄!!!そう、城坂論語、あんな一人っ子みたいな顔しておいて弟なんですよね……。論語君に小学生と中学生時代があったということ、もっと言うと血縁が存在するということが城坂論語の人間感を示すもので新鮮だ。兄の名前春秋なのか。もしかして……別冊文藝春秋!? (No.)陽虎といい、微妙に対にはならないのが論語君にベター・ハーフはいないことを痛感させられる。クリアしたゲームのデータを消さない獅子丸。身内と認めた人間の好感は絶対に覆らない獅子丸……。大河は怒ったり人間をブロック塀に叩きつけたり忙しいのに獅子丸のほうが静かなのもうダメだ。獅子丸がふわりと微笑む(ふわりと微笑む!?いい加減にしてくれ)の、美人薄命というか残された時間が短い感あり、やめて欲しい。死ぬな。それは論語君の特許ですよ。一年の失踪期間を加味すると獅子丸は26、27かそれより上のはずなのですが(https://twitter.com/vanmadoy/status/1058537006668505088)、ふと獅子丸は幼い頃に得たたった一人の理解者を敵に回してこれから50年程続く人生をずっと一人ぽっちで生きていくのかよと思ったらめちゃくちゃしんどくなってしまった。あの時論語を追いかけてなかったらこうなっていなかったのか?「名探偵だって自分のことを解って欲しいんだよ」って大河が言った……。はぁ……。そういえばこの感想を書くために毎度冒険と回想と今回は河原町とさらに原典まで並べて勝手にダメージを受けているんですけど(原作のホームズとワトソンは仲良くお出かけしていて羨ましいよ)、なにげに大河の家庭を持ちたいという欲求みたいなこところは回想が単行本化する際に加筆修正されてたんだな。まぁそもそも原典から言ってワトソンは家庭持ちだが……。さりげなく柏手を打つな。そういう単語じゃないだろ。>「いい加減、不愉快なんだよ」わーん……ついに怒った……。本日は情緒がウェットなので、最早ここまで来ると「離婚調停」という言葉でコメディタッチにされると逆にそれは状況を軽薄に見ることにつながっているのではないか?という気がしてきた。我々が推しカプの離婚調停が見たーい!と主張する時にそれが意味するのは可愛さ余って憎さ百倍ドタバタラブコメディ、もしくは切ないすれ違いと予定調和の様相であってこういうリアルな「無関心」じゃないだろ。ここにあるのはただただ人間が人間を諦めた結果そこにある離別ですよ……。感情がねぇという状況を見せられても困るんだって……。>「そこそこ大河のセンスだな」→減点だはいかわいい………………。獅子丸が一人ぼっちでかわいいことだけが世界の真実……。よしのよしのさんだーっ!なんか嬉しい……。吉野さんが論語君のこと我が子のように思っていて河原町で真っ先に食事の心配していたのが好きなんだよ。論語君がな、大事にされると嬉しい。論語君が兄を馬鹿にしないの解釈合ってて超最高。論語君にとって馬鹿にするのは極上の愛情表現なので(みかがさんの話をしておる)。兄の宿題を手伝う城坂論語何?!??!?人間じゃん……。「バイスプレジデント」「アドバイザー」のルビうぜ~!いいなこれ。そのままカタカナで書くのではなくあえてルビ振ってにしているところでこう……学生起業家感が出ているな(オブラート表現)。踊る人魚が出てくることで世界がつながっている感覚がありこういうのに無条件に好きだ。そう……冒険と……帰還は同一世界線……。同一シリーズ……。うっ……。テーブル折丸、元気がよくて嬉しいですね。レオにこれができるか!?どうよ大河!?行為もできないよ……。どうよ……。「キングレオ性」に続き「論語性」まで出た……。なんなのその変な〇〇性……。「論語」が既存の固有名詞だからますます変な感じに……。>『お前の声を聞き間違える筈がないだろう』きっっっしょくわるっ!ドン引きですよ!意図して表現されたものだろうから、もう、すごいよ!!!読者も大好きな冒険屈指の名シーンをAI加工すな!大河やっぱりデレ仕様になるようにパラメーター調整しとらん?気持ち悪いぞマジで。本人の前でやらないで>「悔しいが獅子丸しかいないんだ」獅子丸……ちょろ丸……大体お前ドラマの俳優なんかできないでしょ……。結局回想で飛び降りなかったとしても待っていたのはこういう待遇な訳で、どちらにしても獅子丸の幸せなんてなかったのかもしれん。どうして……。今回ミステリでよかったな……。論語のノートが兄の手で売っ払われていたのも納得だし……。最終話に向けてなんか盛り上がっとる!!!探偵と助手の物語は完全においていかれたのに!主題どこいったの!だから言ったじゃん!論語君出てくると全部を乗っ取るって!!!でも次回論語君(論語君ではないです)の語りがいきなり聞けるのは正直嬉しい……。論語君の退場に未練はないので自分でもこの感情は意外だが……。これが大河の気持ちだったってことか……?大河には獅子丸と離別した一年がある訳で……やはりそこを何も聞けていないのに……獅子丸の肩ばかり持つのはよくないかもしれん……嘘……やっぱり獅子丸の肩持つ……。論語君のAIが誰の意志なのか考えてたんですけどもともとはサントアリオが慈恩のために開発していて、回想の最後で「死を観測されない限り、僕は生き続けますよ」とか言っているので、論語君が準備したものの可能性があるな……。獅子丸、大河、あと落花に関してはマジで続刊があるんじゃないかな~と思っている……。思っているけど、それはそれで帰還でされたことは忘れん……。それに無関心からの続刊があったとしてそれを信じられるのか……?読者は獅子丸ではないのですが……。キングレオが10巻続くシリーズならそれもわかるけどリミットはあと2巻である訳で……。もうキングレオのこと何もわからねぇよ……。
- 春に買って嬉しかったもの 2020/05/04最近買って嬉しかったもの(買ってよかったものは君が君の金で買ってから君の価値観で決めるんだ)の話をします。・乾燥機付き洗濯機https://jp.sharp/sentaku/products/ess7d.htmlこれまで住んできた家が共用洗濯機つきの家だったので初めての購入だったが、奮発した。洗濯という家事は様々な観点から本当に最悪だったから。1. そもそもゴミが取れない洗濯機が古かったとか洗濯物を入れすぎとかそういう事情もありそうだが、フリース生地の服が洗濯機内でゴミを吸着しまくり、洗濯が終わった後にそれをコロコロで取るという作業が発生して最悪。フリース以外もはたくとホコリ出るし。なんでよ。洗っているにも関わらずゴミがついているので、油汚れ等についても本当に落ちているか疑念が生じてくるのが最悪。ニューで高等な洗濯機になってゴミが取れるようになった。洗濯パートと乾燥パートで2箇所ゴミ受けがあるのだが、洗う度にそこのホコリを掃除するのが楽しい。取れておるわい、と思うので。2. 干す際の整形は無価値これは私が言うまでもなく全人類が気がついていることと思うが干して畳むという作業は完全に無駄。着る(服の形)→洗濯(無秩序な形)→干す(服の形)→畳む(収納に相応しい形)→着る(服の形)のうち、干している部分の整形作業は何の意味もない。耐えられんよこんなことは。このうちどこかを省略するとしたら論理的に考えて選択肢は「服の形のままクローゼットに収納」か「干す作業をスキップする」しかない訳だから。でも論理的に考えると最も相応しいあり方は洗濯機がでかい部屋みたいになって「干した形のまま洗濯から収納まで一つの部屋で終わる」ことだ。そういう技術が開発された暁にはいち早く言及した貢献を評価して私が利用できるようにして欲しい。3. 干すのが面倒外は暑いし寒い。雨の様子とか気にしなきゃいけないのも嫌。そういうのは山にいる時だけで十分。私は服に何も、全く、一切の興味がないのだが、興味がないからこそ服に関心を払いたくない。触っていたくもない。だからお金を払って手間をスキップする。よかったよかった。・食洗機https://panasonic.jp/dish/p-db/NP-TCM4.htmlドラム式洗濯機に続き所謂現代の三種の神器。これが欲しくて引っ越しの時に広い台所を条件にしたくらいだ。食器を洗うという作業はマジで最悪だから。そもそも飯を作るという偉業を達成しているのに何故その上で更に働かなくてはならない?飯を作る作業はいいよ。創作だし。生産的だし。片付けは嫌でしょ。労働だよ。なんで飯を作るという褒められるべき作業をしたというのにその結果労働が発生するのか。作業が発生するタイミングも嫌。食事した後に働きたくない。その癖洗わないと飯を作る作業が滞る。食器は無限ではないので。逆に言うと食洗機を導入して飯を作るハードルが下がった。最高。あとでスーパー行こ。たらこパスタ作りたい。あとこれが全部と言えば全部だが、手が荒れる。皮膚弱いのに。洗濯物も手が荒れるから触りたくなかったところがある。これで残す濡れ家事は風呂掃除だけだ。あれも擦らずに済むスプレーが最近はあるらしい……。食洗機、聞いてはいたがやや癖がある。どうしても場所を取るし、このサイズだと調理器具が入らなかったりする。あと食器の詰め方に工夫がいるとか(絶対に洗えてないだろって箇所が洗えていたりして謎)。でも、もうそういう癖も含めて君と付き合っていくって決めたよ……一生……。嘘じゃない、見てくれ、君のためにハンドルが取れる鍋だって買ったんだ……。・コーヒーメーカーhttps://www.delonghi.co.jp/products/detail/id/445コーヒーを抽出する作業は前2つに比べるとそこまで最悪ではない。でもコーヒーを抽出している時間は台所に立ってティファールを持って完全に「コーヒーを抽出する」という作業にかかりきりになる。何様なんだ。たかが飲み物の分際で強気に出たな。毎日飲まれるからってつけあがるな。今は粉を用意しているけど豆からでもいいなと思っている。ミルで惹く作業はつけあがってもよい。楽しそうだから。コーヒーの味って正直そこまでわからないけどアロマ機能で淹れるとおいしい。赤いし小さくてかわいい。満足。・サボテンなんかやたら花がつく。見てると元気になる。
- 読書メーターからブクログに読了本のデータを移行する 2020/05/04
5年位前から読書メーターで読みたい本と読み終わった本と感想の管理をしていたのだが、だんだん非公開にできないのが不満になってきた。これは読書メーターが読書好きが集まるSNS(率直にいってXXXXXだ)を標榜しており5年前の私がそれに気が付かなかったから仕方がないことなのだが、読む本もそこに書く感想も割と赤裸々なものがあり、一切非公開にできないのは、ちょっと。 思想の自由を守れ。
耐えきれなくなったので1年前にブクログに移行した。その際、読みたい本一覧についてはどうしようもないので選別も兼ねて手動でデータを移行した。これは読書メーターがXXXXXなサービスでインポートサービスがあるにも関わらずエクスポートサービスがないから。ちなみにブクログはどちらもある。150冊くらいデータがある読了本(シリーズは最初の一冊しか登録してなかったり職の本を端折ったりしているから実際は多分5年でもうちょい読んでますよ:読書する人間的自意識主張)に関しては、流石に手作業で移行するのは面倒でそのまま置いておいた。スクレイピングとやらができれば抽出できると知ったけど、Rのその辺りはよくわからなかったので諦めた。1年前の私に解説すると、スクレイピングとはそのパソコンに命令して君の代わりにネット上の情報収集をやらせることでありこれをすると例えば昔書いたスコアアタックモデルのデータ入力パートが省略できるようになったりするよ。そういう状況だったのだが春に転職してあれがそっち系になったので、pythonの練習をかねてコードを書いた。これでXXXXXサービスとはおさらば。ヨッシャッ!まず読書メーターのどのページから情報を拾ってくるか決める。一年程前に書かれた記事によると、当時は読んだ本まとめみたいなコードが生成できたらしいのだが、読書メーターの仕様変更で一切できなくなっていた。すごいな。こんなに早く一方的に情報が無価値になることがあるのか。ログインしたあとの読書管理ページのリストから拾うことにした。これは若干失敗で、読了本とそれ以外(未読本とか)のページの書式が違ったので、読了本にしか使えないコードになっちゃった。まぁいっか……。#ログインfrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom lxml import htmlimport timechrome_options = webdriver.ChromeOptions()driver = webdriver.Chrome(options=chrome_options)driver.get(“https://bookmeter.com/login”)# ID/PASSを入力id = driver.find_element_by_id(“session_email_address”)id.send_keys(“YYYYY”)password = driver.find_element_by_id(“session_password”)password.send_keys(“ZZZZZ”)time.sleep(1)# ログインボタンをクリックlogin_button = driver.find_element_by_name(“button”)login_button.click()できた~。うれし~。ブクログにインポートする時に必要なデータを調べる。ISBN(13桁)が読書メーター側のリストに入ってなかったので面倒だなと思ったけど、これは必ずしも必要ないことがわかった。最低限必要なのはASIN(カンフージェネレーション)だけみたいだ。あとはレビューと読了日付を引っ張ってきたいな。#読了日付リストdate_list = []for i in range(1,9):url = “https://bookmeter.com/users/WWWWW/books/read?display_type=list&page={}”.format(i)driver.get(url)date = driver.find_elements_by_class_name(“detail__date”)for i in date:date_list.append(i.text)time.sleep(1)読了日付はユニークなクラス名があるので難しくなかった。#ASIN関数import redef extract_asin(string):asin = re.search(pattern=r”(?<=asin\”:\”).+?(?=\”)”, string=string)return asin.group()#review関数def extract_rev(string):review = re.search(pattern=r”(?<=\”review\”:{\”text\”:\”).+?(?=\”)”,string=string)if(review is None):return “”else:return review.group()#ASINとレビューのリストasin_list = []rev_list = []for i in range(1,9):url = “https://bookmeter.com/users/WWWWW/books/read?display_type=list&page={}”.format(i)driver.get(url)#モーダルウィンドウcontent = driver.find_element_by_class_name(“detail__edit”)content2 = content.find_element_by_xpath(“div”)string = content2.get_attribute(“data-modal”)content_list = driver.find_elements_by_class_name(“detail__edit”)for i in range(len(content_list)):content2 = content_list[i].find_element_by_xpath(“div”)string = string = content2.get_attribute(“data-modal”)asin_list.append(extract_asin(string))rev_list.append(extract_rev(string))time.sleep(1)こっちが面倒だった……。モーダルウィンドウとかいうページ上で立ち上がるウィンドウがあるのだが、その要素の指定の仕方がわからなかった。クラスで名指ししようとしてもエラーが出るし……。結局モーダルウィンドウの手前のdivを指定してから、階層を一つ下げてパスで指定した。なんでこれでうまくいくのか一切わからん。詳しい人がいたら教えて下さい。モーダルウィンドウの中身の取り出し方も最初わからなかった。多分こっちはget_attributeであっていると思う。出てくる文章は200文字くらいのタグ等含む文字列なのであとは正規表現で取り出し。正規表現もよくわからね~。宇宙人の言語か?見た目が記号の乱舞になるので本当に宇宙人の言語みたいに見える。正規表現って100年くらい歴史があるらしいけど、作った人絶対面白がってやったでしょ。import pandas as pdimport csvdate_list2 = list(map(lambda x: str(pd.to_datetime(x, format=”%Y/%m/%d”)), date_list))df = pd.DataFrame({“serviceID”: “1”,“itemID”:asin_list,“ISBN”:””,“category”:”-“,“eval”:””,“statement”:”読み終わった”,“review”:rev_list,“tag”:”読メ”,“memo”:””,“regist_date”:date_list2,“finish_date”:date_list2})df.to_csv(“out.txt”, encoding=”cp932″, sep=”,”, index=False,header=False, quoting=csv.QUOTE_ALL)あとはブクログの形式にあわせてデータフレームで加工。encordingはさくっといったけどquotingとダブルクオーテーション挿入の仕様がいまいちわからずしばし苦戦。できた~!丸一日かかった~!面白かったからまぁいいか~。