何切る

Twitterが凍結されてしまって手持ち無沙汰なので、麻雀の話をします。

福地先生のnoteで見かけました。ドラは9sです。

東一局2巡目親
46679m34479p59s北北

ここから北を切って、その理由がタンヤオ。すごすぎるわ(;・∀・) 最初から俺の想像力の範疇からは絶対に出てこない答えだった。

なお、俺が切ったのは9m。ドラの9sを切ってもいい。その2つ以外は俺的にはない。

ふんわり勢の麻雀観|福地誠「現」天鳳名人位|note

「その2つ以外は俺的にはない。」と福地先生はおっしゃっていますが、私なら5sや4pを候補に入れたいです。ブロックは足りていますし456や345の三色は少し苦しいはずです。

一人麻雀練習機の結果です。5sが期待値最大で、その次が9mです。4pは下から2番目かあ。4pはともかく5sは打牌候補として、十分に可能性があると言って構わないのではないでしょうか。

結果論ですがもし5s切りだと、次順9mツモで

466799m34479p9s北北

この牌姿です。ここから4m切りで本譜より戦えそうな気がします。

個人批判するようでやはり何切るは苦手ですね。麻雀の話をするなら、もっと別のやり方を考える必要がありそうです。

wedata:400のexampleUrlを分割した

wedata.net
まだ他のコーダーの皆さんに受け入れられるかわかりませんが、意図を書いておきます。

pageElementを基準に分割しています。以前述べたように、400のpageElementはざっくり3つに大別されます。
tanyao.hatenadiary.jp
パターン1

//article

パターン2

//*[starts-with(@id,'post-')]

パターン3

id('content')/div[contains(@class,'post')]

この3つですね。ならば3つに分ければいいのではと思われるでしょうが、重複を考慮する必要があります。具体的には1と2、2と3が両者とも同時に適用される可能性がありますから計5パターンの分岐が存在します。XPathで書くと
exampleUrl_a

//article

exampleUrl_b

//*[starts-with(@id,'post-')]

exampleUrl_c

//article[starts-with(@id,'post-')]

exampleUrl_d

id('content')/div[contains(@class,'post')]

exampleUrl_e

id('content')/div[starts-with(@id,'post-')][contains(@class,'post')]

こんな感じです。exampleUrl_cがexampleUrl_a(パターン1)とexampleUrl_b(パターン2)の重複、exampleUrl_eがexampleUrl_b(パターン2)とexampleUrl_d(パターン3)の重複です。nextLinkに関してはまったく考慮していません。

従来通りだと多すぎて管理に支障が出ると判断しました。かなりの数を削除しています。見落としがあるかもしれません。

アンカーリンクの生成

r.gnavi.co.jp

頼むからアンカーリンクをつけてくれ!!

tenjinjinのブックマーク / 2020年7月29日 - はてなブックマーク

対応しているのはChromeのみですが、こちらの方法でページ内リンクを生成しました。
www.suzukikenichi.com
【(各都道府県名)】の箇所にリンクを貼っています。DOMノードの関係で大阪は諦めました。近隣の都道府県から飛んでください。

北海道
青森
岩手
宮城
秋田
山形
福島
茨城
栃木
群馬
埼玉
千葉
東京
神奈川
新潟
富山
石川
福井
山梨
長野
岐阜
静岡
愛知
三重
滋賀
京都
兵庫
奈良
和歌山
鳥取
島根
岡山
広島
山口
徳島
香川
愛媛
高知
福岡
佐賀
長崎
熊本
大分
宮崎
鹿児島
沖縄

Generic Posts Rule pageElement(wedata:400)を解説?


お役に立つとは思えませんが他にも気になっている方がいるかも知れません。私なりにごく簡単な解説を入れます。

(//article[not(contains(../@class,'widget'))][not(contains(@class,'columns four'))][not(contains(@class,'side-contents'))][not(ancestor::*[starts-with(@class,'sidebar')])][not(ancestor::*[contains(@class,'featured') and not(self::body)])]|//*[starts-with(@id,'post-')][not(contains(@id,'nav'))][not(contains(@id,'post-rating'))])[not(.//*[contains(@class,'admz')])][not(self::h2)][not(self::h3)][not(ancestor::*[@id='side' or @class='pickup'])][not(ancestor::aside)][not(id('load-more-posts') or @id='fpost' or contains(@class,'carousel'))][parent::node()[not(@id='side')][not(contains(@class,'thumbnail'))][not(following-sibling::*[not(@id='side')][article or *[starts-with(@id,'post-')]])]/*[self::article or starts-with(@id,'post-')]/following-sibling::*[self::article or starts-with(@id,'post-')][not(contains(@id,'nav'))]]|id('content')[count(div)>1]/div[contains(@class,'post')][not(contains(div/@class,'breadcrumb'))][not(contains(div/@class,'nav'))]

とんでもなく長いXPathですが構造自体はそれほど複雑ではない…はずです。多分。条件式を省いていけば

//article
//*[starts-with(@id,'post-')]
id('content')/div[contains(@class,'post')]

の3つです。実際に更新履歴から2016年の原型をたどると
http://wedata.net/items/400?rev=140619

(//article|//div[starts-with(@id,'post-')])[not(id('load-more-posts') or ancestor::article or ancestor::*[starts-with(@id,'post-') or @id='fpost'])]|id('content')/div[contains(@class,'post')]

これくらいならかわいいものですね。(メガトン構文で)前述したようにここから多野さん(Tanookirby)はデザインへの影響を抑える目的で複雑な条件式を付け加えざるを得ませんでした。その努力の結果、影響は最小限に抑えられています。現状は400の存在を前提にsiteinfoの管理が行われています。

つまりは400のXPathを下手に削ればデザインへ影響が出る可能性が高く、400自体を削除すれば機能しないサイトが大量に出ます。

現状がそれほど問題だとは思っていません。400へのダミーコードはGrieverさんのおかげで2つまでに減りました。*1もし不具合のあるサイトがあれば教えてほしいですが、実用上は拡張側の設定で各個URLを無効化してしまえば十分でしょう。

以上です。意欲のある方は頑張ってください。

*1:2020.7.21現在は3つです

なぜダミーコードが必要なのか

AutoPagerizeのsiteinfo(各サイトの設定)をよく書いているのですが、下の画像のように本来ページ中のコンテンツを繋ぐのに必要ないはずのsiteinfoを書く場合があります。

wedata.net
私はこれをダミーコードと呼んでいます。なぜこれを書く必要があるのかを説明します。

siteinfoの中には、個別のサイトにおいてのみ機能するケースと多くのサイトで機能するのを前提に書かれているケースが存在します。多くのサイトで機能する例はこんな感じです。

wedata.net

本来siteinfoが動作してデザインが崩れる場合は当然該当するsiteinfoを修正します。しかし多くのサイトで機能するsiteinfoに手を入れてしまうと様々なサイトにおいて影響が大きくデザインが崩さない為に神経を使う作業が必要です。だから、上の画像のように長いXPathを書く必要があったんですね。(メガトン構文)

またコメントで事実上削除を禁止しているsiteinfoも存在します。
wedata.net

本 SITEINFO を無効または削除などせずに、適切な対応をされることを期待します。

アイテム: hAtom - データベース: AutoPagerize - wedata

デザインを維持する目的でこのようなsiteinfoの編集は極力避けたいです。またURLの適用範囲が広いので本来動作すべきでないページで動作している場合もあります。これらの対策としてできる限り目立たないようデザインへの影響を抑え、より優先して機能させる目的で個別のsiteinfoを書く場合があります。それがダミーコードです。

書いているうちにどのsiteinfoがどのsiteinfoに対してのダミーなのかよくわからなくなってきたのでコメントに記載しました。ダミーがない場合の具体的な動作は実際に削除して確認していただければと思います。

wedata.net
http://wedata.net/items/85443
http://wedata.net/items/85337
http://wedata.net/items/80835
http://wedata.net/items/63303

wedata.net
http://wedata.net/items/85432
http://wedata.net/items/82193
http://wedata.net/items/82120